dispcalGUI-1.7.1.6/000755 000765 000000 00000000000 12266723171 013625 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/000755 000765 000000 00000000000 12266723170 016110 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/000755 000765 000000 00000000000 12266723170 015610 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI.pyw000755 000765 000000 00000000717 12147653634 016366 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- # Python version check import sys from dispcalGUI.meta import py_minversion, py_maxversion pyver = sys.version_info[:2] if pyver < py_minversion or pyver > py_maxversion: raise RuntimeError("Need Python version >= %s <= %s, got %s" % (".".join(str(n) for n in py_minversion), ".".join(str(n) for n in py_maxversion), sys.version.split()[0])) from dispcalGUI.dispcalGUI import main main()dispcalGUI-1.7.1.6/LICENSE.txt000644 000765 000000 00000104513 12025152313 015437 0ustar00svpwheel000000 000000 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 . dispcalGUI-1.7.1.6/man/000755 000765 000000 00000000000 12266723171 014400 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/MANIFEST.in000644 000765 000000 00000010121 12266723147 015361 0ustar00svpwheel000000 000000 # This file will be re-generated by setup.py - do notedit include LICENSE.txt include MANIFEST include MANIFEST.in include README.html include dispcalGUI.pyw include use-distutils include setup.py include setup.cfg include screenshots/dispcalGUI-screenshot-GNOME-adjust-thumb.png include screenshots/dispcalGUI-screenshot-GNOME-adjust.png include screenshots/dispcalGUI-screenshot-GNOME-edit-testchart-thumb.png include screenshots/dispcalGUI-screenshot-GNOME-edit-testchart.png include screenshots/dispcalGUI-screenshot-GNOME-gamutmap-thumb.png include screenshots/dispcalGUI-screenshot-GNOME-gamutmap.png include screenshots/dispcalGUI-screenshot-GNOME-measure-thumb.png include screenshots/dispcalGUI-screenshot-GNOME-measure.png include screenshots/dispcalGUI-screenshot-GNOME-thumb.png include screenshots/dispcalGUI-screenshot-GNOME-view-curves-thumb.png include screenshots/dispcalGUI-screenshot-GNOME-view-curves.png include screenshots/dispcalGUI-screenshot-GNOME.png include screenshots/dispcalGUI-screenshot-KDE4-thumb.png include screenshots/dispcalGUI-screenshot-KDE4.png include screenshots/dispcalGUI-screenshot-Mac-thumb.png include screenshots/dispcalGUI-screenshot-Mac.png include screenshots/dispcalGUI-screenshot-report-thumb.png include screenshots/dispcalGUI-screenshot-Win7-thumb.png include screenshots/dispcalGUI-screenshot-Win7.png include theme/bg.png include theme/dispcalGUI-adjust-reflection.png include theme/dispcalGUI-main_window-reflection.png include theme/icon-reflection.png include theme/list-dot.png include theme/refresh_lr.png include theme/readme.css include theme/jquery.js include theme/jquery.localscroll.js include theme/jquery.scrollTo.js include theme/readme.js include theme/slimbox2/slimbox2.css include theme/slimbox2/slimbox2.js include theme/icons/favicon.ico include README.html include LICENSE.txt include dispcalGUI/RealDisplaySizeMM.c include dispcalGUI/*.py include dispcalGUI/*.so include dispcalGUI/argyll_instruments.json include dispcalGUI/beep.wav include dispcalGUI/camera_shutter.wav include dispcalGUI/pnp.ids include dispcalGUI/lang/*.json include dispcalGUI/presets/*.icc include dispcalGUI/quirk.json include dispcalGUI/ref/*.cie include dispcalGUI/ref/*.gam include dispcalGUI/ref/*.icm include dispcalGUI/ref/*.ti1 include dispcalGUI/report/*.css include dispcalGUI/report/*.html include dispcalGUI/report/*.js include dispcalGUI/theme/*.png include dispcalGUI/theme/icons/10x10/*.png include dispcalGUI/theme/icons/16x16/*.png include dispcalGUI/theme/icons/32x32/*.png include dispcalGUI/theme/icons/72x72/*.png include dispcalGUI/ti1/*.ti1 include dispcalGUI/xrc/*.xrc include dispcalGUI/linear.cal include dispcalGUI/test.cal include dispcalGUI/theme/icons/22x22/*.png include dispcalGUI/theme/icons/24x24/*.png include dispcalGUI/theme/icons/48x48/*.png include dispcalGUI/theme/icons/256x256/*.png include dispcalGUI/lib/*.py include dispcalGUI/lib/*.so include dispcalGUI/lib/agw/*.py include dispcalGUI/lib/agw/*.so include dispcalGUI/lib32/*.py include dispcalGUI/lib32/*.so include dispcalGUI/lib32/python25/*.py include dispcalGUI/lib32/python25/*.so include dispcalGUI/lib32/*.py include dispcalGUI/lib32/*.so include dispcalGUI/lib32/python26/*.py include dispcalGUI/lib32/python26/*.so include dispcalGUI/lib32/*.py include dispcalGUI/lib32/*.so include dispcalGUI/lib32/python27/*.py include dispcalGUI/lib32/python27/*.so include dispcalGUI/lib64/*.py include dispcalGUI/lib64/*.so include dispcalGUI/lib64/python25/*.py include dispcalGUI/lib64/python25/*.so include dispcalGUI/lib64/*.py include dispcalGUI/lib64/*.so include dispcalGUI/lib64/python26/*.py include dispcalGUI/lib64/python26/*.so include dispcalGUI/lib64/*.py include dispcalGUI/lib64/*.so include dispcalGUI/lib64/python27/*.py include dispcalGUI/lib64/python27/*.so include dispcalGUI/theme/theme-info.txt recursive-include dispcalGUI/theme/icons *.icns *.ico recursive-include autopackage * include man/*.1 recursive-include misc * include screenshots/*.png include scripts/* include tests/* recursive-include theme * recursive-include util *.cmd *.py *.sh global-exclude *~ global-exclude *.backup global-exclude *.bakdispcalGUI-1.7.1.6/misc/000755 000765 000000 00000000000 12266723171 014560 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/PKG-INFO000644 000765 000000 00000003375 12266723171 014732 0ustar00svpwheel000000 000000 Metadata-Version: 1.1 Name: dispcalGUI Version: 1.7.1.6 Summary: A graphical front-end for display calibration and profiling using Argyll CMS Home-page: http://dispcalGUI.hoech.net/ Author: Florian Hoech Author-email: dispcalGUI@hoech.net License: GPL v3 Download-URL: http://dispcalGUI.hoech.net/dispcalGUI-1.7.1.6.tar.gz Description: Calibrates and characterizes display devices using a hardware sensor, driven by the open source color management system Argyll CMS. Supports multi-display setups and a variety of available settings like customizable whitepoint, luminance, black level, tone response curve as well as the creation of matrix and look-up-table ICC profiles with optional gamut mapping. Calibrations and profiles can be verified through measurements, and profiles can be installed to make them available to color management aware applications. Profile installation can utilize Argyll CMS, Oyranos and/or GNOME Color Manager if available, for flexible integration. Platform: Python >= 2.5 <= 2.7 Platform: Linux/Unix with X11 Platform: Mac OS X >= 10.4 Platform: Windows 2000 and newer Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: MacOS X Classifier: Environment :: Win32 (MS Windows) Classifier: Environment :: X11 Applications Classifier: Intended Audience :: End Users/Desktop Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python :: 2.5 Classifier: Programming Language :: Python :: 2.6 Classifier: Programming Language :: Python :: 2.7 Classifier: Topic :: Multimedia :: Graphics Requires: wxPython (>= 2.8.6) Provides: dispcalGUI dispcalGUI-1.7.1.6/README.html000644 000765 000000 00001067025 12266722146 015464 0ustar00svpwheel000000 000000 dispcalGUI—Open Source Display Calibration and Characterization powered by Argyll CMS

dispcalGUI dispcalGUIOpen Source Display Calibration and Characterization powered by Argyll CMS

Stay up-to-date and be notified of new releases by signing up to the dispcalGUI-news mailing list (unless you're already subscribed to dispcalGUI-users which also receives new release notifications).

About dispcalGUI

dispcalGUI is a graphical user interface for the display calibration and profiling tools of Argyll CMS, an open source color management system by Graeme Gill.

Calibrate and characterize your display devices using one of the many supported hardware sensors, with support for multi-display setups and a variety of available settings like customizable whitepoint, luminance, black level, tone response curve as well as the option to create matrix and look-up-table ICC profiles, with optional gamut mapping. Other features include:

  • Support of colorimeter correction for wide-gamut screens via correction matrices or calibration specral sample files (the latter only for specific colorimeters i.e. i1 Display Pro, ColorMunki Display and Spyder 4).
  • Profile verification: Check the quality of profiles via measurements. Also supports custom CGATS files (e.g. FOGRA, GRACoL/IDEAlliance, SWOP) and using of reference profiles to obtain test values.
  • Test chart editor: Create charts with any amount of color patches, easy copy & paste from CGATS, CSV files (only tab-delimited) and spreadsheet applications.

Screenshots

Thumbnail of dispcalGUI running under Linux with GNOME 3
Main window
Thumbnail of dispcalGUI running under Linux with GNOME
Gamut mapping options
Thumbnail of dispcalGUI running under Linux with GNOME
Testchart editor

Thumbnail of dispcalGUI running under Linux with GNOME
Display adjustment
Thumbnail of dispcalGUI running under Linux with GNOME
Measurements
Thumbnail of dispcalGUI running under Linux with GNOME
Calibration curves

Thumbnail of dispcalGUI running under Linux with KDE4
KDE4
Thumbnail of dispcalGUI running under Mac OS X
Mac OS X
Thumbnail of dispcalGUI running under Windows 7
Windows 7

Disclaimer

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.

dispcalGUI is written in Python and uses the 3rd-party packages NumPy, demjson (JSON[6] library) and wxPython (GUI[4] toolkit). It also makes extensive use of several Argyll CMS utilities. The build system to create standalone executables additionally uses setuptools and py2app on Mac OS X or py2exe on Windows. All of these software packages are © by their respective authors.

Get dispcalGUI

Please note: Argyll CMS is a separate download.

Quickstart guide

This short guide intends to get you up and running quickly, but if you run into a problem, you should refer to the full prerequisites and installation sections.

  1. Get and install the latest release of dispcalGUI. It is recommended to first remove all previous versions.

  2. Download and unpack Argyll CMS: Linux | Mac OS | Windows. Put the extracted directory (Argyll_VX.X.X) in a convenient place on your harddisk.

    If you want to use the HCFR colorimeter under Mac OS X...

    Follow the instructions under “installing Argyll CMS on Mac OS X” in the Argyll CMS documentation.

  3. Launch dispcalGUI. If it cannot determine the path to the Argyll CMS binaries, it will prompt you to select the location manually on first launch.

    If your measurement device is a i1 Display Pro, ColorMunki Display or Spyder 4...

    You'll want to import the colorimeter corrections that are part of the i1 Profiler or ColorMunki Display software package, which can be used to better match the instrument to a particular type of display.

    Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the i1 Profiler or ColorMunki Display software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the software's setup executable. Select the ColorMunki Display PC (Windows) Setup or i1 Profiler PC (Windows) Setup regardless of your actual operating system (both files contain the same set of colorimeter corrections, the ColorMunki software is a slightly smaller download).

    If your measurement device is a Spyder 4, you'll also want to enable additional measurement modes for that particular instrument.

    If your measurement device is a Spyder 2...

    The Spyder 2 needs the vendor firmware pattern to function.

    Choose “Enable Spyder 2 colorimeter...” from dispcalGUI's “Tools” menu. If the Spyder 2 software is installed or its installation media is inserted, the Spyder 2 can be enabled automatically, otherwise you will have to manually select the Spyder 2 software's setup executable. Select the Spyder 2 Setup for Windows regardless of your actual operating system.

    If your measurement device is a Spyder 4...

    The full range of measurement modes for the Spyder 4 are only available if they are imported from the Spyder 4 software.

    Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the Spyder 4 software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the Spyder 4 software's setup executable. Select the Spyder 4 Setup for Windows (choose one of Elite, Express, HD or Pro) regardless of your actual operating system.

  4. Connect your measurement device to your computer.

    Windows only: If your measurement device is not a ColorMunki Display, i1 Display Pro or Huey, you need to install an Argyll-specific driver. See “Driver installation under Windows”.

    Click the small icon with the swirling arrows in between the “Display device” and “Instrument” controls to detect connected displays devices and instruments. The detected instrument(s) should show up in the “Instrument” dropdown.

    Linux only: If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot. If that doesn't help, read “Installing Argyll CMS on Linux: Setting up instrument access”.

  5. Refer to the documentation for usage instructions.

System requirements and other prerequisites

General system requirements

  • A recent Linux, Mac OS X (10.4 or newer) or Windows (XP/Server 2003 or newer) operating system.
  • A graphics card with at least 24 bits per pixel (true color) support and the desktop set up to use this color depth.

Argyll CMS

To use dispcalGUI, you need to download and install Argyll CMS (1.0 or newer).

Supported instruments

You need one of the supported instruments to make measurements. All instruments supported by Argyll CMS are also supported by dispcalGUI. For display readings, these currently are:

Colorimeters

  • Calman X2 (treated as i1 Display 2)
  • Datacolor/ColorVision Spyder 2
  • Datacolor Spyder 3 (since Argyll CMS 1.1.0)
  • Datacolor Spyder 4 (since Argyll CMS 1.3.6)
  • HP Advanced Profiling Solution (treated as i1 Display 2)
  • HP DreamColor (treated as i1 Display 2)
  • Hughski ColorHug (experimental only, does not work reliably on all platforms, especially on Mac OS X. Linux support since Argyll CMS 1.3.6, Windows support with newest ColorHug firmware since Argyll CMS 1.5.0)
  • Lacie Blue Eye (treated as i1 Display 2)
  • Sequel Imaging MonacoOPTIX (treated as i1 Display 1)
  • X-Rite ColorMunki Create (treated as i1 Display 2)
  • X-Rite ColorMunki Smile (since Argyll CMS 1.5.0)
  • X-Rite DTP92
  • X-Rite DTP94
  • X-Rite/GretagMacbeth/Pantone Huey
  • X-Rite/GretagMacbeth i1 Display 1
  • X-Rite/GretagMacbeth i1 Display 2/LT
  • X-Rite i1 Display Pro, ColorMunki Display (since Argyll CMS 1.3.4)

Spectrometers

  • JETI specbos 1211/1201 (new in Argyll CMS 1.6.0 beta)
  • X-Rite ColorMunki Design, ColorMunki Photo (since Argyll CMS 1.1.0)
  • X-Rite/GretagMacbeth i1 Monitor (since Argyll CMS 1.0.3)
  • X-Rite/GretagMacbeth i1 Pro
  • X-Rite/GretagMacbeth Spectrolino

Note that the i1 Display Pro and i1 Pro are very different instruments despite their naming similarities.

Also there are currently (2011-09-02) four instruments (or rather, packages) under the ColorMunki brand, two of which are spectrometers, and two are colorimeters:

  • The ColorMunki Design and ColorMunki Photo spectrometers differ only in the functionality of the bundled vendor software. There are no differences between the instruments when used with Argyll CMS and dispcalGUI.
  • The ColorMunki Display colorimeter is a less expensive version of the i1 Display Pro colorimeter. It comes bundled with a simpler vendor software and has longer measurement times compared to the i1 Display Pro. Apart from that, the instrument appears to be virtually identical.
  • The ColorMunki Create colorimeter is the same instrument as the i1 Display 2.

Additional requirements for unattended calibration and profiling

When using a spectrometer that is supported by the unattended feature (see below), having to take the instrument off the screen to do a sensor self-calibration again after display calibration before starting the measurements for profiling may be avoided if the menu item “Allow skipping of spectrometer self-calibration” in the “Options” menu is checked (colorimeter measurements are always unattended because they generally do not require a sensor calibration away from the screen, with the exception of the i1 Display 1).

Unattended calibration and profiling currently supports the following spectrometers in addition to most colorimeters:

  • X-Rite ColorMunki
  • X-Rite/GretagMacbeth i1 Monitor & Pro
  • X-Rite/GretagMacbeth Spectrolino

Be aware you may still be forced to do a sensor calibration if the instrument requires it. Also, please look at the possible caveats.

Additional requirements for using the source code

You can skip this section if you downloaded a package, installer, ZIP archive or disk image of dispcalGUI for your operating system and do not want to run or compile from source.

All platforms:

  • Python >= v2.5 <= v2.7.x (2.7.x is the recommended version. Mac OS X users: If you want to compile dispcalGUI from source, it is advisable to first install XCode and then the official python.org Python)
  • NumPy
  • wxPython GUI[4] toolkit

Windows:

Additional requirements for compiling

You can skip this section if you downloaded a python package of dispcalGUI for your operating system and do not want to compile from source.

Linux:

  • GCC and development headers for Python + X11 + Xrandr + Xinerama + Xxf86vm if not already installed, they should be available through your distribution's packaging system

Mac OS X:

  • XCode
  • py2app if you want to build a standalone executable (on Mac OS X before 10.5, install setuptools first: sudo python util/ez_setup.py setuptools)

Windows:

  • a C-compiler (e.g. MS Visual C++ Express or MinGW. If you're using the official python.org Python 2.6 or later I'd recommend Visual C++ Express as it works out of the box)
  • py2exe if you want to build a standalone executable

Running directly from source without installation

One-time setup instructions:

  1. Open a shell.
  2. cd into the source directory (e.g. dispcalGUI-1.7.1.6 or dispcalgui).
  3. If you use a version from the SVN repository, run python setup.py to create the version file.
  4. Run python setup.py build_ext -i to build the extension modules (you may be able to skip this step on Linux and Mac OS X as the source already includes compiled versions of the extension modules)

You can then run python dispcalGUI.pyw (or launch it by double-clicking).

Installation

It is recommended to first remove all previous versions.

Driver installation under Windows

  • If you already have drivers for your measurement device installed...

    Read “Adding Argyll drivers to existing drivers” (if you are using vendor drivers) or “Updating Argyll drivers” (if you use a prior version of the Argyll drivers) under “Installing Argyll CMS on Microsoft Windows” in the Argyll CMS documentation.

  • If this is a fresh install...

      • If you are using Windows 8...
        1. Go to “Settings” (hover the lower right corner of the screen, then click the gear icon).
        2. Select “Power” (the on/off icon).
        3. Hold the SHIFT key down and click “Restart”.
        4. Select “Troubleshoot → “Advanced Options” → “Startup Settings” → “Restart”.
        5. After reboot, select “Disable Driver Signature Enforcement” (number 7 on the list).
        6. Open the desktop, then go to “Settings” (hover the lower right corner of the screen, then click the gear icon) → “Control Panel” → “Hardware and Sound” → “Device Manager”.
        7. Locate the instrument in the device list. It may be underneath one of the top level items (usually “Other devices”).
        8. Right click on the instrument and select “Update Driver Software...”.
        9. Select “Browse my computer for driver software”.
        10. Select “Let me pick from a list of device drivers on my computer” and then “Next”.
        11. Select “Have disk...” then “Browse...”.
      • If you are using Windows Vista/7...
        1. A “Found new hardware” dialog should appear.
        2. Select “Locate and install driver software (recommended)”.
        3. If a “User Account Control” window pops up, select “Continue”.
        4. Select “Don't search online”.
        5. Select “I don't have the disc, show me other options”.
        6. Select “Browse my computer for driver software (advanced)”.
      • If you are using Windows XP...
        1. A “Found new hardware” dialog should appear.
        2. In the window “Can Windows connect to Windows Update to search for software?” select “No, not this time” and “Next”.
        3. Select “Install from a list or specific location (advanced)” then “Next”.
        4. Select “Search for the best driver in these locations”, “Include this location in the search” and “Browse...”.
    1. Locate the “libusbw” (Argyll CMS up to 1.1.1), “libusb1” (Argyll CMS up to 1.4.0) or “usb” (Argyll CMS 1.5.0 and newer) subdirectory in your Argyll_VX.X.X directory (you may also need to select the .inf file that corresponds to your device, then select “Open” and “OK”). Select “Next”.
    2. If a “Windows Security” dialog pops up, select “Install this driver software anyway”.
    3. A window stating the successful installation of the driver should show. Click “Finish”/“Close”.

Linux package (.deb/.rpm)

A lot of distributions allow easy installation of packages via the graphical desktop, i.e. by double-clicking the package file's icon. Please consult your distribution's documentation if you are unsure how to install packages.

If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot. If that doesn't help, read “Installing Argyll CMS on Linux: Setting up instrument access”.

Linux Autopackage (.package)

Before installing the autopackage, first install wxPython (on some systems called python-wxGTK or python-wxWidgets) and NumPy using your system's package management software. To install the autopackage, follow these three steps (you only have to do it once, next time, you can just skip these steps and open the .package file directly):

  1. Click on the package with your right mouse button. Then click on the “Properties” menu item.
  2. Go to the “Permissions” tab.
    • Check the “Execute”, “Exec” or “Is Executable” checkbox. If there are more than one Execute/Exec checkboxes, check the top-most one.
    • Click “Close” or “OK”, depending on the dialog.
  3. If you already have the software installed from your distributions packages or from the source, remove it first. Then open the package file. If you are asked whether you want to display or run the package, choose “Run”.

The installation will now begin. Follow further intructions that are displayed, if any.

If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot. If that doesn't help, read “Installing Argyll CMS on Linux: Setting up instrument access”.

Mac OS X

Mount the disk image and option-drag its icon to your “Applications” folder. Afterwards open the “dispcalGUI” folder in your “Applications” folder and drag dispcalGUI's icon to the dock if you want easy access.

If you want to use the HCFR colorimeter under Mac OS X, follow the instructions under “installing Argyll CMS on Mac OS X” in the Argyll CMS documentation.

Windows (Installer)

Launch the installer which will guide you trough the required setup steps.

If your measurement device is not a ColorMunki Display or i1 Display Pro, you need to install an Argyll-specific driver. See “Driver installation under Windows”.

Windows (ZIP archive)

Unpack and then simply run dispcalGUI from the created folder.

If your measurement device is not a ColorMunki Display or i1 Display Pro, you need to install an Argyll-specific driver. See “Driver installation under Windows”.

Source code (all platforms)

See the “Prerequisites” section to run directly from source without installation.

Starting with dispcalGUI 0.2.5b, you can use standard distutils/setuptools commands with setup.py to build, install, and create packages. sudo python setup.py install will compile the extension modules and do a standard installation. Run python setup.py --help or python setup.py --help-commands for more information. A few additional commands and options which are not part of distutils or setuptools (and thus do not appear in the help) are also available:

Additional setup commands

bdist_appdmg (Mac OS X only)
Creates a DMG of a previously created (by the py2app or bdist_standalone commands) application bundle.
bdist_deb (Linux/Debian-based)
Create an installable Debian (.deb) package, much like the standard distutils command bdist_rpm for RPM packages. Prerequisites: You first need to install alien and rpmdb, create a dummy RPM database via sudo rpmdb --initdb, then edit (or create from scratch) the setup.cfg (you can have a look at misc/setup.ubuntu9.cfg for a working example). Under Ubuntu, running utils/dist_ubuntu.sh will automatically use the correct setup.cfg. If you are using Ubuntu 11.04 or any other debian-based distribution which has Python 2.7 as default, you need to edit /usr/lib/python2.7/distutils/command/bdist_rpm.py, and change the line install_cmd = ('%s install -O1 --root=$RPM_BUILD_ROOT ' to install_cmd = ('%s install --root=$RPM_BUILD_ROOT ' by removing the -O1 flag. Also, you need to change /usr/lib/rpm/brp-compress to do nothing (e.g. change the file contents to exit 0, but don't forget to create a backup copy first) otherwise you will get errors when building.
bdist_standalone
Creates a standalone executable that does not require a Python installation. Uses bbfreeze on Linux, py2app on Mac OS X and py2exe on Windows. setup.py will try and automatically download/install these packages for you if they are not yet installed and if not using the --use-distutils switch. Note: On Mac OS X, older versions of py2app (before 0.4) are not able to access files inside python “egg” files (which are basically ZIP-compressed folders). Setuptools, which is needed by py2app, will normally be installed in “egg” form, thus preventing those older py2app versions from accessing its contents. To fix this, you need to remove any installed setuptools-<version>-py<python-version>.egg files from your Python installation's site-packages directory (normally found under /Library/Frameworks/Python.framework/Versions/Current/lib). Then, run sudo python util/ez_setup.py -Z setuptools which will install setuptools unpacked, thus allowing py2app to acces all its files. This is no longer an issue with py2app 0.4 and later.
buildservice
Creates control files for openSUSE Build Service (also happens implicitly when invoking sdist).
finalize_msi (Windows only)
Adds icons and start menu shortcuts to the MSI installer previously created with bdist_msi. Successful MSI creation needs a patched msilib (additional information).
inno (Windows only)
Creates an Inno Setup install script for an executable created with the py2exe or bdist_standalone commands.
purge
Removes the build and dispcalGUI.egg-info directories including their contents.
purge_dist
Removes the dist directory and its contents.
readme
Creates README.html by parsing misc/README.template.html and substituting placeholders like date and version numbers.
uninstall
Uninstalls the package. You can specify the same options as for the install command.

Additional setup options

--cfg=<name>
Use an alternate setup.cfg, e.g. tailored for a given Linux distribution. The original setup.cfg is backed up and restored afterwards. The alternate file must exist as misc/setup.<name>.cfg
-n, --dry-run
Don't actually do anything. Useful in combination with the uninstall command to see which files would be removed.
--skip-instrument-configuration-files
Skip installation of udev rules and hotplug scripts.
--skip-postinstall
Skip post-installation on Linux (an entry in the desktop menu will still be created, but may not become visible until logging out and back in or rebooting) and Windows (no shortcuts in the start menu will be created at all).
--use-distutils
Force setup to use distutils (default) instead of setuptools. This is useful in combination with the bdist* commands, because it will avoid an artificial dependency on setuptools. This is actually a switch, use it once and the choice is remembered until you specify the --use-setuptools switch (see next paragraph).
--use-setuptools
Force setup to try and use setuptools instead of distutils. This is actually a switch, use it once and the choice is remembered until you specify the --use-distutils switch (see above).

Instrument-specific setup

If your measurement device is a i1 Display Pro, ColorMunki Display or Spyder 4, you'll want to import the colorimeter corrections that are part of the i1 Profiler or ColorMunki Display software package, which can be used to better match the instrument to a particular type of display.

Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the i1 Profiler or ColorMunki Display software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the software's setup executable. Select the ColorMunki Display PC (Windows) Setup or i1 Profiler PC (Windows) Setup regardless of your actual operating system (both files contain the same set of colorimeter corrections, the ColorMunki software is a slightly smaller download).

The full range of measurement modes for the Spyder 4 are only available if they are imported from the Spyder 4 software.

Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the Spyder 4 software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the setup executable. Select the Spyder 4 Setup for Windows (choose one of Elite, Express, HD or Pro) regardless of your actual operating system.

If your measurement device is a Spyder 2, choose “Enable Spyder 2 colorimeter...” from dispcalGUI's “Tools” menu. If you don't have the spyder software installed or its location cannot be determined, you will be prompted to manually select the setup executable. Select the Spyder 2 Setup for Windows regardless of your actual operating system.

Basic concept of display calibration and profiling

If you have previous experience, skip ahead. If you are new to display calibration, here is a quick outline of the basic concept.

First, the display behavior is measured and adjusted to meet user-definable target characteristics, like brightness, gamma and white point. This step is generally referred to as calibration. Calibration is done by adjusting the monitor controls, and the output of the graphics card (via calibration curves, also sometimes called video LUT[7] curves—please don't confuse these with LUT profiles, the differences are explained here) to get as close as possible to the chosen target.
To meet the user-defined target characteristics, it is generally advisable to get as far as possible by using the monitor controls, and only thereafter by manipulating the output of the video card via calibration curves, which are loaded into the video card gamma table, to get the best results.

Second, the calibrated displays response is measured and an ICC[5] profile describing it is created.

Optionally and for convenience purposes, the calibration is stored in the profile, but both still need to be used together to get correct results. This can lead to some ambiguity, because loading the calibration curves from the profile is generally the responsibility of a third party utility or the OS, while applications using the profile to do color transforms usually rely on the calibration being already loaded. Currently, the only OS that applies calibration curves out-of-the-box is Mac OS X (under Windows 7 you can enable it, but it's off by default)—for other OS's, dispcalGUI takes care of creating an appropriate loader.

Even non-color-managed applications will benefit from a loaded calibration because it is stored in the graphics card—it is “global”. But the calibration alone will not yield accurate colors—only fully color-managed applications will make use of display profiles and the necessary color transforms.

Regrettably there are several image viewing and editing applications that only implement half-baked color management by not using the system's display profile (or any display profile at all), but an internal and often unchangeable “default” color space like sRGB, and sending output unaltered to the display after converting to that default colorspace. If the display's actual response is close to sRGB, you might get pleasing (albeit not accurate) results, but on displays which behave differently, for example wide-color-gamut displays, even mundane colors can get a strong tendency towards neon.

A note about colorimeters, wide-gamut displays and dispcalGUI

Colorimeters need a correction in hardware or software to obtain correct measurements from wide-gamut displays (please also see “Wide Gamut Displays and Colorimeters” on the Argyll CMS website for more information). The latter is supported when using Argyll CMS >= 1.3.0, so if you own a wide-gamut display and colorimeter which has not been specifically tuned for this display (i.e. does not contain a correction in hardware), you can apply a correction that has been calculated from spectrometer measurements to help better measure such a screen.
You need a spectrometer in the first place to do the necessary measurements to create such a correction, or you may query dispcalGUI's Colorimeter Corrections Database, and there's also a list of contributed colorimeter correction files on the Argyll CMS websiteplease note though that a matrix created for one particular instrument/display combination may not work well for different instances of the same combination because of generally low inter-instrument agreement of most colorimeters.
Starting with dispcalGUI 0.6.8, you can also import generic corrections from some profiling softwares by choosing the corresponding item in the “Tools” menu.

If you buy a screen bundled with a colorimeter, the instrument may have been matched to the screen in some way already, so you may not need a software correction in that case.

Special note about the X-Rite i1 Display Pro, ColorMunki Display and Spyder 4 colorimeters

These instruments greatly reduce the amount of work needed to match them to a display because they contain the spectral sensitivities of their filters in hardware, so only a spectrometer reading of the display is needed to create the correction (in contrast to matching other colorimeters to a display, which needs two readings: One with a spectrometer and one with the colorimeter).
That means anyone with a particular screen and a spectrometer can create a special Colorimeter Calibration Spectral Set (.ccss) file of that screen for use with those colorimeters, without needing to actually have access to the colorimeter itself.

Usage

Through the main window, you can choose your settings. When running calibration measurements, another window will guide you through the interactive part of display adjustment.

Settings file

Here, you can load a calibration (.cal) or ICC profile (.icc / .icm) file from a previous run. This will set options to those stored in the file and also load calibration curves (if any) into the video card. If the file contains only a subset of settings, you will get a message showing which settings were loaded.

If a calibration file or profile is loaded in this way, its name will show up here to indicate that the settings reflect those in the file. Also, if a calibration is present it can be used as the base when “Just Profiling”.
The chosen settings file will stay as long as you do not change any of the calibration or profiling settings, with one exception: When a .cal file with the same base name as the settings file exists in the same directory, adjusting the quality and profiling controls will not cause unloading of the settings file. This allows you to use an existing calibration with new profiling settings for “Just Profiling”, or to update an existing calibration with different quality and/or profiling settings. If you change settings in other situations, the file will get unloaded (but current settings will be retained—unloading just happens to remind you that the settings no longer match those in the file), and current display profile's calibration curves will be restored (if present, otherwise they will reset to linear).

When a calibration file is selected, the “Update calibration” checkbox will become available, which takes less time than a calibration from scratch. If a ICC[5] profile is selected, and a calibration file with the same base name exists in the same directory, the profile will be updated with the new calibration. Ticking the “Update calibration” checkbox will gray out all options as well as the “Calibrate & profile” and “Just profile” buttons, only the quality level will be changeable.

Predefined settings (presets)

Starting with dispcalGUI v0.2.5b, predefined settings for several use cases are selectable in the settings dropdown. I strongly recommend to NOT view these presets as the solitary “correct” settings you absolutely should use unmodified if your use case matches their description. Rather view them as starting points, from where you can work towards your own, optimized (in terms of your requirements, hardware, surroundings, and personal preference) settings.

Why has a default gamma of 2.2 been chosen for the presets?

Many displays, be it CRT or LCD type, have a default response characteristic close to a gamma of approx. 2.2-2.4 (for CRTs, this is the actual native behaviour; and LCDs typically try to mimic CRTs). A target response curve for calibration that is reasonably close to the native response of a display should help to minimize calibration artifacts like banding, because the adjustments needed to the video card's gamma tables via calibration curves will not be as strong as if a target response farther away from the display's native response had been chosen.

Of course, you can and should change the calibration response curve to a value suitable for your own requirements. For example, you might have a display that offers hardware calibration or gamma controls, that has been internally calibrated/adjusted to a different response curve, or your display's response is simply not close to a gamma of 2.2 for other reasons. You can run “Report on uncalibrated display device” from the “Tools” menu to measure the approximated overall gamma among other info.

Choosing the display to calibrate and the measurement device

After connecting the instrument, click the small icon with the swirling arrows in between the “Display device” and “Instrument” controls to detect connected displays devices and instruments.

Choosing a measurement mode

Some instruments may support different measurement modes for different types of display devices. In general, there are three base measurement modes: “LCD”, “Refresh” (e.g. CRT and Plasma are refresh-type displays) and “Projector” (the latter is only available if supported by the instrument). Some instruments like the Spyder 4 and ColorHug support additional measurement modes, where a mode is coupled with a predefined colorimeter correction (in that case, you should set the colorimeter correction dropdown to “None” / “Off”).
Variations of these measurement modes may be available depending on the instrument: “Adaptive” measurement mode for spectrometers uses varying integration times to increase accuracy of dark readings, but may be more inconsistent overall. “HiRes” turns on high resolution spectral mode for spectrometers like the i1 Pro, which may increase the accuracy of measurements.

Drift compensation during measurements (only available if using Argyll CMS >= 1.3.0)

White level drift compensation tries to counter luminance changes of a warming up display device. For this purpose, a white test patch is measured periodically, which increases the overall time needed for measurements.

Black level drift compensation tries to counter measurement deviations caused by black calibration drift of a warming up measurement device. For this purpose, a black test patch is measured periodically, which increases the overall time needed for measurements. Many colorimeters are temperature stabilised, in which case black level drift compensation should not be needed, but spectrometers like the i1 Pro or ColorMunki Design/Photo are not temperature compensated.

Choosing a colorimeter correction for a particular (wide-gamut) display

This can improve a colorimeters accuracy for a particular type of display, please also see “A note about colorimeters, wide-gamut displays and dispcalGUI”. You can import generic matrices from some other display profiling softwares as well as check the online Colorimeter Corrections Database for a match of your display/instrument combination (click the small globe next to the correction dropdown). A list of contributed correction matrices can also be found on the Argyll CMS website.

Please note this option is only available if using Argyll CMS >= 1.3.0 and a colorimeter.

Calibration settings

White point

Allows setting the target white point locus to the equivalent of a daylight or black body spectrum of the given temperature in degrees Kelvin, or as chromaticity co-ordinates. By default the white point target will be the native white of the display, and it's color temperature and delta E to the daylight spectrum locus will be shown during monitor adjustment, and adjustments will be recommended to put the display white point directly on the Daylight locus. If a daylight color temperature is given, then this will become the target of the adjustment, and the recommended adjustments will be those needed to make the monitor white point meet the target. Typical values might be 5000 for matching printed output, or 6500, which gives a brighter, bluer look. A white point temperature different to that native to the display may limit the maximum brightness possible.

If you want to find out the current uncalibrated whitepoint of your display, you can run “Report on uncalibrated display device” from the “Tools” menu to measure it.

If you want to adjust the whitepoint to the chromaticities of your ambient lighting, or those of a viewing booth as used in prepress and photography, and your measurement device has ambient measuring capability (e.g. like the i1 Pro or i1 Display with their respective ambient measurement heads), you can use the “Measure” button next to the whitepoint settings. If you want to measure ambient lighting, place the instrument upwards, beside the display. Or if you want to measure a viewing booth, put a metamerism-free gray card inside the booth and point the instrument towards it. Further instructions how to measure ambient may be available in your instrument's documentation.

White level

Set the target brightness of white in cd/m2. If this number cannot be reached, the brightest output possible is chosen, consistent with matching the white point target. Note that many of the instruments are not particularly accurate when assessing the absolute display brightness in cd/m2. NOTE that some LCD screens behave a little strangely near their absolute white point, and may therefore exhibit odd behavior at values just below white. It may be advisable in such cases to set a brightness slightly less than the maximum such a display is capable of.

If you want to find out the current uncalibrated white level of your display, you can run “Report on uncalibrated display device” from the “Tools” menu to measure it.

Black level

Can be used to set the target brightness of black in cd/m2 and is useful for e.g. matching two different screens with different native blacks to one another, by measuring the black levels on both (i.e. in the “Tools” menu, choose “Report on uncalibrated display”) and then entering the highest measured value. Normally you may want to use native black level though, to maximize contrast ratio. Setting too high a value may also give strange results as it interacts with trying to achieve the target “advertised” tone curve shape. Using a black output offset of 100% tries to minimize such problems.

Tone curve / gamma

The target response curve is normally an exponential curve (output = inputgamma), and defaults to 2.2 (which is close to a typical CRT displays real response). Four pre-defined curves can be used as well: the sRGB colorspace response curve, which is an exponent curve with a straight segment at the dark end and an overall response of approximately gamma 2.2, the L* curve, which is the response of the CIE L*a*b* perceptual colorspace, the Rec. 709 video standard response curve and the SMPTE 240M video standard response curve.

Note that a real display can't reproduce any of these ideal curves, since it will have a non-zero black point, whereas all the ideal curves assume zero light at zero input.

For gamma values, you can also specify wheter it should be interpreted relative, meaning the gamma value provided is used to set an actual response curve in light of the non-zero black of the actual display that has the same relative output at 50% input as the ideal gamma power curve, or absolute, which allows the actual power to be specified instead, meaning that after the actual displays non-zero black is accounted for, the response at 50% input will probably not match that of the ideal power curve with that gamma value (to see this setting, you have to go into the “Options” menu, and enable “Show advanced calibration options”).

To allow for the non-zero black level of a real display, by default the target curve values will be offset so that zero input gives the actual black level of the display (output offset). This ensures that the target curve better corresponds to the typical natural behavior of displays, but it may not be the most visually even progression from display minimum. This behavior can be changed using the black output offset option (see further below).

Also note that many color spaces are encoded with, and labelled as having a gamma of approximately 2.2 (ie. sRGB, REC 709, SMPTE 240M, Macintosh OS X 10.6), but are actually intended to be displayed on a display with a typical CRT gamma of 2.4 viewed in a darkened environment.
This is because this 2.2 gamma is a source gamma encoding in bright viewing conditions such as a television studio, while typical display viewing conditions are quite dark by comparison, and a contrast expansion of (approx.) gamma 1.1 is desirable to make the images look as intended.
So if you are displaying images encoded to the sRGB standard, or displaying video through the calibration, just setting the gamma curve to sRGB or REC 709 (respectively) is probably not what you want! What you probably want to do, is to set the gamma curve to about gamma 2.4, so that the contrast range is expanded appropriately, or alternatively use sRGB or REC 709 or a gamma of 2.2 but also specify the actual ambient viewing conditions via a light level in Lux, so that an appropriate contrast enhancement can be made during calibration. If your instrument is capable of measuring ambient light levels, then you can do so.
(For in-depth technical information about sRGB, see “A Standard Default Color Space for the Internet: sRGB” at the ICC[5] website for details of how it is intended to be used)

If you're wondering what gamma value you should use, you can run “Report on uncalibrated display device” from the “Tools” menu to measure the approximated overall gamma among other info. Setting the gamma to the reported value can then help to reduce calibration artifacts like banding, because the adjustments needed for the video card's gamma table should not be as strong as if a gamma further away from the display's native response was chosen.

Ambient light level

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

As explained for the tone curve settings, often colors are encoded in a situation with viewing conditions that are quite different to the viewing conditions of a typical display, with the expectation that this difference in viewing conditions will be allowed for in the way the display is calibrated. The ambient light level option is a way of doing this. By default calibration will not make any allowances for viewing conditions, but will calibrate to the specified response curve, but if the ambient light level is entered or measured (which you may also do during the interactive display controls portion of the calibration), an appropriate viewing conditions adjustment will be performed. For a gamma value or sRGB, the original viewing conditions will be assumed to be that of the sRGB standard viewing conditions, while for REC 709 and SMPTE 240M they will be assumed to be television studio viewing conditions.
By specifying or measuring the ambient lighting for your display, a viewing conditions adjustment based on the CIECAM02 color appearance model will be made for the brightness of your display and the contrast it makes with your ambient light levels.

Please note your measurement device needs ambient measuring capability (e.g. like the i1 Pro or i1 Display 2 with their respective ambient measurement heads) to measure the ambient light level.

Black output offset

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

Real displays do not have a zero black response, while all the target response curves do, so this has to be allowed for in some way.

The default way of handling this (equivalent to 100% black output offset) is to allow for this at the output of the ideal response curve, by offsetting and scaling the output values. This defined a curve that will match the responses that many other systems provide and may be a better match to the natural response of the display, but will give a less visually even response from black.

The other alternative is to offset and scale the input values into the ideal response curve so that zero input gives the actual non-zero display response. This ensures the most visually even progression from display minimum, but might be hard to achieve since it is different to the natural response of a display.

A subtlety is to provide a split between how much of the offset is accounted for as input to the ideal response curve, and how much is accounted for at the output, where the degree is 0.0 accounts for it all as input offset, and 100% accounts for all of it as output offset.

Black point correction

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

Normally dispcal will attempt to make all colors down the neutral axis (R=G=B) have the same hue as the chosen white point. Near the black point, red, green or blue can only be added, not subtracted from zero, so the process of making the near black colors have the desired hue, will lighten them to some extent. For a device with a good contrast ratio or a black point that has nearly the same hue as the white, this is not a problem. If the device contrast ratio is not so good, and the black hue is noticeably different to that of the chosen white point (which is often the case for LCD type displays), this could have a noticeably detrimental effect on an already limited contrast ratio. Here the amount of black point hue correction can be controlled.
By default a factor of 100% will be used, which is usually good for CRT and also by default a factor of 0% is used for LCD type displays, but you can override these with a custom value between 0% (no correction) to 100% (full correction).

If less than full correction is chosen, then the resulting calibration curves will have the target white point down most of the curve, but will then cross over to the native or compromise black point.

Black point correction rate (only available if using Argyll CMS >= 1.0.4)

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

If the black point is not being set completely to the same hue as the white point (ie. because the factor is less than 100%), then the resulting calibration curves will have the target white point down most of the curve, but will then blend over to the native or compromise black point that is blacker, but not of the right hue. The rate of this blend can be controlled. The default value is 4.0, which results in a target that switches from the white point target to the black, moderately close to the black point. While this typically gives a good visual result with the target neutral hue being maintained to the point where the crossover to the black hue is not visible, it may be asking too much of some displays (typically LCD type displays), and there may be some visual effects due to inconsistent color with viewing angle. For this situation a smaller value may give a better visual result (e.g. try values of 3.0 or 2.0. A value of 1.0 will set a pure linear blend from white point to black point). If there is too much coloration near black, try a larger value, e.g. 6.0 or 8.0.

Calibration speed

Determines how much time and effort to go to in calibrating the display. The lower the speed, the more test readings will be done, the more refinement passes will be done, the tighter will be the accuracy tolerance, and the more detailed will be the calibration of the display. The result will ultimately be limited by the accuracy of the instrument, the repeatability of the display and instrument, and the resolution of the video card gamma table entries and digital or analogue output (RAMDAC).

Interactive display adjustment
Turning this off skips straight to calibration measurements instead of giving you the opportunity to alter the display's controls first. You will normally want to keep this checked, to be able to use the controls to get closer to the chosen target characteristics.

Profiling settings

Testchart file
You can choose the test patches used when profiling the display here. The default ones are automatically chosen based on profile quality and type, but you can also use and create your own using the built-in testchart editor (click on the colored patches next to the testchart file selector or choose “Edit testchart...” from the “File” menu to launch it).
Testchart editor

The provided default testcharts should work well in most situations, but allowing you to create custom charts ensures maximum flexibility when characterizing a display and can improve profiling accuracy and efficiency. See also optimizing testcharts.

You can enter the amount of patches to be generated for each patch type (white, gray, single channel, iterative and multidimensional cube steps). The iterative algorythm can be tuned if more than zero patches are to be generated. What follows is a quick description of the several available iterative algorythms, with “device space” meaning in this case RGB coordinates, and “perceptual space” meaning the (assumed) XYZ numbers of those RGB coordinates. The assumed XYZ numbers can be influenced by providing a previous profile, thus allowing optimized test point placement.

  • Optimized Farthest Point Sampling (OFPS) will optimize the point locations to minimize the distance from any point in device space to the nearest sample point
  • Incremental Far Point Distribution incrementally searches for test points that are as far away as possible from any existing points
  • Device space random chooses test points with an even random distribution in device space
  • Perceptual space random chooses test points with an even random distribution in perceptual space
  • Device space filling quasi-random chooses test points with a quasi-random, space filling distribution in device space
  • Perceptual space filling quasi-random chooses test points with a quasi-random, space filling distribution in perceptual space
  • Device space body centered cubic grid chooses test points with body centered cubic distribution in device space
  • Perceptual space body centered cubic grid chooses test points with body centered cubic distribution in perceptual space

You can set the degree of adaptation to the known device characteristics used by the default full spread OFPS algorithm. A preconditioning profile should be provided if adaptation is set above a low level. By default the adaptation is 10% (low), and should be set to 100% (maximum) if a profile is provided. But, if for instance, the preconditioning profile doesn't represent the device behavior very well, a lower adaption than 100% might be appropriate.

For the body centered grid distributions, the angle parameter sets the overall angle that the grid distribution has.

The “Limit samples to sphere” option is used to define an L*a*b* sphere to filter the test points through. Only test points within the sphere (defined by it's center and radius) will be in the generated testchart. This can be good for targeting supplemental test points at a troublesome area of a device. The accuracy of the L*a*b* target will be best when a reasonably accurate preconditioning profile for the device is chosen. Note that the actual number of points generated can be hard to predict, and will depend on the type of generation used. If the OFPS, device and perceptual space random and device space filling quasi-random methods are used, then the target number of points will be achieved. All other means of generating points will generate a smaller number of test points than expected. For this reason, the device space filling quasi-random method is probably the easiest to use.

Controls for the spreadsheet-like patch editor are as follows:

  • To select patches, click and drag the mouse over table cells, or hold SHIFT (select range) or CTRL/CMD (add/remove single cells/rows to/from selection)
  • To add a patch below an existing one, double-click a row label
  • To delete patches, select them, then hold CTRL (Linux, Windows) or CMD (Mac OS X) and hit DEL or BACKSPACE (will always delete whole rows even if only single cells are selected)
  • CTRL-C/CTRL-V/CTRL-A = copy/paste/select all

If you want to insert a certain amount of patches generated in a spreadsheet application (as RGB coordinates in the range 0.0-100.0 per channel), the easiest way to do this is probably to copy the values from the spreadsheet app, entering the testchart editor, generating a corresponding amount of patches and then overwriting them by doing CTRL-A, CTRL-V.

Profile quality
Sets the level of effort and/or detail in the resulting profile. For table based profiles (LUT[7]), it sets the main lookup table size, and hence quality in the resulting profile. For matrix profiles it sets the per channel curve detail level and fitting “effort”.
Profile type

Generally you can differentiate between two types of profiles: LUT[7] based and matrix based.

Matrix based profiles are smaller in filesize, somewhat less accurate (though in most cases smoother) compared to LUT[7] based types, and usually have the best compatibility across CMM[2]s, applications and systems — but only support the colorimetric intent for color transforms. For matrix based profiles, the PCS is always XYZ. You can choose between using individual curves for each channel (red, green and blue), a single curve for all channels, individual gamma values for each channel or a single gamma for all channels. Curves are more accurate than gamma values. A single curve or gamma can be used if individual curves or gamma values degrade the gray balance of an otherwise good calibration.

LUT[7] based profiles are larger in filesize, more accurate (but may sacrifice smoothness), in some cases less compatible (applications might not be able to use or show bugs/quirks with LUT[7] type profiles, or certain variations of them). When choosing a LUT[7] based profile type, advanced gamut mapping options become available which you can use to create perceptual and/or saturation tables inside the profile in addition to the default colorimetric tables which are always created.
L*a*b* or XYZ can be used as PCS, with XYZ being recommended especially for wide-gamut displays bacause their primaries might exceed the ICC[5] L*a*b* encoding range (Note: Under Windows, XYZ LUT[7] types are only available in dispcalGUI if using Argyll CMS >= 1.1.0 because of a requirement for matrix tags in the profile, which are not created by prior Argyll CMS versions).
As it is hard to verify if the LUT[7] of an combined XYZ LUT[7] + matrix profile is actually used, you may choose to create a profile with a swapped matrix (which I'd recommend), ie. blue-red-green instead of red-green-blue, so it will be obvious if an application uses the (deliberately wrong) matrix instead of the (correct) LUT because the colors will look very wrong (e.g. everything that should be red will be blue, green will be red, blue will be green, yellow will be purple etc).

Note: LUT[7]-based profiles (which contain three-dimensional LUTs) might be confused with video card LUT[7] (calibration) curves (one-dimensional LUTs), but they're two different things. Both LUT[7]-based and matrix-based profiles may include calibration curves which can be loaded into a video card's gamma table hardware.

Advanced gamut mapping options

Normally, profiles created by dispcalGUI only incorporate the colorimetric rendering intent, which means colors outside the display's gamut will be clipped to the next in-gamut color. LUT-type profiles can also have gamut mapping by implementing perceptual and/or saturation rendering intents. You can choose if and which of those you want after clicking “Advanced...”, by specifying a source profile and marking the appropriate checkboxes. Note that a input, output, display or device colororspace profile should be specified as source, not a non-device colorspace, device link, abstract or named color profile. You can also choose viewing conditions which describe the intended use of both the source and the display profile that is to be generated. An appropriate source viewing condition is chosen automatically based on the source profile type.

For more information on why a source gamut is needed, see “About ICC profiles and Gamut Mapping” in the Argyll CMS documentation.

One strategy for getting the best perceptual results with display profiles is as follows: Select a CMYK profile as source for gamut mapping. Then, when converting from another RGB profile to the display profile, use relative colorimetric intent, and if converting from a CMYK profile, use the perceptual intent.
Another approach which especially helps limited-gamut displays is to choose one of the larger (gamut-wise) source profiles you usually work with for gamut mapping, and then always use perceptual intent when converting to the display profile.

Please note that not all applications support setting a rendering intent for display profiles and might default to colorimetric (e.g. Photoshop normally uses relative colorimetric with black point compensation, but can use different intents via custom soft proofing settings).

Black point compensation

This effectively prevents black crush when using the profile, but at the expense of accuracy. (Note: This option has no effect if just calibrating and creating a simple curves + matrix profile directly from the calibration data without additional profiling measurements)

Profile name

As long as you do not enter your own text here, the profile name is auto generated from the chosen calibration and profiling options. The current auto naming mechanism creates quite verbose names which are not necessarily nice to read, but they can help in identifying the profile.
Also note that the profile name is not only used for the resulting profile, but for all intermediate files as well (filename extensions are added automatically) and all files are stored in a folder of that name. You can choose where this folder is created by clicking the disk icon next to the field (it defaults to your system's default location for user data).

Here's an example under Linux, on other platforms some file extensions and the location of the home directory will differ (you can mouse over the filenames to get a tooltip with a short description what the file is for):

Chosen profile save path: ~/.local/share/dispcalGUI/storage

Profile name: mydisplay

The following folder will be created: ~/.local/share/dispcalGUI/storage/mydisplay

During calibration & profiling the following files will be created:

~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.all.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.cal
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.colprof.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispcal.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispread.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispwin.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.icc
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.ti1
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.ti3

(the .sh files can be used to re-run without GUI[4] but same settings from a shell)

Calibrating / profiling

If you are unclear about the difference between calibration and profiling (also called characterisation), see “Calibration vs. Characterization” in the Argyll CMS documentation.

Please let the screen stabilize for at least half an hour after powering it up before doing any measurements or assessing its color properties. The screen can be used normally with other applications during that time.

After you have set your options, click on one of the three buttons at the bottom to start the actual calibration/profiling process. The main window will hide during measurements, and should pop up again after they are completed (or after an error). You can always cancel out of running measurements using the “Cancel” button in the progress dialog, or by pressing ESC or Q. Viewing the informational log window (from the “Tools” menu) after measurements will give you access to the raw output of the Argyll CMS commandline tools and other verbose information.

Adjusting a display before calibration

If you clicked “Calibrate” or “Calibrate & profile” and have not turned off “Interactive display adjustment”, you will be presented with the interactive display adjustment window which contains several options to help you bring a display's characteristics closer to the chosen target values. Depending on wheter you have a CRT- or LCD-type display, I will try to give some recommendations here which options to adjust, and which to skip.

Adjusting a LCD display

For LCD displays, you will in most cases only want to adjust white point (if the screen has RGB gain or other whitepoint controls) and white level (with the white level also affecting the black level unless you have a local dimming LED model), as many LCDs lack the necessary “offset” controls to adjust the black point (and even if they happen to have them, they often change the overall color temperature, not only the black point). Also note that for most LCD screens, you should leave the “contrast” control at (factory) default.

White point
If your screen has RGB gain, colortemperature or other whitepoint controls, the first step should be adjusting the whitepoint. Note that you may also benefit from this adjustment if you have set the target whitepoint to “native”, as it will allow you to bring it closer to the daylight or blackbody locus, which can help the human visual system to better adapt to the whitepoint. Look at the bars shown during the measurements to adjust RGB gains and minimize the delta E to the target whitepoint.
White level
Continue with the white level adjustment. If you have set a target white level, you may reduce or increase the brightness of your screen (ideally using only the backlight) until the desired value is reached (i.e. the bar ends at the marked center position). If you haven't set a target, simply adjust the screen to a visually pleasing brightness that doesn't cause eye strain.
Adjusting a CRT display
Black level
On CRTs, this adjustment is done using the “brightness” control. You may reduce or increase the brightness of your screen until the desired black level is reached (i.e. the bar ends at the marked center position).
White point
The next step should be adjusting the whitepoint, using the display's RGB gain controls or other means of adjusting the whitepoint. Note that you may also benefit from this adjustment if you have set the target whitepoint to “native”, as it will allow you to bring it closer to the daylight or blackbody locus, which can help the human visual system to better adapt to the whitepoint. Look at the bars shown during the measurements to adjust RGB gains and minimize the delta E to the target whitepoint.
White level
Continue with the white level adjustment. On CRTs this is done using the “contrast” control. If you have set a target white level, you may reduce or increase contrast until the desired value is reached (i.e. the bar ends at the marked center position). If you haven't set a target, simply adjust the screen to a visually pleasing level that doesn't cause eye strain.
Black point
If your display has RGB offset controls, you can adjust the black point as well, in much the same way that you adjusted the whitepoint.
Finishing adjustments (CRT/LCD) and starting calibration/characterisation

After the adjustments, you can run a check on all the settings by choosing the last option from the left-hand menu to verify the achieved values. If adjusting one setting adversely affected another, you can then simply repeat the respective option as necessary until the target parameters are met.

Finally, select “Continue on to calibration” to start the non-interactive part. You may want to get a coffee or two as the process can take a fair amount of time, especially if you selected a high quality level. If you only wanted help to adjust the display and don't want/need calibration curves to be created, you can also choose to exit by closing the interactive display adjustment window and then select “Profile only” from the main window.
If you originally selected “Calibrate & profile” and fulfil the requirements for unattended calibration & profiling, the characterisation measurements for the profiling process should start automatically after calibration is finished. Otherwise, you may be forced to take the instrument off the screen to do a sensor self-calibration before starting the profiling measurements.

Optimizing testcharts for improved profiling accuracy and efficiency

A good way to generate a custom testchart to improve profiling is to use one of the default testcharts as base, altering the parameters as necessary and desired. Especially the use of an existing display profile to precondition generated test patches for improved profiling performance is recommended. You could go about this in the following way:

  • When calibrating, choose “just calibrate” and the option to create a fast curves + matrix profile.
  • After calibration, select a testchart to use as base (preferably one of the optimized ones) and bring up the testchart editor.
  • Place a check in the “preconditioning profile” checkbox and click on “current profile”. It should automatically select the curves + matrix profile that was created during calibration. Make sure adaptation is set to a high level (e.g. 100%)
  • If desired, adjust the number of patches and make sure the iterative patches amount is not zero.
  • Create the chart and save it. Click “yes” when asked to select the newly generated chart.
  • Start the profiling measurements (e.g. click “profile only”).

Profile installation

When installing a profile after creating or updating it, a startup item to load its calibration curves automatically on login will be created (on Windows and Linux, Mac OS X does not need a loader). You may also prevent this loader from doing anything by removing the check in the “Load calibration curves on Login” checkbox in the profile installation dialog, and in case you are using Windows 7 or later, you may let the operating system handle calibration loading instead (to be able to change this option, you need to run dispcalGUI as administrator).

Advanced functions

Remote measurements and profiling

When using Argyll CMS 1.4.0 and newer, remote measurements on a device not directly connected to the machine that is running dispcalGUI is possible (e.g. a smartphone or tablet). The remote device needs to be able to run a web browser (Firefox recommended), and the local machine running dispcalGUI may need firewall rules added or altered to allow incoming connections. To set up remote profiling, select “Web @ localhost” from the display device dropdown menu, then choose the desired action (e.g. “Profile only”). When the message “Webserver waiting at http://<IP>:<Port>” appears, open the shown address in the remote browser and attach the measurement device.
NOTE: If you use this method of displaying test patches, there is no access to the display video LUT[7]s and hardware calibration is not possible. The colors will be displayed with 8 bit per component precision, and any screen-saver or power-saver will not be automatically disabled. You will also be at the mercy of any color management applied by the web browser, and may have to carefully review and configure such color management.
NOTE: Close the web browser window or tab after each run, otherwise reconnection may fail upon further runs.

Untethered display measurements

Untethered mode is another option to measure and profile a remote display that is not connected via standard means (calibration is not supported). To use untethered mode, the testchart that should be used needs to be optimized, then exported as image files (via the testchart editor) and those image files need to be displayed on the device that should be measured, in successive order. The procedure is as follows:

  • Select the desired testchart, then open the testchart editor.
  • Click “Optimize for untethered in auto mode”, then export the testchart.
  • Burn the images to a DVD, copy them on an USB stick or use any other available means to get them to display onto the device that should be measured.
  • In dispcalGUI's display dropdown, select “Untethered” (the last option).
  • Show the first image on the remote display, and attach the instrument. Then select “Profile only”.

Measurements will commence, and changes in the displayed image should be automatically detected if “auto” mode is enabled. Use whatever means available to you to cycle through the images from first to last, carefully monitoring the measurement process and only changing to the next image if the current one has been successfully measured (as will be shown in the untethered measurement window). Note that untethered mode will be (atleast) twice as slow as normal display measurements.

Known issues and solutions

General: Wacky image colors (swapped colors)
Solution: This happens when you created a “XYZ LUT + swapped matrix” profile and is a way to alert you that the software you're using does not support XYZ LUT profiles and falls back to the included matrix (which generally means you'd loose accuracy). If you're having this situation only in some applications, creating a “XYZ LUT + matrix” profile will remedy it (but please keep in mind that those applications not supporting XYZ LUT will still fall back to the matrix, so results can be different from applications that support XYZ LUT correctly). If all colormanaged applications you use show swapped colors, you should create a matrix profile instead. Note that you do not have to re-run any measurements: In dispcalGUI, choose a profile type as suggested previously, adjust quality and profile name if you want, then choose “Create profile from measurement data...” in the “Options” menu and select the profile you had the issue with.
General: Measurements are failing (“Sample read failed”) if using the “Allow skipping of spectrometer self-calibration” option and/or highres/adaptive mode
Solution: Disable either or all of the above options. The problem seems to mainly occur with the ColorMunki.
MS Windows/madVR: “The process <dispcal.exe|dispread.exe> has stopped working” / “Calibration / profiling has not been finished”
Solution: Copy the file madHcNet32.dll from your madVR folder to the Argyll CMS binaries folder (e.g. Argyll_VX.X.X\bin).
Windows: “The process <dispcal.exe|dispread.exe|...> could not be started.”
Solution: Go to your Argyll_VX.X.X\bin directory, and right-click the exe file from the error message. Select “Properties”, and then if there is a text on the “General” tab under security “This file came from another computer and might be blocked”, click “Unblock”.
Photoshop: “The monitor profile […] appears to be defective. Please rerun your monitor calibration software.”
Solution: Adobe ACE, Adobe's color conversion engine, contains monitor profile validation functionality which attempts to filter out bad profiles. With XYZ LUT profiles created in Argyll CMS versions up to 1.3.2, the B2A white point mapping is sometimes not particularly accurate, just enough so that ACE will see it as a problem, but in actual use it may only have little impact that the whitepoint is a bit off. So if you get a similar message when launching Photoshop, with the options “Use profile regardless” and “Ignore profile”, you may choose “Use profile regardless” and check visually or with the pipette in Photoshop if the inaccurate whitepoint poses a problem. This issue is fixed in Argyll CMS 1.3.3 and newer. Alternatively, you can create a Lab LUT profile.
MS Windows Vista: The calibration gets unloaded when a User Access Control prompt is shown
Solution: (Intel and Intel/AMD hybrid graphics users please see “The Calibration gets unloaded after login/resume/User Access Control prompt” first) This Windows Vista bug seems to have been fixed under Windows 7, and can be remedied under Vista by either manually reloading calibration, or disabling UAC—but please note that you sacrifice security by doing this. To manually reload the calibration, either open dispcalGUI and select “Load calibration curves from current display profile” in the “Options” menu, or (quicker) open the Windows start menu and select “dispcalGUI Profile Loader” in the “Startup” subfolder. To disable UAC[9] (not recommended!), open the Windows start menu and enter “msconfig” in the search box. Click on the Tools tab. Select the line “Disable UAC” and click the “Launch” button. Close msconfig. You need to reboot your system for changes to apply.
MS Windows with Intel graphics (also Intel/AMD hybrid): The Calibration gets unloaded after login/resume/User Access Control prompt
Solution: The Intel graphics drivers contain several utilities that interfere with correct calibration loading. A workaround is to rename, move or disable (e.g. using a tool like AutoRuns) the following files:
C:\Windows\system32\igfxtray.exe
C:\Windows\system32\igfxpph.dll
C:\Windows\system32\igfxpers.exe
MS Windows Vista and 7: The display profile isn't used if it was installed for the current user
Solution: Open the Windows start menu, select “Control Panel”, then “Color Management” (you may have to select “Classic View” under Vista and anything other than “Category View” under Windows 7 to see it). Under the “Devices” tab, select your display device, then tick “Use my settings for this device”.
MS Windows: Enabling the Spyder 2 colorimeter might fail when not running as administrator
Solution: Run dispcalGUI as admin. Right-click dispcalGUI's icon and choose “Run as administrator...”
MS Windows: Installing a display profile system-wide might fail when not running as administrator
Solution: Run dispcalGUI as admin. Right-click dispcalGUI's icon and choose “Run as administrator...”
MS Windows Vista and 7, 64-bit: Driver signature enforcement prevents the installation of unsigned Argyll USB drivers
Solution: Please upgrade to Argyll CMS 1.2.0 or later. For prior versions, signing the Argyll drivers or disabling driver signature enforcement altogether on each boot was needed to successfully use the drivers. Such workarounds are no longer needed with recent versions of Argyll CMS which include drivers that will work out-of-the-box (if you already have drivers for your measurement device installed, see “Updating Argyll drivers” under “Installing Argyll CMS on Microsoft Windows” in the Argyll CMS documentation if you use a prior version of the Argyll drivers, or “Adding Argyll drivers to existing drivers” if you are using vendor drivers).
MS Windows 7: Calibration does not load automatically on login when not using the dispcalGUI Profile Loader
Solution: Open the Windows start menu, select “Control Panel”, then “Color Management” (you may have to select something other than “Category View” to see it). Select the “Advanced” tab, then “Change system defaults...”, and finally tick the “Use Windows display calibration” checkbox.
MS Windows XP, multiple displays: One profile is used by all displays connected to a graphics card
Solution: The underlying issue is that Windows XP assigns color profiles per (logical) graphics card, not per output. Most XP graphics drivers present only one logical card to the OS even if the card itself has multiple outputs. There are several possible solutions to this problem:
  • Use different graphics cards and connect only one display to each (this is probably the preferable solution in terms of ease of use and is least prone to configuration error)
  • Install and use the Windows XP color control applet
  • Some graphics cards, like the Matrox Parhelia APV (no longer produced), will expose two logical cards to the OS when using a specific vendor driver (some older ATI drivers also had this feature, but it seems to have been removed from newer ones)
Mac OS X: dispcalGUI.app is damaged and can't be opened.
Solution: Go to the “Security & Privacy” settings in System Preferences and set “Allow applications downloaded from” (under the “General” tab) to the “Anywhere” setting. After you have successfully launched dispcalGUI, you can change the setting back to a more secure option and dispcalGUI will continue to run properly.
Photoshop CS3 (Mac OS X): Under Mac OS X, the brush cursor in Photoshop CS3 looks funny (box around brush)
Solution: This seems to be a bug which shows with LUT[7]-type profiles that have only one rendering intent. You can try to overcome it by selecting “Advanced...” next to the profile type dropdown, selecting an existing ICC[5] profile as source (for hints as to which profile to select, see “Advanced gamut mapping options”) and tick at least one of the “Apply gamut mapping to” checkboxes before profiling. To do that for an existing profile, adjust quality and profile name if you want, choose “Create profile from measurement data...” from the “Options” menu and select the profile. Note that this does not always solve the issue. Trying another profile type (XYZ LUT instead of L*a*b* LUT) might also help.
Linux/Windows: No video card gamma table access (“Calibrate only” and “Calibrate & profile” buttons grayed, “Profile only” button available)
Solution: Under Linux, please refer to the Argyll CMS documentation, “Installing the software on Linux with X11” and “Note on X11 multi-monitor setups” / “Fixing access to Video LUTs” therein. Under Windows, please also see the solution posted under “The display profile isn't used if it was installed for the current user” if you are using Windows 7 and make sure you have a recent driver for your video card installed.
Linux (KDE): The application does not look native
Solution: You can use the GTK-Qt Theme Engine for native KDE look. Most Linux distributions offer ready-made packages through their packaging systems, search for “gtk-qt”. Another alternative is gtk-kde4. Also, some themes come in versions for both KDE (Qt) and GTK.
Linux: Instrument not working correctly/constantly disconnecting (conflict with libmtp)
Solution: There is a bug on some systems with libmtp that causes instruments to continuously switch between connected and disconnected state. This seems to be a bug in libmtp-runtime. You can work around it by renaming /lib/udev/mtp-probe or updating to libmtp 1.0.6 where the issue should be fixed.
General: Some text is still in english, even though another language is selected in the menu
Solution: All output from the Argyll CMS utilities is always english, and on Mac OS X, also the menuitems in the application menu. This is currently not changeable.

Get help

Need help with a specific task or problem? It may be a good idea to first check the known issues & solutions if the topic has been covered. If you want to report a bug, please see the guidelines on bug reporting. Otherwise, feel free to use one of the following channels:

Report a bug

Found a bug? If so, please first check the bug tracker, it may have been reported already. Please follow these guidelines for reporting bugs:

  • Try to give a short, but concise summary of the problem.
  • Try to give some steps to reproduce the problem.
  • Always attach logfiles if possible. They are usually automatically created by dispcalGUI as part of normal program operation. You can find them here:
    • Linux: /home/Your Username/.local/share/dispcalGUI/logs
    • Mac OS X: /Users/Your Username/Library/Logs/dispcalGUI
    • Windows Vista and newer: C:\Users\Your Username\AppData\dispcalGUI\logs
    • Windows XP: C:\Documents and Settings\Your Username\Application Data\dispcalGUI\logs

    As the folder may contain several logfiles, it is a good idea to compress the whole folder to a ZIP or tar.gz archive that you can easily attach to a bug report.

    Please note the logfiles may contain your username as well as paths of files you may have used in dispcalGUI. I will respect your privacy at all times, but you may want to consider this when attaching logfiles to public places like the bug tracker.

Create a new ticket (or if the bug has been reported already, use the existing ticket) at the bug tracker, following the guidelines above, and attach the logfiles archive.

If you don't want to or can't use the bug tracker, feel free to use one of the other support channels.

Discussion

Do you want to get in touch with me or other users regarding dispcalGUI or related topics? The general discussion forum or dispcalGUI-users mailing list is a good place to do so. You can also contact me directly via E-Mail: dispcalGUI ‹at› hoech . net.

To-Do / planned features (in no particular order)

  • (Long-term) improve UI.
  • Better interface to GNOME Color Manager (implemented in v0.8.1.0+)
  • Measure and report on screen homogenity / evenness of illumination
  • Get rid of the terminal and implement a proper GUI for the interactive part of calibration (implemented in v0.8.5.6+)
  • Better user interface for profile verification: If a test set contains multiple value formats (CMYK, RGB, XYZ, L*a*b*), allow selection which one(s) should be used in a “setup” window (“setup” window implemented in v1.5.6.9+, value format selection added in v1.6.3.5)
  • Add gamut coverage percentages to the profile verification report if the test set contains reference values (not *.ti1): Calculate profiles from test set and verification measurements on-the-fly and create gamut volumes from test set profile, evaluated profile, and verification measurements profile using Argyll's iccgamut tool. Compare gamut volumes using Argyll's viewgam tool with -i option and include the results in the report (coverage calculation for test set reference and profile to be evaluated could be done before the actual measurements and also shown in the yet-to-be-implemented profile verification “setup” window).
  • Complete the documentation in the README
  • German language README (postponed)
  • Profile verification (feed XYZ or L*a*b* to display profile, display corresponding RGB values, measure, output Delta E) (implemented in v0.3.6+)
  • “Before” / “After” switch when calibration / profiling complete (implemented in v0.2+)
  • Store all settings in profile, allow loading of settings from profile in addition to .cal file (implemented in v0.2+)
  • Document the code (code documentation could still be enhanced, for now it'll do)
  • Code cleanup (mostly done)

Thanks and acknowledgements

I would like to thank the following people:

Graeme Gill, for creating Argyll CMS

Translators: Loïc Guégant (french translation), Roberto Quintero (spanish translation), Tommaso Schiavinotto (italian translation)

Recent donors: Andrew Hunter, Yulian Martsenkov, Catherine Goniot, Ben Edwards, Ievgen Morskyi, Ahammed Umminiyil, LivingWithBugs.com, Christoph Clarenbach, Paul Fokkens, Kieren Hinch, Dale Somerville, Francesco Demontis, Projection Mapping Central, Scott Janz, Govindanunny Thekkadath, Nejib Boubaker, Mason Livingston, Daniel Lenardon, Manuel López Pérez, Xavier Potel, Andrew Hunter, Thomas Voigt, Александр Ольховский, Eugeniy Yurov, Hans Cremers, George Pop, Michael Gestgrasser, Stefan Pallari, Oliver Hoefele, Kyle Winfree, more...

And everyone who sent me feedback or bug reports, suggested features, or simply uses dispcalGUI.

Acknowledgements

Part of the comprehensive Argyll CMS documentation has been used in this document, and was only slightly altered to better fit dispcalGUI's behavior and notations.

Version history / changelog

2014-01-19 10:02 (UTC) 1.7.1.6

1.7.1.6

Added in this release:

  • A new option to not use the video card gamma table to apply calibration (default like in 1.5.2.5/1.5.3.1: On for madVR, off for everything else).
  • Correlated color temperature, gamma, RGB gray balance and gamut graphs to measurement report.
  • Re-added the default testchart for gamma + matrix profiles.
  • Testchart editor: Dark region emphasis controls (Argyll CMS 1.6.2).
  • Testchart editor: Black patches amount control (Argyll CMS 1.6).
  • Testchart editor: Ability to add saturation sweeps and reference patches (from CGATS or images) to a testchart if using a preconditioning profile and adaptation = 100%.
  • Standalone curve viewer. This allows to view the curves of the currently assigned display profile or the actual video card gamma table without launching dispcalGUI.
  • Curve viewer can reload, apply black point compensation to, load into the videocard, and export calibration files.

Changed in this release:

  • Untethered measurements window: Enable keyboard navigation in the grid view (up/down/pageup/pagedown/home/end keys).
  • Measurements are now pauseable.
  • Cancelling a potentially long-running operation like measurements or profile generation now needs to be confirmed.
  • Improved robustness of ambient measurement code.
  • Show an error message when communication with the instrument fails (instead of just logging the error).
  • Show an error message when trying to measure ambient light and ambient measurements are unsupported (instead of just logging the error).
  • Regenerated testcharts preconditioned by gamma-based profiles with slight dark region emphasis.
  • Updated french translation (thanks to Loïc Guégant).
  • “Allow skipping of spectrometer calibration” will now always try to skip spectrometer calibration if enabled, not just when doing a calibration and subsequent profile in one go (“Calibrate & profile”). This means a calibration timeout will then be in effect (which is 60 minutes for the ColorMunki Design/Photo, i1 Pro and i1 Pro 2), and a recalibration will only be needed if this timeout has been exceeded before the start of an operation.
  • Testchart VRML export: Only use Bradford chromatic adaptation if ACCURATE_EXPECTED_VALUES in the .ti1 file is true (i.e. a preconditioning profile was used), otherwise XYZ scaling (to visually match VRML files generated by Argyll CMS).
  • Renamed “Verify profile” to “Measurement report”. Added options for BT.1886 gamma mapping, whitepoint simulation, (limited) support for device link profiles, and madVR color management (3D LUTs). Overhauled report HTML layout and style.
  • Use nicer filenames and titles for HTML reports and uniformity check (e.g. include the display name for which the report was generated).
  • Improved dealing with profile linking errors during 3D LUT generation (show error dialog instead of just logging the error).
  • Always use a cLUT resolution of 65 and don't preserve device curves for 3D LUT generation, regardless of the selected 3D LUT format or size (this should make results consistent between eeColor/madVR, which were always generated like that, and the other formats).
  • Allow the use of PC levels for madVR 3D LUT output encoding.
  • Synchronize input and output encoding for eeColor 3D LUT format.
  • Disable xvYCC output encoding (not supported) and consequently disable it also as input encoding for eeColor because it needs the same input/output encoding.
  • Allow loading of calibration files that do not contain settings.
  • Testchart editor: Combined patch ordering controls.
  • Testchart editor: Vastly enhanced performance of row delete operations on very large testcharts (several thousand patches). Also slightly improved speed of testchart loading.
  • Measurement report charts: Each larger chart contains all the patches from the previous smaller chart. Re-generated video charts preconditioned to Rec. 709 and with slight dark region emphasis.
  • Windows 7 and up: Prefer dispcalGUI profile loader over calibration loading facility of the OS (the latter introduces quantization artifacts and applies wrong scaling, the former uses Argyll CMS and thus doesn't have these problems).
  • Windows: Do not regard unability to determine startup folders as fatal error (this means an autostart entry to load calibration on login can not be created automatically in that case though, so unless Windows 7 or newer is used which has the ability to load calibration without external utilities, calibration needs to be loaded manually).
  • Windows/madVR: Always reset the video card gamma table to linear when using a calibration file and not using the video card gamma table to apply the calibration (this should prevent the potential problem of double calibration being applied if loading a calibration on a display, then switching over to madVR on the same display and using a calibration file while not using the video card gamma table to apply the calibration).

Fixed in this release:

  • A possible unicode decode error when the computer name contains non-ASCII characters, introduced in 1.5.2.5.
  • In some instances the handling of profile name placeholders was quirky (problematic character sequences were those consisting of the same characters, case insensitive, as calibration speed or profile quality shortcodes, i.e. FxF, MxM, SxS, VFxVF and VSxVS, with x being any non alphanumeric character).
  • When loading a settings file, only switch to the associated display device if it can be unambiguously determined (fixes multi-screen setups with identical screens always switching to the first one, a bug introduced in 1.5.2.5).
  • Ignore messages from the logging module (fixes a bogus error message being displayed under Windows when closing dispcalGUI, introduced in 1.5.2.5).
  • Handling of separate video card gamma table access controls was a bit quirky since the addition of virtual display devices.
  • If the 3D LUT target profile was overwritten by the generated device link profile (which could happen if choosing the same path and file name for the 3D LUT/device link profile as the target profile), it prevented changing the source profile.
  • Instrument (spectrometer) calibration can be required multiple times during a calibration run, depending on its duration. This was not handled correctly by the GUI.
  • 3D LUT generation with TV RGB 16-235 encoding could lead to wrongly encoded 3D LUTs if not using the eeColor or madVR format.
  • 3D LUT generation with YCbCr encodings failed with an error if not using the eeColor or madVR format.
  • Standalone utilities (3D LUT maker, curve viewer, profile information, and testchart editor) now function properly even if dispcalGUI itself was never launched before (previously the Argyll CMS version was read from the configuration, so if it was never configured before it could happen that not all available options where shown or it was never asked to select an Argyll CMS executable directory in case the Argyll CMS executables were not found).
  • Don't block other windows when an operation fails while a progress dialog with a modal dialog on top is shown.
2013-10-23 20:09 (UTC) 1.5.3.1

1.5.3.1

Added in this release:

  • New feature: When creating a profile from existing measurement data, averaging of measurements can be performed by selecting multiple files.

Fixed in this release:

  • Fixed possible unicode error in logging module.
  • Fixed a bug with optimizing a testchart for untethered measurements halving the amount of different device combinations by repeating patches if the total patch count was even.
  • Mac OS X 10.6: Fixed weird behavior due to a bug in OS X 10.6's version of sudo.
2013-10-22 14:32 (UTC) 1.5.2.5

1.5.2.5

Added in this release:

  • Full Argyll CMS 1.6.0 support (e.g. JETI specbos 1211/1201, madVR calibration and 3D LUT generation, body centered cubic grid option for creating testcharts).
  • Testchart editor: Charts can be exported as PNG or TIFF files.
  • Testchart editor: Gamma and neutral axis emphasis controls.
  • Testchart editor: “Use current profile as preconditioning profile” button.
  • Testchart editor: Save VRML diagnostic files for testcharts without the need to re-generate the chart.
  • Testchart editor: Sort patches by L*, RGB, sum of RGB or sort RGB gray and white to top.
  • Untethered display measurement and profiling. Be sure to read the note on optimizing testcharts for untethered measurements in automatic mode.
  • Shortcut for the BT.1886 tone curve (previously available by setting gamma to 2.4, absolute, and black output offset to zero).
  • 3D LUT: Enable additional intents.
  • 3D LUT: Support eeColor and Pandora LUT formats.
  • 3D LUT: Support Argyll CMS 1.6 video encodings and BT.1886 gamma mapping.
  • Windows 8 Argyll CMS driver installation instructions to the ReadMe.
  • Instructions how to proceed when a process cannot be started to the ReadMe.
  • Softproof preset (based on FOGRA recommendation).
  • madVR preset.
  • sRGB preset.
  • Allow specifying extra arguments for Argyll's targen command.
  • Computer name, EDID serial and EDID CRC32 placeholders for use in the profile name.
  • Synthetic profile creation facility (e.g. for use as source in 3D LUT generation).
  • ACES RGB and DCI P3 colorspace definitions and reference profiles.
  • Dry run. If enabled in the options menu, all functionality that calls Argyll CMS executables will effectively do nothing. This allows review of the used command line parameters by checking the log.
  • Additional session logs are saved for most operations involving the Argyll tools (i.e. directly in the folder where created files are saved to).
  • Show profile self check ΔE*76 info in profile installation dialog.

Changed in this release:

  • Testchart and preset improvements:
    • All testcharts for LUT profiles have been complemented with additional single channel patches. This should in most cases improve average and maximum delta E of generated profiles, in some cases significantly. In fact, testing has shown that the new “small testchart for LUT profiles” with 154 patches total yields better results than the previous “extended testchart for LUT profiles” with 238 patches.
    • The charts for curves + matrix profiles have been improved by adding a few additional body centered cubic grid patches - all the charts which are not tuned for a certain display type are body centered cubic grid based (this was also the case previously for the LUT testcharts, but not for the matrix charts).
    • The patch order in the LUT charts has been optimized to improve measurement speed.
    • The chart for gamma + matrix profiles has been removed in favor of the updated default chart for matrix profiles.
    • New additional charts for LUT profiles have been added in various sizes.
    • For each of the new charts for LUT profiles, starting from the “very large” size, optimized farthest-point-sampled versions have been added which are pre-conditioned for several common display types: sRGB tone response with Rec. 709 primaries and D65 whitepoint (consumer-grade displays), gamma 2.2 with Rec. 709 primaries and D65 whitepoint (consumer-grade displays, TVs), gamma 2.2 with AdobeRGB primaries and D65 whitepoint (entry-level and high-end graphics displays), L* tone response with NTSC primaries and D50 whitepoint (high-end graphics displays).
    • The naming and patch count of the testcharts for LUT profiles has changed. The mapping that most closely resembles the old testcharts is as follows (total number of patches in parentheses):
      • Old “Default testchart for LUT profiles” (124) → new “Small testchart for LUT profiles” (154)
      • Old “Extended testchart for LUT profiles” (238) → new “Default testchart for LUT profiles” (270)
      • Old “Large testchart for LUT profiles” (396) → new “Extended testchart for LUT profiles” (442)
      • Old “Very large testchart for LUT profiles” (912) → new “Very large testchart for LUT profiles” (994)
      • Old “Massive testchart for LUT profiles” (2386) → new “Massive testchart for LUT profiles” (2527)
    Use of the new charts is highly recommended. All presets have been updated to use the new chart types. The “prepress" preset has also been updated to generate a XYZ LUT profile by default.
  • Detect if the instrument can use CCMX or CCSS colorimeter corrections based on the measurement mode. Disable colorimeter corrections for non-base display types.
  • Correctly map measurement mode to DISPLAY_TYPE_BASE_ID for all supported instruments when creating CCMX.
  • If a colorimeter correction with DISPLAY_TYPE_BASE_ID or DISPLAY_TYPE_REFRESH is selected, automatically set the correct measurement mode.
  • If measuring the colorimeter correction testchart, automatically ensure a suitable measurement mode for colorimeters (if they support more than refresh and non-refresh measurement modes).
  • Do not use spline interpolation for curve plots.
  • Updated french translation, thanks to Loïc Guégant.
  • Renamed calibration quality to calibration speed.
  • Set calibration speed for all presets to medium.
  • Standalone testchart editor: Parse first non-option argument as file to be opened.
  • Testchart editor: Always generate good optimized points rather than fast.
  • Testchart editor: Use existing file path when saving testchart.
  • Testchart editor: Greatly improved the speed of paste operations when comparatively large data sets are used.
  • Disallow -d and -D as extra arguments for Argyll's targen as the testchart editor only supports video RGB.
  • Reset adaptive measurement mode when restoring defaults.
  • Close all profile information windows when hiding the main window instead of just hiding them (don't reopen them when the main window is shown again).
  • Curve viewer: Use float formatting for input RGB display.
  • Only skip legacy serial ports if no instrument detected.
  • Also specify Argyll dispcal/dispread -y parameter for spectrometers.
  • Use Rec. 709 whitepoint chromaticity coordinates for “Video” preset.
  • Changed profile installation error message for virtual display devices.
  • Make it clearer which calibration is used when doing a “Profile only”: When a calibration file is going to be used, change the message from the warning “The current calibration curves will be used” to the informational “The calibration file <x> will be used” with the usual options to embed/not embed/reset video card gamma table.
  • Allow the use of calibration curves when profiling a web display.
  • When creating a colorimeter correction from profile(s), get the instrument name from the embedded TI3 if the data source is not EDID.
  • Do not specify (superfluous and thus ignored) patch window positioning arguments for dispcal/dispread when using a virtual display.
  • 3D LUT: Removed black point compensation option (no longer easily possible because it now uses Argyll's collink internally. You can still have the effect of BPC by creating a display profile with BPC enabled and using it as destination profile during 3D LUT creation).
  • Always copy/move temporary files to the save location if not a dry run, also in case of an error. If copy/move fails, keep them in the temporary directory and inform the user.
  • Disable black point compensation for the “Prepress” preset (there are three presets without bpc - “madVR”, “Prepress” and “Softproof”) and use L* as calibration tone curve.

Fixed in this release:

  • Show black point correction choice also when switching from refresh to any other measurement mode instead of only when switching from refresh to LCD measurement mode or vice versa.
  • Corrected averaged RGB transfer function display.
  • Adaptive measurement mode could not be disabled (regression of r1152 where adaptive measurement mode was made default in dispcalGUI).
  • Work-around a very rare problem where a (bogus) display size of 0x0 mm is returned.
  • Check if the configured colorimeter correction exists before adding it to the list.
  • Update colorimeter correction and testchart lists after deleting settings files.
  • Don't carry over colprof arguments from testchart file (fixes occasional wrong display model and manufacturer in profiles).
  • Average, RMS and maximum delta E metadata was not added to profiles if equal to or greater than 10.
  • Unhandled exception when 3D LUT window was opened and there was no profile selected under settings and also no display profile set.
  • Unhandled exception if colorimeter correction does not exist.
  • Standalone curve viewer: Fix loading of .cal file via commandline argument.
  • Don't strip trailing zeros when displaying average gamma in the status bar of the profile information or curve window.
  • Only set adaptive and hires measurement mode when the instrument supports it (fixes measurement mode switching to non-adaptive if toggling betweeen a colorimeter and a spectrometer).
  • Mac OS X with Argyll CMS 1.5 and newer: Also search library folders for Argyll CMS support files (fixes imported colorimeter corrections not found).
  • Only fall back to private copy of pnp.ids under Mac OS X and Windows.
  • Updated link to Datacolor website download section for the Spyder 2 Windows installers.
  • Transposed bits for EDID red y chromaticity coordinate.
  • Curve viewer / profile info window: Reset tone response curve calculation when toggling LUT checkbox.
  • Correctly react to detected display changes when the actual physical displays didn't change (e.g. when switching Argyll between versions supporting and not supporting the virtual “Web” display).
  • Keypresses or cancel were not recognized during patch reading.
  • Display uniformity measurements: Q or ESC had to be pressed twice to exit.
  • Do not use “install profile” message for non-display profiles.
  • 3D LUT: “apply vcgt” checkbox stayed disabled after switching from a devicelink source profile to a non-devicelink source profile.
  • Update all open windows when switching Argyll versions
  • Do not reset selected colorimeter correction to none when selecting a preset or a settings file.
  • Measurement window position was not correct when switching from web display.
  • Show an error message when choosing a directory as profile save path where no subdirectories can be created.
  • Python 2.7 compatibility: Mask u16Fixed16Number (fixes profile information not working for profiles with negative XYZ or chromaticity values when using Python 2.7).
  • wxPython 2.9 compatibility: Do not specify number of rows in dynamically growing FlexGridSizer.
  • Linux: Use colord's quirk_vendor_name to fix the manufacturer string.
  • Mac OS X 10.6 and up: Clearing and loading calibration needs root privileges in some circumstances.
  • Windows: Correctly escape quotes in arguments (fixes hang when profile name, program path or Argyll path contains a single quote).
  • Windows: Show a meaningful error message when a subprocess can't be started instead of hanging indefinitely.
  • Windows: Ignore WMI errors.
  • Windows: Selecting testcharts saved in the root of a drive under Windows.
  • Windows: Disable broken Windows 2000 support (was broken since 0.8.5.6 when the interactive display adjustment GUI was introduced and is not fixable as Windows 2000 does not implement the required AttachConsole functionality).
  • Windows/Mac OS X: If Argyll profile installation failed, a success message was still shown.
2013-03-03 19:42 (UTC) 1.2.7.0

1.2.7.0

Fixed in this release:

  • Colorimeter correction creation not working when using Argyll CMS 1.5.0 because of missing newly required fields in CGATS data.
  • Mac OS X: Accidentally swapped “/Users/<Username>/Library/Application Support” and “/Library/Application Support”.
2013-03-01 09:39 (UTC) 1.2.6.6

1.2.6.6

Added in this release:

  • Argyll CMS 1.5.0 compatibility.
  • Ability to do remote measurements using Argyll CMS 1.4.0 and newer (Firefox is recommended as client). See remote measurements and profiling.
  • Include black level and contrast in profile verification reports (if possible, i.e. if the test chart contains a RGB=0 patch).
  • 3D LUT: Support color space conversion ('spac') profiles.
  • DCI P3 reference profile.
  • Add “Quality” (if applicable) and “License” metadata to profiles.
  • Add colord device ID mapping to profile metadata.
  • Linux: Add screen brightness to profile metadata if profiling a mobile computer's screen (using the org.gnome.SettingsDaemon.Power DBus interface).
  • Additional logging.

Changed in this release:

  • Revised display uniformity test to generate HTML reports.
  • Use a delay of 200 ms for display uniformity measurements.
  • Detect “Calibrate failed with 'User hit Abort Key' (No device error)” Argyll CMS error message and ignore further errors to prevent popping up multiple error dialogs.
  • Reload currently selected calibration after verifying a profile.
  • Add metadata to fast shaper matrix profiles (e.g. gamut volume and coverage).
  • When deleting a settings file, also offer CCSS, CCMX and files starting with the settings file basename in the same directory for deletion.
  • Enable use of absolute values in profile verification reports regardless of testchart.
  • When loading a profile without calibration settings, look for an accompanying colorimeter correction in the same directory.
  • When only creating a profile and not calibrating, give a clear choice whether to embed current calibration curves in a profile or not.
  • When using black point compensation, keep the black point compensated TI3 measurement file in addition to the unaltered file.
  • When restoring default settings, don't reset the 3D LUT abstract profile as well as 3D LUT and profile info window positions.
  • Truncate the colorimeter correction description displayed in the dropdown if it's overly long.
  • Only load linear calibration curves into the curve viewer when resetting the video card gamma table.
  • Do not remove spaces from the instrument name when assembling the profile name.
  • Only compress JavaScript in HTML reports if the report.pack_js configuration option is set (default 1 = compress).

Fixed in this release:

  • Improved instrument event handling.
  • When measuring the screen using a spectrometer, make sure to repeat the instrument calibration until it is successfully completed or canceled (ColorMunki Design/Photo).
  • When measuring ambient light with a spectrometer, abort after a 30 second timeout if instrument calibration did not complete.
  • Correctly react if the instrument sensor is in the wrong position and prompt the user to set the correct position.
  • Mouse cursor and clicked “Measure” button stayed hidden when aborting a measurement in the display device uniformity test window.
  • Updating the calibration (vcgt) of a profile didn't work if first selecting a .cal file, ticking the “Update calibration” checkbox and then switching to the profile.
  • Disable all calibration controls (except the quality slider) when “Update calibration” is ticked.
  • Only enable “Update calibration” checkbox if calibration can actually be updated.
  • Disable the “Create colorimeter correction...” and “Create 3D LUT...” menu items as well as the “LUT” checkbox in the curves and profile information windows if Argyll CMS executables are not found.
  • Update measurement modes when switching Argyll versions.
  • wxPython 2.9 compatibility.
  • Set manufacturer, model, creator and ID in reference profiles (except ClayRGB and sRGB from Argyll).
  • Only switch over to progress dialog after a three second delay (fixes erroneously switching over to progress dialog under Windows when running calibration or display uniformity measurements directly after a canceled testchart measurement).
  • If using a DTP92, only offer refresh measurement mode.
  • Make sure updated profiles also have updated descriptions.
  • Also overwrite .gam.gz and .wrz files if overwriting an existing profile.
  • Mac OS X: Make sure the menus are re-enabled after calibrate & profile.
2013-01-07 19:41 (UTC) 1.1.8.3

1.1.8.3

Changed in this release:

  • Show display device uniformity measurement window on selected display device if multiple display devices are connected.
  • Hide mouse cursor and clicked button while measuring display device uniformity.

Fixed in this release:

  • Sporadic measurement hang when measuring display device uniformity.
  • Wrong window being shown when calibrating after display device uniformity measurements or vice versa.
2013-01-05 13:32 (UTC) 1.1.7.0

1.1.7.0

Added in this release:

  • Preliminary Argyll CMS 1.5.0 compatibility.
  • Added facility to measure and report display device uniformity. Known issue: Sometimes measurements hang. Press space to try and continue.
  • 3D LUTs can optionally incorporate abstract (“Look”) profiles.
  • 3D LUTs can be created from Device Link (class “link”) and input (class “scnr”) profiles.
  • 3D LUTs can also be created in SPI3D format.

Changed in this release:

  • Updated french translation, thanks to Loïc Guégant.

Fixed in this release:

  • Fedora: Calibration curves were reset to linear when installing a profile and using the Fedora packaged Argyll CMS.
  • Linux, Mac OS X, Windows (Administrator): Colorimeter corrections imported from i1 Profiler and ColorMunki Display software were not listed in the dropdown menu.
2012-11-05 20:32 (UTC) 1.1.2.9

1.1.2.9

Changed in this release:

  • Simplified Spyder 2 enabling instructions.

Fixed in this release:

  • Broken Unicode support (unhandled exception) when dealing with colorimeter correction descriptions containing 8-Bit characters.
  • Check if xicclu is found before attempting to use it for the profile information window (gets rid of bogus “'NoneType' object has no attribute 'encode'” message).
  • Use a default generic message when prompting to choose a profile.
2012-10-05 19:04 (UTC) 1.1.2.1

1.1.2.1

Changed in this release:

  • Disable source profile selector in advanced gamut mapping options if not atleast one of perceptual or saturation checkboxes is selected.
  • Only show a warning if an incompatible colorimeter correction is explicitly selected via the filebrowser.
  • Show a less cryptic error message if an invalid file is selected when importing colorimeter corrections from other display profiling software.

Fixed in this release:

  • Whitepoint color temperature is an integer, not a float. This fixes calibration settings being detected as changed when they actually haven't.
  • Worked around a bug in wxPython where controls in a hidden window react to focus events. This fixes the sporadic hang after calibration measurements during a “Calibrate & profile” run.
  • Linux, Mac OS X: Unhandled exception when trying to import colorimeter corrections from other display profiling software and selecting a file with '.txt' extension.
2012-09-15 15:38 (UTC) 1.1

1.1

Added in this release:

  • Additional profile name placeholder %ds for the display device serial from EDID if applicable (may be empty or bogus).
  • Windows: Additional profile name placeholders %dnw (DeviceString) and %dnws (shortened DeviceString, it may be the same as %dnw if shortening isn't possible). The former is equivalent to what's shown in the display device dropdown. The DeviceString is often more verbose as the sometimes very generic EDID device name (placeholder %dn).

Changed in this release:

  • Updated spanish translation (thanks to Roberto Quintero).

Fixed in this release:

  • Show an error message if a colorimeter correction cannot be used with the selected instrument.
  • Show an error message when trying to import colorimeter corrections from an unsupported filetype.
2012-08-01 10:13 (UTC) 1.0.9.0

1.0.9.0

Changed in this release:

  • Use the original file basename for colorimeter corrections copied over to the storage directory (previously, if a colorimeter correction was copied, it inherited the same basename as the rest of the measurement/profile/calibration files, thus making it a bit cumbersome to determine which colorimeter correction was originally the source, especially in profile verification reports which only showed the filename and not the description from the file contents).
  • Show colorimeter correction file basename in addition to the description if they are different.
  • Linux: Fall back to gcm-import if colord profile installation fails.

Fixed in this release:

  • When switching to L*/Rec. 709/SMPTE or sRGB and then loading settings with a gamma value, the gamma entry field was not shown.
  • Report on calibrated/uncalibrated display and calibration verification did not work if using a colorimeter correction (regression of changeset #1020).
  • Do not freeze if loading a settings file which had an accompanying colorimeter correction that was since deleted.
  • Windows 2000: Don't fail to launch.
2012-06-28 22:05 (UTC) 1.0.7.7

1.0.7.7

This is a bug-fix release for version 1.0.7.6.

Fixed in this release:

  • Unhandled exception in gamut view calculation after profile creation if using french localization.
2012-06-23 00:25 (UTC) 1.0.7.6

1.0.7.6

Added in this release:

  • Option to auto-select a suitable colorimeter correction if available locally.
  • Ability to choose between L*a*b*, XYZ and xyY in profile verification reports.

Changed in this release:

  • Reset default black point correction from automatic to off.
  • If a profile contains no 'vcgt' tag, assume linear calibration.
  • When creating a colorimeter correction, remember the last selected reference and colorimeter measurement file separately.
  • When creating a colorimeter correction, automatically only use white, red, green and blue patches (at 100% device value each) from measurement files, regardless if they contain more patches. This allows re-using of measurement files with different patch counts (as long as they contain those four combinations) that have been created as by-product of other operations, e.g. during profiling. Note that measurements still need to be done under identical conditions and within reasonable timeframe (ideally less than a few minutes apart) to minimize effects of display and instrument drift when creating colorimeter corrections from them.
  • When measuring the colorimeter correction testchart, automatically set the resulting measurement as last selected reference or colorimeter file depending on whether it contains spectral data or not.
  • When restoring the current calibration after measuring the colorimeter correction testchart, do it silently (don't show a message window).
  • Filter colorimeter corrections by selected instrument.
  • Show colorimeter correction description in the dropdown instead of the filename. Show the filename and path on mouse hover.
  • ColorHug: Only enable colorimeter corrections for “Factory” and “Raw” measurement modes.
  • ColorHug: Automatically set “Factory” measurement mode when measuring the colorimeter correction testchart and measurement mode is not yet “Factory” or “Raw”. Restore previous measurement mode afterwards.
  • Linux: Enable ColorHug support by default.
  • Linux: colord wrapper now uses PyGObject instead of ctypes.
  • Updated french translation, thanks to Loïc Guégant.

Fixed in this release:

  • When creating a 3D LUT, don't fail if the target profile contains no 'vcgt' tag and the preference is “Apply calibration” (which is the default) irrespective of checkbox state.
  • Use colorimeter correction (if applicable) from settings stored in calibration files and profiles when loading them.
  • When creating a colorimeter correction, the display name in the description is now taken from the measurement file if available.
  • When creating a colorimeter correction, automatically order the measurements exactly the same by device (RGB) triplets.
  • Hide any profile information window(s) when the main window is hidden and restore them when it is shown again.
  • Correct ID on profile created from EDID after adding gamut coverage/volume metadata.
  • Measurement modes other than “LCD (generic)” and “Refresh (generic)” are now correctly restored from settings embedded in calibration files and profiles.
  • If using the current calibration curves for profiling without calibrating (“Profile only” with “Reset video card gamma table” unchecked), using Argyll CMS 1.4.0, the resulting profile will now contain a 'vcgt' tag with the current calibration like with previous Argyll versions.
  • RGB bars and chromaticity/color temperature readouts when adjusting a whitepoint with blackbody target are now working correctly.
  • Ignore and do not show any explicitly selected Colorimeter Calibration Spectral Sample (CCSS) file for instruments that do not support it.
  • Changing Argyll version/binaries in dispcalGUI with automatic instrument detection switched off is working correctly again without the need to restart the program.
  • Show ColorHug-specific measurement modes (please run instrument detection once again to refresh the list if you already used the ColorHug in a previous version of dispcalGUI).
  • Saturation gamut mapping settings are no longer ignored.
  • Trying to view profile information for profiles whose black point X Y Z sum is zero will no longer result in a division by zero error.
  • Black point compensation is no longer attempted if not atleast one black or white patch is found in measurement data.
  • Linux: Don't error out if profile installation with dispwin fails, but profile installation via colord or oyranos-monitor is successful (fixes profile installation when using the distribution-packaged Argyll under Fedora)
  • Linux: colord device key name now correctly adheres to device naming spec for xrandr devices (fixes some profile installation problems).
  • Linux, Windows: Correctly detect in the profile loader if linear calibration is assumed when using Argyll CMS 1.4.0 or newer.
  • Windows: Continuous measurements during interactive display adjustment are now stopped reliably when clicking the “Stop measurements” button or hitting the space key.
2012-04-02 19:24 (UTC) 0.9.9.1

0.9.9.1

Added in this release:

  • Spyder 4 support if using Argyll CMS >= 1.3.6. To make all measurement modes available, you have to use “Import correction matrices from other display profiling softwares...” from the “Tools” menu.
  • Experimental ColorHug support is enabled through Argyll CMS >= 1.3.6 if the ENABLE_COLORHUG environment variable is set, but the ColorHug currently doesn't work reliably across all platforms.
  • Added information about instrument measurement modes to the ReadMe.

Changed in this release:

  • GUI spring-cleaning: Re-arranged some controls and replaced radiobuttons and read-only combo-boxes with choice controls instead. Only the controls related to a selected choice are shown.
  • Default calibration black point correction to automatic.
  • Replaced previous 19-patch colorimeter correction testchart with smaller 4-patch version (just red, green, blue at 100% each and white, as is the default with Argyll CMS 1.3.6).
  • Linux packages: Added Argyll CMS to dependencies. Please note: If you want the latest Argyll features or run into problems, it is recommemded to download the standalone Argyll binaries from argyllcms.com as the distribution repositories often only contain older Argyll CMS releases.

Fixed in this release:

  • Fixed unhandled exception when adding metadata to a profile from EDID that contains an invalid (out of range) gamma value.
  • Fixed slightly off the mark whitepoint in resulting profile when using black point compensation (typical max. error 0.2 ΔE*76). You may want to re-create existing profiles.
  • Do not reset visibility of advanced calibration options when restoring defaults.
  • Store black point compensation setting in profiles.
  • Mac OS X: The application bundle now again contains all required files (no missing files when dragging just the bundle to Mac OS X “Applications” folder).
2012-03-15 14:45 (UTC) 0.9.6.6

0.9.6.6

Added in this release:

  • Black point compensation option for profiles (default ON). This effectively prevents black crush, but at the expense of accuracy of the resulting profile.
  • Profile information window with 2D gamut plot as well as information pane which shows profile header and tag data in detail (with few exceptions).
  • Ability to create display correction 3D LUTs for use in movie post-processing applications that don't have ICC support. Currently supported are the .3dl and .cube formats.
  • Write gamut VRML files and calculate coverage and volume percentages against sRGB and Adobe RGB when creating profiles.
  • Add 'chrm' tag (xy chromaticities for each primary) to created profiles. Unlike the values from 'rXYZ', 'gXYZ', 'bXYZ', A2Bx or 'clrt' tags, the 'chrm' data corresponds to the actual measured chromaticities without chromatic adaptation or interpolation. The 'chrm' tag is purely informational.
  • Windows 7 and later: Added an option to let the operating system handle calibration loading when installing a profile (this option requires dispcalGUI to be run as Administrator and is also available in the dispcalGUI installer. If selecting the option there, the dispcalGUI Profile Loader will not be installed to the startup items. A shortcut to the loader is still available in the dispcalGUI folder in the start menu though, to be able to quickly force a reload of calibration).

Changed in this release:

  • Instrument detection now defaults to manual. A click on the icon with the swirling arrows or choosing the corresponding menu item in the “Options” menu detects connected instruments. Automatic instrument detection can be (re-)enabled/disabled there, too.
  • The dispcalGUI Profile Loader can now be set to not show error messages again (errors will still be logged).
  • Tone response curves are now plotted as L* → RGB by default and are also calculated for LUT profiles (profiles with both LUT and matrix TRC tags allow on-the-fly switching between them). In addition, the transfer function is shown if it can be estimated.
  • Windows: Allow enabling/disabling of calibration loading on login when installing a profile (to be able to change this option when Windows 7 or later is set up to handle calibration loading, either dispcalGUI needs to be run as administrator or in the Windows color management control panel “Advanced” tab, click on “Change system defaults...” and disable “Use Windows display calibration”).

Fixed in this release:

  • Do not fail to launch due to unhandled exception when parsing CGATS files containing KEYWORD, INDEX, SAMPLE_ID or DATA_FORMAT values in exponential notation.
  • Do not use exponential notation for low (< 0.0001) calibration black level target values.
  • Correctly handle failed instrument calibration (by asking to repeat) and measurement failures which are not misreads or communication failures (and should thus not be retried automatically).
  • Also look at ASCII descriptor blocks when determining the display device name from EDID (fixes display model not being set in profiles for certain Apple displays).
  • Don't loose 'mmod' tag (monitor make and model) when creating a profile from measurement data embedded in an existing profile.
  • Automatically restore calibration after measuring the colorimeter correction testchart.
  • Restore Argyll CMS < 1.3.0 compatibility (broken in 0.8.9.3).
  • Windows Vista, 7 and later: Automatically enable “Use my settings for this device” in Windows' colormanagement settings when installing a profile.
2012-02-11 03:56 (UTC) 0.8.9.3

0.8.9.3

Fixed in this release:

  • Selecting a smaller default testchart than the recommended one did not work (was reset to the recommended default when starting measurements or re-starting dispcalGUI).
  • Restore previously selected testchart if canceling colorimeter correction measurements.
  • Disable the “Measure” button in the “Create colorimeter correction” dialog if no display or instrument detected/selected.
  • Disable menus while the main window isn't shown (only affects operating systems where the menu is not part of the main window e.g. Mac OS X).
  • Linux: Fixed i1 Display Pro / ColorMunki Display missing from Argyll udev rules (this was actually already fixed in 0.8.5.2, but not mentioned in the changelog).
  • Mac OS X Lion: Removed sporadic password dialog being shown after calibration measurements when running “Calibrate & profile”.
  • Mac OS X Lion: Fixed an issue with profile installation for the current user which only installed the profile for the root user, thus not making it available in system preferences and making e.g. the login screen the only visible place where it was effectively being used.

Changed in this release:

  • Allow the selection of LCD or CRT measurement modes for spectrometers too (determines the available controls during interactive display adjustment).

Added in this release:

  • GUI for interactive display adjustment.
  • Add 'mmod' tag (monitor make and model, an Apple-specific private tag) to created profiles (ensures the profiles still show up in Mac OS X system preferences if “Show profiles for this display only” is ticked).
2012-01-24 18:40 (UTC) 0.8.5.2

0.8.5.2

Fixed in this release:

  • Added missing numbers to “delta E too high” message when trying to upload a profile with low self-fit accuracy.
  • Decoding of numerical manufacturer ID from EDID when adding metadata to a profile was done in the wrong byte order.
  • Fixed missing terminating NUL character for copyright tag when creating a profile from EDID.
  • Fixed missing underscore in EDID colorimetric metadata key names as per the ICC meta Tag for Monitor Profiles specification.
  • Linux: Display measurements couldn't be started if dispcalGUI was installed via the 0install feed.
  • Mac OS X: The file which maps Plug'n'Play device IDs to manufacturer names was not found when running from the application bundle, resulting in manufacturer entries in profiles always being equivalent to the three-letter PnP ID instead of the full manufacturer name.

Changed in this release:

  • Measurements for colorimeter corrections can now be started directly from the dialog, and the previous testchart is restored afterwards.
  • Add more metadata to generated profiles to allow better automatic selection/ranking on systems that support it and standardized a few previously dispcalGUI-only keys (ICC meta Tag for Monitor Profiles / GCM metadata specification).
  • Use product code as fallback for make/model when creating profiles from EDID.
  • Windows: In case of an Argyll CMS 'config 1 failed' error upon trying to use an instrument, inform the user its driver may not be installed.

Added in this release:

  • Added ability to specify the display technology for created colorimeter corrections.
  • Enabled overriding of default gamut mapping intents for LUT profiles. “Luminance matched appearance” is the default override for perceptual intent, which provides an effect similar to black point compensation.
  • The colorimeter corrections database now has a public web interface and API.
2011-12-08 13:33 (UTC) 0.8.1.9

0.8.1.9

Fixed in this release:

  • Ignore 'unknown' (not required) fields when verifying CGATS (fixes bug 'invalid testchart' after profiling with spectrometer, introduced in r780).
  • Force a default testchart if the selected one is invalid.
  • Linux (autopackage): Set PYTHONDONTWRITEBYTECODE= (empty string) to fix installation on Mandriva 2011.

Changed in this release:

  • Default profile type should be 3x shaper + matrix, not single shaper + matrix.
  • Some of the advanced calibration options (gamma type relative/absolute, ambient adjustment, black point correction and offset) are now hidden by default and can be shown via the corresponding menu item in the options menu.

Added in this release:

  • Option to share profiles via the openSUSE ICC Profile Taxi service.
  • Option to create profiles from extended display identification data (EDID).
  • Linux (GNOME 3): colord compatibility (query current profile, install & set profile).
2011-10-06 21:44 (UTC) 0.7.8.9

0.7.8.9

Fixed in this release:

  • Additional commandline arguments were ignored when doing profile verification measurements.
  • Windows: If the startup folder in the start menu was deliberately deleted, the profile loader shortcut wasn't created when installing a profile.
  • Windows: Profile loader correctly verifies if the calibration was sucessfully loaded.

Changed in this release:

  • Skip legacy serial ports by default when detecting instruments (serial instruments like the DTP92 or Spectrolino will no longer be selectable unless you manually set skip_legacy_serial_ports = 0 in dispcalGUI.ini or use a serial to USB adapter).
  • Windows: The profile loader shortcut in the startup folder inside the start menu is now created at installation time (and removed when uninstalling).
  • When checking for program updates, show the changelog for the new version if an update is available.
  • Confirm enabling of debugging output.

Added in this release:

  • Support for Argyll CMS 1.3.4 features: i1 Display Pro and Colormunki Display, Colorimeter Calibration Spectral Sample (.ccss) files.
  • Ability to import colorimeter corrections from other display profiling softwares. Currently iColor Display, i1 Profiler and ColorMunki Display are supported.
  • Ability to create correction matrices and Calibration Spectral Sample files, with the option to share them via an online database.
  • Option to automatically check for program updates on startup.
  • Added information how to fix instrument not working correctly/constantly disconnecting under Linux due to a conflict with libmtp (thanks to Pascal Obry who notified me of the issue back in May 2011).
2011-08-05 01:06 (UTC) 0.7.3.7

0.7.3.7

Fixed in this release:

  • Linux: Fixed multi-display support when not using separate X screens.
  • Mac OS X: Fixed not being able to run under a standard user account, and Mac OS X 10.7 compatibility.
  • Mac OS X 10.4.x: Fixed functionality requiring elevated privileges, e.g. installing profiles system wide or enabling the Spyder 2 using Argyll 1.1.x (regression of a change introduced in r706 / 0.7.0.7)
  • Windows: Fixed several problems with special characters in paths which are not representable through the file system encoding.
  • Windows: Worked around OS localtime() bug. If the system's clock was set to a date far into the future, dispcalGUI failed to launch on subsequent runs because of the logfile's timestamp which could not be processed by localtime().
  • Windows Vista/7: Querying the user display profile resulted in a “not found” error if the checkbox “Use my settings for this device” was never ticked in Windows' color management control panel, failing the fallback of querying the system display profile in case of no user display profile.

Changed in this release:

  • All presets now use curves + matrix as profile type (for better overall application compatibility).
  • Better feedback when trying to open broken/invalid files (display an error dialog instead of just logging the error).
  • Icons in the task switcher on Windows Vista/7 (and presumably Linux) should now be crisp and not pixelated.
2011-06-02 21:45 (UTC) 0.7.0.7

0.7.0.7

Fixed in this release:

  • wxPython 2.8.12 compatibility.
  • Linux: Preserve environment when installing a profile system-wide so $DISPLAY is available for dispwin.
  • Linux (Source): Changed highest supported Python version to “lower than 3.0” because openSUSE Build Service would choke on “lower than or equal to 2.7” when building for Ubuntu 11.04.
  • Linux (Source): Fixed setup.py bdist_deb as far as possible (see notes under installing from source, additional setup commands, bdist_deb)
  • Windows: Fixed error when the display profile cannot be determined (e.g. when running remotely).
2011-04-20 21:08 (UTC) 0.7.0.0

0.7.0.0

Fixed in this release:

  • Updating profile verification reports created in versions prior to revision 672 should not strip calibration and gray balance information anymore (regression of a change in r672).
  • If the Spyder 2 was enabled using Argyll CMS 1.2 or newer, this should now be reflected correctly in the “Tools” menu by a checkmark next to the “Enable Spyder 2” menu item.
  • Linux (Autopackage, DEB and RPM installs) and source: Fixed missing application icons in sizes other than 16x16 and 32x32 if the source archive was created with setup.py under Mac OS X or Windows (regression of a change in r501).
  • Linux/Windows: The location of the Argyll binaries was not stored in the system-wide configuration, which could prevent the profile loader from finding the Argyll binaries if they were not on the PATH environment variable and a profile was installed system-wide.
  • Windows: Fixed program termination if EnumDisplayDevices fails (e.g. when running remotely).
  • Windows: Fixed program termination if a display device has no driver entry in the registry (the very generic Windows error message is misleading in that case: It pretends a file was not found).
  • Windows XP: Correctly enumerate display device names and EDID.

Changed in this release:

  • When doing verification measurements of a (non-Argyll) profile containing a chromatic adaptation 'chad' tag, dispcalGUI now tries to use the same chromatic adaptation transform to calculate adapted values from the measurements instead of using a hardcoded Bradford transform.
  • The default delta E formula for “RGB + gray balance” evaluation is now DE 2000.
  • The delta E formula is now locked for the Fogra MediaWedge and IDEAlliance Control Strip evaluation criteria.
  • The “Update calibration” and “Update profile” checkboxes were combined into one. This removes the ambiguity about what “Update profile” functionality actually was: Only updating the calibration inside the profile. Both updating stand-alone calibration '.cal' files and calibrations embedded in profiles are now handled with the single “Update calibration” checkbox. The slightly different workflow of only updating the calibration, and then creating an actual new profile on top of it in one go, is still possible by explicitly loading a calibration '.cal' file under “Settings”.
  • Made the GUI a bit nicer towards low screen resolutions by moving more controls into the scrollable area and also removing the graphical banner and allowing horizontal scrollbars if things get really cramped.
  • Windows Vista/7 and later: To be able to install a profile system-wide, you now need to run dispcalGUI explicitly as administrator (right-click the dispcalGUI icon, then select “Run as administrator”) to show the appropriate controls in the profile installation dialog.

Added in this release:

2011-01-24 03:56 (UTC) 0.6.7.7

0.6.7.7

Fixed in this release:

  • Fixed measurements hanging at the start if using the black background option.
  • wxPython 2.9 compatibility.
  • Windows: Potential COM error caused by obsolete code.
  • Windows Vista/7: Potential WMI errors when trying to read a display's EDID are now suppressed (the EDID can not be read on systems where WMI has errors, which may prevent more accurate display descriptions, but will not impede functionality otherwise).

Added in this release:

  • Profiles can now be dragged and dropped onto the curve viewer.
  • When using the profile verification feature, it is now possible to first select a simulation profile before choosing a testchart.
2010-11-05 03:12 (UTC) 0.6.6.7

0.6.6.7

Fixed in this release:

  • Re-enabled warning message from the profile loader if the calibration in the video card does not match the requested calibration after loading.
  • Fixed “Show curves” checkbox in the profile installation dialog not doing anything if the curve viewer was not shown before (regression of a change in version 0.6.2.2).
  • Fixed a small visual glitch where the message “Calibration complete” was not cleared from the progress window after instrument calibration.
  • Fixed possibility of unprintable characters from EDID strings (e.g. display name) causing errors.
  • Fixed Argyll CMS diagnostic output not working for dispwin when using Argyll CMS 1.3.1
  • Linux: Fixed Autopackage install not working with Python 2.7

Added in this release:

  • Linux: Added a “Load profile and calibration on login” checkbox to the profile installation dialog. Normally, you want to keep this checked, so that dispcalGUI's profile loader can setup the configured display(s). But if you use another solution for loading profiles, like Oyranos with the CompICC plugin, you should uncheck it, so that display profiles are solely handled by CompICC.
  • Mac OS X: Like on the other platforms, EDID is now used if available.
2010-10-24 04:36 (UTC) 0.6.5.3

0.6.5.3

Fixed in this release:

  • Fixed a bug where the wrong correction matrix setting was stored in a profile or calibration file when changing the correction matrix, and creating a profile with a previous settings file selected which used a different correction matrix. Note this didn't affect measurements when creating the new profile or calibration file, but when loading it in dispcalGUI, the correction matrix used for the previously selected settings file was set instead of the one actually used when creating the new file.
  • Fixed missing XYZ values for the assumed whitepoint in profile verification reports.
  • Fixed crash when the manufacturer ID from a display's EDID contains invalid data.
  • Honor the selected display when loading calibration curves from a settings file.
  • Linux: Installing profiles under multi-display configurations using separate X screens should now work better when Oyranos is installed (previously, when the profile for the second screen was installed after the profile for the first screen, it would override the first profile in the Oyranos configuration. Profiles can be re-installed with this version of dispcalGUI to fix this).
  • Linux: Profile loader: When Oyranos is installed, but not xcalib, the fallback to dispwin to load the calibration curves was not working.

Changed in this release:

  • Reset additional commandline arguments too when restoring defaults.
  • The profile loader will no longer show an error message when unable to determine a display's current ICC profile, as there may just not be any profile installed for the respective display. Instead, such errors are now silently logged.
  • Improved error messages from the profile loader by adding some information about the affected display for easier troubleshooting of multi-display configurations.
  • Windows: Profile installation: When a system-wide autostart entry for the calibration loader already exists, do not create a per-user entry.
  • Linux: The autopackage can now be installed just for the current user. Note this will not setup instrument access though, as that requires root privileges.

Added in this release:

  • Save the device model and manufacturer description to measurement data (.ti3) files and use that information when creating a profile.
  • Log all output from the profile loader.
  • Ability to just measure a testchart and create a measurement data file (menu “Options”, “Measure testchart”).
  • Approximate gamma for grayscales is shown in profile verification reports.
  • Build system: Added --skip-postinstall option.
2010-09-19 17:53 (UTC) 0.6.2.2

0.6.2.2

Fixed in this release:

  • Trying to verify or view curves of a (non-Argyll) profile with a 'formula' type vcgt tag no longer fails with a 'NameError'.
  • When the measurement window was moved to the leftmost and/or topmost coordinates of the screen, the calculated relative position could become negative and prevent starting measurements.
  • Trying to profile a display which provides an empty model description via EDID no longer fails.
  • Profile name placeholder %im (instrument measurement mode) now inserts the correct string.
  • Profiling did not finish if “Show actual calibration curves from video card gamma table” was checked and the curves window shown.
  • Fixed black point correction rate not being restored correctly when loading settings.
  • Fixed conversion of the color temperature to xy chromaticity coordinates (the input fields in the GUI) which was erroneously being calculated with the formula for daylight even if a blackbody locus was chosen.
  • Fixed assumed whitepoint in profile verification reports erroneously being calculated with the formula for daylight even if a blackbody locus was originally chosen when creating the profile.
  • Fixed profile verification reports not working in Internet Explorer 5.x-6.0 and Opera 7.x.
  • Fixed profile verification reports showing “missing data” for some fields if using the Fogra Media Wedge V3 criteria and the reference file contained both XYZ and Lab data.
  • Mac OS X: A double extension (.icc.icm) is no longer added when creating a profile from an existing one (menu “Options”, “Create profile from measurement data...”).

Changed in this release:

  • When loading settings from calibration (.cal) files, the actual parameters chosen when calibrating are now set instead of stored measured values (e.g. whitepoint, black- and white level. Will only work for .cal files created in this version and up).
  • “Allow skipping of spectrometer self-calibration” (in the “Options” menu) for characterization readings after calibration is now disabled by default to help sensor stability (especially for the ColorMunki).
  • Black point correction rate now uses a floating-point control with the range 0.05...20.0 (consistent with the Argyll CMS dispcal commandline tool) instead of the previous integer control with the range 5...2000.
  • The default evaluation criteria for RGB testcharts in profile verification reports is now RGB only.
  • The default Delta E formula used for results in profile verification reports is now Delta E 2000 (except for standardised criteria like the Fogra Media Wedge V3).
  • Additional statistics in profile verification reports are now hidden by default.
  • Selecting “CMYK” or “RGB” in profile verification reports now actually makes a difference (shows the corresponding device values in the overview).
  • “Evaluate gray balance through calibration only” in profile verification reports is now disabled by default.
  • Windows: Installing a profile system-wide removes an existing user autostart entry for the profile loader to avoid having two entries.
  • Windows: EDID info will be used if available instead of generic device strings ('PnP-Monitor' et al).

Added in this release:

  • Ability to enable Argyll CMS diagnostic (debugging) output for measurements via menu “Options”.
  • Option to choose blackbody whitepoint reference instead of daylight in profile verification reports.
  • Original profile whitepoint is now shown in profile verification reports.
  • Instrument black level and display white level drift compensation options when using Argyll CMS >= 1.3.0
  • Ability to choose a correction matrix for colorimeters when using Argyll CMS >= 1.3.0
  • Allow setting of additional commandline arguments for dispcal, dispread, spotread and colprof via a new menu item in the “Options” menu.
  • IDEAlliance Control Strip 2009 aim values for profile verification with CMYK test charts.
  • Profile verification report shows instrument measurement mode and correction matrix (if any).
  • Menu option to update existing profile verification reports with the current templates.
2010-08-01 03:19 (UTC) 0.5.8.1

0.5.8.1

Fixed in this release:

  • Argyll CMS 1.2.0 compatibility
2010-07-25 13:19 (UTC) 0.5.8.0

0.5.8.0

Fixed in this release:

  • The timeout of 10 seconds for the startup of Argyll tools and instrument initialization was too short for some instruments and is now increased to 30 seconds. If the timeout is ever exceeded, dispcalGUI should now also abort automatically and no longer hang.
  • When previewing the calibration upon profile installation, use a linear calibration if no display profile is present when toggling the preview on and off (fixes the curve viewer not updating).
  • Fixed closing the log window not re-enabling the “show log automatically” menuitem.
  • Linux (Autopackage install): Fixed menu entry sometimes disappearing permanently after logging out under GNOME.
  • Linux: Fixed dispcalGUI not working if libX11 or libXrandr do not expose certain functions (e.g. under Mandriva 2009).
  • Linux: Fixed not being able to install a profile using GNOME Color Manager when the profile was not writable.
  • Linux: Fixed not being able to install a profile using Oyranos when the profile was not located in ~/.color/icc/devices/display.
  • Linux/Mac OS X: Saving a log file from the log window now works correctly.
  • Mac OS X: The terminal should no longer lose its focus when the measurement area is shown. This should also make the mouse cursor reappear which is otherwise hidden by dispcal/dispread.
  • Mac OS X 10.6: The current display profile should now be determined correctly (e.g. for the curve viewer) when loading its calibration curves or selecting the “<Current>” settings.
  • Windows (installer): An unused console window is no longer shown when launching dispcalGUI via the installed shortcuts.
  • Windows: Fixed executable not working under Windows 2000.

Changed in this release:

  • Do not pass through the “hit any key to retry” message from Argyll CMS tools to the progress dialog in case of misreads/port communication problems (retries happen automatically, so there is no need and also no possibility for keyboard interaction).
  • Enabling the Spyder 2 is now less cumbersome if the original installation CD is not available (especially on Mac OS X, where the firmware couldn't be found if a recent version of the Spyder 2 software was installed) and should work with the downloadable Spyder 2 software installers (but they need to be run to install the software first because the firmware can't be extracted from the installer binaries directly). Messages are now hopefully more informative to give a better idea of what to do. If the firmware can't be extracted from the Spyder 2 software installer, you are asked to install the software and try again. If that can't be done because of platform incompatibility (Linux), the last choice is to locate the Spyder.lib/CVSpyder.dll file manually (it must be copied from a Mac OS X or Windows system in that case).
  • Linux: Allow installation of profiles using GNOME Color Manager even if XRandR is not working/available.
  • Linux: Installation now checks for existing udev rules/hotplug scripts for instruments and only installs its own rules if none exist yet.
  • Linux/Windows: The profile loader will now show a warning dialog if a profile couldn't be loaded.
  • Linux/Windows: Device model and manufacturer are added to profiles if EDID[10] info is available.

+ Numerous other small fixes and changes.

2010-06-29 19:23 (UTC) 0.4.9.2

0.4.9.2

Fixed in this release:

  • Spectrometer sensor calibration sometimes accidentally occured when the instrument was still attached to the screen, leading to erroneous subsequent readings.
  • Immediately close a profile after reading to avoid locking it (fixes not being able to delete files from within the GUI).
  • Fixed quirks in “update calibration” and “update profile” operation.
  • The system-wide installation option in the profile install dialog is no longer hidden just because a profile has no embedded calibration curves (vcgt tag).
  • If the calibration curves of the current display profile couldn't be loaded for some reason (broken video card gamma table access, or no profile set), the curve viewer was not yet shown, and then a profile under “Settings” was selected, and then deleted, and then the curve viewer called up, an unhandled exception was raised.
  • Fixed ambient measurement via the “Measure” buttons timing out with the ColorMunki and various error handling issues regardless of instrument which could lead to an un-cancelable, forever looping progress bar.
  • Fixed ambient color temperature measurement via the “Measure” button not updating the kelvin field if selected.
  • Linux (only if the detected filesystem encoding is not UTF-8), Mac OS X and Windows: When installing a profile with “special” characters in the filename (everything not representable as 7-bit ASCII), it is now given an unique name containing the display number and MD5 hash, which fixes a few problems with filename encoding under Linux and Mac OS (under Linux the profile couldn't be successfully installed, under Mac OS X system-wide installation partly broke). This also fixes an issue under Windows where a profile whose name starts with the same first few characters (but has not the same name) as an already existing file in the system profile directory could accidentally overwrite that file, because I had not considered that filenames returned by win32api.GetShortPathName are only unique for the directory where a given file resides—and upon installation, that is the profile storage directory, not the system profile directory.
  • Linux, Mac OS X: When installing a profile, interaction with the curves window works now while the installation dialog is shown.
  • Windows (standalone executable): Fixed ambient measurement via the “Measure” buttons reproducably hanging (regardless of instrument) if the MS Visual C++ 2008 Redistributable Package (x86) was not installed.

Added in this release:

  • Linux: Oyranos support. If it is available, profiles are imported to the Oyranos database using oyranos-monitor upon installation, and an appropriate autostart entry is created to load calibration curves and setup the X _ICC_PROFILE atoms on login.
  • Linux: Rudimentary support for GNOME Color Manager. If it is available and XRandR is working, profiles are imported to GCM upon installation. Any calibration loaders created previously by dispcalGUI will be removed (except the possible oyranos-monitor entry). You then still have to manually assign the profile to a display in the GCM preferences by selecting it and then choosing the profile from the dropdown menu (in the future, this process will be made obsolete by using GCM library functions). Loading of calibration curves and setting up the X _ICC_PROFILE atom and XRandR output properties is then handled by GCM.
  • Menu option to automatically show the log window after certain operations (measurements, profile creation).

Changed in this release:

  • The terminal window is now only shown when required (e.g. keyboard interaction during interactive display adjustment). Also, the terminal used is no longer an external application, but a minimal emulator that just passes keyboard input to the Argyll CMS tools.
  • All measurements which do not require keyboard interaction with Argyll CMS tools now show a progress dialog with the option to cancel the measurements. All output that was previously visible through the terminal is still available via the log window (“Tools” menu) and -file.
  • Always load calibration curves before installing a profile, even if the profile has no vcgt tag (resets calibration to linear).
  • Automatically scroll to bottom when messages are added to the log window.
  • Store calibration and profiling settings in extra sections inside the TI3 file instead of the profile copyright tag. Use “generic” copyright information (“Created with dispcalGUI <version> and Argyll CMS <version>”), overridable by adding a line copyright = My copyright information in dispcalGUI's configuration file.
  • Made sure that only 7-bit ASCII gets written to a profile's copyright, ASCII description, and ASCII device model description. ICC v2 Unicode and Mac ScriptCode descriptions are now also written by default.
  • Presets default to high profile quality.
  • Remember visible state of curves, log window and testchart editor.
  • Updated french translation (thanks).
  • Linux: Unattended calibration & profiling no longer depends on xautomation.
  • Linux: EDID[10] is now used (if available) when generating descriptive identifiers for displays.
  • Linux: When determining a display's associated profile, check XrandR _ICC_PROFILE output properties first if available.
  • Linux: The option to install a profile system-wide is not offered if using GNOME Color Manager to install profiles (GCM has its own way to set profiles as system default).
  • Linux (only when GCM is not installed or XRandR is not working), Mac OS X, Windows: Installing a profile system-wide now also sets it as default for the current user.
  • Windows Vista and later: The option to install a profile system-wide is no longer offered if using Argyll CMS <= 1.1.1 (system scope in Argyll releases up to 1.1.1 acts like user scope on those systems).

+ Numerous other small fixes and changes. There is now also a mailing list for discussion and support as well as announcements (see at the top of this document).

2010-05-07 22:36 (UTC) 0.3.9.9

0.3.9.9

Fixed in this release:

  • Fixed unreliable (hanging occasionally) profile install when using system scope under Linux and Mac OS X (regression of a change in SVN r391 / 0.3.9.3).
  • Fixed ICC profile truncation if actual tag data is not in the same order as the tag table (regression of a change in SVN r274 / 0.3.0.7. Argyll profiles were not affected).
  • Fixed potential invalid profile name being generated if some unicode characters can't be conveyed in the file system encoding (Windows, Linux).
  • Fixed possible backslash in profile name due to wrong escaping when replacing invalid characters.
  • Fixed support for codepages 65000 (UTF-7) and 65001 (UTF-8) in the main application under Windows. This is actually a fix for shortcomings of Python.
2010-05-03 18:45 (UTC) 0.3.9.3

0.3.9.3

Added in this release:

  • Show percentage and amount of tone values per channel (+ grayscales) for calibration curves in the curve viewer and profile verification reports.
  • Profile verification: Enabled gray balance evaluation for all RGB charts containing grayscales (R=G=B). Added option to verify graybalance through calibration only (sets the target L* of each grayscale patch to the measured L* and target a*=b*=0).
  • Added documentation for the interactive display adjustment part of calibration.
  • Added further documentation of the profile verification feature with detailed information about underlying technical aspects.

Fixed in this release:

  • Fixed an unicode error after creating a profile verification report in a path containing unicode characters and a few other unrelated (potential) unicode errors.
  • Fixed potential unhandled exception if a JSON language file is malformed.
  • Fixed unhandled exception (local variable referenced before assignment) if trying to view calibration curves of an output with no video card gamma table access.
  • Fixed rare unhandled exception (local variable referenced before assignment) if logfile couldn't be renamed or removed during rollover.
  • Fail more gracefully (omit traceback from error message) if temp directory couldn't be created.
  • Fixed handling of XDG_CONFIG_DIRS and the system-wide autostart directory if the preferred configuration directory does not exist under Linux when installing a profile in local system scope, which prevented the system-wide autostart entry to be created.
  • Correctly determine system display profile under Windows Vista and 7 if no user profile is set. Fall back to sRGB if no display profile is set.

Changed in this release:

  • Changed default gamma from 2.4 to 2.2 in an attempt to increase the amount of available gamma table tone values after calibration for LCD screens, which often have a native response that is closer to a gamma of 2.2 than 2.4.
  • Changed default profile type to single curve + matrix.
  • Profile verification: Only evaluate grayscales (R=G=B) if their luminance is atleast 1% of the white luminance. Also evaluate combined Δa and Δb range.
  • Moved instrument feature details to separate JSON configuration file.
  • Made compatible with wxPython 2.8.6.0.
2010-03-31 15:24 (UTC) 0.3.8.0

0.3.8.0

Added in this release:

  • “Very large” testchart with 912 patches.
  • Profile verification: Support (non-Argyll) profiles which use chromatic adaption.

Fixed in this release:

  • Improved error message when Argyll binaries are not found (only files not found are now shown, together with alternatives). Automatically fall back to xicclu if icclu is not found (eg. Ubuntu's Argyll 1.0.3 package doesn't contain icclu).
  • Fixed 'invalid syntax' error when running under Python 2.5.
  • Profile verification report: Fixed a parsing error when reference or measurement data contained numbers in exponential notation.
  • Linux: Unhandled exception if DISPLAY environment variable is in the format [host]:displaynumber instead of [host]:displaynumber.screennumber (eg. :0 instead of :0.0).
  • Mac OS X: Fixed values entered in combo boxes not updating the configuration correctly under some circumstances.

Changed in this release:

  • Profile verification: Lookup device values relative colorimetrically and adapt the measured values to D50 before comparison (using Bradford matrix), so that the measured whitepoint corresponds to L*a*b* 100 0 0. Please note that verification results obtained with reference files measured in earlier versions of dispcalGUI should not be compared to those obtained via this new approach if the display whitepoint is not D50, as the results are likely to be different as an effect of the relative lookup and the chromatic adaption.
  • Profile verification: Improved support for non-Argyll CGATS text files. Handling is as follows:
    • If the file contains RGB_R RGB_G RGB_B fields, it is handled like a Argyll *.ti1 (testchart) file—any XYZ or Lab data is ignored and the RGB numbers are sent to the display and measured. Afterwards, the measured values are compared to the expected values, which are obtained by sending the RGB numbers through the profile. If RGB values above 100 are found, a range of 0-255 is assumed. Otherwise, a range of 0-100 (like Argyll *.ti1) is assumed.
    • If the file doesn't contain RGB_R RGB_G RGB_B fields, but XYZ_X XYZ_Y XYZ_Z or LAB_L LAB_A LAB_B, it is handled like a Argyll measurement data (*.ti3) file—the values are used to lookup corresponding RGB numbers through the profile and these are then sent to the display and measured. Afterwards, the measured values are compared to the original XYZ or Lab values.
  • Profile verification report: Show measured whitepoint and assumed target color temperature (based on closest daylight temperature), and use them to calculate the Delta E for the whitepoint. A few performance improvements when processing large datasets with several hundred or thousand measurements.
  • GUI and ReadMe: Changed all occurences of the term “LUT curves” to “calibration curves” and also changed all occurences of the term “video LUT” to “video card gamma table” to better distinguish from “LUT profile”. Also renamed the “LUT viewer” to curve viewer as a more accurate description of its functionality.
2010-03-17 18:50 (UTC) 0.3.6.4

0.3.6.4

Added in this release:

  • Profile verification: CGATS-compatible text files (*.txt) containing measurement data can now be selected in addition to Argyll testchart (*.ti1) and measurement data (*.ti3) files.
  • Profile verification report: Depending on the chart used, you can now choose among different evaluation criteria from within the report. Also added Fogra Media Wedge V3 tolerance values for CMYK testcharts.

Fixed in this release:

  • Profile verification: Error 'Unknown color representation Lab' when trying to verify a L*a*b* LUT profile.
  • Profile verification: Wrong XYZ scaling when reading from *.ti3 files containing XYZ, but no L*a*b* values.
  • Profile verification: When measuring a display other than the first one, the calibration curves were erroneously still loaded to the 1st display.

Changed in this release:

  • Profile verification report: Show nominal and actual measured values as L*a*b* instead of XYZ. Reduced visible decimals in report to increase readability.
  • Split the cramped “Extra” menu into “Options” and “Tools”.
2010-03-13 06:31 (UTC) 0.3.6.2

0.3.6.2

Added in this release:

  • Profile verification by measurements. Argyll testchart (*.ti1) and measurement data (*.ti3) files can be measured.

Fixed in this release:

  • Testchart editor: Do not automatically select a saved testchart (regression of a change in 0.3.3.5). Do not show empty rows when creating a testchart using an algorythm that does not create the expected number of rows.
  • Bumped wxPython version check to 2.8.8.0 so a proper error message is displayed if wxPython is too old.
  • Linux: When using TwinView or Xinerama, the size of the measurement window was sometimes not correct.
  • Linux: Failure in get_argyll_version if Argyll utilities have alternate names (eg. argyll-targen instead of targen), which could prevent being able to open the testchart editor (regression of a change in 0.3.3.5).
  • Mac OS X 10.4: Fall back to ColorSyncScripting if Image Events does not return a display profile.

Changed in this release:

  • Linux: Info window no longer stays always on top.
  • Linux: When getting the current profile for a display, also look at the _ICC_DEVICE_PROFILE atom (see draft ICC Profiles in X Specification 0.4).
2010-03-02 20:12 (UTC) 0.3.3.6

0.3.3.6

Fixed in this release:

  • Linux/Mac OS X: 'tcgetattr failed' when trying to calibrate or profile.

Changed in this release:

  • Linux: Updated udev rules.
2010-03-01 06:27 (UTC) 0.3.3.5

0.3.3.5

Added in this release:

  • Capability to set whitepoint or ambient light level for viewing condition adjustment by measuring ambient light.
  • Profile name %tpa placeholder (test patch amount).
  • Documentation for ambient light level viewing conditions adjustment, advanced profiling options (gamut mapping) and testchart editor in the ReadMe. Also a few additions to the existing whitepoint/white level and tone curve documentation (mostly taken from the Argyll CMS documentation).
  • Two entries to the known issues & solutions section in the ReadMe (swapped colors and Photoshop “Monitor profile appears to be defective”).

Changed in this release:

  • New improved testcharts and presets, with lower patch counts: 12 patches default for gamma+matrix profiles, 48 patches default for curves+matrix profiles (former chart had 91 patches), 124 patches default for LUT profiles which should actually be usable this time around when coupled with a profile quality setting of “high”, unlike its predecessor with 127 patches which yielded mediocre results at best (but for increased accuracy, the new 238-patch “extended” testchart is recommended). 396 and 2386-patch charts (the new “large” and “massive” quantity) are also included.
  • Default to high profile quality (and force for gamma+matrix profiles, as there is no processing penalty like for curves+matrix or LUT profiles).
  • Removed limit for remembered settings files.
  • When calibration or profiling measurements fail, first show the main application window, then the error message (small dialog boxes are sometimes hard to spot on big screens if the application context is missing).
  • Moved profile quality, type and advanced settings above testchart selector (this order is more logical, as profile quality and type influences testchart selection).
  • Testchart editor: Default to adaption of 10% for testchart creation using optimized farthest point sampling (OFPS). Support both device and L*a*b* diagnostic VRML files when creating testcharts using Argyll >= 1.1.0. No longer calculate the amount of white/gray/single color patches or multidimensional cube steps if info is missing in testchart file (calculations take way too long for little added benefit).
  • Cleaned up the known issues & solutions section in the ReadMe.

Fixed in this release:

  • Wrong value for adaption settings in testchart editor being stored.
  • Linux (cosmetic): Incorrect special characters in console window when using non-english locale under certain configurations (regression of a change introduced in 0.3.0.7).
  • Non-critical: File information in Argyll CGATS TI1 to TI3 conversion.
  • Testchart editor: Do not allow overwriting of predefined testcharts when saving. Correctly remember last used filename when “saving as...”.
  • Log window: Correctly remember last used filename when saving.
  • Typo in the ReadMe (the second “Report on calibrated display device” entry under “Menu commands” should have been “Report on uncalibrated display device”).
2010-02-17 15:53 (UTC) 0.3.1.0

0.3.1.0

Fixed in this release:

  • Running “Calibrate & profile” several times in succession no longer fails on the 2nd and subsequent runs.
  • Linux: Missing wxPython version check for the measurement window subprocess.
2010-02-15 17:27 (UTC) 0.3.0.9

0.3.0.9

Added in this release:

  • Test chart editor: Support for Argyll 1.1.0 perceptual space-filling quasi-random test patch distribution.
2010-02-13 16:36 (UTC) 0.3.0.8

0.3.0.8

Fixed in this release:

  • #2951168 Windows: Critical bug with win32 API calls to get the display name returning 8-bit characters where only ASCII was expected.
2010-02-12 20:13 (UTC) 0.3.0.7

0.3.0.7

Added in this release:

  • Support for Argyll >= 1.1.0 adaptive emissive measurement mode with the i1 Pro spectrometer.
  • All of Argyll's profile types are now available (XYZ LUT on Windows only if using Argyll >= 1.1.0).
  • Support for “very low” calibration quality.
  • Optionally create a fast matrix/shaper profile when just calibrating.
  • “Reset video card gamma table” checkbox in the dialog shown when just profiling.
  • Information how to install Argyll >= 1.1.0 USB drivers on Windows Vista/7 64-bit to the “known issues and solutions” section in the ReadMe.
  • ReadMe, license, bug tracker and support forum can now be accessed from the “Help” menu.
  • “Check for update...” in the help menu (launches a web browser and displays the dispcalGUI homepage if a new version is found).
  • Curve viewer: Capability to show the actual curves from the video card.
  • Curve viewer: Capability to show a matrix profile's rTRC/gTRC/bTRC curves.

Changed in this release:

  • When restoring defaults, selected display/instrument/measurement mode, language and profile name are retained.
  • The display/instrument selector is only enabled if more than one device detected respectively.
  • Changed i1 Pro highres measurement mode from implicit to user choice.
  • Gamut mapping: When selecting a source profile, pre-select a source viewing condition based on profile class (monitor or printer).
  • Updated defaults and presets to Argyll 1.1.0 values (i.e. black output offset).
  • Short display name placeholder (%dns) for profile name should not yield single numbers or model name without model number any more (or atleast less likely).
  • Log messages from most informational and all error dialogs.
  • Show file paths in most dialogs involving file processing.
  • Documentation in the ReadMe has been updated and is now more or less complete for the main application (testchart editor docs are still to be done). Setup instructions have also been streamlined.
  • Moved information how to fix video card gamma table access under Linux/X11 to the “known issues and solutions” section in the ReadMe.
  • Linux: Updated udev rules to those provided with Argyll 1.1.0. Removed obsolete permissions and policy files.
  • Linux: In multi-display setups using separate X screens, it should no longer be necessary to launch dispcalGUI on the display you want to measure.
  • Windows: Get names of displays via additional Windows API calls (should yield more descriptive names than “DISPLAY1”, “DISPLAY2” etc.)
  • Windows (cosmetic): Use default command prompt text color, and a darker variant only when doing measurements.
  • dispcalGUI version now corresponds to SVN revision number, split into its digit components. Build system (setup.py) uses SVN to generate version information.

Fixed in this release:

  • Curve viewer: When no display is selected (i.e. when Argyll binaries are not found), it will now try to show the vcgt of the 1st display's profile.
  • Curve viewer: When hiding the viewer and loading different calibration curves, those changes were not reflected when showing the viewer again.
  • Curve viewer: If a profile does not contain a 'vcgt' tag, clear canvas and disable R/G/B checkboxes.
  • Selection of display used for video card gamma table access not working correctly.
  • Loading of calibration upon initial preview in profile installation dialog if profile does not contain dispcalGUI settings.
  • Do not show failure message if user cancels profile installation via the password dialog when installing in system scope.
  • In some cases, values read from the configuration file were not correctly validated (would only show with deliberately altered or broken config file).
  • colprof output is no longer swallowed when creating a matrix profile with Argyll versions <= 1.0.4.
  • Linux: Fall back to ASCII if detected encoding is not UTF-8 to fix profile install issues.
  • Linux/Mac OS X: Enabling the Spyder 2 colorimeter might need elevated privileges.
  • Linux/Mac OS X: When installing a profile in local system scope, the necessary password was not accepted under newer Linux distros and also Mac OS X > 10.4.11
  • Mac OS X (cosmetic): Suppress spurious AppleScript messages.
  • Windows: Get display profile via registry instead of Windows API because the latter does not reflect runtime changes to profile associations (you still need to refresh the curve viewer when changing profile associations outside of dispcalGUI while it is running).

Known issues in this release:

  • Linux: You can't interact with the drop-down menu or the checkboxes in the curve viewer while a profile installation dialog is shown.
2009-07-16
  • Fixed a glitch in the Linux Autopackage installer where it would install even if required libraries were missing.
2009-06-30 0.2.6b3 (SVN r239)
  • fix (Windows): Fixed a critical bug in the Windows codepath which tried to access non-existent paths when certain settings were used.
2009-06-26 0.2.6b2
  • fix: Only look at <major>.<minor> during the Python version check (fixes a critical error on Ubuntu 9.10 Beta, where the Python revision number has an unexpected value).
  • fix: The curve viewer is now also able to plot calibration curves from *.cal files.
  • fix (Linux): If launched on an X display which is not the first display, the measurement window's location no longer determines the display which is used for measurements. This allows non-Xinerama multiscreen configurations to work with dispcalGUI. Note: You need to launch dispcalGUI on the display you want to measure, e.g. `DISPLAY=:0.1 dispcalGUI`.
  • fix (Linux): Get the profile from the correct display when loading a display's calibration curves into the curve viewer.
  • fix (Linux, cosmetic): Suppress CUPS warnings encountered on some systems when using the curve viewer.
  • fix (Mac OS X): Do not offer 'Network' scope during profile installation if /Network/Library/ColorSync/Profiles does not exist.
  • fix (Windows, cosmetic): Made sure the message "Debug: src/helpers.cpp(140): 'CreateActCtx' failed with error 0x0000007b (the filename, directory name, or volume label syntax is incorrect.)" is not shown when launching the standalone Windows executable, by changing the way *.pyd files are bundled (they are now copied to the executable's directory and are no longer part of the executable itself).
  • chg: The curve viewer resets to linear if a display without associated profile is selected.
2009-06-22 0.2.6b
  • fix: calibration preview checkbox in the “install profile” dialog should now correctly toggle between previous and new calibration.
  • fix: profiling failed when creating a profile on top of an existing calibration.
  • fix: correctly decode environment variables (should fix a failure when trying to create a profile and the username contains non-ASCII characters).
  • fix: automatic restoration of defaults before loading settings from a profile or cal file should no longer restore “do not show again” dialogs.
  • fix (Windows): several errors related to character encoding.
  • chg: unattended calibration and profiling: wait 10 seconds instead of 5 after calibration before trying to start profiling measurements (some instruments seem to need longer to initialize than others, e.g. Spyder 2).
  • chg (Python packages and source): instead of requiring wxPython 2.8.x specifically, only ensure a minimal version of 2.8.
  • add: Curve viewer.
2009-06-11 21:33 (UTC)
  • Added Linux Autopackage download.
  • Renamed 55-Argyll.rules to 92-Argyll.rules, so it can work on Debian too.
  • Removed “Creating a standalone executable from source” section from the ReadMe (the topic is still handled under “Installing from source” / “Additional setup.py commands”).
2009-06-07 0.2.5b4
  • fix: “TypeError: coercing to Unicode: need string or buffer, instance found” when calling any of the get*Description() methods of an ICCProfile instance, which caused profile creation from existing profile to fail.
  • fix: (Windows Vista) application exit on launch if autostart directory did not exist.
  • fix: (source, Debian and RPM packages) use the correct wxPython version
  • fix: tab-key traversal of calibration settings controls.
  • fix: automatically scroll into view focused calibration settings controls if scrollbars are shown.
  • fix: properly clean & remove temporary directory.
  • fix: (cosmetic) added some padding to calibration settings right-hand side so scrollbar won't overlap if shown.
  • chg: (cosmetic) enable auto-sizing (fit to contents) for colortemp locus, trc type and profile type selectors.
  • chg: (cosmetic) do not show vendor name in instrument select dropdown (conserve some space).
  • chg: (cosmetic) made the instrument selector a little narrower (needs less space now to display instrument name because the vendor name is stripped) and the measure mode selector a bit wider (to accommodate for projector mode).
  • chg: only try to re-start within terminal if running as standalone executable.
  • chg: show application restart request in the chosen language after changing it.
  • chg: allow resizing/maximizing of main window (a minimal size is forced to prevent layout glitches).
  • chg: (Linux) install from source or package will try to automatically setup access to your instrument. Some services (PolicyKit/HAL or udev) may need to be restarted to get the updated configuration recognized. If in doubt, a reboot should work in all cases.
  • add: french translation (by Loïc Guégant, thanks!)
  • add: bdist_deb command and --cfg option for setup.py
2009-05-16 0.2.5b3
  • Fixed calibration loader autostart entry creation (“access denied” error) under Windows Vista and later with User Account Control enabled.
2009-05-07 0.2.5b2
  • Fixed “error: nothing to repeat” when using a spectrometer.
2009-05-05 0.2.5b
  • fix: encoding-related issues on all platforms and strange Unicode-related problems with AppleScript and Terminal on Mac OS X 10.4 (Details).
  • fix: (Windows) several actions unexpectedly failing under Windows 7 (dispcalGUI created temporary files via system calls on several occasions, but on Windows, this does not create the file in the user's temp directory as one would expect, but in the ROOT directory e.g. C:\—a sane method is now being used instead).
  • fix: bug in sorting function caused leading and trailing zeroes of numbers in testchart filenames to get lost, thus failing to load such files.
  • fix: (Linux) “No module named _md5” error with the standalone executable on some Linux distros (apparently an OpenSSL-related issue, because normally it wouldn't fall back to the legacy _md5 module which is not even built by default in recent Python versions). The fallback _md5 module is now included.
  • fix: calibration was not automatically added & selected in the dropdown menu when only calibrating.
  • fix: dropping a profile which was not created in dispcalGUI onto the application window no longer results in an unhandled error.
  • fix: when trying to load calibration curves from a profile which actually does not contain any, an error message is now shown instead of resetting the video card gamma table to linear and erroneously stating the curves were succesfully loaded.
  • fix: add display device name as device model description when profiling.
  • fix: when creating a new profile from an existing profile, use that profile's device model description if present.
  • fix: also create .app/.sh/.cmd files when creating a new profile from existing measurement data.
  • fix: restore advanced gamut mapping options to default if selecting a profile which does not contain those settings.
  • fix: allow free selection of source and target viewing conditions in advanced gamut mapping options for LUT[7] profiles regardless of source profile type.
  • fix: if the screen or instrument that was selected in a previous session is not available, select an available one.
  • fix: (Mac) the “enable spyder 2” menu item would not allow to select files other than “setup.exe”.
  • fix: [src] (Mac) if dispcalGUI was installed as application and then run from (separate) source, multiple copies were launched at certain occasions.
  • fix: selecting a different Argyll binary directory than the previous one now actually works.
  • chg: the previously empty entry at the top of the settings dropdown (settings which are not associated to a profile or .cal file) is now named “<current settings>”.
  • chg: changed settings which are associated to a profile or .cal file are now marked with a leading asterisk in the settings dropdown.
  • chg: default to a gamma of 2.4 (Argyll default).
  • chg: warn before changed settings are discarded.
  • chg: new default profile naming scheme.
  • chg: new default file locations on all platforms.
    - On Linux, dispcalGUI now adheres to the XDG Base Directory Specification—the configuration file is saved as $XDG_CONFIG_HOME/dispcalGUI/dispcalGUI.ini ($XDG_CONFIG_HOME defaults to ~/.config if not set), all files created during calibration/profiling go into $XDG_DATA_HOME/dispcalGUI/storage/ ($XDG_DATA_HOME defaults to ~/.local/share if not set) by default, and logfiles into $XDG_DATA_HOME/dispcalGUI/logs/
    Any old (pre v0.2.5b) configuration data is retained in the file ~/.dispcalGUI and may be safely deleted after using v0.2.5b or newer for the first time.
    - On Mac OS, the configuration is saved as ~/Library/Preferences/dispcalGUI/dispcalGUI.ini, all files created during calibration/profiling go into ~/Library/Application Support/dispcalGUI/storage/ by default, and logfiles into ~/Library/Logs/dispcalGUI/
    Any old (pre v0.2.5b) configuration data is retained in the file ~/Library/Preferences/dispcalGUI Preferences and may be safely deleted after using v0.2.5b or newer for the first time.
    - On Windows, the configuration file is saved as %APPDATA%\dispcalGUI\dispcalGUI.ini, all files created during calibration/profiling go into %APPDATA%\dispcalGUI\storage\ by default, and logfiles into %APPDATA%\dispcalGUI\logs\
    Any old (pre v0.2.5b) configuration data is retained in the registry key HKEY_CURRENT_USER\Software\dispcalGUI.
  • chg: [build/src] (Windows) removed MS Visual C++ 2008 Redistributable DLLs from the source package. Users who build under Windows will have them anyway as they are installed with Python 2.6, so they are now copied directly from %SystemRoot%\WinSxS (Windows side-by-side assemblies) if possible.
  • chg: [build/src] SendKeys is now a dependency on Windows when running or building from source.
  • chg: [build/src] made dispcalGUI a distutils package, so it can be built/installed via setup.py.
  • chg: default locations are now also searched for resource files ($XDG_DATA_HOME/dispcalGUI, $XDG_DATA_DIRS/dispcalGUI on Linux, ~/Library/Application Support/dispcalGUI, /Library/Application Support/dispcalGUI on Mac OS X, %APPDATA%\dispcalGUI, %COMMONAPPDATA%\dispcalGUI and %COMMONPROGRAMFILES%\dispcalGUI on Windows) in addition to the current working directory (which is always searched first if it differs from the executable directory) and the executable directory (which is always searched last).
  • chg: better error handling. For unhandled exceptions, a message box is shown and an entry is written to the logfile.
  • chg: (Linux) the calibration loader will no longer try and handle gnome-screensaver quirks—it was working too unreliably, and should really be fixed in gnome-screensaver. The current recommendation is to not use a screensaver at all if possible, and instead rely on the system's energy saving options.
  • chg: (Linux) there's no longer an installer for the Linux version.
  • chg: cancelling of certain operations like profile calculation and testchart generation is now also supported when using Python 2.5
  • chg: when searching for Argyll executables, also search for files with “argyll-” prefix or “-argyll” suffix (thanks to Mark Whitis for report).
  • chg: disable measurement mode selection when using a spectrometer.
  • add: logging (also see the change related to file-storage). Logfiles are created per-date. A maximum of 5 old ones is being kept as backup.
  • add: placeholders like display name, measurement device, whitepoint etc. can now be used in the profile name.
  • add: unattended calibration and profiling for some instruments, meaning it is no longer necessary to press a key after calibration to start the measurements for profiling (needs xautomation under Linux).
  • add: settings and related files can be deleted.
  • add: (Linux, Mac, Vista) profile install scope can be selected (note: local system scope install is broken with current Argyll versions under Linux).
  • add: version and translation information in the about window.
  • add: projector mode when using Argyll 1.1.0 Beta or newer with the X-Rite ColorMunki.
2009-01-01
Linux and sourcecode bugfix update: Creation of the autostart entry failed when the autostart directory did not yet exist.
2008-12-24 0.2.1b
  • fix: video card gamma table access check always returned false when no display profile was set.
  • chg: (Linux) dispcalGUI now uses the autostart specification from freedesktop.org for the profile loader under Linux when installing profiles. NOTE for users: This also means you should manually remove any autostarts from previous versions, e.g.
    rm ~/.gnome2/dispwin-*.sh
    rm ~/.kde/Autostart/dispwin-*.sh

    and then re-install your current profile so the new loader is created. The new loader will be created in $XDG_CONFIG_HOME/autostart/ (if set) or ~/.config/autostart/ (if not set), with the filename dispcalGUI-Calibration-Loader-Display-x.desktop, where x is the display number.
  • chg: the calibration loader will check if gnome-screensaver is running and if so, exit it before loading the calibration, then start it again to prevent resetting the calibration when activated.
  • chg: .sh/.cmd file in profile folder is no longer created when just installing a profile.
  • add: message box when selecting LUT[7] as profile type with recommendation to use more samples for higher quality profiles.
  • add: default to english locale if translation doesn't exist.
2008-12-18 0.2b
  • fix: no longer possible to introduce invalid value types through a malformed config file (which could lead to dispcalGUI not launching).
  • fix: windows can no longer be moved permanently out of the visible screen area.
  • fix: spaces and special chars in the profile name should work now (should have from the start, but I had some superfluous code which broke it).
  • fix: spaces in the path to dispcalGUI should work now under Linux and Mac OS X too (Windows had no problem)
  • fix: measurement file no longer gets deleted after successful measurement if profile generation fails (was a simple oversight on my side).
  • fix: [cosmetic] logo header now always spans the whole width of the window.
  • fix: [cosmetic] (Mac OS X) on first launch, a second, unused, terminal window is no longer opened.
  • fix: windows will now try to adjust its height to fit on small screens (scrollbars might appear).
  • chg: “Calibration file” renamed to “Settings” and moved to the top, is now a dropdown box remembering the last 10 used files. Settings are stored in and loaded from profiles.
  • chg: renamed “Display type” to “Measurement mode” and moved over to measurement device selector.
  • chg: default to “LCD” for measurement mode.
  • chg: default testchart file names are now localized.
  • chg: new default testcharts, four flavours: matrix default (91 patches), LUT[7] default (127 patches), large (512 patches) and massive (3012 patches).
  • chg: testchart selector is now a dropdown box, shows all testchart files in chosen directory plus the default testcharts.
  • chg: [build/src] new and improved build system.
  • chg: [build/src] Python 2.6 is now the recommended version to run and/or build dispcalGUI. Python 2.5 is still supported, but you will not be able to cancel profile or testchart creation through the GUI[4].
  • chg: (Linux) externally installed wxGTK is no longer a dependency for executables.
  • chg: [build] Executables are now completely self-contained. The following paths are searched for additional language files: <user home directory>/dispcalGUI/lang, <dispcalGUI root directory>/lang
  • add: all settings now stored in profile whenever possible.
  • add: “Install” button next to settings dropdown to install selected profile.
  • add: dropdown to choose the display to use for video card gamma table access if all of the following applies:
    - more than one display connected
    - one of those displays seems to have non-working video card gamma table access (detected on startup)
    - one of those displays seems to have working video card gamma table access (detected on startup)
  • add: show patch count of selected testchart next to dropdown.
  • add: ability to select an icc profile (if it contains appropriate data) or measurement data file (.ti3) as testchart (converted on-the-fly).
  • add: testchart generator with editing cabability (experimental)
    - to select patches, click and drag the mouse over table cells, or hold SHIFT (select range) or CTRL/CMD (add/remove single cells/rows to/from selection)
    - to add a patch, double-click a row label
    - to delete patches, select them, then hold CTRL or CMD and hit DEL or BACKSPACE (will always delete whole rows even if only single cells selected)
    - CTRL-C/CTRL-V/CTRL-A = copy/paste/select all
  • add: advanced gamut mapping options for LUT[7]-type profiles, can also be used to overcome an apparent Photoshop CS3 bug under Mac OS X where the brush cursor shows strange artifacts when using LUT[7]-profiles with only one intent (thanks to Klaus Karcher for reporting this).
  • add: ability to generate profile from existing measurement data, even from an existing profile (if it contains appropriate data).
  • add: drag and drop calibration files (.cal), profiles (.icc/.icm), testcharts (.ti1) and measurement data files (.ti3) to the main window to process/select them (does not work very reliably on Mac OS X depending on where you drop the files, and you also get no optical feedback during the drag operation like the changed mouse cursor on Linux/Windows. Your best bet when dropping any files is perhaps the unoccupied area below “Settings”).
  • add: fully movable/resizable measurement window.
  • add: profile and testchart creation can be aborted (when running from source only if using Python >= 2.6).
  • add: “Before” / “After” switch when calibration / profiling complete.
  • add: menu item to enable Spyder 2 from within dispcalGUI.
  • add: italian and spanish GUI[4] translations (thanks contributors!)
  • Numerous other small fixes/changes.
2008-08-21
Executable-only update for Linux (thanks to Patrice Vetsel for bug report): dispcalGUI is now built against wxGTK 2.8.7.1, which becomes a dependency.
2008-08-18 0.1b
First public release.

Definitions

[1] CGATS
Graphic Arts Technologies Standards, CGATS.5 Data Exchange Format (ANSI CGATS.5-1993 Annex J)
[2] CMM / CMS
Color Management Module / Color Management System
[3] GPL
GNU General Public License — gnu.org/licenses/gpl.html
[4] GUI
Graphical User Interface
[5] ICC
International Color Consortium — color.org
[6] JSON
JavaScript Object Notation, a lightweight data-interchange format — json.org
[7] LUT
Look Up Table — en.wikipedia.org/wiki/Lookup_table
[8] SVN
Subversion, a version-control system — subversion.tigris.org
[9] UAC
User Account Control — en.wikipedia.org/wiki/User_Account_Control
[10] EDID
Extended Display Identification Data — en.wikipedia.org/wiki/EDID

dispcalGUI-1.7.1.6/screenshots/000755 000765 000000 00000000000 12266723171 016165 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/scripts/000755 000765 000000 00000000000 12266723171 015314 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/setup.cfg000644 000765 000000 00000000564 12025152313 015436 0ustar00svpwheel000000 000000 [bdist_rpm] release = 1 packager = Florian Höch fix_python = 1 post_install = util/rpm_postinstall.sh post_uninstall = util/rpm_postuninstall.sh doc_files = LICENSE.txt README.html screenshots/ theme/ # keep_temp = 1 [bdist_wininst] bitmap = misc\media\install-py.bmp install_script = dispcalGUI_postinstall.py [install] record = INSTALLED_FILES dispcalGUI-1.7.1.6/setup.py000755 000765 000000 00000057153 12147653634 015361 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- from ConfigParser import RawConfigParser from distutils.sysconfig import get_python_lib from distutils.util import change_root, get_platform from subprocess import call, Popen from time import gmtime, strftime, timezone import codecs import glob import math import os import re import shutil import subprocess as sp import sys import time if sys.platform == "win32": import msilib sys.path.insert(0, "dispcalGUI") from util_os import which from util_str import strtr pypath = os.path.abspath(__file__) pydir = os.path.dirname(pypath) def create_appdmg(): retcode = call(["hdiutil", "create", os.path.join(pydir, "dist", "%s-%s.dmg" % (name, version)), "-volname", name, "-srcfolder", os.path.join(pydir, "dist", "py2app.%s-py%s" % (get_platform(), sys.version[:3]), name + "-" + version)]) if retcode != 0: sys.exit(retcode) def svnversion_bump(svnversion): print "Bumping version number %s ->" % \ ".".join(svnversion), svnversion = svnversion_parse( str(int("".join(svnversion)) + 1)) print ".".join(svnversion) return svnversion def svnversion_parse(svnversion): svnversion = [n for n in svnversion] if len(svnversion) > 4: svnversion = ["".join(svnversion[:len(svnversion) - 3])] + \ svnversion[len(svnversion) - 3:] # e.g. ["1", "1", "2", "5", "0"] -> ["11", "2", "5", "0"] elif len(svnversion) < 4: svnversion.insert(0, "0") # e.g. ["2", "8", "3"] -> ["0", "2", "8", "3"] return svnversion def setup(): if sys.platform == "darwin": bdist_cmd = "py2app" elif sys.platform == "win32": bdist_cmd = "py2exe" else: bdist_cmd = "bdist_bbfreeze" if "bdist_standalone" in sys.argv[1:]: i = sys.argv.index("bdist_standalone") sys.argv = sys.argv[:i] + sys.argv[i + 1:] if not bdist_cmd in sys.argv[1:i]: sys.argv.insert(i, bdist_cmd) elif "bdist_bbfreeze" in sys.argv[1:]: bdist_cmd = "bdist_bbfreeze" elif "bdist_pyi" in sys.argv[1:]: bdist_cmd = "pyi" elif "py2app" in sys.argv[1:]: bdist_cmd = "py2app" elif "py2exe" in sys.argv[1:]: bdist_cmd = "py2exe" arch = None bdist_appdmg = "bdist_appdmg" in sys.argv[1:] bdist_deb = "bdist_deb" in sys.argv[1:] bdist_pyi = "bdist_pyi" in sys.argv[1:] setup_cfg = None dry_run = "-n" in sys.argv[1:] or "--dry-run" in sys.argv[1:] help = False inno = "inno" in sys.argv[1:] onefile = "-F" in sys.argv[1:] or "--onefile" in sys.argv[1:] purge = "purge" in sys.argv[1:] purge_dist = "purge_dist" in sys.argv[1:] suffix = "onefile" if onefile else "onedir" use_setuptools = "--use-setuptools" in sys.argv[1:] argv = list(sys.argv[1:]) for i, arg in enumerate(reversed(argv)): n = len(sys.argv) - i - 1 arg = arg.split("=") if len(arg) == 2: if arg[0] == "--force-arch": arch = arg[1] elif arg[0] == "--cfg": setup_cfg = arg[1] sys.argv = sys.argv[:n] + sys.argv[n + 1:] elif arg[0] == "-h" or arg[0].startswith("--help"): help = True lastmod_time = 0 non_build_args = filter(lambda arg: arg in sys.argv[1:], ["bdist_appdmg", "clean", "purge", "purge_dist", "uninstall", "-h", "--help", "--help-commands", "--all", "--name", "--fullname", "--author", "--author-email", "--maintainer", "--maintainer-email", "--contact", "--contact-email", "--url", "--license", "--licence", "--description", "--long-description", "--platforms", "--classifiers", "--keywords", "--provides", "--requires", "--obsoletes", "--quiet", "-q", "register", "--list-classifiers", "upload", "--use-distutils", "--use-setuptools", "--verbose", "-v", "finalize_msi"]) if os.path.isdir(os.path.join(pydir, ".svn")) and (which("svn") or which("svn.exe")) and ( not sys.argv[1:] or (len(non_build_args) < len(sys.argv[1:]) and not help)): print "Trying to get SVN version information..." svnversion = None try: p = Popen(["svnversion"], stdout=sp.PIPE, cwd=pydir) except Exception, exception: print "...failed:", exception else: svnversion = p.communicate()[0] svnversion = strtr(svnversion.strip().split(":")[-1], ["M", "P", "S"]) svnversion = svnversion_parse(svnversion) svnbase = svnversion print "Trying to get SVN information..." mod = False lastmod = "" entries = [] args = ["svn", "status", "--xml"] while not entries: try: p = Popen(args, stdout=sp.PIPE, cwd=pydir) except Exception, exception: print "...failed:", exception break else: from xml.dom import minidom xml = p.communicate()[0] xml = minidom.parseString(xml) entries = xml.getElementsByTagName("entry") if not entries: if "info" in args: break args = ["svn", "info", "-R", "--xml"] timestamp = None for entry in iter(entries): pth = entry.getAttribute("path") mtime = 0 if "status" in args: status = entry.getElementsByTagName("wc-status") item = status[0].getAttribute("item") if item.lower() in ("none", "normal"): item = " " props = status[0].getAttribute("props") if props.lower() in ("none", "normal"): props = " " print item.upper()[0] + props.upper()[0] + " " * 5, pth mod = True if item.upper()[0] != "D": mtime = os.stat(pth).st_mtime if mtime > lastmod_time: lastmod_time = mtime timestamp = time.gmtime(mtime) schedule = entry.getElementsByTagName("schedule") if schedule: schedule = schedule[0].firstChild.wholeText.strip() if schedule != "normal": print schedule.upper()[0] + " " * 6, pth mod = True mtime = os.stat(pth).st_mtime if mtime > lastmod_time: lastmod_time = mtime timestamp = time.gmtime(mtime) lmdate = entry.getElementsByTagName("date") if lmdate: lmdate = lmdate[0].firstChild.wholeText.strip() dateparts = lmdate.split(".") # split off milliseconds mtime = time.mktime(time.strptime(dateparts[0], "%Y-%m-%dT%H:%M:%S")) mtime += float("." + strtr(dateparts[1], "Z")) if mtime > lastmod_time: lastmod_time = mtime timestamp = time.localtime(mtime) if timestamp: lastmod = strftime("%Y-%m-%dT%H:%M:%S", timestamp) + \ str(round(mtime - int(mtime), 6))[1:] + \ "Z" ## print lmdate, lastmod, pth if not dry_run: print "Generating __version__.py" versionpy = open(os.path.join(pydir, "dispcalGUI", "__version__.py"), "w") versionpy.write("# generated by setup.py\n\n") buildtime = time.time() versionpy.write("BUILD_DATE = %r\n" % (strftime("%Y-%m-%dT%H:%M:%S", gmtime(buildtime)) + str(round(buildtime - int(buildtime), 6))[1:] + "Z")) if lastmod: versionpy.write("LASTMOD = %r\n" % lastmod) if svnversion: if mod: svnversion = svnversion_bump(svnversion) versionpy.write("VERSION = (%s)\n" % ", ".join(svnversion)) versionpy.write("VERSION_BASE = (%s)\n" % ", ".join(svnbase)) versionpy.write("VERSION_STRING = %r\n" % ".".join(svnversion)) versiontxt = open(os.path.join(pydir, "VERSION"), "w") versiontxt.write(".".join(svnversion)) versiontxt.close() versionpy.close() if not help and not dry_run: # Restore setup.cfg.backup if it exists if os.path.isfile(os.path.join(pydir, "setup.cfg.backup")) and \ not os.path.isfile(os.path.join(pydir, "setup.cfg")): shutil.copy2(os.path.join(pydir, "setup.cfg.backup"), os.path.join(pydir, "setup.cfg")) if not sys.argv[1:]: return global name, version from meta import (name, author, author_email, description, longdesc, domain, py_maxversion, py_minversion, version, version_lin, version_mac, version_src, version_tuple, version_win, wx_minversion) msiversion = ".".join((str(version_tuple[0]), str(version_tuple[1]), str(version_tuple[2]) + str(version_tuple[3]))) if not dry_run and not help: if setup_cfg or ("bdist_msi" in sys.argv[1:] and use_setuptools): if not os.path.exists(os.path.join(pydir, "setup.cfg.backup")): shutil.copy2(os.path.join(pydir, "setup.cfg"), os.path.join(pydir, "setup.cfg.backup")) if "bdist_msi" in sys.argv[1:] and use_setuptools: # setuptools parses options globally even if they're not under the # section of the currently run command os.remove(os.path.join(pydir, "setup.cfg")) if setup_cfg: shutil.copy2(os.path.join(pydir, "misc", "setup.%s.cfg" % setup_cfg), os.path.join(pydir, "setup.cfg")) if purge or purge_dist: # remove the "build", "dispcalGUI.egg-info" and # "pyinstaller/bincache*" directories and their contents recursively if dry_run: print "dry run - nothing will be removed" paths = [] if purge: paths += glob.glob(os.path.join(pydir, "build")) + glob.glob( os.path.join(pydir, name + ".egg-info")) + glob.glob( os.path.join(pydir, "pyinstaller", "bincache*")) sys.argv.remove("purge") if purge_dist: paths += glob.glob(os.path.join(pydir, "dist")) sys.argv.remove("purge_dist") for path in paths: if os.path.exists(path): if dry_run: print path continue try: shutil.rmtree(path) except Exception, exception: print exception else: print "removed", path if len(sys.argv) == 1 or (len(sys.argv) == 2 and dry_run): return if "readme" in sys.argv[1:]: readme_template_path = os.path.join(pydir, "misc", "README.template.html") readme_template = open(readme_template_path, "rb") readme_template_html = readme_template.read() readme_template.close() for key, val in [ ("DATE", strftime("%Y-%m-%d", gmtime(lastmod_time or os.stat(readme_template_path).st_mtime))), ("SUMMARY", description), ("TIME", strftime("%H:%M", gmtime(lastmod_time or os.stat(readme_template_path).st_mtime))), ("TIMESTAMP", strftime("%Y-%m-%dT%H:%M:%S", gmtime(lastmod_time or os.stat(readme_template_path).st_mtime)) + ("+" if timezone < 0 else "-") + strftime("%H:%M", gmtime(abs(timezone)))), ("VERSION", re.sub("(?:\.0){2}$", "", version)), ("VERSION_LIN", re.sub("(?:\.0){2}$", "", version_lin)), ("VERSION_MAC", re.sub("(?:\.0){2}$", "", version_mac)), ("VERSION_WIN", re.sub("(?:\.0){2}$", "", version_win)), ("VERSION_SRC", re.sub("(?:\.0){2}$", "", version_src)), ("YEAR", strftime("%Y", gmtime())) ]: readme_template_html = readme_template_html.replace("${%s}" % key, val) readme = open(os.path.join(pydir, "README.html"), "rb") readme_html = readme.read() readme.close() if readme_html != readme_template_html and not dry_run: readme = open(os.path.join(pydir, "README.html"), "wb") readme.write(readme_template_html) readme.close() sys.argv.remove("readme") if len(sys.argv) == 1 or (len(sys.argv) == 2 and dry_run): return if (("sdist" in sys.argv[1:] or "install" in sys.argv[1:] or "bdist_deb" in sys.argv[1:] or "buildservice" in sys.argv[1:]) and not help): # Create control files post = open(os.path.join(pydir, "util", "rpm_postinstall.sh"), "r").read().strip() postun = open(os.path.join(pydir, "util", "rpm_postuninstall.sh"), "r").read().strip() for tmpl_name in ("PKGBUILD", "debian.changelog", "debian.control", "debian.copyright", "debian.rules", "dispcalGUI.changes", "dispcalGUI.dsc", "dispcalGUI.spec", os.path.join("obs-autopackage-deploy", "dispcalGUI.spec"), os.path.join("0install", "dispcalGUI.xml")): tmpl_path = os.path.join(pydir, "misc", tmpl_name) tmpl = codecs.open(tmpl_path, "r", "UTF-8") tmpl_data = tmpl.read() tmpl.close() if tmpl_name.startswith("debian"): longdesc_backup = longdesc longdesc = "\n".join([" " + (line if line.strip() else ".") for line in longdesc.splitlines()]) for key, val in [ ("DATE", strftime("%a %b %d %Y", # e.g. Tue Jul 06 2010 gmtime(lastmod_time or os.stat(tmpl_path).st_mtime))), ("DATETIME", strftime("%a %b %d %H:%M:%S UTC %Y", # e.g. Wed Jul 07 15:25:00 UTC 2010 gmtime(lastmod_time or os.stat(tmpl_path).st_mtime))), ("DEBPACKAGE", name.lower()), ("DEBDATETIME", strftime("%a, %d %b %Y %H:%M:%S ", # e.g. Wed, 07 Jul 2010 15:25:00 +0100 gmtime(lastmod_time or os.stat(tmpl_path).st_mtime)) + ("+" if timezone < 0 else "-") + strftime("%H%M", gmtime(abs(timezone)))), ("SUMMARY", description), ("DESC", longdesc), ("MAINTAINER", author), ("MAINTAINER_EMAIL", author_email), ("PACKAGE", name), ("POST", post), ("POSTUN", postun), ("PY_MAXVERSION", ".".join(str(n) for n in py_maxversion)), ("PY_MINVERSION", ".".join(str(n) for n in py_minversion)), ("VERSION", version_src), ("URL", "http://%s.hoech.net/" % name), ("WX_MINVERSION", ".".join(str(n) for n in wx_minversion)), ("YEAR", strftime("%Y", gmtime())), ]: tmpl_data = tmpl_data.replace("${%s}" % key, val) if tmpl_name.startswith("debian"): longdesc = longdesc_backup if not dry_run: if tmpl_name == "debian.copyright": tmpl_name = "copyright" out_filename = os.path.join(pydir, "dist", tmpl_name) out_dir = os.path.dirname(out_filename) if not os.path.isdir(out_dir): os.makedirs(out_dir) out = codecs.open(out_filename, "w", "UTF-8") out.write(tmpl_data) out.close() if "buildservice" in sys.argv[1:]: sys.argv.remove("buildservice") if len(sys.argv) == 1 or (len(sys.argv) == 2 and dry_run): return if bdist_appdmg: i = sys.argv.index("bdist_appdmg") sys.argv = sys.argv[:i] + sys.argv[i + 1:] if len(sys.argv) == 1: create_appdmg() return if bdist_deb: bdist_args = ["bdist_rpm"] if not arch: arch = get_platform().split("-")[1] bdist_args += ["--force-arch=" + arch] i = sys.argv.index("bdist_deb") sys.argv = sys.argv[:i] + bdist_args + sys.argv[i + 1:] if bdist_pyi: i = sys.argv.index("bdist_pyi") sys.argv = sys.argv[:i] + sys.argv[i + 1:] if not "build_ext" in sys.argv[1:i]: sys.argv.insert(i, "build_ext") if len(sys.argv) < i + 2 or sys.argv[i + 1] not in ("--inplace", "-i"): sys.argv.insert(i + 1, "-i") if "-F" in sys.argv[1:]: sys.argv.remove("-F") if "--onefile" in sys.argv[1:]: sys.argv.remove("--onefile") if inno and sys.platform == "win32": inno_template_path = os.path.join(pydir, "misc", "%s-Setup-%s.iss" % (name, ("pyi-" + suffix if bdist_pyi else bdist_cmd))) inno_template = open(inno_template_path, "r") inno_script = inno_template.read().decode("UTF-8", "replace") % { "AppCopyright": u"© %s %s" % (strftime("%Y"), author), "AppVerName": version, "AppPublisher": author, "AppPublisherURL": "http://" + domain, "AppSupportURL": "http://" + domain, "AppUpdatesURL": "http://" + domain, "VersionInfoVersion": ".".join(map(str, version_tuple)), "VersionInfoTextVersion": version, "AppVersion": version, "Platform": get_platform(), "PythonVersion": sys.version[:3], } inno_template.close() inno_path = os.path.join("dist", os.path.basename(inno_template_path).replace( bdist_cmd, "%s.%s-py%s" % (bdist_cmd, get_platform(), sys.version[:3]))) if not dry_run: if not os.path.exists("dist"): os.makedirs("dist") inno_file = open(inno_path, "w") inno_file.write(inno_script.encode("MBCS", "replace")) inno_file.close() sys.argv.remove("inno") if len(sys.argv) == 1 or (len(sys.argv) == 2 and dry_run): return if "finalize_msi" in sys.argv[1:]: db = msilib.OpenDatabase(r"dist\dispcalGUI-%s.win32-py%s.msi" % (msiversion, sys.version[:3]), msilib.MSIDBOPEN_TRANSACT) view = db.OpenView("SELECT Value FROM Property WHERE Property = 'ProductCode'") view.Execute(None) record = view.Fetch() productcode = record.GetString(1) view.Close() msilib.add_data(db, "Directory", [("ProgramMenuFolder", # Directory "TARGETDIR", # Parent ".")]) # DefaultDir msilib.add_data(db, "Directory", [("MenuDir", # Directory "ProgramMenuFolder", # Parent "DISPCA~1|dispcalGUI")]) # DefaultDir msilib.add_data(db, "Icon", [("dispcalGUI.ico", # Name msilib.Binary(os.path.join(pydir, "dispcalGUI", "theme", "icons", "dispcalGUI.ico")))]) # Data msilib.add_data(db, "Icon", [("uninstall.ico", # Name msilib.Binary(os.path.join(pydir, "dispcalGUI", "theme", "icons", "dispcalGUI-uninstall.ico")))]) # Data msilib.add_data(db, "RemoveFile", [("MenuDir", # FileKey "dispcalGUI", # Component None, # FileName "MenuDir", # DirProperty 2)]) # InstallMode msilib.add_data(db, "Registry", [("DisplayIcon", # Registry -1, # Root r"Software\Microsoft\Windows\CurrentVersion\Uninstall\%s" % productcode, # Key "DisplayIcon", # Name r"[icons]dispcalGUI.ico", # Value "dispcalGUI")]) # Component msilib.add_data(db, "Shortcut", [("dispcalGUI", # Shortcut "MenuDir", # Directory "DISPCA~1|dispcalGUI", # Name "dispcalGUI", # Component r"[TARGETDIR]pythonw.exe", # Target r'"[TARGETDIR]Scripts\dispcalGUI"', # Arguments None, # Description None, # Hotkey "dispcalGUI.ico", # Icon None, # IconIndex None, # ShowCmd "dispcalGUI")]) # WkDir msilib.add_data(db, "Shortcut", [("LICENSE", # Shortcut "MenuDir", # Directory "LICENSE|LICENSE", # Name "dispcalGUI", # Component r"[dispcalGUI]LICENSE.txt", # Target None, # Arguments None, # Description None, # Hotkey None, # Icon None, # IconIndex None, # ShowCmd "dispcalGUI")]) # WkDir msilib.add_data(db, "Shortcut", [("README", # Shortcut "MenuDir", # Directory "README|README", # Name "dispcalGUI", # Component r"[dispcalGUI]README.html", # Target None, # Arguments None, # Description None, # Hotkey None, # Icon None, # IconIndex None, # ShowCmd "dispcalGUI")]) # WkDir msilib.add_data(db, "Shortcut", [("Uninstall", # Shortcut "MenuDir", # Directory "UNINST|Uninstall", # Name "dispcalGUI", # Component r"[SystemFolder]msiexec", # Target r"/x" + productcode, # Arguments None, # Description None, # Hotkey "uninstall.ico", # Icon None, # IconIndex None, # ShowCmd "SystemFolder")]) # WkDir if not dry_run: db.Commit() sys.argv.remove("finalize_msi") if len(sys.argv) == 1 or (len(sys.argv) == 2 and dry_run): return from setup import setup setup() if bdist_appdmg and not dry_run and not help: create_appdmg() if bdist_deb and not help: # Read setup.cfg cfg = RawConfigParser() cfg.read(os.path.join(pydir, "setup.cfg")) # Get dependencies dependencies = [val.strip().split(None, 1) for val in cfg.get("bdist_rpm", "Requires").split(",")] # Get group if cfg.has_option("bdist_rpm", "group"): group = cfg.get("bdist_rpm", "group") else: group = None # Get maintainer if cfg.has_option("bdist_rpm", "maintainer"): maintainer = cfg.get("bdist_rpm", "maintainer") else: maintainer = None # Get packager if cfg.has_option("bdist_rpm", "packager"): packager = cfg.get("bdist_rpm", "packager") else: packager = None # Convert dependency format: # 'package >= version' to 'package (>= version)' for i in range(len(dependencies)): if len(dependencies[i]) > 1: dependencies[i][1] = "(%s)" % dependencies[i][1] dependencies[i] = " ".join(dependencies[i]) release = 1 # TODO: parse setup.cfg rpm_filename = os.path.join(pydir, "dist", "%s-%s-%s.%s.rpm" % (name, version, release, arch)) if not dry_run: # remove target directory (and contents) if it already exists target_dir = os.path.join(pydir, "dist", "%s-%s" % (name, version)) if os.path.exists(target_dir): shutil.rmtree(target_dir) if os.path.exists(target_dir + ".orig"): shutil.rmtree(target_dir + ".orig") # use alien to create deb dir from rpm package retcode = call(["alien", "-c", "-g", "-k", os.path.basename(rpm_filename)], cwd=os.path.join(pydir, "dist")) if retcode != 0: sys.exit(retcode) # update changelog shutil.copy2(os.path.join(pydir, "dist", "debian.changelog"), os.path.join(pydir, "dist", "%s-%s" % (name, version), "debian", "changelog")) # update rules shutil.copy2(os.path.join(pydir, "misc", "alien.rules"), os.path.join(pydir, "dist", "%s-%s" % (name, version), "debian", "rules")) # update control control_filename = os.path.join(pydir, "dist", "%s-%s" % (name, version), "debian", "control") shutil.copy2(os.path.join(pydir, "dist", "debian.control"), control_filename) ### read control file from deb dir ##control = open(control_filename, "r") ##lines = [line.rstrip("\n") for line in control.readlines()] ##control.close() ### update control with info from setup.cfg ##for i in range(len(lines)): ##if lines[i].startswith("Depends:"): ### add dependencies ##lines[i] += ", python" ##lines[i] += ", python" + sys.version[:3] ##lines[i] += ", " + ", ".join(dependencies) ##elif lines[i].startswith("Maintainer:") and (maintainer or ##packager): ### set maintainer ##lines[i] = "Maintainer: " + (maintainer or packager) ##elif lines[i].startswith("Section:") and group: ### set section ##lines[i] = "Section: " + group ##elif lines[i].startswith("Description:"): ##lines.pop() ##lines.pop() ##break ### write updated control file ##control = open(control_filename, "w") ##control.write("\n".join(lines)) ##control.close() ### run strip on shared libraries ##sos = os.path.join(change_root(target_dir, get_python_lib(True)), ##name, "*.so") ##for so in glob.glob(sos): ##retcode = call(["strip", "--strip-unneeded", so]) # create deb package retcode = call(["chmod", "+x", "./debian/rules"], cwd=target_dir) retcode = call(["./debian/rules", "binary"], cwd=target_dir) if retcode != 0: sys.exit(retcode) if dry_run or help: return if setup_cfg or ("bdist_msi" in sys.argv[1:] and use_setuptools): shutil.copy2(os.path.join(pydir, "setup.cfg.backup"), os.path.join(pydir, "setup.cfg")) if bdist_pyi: # create an executable using pyinstaller if sys.platform != "win32": # Linux/Mac OS X retcode = call([sys.executable, "Make.py"], cwd = os.path.join(pydir, "pyinstaller", "source", "linux")) if retcode != 0: sys.exit(retcode) retcode = call(["make"], cwd = os.path.join(pydir, "pyinstaller", "source", "linux")) if retcode != 0: sys.exit(retcode) retcode = call([sys.executable, "-O", os.path.join(pydir, "pyinstaller", "Configure.py")]) retcode = call([sys.executable, "-O", os.path.join(pydir, "pyinstaller", "Build.py"), "-o", os.path.join(pydir, "build", "pyi.%s-%s-%s" % (get_platform(), sys.version[:3], suffix), name + "-" + version), os.path.join(pydir, "misc", "%s-pyi-%s.spec" % (name, suffix))]) if retcode != 0: sys.exit(retcode) if __name__ == "__main__": setup() dispcalGUI-1.7.1.6/tests/000755 000765 000000 00000000000 12266723171 014767 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/theme/000755 000765 000000 00000000000 12266723171 014727 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/util/000755 000765 000000 00000000000 12266723171 014602 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/util/autopackage-extract.py000755 000765 000000 00000003421 12147653634 021117 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys def autopackage_extract(package): """ Extract the three parts that make up an autopackage: bootstrap script, metadata, and actual payload """ skiplines, compression, metasize, datasize, md5sum = (0, ) * 5 with open(package, 'rb') as package_file: for line in package_file: line = line.strip() if line.startswith('# SkipLines'): skiplines = int(line.split()[2]) elif line.startswith('# Compression'): compression = line.split()[2] elif line.startswith('# MetaSize'): metasize = int(line.split()[2]) elif line.startswith('# DataSize'): datasize = int(line.split()[2]) elif line.startswith('# MD5Sum'): md5sum = line.split()[2] if skiplines and compression and metasize and datasize and md5sum: break package_file.seek(0) linenum = 0 scriptsize = 0 for line in package_file: linenum += 1 if linenum == skiplines: break scriptsize += len(line) package_file.seek(0) script = package_file.read(scriptsize) meta = package_file.read(metasize) data = package_file.read(datasize) with open('%s.sh' % package, 'wb') as script_file: script_file.write(script) with open('%s.meta.tar.gz' % package, 'wb') as meta_file: meta_file.write(meta) with open('%s.payload.tar.%s' % (package, compression), 'wb') as data_file: data_file.write(data) if __name__ == '__main__': usage = "Usage: %s [ ...] | --help" % os.path.basename(sys.argv[0]) if not sys.argv[1:]: print usage else: if "--help" in sys.argv[1:]: print usage for line in autopackage_extract.__doc__.strip().splitlines(): print line.strip() else: for arg in sys.argv[1:]: autopackage_extract(arg) dispcalGUI-1.7.1.6/util/check_x_xrandr_icc.py000755 000765 000000 00000002237 12147653634 020767 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 from binascii import hexlify import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as ICCP, xrandr from dispcalGUI.safe_print import safe_print from dispcalGUI.RealDisplaySizeMM import RealDisplaySizeMM as RDSMM for i in xrange(5): # Show ICC info for first five screens / outputs try: x_icc_c = xrandr.get_atom("_ICC_PROFILE" if i < 1 else "_ICC_PROFILE_%i" % i) except ValueError: x_icc_c = None if x_icc_c: safe_print("Root window %s" % ("_ICC_PROFILE" if i < 1 else "_ICC_PROFILE_%i" % i)) x_icc = ICCP.ICCProfile("".join(chr(n) for n in x_icc_c)) safe_print("Description:", x_icc.getDescription()) safe_print("Checksum ID:", hexlify(x_icc.calculateID())) safe_print("") try: xrr_icc_c = xrandr.get_output_property(i, "_ICC_PROFILE") except ValueError: xrr_icc_c = None if xrr_icc_c: safe_print("XRandR Output %i _ICC_PROFILE:" % i) xrr_icc = ICCP.ICCProfile("".join(chr(n) for n in xrr_icc_c)) safe_print("Description:", xrr_icc.getDescription()) safe_print("Checksum ID:", hexlify(xrr_icc.calculateID())) safe_print("") dispcalGUI-1.7.1.6/util/createpresets.cmd000644 000765 000000 00000001267 12237536425 020150 0ustar00svpwheel000000 000000 @echo off setlocal call :createpreset "Laptop" "laptop" call :createpreset "madVR" "madVR" call :createpreset "Office & Web" "office_web" call :createpreset "Photo" "photo" call :createpreset "Prepress" "prepress" call :createpreset "Softproof" "softproof" call :createpreset "sRGB" "sRGB" call :createpreset "Video" "video" goto :EOF :createpreset echo %1 colprof -ql -aG -C "Created with dispcalGUI and Argyll CMS" -D "dispcalGUI calibration preset: %~1" "%~dp0..\misc\ti3\%~2" move /-Y "%~dp0..\misc\ti3\%~2.ic?" "%~dp0..\dispcalGUI\presets\%~2.icc" && if not exist "%~dp0..\misc\ti3\%~2.ic?" python "%~dp0update_presets.py" "%~2" echo. goto :EOF dispcalGUI-1.7.1.6/util/createpresets.sh000755 000765 000000 00000001162 12237536425 020014 0ustar00svpwheel000000 000000 #!/bin/sh function createpreset() { local root="`dirname \"$0\"`/.." echo "$1" colprof -ql -aG -C "Created with dispcalGUI and Argyll CMS" -D "dispcalGUI calibration preset: $1" "$root/misc/ti3/$2" mv -i "$root/misc/ti3/$2".ic? "$root/dispcalGUI/presets/$2.icc" && python "$root/util/update_presets.py" "$2" echo "" } createpreset "Laptop" "laptop" createpreset "madVR" "madVR" createpreset "Office & Web" "office_web" createpreset "Photo" "photo" createpreset "Prepress" "prepress" createpreset "Softproof" "softproof" createpreset "sRGB" "sRGB" createpreset "Video" "video" dispcalGUI-1.7.1.6/util/cubicgrid.py000755 000765 000000 00000004136 12237536425 017120 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import sys def create_cubic_grid(res=4, skip_grayscale=False, hires_outergamut=False, hires_inneraxis=False): grid = [] step = 100.0 / res for i in range(0, res + 1): for j in range(0, res + 1): for k in range(0, res + 1): outer = [] inner = [] for n in (i, j, k): outer.append(n * step) n = n * step + step / 2.0 if n > 100: if not hires_outergamut: continue n = 100 inner.append(n) for v in (outer, inner): if len(v) == 3 and (not skip_grayscale or v != [v[0]] * 3): grid.append(v) step = 100.0 / (res * 2) if hires_outergamut: for i in range(0, res * 2 + 1): for j in range(0, res * 2 + 1): for k in range(0, res * 2 + 1): outer = [] for n in (i, j, k): if 0 in (i, j, k) and \ (((i % 2 == 1 or j % 2 == 1 or k % 2 == 1) and ((i == j == 0 or i == k == 0 or j == k == 0) or (i == res * 2 or j == res * 2 or k == res * 2))) or ((i % 2 == 1 and j % 2 == 1) or (i % 2 == 1 and k % 2 == 1) or (j % 2 == 1 and k % 2 == 1))): outer.append(n * step) if len(outer) == 3 and (not skip_grayscale or outer != [outer[0]] * 3): grid.append(outer) step = 100.0 / (res * 4) if hires_inneraxis: for i in range(0, res * 4 - 1): for j in range(0, 3): v = [i * step] * 3 v[j] += step * 2 if not v in grid: grid.append(v) v = [i * step + step * 2] * 3 v[j] -= step * 2 if not v in grid: grid.append(v) grid.sort() return grid if __name__ == "__main__": if len(sys.argv) > 1: skip_grayscale = sys.argv[2] == "1" if len(sys.argv) > 2 else False hires_outergamut = sys.argv[3] == "1" if len(sys.argv) > 3 else False hires_inneraxis = sys.argv[4] == "1" if len(sys.argv) > 4 else False grid = create_cubic_grid(int(sys.argv[1]), skip_grayscale, hires_outergamut, hires_inneraxis) for v in grid: print " ".join(str(n) for n in v) else: print "Usage: cubicgrid.py [skip grayscale 0|1 [hires_outergamut 0|1 [hires_inneraxis 0|1]]]" dispcalGUI-1.7.1.6/util/dispcalGUI-check-install.sh000755 000765 000000 00000013041 12025152313 021626 0ustar00svpwheel000000 000000 #!/bin/bash echo -e "\033[37;40m*** Checking $HOME/.config\033[0m" ls -l -G -h --color=always --group-directories-first -R $HOME/.config/autostart/*dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.config/dispcalGUI 2>/dev/null && echo echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** Checking $HOME/.local\033[0m" ls -l -G -h --color=always $HOME/.local/bin/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/lib*/python*/*-packages/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always $HOME/.local/share/applications/dispcalGUI.desktop 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/man/man1/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/pyshared/dispcalGUI 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/pyshared-data/dispcalgui 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first $HOME/.local/share/dispcalGUI/* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/doc/dispcalgui 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/doc/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/doc/packages/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/doc-base/dispcalgui* 2>/dev/null && echo ls -l -G -h --color=always $HOME/.local/share/icons/hicolor/*/apps/dispcalGUI.png 2>/dev/null echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** Checking /etc/hotplug/usb\033[0m" ls -l -G -h --color=always --group-directories-first -R /etc/hotplug/usb/Argyll* 2>/dev/null echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** Checking /etc/udev\033[0m" ls -l -G -h --color=always --group-directories-first -R /etc/udev/*/*-Argyll.* 2>/dev/null echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** Checking /etc/xdg/autostart\033[0m" ls -l -G -h --color=always --group-directories-first -R /etc/xdg/autostart/*dispcalGUI* 2>/dev/null echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** Checking /usr/local\033[0m" ls -l -G -h --color=always /usr/local/bin/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/lib*/python*/*-packages/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always /usr/local/share/applications/dispcalGUI.desktop 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/man/man1/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/pyshared/dispcalGUI 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/pyshared-data/dispcalgui 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/dispcalGUI 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/doc/dispcalgui 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/doc/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/doc/packages/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/local/share/doc-base/dispcalgui* 2>/dev/null && echo ls -l -G -h --color=always /usr/local/share/icons/hicolor/*/apps/dispcalGUI.png 2>/dev/null echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** Checking /usr\033[0m" ls -l -G -h --color=always /usr/bin/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/lib*/python*/*-packages/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always /usr/share/applications/dispcalGUI.desktop 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/man/man1/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/pyshared/dispcalGUI 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/pyshared-data/dispcalgui 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/dispcalGUI 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/doc/dispcalgui 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/doc/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/doc/packages/dispcalGUI* 2>/dev/null && echo ls -l -G -h --color=always --group-directories-first -R /usr/share/doc-base/dispcalgui* 2>/dev/null && echo ls -l -G -h --color=always /usr/share/icons/hicolor/*/apps/dispcalGUI.png 2>/dev/null echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** Checking /var/lib/doc-base\033[0m" ls -l -G -h --color=always --group-directories-first -R /var/lib/doc-base/documents/dispcalgui* 2>/dev/null && echo echo "--------------------------------------------------------------------------------" echo -e "\033[37;40m*** All done\033[0m" dispcalGUI-1.7.1.6/util/dispcalGUI_postinstall.py000755 000765 000000 00000000140 12147653634 021576 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- from dispcalGUI.postinstall import main main() dispcalGUI-1.7.1.6/util/dispcalGUI_postuninstall.py000755 000765 000000 00000000162 12147653634 022145 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- from dispcalGUI.postinstall import postuninstall postuninstall() dispcalGUI-1.7.1.6/util/dist.cmd000644 000765 000000 00000004560 12030345537 016232 0ustar00svpwheel000000 000000 @echo off for /F usebackq %%a in (`python -c "import sys;print sys.version[:3]"`) do ( set python_version=%%a ) for /F usebackq %%a in (`python -c "from dispcalGUI import meta;print meta.version"`) do ( set version=%%a ) for /F usebackq %%a in (`python -c "from dispcalGUI.meta import version_tuple;print '.'.join(str(n) for n in version_tuple[:2] + (str(version_tuple[2]) + str(version_tuple[3]), ))"`) do ( set msi_version=%%a ) REM Source tarball if not exist dist\dispcalGUI-%version%.tar.gz ( python setup.py sdist --format=gztar --use-distutils 2>&1 | tee dispcalGUI-%version%.sdist.log ) REM Standalone executable if not exist dist\py2exe.win32-py%python_version%\dispcalGUI-%version% ( python setup.py bdist_standalone inno --use-distutils 2>&1 | tee dispcalGUI-%version%.bdist_standalone-py%python_version%.log ) REM Standalone executable - Setup if not exist dist\dispcalGUI-%version%-Setup.exe ( "C:\Program Files (x86)\Inno Setup 5\Compil32.exe" /cc dist/dispcalGUI-Setup-py2exe.win32-py%python_version%.iss ) REM Standalone executable - ZIP if not exist dist\dispcalGUI-%version%-win32.zip ( pushd dist\py2exe.win32-py%python_version% zip -9 -r ..\dispcalGUI-%version%-win32.zip dispcalGUI-%version% popd ) if "%~1"=="bdist_msi" ( REM Python 2.5 MSI if not exist dist\dispcalGUI-%msi_version%.win32-py2.5.msi ( REM C:\Python25\python.exe setup.py bdist_msi --use-distutils 2>&1 | tee dispcalGUI-%msi_version%.msi-py2.5.log REM C:\Python25\python.exe setup.py finalize_msi 2>&1 | tee -a dispcalGUI-%msi_version%.msi-py2.5.log ) REM Python 2.6 MSI if not exist dist\dispcalGUI-%msi_version%.win32-py2.6.msi ( C:\Python26\python.exe setup.py bdist_msi --use-distutils 2>&1 | tee dispcalGUI-%msi_version%.msi-py2.6.log C:\Python26\python.exe setup.py finalize_msi 2>&1 | tee -a dispcalGUI-%msi_version%.msi-py2.6.log ) ) if "%~1"=="bdist_wininst" ( REM Python 2.5 Installer if not exist dist\dispcalGUI-%version%.win32-py2.5.exe ( REM C:\Python25\python.exe setup.py bdist_wininst --use-distutils 2>&1 | tee dispcalGUI-%version%.wininst-py2.5.log ) REM Python 2.6 Installer if not exist dist\dispcalGUI-%version%.win32-py2.6.exe ( C:\Python26\python.exe setup.py bdist_wininst --user-access-control=auto --use-distutils 2>&1 | tee dispcalGUI-%version%.wininst-py2.6.log ) ) python util\tidy_dist.py dispcalGUI-1.7.1.6/util/dist_0install.cmd000644 000765 000000 00000001356 12025152313 020030 0ustar00svpwheel000000 000000 @echo off for /F usebackq %%a in (`python -c "from dispcalGUI import meta;print meta.version"`) do ( set version=%%a ) REM 0install feed for /F usebackq %%a in (`python -c "import os,time;print time.strftime('%%Y-%%m-%%d', time.localtime(os.stat(r'dist\dispcalGUI-%version%.tar.gz').st_mtime))"`) do ( set released=%%a ) which 0launch.exe > nul && ( echo Updating 0install feed... 0launch http://0install.net/2006/interfaces/0publish --add-version=%version% --archive-url="http://dispcalgui.hoech.net/download.php?version=%version%&suffix=.tar.gz" --archive-file=dist\dispcalGUI-%version%.tar.gz --set-main="dispcalGUI-%version%/dispcalGUI.pyw" --set-released="%released%" --set-stability=stable -x dist\0install\dispcalGUI.xml ) dispcalGUI-1.7.1.6/util/dist_0install.sh000755 000765 000000 00000001124 12027572512 017704 0ustar00svpwheel000000 000000 #!/bin/sh version=`python -c "from dispcalGUI import meta;print meta.version"` # 0install feed which 0publish > /dev/null && ( echo "Updating 0install feed..." 0publish --add-version=$version \ --archive-url="http://dispcalgui.hoech.net/download.php?version=$version&suffix=.tar.gz" \ --archive-file=dist/dispcalGUI-$version.tar.gz \ --set-main="dispcalGUI-$version/dispcalGUI.pyw" \ --set-released="`python -c "import os,time;print time.strftime('%Y-%m-%d', time.localtime(os.stat('dist/dispcalGUI-$version.tar.gz').st_mtime))"`" \ --set-stability=stable -x \ dist/0install/dispcalGUI.xml ) dispcalGUI-1.7.1.6/util/dist_autopackage.sh000755 000765 000000 00000000550 12025152313 020433 0ustar00svpwheel000000 000000 #!/bin/sh version=`python -c "from dispcalGUI import meta;print meta.version"` # Autopackage mkdir -p dist makepackage 2>&1 | tee dispcalGUI-$version.dist_autopackage.log mv "dispcalGUI - Display Calibration $version.package" dist/dispcalGUI-$version.package mv "dispcalGUI - Display Calibration $version.package.meta" dist/dispcalGUI-$version.package.meta dispcalGUI-1.7.1.6/util/dist_debian.sh000755 000765 000000 00000001371 12025152313 017373 0ustar00svpwheel000000 000000 #!/bin/sh distname=`python -c "import platform; print '%s %s %s' % getattr(platform, 'linux_distribution', platform.dist)()"` dist=`python -c "import platform; print ('%s_%s_%s' % getattr(platform, 'linux_distribution', platform.dist)()).lower()"` dpkg_host_arch=`perl -e "use Dpkg::Arch qw(get_host_arch);print get_host_arch();"` platform=`uname -m` python_version=`python -c "import sys;print sys.version[:3]"` python=`which python$python_version 2>/dev/null || which python` version=`python -c "from dispcalGUI import meta;print meta.version"` # DEB log=dispcalGUI_$version-$dist.$dpkg_host_arch.bdist_deb.log $python setup.py bdist_deb --cfg=debian --distribution-name="$distname" --force-arch=$platform --python=$python --use-distutils 2>&1 | tee "$log" dispcalGUI-1.7.1.6/util/dist_fedora.sh000755 000765 000000 00000001240 12025152313 017404 0ustar00svpwheel000000 000000 #!/bin/sh distname=`python -c "import platform; print '%s %s %s' % getattr(platform, 'linux_distribution', platform.dist)()"` dist=`python -c "import platform; print ('%s_%s_%s' % getattr(platform, 'linux_distribution', platform.dist)()).lower()"` platform=`uname -m` python_version=`python -c "import sys;print sys.version[:3]"` python=`which python$python_version 2>/dev/null || which python` version=`python -c "from dispcalGUI import meta;print meta.version"` # RPM log=dispcalGUI-$version-$dist.$platform.bdist_rpm.log $python setup.py bdist_rpm --cfg=fedora --distribution-name="$distname" --force-arch=$platform --python=$python --use-distutils 2>&1 | tee "$log" dispcalGUI-1.7.1.6/util/dist_mandriva.sh000755 000765 000000 00000001242 12025152313 017747 0ustar00svpwheel000000 000000 #!/bin/sh distname=`python -c "import platform; print '%s %s %s' % getattr(platform, 'linux_distribution', platform.dist)()"` dist=`python -c "import platform; print ('%s_%s_%s' % getattr(platform, 'linux_distribution', platform.dist)()).lower()"` platform=`uname -m` python_version=`python -c "import sys;print sys.version[:3]"` python=`which python$python_version 2>/dev/null || which python` version=`python -c "from dispcalGUI import meta;print meta.version"` # RPM log=dispcalGUI-$version-$dist.$platform.bdist_rpm.log $python setup.py bdist_rpm --cfg=mandriva --distribution-name="$distname" --force-arch=$platform --python=$python --use-distutils 2>&1 | tee "$log" dispcalGUI-1.7.1.6/util/dist_mandriva64.sh000755 000765 000000 00000001244 12025152313 020123 0ustar00svpwheel000000 000000 #!/bin/sh distname=`python -c "import platform; print '%s %s %s' % getattr(platform, 'linux_distribution', platform.dist)()"` dist=`python -c "import platform; print ('%s_%s_%s' % getattr(platform, 'linux_distribution', platform.dist)()).lower()"` platform=`uname -m` python_version=`python -c "import sys;print sys.version[:3]"` python=`which python$python_version 2>/dev/null || which python` version=`python -c "from dispcalGUI import meta;print meta.version"` # RPM log=dispcalGUI-$version-$dist.$platform.bdist_rpm.log $python setup.py bdist_rpm --cfg=mandriva64 --distribution-name="$distname" --force-arch=$platform --python=$python --use-distutils 2>&1 | tee "$log" dispcalGUI-1.7.1.6/util/dist_openSUSE.sh000755 000765 000000 00000001242 12025152313 017607 0ustar00svpwheel000000 000000 #!/bin/sh distname=`python -c "import platform; print '%s %s %s' % getattr(platform, 'linux_distribution', platform.dist)()"` dist=`python -c "import platform; print ('%s_%s_%s' % getattr(platform, 'linux_distribution', platform.dist)()).lower()"` platform=`uname -m` python_version=`python -c "import sys;print sys.version[:3]"` python=`which python$python_version 2>/dev/null || which python` version=`python -c "from dispcalGUI import meta;print meta.version"` # RPM log=dispcalGUI-$version-$dist.$platform.bdist_rpm.log $python setup.py bdist_rpm --cfg=openSUSE --distribution-name="$distname" --force-arch=$platform --python=$python --use-distutils 2>&1 | tee "$log" dispcalGUI-1.7.1.6/util/dist_osx.sh000755 000765 000000 00000000730 12027572512 016771 0ustar00svpwheel000000 000000 #!/bin/sh # Make sure __version__.py is current ./setup.py version=`python -c "from dispcalGUI import meta;print meta.version"` # Source tarball ./setup.py sdist --use-distutils 2>&1 | tee dispcalGUI-$version.sdist.log # 0install util/dist_0install.sh # App bundle & dmg ./setup.py bdist_standalone 2>&1 | tee dispcalGUI-$version.bdist_standalone_osx.log ./setup.py bdist_appdmg 2>&1 | tee -a dispcalGUI-$version.bdist_standalone_osx.log # Cleanup util/tidy_dist.py dispcalGUI-1.7.1.6/util/dist_ubuntu.sh000755 000765 000000 00000001371 12025152313 017473 0ustar00svpwheel000000 000000 #!/bin/sh distname=`python -c "import platform; print '%s %s %s' % getattr(platform, 'linux_distribution', platform.dist)()"` dist=`python -c "import platform; print ('%s_%s_%s' % getattr(platform, 'linux_distribution', platform.dist)()).lower()"` dpkg_host_arch=`perl -e "use Dpkg::Arch qw(get_host_arch);print get_host_arch();"` platform=`uname -m` python_version=`python -c "import sys;print sys.version[:3]"` python=`which python$python_version 2>/dev/null || which python` version=`python -c "from dispcalGUI import meta;print meta.version"` # DEB log=dispcalGUI_$version-$dist.$dpkg_host_arch.bdist_deb.log $python setup.py bdist_deb --cfg=ubuntu --distribution-name="$distname" --force-arch=$platform --python=$python --use-distutils 2>&1 | tee "$log" dispcalGUI-1.7.1.6/util/dump_x_profiles.py000755 000765 000000 00000003442 12147653634 020365 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import xrandr def get_display(display=None): """ Parse $DISPLAY and return (hostname, display number, screen number) """ display_parts = (display or os.getenv("DISPLAY", ":0.0")).split(":") hostname = display_parts[0] if len(display_parts) > 1: try: display_screen = tuple(int(n) for n in display_parts[1].split(".")) except ValueError: raise ValueError("display has an unknown " "format: %r" % display) display = display_screen[0] if len(display_screen) > 1: screen = display_screen[1] else: screen = 0 else: display, screen = 0, 0 return hostname, display, screen def main(display=None, display_no=0): x_hostname, x_display, x_screen = get_display(display) try: property = xrandr.get_output_property(display_no, "_ICC_PROFILE", xrandr.XA_CARDINAL, x_hostname, x_display, x_screen) except ValueError, exception: print exception else: with open("XRROutputProperty._ICC_PROFILE.dump", "wb") as dump: dump.write("".join(chr(i) for i in property)) print "Created XRROutputProperty._ICC_PROFILE.dump" try: atom = xrandr.get_atom("_ICC_PROFILE" + ("" if display_no == 0 else "_%s" % display_no), xrandr.XA_CARDINAL, x_hostname, x_display, x_screen) except ValueError: print exception else: with open("XAtom._ICC_PROFILE.dump", "wb") as dump: dump.write("".join(chr(i) for i in atom)) print "Created XAtom._ICC_PROFILE.dump" if __name__ == "__main__": if "--help" in sys.argv[1:]: print "Usage: %s [ x_display [ display_no ] ... ]" % __file__ elif sys.argv[1:]: for arg in sys.argv[1:]: main(arg) else: main() dispcalGUI-1.7.1.6/util/ez_setup.py000755 000765 000000 00000024055 12025152313 017006 0ustar00svpwheel000000 000000 #!python """Bootstrap setuptools installation If you want to use setuptools in your package's setup.py, just include this file in the same directory with it, and add this to the top of your setup.py:: from ez_setup import use_setuptools use_setuptools() If you want to require a specific version of setuptools, set a download mirror, or use an alternate download directory, you can do so by supplying the appropriate options to ``use_setuptools()``. This file can also be run as a script to install or upgrade setuptools. """ import sys DEFAULT_VERSION = "0.6c11" DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] md5_data = { 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', 'setuptools-0.6c10-py2.3.egg': 'ce1e2ab5d3a0256456d9fc13800a7090', 'setuptools-0.6c10-py2.4.egg': '57d6d9d6e9b80772c59a53a8433a5dd4', 'setuptools-0.6c10-py2.5.egg': 'de46ac8b1c97c895572e5e8596aeb8c7', 'setuptools-0.6c10-py2.6.egg': '58ea40aef06da02ce641495523a0b7f5', 'setuptools-0.6c11-py2.3.egg': '2baeac6e13d414a9d28e7ba5b5a596de', 'setuptools-0.6c11-py2.4.egg': 'bd639f9b0eac4c42497034dec2ec0c2b', 'setuptools-0.6c11-py2.5.egg': '64c94f3bf7a72a13ec83e0b24f2749b2', 'setuptools-0.6c11-py2.6.egg': 'bfa92100bd772d5a213eedd356d64086', 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', 'setuptools-0.6c9-py2.3.egg': 'a83c4020414807b496e4cfbe08507c03', 'setuptools-0.6c9-py2.4.egg': '260a2be2e5388d66bdaee06abec6342a', 'setuptools-0.6c9-py2.5.egg': 'fe67c3e5a17b12c0e7c541b7ea43a8e6', 'setuptools-0.6c9-py2.6.egg': 'ca37b1ff16fa2ede6e19383e7b59245a', } import sys, os try: from hashlib import md5 except ImportError: from md5 import md5 def _validate_md5(egg_name, data): if egg_name in md5_data: digest = md5(data).hexdigest() if digest != md5_data[egg_name]: print >>sys.stderr, ( "md5 validation of %s failed! (Possible download problem?)" % egg_name ) sys.exit(2) return data def use_setuptools( version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, download_delay=15 ): """Automatically find/download setuptools and make it available on sys.path `version` should be a valid setuptools version number that is available as an egg for download under the `download_base` URL (which should end with a '/'). `to_dir` is the directory where setuptools will be downloaded, if it is not already available. If `download_delay` is specified, it should be the number of seconds that will be paused before initiating a download, should one be required. If an older version of setuptools is installed, this routine will print a message to ``sys.stderr`` and raise SystemExit in an attempt to abort the calling script. """ was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules def do_download(): egg = download_setuptools(version, download_base, to_dir, download_delay) sys.path.insert(0, egg) import setuptools; setuptools.bootstrap_install_from = egg try: import pkg_resources except ImportError: return do_download() try: pkg_resources.require("setuptools>="+version); return except pkg_resources.VersionConflict, e: if was_imported: print >>sys.stderr, ( "The required version of setuptools (>=%s) is not available, and\n" "can't be installed while this script is running. Please install\n" " a more recent version first, using 'easy_install -U setuptools'." "\n\n(Currently using %r)" ) % (version, e.args[0]) sys.exit(2) else: del pkg_resources, sys.modules['pkg_resources'] # reload ok return do_download() except pkg_resources.DistributionNotFound: return do_download() def download_setuptools( version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, delay = 15 ): """Download setuptools from a specified location and return its filename `version` should be a valid setuptools version number that is available as an egg for download under the `download_base` URL (which should end with a '/'). `to_dir` is the directory where the egg will be downloaded. `delay` is the number of seconds to pause before an actual download attempt. """ import urllib2, shutil egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) url = download_base + egg_name saveto = os.path.join(to_dir, egg_name) src = dst = None if not os.path.exists(saveto): # Avoid repeated downloads try: from distutils import log if delay: log.warn(""" --------------------------------------------------------------------------- This script requires setuptools version %s to run (even to display help). I will attempt to download it for you (from %s), but you may need to enable firewall access for this script first. I will start the download in %d seconds. (Note: if this machine does not have network access, please obtain the file %s and place it in this directory before rerunning this script.) ---------------------------------------------------------------------------""", version, download_base, delay, url ); from time import sleep; sleep(delay) log.warn("Downloading %s", url) src = urllib2.urlopen(url) # Read/write all in one block, so we don't create a corrupt file # if the download is interrupted. data = _validate_md5(egg_name, src.read()) dst = open(saveto,"wb"); dst.write(data) finally: if src: src.close() if dst: dst.close() return os.path.realpath(saveto) def main(argv, version=DEFAULT_VERSION): """Install or upgrade setuptools and EasyInstall""" try: import setuptools except ImportError: egg = None try: egg = download_setuptools(version, delay=0) sys.path.insert(0,egg) from setuptools.command.easy_install import main return main(list(argv)+[egg]) # we're done here finally: if egg and os.path.exists(egg): os.unlink(egg) else: if setuptools.__version__ == '0.0.1': print >>sys.stderr, ( "You have an obsolete version of setuptools installed. Please\n" "remove it from your system entirely before rerunning this script." ) sys.exit(2) req = "setuptools>="+version import pkg_resources try: pkg_resources.require(req) except pkg_resources.VersionConflict: try: from setuptools.command.easy_install import main except ImportError: from easy_install import main main(list(argv)+[download_setuptools(delay=0)]) sys.exit(0) # try to force an exit else: if argv: from setuptools.command.easy_install import main main(argv) else: print "Setuptools version",version,"or greater has been installed." print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' def update_md5(filenames): """Update our built-in md5 registry""" import re for name in filenames: base = os.path.basename(name) f = open(name,'rb') md5_data[base] = md5(f.read()).hexdigest() f.close() data = [" %r: %r,\n" % it for it in md5_data.items()] data.sort() repl = "".join(data) import inspect srcfile = inspect.getsourcefile(sys.modules[__name__]) f = open(srcfile, 'rb'); src = f.read(); f.close() match = re.search("\nmd5_data = {\n([^}]+)}", src) if not match: print >>sys.stderr, "Internal error!" sys.exit(2) src = src[:match.start(1)] + repl + src[match.end(1):] f = open(srcfile,'w') f.write(src) f.close() if __name__=='__main__': if len(sys.argv)>2 and sys.argv[1]=='--md5update': update_md5(sys.argv[2:]) else: main(sys.argv[1:]) dispcalGUI-1.7.1.6/util/find_argl_profiles.py000755 000765 000000 00000001060 12147653634 021010 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as iccp from dispcalGUI.defaultpaths import iccprofiles, iccprofiles_home from dispcalGUI.safe_print import safe_print for p in set(iccprofiles_home + iccprofiles): if os.path.isdir(p): for f in os.listdir(p): try: profile = iccp.ICCProfile(os.path.join(p, f)) except: pass else: if profile.creator == "argl": safe_print(f) safe_print("") dispcalGUI-1.7.1.6/util/find_chad_profiles.py000755 000765 000000 00000001120 12147653634 020757 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as iccp from dispcalGUI.defaultpaths import iccprofiles, iccprofiles_home from dispcalGUI.safe_print import safe_print for p in set(iccprofiles_home + iccprofiles): if os.path.isdir(p): for f in os.listdir(p): try: profile = iccp.ICCProfile(os.path.join(p, f)) except: pass else: if "chad" in profile.tags: safe_print(f) safe_print(profile.tags.chad) safe_print("") dispcalGUI-1.7.1.6/util/find_chrm_profiles.py000755 000765 000000 00000001257 12147653634 021024 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as iccp from dispcalGUI.defaultpaths import iccprofiles, iccprofiles_home from dispcalGUI.safe_print import safe_print for p in set(iccprofiles_home + iccprofiles): if os.path.isdir(p): for f in os.listdir(p): try: profile = iccp.ICCProfile(os.path.join(p, f)) except: pass else: if "chrm" in profile.tags: safe_print(f) safe_print(profile.connectionColorSpace) for name in profile.tags.chrm: safe_print(name, profile.tags.chrm[name]) safe_print("") dispcalGUI-1.7.1.6/util/find_clrt_profiles.py000755 000765 000000 00000001257 12147653634 021037 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as iccp from dispcalGUI.defaultpaths import iccprofiles, iccprofiles_home from dispcalGUI.safe_print import safe_print for p in set(iccprofiles_home + iccprofiles): if os.path.isdir(p): for f in os.listdir(p): try: profile = iccp.ICCProfile(os.path.join(p, f)) except: pass else: if "clrt" in profile.tags: safe_print(f) safe_print(profile.connectionColorSpace) for name in profile.tags.clrt: safe_print(name, profile.tags.clrt[name]) safe_print("") dispcalGUI-1.7.1.6/util/find_icc_v2_unicode_desc_profiles.py000755 000765 000000 00000002623 12147653634 023742 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as iccp from dispcalGUI.defaultpaths import iccprofiles, iccprofiles_home from dispcalGUI.safe_print import safe_print for p in set(iccprofiles_home + iccprofiles): if os.path.isdir(p): for f in os.listdir(p): try: profile = iccp.ICCProfile(os.path.join(p, f)) except: pass else: if isinstance(profile.tags.desc, iccp.TextDescriptionType): if profile.tags.desc.get("Unicode") or profile.tags.desc.get("Macintosh"): safe_print(os.path.join(p, f)) if profile.tags.desc.get("Unicode"): safe_print("Unicode Language Code:", profile.tags.desc.unicodeLanguageCode) safe_print("Unicode Description:", profile.tags.desc.Unicode) if profile.tags.desc.get("Macintosh"): safe_print("Macintosh Language Code:", profile.tags.desc.macScriptCode) safe_print("Macintosh Description:", profile.tags.desc.Macintosh) if profile.tags.desc.get("Unicode") or profile.tags.desc.get("Macintosh"): safe_print("") elif not isinstance(profile.tags.desc, iccp.MultiLocalizedUnicodeType): safe_print(os.path.join(p, f)) safe_print("Warning: 'desc' is invalid type (%s)" % type(profile.tags.desc)) safe_print("") dispcalGUI-1.7.1.6/util/find_identity_curve_profiles.py000755 000765 000000 00000001374 12147653634 023130 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as iccp from dispcalGUI.defaultpaths import iccprofiles, iccprofiles_home from dispcalGUI.safe_print import safe_print for p in set(iccprofiles_home + iccprofiles): if os.path.isdir(p): for f in os.listdir(p): try: profile = iccp.ICCProfile(os.path.join(p, f)) except: pass else: curve = None for key in ("r", "g", "b", "k"): curve = profile.tags.get(key + "TRC") if curve: break if curve and isinstance(curve, iccp.CurveType) and len(curve) == 1 and curve[0] < 1.8: safe_print(f) safe_print(curve) safe_print("") dispcalGUI-1.7.1.6/util/jsonmerge.py000755 000765 000000 00000005026 12147653634 017157 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import StringIO import codecs import os import sys import textwrap import ppdir sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import demjson from dispcalGUI import jsondict from dispcalGUI import ordereddict from dispcalGUI.safe_print import safe_print def quote(obj): if isinstance(obj, basestring): return '"%s"' % obj.replace('\\', '\\\\').replace('"', '\\"').replace("\n", "\\n") else: return repr(obj) def jsonmerge(infilename1, infilename2, outfilename): dictin1 = jsondict.JSONDict(infilename1) dictin1.load() dictin2 = jsondict.JSONDict(infilename2) dictin2.load() added = [] for key, value in dictin2.iteritems(): if not key in dictin1: dictin1[key] = value added.append(key.encode("UTF-8")) safe_print("Added: '%s' '%s'" % (key, value)) merged = ordereddict.OrderedDict() merged["*"] = "Note to translators: Keys which are not yet translated are marked with a leading asterisk (*) and are indented with two tabs instead of one. Please remove the asterisk when translated." for key in sorted(dictin2.keys()): #merged[key] = dictin1[key] merged[key.encode("UTF-8")] = dictin1[key].encode("UTF-8") for key in sorted(dictin1.keys()): if key not in dictin2 and not key.startswith("*"): if not "ORPHANED KEY-VALUE PAIRS" in merged: merged["ORPHANED KEY-VALUE PAIRS"] = "Note to translators: Key-value pairs below this point may no longer be used (but there are exceptions, all keys from ICCProfile.ICCProfile.get_info will be listed as orphaned). You may consider removing them." merged[key.encode("UTF-8")] = dictin1[key].encode("UTF-8") safe_print("Orphan: '%s' '%s'" % (key, dictin1[key])) #json_out = demjson.encode(merged, compactly=False) #outfile = codecs.open(outfilename, "w", "UTF-8") #outfile.write(json_out) outstream = StringIO.StringIO() ppdir.ppdir(merged, stream=outstream, repr=quote) outstream.seek(0) formatted = outstream.read() for key in added: formatted = formatted.replace('"%s"' % key, '\t"*%s"' % key) outfile = open(outfilename, "wb") outfile.write(formatted.replace(" " * 4, "\t")) outfile.close() if __name__ == "__main__": if sys.argv[1:] and not "-h" in sys.argv[1:] and not "--help" in sys.argv[1:]: jsonmerge(*sys.argv[1:]) else: print "Usage: %s infilename1 infilename2 outfilename" % os.path.basename(sys.argv[0]) print textwrap.fill("Merges file1 with file2 (adds all keys from file2" " not present in file1) and writes to outfile", width=80) dispcalGUI-1.7.1.6/util/list-autostarts.sh000755 000765 000000 00000000444 12027572512 020321 0ustar00svpwheel000000 000000 #!/bin/sh echo -e "\033[33;40m*** Checking $HOME/.config/autostart\033[0m" ls -l -G -h --color=always --group-directories-first -R $HOME/.config/autostart echo -e "\033[33;40m*** Checking /etc/xdg/autostart\033[0m" ls -l -G -h --color=always --group-directories-first -R /etc/xdg/autostart dispcalGUI-1.7.1.6/util/list-color-conffiles.sh000755 000765 000000 00000001070 12027572512 021170 0ustar00svpwheel000000 000000 #!/bin/sh echo -e "\033[33;40m*** Checking $HOME/.config/color.jcnf\033[0m" ls -l -G -h --color=always $HOME/.config/color.jcnf echo -e "\033[33;40m*** Checking $HOME/.config/color/device-profiles.conf\033[0m" ls -l -G -h --color=always $HOME/.config/color/device-profiles.conf echo -e "\033[33;40m*** Checking $HOME/.config/gnome-color-manager/device-profiles.conf\033[0m" ls -l -G -h --color=always $HOME/.config/gnome-color-manager/device-profiles.conf echo -e "\033[33;40m*** Checking /etc/xdg/color.jcnf\033[0m" ls -l -G -h --color=always /etc/xdg/color.jcnf dispcalGUI-1.7.1.6/util/list-device-profiles.sh000755 000765 000000 00000001446 12027572512 021173 0ustar00svpwheel000000 000000 #!/bin/sh echo -e "\033[37;40m*** Checking $HOME/.color/icc/devices\033[0m" ls -l -G -h --color=always --group-directories-first -R $HOME/.color/icc/devices echo -e "\033[37;40m*** Checking $HOME/.local/share/color/icc/devices\033[0m" ls -l -G -h --color=always --group-directories-first -R $HOME/.local/share/color/icc/devices echo -e "\033[37;40m*** Checking /usr/local/share/color/icc/devices\033[0m" ls -l -G -h --color=always --group-directories-first -R /usr/local/share/color/icc/devices echo -e "\033[37;40m*** Checking /usr/share/color/icc/devices\033[0m" ls -l -G -h --color=always --group-directories-first -R /usr/share/color/icc/devices echo -e "\033[37;40m*** Checking /var/lib/color/icc/devices\033[0m" ls -l -G -h --color=always --group-directories-first -R /var/lib/color/icc/devices dispcalGUI-1.7.1.6/util/ppdir.py000644 000765 000000 00000003314 12025152313 016256 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys brackets = { dict: "{}", list: "[]", tuple: "()" } def ppdir(obj, types=None, level=1, stream=sys.stdout, repr=repr): """ Pretty-print object attributes """ if isinstance(obj, (dict, list, tuple)): if isinstance(obj, dict): class_ = dict elif isinstance(obj, list): class_ = list elif isinstance(obj, tuple): class_ = tuple stream.write(brackets[class_][0] + '\n') bag = obj else: bag = dir(obj) for stuff in bag: if isinstance(obj, dict): item = obj[stuff] elif isinstance(obj, (list, tuple)): item = stuff else: item = getattr(obj, stuff) if types: match = False for type_ in types: if isinstance(item, type_): match = True break if not match: continue stream.write((" " * level) + ( ((repr(stuff) if level else unicode(stuff)) + ": ") if item is not stuff else "" )) if isinstance(item, (str, unicode, int, float)): #if isinstance(item, (str, unicode)) and "\n" in item: #stream.write('"""' + item + '"""' + ("," if level else "") + '\n') #else: stream.write(repr(item) + ("," if level else "") + '\n') elif isinstance(item, (dict, list, tuple)): if len((" " * level) + repr(item)) < 80: stream.write(repr(item) + ("," if level else "") + '\n') else: #stream.write(brackets[item.__class__][0] + '\n') ppdir(item, types, level=level+1, stream=stream) #stream.write((" " * level) + brackets[item.__class__][1] + ("," if level else "") + '\n') else: stream.write(repr(item) + ("," if level else "") + '\n') if isinstance(obj, (dict, list, tuple)): stream.write((" " * (level - 1)) + brackets[class_][1] + ("," if level - 1 else "") + '\n') bag = objdispcalGUI-1.7.1.6/util/profileinfo.py000755 000765 000000 00000005367 12147653634 017512 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- from time import strftime import binascii import os import sys sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) from dispcalGUI import colormath from dispcalGUI import ICCProfile as ICCP def prettyprint(iterable, level=1): for key, value in iterable.iteritems(): if hasattr(value, "iteritems"): print " " * 4 * level, "%s:" % key.capitalize() prettyprint(value, level + 1) else: print " " * 4 * level, "%s:" % key.capitalize(), value def profileinfo(profile): if not isinstance(profile, ICCP.ICCProfile): profile = ICCP.ICCProfile(profile) # Attributes print "Size:", profile.size, "Bytes (%.1f KB)" % (profile.size / 1024.0) print "Preferred CMM:", profile.preferredCMM print "ICC version:", profile.version print "Class:", profile.profileClass print "Colorspace:", profile.colorSpace print "PCS:", profile.connectionColorSpace print "Date/Time:", strftime("%Y-%m-%d %H:%M:%S", profile.dateTime + (0, 0, -1)) print "Platform:", profile.platform print "Embedded:", profile.embedded print "Independent:", profile.independent print "Device:" for key in ("manufacturer", "model"): profile.device[key] = binascii.hexlify(profile.device[key]).upper() prettyprint(profile.device) print "Rendering Intent:", profile.intent print "Illuminant:", " ".join(str(n * 100) for n in profile.illuminant.values()) print "Creator:", profile.creator print "ID:", binascii.hexlify(profile.ID).upper() # Tags print "Description:", profile.getDescription() print "Copyright:", profile.getCopyright() if "dmnd" in profile.tags: print "Device Manufacturer Description:", print profile.getDeviceManufacturerDescription() if "dmdd" in profile.tags: print "Device Model Description:", profile.getDeviceModelDescription() if "vued" in profile.tags: print "Viewing Conditions Description:", print profile.getViewingConditionsDescription() wtpt_profile_norm = tuple(n * 100 for n in profile.tags.wtpt.values()) if "chad" in profile.tags: # undo chromatic adaption of profile whitepoint X, Y, Z = wtpt_profile_norm M = colormath.Matrix3x3(profile.tags.chad).inverted() XR = X * M[0][0] + Y * M[0][1] + Z * M[0][2] YR = X * M[1][0] + Y * M[1][1] + Z * M[1][2] ZR = X * M[2][0] + Y * M[2][1] + Z * M[2][2] wtpt_profile_norm = tuple((n / YR) * 100.0 for n in (XR, YR, ZR)) if "lumi" in profile.tags and isinstance(profile.tags.lumi, ICCP.XYZType): print "Luminance:", profile.tags.lumi.Y print "Actual Whitepoint XYZ:", " ".join(str(n) for n in wtpt_profile_norm) print "Correlated Color Temperature:", colormath.XYZ2CCT(*wtpt_profile_norm) if __name__ == "__main__": for arg in sys.argv[1:] or [ICCP.get_display_profile()]: profileinfo(arg) dispcalGUI-1.7.1.6/util/rpm_postinstall.sh000644 000765 000000 00000000312 12025152313 020347 0ustar00svpwheel000000 000000 #!/bin/sh # Update icon cache and menu which xdg-icon-resource > /dev/null 2>&1 && xdg-icon-resource forceupdate || true which xdg-desktop-menu > /dev/null 2>&1 && xdg-desktop-menu forceupdate || true dispcalGUI-1.7.1.6/util/rpm_postuninstall.sh000644 000765 000000 00000000312 12025152313 020712 0ustar00svpwheel000000 000000 #!/bin/sh # Update icon cache and menu which xdg-desktop-menu > /dev/null 2>&1 && xdg-desktop-menu forceupdate || true which xdg-icon-resource > /dev/null 2>&1 && xdg-icon-resource forceupdate || true dispcalGUI-1.7.1.6/util/sdist.cmd000644 000765 000000 00000001545 12025152313 016405 0ustar00svpwheel000000 000000 @echo off for /F usebackq %%a in (`python -c "from dispcalGUI import meta;print meta.version"`) do ( set version=%%a ) REM Source tarball python setup.py sdist --formats=gztar --use-distutils 2>&1 | tee dispcalGUI-%version%.sdist.log REM 0install feed for /F usebackq %%a in (`python -c "import os,time;print time.strftime('%%Y-%%m-%%d', time.localtime(os.stat(r'dist\dispcalGUI-%version%.tar.gz').st_mtime))"`) do ( set released=%%a ) which 0launch.exe > nul && ( echo Updating 0install feed... 0launch http://0install.net/2006/interfaces/0publish --add-version=%version% --archive-url="http://dispcalgui.hoech.net/download.php?version=%version%&suffix=.tar.gz" --archive-file=dist\dispcalGUI-%version%.tar.gz --set-main="dispcalGUI-%version%/dispcalGUI.pyw" --set-released="%released%" --set-stability=stable -x dist\0install\dispcalGUI.xml ) dispcalGUI-1.7.1.6/util/sdist.sh000755 000765 000000 00000001260 12025152313 016251 0ustar00svpwheel000000 000000 #!/bin/sh version=`python -c "from dispcalGUI import meta;print meta.version"` # Source tarball ./setup.py sdist --use-distutils 2>&1 | tee dispcalGUI-$version.sdist.log # 0install feed which 0publish > /dev/null && ( echo "Updating 0install feed..." 0publish --add-version=$version \ --archive-url="http://dispcalgui.hoech.net/download.php?version=$version&suffix=.tar.gz" \ --archive-file=dist/dispcalGUI-$version.tar.gz \ --set-main="dispcalGUI-$version/dispcalGUI.pyw" \ --set-released="`python -c "import os,time;print time.strftime('%Y-%m-%d', time.localtime(os.stat('dist/dispcalGUI-$version.tar.gz').st_mtime))"`" \ --set-stability=stable -x \ dist/0install/dispcalGUI.xml ) dispcalGUI-1.7.1.6/util/set_profile_desc_to_basename_sans_ext.py000755 000765 000000 00000001712 12147653634 024736 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as iccp from dispcalGUI import util_str def set_profile_desc_to_basename_sans_ext(profile): if isinstance(profile, basestring): profile = iccp.ICCProfile(profile) if isinstance(profile, iccp.ICCProfile): name = os.path.splitext(os.path.basename(profile.fileName))[0] if isinstance(profile.tags.desc, iccp.TextDescriptionType): profile.tags.desc.ASCII = name.encode('ASCII', 'asciize') profile.tags.desc.Unicode = name profile.tags.desc.Macintosh = name else: profile.tags.desc = iccp.MultiLocalizedUnicodeType() profile.tags.desc.add_localized_string('en', 'US', name) profile.write() else: for item in profile: set_profile_desc_to_basename_sans_ext(item) if __name__ == '__main__': import sys set_profile_desc_to_basename_sans_ext(sys.argv[1:]) dispcalGUI-1.7.1.6/util/switchvc90.cmd000644 000765 000000 00000000632 12025152313 017256 0ustar00svpwheel000000 000000 @echo off setlocal pushd "%SystemRoot%\WinSxS" for /D %%a in (. Manifests Policies) do ( pushd "%%~a" for /D %%b in (*.VC90.*) do ( call :bak "%%~b" ) for %%b in (*.VC90.*) do ( call :bak "%%~b" ) popd ) popd pause goto :EOF :bak if /i "%~x1"==".bak" ( echo %~1 echo -^> %~n1 ren "%~1" "%~n1" ) else ( echo %~1 echo -^> %~1.bak ren "%~1" "%~1.bak" ) echo. goto :EOFdispcalGUI-1.7.1.6/util/tidy_dist.py000755 000765 000000 00000000712 12147653634 017157 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import glob import os import re import shutil def main(): dist = glob.glob(os.path.join('dist', 'dispcalGUI-*')) for entry in dist: version = re.search('\d+(?:\.\d+){3}', entry) if version: version = version.group() version_dir = os.path.join('dist', version) if not os.path.isdir(version_dir): os.mkdir(version_dir) shutil.move(entry, version_dir) if __name__ == '__main__': main() dispcalGUI-1.7.1.6/util/update_pnp_ids.sh000644 000765 000000 00000000126 12224371766 020136 0ustar00svpwheel000000 000000 curl -o dispcalGUI/pnp.ids https://git.fedorahosted.org/cgit/hwdata.git/plain/pnp.ids dispcalGUI-1.7.1.6/util/update_presets.py000644 000765 000000 00000005543 12237536425 020214 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # -*- coding: utf-8 -*- import glob import os import sys sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from dispcalGUI import ICCProfile as ICCP, colormath, config, worker sRGB = ICCP.ICCProfile(config.get_data_path("ref/sRGB.icm")) def update_preset(name): print "Preset name:", name pth = config.get_data_path("presets/%s.icc" % name) if not pth: print "ERROR: Preset not found" return False print "Path:", pth with open(os.path.join(os.path.dirname(__file__), "..", "misc", "ti3", "%s.ti3" % name), "rb") as f: ti3 = f.read() prof = ICCP.ICCProfile(pth) if prof.tags.targ != ti3: print "Updating 'targ'..." prof.tags.targ = ICCP.TextType("text\0\0\0\0%s\0" % ti3, "targ") options_dispcal, options_colprof = worker.get_options_from_profile(prof) trc_a2b = {"240": -240, "709": -709, "l": -3, "s": -2.4} t_a2b = {"t": colormath.CIEDCCT2XYZ, "T": colormath.planckianCT2XYZ} trc = None for option in options_dispcal: if option[0] == "g": trc = trc_a2b.get(option[1:]) if not trc: try: trc = float(option[1:]) except ValueError: trc = False print "Invalid dispcal -g parameter:", option[1:] if trc: print "dispcal -g parameter:", option[1:] print "Updating tone response curves..." for chan in ("r", "g", "b"): prof.tags["%sTRC" % chan].set_trc(trc, 256) print "Transfer function:", prof.tags["%sTRC" % chan].get_transfer_function()[0][0] elif option[0] in ("t", "T"): print "dispcal -t parameter:", option[1:] print "Updating white point..." t = colormath.XYZ2CCT(prof.tags.wtpt.X, prof.tags.wtpt.Y, prof.tags.wtpt.Z) (prof.tags.wtpt.X, prof.tags.wtpt.Y, prof.tags.wtpt.Z) = t_a2b[option[0]](float(option[1:] or t)) elif option[0] == "w": print "dispcal -w parameter:", option[1:] x, y = [float(v) for v in option[1:].split(",")] print "Updating white point..." (prof.tags.wtpt.X, prof.tags.wtpt.Y, prof.tags.wtpt.Z) = colormath.xyY2XYZ(x, y) if "CIED" in prof.tags: print "Removing 'CIED'..." del prof.tags["CIED"] if "DevD" in prof.tags: print "Removing 'DevD'..." del prof.tags["DevD"] if "clrt" in prof.tags: print "Removing 'clrt'..." del prof.tags["clrt"] print "Setting RGB matrix column tags to sRGB values..." prof.tags.rXYZ = sRGB.tags.rXYZ prof.tags.gXYZ = sRGB.tags.gXYZ prof.tags.bXYZ = sRGB.tags.bXYZ print "Updating profile ID..." prof.calculateID() prof.write() print "" return True def update_presets(): presets = config.get_data_path("presets", "\.icc$") for fn in presets: update_preset(os.path.splitext(os.path.basename(fn))[0]) if __name__ == "__main__": if "--help" in sys.argv[1:]: print "Usage: %s [ preset_name [ preset_name ] ... ]" % __file__ elif sys.argv[1:]: for name in sys.argv[1:]: update_preset(name) else: update_presets() dispcalGUI-1.7.1.6/util/vc90crt.py000644 000765 000000 00000001142 12025152313 016427 0ustar00svpwheel000000 000000 # -*- coding: UTF-8 -*- import os import shutil import sys import winmanifest name = "Microsoft.VC90.CRT" def vc90crt_find_files(): return winmanifest.Manifest( processorArchitecture = "x86", name = name, publicKeyToken = "1fc8b3b9a1e18e3b", version = [9, 0, 21022, 8] ).find_files() def vc90crt_copy_files(dest_dir): if not os.path.exists(dest_dir): os.makedirs(dest_dir) for filename in vc90crt_find_files(): dest = os.path.join(dest_dir, name + ".manifest" if filename.endswith(".manifest") else os.path.basename(filename)) if not os.path.exists(dest): shutil.copy2(filename, dest)dispcalGUI-1.7.1.6/util/winmanifest.py000755 000765 000000 00000127502 12147653634 017516 0ustar00svpwheel000000 000000 #!/usr/bin/env python2 # # Copyright (C) 2009, Florian Hoech # # 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., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301, USA # DEV NOTES # # Currently not implemented in the Manifest class: # * Validation (only very basic sanity checks are currently in place) # * comClass, typelib, comInterfaceProxyStub and windowClass child elements of # the file element # * comInterfaceExternalProxyStub and windowClass child elements of the # assembly element # * Application Configuration File and Multilanguage User Interface (MUI) # support when searching for assembly files # # Isolated Applications and Side-by-side Assemblies: # http://msdn.microsoft.com/en-us/library/dd408052%28VS.85%29.aspx # # Changelog: # 2009-12-17 fix: small glitch in toxml / toprettyxml methods (xml declaration # wasn't replaced when a different encodig than UTF-8 was used) # chg: catch xml.parsers.expat.ExpatError and re-raise as # ManifestXMLParseError # chg: support initialize option in parse method also # # 2009-12-13 fix: fixed os import # fix: skip invalid / empty dependent assemblies # # 2009-08-21 fix: Corrected assembly searching sequence for localized # assemblies # fix: Allow assemblies with no dependent files # # 2009-07-31 chg: Find private assemblies even if unversioned # add: Manifest.same_id method to check if two manifests have the # same assemblyIdentity # # 2009-07-30 fix: Potential failure in File.calc_hash method if hash # algorythm not supported # add: Publisher configuration (policy) support when searching for # assembly files # fix: Private assemblies are now actually found if present (and no # shared assembly exists) # add: Python 2.3 compatibility (oldest version supported by # pyinstaller) # # 2009-07-28 chg: Code cleanup, removed a bit of redundancy # add: silent mode (set silent attribute on module) # chg: Do not print messages in silent mode # # 2009-06-18 chg: Use glob instead of regular expression in Manifest.find_files # # 2009-05-04 fix: Don't fail if manifest has empty description # fix: Manifests created by the toxml, toprettyxml, writexml or # writeprettyxml methods are now correctly recognized by # Windows, which expects the XML declaration to be ordered # version-encoding-standalone (standalone being optional) # add: 'encoding' keyword argument in toxml, toprettyxml, writexml # and writeprettyxml methods # chg: UpdateManifestResourcesFromXML and # UpdateManifestResourcesFromXMLFile: set resource name # depending on file type ie. exe or dll # fix: typo in __main__: UpdateManifestResourcesFromDataFile # should have been UpdateManifestResourcesFromXMLFile # # 2009-03-21 First version """ winmanifest.py Create, parse and write MS Windows Manifest files. Find files which are part of an assembly, by searching shared and private assemblies. Update or add manifest resources in Win32 PE files. Commandline usage: winmanifest.py Updates or adds manifest as resource in Win32 PE file . """ try: import hashlib except ImportError, detail: hashlib = None import md5 import sha import os from glob import glob import re import sys import xml from xml.dom import Node, minidom from xml.dom.minidom import Document, Element try: import winresource except ImportError, detail: winresource = None print "W:", detail print "W: Cannot check for assembly dependencies - resource access " print "W: unavailable. To enable resource access, please install " print "W: http://sourceforge.net/projects/pywin32/" silent = False # True suppresses all messages LANGUAGE_NEUTRAL_NT5 = "x-ww" LANGUAGE_NEUTRAL_NT6 = "none" RT_MANIFEST = 24 Document.aChild = Document.appendChild Document.cE = Document.createElement Document.cT = Document.createTextNode Document.getEByTN = Document.getElementsByTagName Element.aChild = Element.appendChild Element.getA = Element.getAttribute Element.getEByTN = Element.getElementsByTagName Element.remA = Element.removeAttribute Element.setA = Element.setAttribute def getChildElementsByTagName(self, tagName): """ Return child elements of type tagName if found, else [] """ result = [] for child in self.childNodes: if isinstance(child, Element): if child.tagName == tagName: result.append(child) return result def getFirstChildElementByTagName(self, tagName): """ Return the first element of type tagName if found, else None """ for child in self.childNodes: if isinstance(child, Element): if child.tagName == tagName: return child return None Document.getCEByTN = getChildElementsByTagName Document.getFCEByTN = getFirstChildElementByTagName Element.getCEByTN = getChildElementsByTagName Element.getFCEByTN = getFirstChildElementByTagName class _Hash(object): def __init__(self): self.md5 = md5.new self.sha = sha.new if hashlib is None: hashlib = _Hash() class _Dummy: pass if winresource: _File = winresource.File else: _File = _Dummy class File(_File): """ A file referenced by an assembly inside a manifest. """ def __init__(self, filename="", hashalg=None, hash=None, comClasses=None, typelibs=None, comInterfaceProxyStubs=None, windowClasses=None): if winresource: winresource.File.__init__(self, filename) else: self.filename = filename self.name = os.path.basename(filename) if hashalg: self.hashalg = hashalg.upper() else: self.hashalg = None if os.path.isfile(filename) and hashalg and hashlib and \ hasattr(hashlib, hashalg.lower()): self.calc_hash() else: self.hash = hash self.comClasses = comClasses or [] # TO-DO: implement self.typelibs = typelibs or [] # TO-DO: implement self.comInterfaceProxyStubs = comInterfaceProxyStubs or [] # TO-DO: implement self.windowClasses = windowClasses or [] # TO-DO: implement def calc_hash(self, hashalg=None): """ Calculate the hash of the file. Will be called automatically from the constructor if the file exists and hashalg is given (and supported), but may also be called manually e.g. to update the hash if the file has changed. """ fd = open(self.filename, "rb") buf = fd.read() fd.close() if hashalg: self.hashalg = hashalg.upper() self.hash = getattr(hashlib, self.hashalg.lower())(buf).hexdigest() def find(self, searchpath): if not silent: print "I: Searching for file", self.name fn = os.path.join(searchpath, self.name) if os.path.isfile(fn): if not silent: print "I: Found file", fn return fn else: if not silent: print "W: No such file", fn return None class InvalidManifestError(Exception): pass class ManifestXMLParseError(InvalidManifestError): pass class Manifest(object): # Manifests: # http://msdn.microsoft.com/en-us/library/aa375365%28VS.85%29.aspx """ Manifest constructor. To build a basic manifest for your application: mf = Manifest(type='win32', name='YourAppName', language='*', processorArchitecture='x86', version=[1, 0, 0, 0]) To write the XML to a manifest file: mf.writexml("YourAppName.exe.manifest") or mf.writeprettyxml("YourAppName.exe.manifest") """ def __init__(self, manifestVersion=None, noInheritable=False, noInherit=False, type_=None, name=None, language=None, processorArchitecture=None, version=None, publicKeyToken=None, description=None, requestedExecutionLevel=None, uiAccess=None, dependentAssemblies=None, files=None, comInterfaceExternalProxyStubs=None): self.filename = None self.optional = None self.manifestType = "assembly" self.manifestVersion = manifestVersion or [1, 0] self.noInheritable = noInheritable self.noInherit = noInherit self.type = type_ self.name = name self.language = language self.processorArchitecture = processorArchitecture self.version = version self.publicKeyToken = publicKeyToken # publicKeyToken: # A 16-character hexadecimal string that represents the last 8 bytes # of the SHA-1 hash of the public key under which the assembly is # signed. The public key used to sign the catalog must be 2048 bits # or greater. Required for all shared side-by-side assemblies. # http://msdn.microsoft.com/en-us/library/aa375692(VS.85).aspx self.applyPublisherPolicy = None self.description = None self.requestedExecutionLevel = requestedExecutionLevel self.uiAccess = uiAccess self.dependentAssemblies = dependentAssemblies or [] self.bindingRedirects = [] self.files = files or [] self.comInterfaceExternalProxyStubs = comInterfaceExternalProxyStubs or [] # TO-DO: implement def add_dependent_assembly(self, manifestVersion=None, noInheritable=False, noInherit=False, type_=None, name=None, language=None, processorArchitecture=None, version=None, publicKeyToken=None, description=None, requestedExecutionLevel=None, uiAccess=None, dependentAssemblies=None, files=None, comInterfaceExternalProxyStubs=None): """ Shortcut for self.dependentAssemblies.append(Manifest(*args, **kwargs)) """ self.dependentAssemblies.append(Manifest(manifestVersion, noInheritable, noInherit, type_, name, language, processorArchitecture, version, publicKeyToken, description, requestedExecutionLevel, uiAccess, dependentAssemblies, files, comInterfaceExternalProxyStubs)) if self.filename: # Enable search for private assembly by assigning bogus filename # (only the directory has to be correct) self.dependentAssemblies[-1].filename = ":".join((self.filename, name)) def add_file(self, name="", hashalg="", hash="", comClasses=None, typelibs=None, comInterfaceProxyStubs=None, windowClasses=None): """ Shortcut for manifest.files.append """ self.files.append(File(name, hashalg, hash, comClasses, typelibs, comInterfaceProxyStubs, windowClasses)) def find_files(self, ignore_policies=True): """ Search shared and private assemblies and return a list of files. If any files are not found, return an empty list. IMPORTANT NOTE: For the purpose of getting the dependent assembly files of an executable, the publisher configuration (aka policy) should be ignored (which is the default). Setting ignore_policies=False is only useful to find out which files are actually loaded at runtime. """ # Shared Assemblies: # http://msdn.microsoft.com/en-us/library/aa375996%28VS.85%29.aspx # # Private Assemblies: # http://msdn.microsoft.com/en-us/library/aa375674%28VS.85%29.aspx # # Assembly Searching Sequence: # http://msdn.microsoft.com/en-us/library/aa374224%28VS.85%29.aspx # # NOTE: # Multilanguage User Interface (MUI) support not yet implemented files = [] languages = [] if self.language not in (None, "", "*", "neutral"): languages.append(self.getlanguage()) if "-" in self.language: # language-culture syntax, e.g. en-us # Add only the language part languages.append(self.language.split("-")[0]) if self.language not in ("en-us", "en"): languages.append("en-us") if self.language != "en": languages.append("en") languages.append(self.getlanguage("*")) winsxs = os.path.join(os.getenv("SystemRoot"), "WinSxS") if not os.path.isdir(winsxs) and not silent: print "W: No such dir", winsxs manifests = os.path.join(winsxs, "Manifests") if not os.path.isdir(manifests) and not silent: print "W: No such dir", manifests if not ignore_policies and self.version: if sys.getwindowsversion() < (6, ): # Windows XP pcfiles = os.path.join(winsxs, "Policies") if not os.path.isdir(pcfiles) and not silent: print "W: No such dir", pcfiles else: # Vista or later pcfiles = manifests for language in languages: version = self.version # Search for publisher configuration if not ignore_policies and version: # Publisher Configuration (aka policy) # A publisher configuration file globally redirects # applications and assemblies having a dependence on one # version of a side-by-side assembly to use another version of # the same assembly. This enables applications and assemblies # to use the updated assembly without having to rebuild all of # the affected applications. # http://msdn.microsoft.com/en-us/library/aa375680%28VS.85%29.aspx # # Under Windows XP and 2003, policies are stored as # .policy files inside # %SystemRoot%\WinSxS\Policies\ # Under Vista and later, policies are stored as # .manifest files inside %SystemRoot%\winsxs\Manifests redirected = False if os.path.isdir(pcfiles): if not silent: print ("I: Searching for publisher configuration %s..." % self.getpolicyid(True, language=language)) if sys.getwindowsversion() < (6, ): # Windows XP policies = os.path.join(pcfiles, self.getpolicyid(True, language=language) + ".policy") else: # Vista or later policies = os.path.join(pcfiles, self.getpolicyid(True, language=language) + ".manifest") for manifestpth in glob(policies): if not os.path.isfile(manifestpth): if not silent: print "W: Not a file", manifestpth continue if not silent: print "I: Found", manifestpth try: policy = ManifestFromXMLFile(manifestpth) except Exception, exc: print "E: Could not parse file", manifestpth print "E:", str(exc) else: if not silent: print ("I: Checking publisher policy for " "binding redirects") for assembly in policy.dependentAssemblies: if not assembly.same_id(self, True) or \ assembly.optional: continue for redirect in \ assembly.bindingRedirects: if not silent: old = "-".join([".".join([str(i) for i in part]) for part in redirect[0]]) new = ".".join([str(i) for i in redirect[1]]) print "I: Found redirect for " \ "version(s)", old, "->", new if version >= redirect[0][0] and \ version <= redirect[0][-1] and \ version != redirect[1]: if not silent: print "I: Applying redirect", \ ".".join([str(i) for i in version]), \ "->", new version = redirect[1] redirected = True if not redirected and not silent: print "I: Publisher configuration not used" # Search for assemblies according to assembly searching sequence paths = [] if os.path.isdir(manifests): # Add winsxs search paths paths.extend(glob(os.path.join(manifests, self.getid(language=language, version=version) + "_*.manifest"))) if self.filename: # Add private assembly search paths dirnm = os.path.dirname(self.filename) if language in (LANGUAGE_NEUTRAL_NT5, LANGUAGE_NEUTRAL_NT6): for ext in (".dll", ".manifest"): paths.extend(glob(os.path.join(dirnm, self.name + ext))) paths.extend(glob(os.path.join(dirnm, self.name, self.name + ext))) else: for ext in (".dll", ".manifest"): paths.extend(glob(os.path.join(dirnm, language, self.name + ext))) for ext in (".dll", ".manifest"): paths.extend(glob(os.path.join(dirnm, language, self.name, self.name + ext))) if not silent: print ("I: Searching for assembly %s..." % self.getid(language=language, version=version)) for manifestpth in paths: if not os.path.isfile(manifestpth): if not silent: print "W: Not a file", manifestpth continue assemblynm = os.path.basename( os.path.splitext(manifestpth)[0]) if not silent: if manifestpth.endswith(".dll"): print "I: Found manifest in", manifestpth else: print "I: Found manifest", manifestpth try: if manifestpth.endswith(".dll"): manifest = ManifestFromResFile(manifestpth, [1]) else: manifest = ManifestFromXMLFile(manifestpth) except Exception, exc: print "E: Could not parse manifest", manifestpth print "E:", exc else: if manifestpth.startswith(winsxs): assemblydir = os.path.join(winsxs, assemblynm) if not os.path.isdir(assemblydir): if not silent: print "W: No such dir", assemblydir print "W: Assembly incomplete" return [] else: assemblydir = os.path.dirname(manifestpth) files.append(manifestpth) for file_ in self.files or manifest.files: fn = file_.find(assemblydir) if fn: files.append(fn) else: # If any of our files does not exist, # the assembly is incomplete if not silent: print "W: Assembly incomplete" return [] return files print "W: Assembly not found" return [] def getid(self, language=None, version=None): """ Return an identification string which uniquely names a manifest. This string is a combination of the manifest's processorArchitecture, name, publicKeyToken, version and language. Arguments: version (tuple or list of integers) - If version is given, use it instead of the manifest's version. """ if not self.name: if not silent: print "W: Assembly metadata incomplete" return "" id = [] if self.processorArchitecture: id.append(self.processorArchitecture) id.append(self.name) if self.publicKeyToken: id.append(self.publicKeyToken) if version or self.version: id.append(".".join([str(i) for i in version or self.version])) if not language: language = self.getlanguage() if language: id.append(language) return "_".join(id) def getlanguage(self, language=None, windowsversion=None): """ Get and return the manifest's language as string. Can be either language-culture e.g. 'en-us' or a string indicating language neutrality, e.g. 'x-ww' on Windows XP or 'none' on Vista and later. """ if not language: language = self.language if language in (None, "", "*", "neutral"): return (LANGUAGE_NEUTRAL_NT5, LANGUAGE_NEUTRAL_NT6)[(windowsversion or sys.getwindowsversion()) >= (6, )] return language def getpolicyid(self, fuzzy=True, language=None, windowsversion=None): """ Return an identification string which can be used to find a policy. This string is a combination of the manifest's processorArchitecture, major and minor version, name, publicKeyToken and language. Arguments: fuzzy (boolean) - If False, insert the full version in the id string. Default is True (omit). windowsversion - If not specified (or None), default to (tuple or list of integers) sys.getwindowsversion(). """ if not self.name: if not silent: print "W: Assembly metadata incomplete" return "" id = [] if self.processorArchitecture: id.append(self.processorArchitecture) name = [] name.append("policy") if self.version: name.append(str(self.version[0])) name.append(str(self.version[1])) name.append(self.name) id.append(".".join(name)) if self.publicKeyToken: id.append(self.publicKeyToken) if self.version and (windowsversion or sys.getwindowsversion()) >= (6, ): # Vista and later if fuzzy: id.append("*") else: id.append(".".join([str(i) for i in self.version])) if not language: language = self.getlanguage(windowsversion=windowsversion) if language: id.append(language) id.append("*") id = "_".join(id) if self.version and (windowsversion or sys.getwindowsversion()) < (6, ): # Windows XP if fuzzy: id = os.path.join(id, "*") else: id = os.path.join(id, ".".join([str(i) for i in self.version])) return id def load_dom(self, domtree, initialize=True): """ Load manifest from DOM tree. If initialize is True (default), reset existing attributes first. """ if domtree.nodeType == Node.DOCUMENT_NODE: rootElement = domtree.documentElement elif domtree.nodeType == Node.ELEMENT_NODE: rootElement = domtree else: raise InvalidManifestError("Invalid root element node type " + str(rootElement.nodeType) + " - has to be one of (DOCUMENT_NODE, " "ELEMENT_NODE)") allowed_names = ("assembly", "assemblyBinding", "configuration", "dependentAssembly") if rootElement.tagName not in allowed_names: raise InvalidManifestError( "Invalid root element <%s> - has to be one of <%s>" % (rootElement.tagName, ">, <".join(allowed_names))) # print "I: loading manifest metadata from element <%s>" % \ # rootElement.tagName if rootElement.tagName == "configuration": for windows in rootElement.getCEByTN("windows"): for assemblyBinding in windows.getCEByTN("assemblyBinding"): self.load_dom(assemblyBinding, initialize) else: if initialize: self.__init__() self.manifestType = rootElement.tagName self.manifestVersion = [int(i) for i in (rootElement.getA("manifestVersion") or "1.0").split(".")] self.noInheritable = bool(rootElement.getFCEByTN("noInheritable")) self.noInherit = bool(rootElement.getFCEByTN("noInherit")) for assemblyIdentity in rootElement.getCEByTN("assemblyIdentity"): self.type = assemblyIdentity.getA("type") or None self.name = assemblyIdentity.getA("name") or None self.language = assemblyIdentity.getA("language") or None self.processorArchitecture = assemblyIdentity.getA( "processorArchitecture") or None version = assemblyIdentity.getA("version") if version: self.version = [int(i) for i in version.split(".")] self.publicKeyToken = assemblyIdentity.getA("publicKeyToken") or None for publisherPolicy in rootElement.getCEByTN("publisherPolicy"): self.applyPublisherPolicy = (publisherPolicy.getA("apply") or "").lower() == "yes" for description in rootElement.getCEByTN("description"): if description.firstChild: self.description = description.firstChild.wholeText for trustInfo in rootElement.getCEByTN("trustInfo"): for security in trustInfo.getCEByTN("security"): for requestedPrivileges in \ security.getCEByTN("requestedPrivileges"): for requestedExecutionLevel in \ requestedPrivileges.getCEByTN( "requestedExecutionLevel"): self.requestedExecutionLevel = \ requestedExecutionLevel.getA("level") self.uiAccess = ( requestedExecutionLevel.getA("uiAccess") or "").lower() == "true" if rootElement.tagName == "assemblyBinding": dependencies = [rootElement] else: dependencies = rootElement.getCEByTN("dependency") for dependency in dependencies: for dependentAssembly in dependency.getCEByTN( "dependentAssembly"): manifest = ManifestFromDOM(dependentAssembly) if not manifest.name: # invalid, skip continue manifest.optional = (dependency.getA("optional") or "").lower() == "yes" self.dependentAssemblies.append(manifest) if self.filename: # Enable search for private assembly by assigning bogus # filename (only the directory has to be correct) self.dependentAssemblies[-1].filename = ":".join( (self.filename, manifest.name)) for bindingRedirect in rootElement.getCEByTN("bindingRedirect"): oldVersion = [[int(i) for i in part.split(".")] for part in bindingRedirect.getA("oldVersion").split("-")] newVersion = [int(i) for i in bindingRedirect.getA("newVersion").split(".")] self.bindingRedirects.append((oldVersion, newVersion)) for file_ in rootElement.getCEByTN("file"): self.add_file(name=file_.getA("name"), hashalg=file_.getA("hashalg"), hash=file_.getA("hash")) def parse(self, filename_or_file, initialize=True): """ Load manifest from file or file object """ if isinstance(filename_or_file, (str, unicode)): filename = filename_or_file else: filename = filename_or_file.name try: domtree = minidom.parse(filename_or_file) except xml.parsers.expat.ExpatError, e: args = [e.args[0]] if isinstance(filename, unicode): filename = filename.encode(sys.getdefaultencoding(), "replace") args.insert(0, '\n File "%s"\n ' % filename) raise ManifestXMLParseError(" ".join([str(arg) for arg in args])) if initialize: self.__init__() self.filename = filename self.load_dom(domtree, False) def parse_string(self, xmlstr, initialize=True): """ Load manifest from XML string """ try: domtree = minidom.parseString(xmlstr) except xml.parsers.expat.ExpatError, e: raise ManifestXMLParseError(e) self.load_dom(domtree, initialize) def same_id(self, manifest, skip_version_check=False): """ Return a bool indicating if another manifest has the same identitiy. This is done by comparing language, name, processorArchitecture, publicKeyToken, type and version. """ if skip_version_check: version_check = True else: version_check = self.version == manifest.version return (self.language == manifest.language and self.name == manifest.name and self.processorArchitecture == manifest.processorArchitecture and self.publicKeyToken == manifest.publicKeyToken and self.type == manifest.type and version_check) def todom(self): """ Return the manifest as DOM tree """ doc = Document() docE = doc.cE(self.manifestType) if self.manifestType == "assemblyBinding": cfg = doc.cE("configuration") win = doc.cE("windows") win.aChild(docE) cfg.aChild(win) doc.aChild(cfg) else: doc.aChild(docE) if self.manifestType != "dependentAssembly": docE.setA("xmlns", "urn:schemas-microsoft-com:asm.v1") if self.manifestType != "assemblyBinding": docE.setA("manifestVersion", ".".join([str(i) for i in self.manifestVersion])) if self.noInheritable: docE.aChild(doc.cE("noInheritable")) if self.noInherit: docE.aChild(doc.cE("noInherit")) aId = doc.cE("assemblyIdentity") if self.type: aId.setAttribute("type", self.type) if self.name: aId.setAttribute("name", self.name) if self.language: aId.setAttribute("language", self.language) if self.processorArchitecture: aId.setAttribute("processorArchitecture", self.processorArchitecture) if self.version: aId.setAttribute("version", ".".join([str(i) for i in self.version])) if self.publicKeyToken: aId.setAttribute("publicKeyToken", self.publicKeyToken) if aId.hasAttributes(): docE.aChild(aId) else: aId.unlink() if self.applyPublisherPolicy != None: ppE = doc.cE("publisherPolicy") if self.applyPublisherPolicy: ppE.setA("apply", "yes") else: ppE.setA("apply", "no") docE.aChild(ppE) if self.description: descE = doc.cE("description") descE.aChild(doc.cT(self.description)) docE.aChild(descE) if self.requestedExecutionLevel in ("asInvoker", "highestAvailable", "requireAdministrator"): tE = doc.cE("trustInfo") tE.setA("xmlns", "urn:schemas-microsoft-com:asm.v3") sE = doc.cE("security") rpE = doc.cE("requestedPrivileges") relE = doc.cE("requestedExecutionLevel") relE.setA("level", self.requestedExecutionLevel) if self.uiAccess: relE.setA("uiAccess", "true") else: relE.setA("uiAccess", "false") rpE.aChild(relE) sE.aChild(rpE) tE.aChild(sE) docE.aChild(tE) if self.dependentAssemblies: for assembly in self.dependentAssemblies: if self.manifestType != "assemblyBinding": dE = doc.cE("dependency") if assembly.optional: dE.setAttribute("optional", "yes") daE = doc.cE("dependentAssembly") adom = assembly.todom() for child in adom.documentElement.childNodes: daE.aChild(child.cloneNode(False)) adom.unlink() if self.manifestType != "assemblyBinding": dE.aChild(daE) docE.aChild(dE) else: docE.aChild(daE) if self.bindingRedirects: for bindingRedirect in self.bindingRedirects: brE = doc.cE("bindingRedirect") brE.setAttribute("oldVersion", "-".join([".".join([str(i) for i in part]) for part in bindingRedirect[0]])) brE.setAttribute("newVersion", ".".join([str(i) for i in bindingRedirect[1]])) docE.aChild(brE) if self.files: for file_ in self.files: fE = doc.cE("file") for attr in ("name", "hashalg", "hash"): val = getattr(file_, attr) if val: fE.setA(attr, val) docE.aChild(fE) return doc def toprettyxml(self, indent=" ", newl=os.linesep, encoding="UTF-8"): """ Return the manifest as pretty-printed XML """ domtree = self.todom() # WARNING: The XML declaration has to follow the order # version-encoding-standalone (standalone being optional), otherwise # if it is embedded in an exe the exe will fail to launch! # ('application configuration incorrect') if sys.version_info >= (2,3): xmlstr = domtree.toprettyxml(indent, newl, encoding) else: xmlstr = domtree.toprettyxml(indent, newl) xmlstr = xmlstr.strip(os.linesep).replace( '' % encoding, '' % encoding) domtree.unlink() return xmlstr def toxml(self, encoding="UTF-8"): """ Return the manifest as XML """ domtree = self.todom() # WARNING: The XML declaration has to follow the order # version-encoding-standalone (standalone being optional), otherwise # if it is embedded in an exe the exe will fail to launch! # ('application configuration incorrect') xmlstr = domtree.toxml(encoding).replace( '' % encoding, '' % encoding) domtree.unlink() return xmlstr def update_resources(self, dstpath, names=None, languages=None): """ Update or add manifest resource in dll/exe file dstpath """ UpdateManifestResourcesFromXML(dstpath, self.toprettyxml(), names, languages) def writeprettyxml(self, filename_or_file=None, indent=" ", newl=os.linesep, encoding="UTF-8"): """ Write the manifest as XML to a file or file object """ if not filename_or_file: filename_or_file = self.filename if isinstance(filename_or_file, (str, unicode)): filename_or_file = open(filename_or_file, "wb") xmlstr = self.toprettyxml(indent, newl, encoding) filename_or_file.write(xmlstr) filename_or_file.close() def writexml(self, filename_or_file=None, indent=" ", newl=os.linesep, encoding="UTF-8"): """ Write the manifest as XML to a file or file object """ if not filename_or_file: filename_or_file = self.filename if isinstance(filename_or_file, (str, unicode)): filename_or_file = open(filename_or_file, "wb") xmlstr = self.toxml(indent, newl, encoding) filename_or_file.write(xmlstr) filename_or_file.close() def ManifestFromResFile(filename, names=None, languages=None): """ Create and return manifest instance from resource in dll/exe file """ res = GetManifestResources(filename, names, languages) pth = [] if res and res[RT_MANIFEST]: while isinstance(res, dict) and res.keys(): key = res.keys()[0] pth.append(str(key)) res = res[key] if isinstance(res, dict): raise InvalidManifestError("No matching manifest resource found in '%s'" % filename) manifest = Manifest() manifest.filename = ":".join([filename] + pth) manifest.parse_string(res, False) return manifest def ManifestFromDOM(domtree): """ Create and return manifest instance from DOM tree """ manifest = Manifest() manifest.load_dom(domtree) return manifest def ManifestFromXML(xmlstr): """ Create and return manifest instance from XML """ manifest = Manifest() manifest.parse_string(xmlstr) return manifest def ManifestFromXMLFile(filename_or_file): """ Create and return manifest instance from file """ manifest = Manifest() manifest.parse(filename_or_file) return manifest def GetManifestResources(filename, names=None, languages=None): """ Get manifest resources from file """ return winresource.GetResources(filename, [RT_MANIFEST], names, languages) def UpdateManifestResourcesFromXML(dstpath, xmlstr, names=None, languages=None): """ Update or add manifest XML as resource in dstpath """ if not silent: print "I: Updating manifest in", dstpath if dstpath.lower().endswith(".exe"): name = 1 else: name = 2 winresource.UpdateResources(dstpath, xmlstr, RT_MANIFEST, names or [name], languages or [0, "*"]) def UpdateManifestResourcesFromXMLFile(dstpath, srcpath, names=None, languages=None): """ Update or add manifest XML from srcpath as resource in dstpath """ if not silent: print "I: Updating manifest from", srcpath, "in", dstpath if dstpath.lower().endswith(".exe"): name = 1 else: name = 2 winresource.UpdateResourcesFromDataFile(dstpath, srcpath, RT_MANIFEST, names or [name], languages or [0, "*"]) if __name__ == "__main__": dstpath = sys.argv[1] srcpath = sys.argv[2] UpdateManifestResourcesFromXMLFile(dstpath, srcpath) dispcalGUI-1.7.1.6/util/winmanifest_util.py000644 000765 000000 00000001621 12025152313 020520 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys import tempfile sys.path.insert(1, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "dispcalGUI")) from meta import description, name, version_tuple from winmanifest import ManifestFromXMLFile def getmanifest(manifest_template_path): manifest = ManifestFromXMLFile(manifest_template_path) manifest.description = description manifest.name = name manifest.version = version_tuple return manifest def getmanifestxml(manifest_template_path): manifest = getmanifest(manifest_template_path) return manifest.toprettyxml() def mktempmanifest(manifest_template_path): tempdir = tempfile.mkdtemp() tempmanifest_path = os.path.join(tempdir, "manifest.xml") if not os.path.exists(tempdir): os.makedirs(tempdir) manifest = getmanifest(manifest_template_path) manifest.writeprettyxml(tempmanifest_path) return tempmanifest_pathdispcalGUI-1.7.1.6/util/winresource.py000644 000765 000000 00000025026 12025152313 017511 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- # # Copyright (C) 2009, Florian Hoech # # 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., 51 Franklin Street, 5th Floor, Boston, MA 02110-1301, USA """ winresource.py Read and write resources from/to Win32 PE files. Commandline usage: winresource.py Updates or adds resources from file in file . 2009-03 Florian Hoech """ import os.path import pywintypes import win32api silent = False # True suppresses all messages LOAD_LIBRARY_AS_DATAFILE = 2 ERROR_BAD_EXE_FORMAT = 193 ERROR_RESOURCE_DATA_NOT_FOUND = 1812 ERROR_RESOURCE_TYPE_NOT_FOUND = 1813 ERROR_RESOURCE_NAME_NOT_FOUND = 1814 ERROR_RESOURCE_LANG_NOT_FOUND = 1815 class File(object): """ Win32 PE file class. """ def __init__(self, filename): self.filename = filename def get_resources(self, types=None, names=None, languages=None): """ Get resources. types = a list of resource types to search for (None = all) names = a list of resource names to search for (None = all) languages = a list of resource languages to search for (None = all) Return a dict of the form {type_: {name: {language: data}}} which might also be empty if no matching resources were found. """ return GetResources(self.filename, types, names, languages) def update_resources(self, data, type_, names=None, languages=None): """ Update or add resource data. type_ = resource type to update names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ UpdateResources(self.filename, data, type_, names, languages) def update_resources_from_datafile(self, srcpath, type_, names=None, languages=None): """ Update or add resource data from file srcpath. type_ = resource type to update names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ UpdateResourcesFromDataFile(self.filename, srcpath, type_, names, languages) def update_resources_from_dict(self, res, types=None, names=None, languages=None): """ Update or add resources from resource dict. types = a list of resource types to update (None = all) names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ UpdateResourcesFromDict(self.filename, res, types, names, languages) def update_resources_from_resfile(self, srcpath, types=None, names=None, languages=None): """ Update or add resources from dll/exe file srcpath. types = a list of resource types to update (None = all) names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ UpdateResourcesFromResFile(self.filename, srcpath, types, names, languages) def _GetResources(hsrc, types=None, names=None, languages=None): """ Get resources from hsrc. types = a list of resource types to search for (None = all) names = a list of resource names to search for (None = all) languages = a list of resource languages to search for (None = all) Return a dict of the form {type_: {name: {language: data}}} which might also be empty if no matching resources were found. """ res = {} try: # print "I: Enumerating resource types" enum_types = win32api.EnumResourceTypes(hsrc) if types and not "*" in types: enum_types = filter(lambda type_: type_ in types, enum_types) for type_ in enum_types: # print "I: Enumerating resources of type", type_ enum_names = win32api.EnumResourceNames(hsrc, type_) if names and not "*" in names: enum_names = filter(lambda name: name in names, enum_names) for name in enum_names: # print "I: Enumerating resources of type", type_, "name", name enum_languages = win32api.EnumResourceLanguages(hsrc, type_, name) if languages and not "*" in languages: enum_languages = filter(lambda language: language in languages, enum_languages) for language in enum_languages: data = win32api.LoadResource(hsrc, type_, name, language) if not type_ in res: res[type_] = {} if not name in res[type_]: res[type_][name] = {} res[type_][name][language] = data except pywintypes.error, exception: if exception.args[0] in (ERROR_RESOURCE_DATA_NOT_FOUND, ERROR_RESOURCE_TYPE_NOT_FOUND, ERROR_RESOURCE_NAME_NOT_FOUND, ERROR_RESOURCE_LANG_NOT_FOUND): # print "I:", exception.args[1] + ":", \ # exception.args[2] pass else: raise exception return res def GetResources(filename, types=None, names=None, languages=None): """ Get resources from dll/exe file. types = a list of resource types to search for (None = all) names = a list of resource names to search for (None = all) languages = a list of resource languages to search for (None = all) Return a dict of the form {type_: {name: {language: data}}} which might also be empty if no matching resources were found. """ hsrc = win32api.LoadLibraryEx(filename, 0, LOAD_LIBRARY_AS_DATAFILE) res = _GetResources(hsrc, types, names, languages) win32api.FreeLibrary(hsrc) return res def UpdateResources(dstpath, data, type_, names=None, languages=None): """ Update or add resource data in dll/exe file dstpath. type_ = resource type to update names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ # look for existing resources res = GetResources(dstpath, [type_], names, languages) # add type_, names and languages not already present in existing resources if not type_ in res and type_ != "*": res[type_] = {} if names: for name in names: if not name in res[type_] and name != "*": res[type_][name] = [] if languages: for language in languages: if not language in res[type_][name] and language != "*": res[type_][name].append(language) # add resource to destination, overwriting existing resources hdst = win32api.BeginUpdateResource(dstpath, 0) for type_ in res: for name in res[type_]: for language in res[type_][name]: if not silent: print "I: Updating resource type", type_, "name", name, \ "language", language win32api.UpdateResource(hdst, type_, name, data, language) win32api.EndUpdateResource(hdst, 0) def UpdateResourcesFromDataFile(dstpath, srcpath, type_, names=None, languages=None): """ Update or add resource data from file srcpath in dll/exe file dstpath. type_ = resource type to update names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ src = open(srcpath, "rb") data = src.read() src.close() UpdateResources(dstpath, data, type_, names, languages) def UpdateResourcesFromDict(dstpath, res, types=None, names=None, languages=None): """ Update or add resources from resource dict in dll/exe file dstpath. types = a list of resource types to update (None = all) names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ for type_ in res: if not types or type_ in types: for name in res[type_]: if not names or name in names: for language in res[type_][name]: if not languages or language in languages: UpdateResources(dstpath, res[type_][name][language], [type_], [name], [language]) def UpdateResourcesFromResFile(dstpath, srcpath, types=None, names=None, languages=None): """ Update or add resources from dll/exe file srcpath in dll/exe file dstpath. types = a list of resource types to update (None = all) names = a list of resource names to update (None = all) languages = a list of resource languages to update (None = all) """ res = GetResources(srcpath, types, names, languages) UpdateResourcesFromDict(dstpath, res) dispcalGUI-1.7.1.6/util/winversion.py000644 000765 000000 00000002003 12025152313 017335 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys import tempfile sys.path.insert(1, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "dispcalGUI")) from meta import author, description, domain, name, version, version_tuple def mktempver(version_template_path): version_template = open(version_template_path, "r") tempver_str = version_template.read().decode("MBCS", "replace") % { "filevers": str(version_tuple), "prodvers": str(version_tuple), "CompanyName": domain, "FileDescription": description, "FileVersion": version, "InternalName": name, "LegalCopyright": u"© " + author, "OriginalFilename": name + ".exe", "ProductName": name, "ProductVersion": version } version_template.close() tempdir = tempfile.mkdtemp() tempver_path = os.path.join(tempdir, "winversion.txt") if not os.path.exists(tempdir): os.makedirs(tempdir) tempver = open(tempver_path, "w") tempver.write(tempver_str.encode("MBCS", "replace")) tempver.close() return tempver_pathdispcalGUI-1.7.1.6/theme/bg.png000644 000765 000000 00000001164 12025152300 016006 0ustar00svpwheel000000 000000 PNG  IHDR2 tEXtSoftwareAdobe ImageReadyqe<rPLTEPVIDATxdۖ@C# :(BCxty9au*o`fٜq>ɀ ˟rRt A7|m7,onj6h979<%x2 S(#axF{:)PtɀHS(tJZbV<0v;=p4; ¢PFT%$TV8Z uGa](#5Rl^P͸ɀqS)lgY6g(Hcqzi -#x̌[ 軮HS(A9&Md AMm&4Jd@p4#ɀ }9BɝiN<;#oOWt"mfIENDB`dispcalGUI-1.7.1.6/theme/dispcalGUI-adjust-reflection.png000644 000765 000000 00000141600 12025152300 023022 0ustar00svpwheel000000 000000 PNG  IHDRtEXtSoftwareAdobe ImageReadyqe<"IDATx$uWU8=ݓs<X #0X)Y-gI} ,YdS)(QH "؜;P[ݽ= . ]]u=\IUUAz;d ==A=AzFzЃ0zЃtу`==A=AzFzЃ0zЃtу`==A=AzFzЃ0zЃtу`==A=Azx{ ' AzxG~K/I&=Ad'0իT{H=X._u=EL&FD*YOKW*#q(:AA *eѕ-aCTF $t:[-nUU7w'Jߔ@{0=~چ Jbӄ 6׽6`/fX W*Pn;՛sV}K0ҝGt_M鮟\t/(p{_n 8nz#\T7u4ջyOG=^mlƥ!A _l6TK Fb/Ύ_ljj(+j2MaT5`cL5Fwh dY0Fr+~ԉUbM FZ-[Gng#OfwI,k) (5%3,ZL* \9=IAy@=@{vD%`QEki*.UL,9`n;xeT*}!ٍt0eIQz٨^(@ˊG-XIf .a3ȕ PESsv;"&&&E+ࡪEsyաyBG,C!7k10YQlÀ`ХrQ6;Ls򗡲+#L i~Z%Xn$#Ц2 PG6'|)vQ{<\;~"tR@"o>R_ÅU7m5) d{{im'ITK O=, o3FmXdl@WzmaQd3`d#*9yT\d*=CP!g^)"KyL*Tuymv"MBԈ!|sž^/ο 9^|'4#PJ,K@ZԘ簽Ł׿8`ÿ?HghD T[,~;QN/u>#ئo0~^ur(i}}?vÓT2>/~6"Xk7_ɇSg}mS?yX/~ q7  |_J*]N_(?QK:Ag_'ϼ/};g?Iec߼}?1qo(owLE0t&U]*<]WYC6E>W?7)<\ 2V^~;x0j;J_>zYb^0sfӃ??|D >gMg?t.;  ob!,릶ׯwQ0KX2P#bhs.pb Y C"Qd1A@bM<tᰣmm-2*'heF'K{1iq#?թ 7Ο8#!xb5J&a\[j(Cʄ /bzUv"[`÷_x I+vAB]]iVZ(lP0rޗ^OCy[~g"hjn e)O'{="g m>}+r>c y8.Gh 7'EGMNgr֊`-L|'![p:v~bU$<;|+xτK<GNKo7xs8=cK:?)bmMXz_P6L_/=^9q%bX9D.WZo*~lOH" vidvOs#8t0N90r8^>xn .գ1zYKGϿ'0i7b5,GNOSRY>9>gі:/\G~ev#6T cqV _CMuM9$2?R6]/JGo}v<|XmV$٠fG,!b*oU.VVY?bYg)ɰK,`EX` f2D[ 1J9͠T v2)V^4CZ=$`'')bUʰ>(WЌlb#O,6+LOL,Df&^n/ȦH& em*2$V-#Ë?LyN2 gƼMcR)(:j6)>'?}<,VseWR&&ff=Fde9J3}Kp^\x"#,8i LQ9UzS"`&6CW:m!\H'ډmryvrA0<ߧdM0Ϝkt%s0r$gYFB QFIPSYE,,1ьnh廰4SmJXaVU,nW"U:7~/iӞuir>Ydq{2`yi*t o) 7ٱևfO˘FX?$+A,wSG7&}/zP6Zƺ`~YUw^zg6WukTo)F萊 Rr\eՊ&FrQĖg@JimTwZ]_7,ݖNu`=2{&Vwb\01m=vb*mԽ{fEެ;f."AzxǂCzЃ0zЃtуX[ƍwo`@@6Qz[?S0  lbc<~U@:.d{l6Y1My?fqf(TN@`gNE v$?v |Ȋ2i`9(mоEvi(-T^6ƫH^ :&I.)FR@U2~;{4T;=0H$F>#vſ%rkyg&"$]pY P%3mBh@c[j6x{rͩ>|5 h @ҜE %\J>+m߉?1{b2#_qat] nvաFYV8bG{'bgP'3}x&d ;$={ŊUe3Ϣ?`V,y- |A'tF=YDǮǨEʣ`n.< ʠ` S>=`#QItҀcWe)yG@jZ0:[O~ {7O;ℷϏ`m RYL.AqbSO}BC huע ,S _:E@\2ZPLqMPS1LO"*_E:6GǎȇGOG#l&C.9^K Lܭ3Fov|3@OyIڍ)~ jvڒwD, ɧ?wv ZbY[6v;dsB4NGKU'FA%H .3S{g˞d sx{GKKV/br%:4f/0c[X6CM#% oAi@y9; .Q8v B&Qr+xѲQow`z):G_/JxDg2R#/ [:|!<axjl8wGpu." 0`,T7*_Br}X90$C"q4dp Cpo #cځI Yv7xbg}dC { kz^c8ÖzJ`ȦSƛN`u3(TE:|óXŪR=uL`4(R{FE桷ZqY6b-b0PGs {i~ {#.U0D1Ad) ˄e;w~%DAYo43O HnIΠ8?~o/`n".dOoXI+2JsM [CЀ|h´bezħw<W!X΅lBHdzU&\.HC+8}SрN`~.M>69p9|@{K-r|u&˧1׏XM RENqi\p 9zz[@\L('+y?)o2@Hࣿf$ 3rnv6.'<{zF5L6'x6RqQ'0o<'Zx uu^X 8tC+(p[d s!h No-\V,)o`9VXׇlu!"Ia6 LQ!@(A6lsAƱMzykKbq5 ? Vے(Ѹtz\$XevԠUBRUeAxuT:P\ EPNc>G-(ritbs8~h=s^M>$`i6t] hKvæk>ENd$reqVTad3нȊdd1U\z'.qyL QIF $ԒBڀŵ*AÏEG(VPs1a# !./ Ѝ,!Djy#[G̨kEN;OƄ2@ N2NeQ%EĻ47'l~X(=dD{ 7UnA9\2XH0mӚ:TttR)=xNup'ău!g"Q|gi gBP^]2J_&J9rE )TꀟU~ 6jHr7JV[-L{C2W{FZB zamkwS"?RU=0c30 ^تD!H ca XS~hlAIX>`@E7P>e1)y0y$7._N'`.FcNbK,<Wۙ=yR7׃0w;GFg/1b{yFu;šJ2sECKX -##[4V(Ό?E'S Az!x2l4K2<͖ * "*E%$+Rbm2Ew} #f"Q*/cAn:A?DSf ^Զr/Nf'|iRj-t> vc/=I'LXޯŘL^bxX,CT+ibweW4CUؕzte.R x%J׈pyU4jP;OzUa>KÊo8rnT?~_"ҭF3} ,rkxB?E #=ׯ]uuR=#|jv4j-iih UEqsɭoTSGB}쩁*>Lft2eoyOf>v_m~ܶ{aWxO /XIFυ}Y ŊE ;>M(s mhmkCsFg=߇[6)@K/voꂉ!ck!fHl6(& {wk3N译^9 lo0D߬V{xJi򼲸.* zEYzJ)/\>NOZ^*=-sLA*َX ȟUVGA|/Q@iK٪Zgsע9H38+` :$\9u!C=vobtpڭOwFr> [pjۇQ-¥i;gpV.8}x5}Gpyax j6%>?}[1v47CK24IZ`7FP k1\a]0&pUP?ר@7\J ݌sqC0^ñ#hi{6wR\WIemh"Qj:C1‰uBص{;  VU>p.Dp9̇MC`D /Tze`ouꄩ%`PI |!$:}<ܯ1+-t)EDbu]/C1x+&ֱshܼߊz,ڋրY* [{<; {C;v !hN_Ƶ(<Ÿ5dIog+pz<ݏ>Y9ux3s0zඛpa τ Sb4+fہsGpeYxώMhlB9l@6%m֐g>6؇ ff,^?xS |D~h8sW(87@[nkv Kk=(ď+gq%Dd J]#+yZW04O 7%r$ 24xrZӍx$n)<^9gs?Z^h9~-ELxG`Ap)Cg5pb,DY~/(4C0]h -Bu/e#rY/ kѩ .8H(#:.dd1V.+$Õچ\Jm͎ŧqbFg{@,3b$ҧrJ& n߇Zc##3hE,2fy$zE1pEUVPyU7V$zGަv6kI?Tq>Łt+ c/B`Nd/]&t,IK飩x7SZyPiV8e<~X˸|<./lDuqu 4r`exي8A*Ď=y'!ucujF'!vAQ\X,RĔ-I%W1c@b,erDyxty$'u(pzqde'zPHo,MHǢnR4"Ɔa%gFCC2g&D3RQ^F}5fiTI[YwoER׺TsR켹C*%Q6MYzrxdЀ$@H'|x{HDɑQXZn'B04f\JSKIl% ߓ[lp8r,H$rKûsұ4 xuQw80y>+]U6L JBDpo֦:?f]۸sihhXqI<π6En,/@!ڬTJfE`2l'1 [LZGLJDh`dY0[m 9#_R<%ز`lF0M[vdڬlbR\+y6-rHb:+YILJ-j~tnsE,Q[//BhxLփeΑ$Q (ߒ$y1!XI"\. dlO7Yl0H1Y($ y =3q8$ E%b,\iXAK#VM޲Μ8I@SDeA츷m /WDbgu#JLN`M8IDO" fn~lpbqEdUE/d"X(ب<n ٔ,K]:>}6CWSƹs翰rw9ӷ6r*%ld"yS a' ?[F+LώC wAnN Fwoq;%oƀ:M4xE?e$fp e*)7€LJ(&-rò(pZjiOQEiSGO%;mK*h@HTP.{ \~x"B}PibwlA(1:ʋҮqUXM|,ګ ǩFpP qT.ΓXUxXOXٍ,vV%+őP6/Eu}6Zع$R*n-Sο.&?'a>e,ببa- yPKM11p{-(\zv](yY)w{?jeTgֹ>/UNvKՍd]E,ml|.5[6^o[x+7cg/ؒpɠTf iK[ceab*Ң`6f~_,\dTʊرTM[Zv&&6Yʢ MdĩVm+6p(]ڕU]>p.nzLl4 gm@Js&bCH%"f(AK>0V |4m`2R}EX3QܯQ+\(xE&\FgRŌR>C5R(JUGxڽBXŠUZ5pZ ☐qTIX^y@}tZ6>li ۇ®WUƒOFkCpqSNt5Fb/ɷutY$P} JW9ř]WjmQ(7s^L<_]et应UK~q +T4`ז^aRiRr>_sqkk~̕f nI9)UDiw}X=̱LSYmEo)Dfn1ԍ'Pӌ-¹|RyeFGaPfcdJN9޶A v+wcL({^Eo#naFR ?1'KL4ƊCʐx-:KNSxuTX.ޯow{)F^dhWm$E_[p(C a5 SLukh`;E[ej8̢l.J A!8` s~)^2M q#sS/YR|nFIP>Z> -G zʫN"io \uA.!nseeAaǞ=-йm鄅:G ߀m׌톇-LՒ)| jhlzoheDCcCPVd48  :I QWc:b_/[G[ػ!7։U!BER}e3 * BqH8rgbq qp=8IB:8/ kž]\~u" ZdMwƃN7A;YVd6T,2'BKCǿ.zLm*>F&Bs Cu:U"M_8@-So,"I-r##O#Nҿ8 IĿ|oQF¢/16]|G@,"Hn^~f?vwF#N:nItmFrRL6#/PFq~4}0wpYnG==c4+~:: I\>-Ejkidl^xjBc!0 ܌Gv`z2d{W(o'/̵Y"[8j|hij@{hgThpq?vtHF8mr8 1GNVS 51 lOb%W$6A!(yu\ @i `FħXۆ"f$5ѓj@)=3@t f%dh1vҲ=5Ioŵ+a@Ō g`nބz/MxS>60oN&%U-ҿH K z8?y,οEvU=zcK+Oየe`p[Sld':GwH .B`5>qt 'B6XBln/}eZڈ\z C=p<ڦ>AaKhǶMBSP BimE-_| #IQ :639kiu:7h7@&bOًS}o]Ckg7\$Z_GJw,9(Sfio6k$֪ LD m$ҡ9~ v/!j-PH/3^5ʣuN殝DZhhĩxY O5JCOe{1ФEx_SNQ:vEpSY.*@Gk~lA3#BLMy{j`mK%1s1bbWWuCi列yy7Kox<"A.\[j ?(IO(QZ-bF|xDZ,Y{H6zH\Kl%$2)N"lA{{OGL8yF/k1O΁PB,F 1N/l$J&%+څ"1PD[ +^pYhAϲ~%¬K&"G'7fE{08l.b>fQ9!@ΖiDXE!Ǐcp>* BT8ZF4M*BJ".WoTdn`ta6&R9)],5L bUd0;1 M7h'b/_!ėpVY#Sj2o"#h38:s X Nz1-=F" Q! '1{3:({Uj:[]T0<< Tcvw646<LE6x3*Ė]EO-}*SW&ƛ8 j6X šۻ{^A.Vg;z;LTEss#uB43H W X,b3fKG;u$'"d\C$"7e)D ETm7buac3+{Y2anr Bt8UQ}$KJ.}'44;= >+S#%؄Zq[,ⱇ(KW74kii~rhoR{Jy2VE?]DR=MTOJ   .qmE~n .#/"i (Yslbqbh#$IIp, ]6[+7ZLXJ\|k?T<3q"WrM*K@UZ7&& KsN4O0ڤt"%Jf7Ni0(zIR9@s⥁[DzJe(٩ۻl=-:RK @S>} XgXyjQ(=RF|tmkPxʴ]q|_cOp?Ձ+ <AD,cQޗCn K=todP; ?s-LIUaQ )>2 ¦Sq'iN8',s۶d Eu0PDd^YR$s;o8.] f!6"^Fs=!s+(pl$F$d9+osM PE:-l/`\BA)ewS7]61]ƃ=>Co4rCDpa[hUxgR$ `;ɲ)v@{[ ncذW.+6U{l՞$$G7Ԣ67fKFPvOMNdSunXgVJ/S;p^2c﹊0UL^ܹyeDyhqs>sb_Z-̡}pr 6*Cuxgb u|&B4e_ǜ]onG*Thm}(3O+vm[x .®-}9,Ɉ<T6BYAkvtڤZ4bݨbWZYx Br٫A臢}C2B[A9 E`nv655?tku _hk6<)jhMj@D2Kg}eSsfOн5S'%}SpxDhXG؝[hL!ˠ HT;ǚfI4ۑHӴcE[W5fDQKen<mDx% Os?A,~Rg3V>u8lхֆ:& 4 j&N1 ՍP1ĄqU}k;Zp썭 CD!AFuN+q܋& $22:zzɰP=BNŦ@ ڡnTFW=-@6I2+zQc*b%CK82ZH[p`V IFsG7.OLxeb{m#[aW&Ialօ H9ɊNmHbtbA,4_4cpsbsY MV*GwO'<±:[sjMk,F#aiX Gع}᱐Ȩuwfxr%==;eҳ@$Wή7bѸЛ ;vG&Pio!-8x}) ݤ5Wo`I!7BjXIz6[6"~r}y7 DTEv<;^,,R#RfhYҊ!`OP'lŽݘ]A>;`J!elv֩ݮ \d[2>^Y&͸|5DRH}TB]hjəGZuaq1vhg,e( ۈĊ-S- xX7cX;xeAɟv-i)Ik];*1aiCDq] tЄmǺqbݐ#05Q=.f{Vڽ-ChR'ܡoWyױm=HOfwyi&bR$e[XU嫵g R]S][w}ؾ^{fw (.S]5UY$d0Z깿sw:A&|? '3fªՐubxG5v 3C .,{r_kJ*(l9 2.-m|&ln:DfX%ݣÐi3䎷q}4sl`u3h?f^ KXM>X}4FiDGJMhp+vÝ'p}X *m>0[* iw|+ /^k.җf15*::]iY=H 8L15;/-"L^=D&s]N$u'*Gq^C ezA H5:=>V^e{-<J_ңBæhhzm.GR/u-fqp2 GaU1#8sv[G{(i6L͝`>=o}c*Ge:z <ep *b ӳ0ײ< 0<k"흀.7Ρǥ!4=b>,!ՒTxՊz. MC<bU@DYo0kfFgX(qՕ҇=dZ)FFSm0@`g/RO@sM\ c7 ,n39DV>**ӒGXѧgr4)8CG)bm4gaI3[ǓCj49x"7Ҹ`42;X}T* 8l8ۦFZA-쵰k9BzLDm {;!b^%`?;}}X4$)jľtȨ\wVמPXz<$2etBIn9q0Wƒ+Hvt#&X7r)CTИ&Sgx@ pcslo!S턝a642e+ J4hu&fyl{GpbW `&&2)toBQUo *,|^KC0sءٻex`6@6U%]0+) !7U$Nŀ[n{ $@GZ3Fj-pgkzΓON롳 `O}$?ygg`W+PA, }NӲuF3/h~>TǖxEFjx}U_G./5`P~xf/t% u}`z=2cc}(&0?=A3 :=<(eP]x_+N0q>э9*R,vFf?F Lv"ƒ2x.*A4/QX2t%D%0yߡgK C*%9H Yү ?3ވԱMg*1>7!-*4QB2Y*Kt͎aj,MrKHRpFL@%cL.7DIoL"6!Ll >.]H2~R#NdR){9G'07AYrNek?a8%lj".`j j9K"_!UE'IRym6 S_f s;4G8:~s\8BA,̎ /&Y10 596FqqWu` ab.lKP)8Q<-)AC0Ń{ @}yL*UXb{yQޡ<8#!ۏWͧ vb堂I"Blj32s9}< _ Heߠέf[2~b۱,l,ϮDyF 60RVeE4PRX}LՂ/bhlS5 N+'l|݂'cc9js C#Ņ˸0u^!(9ŋ.- #}}R=8G"S?Da xKB+{DJ>[:0-#Hp!S9qb"j!`1@}XǮřʥ>Jp_F`{9Ŧ˙ymїy%Ac lUD sʺՏo= 8q!qpJ*̻W.z_ҥ+;ZĹwIbkۤF8y$x^!wgᴚQ!AgG%P-zǎp,53ĉB3iX́y=e"[zoR 7~RېCBcg|XҷdǗH ; >-F@~@>&{Zs8C O`Cw֨TYX؆uR=mB#e3D2SDC~5&zTf!)h!8D&(L>ϓL)Uf2,J ?e*+jl *ybI@c"%bR DWl@ұlmfMbpL,f 8#`<\]K2SRa&U,N`o?FLƆclf356(3(<F`dHb)ٜ¡A~lUJ6Cb*,m V66^"" P&scʡ?w.{k䑧O"JO^G,(y>yn%`@ $=;]:|US|.A3qW>CYg3;N2zOhd=.3RJk/^\Ǔ'C BE\>7xiXbfF9إ5՟W~#7E{{PZA&Ҭ7슱8ˣYv^+3vh4TR1b;,^klyZ3N{Z3yy[yS ;me:`;{k܉vfC8|:lSLx.e=*scʀ)g'.` dkR;r<91o/:5_'!cVc6/L΀e$C 1Ta1"]]]X\\L[3 ?~lT!-5uƍ!ܼy`/cX6³R)<|3CPcEܿR r{1 \FbO?֖^ 1捊 Աy{. hC yh.jB!^XG%/36*xp_#]7rKX:DupZ=ys Hwv$67O4( 24͍ȖJS tm* vLk[$NTҏ1oE@K%{ k%j?O `NSs>pXDz#i[KW8q‰pb?t?D"}P }q짌jt( LlqG.'_`rvp2⽽dȗk̷,Khv;Ɖɴ$O,ǫ>,iHU`'Qu V[^~`ޖɄk`RE?ç2m$S`l ̫Dŷ:pi2"H;?+ T-8ׁjLm&˵X\b܆`^]j[|I g$d2Tfb0__]Z a!_KHb` arBU}7wjPC 1K\ѹ#. 'e~?j=du- jk{c^e?[j a5ix Fk%!/"/TӳS$TZc_v+O3"kf@q K j 1QQp3@ڂ' Q\.5<ŗ|\iN=ykv-c ѿBu?j1RPGաB=?sNyx~+W[sZ߅%<",o0o [ۇ6GOwn :B&~l߫0hgKC卩|7 & VwQ\PϫD?BA8_i5sb&h"DȿŘ*`wb\u8j"RN,£zt"P^shnp$ )^sh{^t]^#`{uI* 1cib8Z 1`0B , ha4 *c!|}p8:\"d9PKCӬ8m(`Wb}P^TTֳ;kw.V/Noh@qFdNxj=}<8ekM$dZzzS FEB&W+iNO89W@*:"X@9x^%+%ǝL}2:INNC$h=o5{1 :ڞۧwGw54f\' ?* 8>eL50,*mC#{pGE63}HU+ .9mvk_%3V0XUp1|L}?_&ͮea@*W8 0T`3r1>(:T 8OYU-,QjokBnK݅`1|͎@F$9!/+[=+Ӟۘk`W#u1ر}yy>FhcțEQI` 1Ɛ7Xq~d 1Ɛ/z]]]AŽ0c@Kq9\.`3gpC^W /!zC PwVVVn\2.cDb!-[Zs1"-6c!Ĉr5M14b!PZ7P 9UT[Sܪl>._<1+ek/u\@U<_8+6[%n]Krҗ/=c>$wyjЧHtL9@R<}nQd*gt,;AD$@D fO vA N B|C8QƧV '_ێw/z.:Vmcf{gbQzm`| a;z+n'vwQP BpXPĝPamTkoT`W\ r7|Vn? $ zPTX.\<& T :[3A?yUAoNʨQN<6dIT1| _0@*FA6 y`4dST MD2B+Ց .b@0Y0 u5~_QS G2&[`T d ݧ`fB)FXίtBz@ 3Us.@n"ԐHd&86JE3|>+ i|}x݋(J &Od\>? Ac`z3\^=GwPEM0d5rK˘=)dL. Mj9;3= 5?ݛ@(8./¢VQӬXt} ν.&8{'H vaf2z" XR/,  mpǟR~?'1L_T?թKg3cbf* @e\Sҙ=!"]}xxJu<03a!&,^~gF{EYaaN b S^s8|^3Ȅ' 36\:spم>HAE#Fi2 UCI8CN`:xC&pE0wlWlѱ/Z;(YY LnLN"w'( S+bg :3BǍRl|ꌚJ*Ƀ 04{nT p+1׿G׋nUj{D{bXZ8ꇫGSVC P$U@WM(xg]p%Jj9ܹ)~k&1kÃ?ý'+PrU q|qI^gCc~2<]\T% RET@XuP`z=*MRq/sT ݃K+N*46\!SgK!]18OHgoh|@#ħ+arupݬ W~3G\R*Qꪚcw*w|JbbFf .S֋i+݈]=Gdvbj'<;ՎmK:K=f\~^J#c4 *Բ rVE,C䉵ʢۖ}Hv`rju]}p+ f'sa\>n'S=UPQ=W:ȅRF,S\pne5bJ(5O8=mp(Yfad67 b9́K)f)8E*A@!%5^찙%Q,p;g:ݰn8>܁1J ݣu8D._D>OIxw~R#|=ұ(GDx,ܥ-<.Hȧ0&XcɊKWE .[R02=tLbM ^ĥ!JAy ]|~_N}|3>>忿u,D y Sn\|&VݥKp$w2 /Nļ;GUFcr]ݺj&=4fm Zի0PK!6,-ō;ko/hΞ[eض:MO6GDkgr#4]WK6:KZwk ϸuׯNnN7PalRO$2uM ܌1hG*=-wgRh|w缪4Ϊ$QvN8-Ȍjr}>/,,ڵko)gff|tn5,igi5}W3DCGxk Mi[;֊@h'T~m>LJp TyF5Vppi]~?]`eb[LV>.rC&`,Βs;ؾֶuG7-4AN &EPx2똮`FnQl$X&pɮLzx 3YJMуf2ggꙷ9O'`~`:;EO$J'L<>CYch4)ƽzW* b",/<biH3~:@njݭ-ۖKfG`Sdrt>uxӏ.4Pag]8BX^fRh?HCcXOB{jCBg\ב" cl$!텥Q4tltdzv!_"El ?q@7{B"fTS9J`_7Ah 5۽;AQErV`gweG?Iq w>=(iJM@8 8Nd9kbꎯkҊ &=Џjrij,f c=<6GS7wPRH%STg4]8\8D^EzMaV``.RcgArVn6d>N]. v5~c4 w&@ zqe 3 ,5SjiܙQG@خ 8j l줸G"$ب<LdOA9Xd `Y#uG;pme:^/fg%Ca*+uYlN4&?z|#<ˡ@xkn0]jĘ{noMLԉ^b(OPVdwM|#VKUb l`(I !r݆O9(XE:78&XE1lMk8uy^y̎Ae`7!\KkWP}re>;S#؈0e qw;|xc[l%m} :Imge aceW0&EC:_lzX M wW~6\ֶ lf,N,{d]Td}T-W"brҰrzÜ]~ !`ǯXA8V_>=2{UoM4}D#a9L,,;un>XM2}nYtZat :>zu +i`拠 f F0>ƓBS$LN¦䐫00ۣY,(MB*+ uF?I>d^2ۈekܨX/$bF>YQSU?:(*1@uu&+&ƌvHJ@JFzH70Vi 'H$οS be:ٜn".ͣz 7O M(I]&fR!jXF`#f-,6 UP} -.#-oG0 ۹ZҨ-EDOo6eypԠ2G տp.Ϝv緩z 2PzxQB$%`I=hfRLRMq9S;h';#[WH&G1qb{v%`z tVd ARmRLM*(&pU ~- HeKxqp9#VI-JZguQ[g P"p)*zX$=[wW Ϣ*91}bBډ0oI̪N&(pX5-FPm7&$75keTSZA^SŰQ\TSry}J/]u,uuV6^_Tlz#=x]A7\3/doAV?˛Y, St<v:jy`Y1Č5bj Ss:cb>Buh Xlv֟O3 +(?b{l08է2wT]nŬnzרHUrU9wXZ]!2g(΅fl3f dX':-7w)F7*sFG2u)j1xv?)?MÜ,x'ݵ|ygפ/{esp$'{L0TC y@8OO٥Mզ7np\6f{m?89ƞsoo{LuU$4Pb06LMMbzznju 1Ɛ\<fD"3X!1y\TDf><&4X!+אv=c1l`>ȧ 0c!ckסn𸟖{|=cX"e< UvÃٙ+hf%g`8d-609:ED{|h ѱq(wcH{UE'ggy[0;Տ8yBbwvQ#%2&蛜X{kq\bvno}5 ==]Hl?Ahl:RΗjX} x@fJb0oBEb{]C+ 5գ*G`&֠`]}xPO? G;Op&g`!Jh}=ǯFutsm#_Up|C%,yqw M j5!82Ɂn2- T'_XBH5~߸8|t)* Y=إn?9{i Zߊ}`~"4m1 KyǠfHT@Q-XRi87Q,%SZjyQWeH 9Ag|J!l|n;'vWoëА,(rЈ-US{(ۂ{\}:di*vD7oj\T|tbD IuTTFC fܹM`#K48f@Jඏr;ܡnT&'1F] /#20d&Dt=z\9sReL2҇8Q|G?hPqXBRH7Ufn_,qS*J2Tf^ 1l0sa5h ]*B7n&P6pn "uRf#T+};-ʦ-T"u^[KQiHw-407wO]G6kV%!ZXRL[;8} }(C.pfT/%pOxQgػD$ٚϛp{5Y/^rEq=GX-MTqPX_ԇ48#`>N'zB7] HHqZ-"Sѩh1qװh^VW WRNVvѱzfwn~tUm|uZsu b7_Z~B({"/b'2u-EB緎Z| '5ZQ5FebIvͲ*Ժ#eE]%bpOu&`NV0Sbn?*e=} 'O>W IId8g [ <[ehұX؝n8m|*IBۦx0K]`y`e!vFg8ÓS%(5(fǢh( ZG tsC$|6=ȐE .=TvA2@o>~ɊI^s`D#p198w PIH{HTb/]P_Dut3uZLD<cb3Ur, q]a7\Du6>| ̎ar8{n > [jT[:e1L]E;,#L`c 6W7&Gzoh:KKR+ͭMnK3pao;XیotBac:= Ա~*bua, !W, LĽ:!>zdw[q;w^dBfGwЎ70x62v'8n]RC=؏Sq}9:ފKZ;{Y?`j(TnTqCKE JAjL=4 [n ~?wBpk YS"|_ @\)smT v6vy0?*ێ/4vxFH| Y`7\٭M6xcWd !j0b4') sf~it.ԘMDDr 62CX%8յ-R_JHr5dm9J9x^GRj9W~`4=#ۏp" BV[,&<Ғ#C]ISLp[D ]O.#"XPKan͎Bs&IrKb"]d5<ώB-VbT&ԋH,2{]IRmnэ-(/dT߸ DJ2ܘJ0]%~˺*a`yq 7?œ<ܡ~De_?$$?{t;i^ n]u t:Bä֛6M,{<8; UO74 JUE%oh7Fjħ:ԙ%xr>~t^nTBP݆jmHjD\Clj)E芸P(6P&`Ew[xc@`~ Ycm4xpY(Ys7Q4—7DBRGV3[kwXgw;: ϧP4qex̺aV`nghUO} !b!X㋸xf! .X؍16@Y{i߻g->g K)aFQ9v >4jR@Q5+= o ,1diW,e-yTl+qj9yz}3s2*Q5ٽI%qPYjjT43g좮RDdzL@hNMПG`3z%4 ᰠ\(wfQӻ[ŞEl>F T%G7./#)"+k_zu{303p9p !X#ܤUX98RCl$M$3-nF~dgn tdwM^d"\s4O tUK%>Zmuۃ߷w9%wسU5ur&3ufC߭~4D(X,` GoZ]Wo&WW`xx+x+^+^Wɇ6MOm1tF-evtA]9x_qĄ^䕧`YfIcw2tc WB! = ;~/반2v4u'I:qE"oVSTзX̸L[I \.ۛ4{.aG/ƽ/CPFATH(wN>و+OGn Ncxkkk c< j<-#A;b݄|[9laπ"2}zHKC^9tkno8B[-\ ԯ8X7 qcr0daB GPuAxA|ƽ;淚099I/0Gq sWy;͈Sa:a?zkNbNMM"e2=sTTݻ]1=Hl16džOվsAj$71, ;KqoDžsҡNq#;-81p ﰭiÝ+btGk0 .G:5NuO:w/,,з-L7oޤo|Cw^p1:>;A -IX: vIӍkP U>JPP.i6|bij6([Q((7XȥIGȴ괱# ܑ)2e&TKDlS4"ULDg(HA7miQ2EZsLR]V%KE+IsZ( c)_ܰ } b8Jc푅BT<;cC<Ss܆5SAAH>Ir O!E39wTS-CU؛C@<HŮT]Z3DZU:BVB llnprA0Hr  3{#h0} d/8d|}V)VC3[{($|639 jS0OQ\e봇T'j@bs\ǚyRE`RqȬS,5O=EVMNe2=8Kv, g/9z%LM ۹}/odPY~ ?KWO蝛o DǮ^2=W,&ݽy".SRɊL,ͿPk";Җ[ܠc}ڙ2 t:V0-zZ1=8` \m99p@m{'@!Osp};V2}*5:k·$JՖگ7,VK %Y^k%ODh&MNOQNb2M&V,KdPin.ͲsO ёK Jł/d*Tel%CmiUv"@TFVV6:m 00DB% 4lsmp?&6|fX+ȑ;pY?My^ʨ:ޤ>4K\ ft&еkfx†vO`NWߦZB7[ ?Is1EwnKw6(9sFVC=Zdz5BDHS֗>nS ${SbۯJ˛,ݢ?`ajSi.s.2Tov25v93|߽CMz}g7p1~_Я~+m-j1 p7?)%u[x0[oA< )ް _=Au8Ї#aoE!rU0]hNǥe#WZ Gx _ebu[vWHy+"md4{V~ly=MUb(7e Zyݨ8,S lIQqs {dΖu,dRTe VNq楊D#,"t@4ƪآ"G7Ca$-k׮i`y Wy&U.4]<@BT+)W*tjO~?W\b.>>$kk6iGi@hj r1JeHf( P!;8/5ŠC(ӊ9L޿CgآbmTwX+ ɢoh]?) XO#6[5r^{>[lg^Ғg@ T Uy, &e"0X8F7x453OvK%`)v=qZB,M2ɮa]$FlZ*J3lURmR%}BmhqFLmveMj1z NMPQ 1*5Zfv̮,?qI3{ JLOOvd|~S+6,? bev:.er}"9f,Lm*hPׅs/2bfAu^ 2c+G*HJNc[]!iz<4PT`+Ҧ|t7XB~K[ I*$B I'Y-PvJ4ką 8QL*_Q81A|XXpYVhRl:~MN$bw=jC$-à@u/Q&2x嵹,vi;]93|e) 1%`D?أK.94RL-XgۅCv-V(L@lg c׶%*0í-NasiyuUyi4[1H?PI"HiSdW- h vz Pg gkK |3 0`X|J2Ʉ٭S S4pCuqɑ= dQJN94^$ga-,j`:;&́UЩil@ngi-w,*uo09il;RjJV.V奂B[ٌmB'nr)g:Mhuڅg\rګј D2,m ʮ=jV>OVr&L'AA+3{ԟ-w}xP38>jT * |o[ez`xKٳc TR =K͎(v=,d+2ZE?߷\j2hm1m)[ۼ[m~Bmtdj;'6WHF Q͇]6X'LvF[,fq@IXz;ԱeFo=ϷcRm;];X6i)8ƙd,4Fǒ+9&zHs: e,m<T/U 7m1ꞣcoL< ~H?-=_i/NȽm0+߰a.'XFG  `ԇ 2 G<p{9mQǠkq]ApXO֛=UgqץA}~t_|@Gճ2@V~DRE?1Gafa֦qԶNVn/*8.n}sIIrqY>Jկ~xI?iQ`D} 2ҿ'.?_1Qczpj W>< :La[\ɐJ\V09Cx+r[ }NυngW\ɵp̑mC9 "ٹFvk{+^,&r?яtʼnh,d`$mMyg ^W>z{Oܹӳf ! 0.p$/ܽ{7kkk~ +9xU׿۷o׃)4-6>d"h j7[0 J\ҒǕ+^'(>O9\Y*X'ddJ.iNh24x-Y!X0 5h#Ճ㜷5cqAm7}՘sRNQH/礵ƥ2=D#.V>]߰kABa[SZ}ǧ=? 6"C`- ؒhcUA^7@ [n_qӿm٘Z[֚w ,'N>32slM4=}\" `AAdќ@B?sm O: qCtvOӧ=n%<=1ƽ{!~3L7]}AEZ'ñbv5&~x ۑ ǴWP6Ƕ|p xLX; %ԹԼ3%k&@jJ i7M.{9ߚ?Y%€TCM47H 7'8rn"7ݮN}6&}U{ $ZL7:9hRr갅^&q﹗C"MoYR>PHӆl7:mw{|-Rm'ɲ l|\h3|JAWz4QtY /@[KA,˦?!%;bI|>yD^e7MՂ{p D}@ht+~Uv_GIk0npip>CK`:Ww3'Jt1 `.\P8aڲn{a:u,%&mާ?s|MʷBp4M+wޣF8M?MmdEPW`v411\\LsSA8Jnia (IUUNOP9˿h)pjM eyRfϞTH$Q dF%U)W3̳ 67Q 纳!Y):N3KܿHsވ[~t2?8nйstv8;{:P't>O6+؂JNhzLZOR'VQ~"37RQ2+VMn)3Fѐ )U*Uj vh[MlQToJ GԨ5SI5, UkMug(S\Q$do5Ju&J 3&[2YdN %mPZhbB6B `HV[4ܲ@vAnݺ%l6 YМ3?ɾ ^*Ϟ=+lVbK;;'/]$o{'ȩ)kI{f &'Yt['dДϜ9!Ke-e,}B^9?''^xF.=(l4 y3.Kժ]dŜüf+gdP^8%+%K^xՐΝUy )׳Y.乫ƺ>sIdNc)ct*7ʲRU Wd#e6>\^^G|{6P^e~~^8qBYQ;ρ㋋AF‘ : 59 |m[f8.'~i2CˌT4({PLBF (WdlAOltZJdB6ld Jȹɸl L9LY4Cb%ᄜMdnt\ ^.h?"MvʷrjfJZ͆LNNKQTِhH" _PF|BFIi˲߃T\VkRNMdҐt' SDPC4x0ʖSY*A!k_ѿL(,3֣GXna䵆``N ,*M-se.7>|^he~j9Ztb ,ߠ,dWަTD슺~U/'%eڏ>aܒ?d6" :9Fb(kGf-9F[7^g5kmSzd+u>֖,lYLPR&,|_Hd@ ?MOMPd%RMԭ; cQouq_X@>t66W~z ݉,FòbƖ`kT Q"}ͲȝOSGRԬdhc!vmc;[lu[MfB5)Ϛ> /QaVU3Hp~)Ya5ez{JTaMepUbmƦ&T@TZv}IV*JGA8SZV:|3 UPTh*k[lg&+aV` MSC .4Il 6(0*>iK9u?,S'KB^OIZijg?!+_U=`n?q^z1Nj t\fa - "f՝䏝D<* jK4[lh Kgޭ7(xzҖxA-Cڑ4nr%(>vz^Mx^m;y+ v&:9_[-ka\hDvϵ[511g9[1-ieop$紩'jbfBʢB6æ\&Sh+Q))63"Ń^Q*ervGEF0jIEnT]f|N-&ٵQeX[`fz%#t㺪ɰ8y*bR/R5C'UJ,bVTCDŽJS-E!JZR (H1h%'&Y6mDXSsPTei&X1l)p>Ԉ: R_i`A aYhenA?.!iN0N8;kg43g|[U[G+KNh@Je) Q&ի>AfiM M GXx,?Q4lҲ=k&k M_kQZoҫ[-zzpg(VL 5TMQx?9߷IV]}XDѢHB-3EnKwXݪPC@H_ׯ_1b+F4_ЗrʰPpOƳAzl뿓'O:^VSr%hMV]ǽVVk U>oE U.>%3M425jdTZfMuܽ.W)V(-%=|XQ!l)e]ʱTT(Dg侶chj[5;VǾVnU}!1v3o~_W@]rE"𛗗f29V o~EmQ+T '[Hq㷴4AB726GIg`v27b;qUFםlx2l?T+R%Uoov*QD8 ,vvESVH|]E?}Tf)ۣ=(E?nTc ( Z﷿^d/xڱ0j&1f-ӟ+lN )_>J:)N*nq8  T܎5Xٱ^~sR!;V_u8V~;=SڢA?bZaW~ "Xnb/[%Buvj7Qv{1 "XŐ$KxWVFF'cQo*v]jW+h0YЙv vhgAj7 0" Lg ;1]'؊Oj=3L;Y0hy ʏj?q0vl4j0Z,7ʜwg'X $5=NN>ڣa6~^9`_2pa9Ky !.!8vOq/K&fLڸq,G#gU;3m݇?9?V&vP ӈ~˵{qig1>n2I#d}hcraK~]]HG48oΌNT%mqcҸp>(q--Y[\N'x>`G}}:lڊcTzy.6<<{m2>\FX0p-TiknAfianƶ@4\}wMmau9f 5jjyƲx9,{Bbw+q K3rcjd\T;CuqYA42fcuvf`c8g%48Ә3θ, vd!G}.F`="0u?e Wxbϋ,..Nqv=]ZNѹAKi>i\j@c'B-srV>4X =B΂J{إ-wkQ@O9kw{q)vvOa*18  $dTAYtւIENDB`dispcalGUI-1.7.1.6/theme/dispcalGUI-main_window-reflection.png000644 000765 000000 00000136552 12025152300 024055 0ustar00svpwheel000000 000000 PNG  IHDRtEXtSoftwareAdobe ImageReadyqe< IDATxw$',oLW{w ]ӮvuBwqF\\H Nt:]H8V<.$ xc{_]*3ޗUY3=\ 0MtwV旟y{}{O4 6dMd l&`l&`l&l&l&l&l&l&l&llll&`l&`l&`l&l&l&l&l&l&l&llll&`lɦ;˿đ#GnzU6dS0-loo/'N{W $l&\j}J3>>E|dcM6d(j2>lM1dHfN#4ҧ^[آo_eXU XXTD2:A,\ePc Lޭ[J#UB,!UUY_}*$jQOvVIyIRIW̬}ݞImCվF_ իCajQ*$9~==ADCPDljƠזSH5~P+s9Q GX]]RvQ%r]F\&_s:7m0v.$;wIR6l"cOS1CI0B=rz&2A@;ρKn?lI$8r{7Ν;W+6t.,/-A7" ".BϏǿt?{ XEc1ziil,AیiE5%l"yHpE)YV!XtyڑJ%1;;H$&2)pHq8hkk+ׄ€޿=e$; h&4qܳ.ǎ>{14|8]#ߏ<~c$ bM6}$ ` (:|>)J&΢@Lɵ$ATRɴ>jRRdX2ɤꅚM"WQW@(c`e$7xAS(8갵qKq22>x@ɎݻHˣH+8 wիK?Ӎ\.wIL&>3錻6N*Ry@% REK.9]bgM$"}ZW"8XR1>|]L%NIht &^$,20OSu(OSrl,0 0z_>Lj#4}Y>-ާ?`{#|> |/`t"*.b47&H^/5~-Mwժ[Uy$@t}KUis7~Օ5De @?U,UF!VY'.C__ UE*-KeXa-\vPz׵f?K_Z T߻~+}heP+z8N)2pq]\r.wV9jۉpZW.Kn~.ҽd1{-{1p;85'Bh({TGꍄ|QY:r vD+rHB΀ZD3x|ʘ69U4 ZVb_X^ o=$_EEp9ӷze(3^(C8URW0{~C:ZIQP*'/A%WRڂ0լG-:O2zU.\zT3_ &(/"Y\5Es+soؕߩU7ۍްH|l8|/^#cHwÎsT hT5,vt\LbRHU PjV^8uSY@EӧWYEC[jF`*Rt;$@~Z.]\N6 Cr0*LUCЌB$Z@Q/4, h sEԪ i>pXuC8e%&,O4'%+TPbocU`躦[T*Z3&fTC%/K# Qv xi&io taF_ ߨxl],ŸyF5AѪ>>CC}f"jA)R=zT9?T/ iG"|P+nIE[pMUs⺻ boG:%w:8H8BFrӹ\D8itOq9iA$*(^3)+c3xd nJ2C9օ9,Vw&h08 \]w8d6Bo(-YT[)hU=/1x&^!_J,é)`' 沸AԲzzb] ;f&IFh|ZG̩Ͼ2Ⱥ($SZQtU2*X;NՐJ/~*@2'@R[Pe%c G҂#1(dE,V\7ǚ*R3Tsl m\J[r?FUB+R\3֯K˨ZZ<`%[f6`{Y n `lzgq!?'C3GNs3UzvǐtT:* 85<LGW1s#p1Q崆:Cm-~li bl!Ą*N?ևA\L qmQ#ajkYA$!Q ?6$*uR%&(wffY2VcP%YW2@>]a1 ϑb`$MFYWӟSJ}%D-h)¢1/Ƅ,ϮfI%(KԒHui9%Cд40UXJq`O(0 sXRRqIh,+oh(S?D^`2ƿ>w71o_ձz ǾY$|^14v4&͘OB!D^nؐp/_Tb B)V:?bgϬ+Vq+$|$p p%h{YL/Q2,CX|0b-C3@OlVτΚ>[ltz@+Xiu=N)i5"UR92{XM-VYo 饪zXbDt&`&c|tɨ]}%{7GP '6B%ΰR2* 4tS+yjOFGvˋ$(MgUigWn߷xqj?X+ nSH*"܁V\H༘|U$0f񽺈j[{΋e ;IuJ7va]uvVfedQS]gLtRj[yV$5qA ԃs*fmL=n?>zlԧ ˨4 o-b>6X;jCQ &]ԥұ0E}DFW^K>ߏh?gnC& {>нgXw_>g"S~WO_/RzwR >@Kϱ":<߿;Zi;XL@ 5Ķ-87B$Hf֮f1[wR[+KIk3!.j3PAj32jCzd2e~-&5٨ Gefm٠?6S6Mvzl?X,*+F_ĄhC|SU#=8Li<@Ԑd\7_LJa QTN.՗_ß> 'sOfA(ű%wia$5)* }tƇd:Gr~ wcl>^R^$R9oDck,黪X>Ր>j.$=im!jkWәV&XٞT1,R3YE%2Ze=E}i*`m&\_dYE0Z0ꡭajn:FuIi5o>)%*JA[7rhmwR2결A=dHU?֗yzB 5K6-zU(~uo?Z1 MtF!I<"C`̯Ĺ%|!6cj9-:3+$ILQbx.%$3ݍ~t}.хS=#Ќwu:]C[\| 3`N*7 go~~^|A%T&% 0Z VVku5$}Ů&W(I(L(Yvy(Ԗegc3cHՓA߂з+P0 zt#Eب-ڧ5Gm\07G &H humnUEqDqmE>n z.^Ar*d]ȔT ޴ #i6\"+*/0xӉRݾ2 era5Ou6Xw3Y+%G`\ K_JrV蘻նvTP ZAl*݊2TqRkFFʺ JQe5aj3(V[4usm-TZEf@J)O7[.QڢUYbZ֏FmQ6j|q)}qCD=ʒw.HqczQ4)c#⿟ UcRclnu#CpmTٰϬd_%Z@>aԒ"5l0w\MjV1 F5e>;iLTs'R.SEF5XbT _#Yʀ]c1:L9I7; )VtͲ5+~j`^*uZ4dCUN~iTb>{ˀQkKuX RuIoR-]_9t7/C2.f8eR(wK3YtƼp(:ngՏ<]+yQl,VPΒg*RB\J"Fʰ(u?IYR(ojF=kZ呅Zmq+8e$!拕PeW:bU]+^Fw8+Te2}*h7-%Fq٨? mQck1EG-̕'.yLG \}ԹgnPtH?1dzv̭R(&u"p3EERJG/zC6S}׫j*^٘JvU_IIvje/\nzc] +"LUۢHZQѧ R SSU+ZU5u鴺r=O6Zil׫j,˛ M=Ί }gK Oc٭U0Y饕t->'FXN{4XM^<,%t-_WR9/&2B$w8u^\+ -)\pSNG^L-rZH$9EH8l<I,^By*9HRbFO!`GM\5=7[|,n`x58#!A/,b.`7R$Oj4W+Hq]ݢߏ .$LM/a4y8 5Nd I7ZJl"9+&K02WTRwM,=\Z6"Uӝ݆$>S$7]\Qg 87LdGT z;x'0KS+F.M<5-) ),bD`>U cJnqjb(ōGI/;VxWaY*E5reXpZV] 2L&ep`XX7ꏚeԬ"ִʐOfvȚ2jqUe8]ěEӺIqwju-K2m1L4jKW&g3pSša7bAX {) ^yF?)'U4a=b:10[y誇zZ`$N>nYxՓpHEl?.CxjZlK-Nr~O eg~ٖ2,VWFܴUrgܨy8]sUG\EmZ|,blYYoS㲑u)Λ K\m1vaVT$_FTb1OW}&>YgmG 0xp.{r( N+جbhM6UHZ!@lo,䈷 H(M})D٩l.@nb^p"B}LLUVT$=PsX=;SǜjkVٜ S06uɦI"-޽p-[Po&)632ρ!bk x8=2,;>?v؃ 2]TWg$\*y ;{3džL5"y=Nb&ן9CGg)]K]{1rcH(B.B% }KE,Όoۉ¥p}=>B>H]JMw:pT@s_ݻw^72QBrMh"?qCphEio[Y3ବߛixIYWr=iSnBQ[g38k8Etv!K@]Y ^J|A*Y|mKcyv O^O¥-q /q:E<ny"YmƔRoID<.?B$=* ϻ2Cc/\mlM~) ba4|{q=p CryAH=K_b* &k8`zn{x"VOӁRh$Ģat$1%.4 Y;LiMw.0̫m۶a׮]5Nch%=Yĵ단wٷwe)FV Q]m`t/XS;hijB7$\n_8p }]x?&ugo?^/٬1{>̾%Q@/*~@}1  5vI*{Bچb!'ѐP87o>sra߾}l ϶>,Lܢm<ڎxWyi-s!N-١h~䜤RW,yw~czP;S$x#R?'e!VԟpthW6tGK1L *l[a>g VXu2wRY5l^DesFNbdͷU9l$\)›M#׃yb6G0լ;Ag@%k467^j:W# rEN_a¥)r{=wf-탇R,FGuX^\? cMCIpPpX@:GZ8T lj5Jk" VS)e`25,-dk*] !rBt37;/ҌȦV_ijgg树4J(l| (,GAHsEd o&D-*&NGQGYA% }BBv )@ϱK4;9yG(D#X?okɦϑǏ=/@H~&bJfb*FL2cR@w[gw9Yި%AlM6}~$VSѲJ {bcƹ%3*{Y(6Q,ZO+ِbMsL:۸jM &lZ86'lTІIl7tLmiC3'*p]X[]7S29H%Dz֖FJQW`UOW$7"u~I? ɋ"(tB;xK "eQ ",'sȥE8Vpl̏Uh7ɴpl~ Ggu}>4p^S|"+Ov9u9n?T?3h .8Q #1?0JZA4@Ue+v ϒD:X#oC>3Yt6"rܵ,b 1U$BGfq y DedMҽ{D0>mJݴ/W5 uΏ)1'ӻ]28;8=֞6dr8y0 W/]DHS׈+sgb>y]*X>U=H F&'Srwp+Z$c86y8yb ۋ! ]< GA[&n[XBQ;7dcZXu~m81%z;q%g}"c@B[h[8"6 ~9~wWcT'ˋ]KUtl#˚Pݞ2'AD̓ x?4I$X;z[(.Z<pzعs7҉b>ϢM ijË"l|IL-YM`ˎ}8Nۍ O IFWNc=B3O=Utcaf>Zվ |]C<菄4$l;~E@!KO? N;r9ד hnbvv"QP"jN'@Ép]@Dr|Msٝ 0& jhF՞ O<<<DQH8CKGH3ԲQoۺzę# ~IEHˆhӝa Cb 68*zz{KY Mme>M#Q6Sl$EM+E87"x`$".֌J < N6M*r xBx.Zu^O"q"Nێ|0Ц;s૙5 CghFl\n6p_0XS\%e0t>Pn;$:c8q;98'0S_HQdQ XN>!M"K!=I#CgER5Y#WNNL&;Q1#nZ |A*/$nf;/ <2Gql׉dh n\ cq:C)@AlE@F,Wt*)|ԷTM4{xA~P#ڛ"ED@/EǖU/ptBI 5br),%l(X 4N# }GAW ?d#@0A> 'G89X. Wѻe $I9q=VmT,><هL*Lcz)-}]"VQ._ 2"#vQ!bSErD B&E A<ܜCL.4,L!y | ibb%嶨H&3_Jra GN ᩧk/G*)Dz;gqɓغs\Hs;L+kYA҃TF|?||Ӄl6ODG9a4vlw"f[GNa;0uv'x?C׎(Kb'c9Dۺ239؈}R7d.>xn'@ >9W1jbeaʕ+?/di?|}:798F |Kj̻47EW> ߁͏DPO G12t mC;Ǯ؃K8DHCb`6hDN5߿$+sxس[:0EH!3kt(v?&Oνێ|!9H̍"J/gvHMS=P_H a.^Ö8}k'pvh~eP<(P$pY-9̦ F{j&dKHf9QbF"N|ѢP[a⟜ ¡Cvv=ۙ1ل??U2_+Y*>Ëh k8y=?os}0=tIZND˹ĘM}047>b!pY>8P IJg>:/4F<">>_H~~sv %,I3y?쉳h‘#G A+Lq1::|199')8w VK]L 9 h,k/^&vr%6ꐹHq; jJq2LƧ@n` f4^ފN~!rNK|ml.]D0֌kXh<;z,ڷ"&ؿ I ;TN x臨5"Cm=@Sk^`dlbQZdpE~Rjԇ (fGW<š'/`]x+X:ωvjwZ/4ѫbl:-i4:<?~TN΍-QP.JF1L qWQlUR<,'ӊ:'RpćZ@Oo7+JRH;p !LsX"$H_~I%4Ⳉ4!_8!HTނ<;P&´5R;;FWv3Ae)h#꘤r"!8r8q^ZH2+s 텣44ɏoljSA+dmpnnX}FzP]-dH $~Lգ=1Z@;{s~[[EJ ê2>ϟ_rhkE,$ IJniDK}F zJ*~*dh1!Aj@5C9/qi /pl @{Ģg:DZqMV&[^]M"GA/N @efsዹe"]Ϊ }9/ ܢihB _4ɻ@}-eI"$1{OGQ#g{ST* V!]gRnX:>8eMu.EYEfi0du붒DGZ/V)Hcrq9CPCĹ" 7!6؎KksT. >:Iڀl:%2|I~G IN!uTC-@<|Vd]d|&.O:MMR|: <޲C VU?mag@.{E?; )#4כw}4L i=m:OJ|xx b|Rv*ΊN5;?NTUPH"I-;Q.FiF[a,a$9 w^+ gJAIjǪ"ީ> :G^U:::OlnQ3@ذZPI-{ Wm 1j>Nҷ˲!T0K4CxB.yLEhZ:*V^{ ڨyg0^+vSxǏٜ[ջfE٠:c>0;Bbht [4=va;q c@,qzT('q7`5j\+mC,-`Z<2¼b O;00܊Cfff;Vl}}e~K_v2qr;'i-g-d(/ՎSCR5ӯݞN1m-mzeI,հ8Jl$caOI6.-. Wٝ;e%keda]QR }ޟk[0x^ff(`4{dak>??tso6'6N۟~; PZc-;105>Q?\_$ rxsZ+JϻC+++n޽l#Yc%9w-/yac޶&/؛XmoLt-[k< .5wN]B7]sW&qg!3҂ `v!N|p}~p(swA|绿չQ_ǞB@Ίs×0F,C>W/ +s3u!jF07H _`C^ ϡhmD2$IdWWwCb@:Xhh1xi]}xh_tɅ ld&P2_ӝ{s#Ԏgput=;s?z(/b~|xD|^'_ښc]Doo@  lmôY\EWG>>ְQ߁PKO)|"^H|^Ƌ0VCbuu tc(:[w;q <ꠦK?.."_b[ގLkjBCVd3xo ?s?y.eųĻ/:KstO"%d)Zm!{PX뻂B~ VF# }\xWL{enb /K8E VӇoGsY6YCq~IwێSG&""ٕ i[b!\zFq\=Ӌ7zXXG{={e篢g7^:-/\2w: u&VquN cBCÇqxHs:z/WDyL`5pNvۮ"U3KN_Mֆ^UxÍh–.,WQ Cav!BL H_Ջڳ$ %;9HMnO,܁0=IedSqBZEmȑH ۻҌ;wF3v~+41\|H8 bQvb߁Pz׋D"Q.?${ڲRGj|5;}}8?8vcg'1=G|w gXSváܢPk @HWڻ4R90Sn5b;-Lz>;, GZ\*OЋe޽kN!ٶ6hdM75fGgIJ)JOGv8<g{g$#ˋojE!Ǟ,NOB%Ѫ"948r-HтFR@_I2$lZ'քd*HS50&h,eu>`VGjo|֌/.J=Yũca)O= D#!!@5;7FRS(WQR&M.!G>h(G͚Oē\D,a/{O$I8nV#Ig?D-8#JE[ӽ>MOKY|P*X,l<{ͣw@ğ|M\/qXžfWl:5<0ED_r $bIn#{Gc;њM6m,h=ȶK6G,np2t豨IA6p4ĩ%CF98~վcjŗɦ6b{?;l _ˣxF ÍFWgU]YS0<:f=Ѩλ"P/αϓE$ޭagGuXrǡ=#xg$tkS Dc10{e"Fzx/c!]?AC{B k(VPqy nƮĪDOS|x~"*!(9ZluuZ#Sػ{~]\wgS8 mϦ/"Rǔ\ gT:Ç))FB< ?,<緷q8b!'~#{{!i S;qJ?.9>/?vh}9LM.!#Cuy͠ /b^0"b}R9k~~lCna WH5./];y lNbb G;Mkl0sRh;&cb*P@i'D=94!{ -OI@Hbx_bm.sE:x[g+x^4ƶI4޶(&VpÏ!1?5-Cr(RS H$I!pex=(|hi^!Dwh;csM_XaN<{Nx[$Tz TV(51ӌ%U$vjw7 *p,tk/ G%smkOo7ѭՒiW񣻷>}!m۹tQc3k5M6}̰ àaJ0ecm)i=ϡ+7J;lW_#:"DFB;zS_J{Ca$5buC7ž\f.lb2=/E2=,2dlbkZqSA#`X?4(ۻ@6ٴ %Ɣln(7*I]wRgYSdM=@|aN(lɶdMw].㌃n5SqˆѢN?6cH:qXوaM6}TR1x,\Fuwp؇h)^N7\ siH([jXYDV!᪐:{Dy6fSb:-M6t{i^K(>x(zXB ]»N翌gѹ}."،G>#҉pǺ8}y _װ4d$r"pI U!H;Dfy q7|KwGz>8ݤ"D؞m8{~ 1LO^xq1۷U hG690)4[zzcnZE_ٟo5N_vY޷wW Doݓ;={=0C:HF E6.f7oPɦ70d 6~:вZ"|&r3_tOKBіImIfaᴭ'~EYDdZ_37Γ.ƒ~B/$'A,'\YS H$JqNlh+h膋xiqf C-19?m8E- j%1C_w{#1?˓y7t1t&+1. 's@)badyeĭD>d Ffl ,zjS!LO?~\Lx,g,f;ַྜྷ`xO-O_:NȠ1`0`@fsH YfM i._)Gj`?|.Yv}λމ^xɡ˘Zu}8su[UA1Ϛco {A<'Ο9Mp{3IyW&ߺ ڶu .b ݗI{'Zø⡽V[!ϗ$'%^-gc.|/47u殟Êā-8uy =!ċFpz<A&+#S/`ΝX p߃dv S.pX\c6"B PL.٫13=1"A$%\;w ^̃a`#غ{7VA>x(|_ KJ!ӧ`^7P (2˳BK36Iu:DY-0PrĬ`hu}&PyAtFtqYaۖ ]9E6I.a&A5vX?ݭ͛ڑ٤dҙwF-r|[ibq)L`뎝8{ex4^7pz)$uhkA37`xr4 +ށ~'1Ɔ`7$cu4F t"u?c!Z<8۶P[Z!Zo߱`zU1IY(DwEr4 I*Wޥiֽ$I}a!Y x'zdccc8)Nt;dk{\Olel$&9JQovh|;F5rC'ub]SDʶ#M$ȾFC;0{a>`clFs-mW7Oa[Z m`eVQLhi3 ȧec>ov'{Ȯ\#B3@(((ٲ[מofqüLx{}Ǻ-٣L쌎9P@ Ùf'6Y gk;551h?֖}]$4MXd*].'3i7b:b,_ mwi!i2ٻf{+?r8X\\D*RQo=3) 2ۥ3;V ]зo/3"H7U_)>I(fQSS.>YYdyD"?~!|Nk x\dyH1$ؕ'OhdhWTqg(9K\Ec4U'd .R+U0}pNV[rfJ\9t- 'TzEYdy@o8*:F^<d͸Vr)7FFZת059LѸShnOG.{Da⮇+vpw=8;:0@:@B%P B[O,<CRÏPY]t\l{GPzMXbzr092РB&H4>|JTbf JFyhvk1~,,o@4$ tpofQjae=Ɓ%suu^%TTUaq?32b7mK;Z" [z i$Q^F88%&o .zoN -6ܺl `*P 5>͜LZ\kH5 hƵ P0P `vj  %3F?R¢Qda^7Z`S41- S2< E,,_J)W…ɅíU ׍pH@c MՕS"f˖fR fxfRZU&jrJ^FI鶲L$,0mŽwSD-caH2jE-,0O&M|@_HI"W`$ؔ/#q6$,`"Y$Џc2EEeW斕EjT|2V"fs-rl2weKdۏ}p-b:w 5!S D7&]Ko2" ^i2Gg0<ԏoB$Nn ?s:5\8$*QJdBKSQPj8F`nݼNzDDqJ%xX?0fI$H$e3X"Ħ!X,ʏI2ӋiĒYnw-^["Ck0Z\E",N+jO0Ls p<?? Hb|F[ [_bJMGy۳"D""z{i f Drz&h:,H+9#~/IǑgD 9=%iGKYdy F( 6S/7< `%M/27pqX^A Ê *y =C=WR07܃ͬ ˳Xۈ ´*%>Iy@Fhqy=~85HI'),rL.GKgFfp1q́:#8q(U4G(ND4af6w+bfL xIAe,ś?BruQTsچz"@Y̝U\Dڇ!vڗa^*sS w>H 5Ms*jn~WT۔UZAIWs`8 D{M3P*655Td2#JY`hajwݩ`{nH89Sv~o/y~KP;Jv"C*O c+ad+0Ҥ~XdEYb~M(%<,<$cv/r/\$onwVTqቀ%-E">lnEd!cbshtz,fPh|>IS3&@x5 @#o^R4w=#sQ"]!Je`m ~ Zuf;8B NP$WSHc(P/Z$EY`h"t㣋x[[0~L* L/c_g"+[^F*\^?lF5Y& ZX`(h=&uC  n`Wz/aK~%)jܹs\{9,< Pm.,lbi1|V'fABz*|rZ?W:q59zKWb347:\HgHć;750ZvH哘h/6bib^<(HԘt=)rdEGP} MEx #]C-tqy*Cќv gsVDn~+E<|FJHp*.3rY6"]$"DN ONJ/(TjbmGޠ^rj:,0pڭ9DEJgk 6c1NMಾiv)A P\WTH3b9A<1Y!%m׎z-@FL4{uz(}_r8v GѢ˰JĠTE%nד^Uc1V(,m`a1j?e bGȧ nd6j1m9Ii^w3+y4|eN˧b G@007=t8s&+胧8쥥8{vh%hK`S;2_{ Tz uM6WPeXO(d08Cvڐ4h'q^R`ns#m=:fggf;$pэӽxcE6p0=҃C hig)Od@V 2n ŕM^op|iZ:7‹sp γ.D6Q]W!+XXGk}%l=j}|*P0aE:*1TnTcf! ۂ tlf0pj *R@ g?~]| | >Tjbw:W#q:4#0:ʼn2z FzY׉㝍0e ů0:9s4ؓb-kFCydFWXpCmsNƕ˗`pV4Q Ϣ_p/ ObZъALv FGCs+̦P3o>+cjQ0W!\qI W Ja6ŷJj6QfnbIAFss="+Ad6,Ncjfrz{1X}ѣ3s"hxR$X Hc5b< j몠91-ͯmdEs(Ƨ0>ztH[874fik,LN7Fn]ی7d?޻0jf٠Qect%*\~ eZpb76X;T+&'F1We5..8^2>En*d ITz3V2 Q ucSw Ld+A[GRA,qQ6G-Vx.g ~0z[Qm0ՠCEu-|XZS ,PZ]ȶ=iM& \~<.R%DA&?V6sbpl Z3qi~qpׅ:ֈ4kK,c& yh_uVD2/:4ajj]#L4l75 !d^4vق,~T69sBo0kXcBg` Diodcs}Ck!eh*ǯ>pL+Ȗ0J#Si!秦P*j(ۏJYL*uyV'HtP?yPy7N^c־rԩ&_5]3{"q& Bvw !L+ 8XQ&6i =őmlrmȸH]4,{ f7eUﭽp%fJOBLwulr 1 Tj4@O}J* WtcWz<4 tf D}CW^LR,}11h fTJFWW`;G+LF~5q& *%z#._GD>1ޫ[*}X[f*;VWW4;5aĤUha5ijeB|!N-9AHx憬|Kvjjcz-@""Y 5C@} lemhh %7Ю ;Ѱ^>V@$˿*ZW#guOG&SIE苃BcCG;,o+ B~t-z-b"ώ'0|.ұTo;xh]PŽգwp 2մ 6 WᬨE")*pe/8[`( ,hr? 9@dm(/!4k<8sU^&Fxȼٔ%f5Jo 2 tcl1s:b% Ռa$RYֲ.t_Dme9nAfo",_%) &;RzPcL7\nljJK(eQ>bR*BT ~Tx]5xwb*ɀ F,%lA88Kʍ/vyk1(Jdx?뷿ۻXhnYd.IEoK /J㸭@.MaEBLw:ܿcڶ/@W:F|D[:?{'d"۷?bmw jdސ꟯>0ƎLsK뉚,O`sv޶XrpxQm'i3+c)WQ~l2Lpg[ |#'ejxR&T^*H/nO ďU8XP"d3͓]TbDL=άtc$% >a紜lrH%wR8#UDUkJf-Q(~N4)sΝ匁7ҽmx_o=Ų-bbxGĎGI7l2}QL|\AdCͥ`javch$V93mD<рk fUZ{=؄T2O "o16cRH3WQPd2OE梿EzؔS\?ę݈&Ԕ&R>ETUcxhJMuZOڮc {1D!sBmsaVNuA0,㽏ϣ%|߄Q-p*a(MNTyD!HPq$)Du Rsz/ h%$6p(^~9iN!i@hTW*,o1CZ=3E~e$SqAm" A9k+KXPW\&}o lN.\^xa°'b$#r-ZK+pу}e|>J'SXZ,HsDo RYVx +?!4L(w&S d[|` 9|ߡ#S:^A32z R2 %B_( 62tXGaBOY\e fX6dǫrdf\8kyU^ml gΞCW\\f4`}iTFSN6'F8M4z162&vV3Xو;o1\1WM^;!4*4uC*u(S˫ DV`;V1{j8)'"QTUUE>K0H)`|C~gn3fG&ljj Zyl*"Մ 0_Mv:xɅ@\ :k F`ԡb'lC4J<{Dո C%lHSjEp)Ɇ@ހMz )n)mn(2CL>$S̚ToDĻK*77?3YK0:3j$xzPDo؍f,؉gpiiܸqQhֶ!6y(sqF5VQg•3ֲ/EccΟ]\zg^YRy&3b^DZJ!-M `_-G݌\N/cqbve Sbs܇ #hwţ$2Ӿ\̦6 S!&Uk@+ ,r(= DR匉MGgi^A_CmQ7b׫/mlӱTP=} o~-FP Pe } LQJh ZRX؀ADUd~8 D1ki^dsj. U(NZ@jUIeth0>V738ppsd'{K㷰-bp./Ocr87j }AFna5@{S _ð) -4 c`/-éS@''c}(Qϣgh 'V 2` ϰ88V o)iv^q`)`48ҷXiZ/ơ4x? s>^k G`+oFˆp5@T~=FDnbynmݺp 3y(vLMᰙp:8V\뾀rOF-zPџO LɣQ`4PSCj J p:Eaf.kQ1cG`Lb!Bz8{8V&WFdR9lN3BK똘 7LJQUcZjbfZK:F'122C'Ovb=kfd9r@J׀a-o˳PXK3@'(/s ")ހ3:A658؟Dٵ `IPȬ** L#eHZy&*v(Yb%x`ׁü\HL{sN|M]8vRlV/n}.Țӣlj%FIu%qJ֦ٱR+[BQ!l?'S0渣4 NJwV 9JW*x+O'gN6}dtb4-EJ?9)OjZGފi;% >|䤕xfkPtn.+aLEJF紃D`(@A;GW(pJvWITnnW%XKW}(K3uwdyB4n$ i.D"r5k0::ٹ 8QQslI%e_'*`llؖ;",mBds*y4n3/W:D$aM!3`{-bu|Y4y "V3MLBa.f?~ *(pu9Ai]}>‰;R t."rpl@vu_8DAϋ7ΝA˾0X2{epx@cnb^{ģP #&E<|3{w!d367xk>lT7_XDN!Ԁx" ʹo89("Js"^!wSOϘZ[Lonhƍ^Է\\hCu9Oy%tz^p"a .~|N/=Ӊ$--l2p9r-|ݡ͐xX[_A08X,16_[CQDꗘbC̀?(nFs?FakPX7[]UkL/8~xMbJDFc)fû3'*-X[ `IP(ylLo?WXB&cwP5Nbj&'_*6یc3M8o.snU``jOj}6Bɀhe5(*f-byJFE:=&&f}!0=ބkOaie>(Awy$Q+jcpheL&RQ2c^ ^<ځNc6B,>y=Pju8t9MZ8p3pĎ}=2ܸt=ó dj?[fa!ۋəX> 6*ߏoI iXѣG{lk$9WZBKwPu("d dr- ݼ3b_GCWQ7`_k0 ;u% K-M~VJJqZGˡVlxPUf>Buzz 흰旱Gǁ"Q_&]~nzU?fWF8ǾjDuI\䃎i: t-J,nP|"HGHcxp6G қ`̌jWhq+K+P)(P_^L37a!aݙv*Txijx1m0+}lE")"s =jj+x5/AДi@J}E--6)PvH.fyPbR#-VւjL>\bt] ֎hoZ fG`z 0}uwTz;јS%]5::3 tlab~IZ7'^ۈa g1ͤdoM5dFv#3@0pjoA(CcLp:13`srojJkÉm<{WB2/ lE*0T཮/a1;DyV7&^fV94׻cڙigM?sdylR41Q2/^|if9QMTQb?LI *֎ kYA"DI>P(bB^o%TJiVnQۏq5t6'[3Gy~~v5(d/q򂗂Pqgv[2#P{sb#>5/B*r,X&-nii5"'-,D%0V@r˯+:n󼎒#K&"+9Nܹ+}Ϋ(arrAYt?ߑ8xrjX|Syё΢mγ9tIWVd)vw /7Q9ө=v9QJ-ܹ-/r>$9&G!0#\ ev;[$ʶ桨(w63A2}Hryw"xMyH?sݗoqrBr׻xgMTzqeIsm{2[>w1dw@:{DZBYآqEAرC{0IXг*L~w=f2OhITX{Yn"œɁv3ȩ|Afw 0`(Q`d: 5 D!*Y_z Hłd;NT,#|ɩt:9*T]z/s֭H]a<"!8 *%EJsEǷr+VmUkIз/FHċlyG8Op/} )_8v!#=ӼX;>3c׽=H{\sP NszY9**[x,I K89T- ?&g / OǦɮD2&v64#dnz<;aJ|5AooT;esݽOhZ!b)2DM"$chl;9Ey[)ehszJQfoi5;~LlB7n%dzbvL *I]% ̬TvVKlXT6+>2)d6Qؽg13(/+cǦsliU$kE"gC䵭 Mb4grQq6:^:I`r 8^c:,)kf RMk/EOo^q,?ۼZ@,BmAVݲ@Fcb(FF#i(E$YӤF׼AcD5އ7DuFTTJuttf w8u?_ޮ Zyܸ5a" DridK\?$(nMBK'ڀ".\W Z#ЎtB??`lvɼR>z87"^vN*>< pK|N?} |C cbc ?B0k|z0O FG.#xs7Geo} nNPS-BhQ=<0N/xt7BkJP["~=n}Y,.-~ NN܇bi3ښj \?\.簲8[7<~l ??cݯVC>Wn`M|'XM+ w',69aפ+:JJw\B׏ LB]HԧQĵw\ k19pQr XcY{N<Fϋ;Z~sX?sُ1 <;ݟ> X}x_-f0ˮ@oK0*"l1K Á5xj6wT|F:9My+Z}g0yWQf~OOORYUoլ26rjBl]Ʉ( 04Ջ~ .!ԡĵĖ1W{xydMt .v_2h -pٌ[@J,qU\V dXتaZRFFيFk[3~&jZpobwl?azC%k)tIFAH$8 *kk1w/`%d@}k&Fw3 \c3APW+ f'101 ɍ0Le>C3BgC{96w]~,Ni ɓ'Td 5^qw CÇtP8Wut7"+בfp?N"0@,#!0|& 0akx;/3 Hhn3S1:r}<3S* k*1=r c3Ȱv,hg=>xZ `Jl]tiiy,WڅO*݌ӂ~ N8)t! ;ׯ OEm+ôtNV֧$W0>ׄ;wcK#_Res٘[d&S pF -f&K(J nr9,qٗыV6Q x6B7GEeL똛_Z e|>Jيh1`bupp_۬D &r&{ q68Z LXOčBlij/9C`Cᯪbw2$af…23Jp! Pjixc Ip%V&k5xd?&Fc&G)uM}O@y *= 57^ze$,aymqDY<?Ď,u^z ʜ IL1>t)x2*AU#r=65˒rXǵoώ̏rW R UdZ6ѯ5U8"Eǚ]6 0!}C88ьrDSa}(adっ'8R댘VÝFSK c=6v%W]E ]u _ A@8̎RW35074'/Gf\(2k}Hg9ՠ~0>QyH^)_EOA@1\ չoh+"uL$<WIKvguu5[7BbUŔr^톷i? u{;9?˵c&L&q[ ^UEM.w"9wXg1j *"wދU-UvO`D.v=_zt]cG&XWW)l?vŐHۼG֢}j \&R\Ur'0*^(w;4Qp~RF<3{|Yd7}&/cI r$,|Il :"T;V')Ĭb^`^,֐ZMjU;D1ɳGI.F%fͦ$M HA+/E_R|T`8\cS#&Fohu`4;gBp*6 +!mPX Ps䑵zUxbjk9J s0r &}0QQ_SW؀(N7*ʝ`J(ȢQQUu;Ki|.;fyYkS=s<6iA'+1a_k08<0)3XH_ib2_^.1ZOC5`&v7jH#̭﯂^tYḼ`_gL:5c &:E2QYQf.xq<B[be+i=^c||e-C K(=ס(kj8~~r Ut~N}x >sPbq%77"ge3!+bGlr]lz+1 EmeMN[/oS[ӯ5M-G7\齆cj9W\UGwLv8m/ 7`tG2kxë˟|/J`|9~PW/@geG>|G 0]xV%VQx-.!1A$]Uo0_70>6 =w0zn@I sFⰕ:0;;ˀR0!wXĄGr*EMJ7P &2JC0[AR)+l۽Ʃ6/TL [dZOYՍPCߩEg"Qxcr"(xI,:sR&(Ԫҳǣsϴ,E1M"'QKCyq0_"5 ɊowJ$$gKt0kV5wۮwdG8t>) |۞%z+:poǦЮ r:EǝwG;;wn8a_!AN^YL}[5Ұ2oS\d'," 0" 0_-yiwKxS.֞ϳrɓ& sWx[{eElq#"NeO: aw[-P ]ʤ\m~]r,SiVb!erP6M"N Eti jRu*R'y mmKX[",2L۪$6m;/! Phg)EN4᥶`lvXIk[އ"NA S_PDYdRm|`cuk^/L-&Gu95^"Pppx &O&⤅Z1yep"tM|O\i1_i`my3uڰ@sK\OhXBѠ"#H4C c lPLHF#pUrf\^tDz>?W}+10]TV;kZ 0hE-G<23][kie})`BJxqP6Rj4N׾}6NC)}7gKۺ<x (.")ڬDQI&թItMMtUU]L3I҉c;c;#y6jNq'AÛ{.@d9-A=gQ0ोg1.&Chm(dx Ii2߼ B{f`+06JnfdÓXB+Y;[0d/}!/OT7 ͂cVcdlM xWl'80JZrڠd\bZ߄d3fVIJX{l3,`11:6 `dGa,rbzlQ E&mŰ-YK|cTAx _{h:DU]S콍A_2/oޅ ^jLJ%G]zOB~7n S3px/nhq х447OԒ`?E TGw.A[oä`({7?YΌ]i猢E"!DM3Qhiq^ CKpBR~s،l'7W`),,c&k]eW j0;5 OEtvU~wjb3XFu5(r@oS?z \(j hLrg |ỲNE|M>g^Mr FC]]W 3m,aGx]UA x22E6 yl//7]r!L`ff 'p&A$i)P|Z؊;ɪbDX*|ȟFًpH;zϏ299$3Њp}׊ 94dq>TdK?D@+9KlQZOXH',{<*Eqb_\ 6 D4z_4?;%Eybd/YnpI8*}&"|}SD"HX} |SJ>>GI?#q(66(//0si4$ eNϴnN "yM8'm_p_u+ߤX46XI'O:a^%c ߵ4>k4k-:%=bjy &"}RYY)$T(ۤvԣ]zO9߿fɠ;Qobδ4XA$z,/χ0|h(qAnL;R1Oaa 7?鎩Iiw%\T> b)|9B"7^9˗ܖVKۍ$Jb> /q 5dd0)d(//PW &8s ; `D$hs2͖Fvo`so{g;oݻ:MvrMg{sY{YO9:mԢq%f2T&[,H )&#Q^jIrWE!CD `ŕN ڹs.Cv]ԻcBH:S]{&"VW\ۻݛkj#S.\Ay; +]d`"LAA $l$t )G)xB\jqΤeY &q mNy{gOlhGЏ~?nr.z,͵vc8u}%p`08QI!x$I&+nqq尙˟]I9:ꓑdk6%b4٬qސd0 vS)p8 "7x<炦PҼ9ov D/Q5.}>9 `:!h$d,fR_Ql6[Sߡb-des`LNExt*8M)%]Atұ_@;Dk)aŘ^BddHIQ^'K%''x$x;}nuCkiN53NʼnL7J&%%H&KH^I ,R,mN㌍-D8O¨KcLϨԨ|O (g"5ّ\n7#gN>QMyqgW"!gY}цbj_M[i75)PexHLyi[MJ6 -r`E6>VXx +AD]Vr:05>WE:+*pO<(6`C^d[g[ufVm И e?nƥW e^s:?"i7@hcN-Las`?57Ջ\ծ" Wx{YG1>3'(!{=c8~q 1 aZ3/PQɗ3ͅY-Ng8vw֣4u 6˼_ý;=WV tO!^? pTK}BԩSOa0;LyC)-<>d{ˏw;z`-(EG [g*ܜ8;19}38hkoq.{!*q!0 [Q%Ch}[Qϡoj w?Ûxن"<4vIE_ꛍ(4ch<@)05m0q [ auM6|(Xc"533F/.9L|Q[LAK9VBW|nj8ց v-E..au*AbQ/И_`b;H:iA=`I'֝n64CWNa-CD!3_GstK[hjiGE؈?q |v !|Z2z`/O!'cոx%1>@uuNa`x %q ɥ)\5􍠌pT[F8';S) ptPZZNbxd ߾z }HgOa3T'*fF>} %C΀᭬%ֆj,9;8y\*Y~0׾ўG0:`L]ȯ7˓qu4_[yJE?$NK ׯW:D@%`!\z50ۍ(Ы23Zk`SNa6J)R}R"A4jkmó<& \[eaaA.GYe ܎B,Madz ^O1W68hIŹȵ 3 DDEPrxgt/" ]4Ŕzz/(Bpm޺8DT@U6.=MNLpʼn8Ex 1 }Xǩ3a1PL-gEDkGhj?CQ̜w~8bjgЊy뭷tL MgWtM;\>g3rșƀƒ$l$pOEV^O!*[۟&J:u{f0b2ۑ$F ЍΗ2APq49,AܾI(TKF5d%Fg4A~TiP1`4iuȪn|.tu^TSUhyzIJS' pL4&)>Y._GkN[ԓ@:c.&ӖMzX*}?;62.q-e7ȥNvƭ!| va.JBEvn<*QKmfIΖxm?fd;Q,cX0R3ס>dԾ&OJ=.Q`&^{;sTLY LKF9Gz4]I-_$&qȎ"Qd'f`RL:ŋ]2֝b@vߩlma7vHhr>XOÎr}]ALL.,]9l:k&1ԣ\Vql:nf\ʦdzbP3f$HN(Nuŏ xr3PLoTp- \ GƘ_W!!NmD3QdxUUq'IC]S@ye5L|i>)-]bT/Dq )b"4LDIypkAee%b,:Є )M$Q{MEg,yw`H{.Ly҃[֊ũ1HE665&7o&!XL(Ns%&Z WyjjQj>Zjݸ3W)[ɇ15J0;\X_ȎS_`M1y 3 󳳸n&,9Hp1=>&L j˧k~>*\V.)"wn;8~u}y$t!,ъeT0>}mp¯_zg{8B\@NJAN85M-akɏ\Xs@/vz5pPnWewB  C0o;pEUWxw='}8_C ⣞eO^$t`t`u< :<Bׄ?|q[\VcyuM ?/[r1L- *on8_:??apȏ׿‡wh\R[Л؈G3:r'qsV׾w #} | |Xc_7,.UDVx\YjTɓYS0-$C))=]SrOʋyj+JK<Xe9gsM*w(f%EޘS4KlZ5e)uJA;_̌ (zK(%fD ;%k4ǚ2LVP E o1ƔeauSqzOJ3"].ʛI9}\wXF*dR(~ڊәd&kA>yt)ԗuTniocYTchP.p-J$H6RS啭bfac|lѫ7+;N٦ȓ-rg?S25DY\ )mȕ37KrqMU˛JqQ2=: OJkgW^U̒^f<2:KrSc"ώu+!ャ44m\).\ϴ6}W^S&`8(OOzAgP**kɒNVlNRZlS< EuV=#((άp5*ݺRv[e?k1ÚVԿ}=eϙԶȻ1/R*uׯ_, EdΟ~6mW HVq5%G]j,L0Tha=UJ''(.btb-EA6t(dừkq)tJAV[W9N30R[&TEaaCъ*Lγӧ8?Bf!dK#[O`p̯6aD]e)zGAI uL/G׎J}èkh$j%rt{+&jQoi14BDf61 h/GݻV^1՘֓ PQ[ƦXUyu>:5C`)eMg`b/Z#4?Qc3OdjQxJv-}gL6lr9&{wH9 EQY#@Q%X.&%Fm~m4%SAE?`4+:?#4yL&Ss-E25I3%!)&+*3BҨ/Ñ(mh<Pk snBא#!q-9PTgTV=L@4:-E3p&SΨdM%MRM50C d> L#ID#n=Og3R\XҨB+ GgbpG3یgruzFLkPJ\e2K9o\6\F6s\urO.t$g+W>OK7߄t1۷>5Jn4).c5x2_{8gv  D8-4Ȓ`KzGqhDK:%?'~&O}CUCqr1m0W޼1ű0 np^A1MY-q:it-D}D]%?CD0>L:QK^+Rt:%e'8d ߨi)1$cc|pkʺwXb='dKm331 w:Bv_[mLb?v1ۿ#C)`Hi6_IENDB`dispcalGUI-1.7.1.6/theme/icon-reflection.png000644 000765 000000 00000034336 12025152300 020505 0ustar00svpwheel000000 000000 PNG  IHDRjstEXtSoftwareAdobe ImageReadyqe<8IDATxڼ} yskF3 I6 skc8β>ްNL `Y07t HsyW~]]]yyDħidكD" ]0mɧ?isRqjCmz@hGr&Vznm{[) ǹ7oƕ r{A?kvì۹wWM?W(|ON;RY#8@2؏YFo>: rI\Ʉl*q|0w ^g?}yqOpa<4uuXw: 3^.uû1n3_74mL1K%&\~| d[ۙ+tQȨPU=%ݣ<.$ ͙u W)ϗۉsC@nud3;wݫ"@şѓwQ,\<|l}tOn|+:FỜPT.m /}b:HXUw7nco!;0l4v@3L"\4qgQ3G'Ra+g,.rz71Y6]bCMj\܉ߝxόztM;+'K[T^t-s%)<2SA#< ^I}'G]aT*`k~z 6Qx?HS6eR1JWssߝX`{ +8oRǢ)]@I0_/Wٜnw Iyh69h<. `\ʧkg݂&KEr.Ym!=~Ƀ0ôLK6%ϙ)?O*&.8g?`aFŹS8?6<) 8gXdL, k? j4 ,FKCߴk>cҘf|әQIPӶM]:'Oq!;{-Wχ"TW|ͽ` Q^JFr}jմiْcDdJyON "8z 8MjF0q3N(ʧ#U6 b7 Nk2@N8VAG.Rev,$n&7AM1 \,9ҕ~;4d 9aEEHiG㟽T;LCv9Ш$j('MD4ۖT64&`epe@f[|t=G6eצj Ia-!C6X =|1D)™A+ tXJt-^J2-!è/݁LXt4K,X&G*Q*ԃիîMk|_ʺڛY@1\\s,Dx&$KKg}P4#8~#zX^yy,fHWҏ, Of en *f{ 1L39*n <~k#Ϲ3?秶U+;Dႝ=kd(IdM8ІZYA.7v|!S9zTE ]㖥fK!.'=N ɑZq!?Qv<9dh pO-LX:";)Rhq`C(Tԕlն5+YJ?{]bk2ofoCi>I58&}%A Crkf&n}8CaOq3iܱӗ`ːy,` #߲"([j%ZLけ(F4xW >x}{5L%bFH偎rD5SiFoJGOKwْ՞ЂCW;o+ + v#F.x`g5z_?{W`}J\Gû]@&9qzD܋ÏO2ۅ!~ܼEd2K?&&%7gm7SD:RT/݆ړaf!_M2I/ƪfaα=Q^:wSV6ZX4uq Z:iGqtVz8@LoNb qdp)W8o*w! gQ2I\:z8荊2͘h?}ΑJu +Wű v#HB&nOz7rqto2SiTn)I1utCȴ*Q|,N XܕQ FM8YaLalǧ+8 RE$)=c p}/eAL΢O8}GϣPѲ ^)781y#iD+"a[DFxM JR>9[p_ҵ1 -Tc1ڟ:+ߙ΃-Ah'0W6ڴ$ƞ fѸgF`ds 逅%m7q+\1/{q8L*D@ȃ<:lmHR=t,ڊls 6^;%ߎI gPI7˨^)q,\I7ޮq EaﰱP~)Qb/O9u M=8t Juݑ28my2~J[&J Y ĵ~4|~:xU$R$xR`EExpK#-0HQ-Oe6n0.RDdkE!FYB޾ж4KbcǶVO'Ҡ)tB:lU# 3;] Ԙ@v3 [$Χ}#fC,^(V `aRh?eLfyІZr$傥2:%rZNk<(#bkt6ݕ]_]ҏ(V!%Ǜ:֦ T4@bCq}}I=,  ߵ@(oJ^\7@nhKǧ߀ cP[?#BuB;0cu 0r 쭨߼LνiTm6kWF1|#%6rza"ixJK%l0! q~MӆL/ Pօe]' >רGθgvҝY%e+i9| " EK&I 6^m} IBSW;HRLd֧ w)$,^后-´;WkKN:?q>DRgΥˉH)-;9O~cћ j{Cbw?hlE{H?zU2ޝuձp}ln欝Q*%V ;9`%9$Ȱw6ﳀ4p55}rigTWQ-#AH@@Hx/_΅Y_آ$ed[;h2poѽQX ǹ_QUd2jU n&)GR5vMG~ [B?B ZNAF8<*R`>*\-܉1'hX_ n N \h"&g0] GE*삾:@ܽ鷘ҵ܆y "\W Z#%FȮfLKM=R)GH-ıMG`s)ƼTDOT SB#MHq&h>melnnG-9E!!wxqC#y ɇZb4Y`va5ޫt(zZK%ԼԿw""u4cͪE8ըE¼ym6gJ-b$oAD[+JWT#XmLQ✛\в'͡ξp:^&)ɰu|w6TH6;1u 9&½jVEDJ ?Q!H.Ro^X,F?F\r\~4Y9T]^z{͋5Q{@9<S蝱H@B_+F?~ 0P{!nm[%ML7z7 h0MMM:aw1oܼlr 'yrܺuҲo4/Z$\ǷtDqv0PƒjLIcΉhyVQׇzYGidsm]Chnl{1 $a ܋eʐv~nvKd~TqQƣ وd9* Ubqh ,3cҧpyRvܭ1vBkNfJ^+Kȡ17lЁ$y $%QD7p:|-h=(;.v$g[St'F(QiZ2F=r>l4M2]bsg 4 uuZ*%v6R^u5oWui)~Kgg hjlCT.\W-@ 3E3M Q$V}$tw.9$I C] 1ۈbs;1t.K*5ڗ'Ⳕj1L]V~S/ _BD1],x? J!$$:v?4O`o^t4D/5|;Kb151:9Htebs=4@{Q*Ek0O=b@p[FR*Ko-mbq9v?}3|_DU5;/ .[qn'" ibsf%fusHClej ^ERpHr! G4bc v:Dw&zw-ANjA~q]غI5=pBع^ZDsk̓vbJ=bZO笧G택ZfZylb])1"[~fBw>#&CEhl[DbK FJED$wu?ENSKE^vޚE1cSvn}q-E͘I#i2m[6ǴXN9RNJ)>F Y=6AaX##udžr$$[td5:N})9Y}zt1t, "NR? ʍxSMzG <i15V[9xvl|A"Z$qD'9"X^DwJ+pNvp v]YŖX?ugN~;w+/}?}Y8a;Dsga4tN)Y")( .*ckQl8* \g9B9M]#HexRjDPQV'i;&|{^^y#z׾}'N2_lgIktiIyo8%>p\&(Ώ%0ǻJcK վ1wѶuחO ǁϑ>]$ݕbӤB1<6rUZx|RTL,wX9X@T[U_?jM>!?B&: Ҿwo7#IEOʅ#$&*X"Q'؏Pew*Gyr[z6 [#hHĵ{9&tb_mDpsKNRTGˇ"LP_]g ROv)X-k> 6y7_qqoXcٍ8hVVuq›i?.re+_t_•fʯg65R"N4,5D}Gv~~zןcfٜy#|*˔$YE׮]qªrI#>v{9|xhZK ^"PZG6ÅbfB^vɹ5Ytxp1987h^g2Su~ "ghO9ukř 1K(]O˿.rw{FXmNߛ?1sE(eD A{ƲvS4Kշbi"A7$$O": A&[ZGjMYeg}FԸHZ٫8%Ek32KolkS `2VN 1 '<8F)3n)NmEaĜȷSZ}ۜ0輢*W9Wjyxh j5#JuU_-FyєP#|U'#LМSqVjeL*e$Y!kt!LZtD_Iv_iE?A1NYP|d4c#+ 9`A"bИгUZ>EW؀WI 4#pQiuΚY@oVJ\NBS:CU-NfYA' W%Lt r{7)ʈHDWFW /١P0Ednj0b6ӲBzz:NYEL2:v,E$5FIZBUp1sYK%VbLc,B5DoGB\t/>=plWT>UWG3c^^6Qhj4s;L+Tci}C%˫쑨GU E.ɫ9(2t~A{֤GqY_;sjV߱4֧,[v`&ӊIv>TNKI1b!smuπ00S̠e!Oٝ}+ՔѲOʀ,z1aFZ&*Fx,Ay*Qv/֚P+h)VqQ%ҪQqM$w쌶Os|LOI/# &C\pR>VPQ0*kݔ@ YΫff )^u':>dHQHH-M*Y"+Yh=rHq|L2F.?# zGtxEnhe[{[+/5@!CxHy<ӃW#\.q\_.s0 BĝZCUOo; Yˀ",Xe2BкPk:fdKTLM.φY[(Sִl 8'#"Y|KT^(% v!ONEf%)5J?)PuY,ډQj1~@Mo0oF ,Mse9O+C>Hb<\tK]}RGYw!gQPRbI`:v# O%7ۻI*]+#!qAUJ~c}*lōXqƶ+۬S>_?N*Dn5W@Q>_2SW<{œ9:fM=3Yi_.eVeհK9KDfe-P=DA0|#L@tG Fv=OIJ0tb7fVBC&tl7- "ލ1%ƦC[t麦6V$%VM$`,Ibs:;mLل.OfVyv3X:jԉpU,z-tV<`ӋӍ T0G( ]ҳMiʉrBQ=jklk|3M5 N4ѲLE{ _]BRb0fHiX_}]yQf!0>vH6+Pc6Mh??o5׿bsv8^:8ϖ].:yc3-u,*cى:z"J:^FԶ4+5bt*=YQᤁ N,h 6$ L2a`&bszzv:T!j"˻0ciuxAt d},teb꼚t h=#p}^֑]qEo|zv)T29!^(H<>3ȋS r n / ]sfYsc0HueADjuV?GFՒ[$Bt=aLJĺI>k+mv9^("u7 Ό7ĒF2]:m_{HaXH}n=33{)a\.䍚4꾥L}f2/ T/IQ܁9_.X󤅓;~fh;Ofw!/MlM4Tdm1#!ElO(@B3K.Ǥ#c̣mb@@H\m–UU'W|)cM#bqv҂ A Q-=  iEcW_0q8|DO?Z0PJ95L Y[,\"Ņ10ǞBh}",&KB@0yt.3##չ=1n"3& %HYbk5:b Y)ε zA%Yʘ9M7 zYݛ/^!էح%9?C&UȘд\#h j1֩U0e=FhoߑS+ʣjByV^+e]~%FXm 61s~(\:;>Kh,o]|t` |áB%ߔxYF,6gc#j{rAL[D9>2<:9&ۤQmYziըOA`FÉ({W=v_kˀ? G8<h{ u^  V Lv~1\c7Gw۴.q" HZM^kA{B+!r>kN|?"g.۫Wsࣜ<2ȎoFUCOMEx݇&mz#[^ȗ. ϢPIa Z5ۢg %Jϔ\B (f֧4yJ2)%Sjr:^Nԧ.!~PN|5Sx"Ch),QF v7.tGJe %ajyaRwa{IqKD"}i&d{tg;$5;_ojSܷާF4BPaF:7UfH 8.9{z?"{%xۼma"*W|miLIENDB`dispcalGUI-1.7.1.6/theme/icons/000755 000765 000000 00000000000 12266723171 016042 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/theme/jquery.js000644 000765 000000 00000755721 12025152300 016604 0ustar00svpwheel000000 000000 /*! * jQuery JavaScript Library v1.7.2 * http://jquery.com/ * * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Wed Mar 21 12:46:34 2012 -0700 */ (function( window, undefined ) { // Use the correct document accordingly with window argument (sandbox) var document = window.document, navigator = window.navigator, location = window.location; var jQuery = (function() { // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }, // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, // A central reference to the root jQuery(document) rootjQuery, // A simple way to check for HTML strings or ID strings // Prioritize #id over to avoid XSS via location.hash (#9521) quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, // Used for trimming whitespace trimLeft = /^\s+/, trimRight = /\s+$/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, // JSON RegExp rvalidchars = /^[\],:{}\s]*$/, rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, // Useragent RegExp rwebkit = /(webkit)[ \/]([\w.]+)/, ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, rmsie = /(msie) ([\w.]+)/, rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, // Matches dashed string for camelizing rdashAlpha = /-([a-z]|[0-9])/ig, rmsPrefix = /^-ms-/, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return ( letter + "" ).toUpperCase(); }, // Keep a UserAgent string for use with jQuery.browser userAgent = navigator.userAgent, // For matching the engine and version of the browser browserMatch, // The deferred used on DOM ready readyList, // The ready event handler DOMContentLoaded, // Save a reference to some core methods toString = Object.prototype.toString, hasOwn = Object.prototype.hasOwnProperty, push = Array.prototype.push, slice = Array.prototype.slice, trim = String.prototype.trim, indexOf = Array.prototype.indexOf, // [[Class]] -> type pairs class2type = {}; jQuery.fn = jQuery.prototype = { constructor: jQuery, init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(""), $(null), or $(undefined) if ( !selector ) { return this; } // Handle $(DOMElement) if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; } // The body element only exists once, optimize finding it if ( selector === "body" && !context && document.body ) { this.context = document; this[0] = document.body; this.selector = selector; this.length = 1; return this; } // Handle HTML strings if ( typeof selector === "string" ) { // Are we dealing with HTML string or an ID? if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = quickExpr.exec( selector ); } // Verify a match, and that no context was specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; doc = ( context ? context.ownerDocument || context : document ); // If a single string is passed in and it's a single tag // just do a createElement and skip the rest ret = rsingleTag.exec( selector ); if ( ret ) { if ( jQuery.isPlainObject( context ) ) { selector = [ document.createElement( ret[1] ) ]; jQuery.fn.attr.call( selector, context, true ); } else { selector = [ doc.createElement( ret[1] ) ]; } } else { ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; } return jQuery.merge( this, selector ); // HANDLE: $("#id") } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }, // Start with an empty selector selector: "", // The current version of jQuery being used jquery: "1.7.2", // The default length of a jQuery object is 0 length: 0, // The number of elements contained in the matched element set size: function() { return this.length; }, toArray: function() { return slice.call( this, 0 ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems, name, selector ) { // Build a new jQuery matched element set var ret = this.constructor(); if ( jQuery.isArray( elems ) ) { push.apply( ret, elems ); } else { jQuery.merge( ret, elems ); } // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; if ( name === "find" ) { ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; } else if ( name ) { ret.selector = this.selector + "." + name + "(" + selector + ")"; } // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, ready: function( fn ) { // Attach the listeners jQuery.bindReady(); // Add the callback readyList.add( fn ); return this; }, eq: function( i ) { i = +i; return i === -1 ? this.slice( i ) : this.slice( i, i + 1 ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, slice: function() { return this.pushStack( slice.apply( this, arguments ), "slice", slice.call(arguments).join(",") ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: [].sort, splice: [].splice }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }, // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Either a released hold or an DOMready/load event and not yet ready if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready, 1 ); } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.fireWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger( "ready" ).off( "ready" ); } } }, bindReady: function() { if ( readyList ) { return; } readyList = jQuery.Callbacks( "once memory" ); // Catch cases where $(document).ready() is called after the // browser event has already occurred. if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready return setTimeout( jQuery.ready, 1 ); } // Mozilla, Opera and webkit nightlies currently support this event if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", jQuery.ready, false ); // If IE event model is used } else if ( document.attachEvent ) { // ensure firing before onload, // maybe late but safe also for iframes document.attachEvent( "onreadystatechange", DOMContentLoaded ); // A fallback to window.onload, that will always work window.attachEvent( "onload", jQuery.ready ); // If IE and not a frame // continually check to see if the document is ready var toplevel = false; try { toplevel = window.frameElement == null; } catch(e) {} if ( document.documentElement.doScroll && toplevel ) { doScrollCheck(); } } }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; }, isWindow: function( obj ) { return obj != null && obj == obj.window; }, isNumeric: function( obj ) { return !isNaN( parseFloat(obj) ) && isFinite( obj ); }, type: function( obj ) { return obj == null ? String( obj ) : class2type[ toString.call(obj) ] || "object"; }, isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; for ( key in obj ) {} return key === undefined || hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; }, error: function( msg ) { throw new Error( msg ); }, parseJSON: function( data ) { if ( typeof data !== "string" || !data ) { return null; } // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); // Attempt to parse using the native JSON parser first if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); } // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test( data.replace( rvalidescape, "@" ) .replace( rvalidtokens, "]" ) .replace( rvalidbraces, "")) ) { return ( new Function( "return " + data ) )(); } jQuery.error( "Invalid JSON: " + data ); }, // Cross-browser xml parsing parseXML: function( data ) { if ( typeof data !== "string" || !data ) { return null; } var xml, tmp; try { if ( window.DOMParser ) { // Standard tmp = new DOMParser(); xml = tmp.parseFromString( data , "text/xml" ); } else { // IE xml = new ActiveXObject( "Microsoft.XMLDOM" ); xml.async = "false"; xml.loadXML( data ); } } catch( e ) { xml = undefined; } if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); } return xml; }, noop: function() {}, // Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && rnotwhite.test( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); }, // args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length, isObj = length === undefined || jQuery.isFunction( object ); if ( args ) { if ( isObj ) { for ( name in object ) { if ( callback.apply( object[ name ], args ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.apply( object[ i++ ], args ) === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isObj ) { for ( name in object ) { if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { break; } } } } return object; }, // Use native String.trim function wherever possible trim: trim ? function( text ) { return text == null ? "" : trim.call( text ); } : // Otherwise use our own trimming functionality function( text ) { return text == null ? "" : text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); }, // results is for internal usage only makeArray: function( array, results ) { var ret = results || []; if ( array != null ) { // The window, strings (and functions) also have 'length' // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 var type = jQuery.type( array ); if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { push.call( ret, array ); } else { jQuery.merge( ret, array ); } } return ret; }, inArray: function( elem, array, i ) { var len; if ( array ) { if ( indexOf ) { return indexOf.call( array, elem, i ); } len = array.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in array && array[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var i = first.length, j = 0; if ( typeof second.length === "number" ) { for ( var l = second.length; j < l; j++ ) { first[ i++ ] = second[ j ]; } } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, inv ) { var ret = [], retVal; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( var i = 0, length = elems.length; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, key, ret = [], i = 0, length = elems.length, // jquery objects are treated as arrays isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; // Go through the array, translating each of the items to their if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } // Go through every key on the object, } else { for ( key in elems ) { value = callback( elems[ key ], key, arg ); if ( value != null ) { ret[ ret.length ] = value; } } } // Flatten any nested arrays return ret.concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { if ( typeof context === "string" ) { var tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind var args = slice.call( arguments, 2 ), proxy = function() { return fn.apply( context, args.concat( slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; return proxy; }, // Mutifunctional method to get and set values to a collection // The value/s can optionally be executed if it's a function access: function( elems, fn, key, value, chainable, emptyGet, pass ) { var exec, bulk = key == null, i = 0, length = elems.length; // Sets many values if ( key && typeof key === "object" ) { for ( i in key ) { jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); } chainable = 1; // Sets one value } else if ( value !== undefined ) { // Optionally, function values get executed if exec is true exec = pass === undefined && jQuery.isFunction( value ); if ( bulk ) { // Bulk operations only iterate when executing function values if ( exec ) { exec = fn; fn = function( elem, key, value ) { return exec.call( jQuery( elem ), value ); }; // Otherwise they run against the entire set } else { fn.call( elems, value ); fn = null; } } if ( fn ) { for (; i < length; i++ ) { fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); } } chainable = 1; } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[0], key ) : emptyGet; }, now: function() { return ( new Date() ).getTime(); }, // Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch: function( ua ) { ua = ua.toLowerCase(); var match = rwebkit.exec( ua ) || ropera.exec( ua ) || rmsie.exec( ua ) || ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || []; return { browser: match[1] || "", version: match[2] || "0" }; }, sub: function() { function jQuerySub( selector, context ) { return new jQuerySub.fn.init( selector, context ); } jQuery.extend( true, jQuerySub, this ); jQuerySub.superclass = this; jQuerySub.fn = jQuerySub.prototype = this(); jQuerySub.fn.constructor = jQuerySub; jQuerySub.sub = this.sub; jQuerySub.fn.init = function init( selector, context ) { if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { context = jQuerySub( context ); } return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); }; jQuerySub.fn.init.prototype = jQuerySub.fn; var rootjQuerySub = jQuerySub(document); return jQuerySub; }, browser: {} }); // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); browserMatch = jQuery.uaMatch( userAgent ); if ( browserMatch.browser ) { jQuery.browser[ browserMatch.browser ] = true; jQuery.browser.version = browserMatch.version; } // Deprecated, use jQuery.browser.webkit instead if ( jQuery.browser.webkit ) { jQuery.browser.safari = true; } // IE doesn't match non-breaking spaces with \s if ( rnotwhite.test( "\xA0" ) ) { trimLeft = /^[\s\xA0]+/; trimRight = /[\s\xA0]+$/; } // All jQuery objects should point back to these rootjQuery = jQuery(document); // Cleanup functions for the document ready method if ( document.addEventListener ) { DOMContentLoaded = function() { document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); jQuery.ready(); }; } else if ( document.attachEvent ) { DOMContentLoaded = function() { // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", DOMContentLoaded ); jQuery.ready(); } }; } // The DOM ready check for Internet Explorer function doScrollCheck() { if ( jQuery.isReady ) { return; } try { // If IE is used, use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ document.documentElement.doScroll("left"); } catch(e) { setTimeout( doScrollCheck, 1 ); return; } // and execute any waiting functions jQuery.ready(); } return jQuery; })(); // String to Object flags format cache var flagsCache = {}; // Convert String-formatted flags into Object-formatted ones and store in cache function createFlags( flags ) { var object = flagsCache[ flags ] = {}, i, length; flags = flags.split( /\s+/ ); for ( i = 0, length = flags.length; i < length; i++ ) { object[ flags[i] ] = true; } return object; } /* * Create a callback list using the following parameters: * * flags: an optional list of space-separated flags that will change how * the callback list behaves * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible flags: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( flags ) { // Convert flags from String-formatted to Object-formatted // (we check in cache first) flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; var // Actual callback list list = [], // Stack of fire calls for repeatable lists stack = [], // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // Flag to know if list is currently firing firing, // First callback to fire (used internally by add and fireWith) firingStart, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // Add one or several callbacks to the list add = function( args ) { var i, length, elem, type, actual; for ( i = 0, length = args.length; i < length; i++ ) { elem = args[ i ]; type = jQuery.type( elem ); if ( type === "array" ) { // Inspect recursively add( elem ); } else if ( type === "function" ) { // Add if not in unique mode and callback is not in if ( !flags.unique || !self.has( elem ) ) { list.push( elem ); } } } }, // Fire callbacks fire = function( context, args ) { args = args || []; memory = !flags.memory || [ context, args ]; fired = true; firing = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; for ( ; list && firingIndex < firingLength; firingIndex++ ) { if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { memory = true; // Mark as halted break; } } firing = false; if ( list ) { if ( !flags.once ) { if ( stack && stack.length ) { memory = stack.shift(); self.fireWith( memory[ 0 ], memory[ 1 ] ); } } else if ( memory === true ) { self.disable(); } else { list = []; } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { var length = list.length; add( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength = list.length; // With memory, if we're not firing then // we should call right away, unless previous // firing was halted (stopOnFalse) } else if ( memory && memory !== true ) { firingStart = length; fire( memory[ 0 ], memory[ 1 ] ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { var args = arguments, argIndex = 0, argLength = args.length; for ( ; argIndex < argLength ; argIndex++ ) { for ( var i = 0; i < list.length; i++ ) { if ( args[ argIndex ] === list[ i ] ) { // Handle firingIndex and firingLength if ( firing ) { if ( i <= firingLength ) { firingLength--; if ( i <= firingIndex ) { firingIndex--; } } } // Remove the element list.splice( i--, 1 ); // If we have some unicity property then // we only need to do this once if ( flags.unique ) { break; } } } } } return this; }, // Control if a given callback is in the list has: function( fn ) { if ( list ) { var i = 0, length = list.length; for ( ; i < length; i++ ) { if ( fn === list[ i ] ) { return true; } } } return false; }, // Remove all callbacks from the list empty: function() { list = []; return this; }, // Have the list do nothing anymore disable: function() { list = stack = memory = undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory || memory === true ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( stack ) { if ( firing ) { if ( !flags.once ) { stack.push( [ context, args ] ); } } else if ( !( flags.once && memory ) ) { fire( context, args ); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; var // Static reference to slice sliceDeferred = [].slice; jQuery.extend({ Deferred: function( func ) { var doneList = jQuery.Callbacks( "once memory" ), failList = jQuery.Callbacks( "once memory" ), progressList = jQuery.Callbacks( "memory" ), state = "pending", lists = { resolve: doneList, reject: failList, notify: progressList }, promise = { done: doneList.add, fail: failList.add, progress: progressList.add, state: function() { return state; }, // Deprecated isResolved: doneList.fired, isRejected: failList.fired, then: function( doneCallbacks, failCallbacks, progressCallbacks ) { deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); return this; }, always: function() { deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); return this; }, pipe: function( fnDone, fnFail, fnProgress ) { return jQuery.Deferred(function( newDefer ) { jQuery.each( { done: [ fnDone, "resolve" ], fail: [ fnFail, "reject" ], progress: [ fnProgress, "notify" ] }, function( handler, data ) { var fn = data[ 0 ], action = data[ 1 ], returned; if ( jQuery.isFunction( fn ) ) { deferred[ handler ](function() { returned = fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); } else { newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); } }); } else { deferred[ handler ]( newDefer[ action ] ); } }); }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { if ( obj == null ) { obj = promise; } else { for ( var key in promise ) { obj[ key ] = promise[ key ]; } } return obj; } }, deferred = promise.promise({}), key; for ( key in lists ) { deferred[ key ] = lists[ key ].fire; deferred[ key + "With" ] = lists[ key ].fireWith; } // Handle state deferred.done( function() { state = "resolved"; }, failList.disable, progressList.lock ).fail( function() { state = "rejected"; }, doneList.disable, progressList.lock ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( firstParam ) { var args = sliceDeferred.call( arguments, 0 ), i = 0, length = args.length, pValues = new Array( length ), count = length, pCount = length, deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? firstParam : jQuery.Deferred(), promise = deferred.promise(); function resolveFunc( i ) { return function( value ) { args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; if ( !( --count ) ) { deferred.resolveWith( deferred, args ); } }; } function progressFunc( i ) { return function( value ) { pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; deferred.notifyWith( promise, pValues ); }; } if ( length > 1 ) { for ( ; i < length; i++ ) { if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); } else { --count; } } if ( !count ) { deferred.resolveWith( deferred, args ); } } else if ( deferred !== firstParam ) { deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); } return promise; } }); jQuery.support = (function() { var support, all, a, select, opt, input, fragment, tds, events, eventName, i, isSupported, div = document.createElement( "div" ), documentElement = document.documentElement; // Preliminary tests div.setAttribute("className", "t"); div.innerHTML = "
a"; all = div.getElementsByTagName( "*" ); a = div.getElementsByTagName( "a" )[ 0 ]; // Can't get basic test support if ( !all || !all.length || !a ) { return {}; } // First batch of supports tests select = document.createElement( "select" ); opt = select.appendChild( document.createElement("option") ); input = div.getElementsByTagName( "input" )[ 0 ]; support = { // IE strips leading whitespace when .innerHTML is used leadingWhitespace: ( div.firstChild.nodeType === 3 ), // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute // (IE uses .cssText instead) style: /top/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: ( a.getAttribute("href") === "/a" ), // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity: /^0.55/.test( a.style.opacity ), // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) checkOn: ( input.value === "on" ), // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) getSetAttribute: div.className !== "t", // Tests for enctype support on a form(#6743) enctype: !!document.createElement("form").enctype, // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", // Will be defined later submitBubbles: true, changeBubbles: true, focusinBubbles: false, deleteExpando: true, noCloneEvent: true, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, reliableMarginRight: true, pixelMargin: true }; // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); // Make sure checked status is properly cloned input.checked = true; support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled // (WebKit marks them as disabled) select.disabled = true; support.optDisabled = !opt.disabled; // Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { delete div.test; } catch( e ) { support.deleteExpando = false; } if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { div.attachEvent( "onclick", function() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) support.noCloneEvent = false; }); div.cloneNode( true ).fireEvent( "onclick" ); } // Check if a radio maintains its value // after being appended to the DOM input = document.createElement("input"); input.value = "t"; input.setAttribute("type", "radio"); support.radioValue = input.value === "t"; input.setAttribute("checked", "checked"); // #11217 - WebKit loses check when the name is after the checked attribute input.setAttribute( "name", "t" ); div.appendChild( input ); fragment = document.createDocumentFragment(); fragment.appendChild( div.lastChild ); // WebKit doesn't clone checked state correctly in fragments support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) support.appendChecked = input.checked; fragment.removeChild( input ); fragment.appendChild( div ); // Technique from Juriy Zaytsev // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ // We only care about the case where non-standard event systems // are used, namely in IE. Short-circuiting here helps us to // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if ( div.attachEvent ) { for ( i in { submit: 1, change: 1, focusin: 1 }) { eventName = "on" + i; isSupported = ( eventName in div ); if ( !isSupported ) { div.setAttribute( eventName, "return;" ); isSupported = ( typeof div[ eventName ] === "function" ); } support[ i + "Bubbles" ] = isSupported; } } fragment.removeChild( div ); // Null elements to avoid leaks in IE fragment = select = opt = div = input = null; // Run tests that need a body at doc ready jQuery(function() { var container, outer, inner, table, td, offsetSupport, marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, paddingMarginBorderVisibility, paddingMarginBorder, body = document.getElementsByTagName("body")[0]; if ( !body ) { // Return for frameset docs that don't have a body return; } conMarginTop = 1; paddingMarginBorder = "padding:0;margin:0;border:"; positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; html = "
" + "" + "
"; container = document.createElement("div"); container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; body.insertBefore( container, body.firstChild ); // Construct the test element div = document.createElement("div"); container.appendChild( div ); // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) div.innerHTML = "
t
"; tds = div.getElementsByTagName( "td" ); isSupported = ( tds[ 0 ].offsetHeight === 0 ); tds[ 0 ].style.display = ""; tds[ 1 ].style.display = "none"; // Check if empty table cells still have offsetWidth/Height // (IE <= 8 fail this test) support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); // Check if div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container. For more // info see bug #3333 // Fails in WebKit before Feb 2011 nightlies // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right if ( window.getComputedStyle ) { div.innerHTML = ""; marginDiv = document.createElement( "div" ); marginDiv.style.width = "0"; marginDiv.style.marginRight = "0"; div.style.width = "2px"; div.appendChild( marginDiv ); support.reliableMarginRight = ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; } if ( typeof div.style.zoom !== "undefined" ) { // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout // (IE < 8 does this) div.innerHTML = ""; div.style.width = div.style.padding = "1px"; div.style.border = 0; div.style.overflow = "hidden"; div.style.display = "inline"; div.style.zoom = 1; support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); // Check if elements with layout shrink-wrap their children // (IE 6 does this) div.style.display = "block"; div.style.overflow = "visible"; div.innerHTML = "
"; support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); } div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; div.innerHTML = html; outer = div.firstChild; inner = outer.firstChild; td = outer.nextSibling.firstChild.firstChild; offsetSupport = { doesNotAddBorder: ( inner.offsetTop !== 5 ), doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) }; inner.style.position = "fixed"; inner.style.top = "20px"; // safari subtracts parent border width here which is 5px offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); inner.style.position = inner.style.top = ""; outer.style.overflow = "hidden"; outer.style.position = "relative"; offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); if ( window.getComputedStyle ) { div.style.marginTop = "1%"; support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; } if ( typeof container.style.zoom !== "undefined" ) { container.style.zoom = 1; } body.removeChild( container ); marginDiv = div = container = null; jQuery.extend( support, offsetSupport ); }); return support; })(); var rbrace = /^(?:\{.*\}|\[.*\])$/, rmultiDash = /([A-Z])/g; jQuery.extend({ cache: {}, // Please use with caution uuid: 0, // Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, // Ban all objects except for Flash (which handle expandos) "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", "applet": true }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var privateCache, thisCache, ret, internalKey = jQuery.expando, getByName = typeof name === "string", // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, isEvents = name === "events"; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { elem[ internalKey ] = id = ++jQuery.uuid; } else { id = internalKey; } } if ( !cache[ id ] ) { cache[ id ] = {}; // Avoids exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify if ( !isNode ) { cache[ id ].toJSON = jQuery.noop; } } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } privateCache = thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Users should not attempt to inspect the internal events object using jQuery.data, // it is undocumented and subject to change. But does anyone listen? No. if ( isEvents && !thisCache[ name ] ) { return privateCache.events; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( getByName ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { if ( !jQuery.acceptData( elem ) ) { return; } var thisCache, i, l, // Reference to internal data cache key internalKey = jQuery.expando, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, // See jQuery.data for more information id = isNode ? elem[ internalKey ] : internalKey; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split( " " ); } } } for ( i = 0, l = name.length; i < l; i++ ) { delete thisCache[ name[i] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject(cache[ id ]) ) { return; } } // Browsers that fail expando deletion also refuse to delete expandos on // the window, but it will allow it on all other JS objects; other browsers // don't care // Ensure that `cache` is not a window object #10080 if ( jQuery.support.deleteExpando || !cache.setInterval ) { delete cache[ id ]; } else { cache[ id ] = null; } // We destroyed the cache and need to eliminate the expando on the node to avoid // false lookups in the cache for entries that no longer exist if ( isNode ) { // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( jQuery.support.deleteExpando ) { delete elem[ internalKey ]; } else if ( elem.removeAttribute ) { elem.removeAttribute( internalKey ); } else { elem[ internalKey ] = null; } } }, // For internal use only. _data: function( elem, name, data ) { return jQuery.data( elem, name, data, true ); }, // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { if ( elem.nodeName ) { var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; if ( match ) { return !(match === true || elem.getAttribute("classid") !== match); } } return true; } }); jQuery.fn.extend({ data: function( key, value ) { var parts, part, attr, name, l, elem = this[0], i = 0, data = null; // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { attr = elem.attributes; for ( l = attr.length; i < l; i++ ) { name = attr[i].name; if ( name.indexOf( "data-" ) === 0 ) { name = jQuery.camelCase( name.substring(5) ); dataAttr( elem, name, data[ name ] ); } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } parts = key.split( ".", 2 ); parts[1] = parts[1] ? "." + parts[1] : ""; part = parts[1] + "!"; return jQuery.access( this, function( value ) { if ( value === undefined ) { data = this.triggerHandler( "getData" + part, [ parts[0] ] ); // Try to fetch any internally stored data first if ( data === undefined && elem ) { data = jQuery.data( elem, key ); data = dataAttr( elem, key, data ); } return data === undefined && parts[1] ? this.data( parts[0] ) : data; } parts[1] = value; this.each(function() { var self = jQuery( this ); self.triggerHandler( "setData" + part, parts ); jQuery.data( this, key, value ); self.triggerHandler( "changeData" + part, parts ); }); }, null, value, arguments.length > 1, null, false ); }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : jQuery.isNumeric( data ) ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { for ( var name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } function handleQueueMarkDefer( elem, type, src ) { var deferDataKey = type + "defer", queueDataKey = type + "queue", markDataKey = type + "mark", defer = jQuery._data( elem, deferDataKey ); if ( defer && ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { // Give room for hard-coded callbacks to fire first // and eventually mark/queue something else on the element setTimeout( function() { if ( !jQuery._data( elem, queueDataKey ) && !jQuery._data( elem, markDataKey ) ) { jQuery.removeData( elem, deferDataKey, true ); defer.fire(); } }, 0 ); } } jQuery.extend({ _mark: function( elem, type ) { if ( elem ) { type = ( type || "fx" ) + "mark"; jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); } }, _unmark: function( force, elem, type ) { if ( force !== true ) { type = elem; elem = force; force = false; } if ( elem ) { type = type || "fx"; var key = type + "mark", count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); if ( count ) { jQuery._data( elem, key, count ); } else { jQuery.removeData( elem, key, true ); handleQueueMarkDefer( elem, type, "mark" ); } } }, queue: function( elem, type, data ) { var q; if ( elem ) { type = ( type || "fx" ) + "queue"; q = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !q || jQuery.isArray(data) ) { q = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { q.push( data ); } } return q || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), fn = queue.shift(), hooks = {}; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } jQuery._data( elem, type + ".run", hooks ); fn.call( elem, function() { jQuery.dequeue( elem, type ); }, hooks ); } if ( !queue.length ) { jQuery.removeData( elem, type + "queue " + type + ".run", true ); handleQueueMarkDefer( elem, type, "queue" ); } } }); jQuery.fn.extend({ queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } return data === undefined ? this : this.each(function() { var queue = jQuery.queue( this, type, data ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; return this.queue( type, function( next, hooks ) { var timeout = setTimeout( next, time ); hooks.stop = function() { clearTimeout( timeout ); }; }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, object ) { if ( typeof type !== "string" ) { object = type; type = undefined; } type = type || "fx"; var defer = jQuery.Deferred(), elements = this, i = elements.length, count = 1, deferDataKey = type + "defer", queueDataKey = type + "queue", markDataKey = type + "mark", tmp; function resolve() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } } while( i-- ) { if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { count++; tmp.add( resolve ); } } resolve(); return defer.promise( object ); } }); var rclass = /[\n\t\r]/g, rspace = /\s+/, rreturn = /\r/g, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, getSetAttribute = jQuery.support.getSetAttribute, nodeHook, boolHook, fixSpecified; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { return this.each(function() { jQuery.removeAttr( this, name ); }); }, prop: function( name, value ) { return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { name = jQuery.propFix[ name ] || name; return this.each(function() { // try/catch handles cases where IE balks (such as removing a property on window) try { this[ name ] = undefined; delete this[ name ]; } catch( e ) {} }); }, addClass: function( value ) { var classNames, i, l, elem, setClass, c, cl; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).addClass( value.call(this, j, this.className) ); }); } if ( value && typeof value === "string" ) { classNames = value.split( rspace ); for ( i = 0, l = this.length; i < l; i++ ) { elem = this[ i ]; if ( elem.nodeType === 1 ) { if ( !elem.className && classNames.length === 1 ) { elem.className = value; } else { setClass = " " + elem.className + " "; for ( c = 0, cl = classNames.length; c < cl; c++ ) { if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { setClass += classNames[ c ] + " "; } } elem.className = jQuery.trim( setClass ); } } } } return this; }, removeClass: function( value ) { var classNames, i, l, elem, className, c, cl; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).removeClass( value.call(this, j, this.className) ); }); } if ( (value && typeof value === "string") || value === undefined ) { classNames = ( value || "" ).split( rspace ); for ( i = 0, l = this.length; i < l; i++ ) { elem = this[ i ]; if ( elem.nodeType === 1 && elem.className ) { if ( value ) { className = (" " + elem.className + " ").replace( rclass, " " ); for ( c = 0, cl = classNames.length; c < cl; c++ ) { className = className.replace(" " + classNames[ c ] + " ", " "); } elem.className = jQuery.trim( className ); } else { elem.className = ""; } } } } return this; }, toggleClass: function( value, stateVal ) { var type = typeof value, isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { return this.each(function( i ) { jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); }); } return this.each(function() { if ( type === "string" ) { // toggle individual class names var className, i = 0, self = jQuery( this ), state = stateVal, classNames = value.split( rspace ); while ( (className = classNames[ i++ ]) ) { // check each className given, space seperated list state = isBool ? state : !self.hasClass( className ); self[ state ? "addClass" : "removeClass" ]( className ); } } else if ( type === "undefined" || type === "boolean" ) { if ( this.className ) { // store className if set jQuery._data( this, "__className__", this.className ); } // toggle whole className this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; } }); }, hasClass: function( selector ) { var className = " " + selector + " ", i = 0, l = this.length; for ( ; i < l; i++ ) { if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } } return false; }, val: function( value ) { var hooks, ret, isFunction, elem = this[0]; if ( !arguments.length ) { if ( elem ) { hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { return ret; } ret = elem.value; return typeof ret === "string" ? // handle most common string cases ret.replace(rreturn, "") : // handle cases where value is null/undef or number ret == null ? "" : ret; } return; } isFunction = jQuery.isFunction( value ); return this.each(function( i ) { var self = jQuery(this), val; if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { val = value.call( this, i, self.val() ); } else { val = value; } // Treat null/undefined as ""; convert numbers to string if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray( val ) ) { val = jQuery.map(val, function ( value ) { return value == null ? "" : value + ""; }); } hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // If set returns undefined, fall back to normal setting if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } }); } }); jQuery.extend({ valHooks: { option: { get: function( elem ) { // attributes.value is undefined in Blackberry 4.7 but // uses .value. See #6932 var val = elem.attributes.value; return !val || val.specified ? elem.value : elem.text; } }, select: { get: function( elem ) { var value, i, max, option, index = elem.selectedIndex, values = [], options = elem.options, one = elem.type === "select-one"; // Nothing was selected if ( index < 0 ) { return null; } // Loop through all the selected options i = one ? index : 0; max = one ? index + 1 : options.length; for ( ; i < max; i++ ) { option = options[ i ]; // Don't return options that are disabled or in a disabled optgroup if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { // Get the specific value for the option value = jQuery( option ).val(); // We don't need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } // Fixes Bug #2551 -- select.val() broken in IE after form.reset() if ( one && !values.length && options.length ) { return jQuery( options[ index ] ).val(); } return values; }, set: function( elem, value ) { var values = jQuery.makeArray( value ); jQuery(elem).find("option").each(function() { this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; }); if ( !values.length ) { elem.selectedIndex = -1; } return values; } } }, attrFn: { val: true, css: true, html: true, text: true, data: true, width: true, height: true, offset: true }, attr: function( elem, name, value, pass ) { var ret, hooks, notxml, nType = elem.nodeType; // don't get/set attributes on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } if ( pass && name in jQuery.attrFn ) { return jQuery( elem )[ name ]( value ); } // Fallback to prop when attributes are not supported if ( typeof elem.getAttribute === "undefined" ) { return jQuery.prop( elem, name, value ); } notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); // All attributes are lowercase // Grab necessary hook if one is defined if ( notxml ) { name = name.toLowerCase(); hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); } if ( value !== undefined ) { if ( value === null ) { jQuery.removeAttr( elem, name ); return; } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { return ret; } else { elem.setAttribute( name, "" + value ); return value; } } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { ret = elem.getAttribute( name ); // Non-existent attributes return null, we normalize to undefined return ret === null ? undefined : ret; } }, removeAttr: function( elem, value ) { var propName, attrNames, name, l, isBool, i = 0; if ( value && elem.nodeType === 1 ) { attrNames = value.toLowerCase().split( rspace ); l = attrNames.length; for ( ; i < l; i++ ) { name = attrNames[ i ]; if ( name ) { propName = jQuery.propFix[ name ] || name; isBool = rboolean.test( name ); // See #9699 for explanation of this approach (setting first, then removal) // Do not do this for boolean attributes (see #10870) if ( !isBool ) { jQuery.attr( elem, name, "" ); } elem.removeAttribute( getSetAttribute ? name : propName ); // Set corresponding property to false for boolean attributes if ( isBool && propName in elem ) { elem[ propName ] = false; } } } } }, attrHooks: { type: { set: function( elem, value ) { // We can't allow the type property to be changed (since it causes problems in IE) if ( rtype.test( elem.nodeName ) && elem.parentNode ) { jQuery.error( "type property can't be changed" ); } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { // Setting the type on a radio button after the value resets the value in IE6-9 // Reset value to it's default in case type is set after value // This is for element creation var val = elem.value; elem.setAttribute( "type", value ); if ( val ) { elem.value = val; } return value; } } }, // Use the value property for back compat // Use the nodeHook for button elements in IE6/7 (#1954) value: { get: function( elem, name ) { if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { return nodeHook.get( elem, name ); } return name in elem ? elem.value : null; }, set: function( elem, value, name ) { if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { return nodeHook.set( elem, value, name ); } // Does not return so that setAttribute is also used elem.value = value; } } }, propFix: { tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable" }, prop: function( elem, name, value ) { var ret, hooks, notxml, nType = elem.nodeType; // don't get/set properties on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); if ( notxml ) { // Fix name and attach hooks name = jQuery.propFix[ name ] || name; hooks = jQuery.propHooks[ name ]; } if ( value !== undefined ) { if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { return ret; } else { return ( elem[ name ] = value ); } } else { if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { return elem[ name ]; } } }, propHooks: { tabIndex: { get: function( elem ) { // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ var attributeNode = elem.getAttributeNode("tabindex"); return attributeNode && attributeNode.specified ? parseInt( attributeNode.value, 10 ) : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : undefined; } } } }); // Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; // Hook for boolean attributes boolHook = { get: function( elem, name ) { // Align boolean attributes with corresponding properties // Fall back to attribute presence where some booleans are not supported var attrNode, property = jQuery.prop( elem, name ); return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? name.toLowerCase() : undefined; }, set: function( elem, value, name ) { var propName; if ( value === false ) { // Remove boolean attributes when set to false jQuery.removeAttr( elem, name ); } else { // value is true since we know at this point it's type boolean and not false // Set boolean attributes to the same name and set the DOM property propName = jQuery.propFix[ name ] || name; if ( propName in elem ) { // Only set the IDL specifically if it already exists on the element elem[ propName ] = true; } elem.setAttribute( name, name.toLowerCase() ); } return name; } }; // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !getSetAttribute ) { fixSpecified = { name: true, id: true, coords: true }; // Use this for any attribute in IE6/7 // This fixes almost every IE6/7 issue nodeHook = jQuery.valHooks.button = { get: function( elem, name ) { var ret; ret = elem.getAttributeNode( name ); return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? ret.nodeValue : undefined; }, set: function( elem, value, name ) { // Set the existing or create a new attribute node var ret = elem.getAttributeNode( name ); if ( !ret ) { ret = document.createAttribute( name ); elem.setAttributeNode( ret ); } return ( ret.nodeValue = value + "" ); } }; // Apply the nodeHook to tabindex jQuery.attrHooks.tabindex.set = nodeHook.set; // Set width and height to auto instead of 0 on empty string( Bug #8150 ) // This is for removals jQuery.each([ "width", "height" ], function( i, name ) { jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { set: function( elem, value ) { if ( value === "" ) { elem.setAttribute( name, "auto" ); return value; } } }); }); // Set contenteditable to false on removals(#10429) // Setting to empty string throws an error as an invalid value jQuery.attrHooks.contenteditable = { get: nodeHook.get, set: function( elem, value, name ) { if ( value === "" ) { value = "false"; } nodeHook.set( elem, value, name ); } }; } // Some attributes require a special call on IE if ( !jQuery.support.hrefNormalized ) { jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { get: function( elem ) { var ret = elem.getAttribute( name, 2 ); return ret === null ? undefined : ret; } }); }); } if ( !jQuery.support.style ) { jQuery.attrHooks.style = { get: function( elem ) { // Return undefined in the case of empty string // Normalize to lowercase since IE uppercases css property names return elem.style.cssText.toLowerCase() || undefined; }, set: function( elem, value ) { return ( elem.style.cssText = "" + value ); } }; } // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( !jQuery.support.optSelected ) { jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { get: function( elem ) { var parent = elem.parentNode; if ( parent ) { parent.selectedIndex; // Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } return null; } }); } // IE6/7 call enctype encoding if ( !jQuery.support.enctype ) { jQuery.propFix.enctype = "encoding"; } // Radios and checkboxes getter/setter if ( !jQuery.support.checkOn ) { jQuery.each([ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { get: function( elem ) { // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified return elem.getAttribute("value") === null ? "on" : elem.value; } }; }); } jQuery.each([ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { set: function( elem, value ) { if ( jQuery.isArray( value ) ) { return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); } } }); }); var rformElems = /^(?:textarea|input|select)$/i, rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, quickParse = function( selector ) { var quick = rquickIs.exec( selector ); if ( quick ) { // 0 1 2 3 // [ _, tag, id, class ] quick[1] = ( quick[1] || "" ).toLowerCase(); quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); } return quick; }, quickIs = function( elem, m ) { var attrs = elem.attributes || {}; return ( (!m[1] || elem.nodeName.toLowerCase() === m[1]) && (!m[2] || (attrs.id || {}).value === m[2]) && (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) ); }, hoverHack = function( events ) { return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); }; /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { add: function( elem, types, handler, data, selector ) { var elemData, eventHandle, events, t, tns, type, namespaces, handleObj, handleObjIn, quick, handlers, special; // Don't attach events to noData or text/comment nodes (allow plain objects tho) if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first events = elemData.events; if ( !events ) { elemData.events = events = {}; } eventHandle = elemData.handle; if ( !eventHandle ) { elemData.handle = eventHandle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); types = jQuery.trim( hoverHack(types) ).split( " " ); for ( t = 0; t < types.length; t++ ) { tns = rtypenamespace.exec( types[t] ) || []; type = tns[1]; namespaces = ( tns[2] || "" ).split( "." ).sort(); // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: tns[1], data: data, handler: handler, guid: handler.guid, selector: selector, quick: selector && quickParse( selector ), namespace: namespaces.join(".") }, handleObjIn ); // Init the event handler queue if we're the first handlers = events[ type ]; if ( !handlers ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, global: {}, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), t, tns, type, origType, namespaces, origCount, j, events, special, handle, eventType, handleObj; if ( !elemData || !(events = elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types = jQuery.trim( hoverHack( types || "" ) ).split(" "); for ( t = 0; t < types.length; t++ ) { tns = rtypenamespace.exec( types[t] ) || []; type = origType = tns[1]; namespaces = tns[2]; // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector? special.delegateType : special.bindType ) || type; eventType = events[ type ] || []; origCount = eventType.length; namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; // Remove matching events for ( j = 0; j < eventType.length; j++ ) { handleObj = eventType[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !namespaces || namespaces.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { eventType.splice( j--, 1 ); if ( handleObj.selector ) { eventType.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( eventType.length === 0 && origCount !== eventType.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { handle = elemData.handle; if ( handle ) { handle.elem = null; } // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery.removeData( elem, [ "events", "handle" ], true ); } }, // Events that are safe to short-circuit if no handlers are attached. // Native DOM events should not be added, they may have inline handlers. customEvent: { "getData": true, "setData": true, "changeData": true }, trigger: function( event, data, elem, onlyHandlers ) { // Don't do events on text and comment nodes if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { return; } // Event object or event type var type = event.type || event, namespaces = [], cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf( "!" ) >= 0 ) { // Exclusive events trigger only for the exact event (no namespaces) type = type.slice(0, -1); exclusive = true; } if ( type.indexOf( "." ) >= 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split("."); type = namespaces.shift(); namespaces.sort(); } if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { // No jQuery handlers for this event type, and it can't have inline handlers return; } // Caller can pass in an Event, Object, or just an event type string event = typeof event === "object" ? // jQuery.Event object event[ jQuery.expando ] ? event : // Object literal new jQuery.Event( type, event ) : // Just the event type (string) new jQuery.Event( type ); event.type = type; event.isTrigger = true; event.exclusive = exclusive; event.namespace = namespaces.join( "." ); event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; // Handle a global trigger if ( !elem ) { // TODO: Stop taunting the data cache; remove global events and always attach to document cache = jQuery.cache; for ( i in cache ) { if ( cache[ i ].events && cache[ i ].events[ type ] ) { jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); } } return; } // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data != null ? jQuery.makeArray( data ) : []; data.unshift( event ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) eventPath = [[ elem, special.bindType || type ]]; if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; old = null; for ( ; cur; cur = cur.parentNode ) { eventPath.push([ cur, bubbleType ]); old = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( old && old === elem.ownerDocument ) { eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); } } // Fire handlers on the event path for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { cur = eventPath[i][0]; event.type = eventPath[i][1]; handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Note that this is a bare JS function and not a jQuery handler handle = ontype && cur[ ontype ]; if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { event.preventDefault(); } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) // IE<9 dies on focus/blur to hidden element (#1486) if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method old = elem[ ontype ]; if ( old ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; elem[ type ](); jQuery.event.triggered = undefined; if ( old ) { elem[ ontype ] = old; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event || window.event ); var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), delegateCount = handlers.delegateCount, args = [].slice.call( arguments, 0 ), run_all = !event.exclusive && !event.namespace, special = jQuery.event.special[ event.type ] || {}, handlerQueue = [], i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[0] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers that should run if there are delegated events // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && !(event.button && event.type === "click") ) { // Pregenerate a single jQuery object for reuse with .is() jqcur = jQuery(this); jqcur.context = this.ownerDocument || this; for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { // Don't process events on disabled elements (#6911, #8165) if ( cur.disabled !== true ) { selMatch = {}; matches = []; jqcur[0] = cur; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; sel = handleObj.selector; if ( selMatch[ sel ] === undefined ) { selMatch[ sel ] = ( handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) ); } if ( selMatch[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, matches: matches }); } } } } // Add the remaining (directly-bound) handlers if ( handlers.length > delegateCount ) { handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); } // Run delegates first; they may want to stop propagation beneath us for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { matched = handlerQueue[ i ]; event.currentTarget = matched.elem; for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { handleObj = matched.matches[ j ]; // Triggered event must either 1) be non-exclusive and have no namespace, or // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { event.data = handleObj.data; event.handleObj = handleObj; ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret !== undefined ) { event.result = ret; if ( ret === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, // Includes some event props shared by KeyEvent and MouseEvent // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var eventDoc, doc, body, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, originalEvent = event, fixHook = jQuery.event.fixHooks[ event.type ] || {}, copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = jQuery.Event( originalEvent ); for ( i = copy.length; i; ) { prop = copy[ --i ]; event[ prop ] = originalEvent[ prop ]; } // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Target should not be a text node (#504, Safari) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) if ( event.metaKey === undefined ) { event.metaKey = event.ctrlKey; } return fixHook.filter? fixHook.filter( event, originalEvent ) : event; }, special: { ready: { // Make sure the ready event is setup setup: jQuery.bindReady }, load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { delegateType: "focusin" }, blur: { delegateType: "focusout" }, beforeunload: { setup: function( data, namespaces, eventHandle ) { // We only want to do this special case on windows if ( jQuery.isWindow( this ) ) { this.onbeforeunload = eventHandle; } }, teardown: function( namespaces, eventHandle ) { if ( this.onbeforeunload === eventHandle ) { this.onbeforeunload = null; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; // Some plugins are using, but it's undocumented/deprecated and will be removed. // The 1.7 special event interface should provide all the hooks needed now. jQuery.event.handle = jQuery.event.dispatch; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { if ( elem.detachEvent ) { elem.detachEvent( "on" + type, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; function returnFalse() { return false; } function returnTrue() { return true; } // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { preventDefault: function() { this.isDefaultPrevented = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if preventDefault exists run it on the original event if ( e.preventDefault ) { e.preventDefault(); // otherwise set the returnValue property of the original event to false (IE) } else { e.returnValue = false; } }, stopPropagation: function() { this.isPropagationStopped = returnTrue; var e = this.originalEvent; if ( !e ) { return; } // if stopPropagation exists run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // otherwise set the cancelBubble property of the original event to true (IE) e.cancelBubble = true; }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); }, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse }; // Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var target = this, related = event.relatedTarget, handleObj = event.handleObj, selector = handleObj.selector, ret; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; }); // IE submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; if ( form && !form._submit_attached ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submit_bubble = true; }); form._submit_attached = true; } }); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submit_bubble ) { delete event._submit_bubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event, true ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !jQuery.support.changeBubbles ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._just_changed = true; } }); jQuery.event.add( this, "click._change", function( event ) { if ( this._just_changed && !event.isTrigger ) { this._just_changed = false; jQuery.event.simulate( "change", this, event, true ); } }); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event, true ); } }); elem._change_attached = true; } }); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return rformElems.test( this.nodeName ); } }; } // Create "bubbling" focus and blur events if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler while someone wants focusin/focusout var attaches = 0, handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special[ fix ] = { setup: function() { if ( attaches++ === 0 ) { document.addEventListener( orig, handler, true ); } }, teardown: function() { if ( --attaches === 0 ) { document.removeEventListener( orig, handler, true ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // && selector != null // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { this.on( type, selector, data, types[ type ], one ); } return this; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return this; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event var handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( var type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, bind: function( types, data, fn ) { return this.on( types, null, data, fn ); }, unbind: function( types, fn ) { return this.off( types, null, fn ); }, live: function( types, data, fn ) { jQuery( this.context ).on( types, this.selector, data, fn ); return this; }, die: function( types, fn ) { jQuery( this.context ).off( types, this.selector || "**", fn ); return this; }, delegate: function( selector, types, data, fn ) { return this.on( types, selector, data, fn ); }, undelegate: function( selector, types, fn ) { // ( namespace ) or ( selector, types [, fn] ) return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { if ( this[0] ) { return jQuery.event.trigger( type, data, this[0], true ); } }, toggle: function( fn ) { // Save reference to arguments for access in closure var args = arguments, guid = fn.guid || jQuery.guid++, i = 0, toggler = function( event ) { // Figure out which function to execute var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); // Make sure that clicks stop event.preventDefault(); // and execute the function return args[ lastToggle ].apply( this, arguments ) || false; }; // link all the functions, so any of them can unbind this click handler toggler.guid = guid; while ( i < args.length ) { args[ i++ ].guid = guid; } return this.click( toggler ); }, hover: function( fnOver, fnOut ) { return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } }); jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { // Handle event binding jQuery.fn[ name ] = function( data, fn ) { if ( fn == null ) { fn = data; data = null; } return arguments.length > 0 ? this.on( name, null, data, fn ) : this.trigger( name ); }; if ( jQuery.attrFn ) { jQuery.attrFn[ name ] = true; } if ( rkeyEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; } if ( rmouseEvent.test( name ) ) { jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; } }); /*! * Sizzle CSS Selector Engine * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ (function(){ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, expando = "sizcache" + (Math.random() + '').replace('.', ''), done = 0, toString = Object.prototype.toString, hasDuplicate = false, baseHasDuplicate = true, rBackslash = /\\/g, rReturn = /\r\n/g, rNonWord = /\W/; // Here we check if the JavaScript engine is using some sort of // optimization where it does not always call our comparision // function. If that is the case, discard the hasDuplicate value. // Thus far that includes Google Chrome. [0, 0].sort(function() { baseHasDuplicate = false; return 0; }); var Sizzle = function( selector, context, results, seed ) { results = results || []; context = context || document; var origContext = context; if ( context.nodeType !== 1 && context.nodeType !== 9 ) { return []; } if ( !selector || typeof selector !== "string" ) { return results; } var m, set, checkSet, extra, ret, cur, pop, i, prune = true, contextXML = Sizzle.isXML( context ), parts = [], soFar = selector; // Reset the position of the chunker regexp (start from head) do { chunker.exec( "" ); m = chunker.exec( soFar ); if ( m ) { soFar = m[3]; parts.push( m[1] ); if ( m[2] ) { extra = m[3]; break; } } } while ( m ); if ( parts.length > 1 && origPOS.exec( selector ) ) { if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { set = posProcess( parts[0] + parts[1], context, seed ); } else { set = Expr.relative[ parts[0] ] ? [ context ] : Sizzle( parts.shift(), context ); while ( parts.length ) { selector = parts.shift(); if ( Expr.relative[ selector ] ) { selector += parts.shift(); } set = posProcess( selector, set, seed ); } } } else { // Take a shortcut and set the context if the root selector is an ID // (but not if it'll be faster if the inner selector is an ID) if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { ret = Sizzle.find( parts.shift(), context, contextXML ); context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; } if ( context ) { ret = seed ? { expr: parts.pop(), set: makeArray(seed) } : Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; if ( parts.length > 0 ) { checkSet = makeArray( set ); } else { prune = false; } while ( parts.length ) { cur = parts.pop(); pop = cur; if ( !Expr.relative[ cur ] ) { cur = ""; } else { pop = parts.pop(); } if ( pop == null ) { pop = context; } Expr.relative[ cur ]( checkSet, pop, contextXML ); } } else { checkSet = parts = []; } } if ( !checkSet ) { checkSet = set; } if ( !checkSet ) { Sizzle.error( cur || selector ); } if ( toString.call(checkSet) === "[object Array]" ) { if ( !prune ) { results.push.apply( results, checkSet ); } else if ( context && context.nodeType === 1 ) { for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { results.push( set[i] ); } } } else { for ( i = 0; checkSet[i] != null; i++ ) { if ( checkSet[i] && checkSet[i].nodeType === 1 ) { results.push( set[i] ); } } } } else { makeArray( checkSet, results ); } if ( extra ) { Sizzle( extra, origContext, results, seed ); Sizzle.uniqueSort( results ); } return results; }; Sizzle.uniqueSort = function( results ) { if ( sortOrder ) { hasDuplicate = baseHasDuplicate; results.sort( sortOrder ); if ( hasDuplicate ) { for ( var i = 1; i < results.length; i++ ) { if ( results[i] === results[ i - 1 ] ) { results.splice( i--, 1 ); } } } } return results; }; Sizzle.matches = function( expr, set ) { return Sizzle( expr, null, null, set ); }; Sizzle.matchesSelector = function( node, expr ) { return Sizzle( expr, null, null, [node] ).length > 0; }; Sizzle.find = function( expr, context, isXML ) { var set, i, len, match, type, left; if ( !expr ) { return []; } for ( i = 0, len = Expr.order.length; i < len; i++ ) { type = Expr.order[i]; if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { left = match[1]; match.splice( 1, 1 ); if ( left.substr( left.length - 1 ) !== "\\" ) { match[1] = (match[1] || "").replace( rBackslash, "" ); set = Expr.find[ type ]( match, context, isXML ); if ( set != null ) { expr = expr.replace( Expr.match[ type ], "" ); break; } } } } if ( !set ) { set = typeof context.getElementsByTagName !== "undefined" ? context.getElementsByTagName( "*" ) : []; } return { set: set, expr: expr }; }; Sizzle.filter = function( expr, set, inplace, not ) { var match, anyFound, type, found, item, filter, left, i, pass, old = expr, result = [], curLoop = set, isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); while ( expr && set.length ) { for ( type in Expr.filter ) { if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { filter = Expr.filter[ type ]; left = match[1]; anyFound = false; match.splice(1,1); if ( left.substr( left.length - 1 ) === "\\" ) { continue; } if ( curLoop === result ) { result = []; } if ( Expr.preFilter[ type ] ) { match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); if ( !match ) { anyFound = found = true; } else if ( match === true ) { continue; } } if ( match ) { for ( i = 0; (item = curLoop[i]) != null; i++ ) { if ( item ) { found = filter( item, match, i, curLoop ); pass = not ^ found; if ( inplace && found != null ) { if ( pass ) { anyFound = true; } else { curLoop[i] = false; } } else if ( pass ) { result.push( item ); anyFound = true; } } } } if ( found !== undefined ) { if ( !inplace ) { curLoop = result; } expr = expr.replace( Expr.match[ type ], "" ); if ( !anyFound ) { return []; } break; } } } // Improper expression if ( expr === old ) { if ( anyFound == null ) { Sizzle.error( expr ); } else { break; } } old = expr; } return curLoop; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Utility function for retreiving the text value of an array of DOM nodes * @param {Array|Element} elem */ var getText = Sizzle.getText = function( elem ) { var i, node, nodeType = elem.nodeType, ret = ""; if ( nodeType ) { if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent || innerText for elements if ( typeof elem.textContent === 'string' ) { return elem.textContent; } else if ( typeof elem.innerText === 'string' ) { // Replace IE's carriage returns return elem.innerText.replace( rReturn, '' ); } else { // Traverse it's children for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } } else { // If no nodeType, this is expected to be an array for ( i = 0; (node = elem[i]); i++ ) { // Do not traverse comment nodes if ( node.nodeType !== 8 ) { ret += getText( node ); } } } return ret; }; var Expr = Sizzle.selectors = { order: [ "ID", "NAME", "TAG" ], match: { ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ }, leftMatch: {}, attrMap: { "class": "className", "for": "htmlFor" }, attrHandle: { href: function( elem ) { return elem.getAttribute( "href" ); }, type: function( elem ) { return elem.getAttribute( "type" ); } }, relative: { "+": function(checkSet, part){ var isPartStr = typeof part === "string", isTag = isPartStr && !rNonWord.test( part ), isPartStrNotTag = isPartStr && !isTag; if ( isTag ) { part = part.toLowerCase(); } for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { if ( (elem = checkSet[i]) ) { while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? elem || false : elem === part; } } if ( isPartStrNotTag ) { Sizzle.filter( part, checkSet, true ); } }, ">": function( checkSet, part ) { var elem, isPartStr = typeof part === "string", i = 0, l = checkSet.length; if ( isPartStr && !rNonWord.test( part ) ) { part = part.toLowerCase(); for ( ; i < l; i++ ) { elem = checkSet[i]; if ( elem ) { var parent = elem.parentNode; checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; } } } else { for ( ; i < l; i++ ) { elem = checkSet[i]; if ( elem ) { checkSet[i] = isPartStr ? elem.parentNode : elem.parentNode === part; } } if ( isPartStr ) { Sizzle.filter( part, checkSet, true ); } } }, "": function(checkSet, part, isXML){ var nodeCheck, doneName = done++, checkFn = dirCheck; if ( typeof part === "string" && !rNonWord.test( part ) ) { part = part.toLowerCase(); nodeCheck = part; checkFn = dirNodeCheck; } checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); }, "~": function( checkSet, part, isXML ) { var nodeCheck, doneName = done++, checkFn = dirCheck; if ( typeof part === "string" && !rNonWord.test( part ) ) { part = part.toLowerCase(); nodeCheck = part; checkFn = dirNodeCheck; } checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); } }, find: { ID: function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [m] : []; } }, NAME: function( match, context ) { if ( typeof context.getElementsByName !== "undefined" ) { var ret = [], results = context.getElementsByName( match[1] ); for ( var i = 0, l = results.length; i < l; i++ ) { if ( results[i].getAttribute("name") === match[1] ) { ret.push( results[i] ); } } return ret.length === 0 ? null : ret; } }, TAG: function( match, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( match[1] ); } } }, preFilter: { CLASS: function( match, curLoop, inplace, result, not, isXML ) { match = " " + match[1].replace( rBackslash, "" ) + " "; if ( isXML ) { return match; } for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { if ( elem ) { if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { if ( !inplace ) { result.push( elem ); } } else if ( inplace ) { curLoop[i] = false; } } } return false; }, ID: function( match ) { return match[1].replace( rBackslash, "" ); }, TAG: function( match, curLoop ) { return match[1].replace( rBackslash, "" ).toLowerCase(); }, CHILD: function( match ) { if ( match[1] === "nth" ) { if ( !match[2] ) { Sizzle.error( match[0] ); } match[2] = match[2].replace(/^\+|\s*/g, ''); // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); // calculate the numbers (first)n+(last) including if they are negative match[2] = (test[1] + (test[2] || 1)) - 0; match[3] = test[3] - 0; } else if ( match[2] ) { Sizzle.error( match[0] ); } // TODO: Move to normal caching system match[0] = done++; return match; }, ATTR: function( match, curLoop, inplace, result, not, isXML ) { var name = match[1] = match[1].replace( rBackslash, "" ); if ( !isXML && Expr.attrMap[name] ) { match[1] = Expr.attrMap[name]; } // Handle if an un-quoted value was used match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); if ( match[2] === "~=" ) { match[4] = " " + match[4] + " "; } return match; }, PSEUDO: function( match, curLoop, inplace, result, not ) { if ( match[1] === "not" ) { // If we're dealing with a complex expression, or a simple one if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { match[3] = Sizzle(match[3], null, null, curLoop); } else { var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); if ( !inplace ) { result.push.apply( result, ret ); } return false; } } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { return true; } return match; }, POS: function( match ) { match.unshift( true ); return match; } }, filters: { enabled: function( elem ) { return elem.disabled === false && elem.type !== "hidden"; }, disabled: function( elem ) { return elem.disabled === true; }, checked: function( elem ) { return elem.checked === true; }, selected: function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, parent: function( elem ) { return !!elem.firstChild; }, empty: function( elem ) { return !elem.firstChild; }, has: function( elem, i, match ) { return !!Sizzle( match[3], elem ).length; }, header: function( elem ) { return (/h\d/i).test( elem.nodeName ); }, text: function( elem ) { var attr = elem.getAttribute( "type" ), type = elem.type; // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); }, radio: function( elem ) { return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; }, checkbox: function( elem ) { return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; }, file: function( elem ) { return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; }, password: function( elem ) { return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; }, submit: function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && "submit" === elem.type; }, image: function( elem ) { return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; }, reset: function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && "reset" === elem.type; }, button: function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && "button" === elem.type || name === "button"; }, input: function( elem ) { return (/input|select|textarea|button/i).test( elem.nodeName ); }, focus: function( elem ) { return elem === elem.ownerDocument.activeElement; } }, setFilters: { first: function( elem, i ) { return i === 0; }, last: function( elem, i, match, array ) { return i === array.length - 1; }, even: function( elem, i ) { return i % 2 === 0; }, odd: function( elem, i ) { return i % 2 === 1; }, lt: function( elem, i, match ) { return i < match[3] - 0; }, gt: function( elem, i, match ) { return i > match[3] - 0; }, nth: function( elem, i, match ) { return match[3] - 0 === i; }, eq: function( elem, i, match ) { return match[3] - 0 === i; } }, filter: { PSEUDO: function( elem, match, i, array ) { var name = match[1], filter = Expr.filters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } else if ( name === "contains" ) { return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; } else if ( name === "not" ) { var not = match[3]; for ( var j = 0, l = not.length; j < l; j++ ) { if ( not[j] === elem ) { return false; } } return true; } else { Sizzle.error( name ); } }, CHILD: function( elem, match ) { var first, last, doneName, parent, cache, count, diff, type = match[1], node = elem; switch ( type ) { case "only": case "first": while ( (node = node.previousSibling) ) { if ( node.nodeType === 1 ) { return false; } } if ( type === "first" ) { return true; } node = elem; /* falls through */ case "last": while ( (node = node.nextSibling) ) { if ( node.nodeType === 1 ) { return false; } } return true; case "nth": first = match[2]; last = match[3]; if ( first === 1 && last === 0 ) { return true; } doneName = match[0]; parent = elem.parentNode; if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { count = 0; for ( node = parent.firstChild; node; node = node.nextSibling ) { if ( node.nodeType === 1 ) { node.nodeIndex = ++count; } } parent[ expando ] = doneName; } diff = elem.nodeIndex - last; if ( first === 0 ) { return diff === 0; } else { return ( diff % first === 0 && diff / first >= 0 ); } } }, ID: function( elem, match ) { return elem.nodeType === 1 && elem.getAttribute("id") === match; }, TAG: function( elem, match ) { return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; }, CLASS: function( elem, match ) { return (" " + (elem.className || elem.getAttribute("class")) + " ") .indexOf( match ) > -1; }, ATTR: function( elem, match ) { var name = match[1], result = Sizzle.attr ? Sizzle.attr( elem, name ) : Expr.attrHandle[ name ] ? Expr.attrHandle[ name ]( elem ) : elem[ name ] != null ? elem[ name ] : elem.getAttribute( name ), value = result + "", type = match[2], check = match[4]; return result == null ? type === "!=" : !type && Sizzle.attr ? result != null : type === "=" ? value === check : type === "*=" ? value.indexOf(check) >= 0 : type === "~=" ? (" " + value + " ").indexOf(check) >= 0 : !check ? value && result !== false : type === "!=" ? value !== check : type === "^=" ? value.indexOf(check) === 0 : type === "$=" ? value.substr(value.length - check.length) === check : type === "|=" ? value === check || value.substr(0, check.length + 1) === check + "-" : false; }, POS: function( elem, match, i, array ) { var name = match[2], filter = Expr.setFilters[ name ]; if ( filter ) { return filter( elem, i, match, array ); } } } }; var origPOS = Expr.match.POS, fescape = function(all, num){ return "\\" + (num - 0 + 1); }; for ( var type in Expr.match ) { Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); } // Expose origPOS // "global" as in regardless of relation to brackets/parens Expr.match.globalPOS = origPOS; var makeArray = function( array, results ) { array = Array.prototype.slice.call( array, 0 ); if ( results ) { results.push.apply( results, array ); return results; } return array; }; // Perform a simple check to determine if the browser is capable of // converting a NodeList to an array using builtin methods. // Also verifies that the returned array holds DOM nodes // (which is not the case in the Blackberry browser) try { Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; // Provide a fallback method if it does not work } catch( e ) { makeArray = function( array, results ) { var i = 0, ret = results || []; if ( toString.call(array) === "[object Array]" ) { Array.prototype.push.apply( ret, array ); } else { if ( typeof array.length === "number" ) { for ( var l = array.length; i < l; i++ ) { ret.push( array[i] ); } } else { for ( ; array[i]; i++ ) { ret.push( array[i] ); } } } return ret; }; } var sortOrder, siblingCheck; if ( document.documentElement.compareDocumentPosition ) { sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; return 0; } if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { return a.compareDocumentPosition ? -1 : 1; } return a.compareDocumentPosition(b) & 4 ? -1 : 1; }; } else { sortOrder = function( a, b ) { // The nodes are identical, we can exit early if ( a === b ) { hasDuplicate = true; return 0; // Fallback to using sourceIndex (in IE) if it's available on both nodes } else if ( a.sourceIndex && b.sourceIndex ) { return a.sourceIndex - b.sourceIndex; } var al, bl, ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, cur = aup; // If the nodes are siblings (or identical) we can do a quick check if ( aup === bup ) { return siblingCheck( a, b ); // If no parents were found then the nodes are disconnected } else if ( !aup ) { return -1; } else if ( !bup ) { return 1; } // Otherwise they're somewhere else in the tree so we need // to build up a full list of the parentNodes for comparison while ( cur ) { ap.unshift( cur ); cur = cur.parentNode; } cur = bup; while ( cur ) { bp.unshift( cur ); cur = cur.parentNode; } al = ap.length; bl = bp.length; // Start walking down the tree looking for a discrepancy for ( var i = 0; i < al && i < bl; i++ ) { if ( ap[i] !== bp[i] ) { return siblingCheck( ap[i], bp[i] ); } } // We ended someplace up the tree so do a sibling check return i === al ? siblingCheck( a, bp[i], -1 ) : siblingCheck( ap[i], b, 1 ); }; siblingCheck = function( a, b, ret ) { if ( a === b ) { return ret; } var cur = a.nextSibling; while ( cur ) { if ( cur === b ) { return -1; } cur = cur.nextSibling; } return 1; }; } // Check to see if the browser returns elements by name when // querying by getElementById (and provide a workaround) (function(){ // We're going to inject a fake input element with a specified name var form = document.createElement("div"), id = "script" + (new Date()).getTime(), root = document.documentElement; form.innerHTML = ""; // Inject it into the root element, check its status, and remove it quickly root.insertBefore( form, root.firstChild ); // The workaround has to do additional checks after a getElementById // Which slows things down for other browsers (hence the branching) if ( document.getElementById( id ) ) { Expr.find.ID = function( match, context, isXML ) { if ( typeof context.getElementById !== "undefined" && !isXML ) { var m = context.getElementById(match[1]); return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; } }; Expr.filter.ID = function( elem, match ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); return elem.nodeType === 1 && node && node.nodeValue === match; }; } root.removeChild( form ); // release memory in IE root = form = null; })(); (function(){ // Check to see if the browser returns only elements // when doing getElementsByTagName("*") // Create a fake element var div = document.createElement("div"); div.appendChild( document.createComment("") ); // Make sure no comments are found if ( div.getElementsByTagName("*").length > 0 ) { Expr.find.TAG = function( match, context ) { var results = context.getElementsByTagName( match[1] ); // Filter out possible comments if ( match[1] === "*" ) { var tmp = []; for ( var i = 0; results[i]; i++ ) { if ( results[i].nodeType === 1 ) { tmp.push( results[i] ); } } results = tmp; } return results; }; } // Check to see if an attribute returns normalized href attributes div.innerHTML = ""; if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && div.firstChild.getAttribute("href") !== "#" ) { Expr.attrHandle.href = function( elem ) { return elem.getAttribute( "href", 2 ); }; } // release memory in IE div = null; })(); if ( document.querySelectorAll ) { (function(){ var oldSizzle = Sizzle, div = document.createElement("div"), id = "__sizzle__"; div.innerHTML = "

"; // Safari can't handle uppercase or unicode characters when // in quirks mode. if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { return; } Sizzle = function( query, context, extra, seed ) { context = context || document; // Only use querySelectorAll on non-XML documents // (ID selectors don't work in non-HTML documents) if ( !seed && !Sizzle.isXML(context) ) { // See if we find a selector to speed up var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { // Speed-up: Sizzle("TAG") if ( match[1] ) { return makeArray( context.getElementsByTagName( query ), extra ); // Speed-up: Sizzle(".CLASS") } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { return makeArray( context.getElementsByClassName( match[2] ), extra ); } } if ( context.nodeType === 9 ) { // Speed-up: Sizzle("body") // The body element only exists once, optimize finding it if ( query === "body" && context.body ) { return makeArray( [ context.body ], extra ); // Speed-up: Sizzle("#ID") } else if ( match && match[3] ) { var elem = context.getElementById( match[3] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id === match[3] ) { return makeArray( [ elem ], extra ); } } else { return makeArray( [], extra ); } } try { return makeArray( context.querySelectorAll(query), extra ); } catch(qsaError) {} // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { var oldContext = context, old = context.getAttribute( "id" ), nid = old || id, hasParent = context.parentNode, relativeHierarchySelector = /^\s*[+~]/.test( query ); if ( !old ) { context.setAttribute( "id", nid ); } else { nid = nid.replace( /'/g, "\\$&" ); } if ( relativeHierarchySelector && hasParent ) { context = context.parentNode; } try { if ( !relativeHierarchySelector || hasParent ) { return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); } } catch(pseudoError) { } finally { if ( !old ) { oldContext.removeAttribute( "id" ); } } } } return oldSizzle(query, context, extra, seed); }; for ( var prop in oldSizzle ) { Sizzle[ prop ] = oldSizzle[ prop ]; } // release memory in IE div = null; })(); } (function(){ var html = document.documentElement, matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; if ( matches ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9 fails this) var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), pseudoWorks = false; try { // This should fail with an exception // Gecko does not error, returns false instead matches.call( document.documentElement, "[test!='']:sizzle" ); } catch( pseudoError ) { pseudoWorks = true; } Sizzle.matchesSelector = function( node, expr ) { // Make sure that attribute selectors are quoted expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); if ( !Sizzle.isXML( node ) ) { try { if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { var ret = matches.call( node, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || !disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9, so check for that node.document && node.document.nodeType !== 11 ) { return ret; } } } catch(e) {} } return Sizzle(expr, null, null, [node]).length > 0; }; } })(); (function(){ var div = document.createElement("div"); div.innerHTML = "
"; // Opera can't find a second classname (in 9.6) // Also, make sure that getElementsByClassName actually exists if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { return; } // Safari caches class attributes, doesn't catch changes (in 3.2) div.lastChild.className = "e"; if ( div.getElementsByClassName("e").length === 1 ) { return; } Expr.order.splice(1, 0, "CLASS"); Expr.find.CLASS = function( match, context, isXML ) { if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { return context.getElementsByClassName(match[1]); } }; // release memory in IE div = null; })(); function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { var match = false; elem = elem[dir]; while ( elem ) { if ( elem[ expando ] === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 && !isXML ){ elem[ expando ] = doneName; elem.sizset = i; } if ( elem.nodeName.toLowerCase() === cur ) { match = elem; break; } elem = elem[dir]; } checkSet[i] = match; } } } function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { for ( var i = 0, l = checkSet.length; i < l; i++ ) { var elem = checkSet[i]; if ( elem ) { var match = false; elem = elem[dir]; while ( elem ) { if ( elem[ expando ] === doneName ) { match = checkSet[elem.sizset]; break; } if ( elem.nodeType === 1 ) { if ( !isXML ) { elem[ expando ] = doneName; elem.sizset = i; } if ( typeof cur !== "string" ) { if ( elem === cur ) { match = true; break; } } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { match = elem; break; } } elem = elem[dir]; } checkSet[i] = match; } } } if ( document.documentElement.contains ) { Sizzle.contains = function( a, b ) { return a !== b && (a.contains ? a.contains(b) : true); }; } else if ( document.documentElement.compareDocumentPosition ) { Sizzle.contains = function( a, b ) { return !!(a.compareDocumentPosition(b) & 16); }; } else { Sizzle.contains = function() { return false; }; } Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; var posProcess = function( selector, context, seed ) { var match, tmpSet = [], later = "", root = context.nodeType ? [context] : context; // Position selectors must be done after the filter // And so must :not(positional) so we move all PSEUDOs to the end while ( (match = Expr.match.PSEUDO.exec( selector )) ) { later += match[0]; selector = selector.replace( Expr.match.PSEUDO, "" ); } selector = Expr.relative[selector] ? selector + "*" : selector; for ( var i = 0, l = root.length; i < l; i++ ) { Sizzle( selector, root[i], tmpSet, seed ); } return Sizzle.filter( later, tmpSet ); }; // EXPOSE // Override sizzle attribute retrieval Sizzle.attr = jQuery.attr; Sizzle.selectors.attrMap = {}; jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.filters; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; })(); var runtil = /Until$/, rparentsprev = /^(?:parents|prevUntil|prevAll)/, // Note: This RegExp should be improved, or likely pulled from Sizzle rmultiselector = /,/, isSimple = /^.[^:#\[\.,]*$/, slice = Array.prototype.slice, POS = jQuery.expr.match.globalPOS, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend({ find: function( selector ) { var self = this, i, l; if ( typeof selector !== "string" ) { return jQuery( selector ).filter(function() { for ( i = 0, l = self.length; i < l; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } }); } var ret = this.pushStack( "", "find", selector ), length, n, r; for ( i = 0, l = this.length; i < l; i++ ) { length = ret.length; jQuery.find( selector, this[i], ret ); if ( i > 0 ) { // Make sure that the results are unique for ( n = length; n < ret.length; n++ ) { for ( r = 0; r < length; r++ ) { if ( ret[r] === ret[n] ) { ret.splice(n--, 1); break; } } } } } return ret; }, has: function( target ) { var targets = jQuery( target ); return this.filter(function() { for ( var i = 0, l = targets.length; i < l; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, not: function( selector ) { return this.pushStack( winnow(this, selector, false), "not", selector); }, filter: function( selector ) { return this.pushStack( winnow(this, selector, true), "filter", selector ); }, is: function( selector ) { return !!selector && ( typeof selector === "string" ? // If this is a positional selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". POS.test( selector ) ? jQuery( selector, this.context ).index( this[0] ) >= 0 : jQuery.filter( selector, this ).length > 0 : this.filter( selector ).length > 0 ); }, closest: function( selectors, context ) { var ret = [], i, l, cur = this[0]; // Array (deprecated as of jQuery 1.7) if ( jQuery.isArray( selectors ) ) { var level = 1; while ( cur && cur.ownerDocument && cur !== context ) { for ( i = 0; i < selectors.length; i++ ) { if ( jQuery( cur ).is( selectors[ i ] ) ) { ret.push({ selector: selectors[ i ], elem: cur, level: level }); } } cur = cur.parentNode; level++; } return ret; } // String var pos = POS.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( i = 0, l = this.length; i < l; i++ ) { cur = this[i]; while ( cur ) { if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { ret.push( cur ); break; } else { cur = cur.parentNode; if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { break; } } } } ret = ret.length > 1 ? jQuery.unique( ret ) : ret; return this.pushStack( ret, "closest", selectors ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[0], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[0] : elem, this ); }, add: function( selector, context ) { var set = typeof selector === "string" ? jQuery( selector, context ) : jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), all = jQuery.merge( this.get(), set ); return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? all : jQuery.unique( all ) ); }, andSelf: function() { return this.add( this.prevObject ); } }); // A painfully simple check to see if an element is disconnected // from a document (should be improved, where feasible). function isDisconnected( node ) { return !node || !node.parentNode || node.parentNode.nodeType === 11; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return jQuery.nth( elem, 2, "nextSibling" ); }, prev: function( elem ) { return jQuery.nth( elem, 2, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.makeArray( elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( !runtil.test( name ) ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { ret = ret.reverse(); } return this.pushStack( ret, name, slice.call( arguments ).join(",") ); }; }); jQuery.extend({ filter: function( expr, elems, not ) { if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 ? jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : jQuery.find.matches(expr, elems); }, dir: function( elem, dir, until ) { var matched = [], cur = elem[ dir ]; while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); } cur = cur[dir]; } return matched; }, nth: function( cur, result, dir, elem ) { result = result || 1; var num = 0; for ( ; cur; cur = cur[dir] ) { if ( cur.nodeType === 1 && ++num === result ) { break; } } return cur; }, sibling: function( n, elem ) { var r = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { r.push( n ); } } return r; } }); // Implement the identical functionality for filter and not function winnow( elements, qualifier, keep ) { // Can't pass null or undefined to indexOf in Firefox 4 // Set to 0 to skip string check qualifier = qualifier || 0; if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep(elements, function( elem, i ) { var retVal = !!qualifier.call( elem, i, elem ); return retVal === keep; }); } else if ( qualifier.nodeType ) { return jQuery.grep(elements, function( elem, i ) { return ( elem === qualifier ) === keep; }); } else if ( typeof qualifier === "string" ) { var filtered = jQuery.grep(elements, function( elem ) { return elem.nodeType === 1; }); if ( isSimple.test( qualifier ) ) { return jQuery.filter(qualifier, filtered, !keep); } else { qualifier = jQuery.filter( qualifier, filtered ); } } return jQuery.grep(elements, function( elem, i ) { return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; }); } function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, rtagName = /<([\w:]+)/, rtbody = /]", "i"), // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /\/(java|ecma)script/i, rcleanScript = /^\s*", "" ], legend: [ 1, "
", "
" ], thead: [ 1, "", "
" ], tr: [ 2, "", "
" ], td: [ 3, "", "
" ], col: [ 2, "", "
" ], area: [ 1, "", "" ], _default: [ 0, "", "" ] }, safeFragment = createSafeFragment( document ); wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; // IE can't serialize and

dispcalGUI dispcalGUIOpen Source Display Calibration and Characterization powered by Argyll CMS

Stay up-to-date and be notified of new releases by signing up to the dispcalGUI-news mailing list (unless you're already subscribed to dispcalGUI-users which also receives new release notifications).

About dispcalGUI

dispcalGUI is a graphical user interface for the display calibration and profiling tools of Argyll CMS, an open source color management system by Graeme Gill.

Calibrate and characterize your display devices using one of the many supported hardware sensors, with support for multi-display setups and a variety of available settings like customizable whitepoint, luminance, black level, tone response curve as well as the option to create matrix and look-up-table ICC profiles, with optional gamut mapping. Other features include:

  • Support of colorimeter correction for wide-gamut screens via correction matrices or calibration specral sample files (the latter only for specific colorimeters i.e. i1 Display Pro, ColorMunki Display and Spyder 4).
  • Profile verification: Check the quality of profiles via measurements. Also supports custom CGATS files (e.g. FOGRA, GRACoL/IDEAlliance, SWOP) and using of reference profiles to obtain test values.
  • Test chart editor: Create charts with any amount of color patches, easy copy & paste from CGATS, CSV files (only tab-delimited) and spreadsheet applications.

Screenshots

Thumbnail of dispcalGUI running under Linux with GNOME 3
Main window
Thumbnail of dispcalGUI running under Linux with GNOME
Gamut mapping options
Thumbnail of dispcalGUI running under Linux with GNOME
Testchart editor

Thumbnail of dispcalGUI running under Linux with GNOME
Display adjustment
Thumbnail of dispcalGUI running under Linux with GNOME
Measurements
Thumbnail of dispcalGUI running under Linux with GNOME
Calibration curves

Thumbnail of dispcalGUI running under Linux with KDE4
KDE4
Thumbnail of dispcalGUI running under Mac OS X
Mac OS X
Thumbnail of dispcalGUI running under Windows 7
Windows 7

Disclaimer

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.

dispcalGUI is written in Python and uses the 3rd-party packages NumPy, demjson (JSON[6] library) and wxPython (GUI[4] toolkit). It also makes extensive use of several Argyll CMS utilities. The build system to create standalone executables additionally uses setuptools and py2app on Mac OS X or py2exe on Windows. All of these software packages are © by their respective authors.

Get dispcalGUI

Please note: Argyll CMS is a separate download.

Quickstart guide

This short guide intends to get you up and running quickly, but if you run into a problem, you should refer to the full prerequisites and installation sections.

  1. Get and install the latest release of dispcalGUI. It is recommended to first remove all previous versions.

  2. Download and unpack Argyll CMS: Linux | Mac OS | Windows. Put the extracted directory (Argyll_VX.X.X) in a convenient place on your harddisk.

    If you want to use the HCFR colorimeter under Mac OS X...

    Follow the instructions under “installing Argyll CMS on Mac OS X” in the Argyll CMS documentation.

  3. Launch dispcalGUI. If it cannot determine the path to the Argyll CMS binaries, it will prompt you to select the location manually on first launch.

    If your measurement device is a i1 Display Pro, ColorMunki Display or Spyder 4...

    You'll want to import the colorimeter corrections that are part of the i1 Profiler or ColorMunki Display software package, which can be used to better match the instrument to a particular type of display.

    Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the i1 Profiler or ColorMunki Display software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the software's setup executable. Select the ColorMunki Display PC (Windows) Setup or i1 Profiler PC (Windows) Setup regardless of your actual operating system (both files contain the same set of colorimeter corrections, the ColorMunki software is a slightly smaller download).

    If your measurement device is a Spyder 4, you'll also want to enable additional measurement modes for that particular instrument.

    If your measurement device is a Spyder 2...

    The Spyder 2 needs the vendor firmware pattern to function.

    Choose “Enable Spyder 2 colorimeter...” from dispcalGUI's “Tools” menu. If the Spyder 2 software is installed or its installation media is inserted, the Spyder 2 can be enabled automatically, otherwise you will have to manually select the Spyder 2 software's setup executable. Select the Spyder 2 Setup for Windows regardless of your actual operating system.

    If your measurement device is a Spyder 4...

    The full range of measurement modes for the Spyder 4 are only available if they are imported from the Spyder 4 software.

    Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the Spyder 4 software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the Spyder 4 software's setup executable. Select the Spyder 4 Setup for Windows (choose one of Elite, Express, HD or Pro) regardless of your actual operating system.

  4. Connect your measurement device to your computer.

    Windows only: If your measurement device is not a ColorMunki Display, i1 Display Pro or Huey, you need to install an Argyll-specific driver. See “Driver installation under Windows”.

    Click the small icon with the swirling arrows in between the “Display device” and “Instrument” controls to detect connected displays devices and instruments. The detected instrument(s) should show up in the “Instrument” dropdown.

    Linux only: If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot. If that doesn't help, read “Installing Argyll CMS on Linux: Setting up instrument access”.

  5. Refer to the documentation for usage instructions.

System requirements and other prerequisites

General system requirements

  • A recent Linux, Mac OS X (10.4 or newer) or Windows (XP/Server 2003 or newer) operating system.
  • A graphics card with at least 24 bits per pixel (true color) support and the desktop set up to use this color depth.

Argyll CMS

To use dispcalGUI, you need to download and install Argyll CMS (1.0 or newer).

Supported instruments

You need one of the supported instruments to make measurements. All instruments supported by Argyll CMS are also supported by dispcalGUI. For display readings, these currently are:

Colorimeters

  • Calman X2 (treated as i1 Display 2)
  • Datacolor/ColorVision Spyder 2
  • Datacolor Spyder 3 (since Argyll CMS 1.1.0)
  • Datacolor Spyder 4 (since Argyll CMS 1.3.6)
  • HP Advanced Profiling Solution (treated as i1 Display 2)
  • HP DreamColor (treated as i1 Display 2)
  • Hughski ColorHug (experimental only, does not work reliably on all platforms, especially on Mac OS X. Linux support since Argyll CMS 1.3.6, Windows support with newest ColorHug firmware since Argyll CMS 1.5.0)
  • Lacie Blue Eye (treated as i1 Display 2)
  • Sequel Imaging MonacoOPTIX (treated as i1 Display 1)
  • X-Rite ColorMunki Create (treated as i1 Display 2)
  • X-Rite ColorMunki Smile (since Argyll CMS 1.5.0)
  • X-Rite DTP92
  • X-Rite DTP94
  • X-Rite/GretagMacbeth/Pantone Huey
  • X-Rite/GretagMacbeth i1 Display 1
  • X-Rite/GretagMacbeth i1 Display 2/LT
  • X-Rite i1 Display Pro, ColorMunki Display (since Argyll CMS 1.3.4)

Spectrometers

  • JETI specbos 1211/1201 (new in Argyll CMS 1.6.0 beta)
  • X-Rite ColorMunki Design, ColorMunki Photo (since Argyll CMS 1.1.0)
  • X-Rite/GretagMacbeth i1 Monitor (since Argyll CMS 1.0.3)
  • X-Rite/GretagMacbeth i1 Pro
  • X-Rite/GretagMacbeth Spectrolino

Note that the i1 Display Pro and i1 Pro are very different instruments despite their naming similarities.

Also there are currently (2011-09-02) four instruments (or rather, packages) under the ColorMunki brand, two of which are spectrometers, and two are colorimeters:

  • The ColorMunki Design and ColorMunki Photo spectrometers differ only in the functionality of the bundled vendor software. There are no differences between the instruments when used with Argyll CMS and dispcalGUI.
  • The ColorMunki Display colorimeter is a less expensive version of the i1 Display Pro colorimeter. It comes bundled with a simpler vendor software and has longer measurement times compared to the i1 Display Pro. Apart from that, the instrument appears to be virtually identical.
  • The ColorMunki Create colorimeter is the same instrument as the i1 Display 2.

Additional requirements for unattended calibration and profiling

When using a spectrometer that is supported by the unattended feature (see below), having to take the instrument off the screen to do a sensor self-calibration again after display calibration before starting the measurements for profiling may be avoided if the menu item “Allow skipping of spectrometer self-calibration” in the “Options” menu is checked (colorimeter measurements are always unattended because they generally do not require a sensor calibration away from the screen, with the exception of the i1 Display 1).

Unattended calibration and profiling currently supports the following spectrometers in addition to most colorimeters:

  • X-Rite ColorMunki
  • X-Rite/GretagMacbeth i1 Monitor & Pro
  • X-Rite/GretagMacbeth Spectrolino

Be aware you may still be forced to do a sensor calibration if the instrument requires it. Also, please look at the possible caveats.

Additional requirements for using the source code

You can skip this section if you downloaded a package, installer, ZIP archive or disk image of dispcalGUI for your operating system and do not want to run or compile from source.

All platforms:

  • Python >= v2.5 <= v2.7.x (2.7.x is the recommended version. Mac OS X users: If you want to compile dispcalGUI from source, it is advisable to first install XCode and then the official python.org Python)
  • NumPy
  • wxPython GUI[4] toolkit

Windows:

Additional requirements for compiling

You can skip this section if you downloaded a python package of dispcalGUI for your operating system and do not want to compile from source.

Linux:

  • GCC and development headers for Python + X11 + Xrandr + Xinerama + Xxf86vm if not already installed, they should be available through your distribution's packaging system

Mac OS X:

  • XCode
  • py2app if you want to build a standalone executable (on Mac OS X before 10.5, install setuptools first: sudo python util/ez_setup.py setuptools)

Windows:

  • a C-compiler (e.g. MS Visual C++ Express or MinGW. If you're using the official python.org Python 2.6 or later I'd recommend Visual C++ Express as it works out of the box)
  • py2exe if you want to build a standalone executable

Running directly from source without installation

One-time setup instructions:

  1. Open a shell.
  2. cd into the source directory (e.g. dispcalGUI-${VERSION} or dispcalgui).
  3. If you use a version from the SVN repository, run python setup.py to create the version file.
  4. Run python setup.py build_ext -i to build the extension modules (you may be able to skip this step on Linux and Mac OS X as the source already includes compiled versions of the extension modules)

You can then run python dispcalGUI.pyw (or launch it by double-clicking).

Installation

It is recommended to first remove all previous versions.

Driver installation under Windows

  • If you already have drivers for your measurement device installed...

    Read “Adding Argyll drivers to existing drivers” (if you are using vendor drivers) or “Updating Argyll drivers” (if you use a prior version of the Argyll drivers) under “Installing Argyll CMS on Microsoft Windows” in the Argyll CMS documentation.

  • If this is a fresh install...

      • If you are using Windows 8...
        1. Go to “Settings” (hover the lower right corner of the screen, then click the gear icon).
        2. Select “Power” (the on/off icon).
        3. Hold the SHIFT key down and click “Restart”.
        4. Select “Troubleshoot → “Advanced Options” → “Startup Settings” → “Restart”.
        5. After reboot, select “Disable Driver Signature Enforcement” (number 7 on the list).
        6. Open the desktop, then go to “Settings” (hover the lower right corner of the screen, then click the gear icon) → “Control Panel” → “Hardware and Sound” → “Device Manager”.
        7. Locate the instrument in the device list. It may be underneath one of the top level items (usually “Other devices”).
        8. Right click on the instrument and select “Update Driver Software...”.
        9. Select “Browse my computer for driver software”.
        10. Select “Let me pick from a list of device drivers on my computer” and then “Next”.
        11. Select “Have disk...” then “Browse...”.
      • If you are using Windows Vista/7...
        1. A “Found new hardware” dialog should appear.
        2. Select “Locate and install driver software (recommended)”.
        3. If a “User Account Control” window pops up, select “Continue”.
        4. Select “Don't search online”.
        5. Select “I don't have the disc, show me other options”.
        6. Select “Browse my computer for driver software (advanced)”.
      • If you are using Windows XP...
        1. A “Found new hardware” dialog should appear.
        2. In the window “Can Windows connect to Windows Update to search for software?” select “No, not this time” and “Next”.
        3. Select “Install from a list or specific location (advanced)” then “Next”.
        4. Select “Search for the best driver in these locations”, “Include this location in the search” and “Browse...”.
    1. Locate the “libusbw” (Argyll CMS up to 1.1.1), “libusb1” (Argyll CMS up to 1.4.0) or “usb” (Argyll CMS 1.5.0 and newer) subdirectory in your Argyll_VX.X.X directory (you may also need to select the .inf file that corresponds to your device, then select “Open” and “OK”). Select “Next”.
    2. If a “Windows Security” dialog pops up, select “Install this driver software anyway”.
    3. A window stating the successful installation of the driver should show. Click “Finish”/“Close”.

Linux package (.deb/.rpm)

A lot of distributions allow easy installation of packages via the graphical desktop, i.e. by double-clicking the package file's icon. Please consult your distribution's documentation if you are unsure how to install packages.

If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot. If that doesn't help, read “Installing Argyll CMS on Linux: Setting up instrument access”.

Linux Autopackage (.package)

Before installing the autopackage, first install wxPython (on some systems called python-wxGTK or python-wxWidgets) and NumPy using your system's package management software. To install the autopackage, follow these three steps (you only have to do it once, next time, you can just skip these steps and open the .package file directly):

  1. Click on the package with your right mouse button. Then click on the “Properties” menu item.
  2. Go to the “Permissions” tab.
    • Check the “Execute”, “Exec” or “Is Executable” checkbox. If there are more than one Execute/Exec checkboxes, check the top-most one.
    • Click “Close” or “OK”, depending on the dialog.
  3. If you already have the software installed from your distributions packages or from the source, remove it first. Then open the package file. If you are asked whether you want to display or run the package, choose “Run”.

The installation will now begin. Follow further intructions that are displayed, if any.

If you cannot access your instrument, first try unplugging and reconnecting it, or a reboot. If that doesn't help, read “Installing Argyll CMS on Linux: Setting up instrument access”.

Mac OS X

Mount the disk image and option-drag its icon to your “Applications” folder. Afterwards open the “dispcalGUI” folder in your “Applications” folder and drag dispcalGUI's icon to the dock if you want easy access.

If you want to use the HCFR colorimeter under Mac OS X, follow the instructions under “installing Argyll CMS on Mac OS X” in the Argyll CMS documentation.

Windows (Installer)

Launch the installer which will guide you trough the required setup steps.

If your measurement device is not a ColorMunki Display or i1 Display Pro, you need to install an Argyll-specific driver. See “Driver installation under Windows”.

Windows (ZIP archive)

Unpack and then simply run dispcalGUI from the created folder.

If your measurement device is not a ColorMunki Display or i1 Display Pro, you need to install an Argyll-specific driver. See “Driver installation under Windows”.

Source code (all platforms)

See the “Prerequisites” section to run directly from source without installation.

Starting with dispcalGUI 0.2.5b, you can use standard distutils/setuptools commands with setup.py to build, install, and create packages. sudo python setup.py install will compile the extension modules and do a standard installation. Run python setup.py --help or python setup.py --help-commands for more information. A few additional commands and options which are not part of distutils or setuptools (and thus do not appear in the help) are also available:

Additional setup commands

bdist_appdmg (Mac OS X only)
Creates a DMG of a previously created (by the py2app or bdist_standalone commands) application bundle.
bdist_deb (Linux/Debian-based)
Create an installable Debian (.deb) package, much like the standard distutils command bdist_rpm for RPM packages. Prerequisites: You first need to install alien and rpmdb, create a dummy RPM database via sudo rpmdb --initdb, then edit (or create from scratch) the setup.cfg (you can have a look at misc/setup.ubuntu9.cfg for a working example). Under Ubuntu, running utils/dist_ubuntu.sh will automatically use the correct setup.cfg. If you are using Ubuntu 11.04 or any other debian-based distribution which has Python 2.7 as default, you need to edit /usr/lib/python2.7/distutils/command/bdist_rpm.py, and change the line install_cmd = ('%s install -O1 --root=$RPM_BUILD_ROOT ' to install_cmd = ('%s install --root=$RPM_BUILD_ROOT ' by removing the -O1 flag. Also, you need to change /usr/lib/rpm/brp-compress to do nothing (e.g. change the file contents to exit 0, but don't forget to create a backup copy first) otherwise you will get errors when building.
bdist_standalone
Creates a standalone executable that does not require a Python installation. Uses bbfreeze on Linux, py2app on Mac OS X and py2exe on Windows. setup.py will try and automatically download/install these packages for you if they are not yet installed and if not using the --use-distutils switch. Note: On Mac OS X, older versions of py2app (before 0.4) are not able to access files inside python “egg” files (which are basically ZIP-compressed folders). Setuptools, which is needed by py2app, will normally be installed in “egg” form, thus preventing those older py2app versions from accessing its contents. To fix this, you need to remove any installed setuptools-<version>-py<python-version>.egg files from your Python installation's site-packages directory (normally found under /Library/Frameworks/Python.framework/Versions/Current/lib). Then, run sudo python util/ez_setup.py -Z setuptools which will install setuptools unpacked, thus allowing py2app to acces all its files. This is no longer an issue with py2app 0.4 and later.
buildservice
Creates control files for openSUSE Build Service (also happens implicitly when invoking sdist).
finalize_msi (Windows only)
Adds icons and start menu shortcuts to the MSI installer previously created with bdist_msi. Successful MSI creation needs a patched msilib (additional information).
inno (Windows only)
Creates an Inno Setup install script for an executable created with the py2exe or bdist_standalone commands.
purge
Removes the build and dispcalGUI.egg-info directories including their contents.
purge_dist
Removes the dist directory and its contents.
readme
Creates README.html by parsing misc/README.template.html and substituting placeholders like date and version numbers.
uninstall
Uninstalls the package. You can specify the same options as for the install command.

Additional setup options

--cfg=<name>
Use an alternate setup.cfg, e.g. tailored for a given Linux distribution. The original setup.cfg is backed up and restored afterwards. The alternate file must exist as misc/setup.<name>.cfg
-n, --dry-run
Don't actually do anything. Useful in combination with the uninstall command to see which files would be removed.
--skip-instrument-configuration-files
Skip installation of udev rules and hotplug scripts.
--skip-postinstall
Skip post-installation on Linux (an entry in the desktop menu will still be created, but may not become visible until logging out and back in or rebooting) and Windows (no shortcuts in the start menu will be created at all).
--use-distutils
Force setup to use distutils (default) instead of setuptools. This is useful in combination with the bdist* commands, because it will avoid an artificial dependency on setuptools. This is actually a switch, use it once and the choice is remembered until you specify the --use-setuptools switch (see next paragraph).
--use-setuptools
Force setup to try and use setuptools instead of distutils. This is actually a switch, use it once and the choice is remembered until you specify the --use-distutils switch (see above).

Instrument-specific setup

If your measurement device is a i1 Display Pro, ColorMunki Display or Spyder 4, you'll want to import the colorimeter corrections that are part of the i1 Profiler or ColorMunki Display software package, which can be used to better match the instrument to a particular type of display.

Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the i1 Profiler or ColorMunki Display software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the software's setup executable. Select the ColorMunki Display PC (Windows) Setup or i1 Profiler PC (Windows) Setup regardless of your actual operating system (both files contain the same set of colorimeter corrections, the ColorMunki software is a slightly smaller download).

The full range of measurement modes for the Spyder 4 are only available if they are imported from the Spyder 4 software.

Choose “Import colorimeter corrections from other display profiling software...” from dispcalGUI's “Tools” menu. If the Spyder 4 software is installed or its installation media is inserted, the colorimeter corrections can be imported automatically, otherwise you will have to manually select the setup executable. Select the Spyder 4 Setup for Windows (choose one of Elite, Express, HD or Pro) regardless of your actual operating system.

If your measurement device is a Spyder 2, choose “Enable Spyder 2 colorimeter...” from dispcalGUI's “Tools” menu. If you don't have the spyder software installed or its location cannot be determined, you will be prompted to manually select the setup executable. Select the Spyder 2 Setup for Windows regardless of your actual operating system.

Basic concept of display calibration and profiling

If you have previous experience, skip ahead. If you are new to display calibration, here is a quick outline of the basic concept.

First, the display behavior is measured and adjusted to meet user-definable target characteristics, like brightness, gamma and white point. This step is generally referred to as calibration. Calibration is done by adjusting the monitor controls, and the output of the graphics card (via calibration curves, also sometimes called video LUT[7] curves—please don't confuse these with LUT profiles, the differences are explained here) to get as close as possible to the chosen target.
To meet the user-defined target characteristics, it is generally advisable to get as far as possible by using the monitor controls, and only thereafter by manipulating the output of the video card via calibration curves, which are loaded into the video card gamma table, to get the best results.

Second, the calibrated displays response is measured and an ICC[5] profile describing it is created.

Optionally and for convenience purposes, the calibration is stored in the profile, but both still need to be used together to get correct results. This can lead to some ambiguity, because loading the calibration curves from the profile is generally the responsibility of a third party utility or the OS, while applications using the profile to do color transforms usually rely on the calibration being already loaded. Currently, the only OS that applies calibration curves out-of-the-box is Mac OS X (under Windows 7 you can enable it, but it's off by default)—for other OS's, dispcalGUI takes care of creating an appropriate loader.

Even non-color-managed applications will benefit from a loaded calibration because it is stored in the graphics card—it is “global”. But the calibration alone will not yield accurate colors—only fully color-managed applications will make use of display profiles and the necessary color transforms.

Regrettably there are several image viewing and editing applications that only implement half-baked color management by not using the system's display profile (or any display profile at all), but an internal and often unchangeable “default” color space like sRGB, and sending output unaltered to the display after converting to that default colorspace. If the display's actual response is close to sRGB, you might get pleasing (albeit not accurate) results, but on displays which behave differently, for example wide-color-gamut displays, even mundane colors can get a strong tendency towards neon.

A note about colorimeters, wide-gamut displays and dispcalGUI

Colorimeters need a correction in hardware or software to obtain correct measurements from wide-gamut displays (please also see “Wide Gamut Displays and Colorimeters” on the Argyll CMS website for more information). The latter is supported when using Argyll CMS >= 1.3.0, so if you own a wide-gamut display and colorimeter which has not been specifically tuned for this display (i.e. does not contain a correction in hardware), you can apply a correction that has been calculated from spectrometer measurements to help better measure such a screen.
You need a spectrometer in the first place to do the necessary measurements to create such a correction, or you may query dispcalGUI's Colorimeter Corrections Database, and there's also a list of contributed colorimeter correction files on the Argyll CMS websiteplease note though that a matrix created for one particular instrument/display combination may not work well for different instances of the same combination because of generally low inter-instrument agreement of most colorimeters.
Starting with dispcalGUI 0.6.8, you can also import generic corrections from some profiling softwares by choosing the corresponding item in the “Tools” menu.

If you buy a screen bundled with a colorimeter, the instrument may have been matched to the screen in some way already, so you may not need a software correction in that case.

Special note about the X-Rite i1 Display Pro, ColorMunki Display and Spyder 4 colorimeters

These instruments greatly reduce the amount of work needed to match them to a display because they contain the spectral sensitivities of their filters in hardware, so only a spectrometer reading of the display is needed to create the correction (in contrast to matching other colorimeters to a display, which needs two readings: One with a spectrometer and one with the colorimeter).
That means anyone with a particular screen and a spectrometer can create a special Colorimeter Calibration Spectral Set (.ccss) file of that screen for use with those colorimeters, without needing to actually have access to the colorimeter itself.

Usage

Through the main window, you can choose your settings. When running calibration measurements, another window will guide you through the interactive part of display adjustment.

Settings file

Here, you can load a calibration (.cal) or ICC profile (.icc / .icm) file from a previous run. This will set options to those stored in the file and also load calibration curves (if any) into the video card. If the file contains only a subset of settings, you will get a message showing which settings were loaded.

If a calibration file or profile is loaded in this way, its name will show up here to indicate that the settings reflect those in the file. Also, if a calibration is present it can be used as the base when “Just Profiling”.
The chosen settings file will stay as long as you do not change any of the calibration or profiling settings, with one exception: When a .cal file with the same base name as the settings file exists in the same directory, adjusting the quality and profiling controls will not cause unloading of the settings file. This allows you to use an existing calibration with new profiling settings for “Just Profiling”, or to update an existing calibration with different quality and/or profiling settings. If you change settings in other situations, the file will get unloaded (but current settings will be retained—unloading just happens to remind you that the settings no longer match those in the file), and current display profile's calibration curves will be restored (if present, otherwise they will reset to linear).

When a calibration file is selected, the “Update calibration” checkbox will become available, which takes less time than a calibration from scratch. If a ICC[5] profile is selected, and a calibration file with the same base name exists in the same directory, the profile will be updated with the new calibration. Ticking the “Update calibration” checkbox will gray out all options as well as the “Calibrate & profile” and “Just profile” buttons, only the quality level will be changeable.

Predefined settings (presets)

Starting with dispcalGUI v0.2.5b, predefined settings for several use cases are selectable in the settings dropdown. I strongly recommend to NOT view these presets as the solitary “correct” settings you absolutely should use unmodified if your use case matches their description. Rather view them as starting points, from where you can work towards your own, optimized (in terms of your requirements, hardware, surroundings, and personal preference) settings.

Why has a default gamma of 2.2 been chosen for the presets?

Many displays, be it CRT or LCD type, have a default response characteristic close to a gamma of approx. 2.2-2.4 (for CRTs, this is the actual native behaviour; and LCDs typically try to mimic CRTs). A target response curve for calibration that is reasonably close to the native response of a display should help to minimize calibration artifacts like banding, because the adjustments needed to the video card's gamma tables via calibration curves will not be as strong as if a target response farther away from the display's native response had been chosen.

Of course, you can and should change the calibration response curve to a value suitable for your own requirements. For example, you might have a display that offers hardware calibration or gamma controls, that has been internally calibrated/adjusted to a different response curve, or your display's response is simply not close to a gamma of 2.2 for other reasons. You can run “Report on uncalibrated display device” from the “Tools” menu to measure the approximated overall gamma among other info.

Choosing the display to calibrate and the measurement device

After connecting the instrument, click the small icon with the swirling arrows in between the “Display device” and “Instrument” controls to detect connected displays devices and instruments.

Choosing a measurement mode

Some instruments may support different measurement modes for different types of display devices. In general, there are three base measurement modes: “LCD”, “Refresh” (e.g. CRT and Plasma are refresh-type displays) and “Projector” (the latter is only available if supported by the instrument). Some instruments like the Spyder 4 and ColorHug support additional measurement modes, where a mode is coupled with a predefined colorimeter correction (in that case, you should set the colorimeter correction dropdown to “None” / “Off”).
Variations of these measurement modes may be available depending on the instrument: “Adaptive” measurement mode for spectrometers uses varying integration times to increase accuracy of dark readings, but may be more inconsistent overall. “HiRes” turns on high resolution spectral mode for spectrometers like the i1 Pro, which may increase the accuracy of measurements.

Drift compensation during measurements (only available if using Argyll CMS >= 1.3.0)

White level drift compensation tries to counter luminance changes of a warming up display device. For this purpose, a white test patch is measured periodically, which increases the overall time needed for measurements.

Black level drift compensation tries to counter measurement deviations caused by black calibration drift of a warming up measurement device. For this purpose, a black test patch is measured periodically, which increases the overall time needed for measurements. Many colorimeters are temperature stabilised, in which case black level drift compensation should not be needed, but spectrometers like the i1 Pro or ColorMunki Design/Photo are not temperature compensated.

Choosing a colorimeter correction for a particular (wide-gamut) display

This can improve a colorimeters accuracy for a particular type of display, please also see “A note about colorimeters, wide-gamut displays and dispcalGUI”. You can import generic matrices from some other display profiling softwares as well as check the online Colorimeter Corrections Database for a match of your display/instrument combination (click the small globe next to the correction dropdown). A list of contributed correction matrices can also be found on the Argyll CMS website.

Please note this option is only available if using Argyll CMS >= 1.3.0 and a colorimeter.

Calibration settings

White point

Allows setting the target white point locus to the equivalent of a daylight or black body spectrum of the given temperature in degrees Kelvin, or as chromaticity co-ordinates. By default the white point target will be the native white of the display, and it's color temperature and delta E to the daylight spectrum locus will be shown during monitor adjustment, and adjustments will be recommended to put the display white point directly on the Daylight locus. If a daylight color temperature is given, then this will become the target of the adjustment, and the recommended adjustments will be those needed to make the monitor white point meet the target. Typical values might be 5000 for matching printed output, or 6500, which gives a brighter, bluer look. A white point temperature different to that native to the display may limit the maximum brightness possible.

If you want to find out the current uncalibrated whitepoint of your display, you can run “Report on uncalibrated display device” from the “Tools” menu to measure it.

If you want to adjust the whitepoint to the chromaticities of your ambient lighting, or those of a viewing booth as used in prepress and photography, and your measurement device has ambient measuring capability (e.g. like the i1 Pro or i1 Display with their respective ambient measurement heads), you can use the “Measure” button next to the whitepoint settings. If you want to measure ambient lighting, place the instrument upwards, beside the display. Or if you want to measure a viewing booth, put a metamerism-free gray card inside the booth and point the instrument towards it. Further instructions how to measure ambient may be available in your instrument's documentation.

White level

Set the target brightness of white in cd/m2. If this number cannot be reached, the brightest output possible is chosen, consistent with matching the white point target. Note that many of the instruments are not particularly accurate when assessing the absolute display brightness in cd/m2. NOTE that some LCD screens behave a little strangely near their absolute white point, and may therefore exhibit odd behavior at values just below white. It may be advisable in such cases to set a brightness slightly less than the maximum such a display is capable of.

If you want to find out the current uncalibrated white level of your display, you can run “Report on uncalibrated display device” from the “Tools” menu to measure it.

Black level

Can be used to set the target brightness of black in cd/m2 and is useful for e.g. matching two different screens with different native blacks to one another, by measuring the black levels on both (i.e. in the “Tools” menu, choose “Report on uncalibrated display”) and then entering the highest measured value. Normally you may want to use native black level though, to maximize contrast ratio. Setting too high a value may also give strange results as it interacts with trying to achieve the target “advertised” tone curve shape. Using a black output offset of 100% tries to minimize such problems.

Tone curve / gamma

The target response curve is normally an exponential curve (output = inputgamma), and defaults to 2.2 (which is close to a typical CRT displays real response). Four pre-defined curves can be used as well: the sRGB colorspace response curve, which is an exponent curve with a straight segment at the dark end and an overall response of approximately gamma 2.2, the L* curve, which is the response of the CIE L*a*b* perceptual colorspace, the Rec. 709 video standard response curve and the SMPTE 240M video standard response curve.

Note that a real display can't reproduce any of these ideal curves, since it will have a non-zero black point, whereas all the ideal curves assume zero light at zero input.

For gamma values, you can also specify wheter it should be interpreted relative, meaning the gamma value provided is used to set an actual response curve in light of the non-zero black of the actual display that has the same relative output at 50% input as the ideal gamma power curve, or absolute, which allows the actual power to be specified instead, meaning that after the actual displays non-zero black is accounted for, the response at 50% input will probably not match that of the ideal power curve with that gamma value (to see this setting, you have to go into the “Options” menu, and enable “Show advanced calibration options”).

To allow for the non-zero black level of a real display, by default the target curve values will be offset so that zero input gives the actual black level of the display (output offset). This ensures that the target curve better corresponds to the typical natural behavior of displays, but it may not be the most visually even progression from display minimum. This behavior can be changed using the black output offset option (see further below).

Also note that many color spaces are encoded with, and labelled as having a gamma of approximately 2.2 (ie. sRGB, REC 709, SMPTE 240M, Macintosh OS X 10.6), but are actually intended to be displayed on a display with a typical CRT gamma of 2.4 viewed in a darkened environment.
This is because this 2.2 gamma is a source gamma encoding in bright viewing conditions such as a television studio, while typical display viewing conditions are quite dark by comparison, and a contrast expansion of (approx.) gamma 1.1 is desirable to make the images look as intended.
So if you are displaying images encoded to the sRGB standard, or displaying video through the calibration, just setting the gamma curve to sRGB or REC 709 (respectively) is probably not what you want! What you probably want to do, is to set the gamma curve to about gamma 2.4, so that the contrast range is expanded appropriately, or alternatively use sRGB or REC 709 or a gamma of 2.2 but also specify the actual ambient viewing conditions via a light level in Lux, so that an appropriate contrast enhancement can be made during calibration. If your instrument is capable of measuring ambient light levels, then you can do so.
(For in-depth technical information about sRGB, see “A Standard Default Color Space for the Internet: sRGB” at the ICC[5] website for details of how it is intended to be used)

If you're wondering what gamma value you should use, you can run “Report on uncalibrated display device” from the “Tools” menu to measure the approximated overall gamma among other info. Setting the gamma to the reported value can then help to reduce calibration artifacts like banding, because the adjustments needed for the video card's gamma table should not be as strong as if a gamma further away from the display's native response was chosen.

Ambient light level

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

As explained for the tone curve settings, often colors are encoded in a situation with viewing conditions that are quite different to the viewing conditions of a typical display, with the expectation that this difference in viewing conditions will be allowed for in the way the display is calibrated. The ambient light level option is a way of doing this. By default calibration will not make any allowances for viewing conditions, but will calibrate to the specified response curve, but if the ambient light level is entered or measured (which you may also do during the interactive display controls portion of the calibration), an appropriate viewing conditions adjustment will be performed. For a gamma value or sRGB, the original viewing conditions will be assumed to be that of the sRGB standard viewing conditions, while for REC 709 and SMPTE 240M they will be assumed to be television studio viewing conditions.
By specifying or measuring the ambient lighting for your display, a viewing conditions adjustment based on the CIECAM02 color appearance model will be made for the brightness of your display and the contrast it makes with your ambient light levels.

Please note your measurement device needs ambient measuring capability (e.g. like the i1 Pro or i1 Display 2 with their respective ambient measurement heads) to measure the ambient light level.

Black output offset

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

Real displays do not have a zero black response, while all the target response curves do, so this has to be allowed for in some way.

The default way of handling this (equivalent to 100% black output offset) is to allow for this at the output of the ideal response curve, by offsetting and scaling the output values. This defined a curve that will match the responses that many other systems provide and may be a better match to the natural response of the display, but will give a less visually even response from black.

The other alternative is to offset and scale the input values into the ideal response curve so that zero input gives the actual non-zero display response. This ensures the most visually even progression from display minimum, but might be hard to achieve since it is different to the natural response of a display.

A subtlety is to provide a split between how much of the offset is accounted for as input to the ideal response curve, and how much is accounted for at the output, where the degree is 0.0 accounts for it all as input offset, and 100% accounts for all of it as output offset.

Black point correction

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

Normally dispcal will attempt to make all colors down the neutral axis (R=G=B) have the same hue as the chosen white point. Near the black point, red, green or blue can only be added, not subtracted from zero, so the process of making the near black colors have the desired hue, will lighten them to some extent. For a device with a good contrast ratio or a black point that has nearly the same hue as the white, this is not a problem. If the device contrast ratio is not so good, and the black hue is noticeably different to that of the chosen white point (which is often the case for LCD type displays), this could have a noticeably detrimental effect on an already limited contrast ratio. Here the amount of black point hue correction can be controlled.
By default a factor of 100% will be used, which is usually good for CRT and also by default a factor of 0% is used for LCD type displays, but you can override these with a custom value between 0% (no correction) to 100% (full correction).

If less than full correction is chosen, then the resulting calibration curves will have the target white point down most of the curve, but will then cross over to the native or compromise black point.

Black point correction rate (only available if using Argyll CMS >= 1.0.4)

(To see this setting, go into the “Options” menu, and enable “Show advanced calibration options”)

If the black point is not being set completely to the same hue as the white point (ie. because the factor is less than 100%), then the resulting calibration curves will have the target white point down most of the curve, but will then blend over to the native or compromise black point that is blacker, but not of the right hue. The rate of this blend can be controlled. The default value is 4.0, which results in a target that switches from the white point target to the black, moderately close to the black point. While this typically gives a good visual result with the target neutral hue being maintained to the point where the crossover to the black hue is not visible, it may be asking too much of some displays (typically LCD type displays), and there may be some visual effects due to inconsistent color with viewing angle. For this situation a smaller value may give a better visual result (e.g. try values of 3.0 or 2.0. A value of 1.0 will set a pure linear blend from white point to black point). If there is too much coloration near black, try a larger value, e.g. 6.0 or 8.0.

Calibration speed

Determines how much time and effort to go to in calibrating the display. The lower the speed, the more test readings will be done, the more refinement passes will be done, the tighter will be the accuracy tolerance, and the more detailed will be the calibration of the display. The result will ultimately be limited by the accuracy of the instrument, the repeatability of the display and instrument, and the resolution of the video card gamma table entries and digital or analogue output (RAMDAC).

Interactive display adjustment
Turning this off skips straight to calibration measurements instead of giving you the opportunity to alter the display's controls first. You will normally want to keep this checked, to be able to use the controls to get closer to the chosen target characteristics.

Profiling settings

Testchart file
You can choose the test patches used when profiling the display here. The default ones are automatically chosen based on profile quality and type, but you can also use and create your own using the built-in testchart editor (click on the colored patches next to the testchart file selector or choose “Edit testchart...” from the “File” menu to launch it).
Testchart editor

The provided default testcharts should work well in most situations, but allowing you to create custom charts ensures maximum flexibility when characterizing a display and can improve profiling accuracy and efficiency. See also optimizing testcharts.

You can enter the amount of patches to be generated for each patch type (white, gray, single channel, iterative and multidimensional cube steps). The iterative algorythm can be tuned if more than zero patches are to be generated. What follows is a quick description of the several available iterative algorythms, with “device space” meaning in this case RGB coordinates, and “perceptual space” meaning the (assumed) XYZ numbers of those RGB coordinates. The assumed XYZ numbers can be influenced by providing a previous profile, thus allowing optimized test point placement.

  • Optimized Farthest Point Sampling (OFPS) will optimize the point locations to minimize the distance from any point in device space to the nearest sample point
  • Incremental Far Point Distribution incrementally searches for test points that are as far away as possible from any existing points
  • Device space random chooses test points with an even random distribution in device space
  • Perceptual space random chooses test points with an even random distribution in perceptual space
  • Device space filling quasi-random chooses test points with a quasi-random, space filling distribution in device space
  • Perceptual space filling quasi-random chooses test points with a quasi-random, space filling distribution in perceptual space
  • Device space body centered cubic grid chooses test points with body centered cubic distribution in device space
  • Perceptual space body centered cubic grid chooses test points with body centered cubic distribution in perceptual space

You can set the degree of adaptation to the known device characteristics used by the default full spread OFPS algorithm. A preconditioning profile should be provided if adaptation is set above a low level. By default the adaptation is 10% (low), and should be set to 100% (maximum) if a profile is provided. But, if for instance, the preconditioning profile doesn't represent the device behavior very well, a lower adaption than 100% might be appropriate.

For the body centered grid distributions, the angle parameter sets the overall angle that the grid distribution has.

The “Limit samples to sphere” option is used to define an L*a*b* sphere to filter the test points through. Only test points within the sphere (defined by it's center and radius) will be in the generated testchart. This can be good for targeting supplemental test points at a troublesome area of a device. The accuracy of the L*a*b* target will be best when a reasonably accurate preconditioning profile for the device is chosen. Note that the actual number of points generated can be hard to predict, and will depend on the type of generation used. If the OFPS, device and perceptual space random and device space filling quasi-random methods are used, then the target number of points will be achieved. All other means of generating points will generate a smaller number of test points than expected. For this reason, the device space filling quasi-random method is probably the easiest to use.

Controls for the spreadsheet-like patch editor are as follows:

  • To select patches, click and drag the mouse over table cells, or hold SHIFT (select range) or CTRL/CMD (add/remove single cells/rows to/from selection)
  • To add a patch below an existing one, double-click a row label
  • To delete patches, select them, then hold CTRL (Linux, Windows) or CMD (Mac OS X) and hit DEL or BACKSPACE (will always delete whole rows even if only single cells are selected)
  • CTRL-C/CTRL-V/CTRL-A = copy/paste/select all

If you want to insert a certain amount of patches generated in a spreadsheet application (as RGB coordinates in the range 0.0-100.0 per channel), the easiest way to do this is probably to copy the values from the spreadsheet app, entering the testchart editor, generating a corresponding amount of patches and then overwriting them by doing CTRL-A, CTRL-V.

Profile quality
Sets the level of effort and/or detail in the resulting profile. For table based profiles (LUT[7]), it sets the main lookup table size, and hence quality in the resulting profile. For matrix profiles it sets the per channel curve detail level and fitting “effort”.
Profile type

Generally you can differentiate between two types of profiles: LUT[7] based and matrix based.

Matrix based profiles are smaller in filesize, somewhat less accurate (though in most cases smoother) compared to LUT[7] based types, and usually have the best compatibility across CMM[2]s, applications and systems — but only support the colorimetric intent for color transforms. For matrix based profiles, the PCS is always XYZ. You can choose between using individual curves for each channel (red, green and blue), a single curve for all channels, individual gamma values for each channel or a single gamma for all channels. Curves are more accurate than gamma values. A single curve or gamma can be used if individual curves or gamma values degrade the gray balance of an otherwise good calibration.

LUT[7] based profiles are larger in filesize, more accurate (but may sacrifice smoothness), in some cases less compatible (applications might not be able to use or show bugs/quirks with LUT[7] type profiles, or certain variations of them). When choosing a LUT[7] based profile type, advanced gamut mapping options become available which you can use to create perceptual and/or saturation tables inside the profile in addition to the default colorimetric tables which are always created.
L*a*b* or XYZ can be used as PCS, with XYZ being recommended especially for wide-gamut displays bacause their primaries might exceed the ICC[5] L*a*b* encoding range (Note: Under Windows, XYZ LUT[7] types are only available in dispcalGUI if using Argyll CMS >= 1.1.0 because of a requirement for matrix tags in the profile, which are not created by prior Argyll CMS versions).
As it is hard to verify if the LUT[7] of an combined XYZ LUT[7] + matrix profile is actually used, you may choose to create a profile with a swapped matrix (which I'd recommend), ie. blue-red-green instead of red-green-blue, so it will be obvious if an application uses the (deliberately wrong) matrix instead of the (correct) LUT because the colors will look very wrong (e.g. everything that should be red will be blue, green will be red, blue will be green, yellow will be purple etc).

Note: LUT[7]-based profiles (which contain three-dimensional LUTs) might be confused with video card LUT[7] (calibration) curves (one-dimensional LUTs), but they're two different things. Both LUT[7]-based and matrix-based profiles may include calibration curves which can be loaded into a video card's gamma table hardware.

Advanced gamut mapping options

Normally, profiles created by dispcalGUI only incorporate the colorimetric rendering intent, which means colors outside the display's gamut will be clipped to the next in-gamut color. LUT-type profiles can also have gamut mapping by implementing perceptual and/or saturation rendering intents. You can choose if and which of those you want after clicking “Advanced...”, by specifying a source profile and marking the appropriate checkboxes. Note that a input, output, display or device colororspace profile should be specified as source, not a non-device colorspace, device link, abstract or named color profile. You can also choose viewing conditions which describe the intended use of both the source and the display profile that is to be generated. An appropriate source viewing condition is chosen automatically based on the source profile type.

For more information on why a source gamut is needed, see “About ICC profiles and Gamut Mapping” in the Argyll CMS documentation.

One strategy for getting the best perceptual results with display profiles is as follows: Select a CMYK profile as source for gamut mapping. Then, when converting from another RGB profile to the display profile, use relative colorimetric intent, and if converting from a CMYK profile, use the perceptual intent.
Another approach which especially helps limited-gamut displays is to choose one of the larger (gamut-wise) source profiles you usually work with for gamut mapping, and then always use perceptual intent when converting to the display profile.

Please note that not all applications support setting a rendering intent for display profiles and might default to colorimetric (e.g. Photoshop normally uses relative colorimetric with black point compensation, but can use different intents via custom soft proofing settings).

Black point compensation

This effectively prevents black crush when using the profile, but at the expense of accuracy. (Note: This option has no effect if just calibrating and creating a simple curves + matrix profile directly from the calibration data without additional profiling measurements)

Profile name

As long as you do not enter your own text here, the profile name is auto generated from the chosen calibration and profiling options. The current auto naming mechanism creates quite verbose names which are not necessarily nice to read, but they can help in identifying the profile.
Also note that the profile name is not only used for the resulting profile, but for all intermediate files as well (filename extensions are added automatically) and all files are stored in a folder of that name. You can choose where this folder is created by clicking the disk icon next to the field (it defaults to your system's default location for user data).

Here's an example under Linux, on other platforms some file extensions and the location of the home directory will differ (you can mouse over the filenames to get a tooltip with a short description what the file is for):

Chosen profile save path: ~/.local/share/dispcalGUI/storage

Profile name: mydisplay

The following folder will be created: ~/.local/share/dispcalGUI/storage/mydisplay

During calibration & profiling the following files will be created:

~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.all.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.cal
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.colprof.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispcal.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispread.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.dispwin.sh
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.icc
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.ti1
~/.local/share/dispcalGUI/storage/mydisplay/mydisplay.ti3

(the .sh files can be used to re-run without GUI[4] but same settings from a shell)

Calibrating / profiling

If you are unclear about the difference between calibration and profiling (also called characterisation), see “Calibration vs. Characterization” in the Argyll CMS documentation.

Please let the screen stabilize for at least half an hour after powering it up before doing any measurements or assessing its color properties. The screen can be used normally with other applications during that time.

After you have set your options, click on one of the three buttons at the bottom to start the actual calibration/profiling process. The main window will hide during measurements, and should pop up again after they are completed (or after an error). You can always cancel out of running measurements using the “Cancel” button in the progress dialog, or by pressing ESC or Q. Viewing the informational log window (from the “Tools” menu) after measurements will give you access to the raw output of the Argyll CMS commandline tools and other verbose information.

Adjusting a display before calibration

If you clicked “Calibrate” or “Calibrate & profile” and have not turned off “Interactive display adjustment”, you will be presented with the interactive display adjustment window which contains several options to help you bring a display's characteristics closer to the chosen target values. Depending on wheter you have a CRT- or LCD-type display, I will try to give some recommendations here which options to adjust, and which to skip.

Adjusting a LCD display

For LCD displays, you will in most cases only want to adjust white point (if the screen has RGB gain or other whitepoint controls) and white level (with the white level also affecting the black level unless you have a local dimming LED model), as many LCDs lack the necessary “offset” controls to adjust the black point (and even if they happen to have them, they often change the overall color temperature, not only the black point). Also note that for most LCD screens, you should leave the “contrast” control at (factory) default.

White point
If your screen has RGB gain, colortemperature or other whitepoint controls, the first step should be adjusting the whitepoint. Note that you may also benefit from this adjustment if you have set the target whitepoint to “native”, as it will allow you to bring it closer to the daylight or blackbody locus, which can help the human visual system to better adapt to the whitepoint. Look at the bars shown during the measurements to adjust RGB gains and minimize the delta E to the target whitepoint.
White level
Continue with the white level adjustment. If you have set a target white level, you may reduce or increase the brightness of your screen (ideally using only the backlight) until the desired value is reached (i.e. the bar ends at the marked center position). If you haven't set a target, simply adjust the screen to a visually pleasing brightness that doesn't cause eye strain.
Adjusting a CRT display
Black level
On CRTs, this adjustment is done using the “brightness” control. You may reduce or increase the brightness of your screen until the desired black level is reached (i.e. the bar ends at the marked center position).
White point
The next step should be adjusting the whitepoint, using the display's RGB gain controls or other means of adjusting the whitepoint. Note that you may also benefit from this adjustment if you have set the target whitepoint to “native”, as it will allow you to bring it closer to the daylight or blackbody locus, which can help the human visual system to better adapt to the whitepoint. Look at the bars shown during the measurements to adjust RGB gains and minimize the delta E to the target whitepoint.
White level
Continue with the white level adjustment. On CRTs this is done using the “contrast” control. If you have set a target white level, you may reduce or increase contrast until the desired value is reached (i.e. the bar ends at the marked center position). If you haven't set a target, simply adjust the screen to a visually pleasing level that doesn't cause eye strain.
Black point
If your display has RGB offset controls, you can adjust the black point as well, in much the same way that you adjusted the whitepoint.
Finishing adjustments (CRT/LCD) and starting calibration/characterisation

After the adjustments, you can run a check on all the settings by choosing the last option from the left-hand menu to verify the achieved values. If adjusting one setting adversely affected another, you can then simply repeat the respective option as necessary until the target parameters are met.

Finally, select “Continue on to calibration” to start the non-interactive part. You may want to get a coffee or two as the process can take a fair amount of time, especially if you selected a high quality level. If you only wanted help to adjust the display and don't want/need calibration curves to be created, you can also choose to exit by closing the interactive display adjustment window and then select “Profile only” from the main window.
If you originally selected “Calibrate & profile” and fulfil the requirements for unattended calibration & profiling, the characterisation measurements for the profiling process should start automatically after calibration is finished. Otherwise, you may be forced to take the instrument off the screen to do a sensor self-calibration before starting the profiling measurements.

Optimizing testcharts for improved profiling accuracy and efficiency

A good way to generate a custom testchart to improve profiling is to use one of the default testcharts as base, altering the parameters as necessary and desired. Especially the use of an existing display profile to precondition generated test patches for improved profiling performance is recommended. You could go about this in the following way:

  • When calibrating, choose “just calibrate” and the option to create a fast curves + matrix profile.
  • After calibration, select a testchart to use as base (preferably one of the optimized ones) and bring up the testchart editor.
  • Place a check in the “preconditioning profile” checkbox and click on “current profile”. It should automatically select the curves + matrix profile that was created during calibration. Make sure adaptation is set to a high level (e.g. 100%)
  • If desired, adjust the number of patches and make sure the iterative patches amount is not zero.
  • Create the chart and save it. Click “yes” when asked to select the newly generated chart.
  • Start the profiling measurements (e.g. click “profile only”).

Profile installation

When installing a profile after creating or updating it, a startup item to load its calibration curves automatically on login will be created (on Windows and Linux, Mac OS X does not need a loader). You may also prevent this loader from doing anything by removing the check in the “Load calibration curves on Login” checkbox in the profile installation dialog, and in case you are using Windows 7 or later, you may let the operating system handle calibration loading instead (to be able to change this option, you need to run dispcalGUI as administrator).

Advanced functions

Remote measurements and profiling

When using Argyll CMS 1.4.0 and newer, remote measurements on a device not directly connected to the machine that is running dispcalGUI is possible (e.g. a smartphone or tablet). The remote device needs to be able to run a web browser (Firefox recommended), and the local machine running dispcalGUI may need firewall rules added or altered to allow incoming connections. To set up remote profiling, select “Web @ localhost” from the display device dropdown menu, then choose the desired action (e.g. “Profile only”). When the message “Webserver waiting at http://<IP>:<Port>” appears, open the shown address in the remote browser and attach the measurement device.
NOTE: If you use this method of displaying test patches, there is no access to the display video LUT[7]s and hardware calibration is not possible. The colors will be displayed with 8 bit per component precision, and any screen-saver or power-saver will not be automatically disabled. You will also be at the mercy of any color management applied by the web browser, and may have to carefully review and configure such color management.
NOTE: Close the web browser window or tab after each run, otherwise reconnection may fail upon further runs.

Untethered display measurements

Untethered mode is another option to measure and profile a remote display that is not connected via standard means (calibration is not supported). To use untethered mode, the testchart that should be used needs to be optimized, then exported as image files (via the testchart editor) and those image files need to be displayed on the device that should be measured, in successive order. The procedure is as follows:

  • Select the desired testchart, then open the testchart editor.
  • Click “Optimize for untethered in auto mode”, then export the testchart.
  • Burn the images to a DVD, copy them on an USB stick or use any other available means to get them to display onto the device that should be measured.
  • In dispcalGUI's display dropdown, select “Untethered” (the last option).
  • Show the first image on the remote display, and attach the instrument. Then select “Profile only”.

Measurements will commence, and changes in the displayed image should be automatically detected if “auto” mode is enabled. Use whatever means available to you to cycle through the images from first to last, carefully monitoring the measurement process and only changing to the next image if the current one has been successfully measured (as will be shown in the untethered measurement window). Note that untethered mode will be (atleast) twice as slow as normal display measurements.

Known issues and solutions

General: Wacky image colors (swapped colors)
Solution: This happens when you created a “XYZ LUT + swapped matrix” profile and is a way to alert you that the software you're using does not support XYZ LUT profiles and falls back to the included matrix (which generally means you'd loose accuracy). If you're having this situation only in some applications, creating a “XYZ LUT + matrix” profile will remedy it (but please keep in mind that those applications not supporting XYZ LUT will still fall back to the matrix, so results can be different from applications that support XYZ LUT correctly). If all colormanaged applications you use show swapped colors, you should create a matrix profile instead. Note that you do not have to re-run any measurements: In dispcalGUI, choose a profile type as suggested previously, adjust quality and profile name if you want, then choose “Create profile from measurement data...” in the “Options” menu and select the profile you had the issue with.
General: Measurements are failing (“Sample read failed”) if using the “Allow skipping of spectrometer self-calibration” option and/or highres/adaptive mode
Solution: Disable either or all of the above options. The problem seems to mainly occur with the ColorMunki.
MS Windows/madVR: “The process <dispcal.exe|dispread.exe> has stopped working” / “Calibration / profiling has not been finished”
Solution: Copy the file madHcNet32.dll from your madVR folder to the Argyll CMS binaries folder (e.g. Argyll_VX.X.X\bin).
Windows: “The process <dispcal.exe|dispread.exe|...> could not be started.”
Solution: Go to your Argyll_VX.X.X\bin directory, and right-click the exe file from the error message. Select “Properties”, and then if there is a text on the “General” tab under security “This file came from another computer and might be blocked”, click “Unblock”.
Photoshop: “The monitor profile […] appears to be defective. Please rerun your monitor calibration software.”
Solution: Adobe ACE, Adobe's color conversion engine, contains monitor profile validation functionality which attempts to filter out bad profiles. With XYZ LUT profiles created in Argyll CMS versions up to 1.3.2, the B2A white point mapping is sometimes not particularly accurate, just enough so that ACE will see it as a problem, but in actual use it may only have little impact that the whitepoint is a bit off. So if you get a similar message when launching Photoshop, with the options “Use profile regardless” and “Ignore profile”, you may choose “Use profile regardless” and check visually or with the pipette in Photoshop if the inaccurate whitepoint poses a problem. This issue is fixed in Argyll CMS 1.3.3 and newer. Alternatively, you can create a Lab LUT profile.
MS Windows Vista: The calibration gets unloaded when a User Access Control prompt is shown
Solution: (Intel and Intel/AMD hybrid graphics users please see “The Calibration gets unloaded after login/resume/User Access Control prompt” first) This Windows Vista bug seems to have been fixed under Windows 7, and can be remedied under Vista by either manually reloading calibration, or disabling UAC—but please note that you sacrifice security by doing this. To manually reload the calibration, either open dispcalGUI and select “Load calibration curves from current display profile” in the “Options” menu, or (quicker) open the Windows start menu and select “dispcalGUI Profile Loader” in the “Startup” subfolder. To disable UAC[9] (not recommended!), open the Windows start menu and enter “msconfig” in the search box. Click on the Tools tab. Select the line “Disable UAC” and click the “Launch” button. Close msconfig. You need to reboot your system for changes to apply.
MS Windows with Intel graphics (also Intel/AMD hybrid): The Calibration gets unloaded after login/resume/User Access Control prompt
Solution: The Intel graphics drivers contain several utilities that interfere with correct calibration loading. A workaround is to rename, move or disable (e.g. using a tool like AutoRuns) the following files:
C:\Windows\system32\igfxtray.exe
C:\Windows\system32\igfxpph.dll
C:\Windows\system32\igfxpers.exe
MS Windows Vista and 7: The display profile isn't used if it was installed for the current user
Solution: Open the Windows start menu, select “Control Panel”, then “Color Management” (you may have to select “Classic View” under Vista and anything other than “Category View” under Windows 7 to see it). Under the “Devices” tab, select your display device, then tick “Use my settings for this device”.
MS Windows: Enabling the Spyder 2 colorimeter might fail when not running as administrator
Solution: Run dispcalGUI as admin. Right-click dispcalGUI's icon and choose “Run as administrator...”
MS Windows: Installing a display profile system-wide might fail when not running as administrator
Solution: Run dispcalGUI as admin. Right-click dispcalGUI's icon and choose “Run as administrator...”
MS Windows Vista and 7, 64-bit: Driver signature enforcement prevents the installation of unsigned Argyll USB drivers
Solution: Please upgrade to Argyll CMS 1.2.0 or later. For prior versions, signing the Argyll drivers or disabling driver signature enforcement altogether on each boot was needed to successfully use the drivers. Such workarounds are no longer needed with recent versions of Argyll CMS which include drivers that will work out-of-the-box (if you already have drivers for your measurement device installed, see “Updating Argyll drivers” under “Installing Argyll CMS on Microsoft Windows” in the Argyll CMS documentation if you use a prior version of the Argyll drivers, or “Adding Argyll drivers to existing drivers” if you are using vendor drivers).
MS Windows 7: Calibration does not load automatically on login when not using the dispcalGUI Profile Loader
Solution: Open the Windows start menu, select “Control Panel”, then “Color Management” (you may have to select something other than “Category View” to see it). Select the “Advanced” tab, then “Change system defaults...”, and finally tick the “Use Windows display calibration” checkbox.
MS Windows XP, multiple displays: One profile is used by all displays connected to a graphics card
Solution: The underlying issue is that Windows XP assigns color profiles per (logical) graphics card, not per output. Most XP graphics drivers present only one logical card to the OS even if the card itself has multiple outputs. There are several possible solutions to this problem:
  • Use different graphics cards and connect only one display to each (this is probably the preferable solution in terms of ease of use and is least prone to configuration error)
  • Install and use the Windows XP color control applet
  • Some graphics cards, like the Matrox Parhelia APV (no longer produced), will expose two logical cards to the OS when using a specific vendor driver (some older ATI drivers also had this feature, but it seems to have been removed from newer ones)
Mac OS X: dispcalGUI.app is damaged and can't be opened.
Solution: Go to the “Security & Privacy” settings in System Preferences and set “Allow applications downloaded from” (under the “General” tab) to the “Anywhere” setting. After you have successfully launched dispcalGUI, you can change the setting back to a more secure option and dispcalGUI will continue to run properly.
Photoshop CS3 (Mac OS X): Under Mac OS X, the brush cursor in Photoshop CS3 looks funny (box around brush)
Solution: This seems to be a bug which shows with LUT[7]-type profiles that have only one rendering intent. You can try to overcome it by selecting “Advanced...” next to the profile type dropdown, selecting an existing ICC[5] profile as source (for hints as to which profile to select, see “Advanced gamut mapping options”) and tick at least one of the “Apply gamut mapping to” checkboxes before profiling. To do that for an existing profile, adjust quality and profile name if you want, choose “Create profile from measurement data...” from the “Options” menu and select the profile. Note that this does not always solve the issue. Trying another profile type (XYZ LUT instead of L*a*b* LUT) might also help.
Linux/Windows: No video card gamma table access (“Calibrate only” and “Calibrate & profile” buttons grayed, “Profile only” button available)
Solution: Under Linux, please refer to the Argyll CMS documentation, “Installing the software on Linux with X11” and “Note on X11 multi-monitor setups” / “Fixing access to Video LUTs” therein. Under Windows, please also see the solution posted under “The display profile isn't used if it was installed for the current user” if you are using Windows 7 and make sure you have a recent driver for your video card installed.
Linux (KDE): The application does not look native
Solution: You can use the GTK-Qt Theme Engine for native KDE look. Most Linux distributions offer ready-made packages through their packaging systems, search for “gtk-qt”. Another alternative is gtk-kde4. Also, some themes come in versions for both KDE (Qt) and GTK.
Linux: Instrument not working correctly/constantly disconnecting (conflict with libmtp)
Solution: There is a bug on some systems with libmtp that causes instruments to continuously switch between connected and disconnected state. This seems to be a bug in libmtp-runtime. You can work around it by renaming /lib/udev/mtp-probe or updating to libmtp 1.0.6 where the issue should be fixed.
General: Some text is still in english, even though another language is selected in the menu
Solution: All output from the Argyll CMS utilities is always english, and on Mac OS X, also the menuitems in the application menu. This is currently not changeable.

Get help

Need help with a specific task or problem? It may be a good idea to first check the known issues & solutions if the topic has been covered. If you want to report a bug, please see the guidelines on bug reporting. Otherwise, feel free to use one of the following channels:

Report a bug

Found a bug? If so, please first check the bug tracker, it may have been reported already. Please follow these guidelines for reporting bugs:

  • Try to give a short, but concise summary of the problem.
  • Try to give some steps to reproduce the problem.
  • Always attach logfiles if possible. They are usually automatically created by dispcalGUI as part of normal program operation. You can find them here:
    • Linux: /home/Your Username/.local/share/dispcalGUI/logs
    • Mac OS X: /Users/Your Username/Library/Logs/dispcalGUI
    • Windows Vista and newer: C:\Users\Your Username\AppData\dispcalGUI\logs
    • Windows XP: C:\Documents and Settings\Your Username\Application Data\dispcalGUI\logs

    As the folder may contain several logfiles, it is a good idea to compress the whole folder to a ZIP or tar.gz archive that you can easily attach to a bug report.

    Please note the logfiles may contain your username as well as paths of files you may have used in dispcalGUI. I will respect your privacy at all times, but you may want to consider this when attaching logfiles to public places like the bug tracker.

Create a new ticket (or if the bug has been reported already, use the existing ticket) at the bug tracker, following the guidelines above, and attach the logfiles archive.

If you don't want to or can't use the bug tracker, feel free to use one of the other support channels.

Discussion

Do you want to get in touch with me or other users regarding dispcalGUI or related topics? The general discussion forum or dispcalGUI-users mailing list is a good place to do so. You can also contact me directly via E-Mail: dispcalGUI ‹at› hoech . net.

To-Do / planned features (in no particular order)

  • (Long-term) improve UI.
  • Better interface to GNOME Color Manager (implemented in v0.8.1.0+)
  • Measure and report on screen homogenity / evenness of illumination
  • Get rid of the terminal and implement a proper GUI for the interactive part of calibration (implemented in v0.8.5.6+)
  • Better user interface for profile verification: If a test set contains multiple value formats (CMYK, RGB, XYZ, L*a*b*), allow selection which one(s) should be used in a “setup” window (“setup” window implemented in v1.5.6.9+, value format selection added in v1.6.3.5)
  • Add gamut coverage percentages to the profile verification report if the test set contains reference values (not *.ti1): Calculate profiles from test set and verification measurements on-the-fly and create gamut volumes from test set profile, evaluated profile, and verification measurements profile using Argyll's iccgamut tool. Compare gamut volumes using Argyll's viewgam tool with -i option and include the results in the report (coverage calculation for test set reference and profile to be evaluated could be done before the actual measurements and also shown in the yet-to-be-implemented profile verification “setup” window).
  • Complete the documentation in the README
  • German language README (postponed)
  • Profile verification (feed XYZ or L*a*b* to display profile, display corresponding RGB values, measure, output Delta E) (implemented in v0.3.6+)
  • “Before” / “After” switch when calibration / profiling complete (implemented in v0.2+)
  • Store all settings in profile, allow loading of settings from profile in addition to .cal file (implemented in v0.2+)
  • Document the code (code documentation could still be enhanced, for now it'll do)
  • Code cleanup (mostly done)

Thanks and acknowledgements

I would like to thank the following people:

Graeme Gill, for creating Argyll CMS

Translators: Loïc Guégant (french translation), Roberto Quintero (spanish translation), Tommaso Schiavinotto (italian translation)

Recent donors: Andrew Hunter, Yulian Martsenkov, Catherine Goniot, Ben Edwards, Ievgen Morskyi, Ahammed Umminiyil, LivingWithBugs.com, Christoph Clarenbach, Paul Fokkens, Kieren Hinch, Dale Somerville, Francesco Demontis, Projection Mapping Central, Scott Janz, Govindanunny Thekkadath, Nejib Boubaker, Mason Livingston, Daniel Lenardon, Manuel López Pérez, Xavier Potel, Andrew Hunter, Thomas Voigt, Александр Ольховский, Eugeniy Yurov, Hans Cremers, George Pop, Michael Gestgrasser, Stefan Pallari, Oliver Hoefele, Kyle Winfree, more...

And everyone who sent me feedback or bug reports, suggested features, or simply uses dispcalGUI.

Acknowledgements

Part of the comprehensive Argyll CMS documentation has been used in this document, and was only slightly altered to better fit dispcalGUI's behavior and notations.

Version history / changelog

${DATE} ${TIME} (UTC) ${VERSION}

${VERSION}

Added in this release:

  • A new option to not use the video card gamma table to apply calibration (default like in 1.5.2.5/1.5.3.1: On for madVR, off for everything else).
  • Correlated color temperature, gamma, RGB gray balance and gamut graphs to measurement report.
  • Re-added the default testchart for gamma + matrix profiles.
  • Testchart editor: Dark region emphasis controls (Argyll CMS 1.6.2).
  • Testchart editor: Black patches amount control (Argyll CMS 1.6).
  • Testchart editor: Ability to add saturation sweeps and reference patches (from CGATS or images) to a testchart if using a preconditioning profile and adaptation = 100%.
  • Standalone curve viewer. This allows to view the curves of the currently assigned display profile or the actual video card gamma table without launching dispcalGUI.
  • Curve viewer can reload, apply black point compensation to, load into the videocard, and export calibration files.

Changed in this release:

  • Untethered measurements window: Enable keyboard navigation in the grid view (up/down/pageup/pagedown/home/end keys).
  • Measurements are now pauseable.
  • Cancelling a potentially long-running operation like measurements or profile generation now needs to be confirmed.
  • Improved robustness of ambient measurement code.
  • Show an error message when communication with the instrument fails (instead of just logging the error).
  • Show an error message when trying to measure ambient light and ambient measurements are unsupported (instead of just logging the error).
  • Regenerated testcharts preconditioned by gamma-based profiles with slight dark region emphasis.
  • Updated french translation (thanks to Loïc Guégant).
  • “Allow skipping of spectrometer calibration” will now always try to skip spectrometer calibration if enabled, not just when doing a calibration and subsequent profile in one go (“Calibrate & profile”). This means a calibration timeout will then be in effect (which is 60 minutes for the ColorMunki Design/Photo, i1 Pro and i1 Pro 2), and a recalibration will only be needed if this timeout has been exceeded before the start of an operation.
  • Testchart VRML export: Only use Bradford chromatic adaptation if ACCURATE_EXPECTED_VALUES in the .ti1 file is true (i.e. a preconditioning profile was used), otherwise XYZ scaling (to visually match VRML files generated by Argyll CMS).
  • Renamed “Verify profile” to “Measurement report”. Added options for BT.1886 gamma mapping, whitepoint simulation, (limited) support for device link profiles, and madVR color management (3D LUTs). Overhauled report HTML layout and style.
  • Use nicer filenames and titles for HTML reports and uniformity check (e.g. include the display name for which the report was generated).
  • Improved dealing with profile linking errors during 3D LUT generation (show error dialog instead of just logging the error).
  • Always use a cLUT resolution of 65 and don't preserve device curves for 3D LUT generation, regardless of the selected 3D LUT format or size (this should make results consistent between eeColor/madVR, which were always generated like that, and the other formats).
  • Allow the use of PC levels for madVR 3D LUT output encoding.
  • Synchronize input and output encoding for eeColor 3D LUT format.
  • Disable xvYCC output encoding (not supported) and consequently disable it also as input encoding for eeColor because it needs the same input/output encoding.
  • Allow loading of calibration files that do not contain settings.
  • Testchart editor: Combined patch ordering controls.
  • Testchart editor: Vastly enhanced performance of row delete operations on very large testcharts (several thousand patches). Also slightly improved speed of testchart loading.
  • Measurement report charts: Each larger chart contains all the patches from the previous smaller chart. Re-generated video charts preconditioned to Rec. 709 and with slight dark region emphasis.
  • Windows 7 and up: Prefer dispcalGUI profile loader over calibration loading facility of the OS (the latter introduces quantization artifacts and applies wrong scaling, the former uses Argyll CMS and thus doesn't have these problems).
  • Windows: Do not regard unability to determine startup folders as fatal error (this means an autostart entry to load calibration on login can not be created automatically in that case though, so unless Windows 7 or newer is used which has the ability to load calibration without external utilities, calibration needs to be loaded manually).
  • Windows/madVR: Always reset the video card gamma table to linear when using a calibration file and not using the video card gamma table to apply the calibration (this should prevent the potential problem of double calibration being applied if loading a calibration on a display, then switching over to madVR on the same display and using a calibration file while not using the video card gamma table to apply the calibration).

Fixed in this release:

  • A possible unicode decode error when the computer name contains non-ASCII characters, introduced in 1.5.2.5.
  • In some instances the handling of profile name placeholders was quirky (problematic character sequences were those consisting of the same characters, case insensitive, as calibration speed or profile quality shortcodes, i.e. FxF, MxM, SxS, VFxVF and VSxVS, with x being any non alphanumeric character).
  • When loading a settings file, only switch to the associated display device if it can be unambiguously determined (fixes multi-screen setups with identical screens always switching to the first one, a bug introduced in 1.5.2.5).
  • Ignore messages from the logging module (fixes a bogus error message being displayed under Windows when closing dispcalGUI, introduced in 1.5.2.5).
  • Handling of separate video card gamma table access controls was a bit quirky since the addition of virtual display devices.
  • If the 3D LUT target profile was overwritten by the generated device link profile (which could happen if choosing the same path and file name for the 3D LUT/device link profile as the target profile), it prevented changing the source profile.
  • Instrument (spectrometer) calibration can be required multiple times during a calibration run, depending on its duration. This was not handled correctly by the GUI.
  • 3D LUT generation with TV RGB 16-235 encoding could lead to wrongly encoded 3D LUTs if not using the eeColor or madVR format.
  • 3D LUT generation with YCbCr encodings failed with an error if not using the eeColor or madVR format.
  • Standalone utilities (3D LUT maker, curve viewer, profile information, and testchart editor) now function properly even if dispcalGUI itself was never launched before (previously the Argyll CMS version was read from the configuration, so if it was never configured before it could happen that not all available options where shown or it was never asked to select an Argyll CMS executable directory in case the Argyll CMS executables were not found).
  • Don't block other windows when an operation fails while a progress dialog with a modal dialog on top is shown.
2013-10-23 20:09 (UTC) 1.5.3.1

1.5.3.1

Added in this release:

  • New feature: When creating a profile from existing measurement data, averaging of measurements can be performed by selecting multiple files.

Fixed in this release:

  • Fixed possible unicode error in logging module.
  • Fixed a bug with optimizing a testchart for untethered measurements halving the amount of different device combinations by repeating patches if the total patch count was even.
  • Mac OS X 10.6: Fixed weird behavior due to a bug in OS X 10.6's version of sudo.
2013-10-22 14:32 (UTC) 1.5.2.5

1.5.2.5

Added in this release:

  • Full Argyll CMS 1.6.0 support (e.g. JETI specbos 1211/1201, madVR calibration and 3D LUT generation, body centered cubic grid option for creating testcharts).
  • Testchart editor: Charts can be exported as PNG or TIFF files.
  • Testchart editor: Gamma and neutral axis emphasis controls.
  • Testchart editor: “Use current profile as preconditioning profile” button.
  • Testchart editor: Save VRML diagnostic files for testcharts without the need to re-generate the chart.
  • Testchart editor: Sort patches by L*, RGB, sum of RGB or sort RGB gray and white to top.
  • Untethered display measurement and profiling. Be sure to read the note on optimizing testcharts for untethered measurements in automatic mode.
  • Shortcut for the BT.1886 tone curve (previously available by setting gamma to 2.4, absolute, and black output offset to zero).
  • 3D LUT: Enable additional intents.
  • 3D LUT: Support eeColor and Pandora LUT formats.
  • 3D LUT: Support Argyll CMS 1.6 video encodings and BT.1886 gamma mapping.
  • Windows 8 Argyll CMS driver installation instructions to the ReadMe.
  • Instructions how to proceed when a process cannot be started to the ReadMe.
  • Softproof preset (based on FOGRA recommendation).
  • madVR preset.
  • sRGB preset.
  • Allow specifying extra arguments for Argyll's targen command.
  • Computer name, EDID serial and EDID CRC32 placeholders for use in the profile name.
  • Synthetic profile creation facility (e.g. for use as source in 3D LUT generation).
  • ACES RGB and DCI P3 colorspace definitions and reference profiles.
  • Dry run. If enabled in the options menu, all functionality that calls Argyll CMS executables will effectively do nothing. This allows review of the used command line parameters by checking the log.
  • Additional session logs are saved for most operations involving the Argyll tools (i.e. directly in the folder where created files are saved to).
  • Show profile self check ΔE*76 info in profile installation dialog.

Changed in this release:

  • Testchart and preset improvements:
    • All testcharts for LUT profiles have been complemented with additional single channel patches. This should in most cases improve average and maximum delta E of generated profiles, in some cases significantly. In fact, testing has shown that the new “small testchart for LUT profiles” with 154 patches total yields better results than the previous “extended testchart for LUT profiles” with 238 patches.
    • The charts for curves + matrix profiles have been improved by adding a few additional body centered cubic grid patches - all the charts which are not tuned for a certain display type are body centered cubic grid based (this was also the case previously for the LUT testcharts, but not for the matrix charts).
    • The patch order in the LUT charts has been optimized to improve measurement speed.
    • The chart for gamma + matrix profiles has been removed in favor of the updated default chart for matrix profiles.
    • New additional charts for LUT profiles have been added in various sizes.
    • For each of the new charts for LUT profiles, starting from the “very large” size, optimized farthest-point-sampled versions have been added which are pre-conditioned for several common display types: sRGB tone response with Rec. 709 primaries and D65 whitepoint (consumer-grade displays), gamma 2.2 with Rec. 709 primaries and D65 whitepoint (consumer-grade displays, TVs), gamma 2.2 with AdobeRGB primaries and D65 whitepoint (entry-level and high-end graphics displays), L* tone response with NTSC primaries and D50 whitepoint (high-end graphics displays).
    • The naming and patch count of the testcharts for LUT profiles has changed. The mapping that most closely resembles the old testcharts is as follows (total number of patches in parentheses):
      • Old “Default testchart for LUT profiles” (124) → new “Small testchart for LUT profiles” (154)
      • Old “Extended testchart for LUT profiles” (238) → new “Default testchart for LUT profiles” (270)
      • Old “Large testchart for LUT profiles” (396) → new “Extended testchart for LUT profiles” (442)
      • Old “Very large testchart for LUT profiles” (912) → new “Very large testchart for LUT profiles” (994)
      • Old “Massive testchart for LUT profiles” (2386) → new “Massive testchart for LUT profiles” (2527)
    Use of the new charts is highly recommended. All presets have been updated to use the new chart types. The “prepress" preset has also been updated to generate a XYZ LUT profile by default.
  • Detect if the instrument can use CCMX or CCSS colorimeter corrections based on the measurement mode. Disable colorimeter corrections for non-base display types.
  • Correctly map measurement mode to DISPLAY_TYPE_BASE_ID for all supported instruments when creating CCMX.
  • If a colorimeter correction with DISPLAY_TYPE_BASE_ID or DISPLAY_TYPE_REFRESH is selected, automatically set the correct measurement mode.
  • If measuring the colorimeter correction testchart, automatically ensure a suitable measurement mode for colorimeters (if they support more than refresh and non-refresh measurement modes).
  • Do not use spline interpolation for curve plots.
  • Updated french translation, thanks to Loïc Guégant.
  • Renamed calibration quality to calibration speed.
  • Set calibration speed for all presets to medium.
  • Standalone testchart editor: Parse first non-option argument as file to be opened.
  • Testchart editor: Always generate good optimized points rather than fast.
  • Testchart editor: Use existing file path when saving testchart.
  • Testchart editor: Greatly improved the speed of paste operations when comparatively large data sets are used.
  • Disallow -d and -D as extra arguments for Argyll's targen as the testchart editor only supports video RGB.
  • Reset adaptive measurement mode when restoring defaults.
  • Close all profile information windows when hiding the main window instead of just hiding them (don't reopen them when the main window is shown again).
  • Curve viewer: Use float formatting for input RGB display.
  • Only skip legacy serial ports if no instrument detected.
  • Also specify Argyll dispcal/dispread -y parameter for spectrometers.
  • Use Rec. 709 whitepoint chromaticity coordinates for “Video” preset.
  • Changed profile installation error message for virtual display devices.
  • Make it clearer which calibration is used when doing a “Profile only”: When a calibration file is going to be used, change the message from the warning “The current calibration curves will be used” to the informational “The calibration file <x> will be used” with the usual options to embed/not embed/reset video card gamma table.
  • Allow the use of calibration curves when profiling a web display.
  • When creating a colorimeter correction from profile(s), get the instrument name from the embedded TI3 if the data source is not EDID.
  • Do not specify (superfluous and thus ignored) patch window positioning arguments for dispcal/dispread when using a virtual display.
  • 3D LUT: Removed black point compensation option (no longer easily possible because it now uses Argyll's collink internally. You can still have the effect of BPC by creating a display profile with BPC enabled and using it as destination profile during 3D LUT creation).
  • Always copy/move temporary files to the save location if not a dry run, also in case of an error. If copy/move fails, keep them in the temporary directory and inform the user.
  • Disable black point compensation for the “Prepress” preset (there are three presets without bpc - “madVR”, “Prepress” and “Softproof”) and use L* as calibration tone curve.

Fixed in this release:

  • Show black point correction choice also when switching from refresh to any other measurement mode instead of only when switching from refresh to LCD measurement mode or vice versa.
  • Corrected averaged RGB transfer function display.
  • Adaptive measurement mode could not be disabled (regression of r1152 where adaptive measurement mode was made default in dispcalGUI).
  • Work-around a very rare problem where a (bogus) display size of 0x0 mm is returned.
  • Check if the configured colorimeter correction exists before adding it to the list.
  • Update colorimeter correction and testchart lists after deleting settings files.
  • Don't carry over colprof arguments from testchart file (fixes occasional wrong display model and manufacturer in profiles).
  • Average, RMS and maximum delta E metadata was not added to profiles if equal to or greater than 10.
  • Unhandled exception when 3D LUT window was opened and there was no profile selected under settings and also no display profile set.
  • Unhandled exception if colorimeter correction does not exist.
  • Standalone curve viewer: Fix loading of .cal file via commandline argument.
  • Don't strip trailing zeros when displaying average gamma in the status bar of the profile information or curve window.
  • Only set adaptive and hires measurement mode when the instrument supports it (fixes measurement mode switching to non-adaptive if toggling betweeen a colorimeter and a spectrometer).
  • Mac OS X with Argyll CMS 1.5 and newer: Also search library folders for Argyll CMS support files (fixes imported colorimeter corrections not found).
  • Only fall back to private copy of pnp.ids under Mac OS X and Windows.
  • Updated link to Datacolor website download section for the Spyder 2 Windows installers.
  • Transposed bits for EDID red y chromaticity coordinate.
  • Curve viewer / profile info window: Reset tone response curve calculation when toggling LUT checkbox.
  • Correctly react to detected display changes when the actual physical displays didn't change (e.g. when switching Argyll between versions supporting and not supporting the virtual “Web” display).
  • Keypresses or cancel were not recognized during patch reading.
  • Display uniformity measurements: Q or ESC had to be pressed twice to exit.
  • Do not use “install profile” message for non-display profiles.
  • 3D LUT: “apply vcgt” checkbox stayed disabled after switching from a devicelink source profile to a non-devicelink source profile.
  • Update all open windows when switching Argyll versions
  • Do not reset selected colorimeter correction to none when selecting a preset or a settings file.
  • Measurement window position was not correct when switching from web display.
  • Show an error message when choosing a directory as profile save path where no subdirectories can be created.
  • Python 2.7 compatibility: Mask u16Fixed16Number (fixes profile information not working for profiles with negative XYZ or chromaticity values when using Python 2.7).
  • wxPython 2.9 compatibility: Do not specify number of rows in dynamically growing FlexGridSizer.
  • Linux: Use colord's quirk_vendor_name to fix the manufacturer string.
  • Mac OS X 10.6 and up: Clearing and loading calibration needs root privileges in some circumstances.
  • Windows: Correctly escape quotes in arguments (fixes hang when profile name, program path or Argyll path contains a single quote).
  • Windows: Show a meaningful error message when a subprocess can't be started instead of hanging indefinitely.
  • Windows: Ignore WMI errors.
  • Windows: Selecting testcharts saved in the root of a drive under Windows.
  • Windows: Disable broken Windows 2000 support (was broken since 0.8.5.6 when the interactive display adjustment GUI was introduced and is not fixable as Windows 2000 does not implement the required AttachConsole functionality).
  • Windows/Mac OS X: If Argyll profile installation failed, a success message was still shown.
2013-03-03 19:42 (UTC) 1.2.7.0

1.2.7.0

Fixed in this release:

  • Colorimeter correction creation not working when using Argyll CMS 1.5.0 because of missing newly required fields in CGATS data.
  • Mac OS X: Accidentally swapped “/Users/<Username>/Library/Application Support” and “/Library/Application Support”.
2013-03-01 09:39 (UTC) 1.2.6.6

1.2.6.6

Added in this release:

  • Argyll CMS 1.5.0 compatibility.
  • Ability to do remote measurements using Argyll CMS 1.4.0 and newer (Firefox is recommended as client). See remote measurements and profiling.
  • Include black level and contrast in profile verification reports (if possible, i.e. if the test chart contains a RGB=0 patch).
  • 3D LUT: Support color space conversion ('spac') profiles.
  • DCI P3 reference profile.
  • Add “Quality” (if applicable) and “License” metadata to profiles.
  • Add colord device ID mapping to profile metadata.
  • Linux: Add screen brightness to profile metadata if profiling a mobile computer's screen (using the org.gnome.SettingsDaemon.Power DBus interface).
  • Additional logging.

Changed in this release:

  • Revised display uniformity test to generate HTML reports.
  • Use a delay of 200 ms for display uniformity measurements.
  • Detect “Calibrate failed with 'User hit Abort Key' (No device error)” Argyll CMS error message and ignore further errors to prevent popping up multiple error dialogs.
  • Reload currently selected calibration after verifying a profile.
  • Add metadata to fast shaper matrix profiles (e.g. gamut volume and coverage).
  • When deleting a settings file, also offer CCSS, CCMX and files starting with the settings file basename in the same directory for deletion.
  • Enable use of absolute values in profile verification reports regardless of testchart.
  • When loading a profile without calibration settings, look for an accompanying colorimeter correction in the same directory.
  • When only creating a profile and not calibrating, give a clear choice whether to embed current calibration curves in a profile or not.
  • When using black point compensation, keep the black point compensated TI3 measurement file in addition to the unaltered file.
  • When restoring default settings, don't reset the 3D LUT abstract profile as well as 3D LUT and profile info window positions.
  • Truncate the colorimeter correction description displayed in the dropdown if it's overly long.
  • Only load linear calibration curves into the curve viewer when resetting the video card gamma table.
  • Do not remove spaces from the instrument name when assembling the profile name.
  • Only compress JavaScript in HTML reports if the report.pack_js configuration option is set (default 1 = compress).

Fixed in this release:

  • Improved instrument event handling.
  • When measuring the screen using a spectrometer, make sure to repeat the instrument calibration until it is successfully completed or canceled (ColorMunki Design/Photo).
  • When measuring ambient light with a spectrometer, abort after a 30 second timeout if instrument calibration did not complete.
  • Correctly react if the instrument sensor is in the wrong position and prompt the user to set the correct position.
  • Mouse cursor and clicked “Measure” button stayed hidden when aborting a measurement in the display device uniformity test window.
  • Updating the calibration (vcgt) of a profile didn't work if first selecting a .cal file, ticking the “Update calibration” checkbox and then switching to the profile.
  • Disable all calibration controls (except the quality slider) when “Update calibration” is ticked.
  • Only enable “Update calibration” checkbox if calibration can actually be updated.
  • Disable the “Create colorimeter correction...” and “Create 3D LUT...” menu items as well as the “LUT” checkbox in the curves and profile information windows if Argyll CMS executables are not found.
  • Update measurement modes when switching Argyll versions.
  • wxPython 2.9 compatibility.
  • Set manufacturer, model, creator and ID in reference profiles (except ClayRGB and sRGB from Argyll).
  • Only switch over to progress dialog after a three second delay (fixes erroneously switching over to progress dialog under Windows when running calibration or display uniformity measurements directly after a canceled testchart measurement).
  • If using a DTP92, only offer refresh measurement mode.
  • Make sure updated profiles also have updated descriptions.
  • Also overwrite .gam.gz and .wrz files if overwriting an existing profile.
  • Mac OS X: Make sure the menus are re-enabled after calibrate & profile.
2013-01-07 19:41 (UTC) 1.1.8.3

1.1.8.3

Changed in this release:

  • Show display device uniformity measurement window on selected display device if multiple display devices are connected.
  • Hide mouse cursor and clicked button while measuring display device uniformity.

Fixed in this release:

  • Sporadic measurement hang when measuring display device uniformity.
  • Wrong window being shown when calibrating after display device uniformity measurements or vice versa.
2013-01-05 13:32 (UTC) 1.1.7.0

1.1.7.0

Added in this release:

  • Preliminary Argyll CMS 1.5.0 compatibility.
  • Added facility to measure and report display device uniformity. Known issue: Sometimes measurements hang. Press space to try and continue.
  • 3D LUTs can optionally incorporate abstract (“Look”) profiles.
  • 3D LUTs can be created from Device Link (class “link”) and input (class “scnr”) profiles.
  • 3D LUTs can also be created in SPI3D format.

Changed in this release:

  • Updated french translation, thanks to Loïc Guégant.

Fixed in this release:

  • Fedora: Calibration curves were reset to linear when installing a profile and using the Fedora packaged Argyll CMS.
  • Linux, Mac OS X, Windows (Administrator): Colorimeter corrections imported from i1 Profiler and ColorMunki Display software were not listed in the dropdown menu.
2012-11-05 20:32 (UTC) 1.1.2.9

1.1.2.9

Changed in this release:

  • Simplified Spyder 2 enabling instructions.

Fixed in this release:

  • Broken Unicode support (unhandled exception) when dealing with colorimeter correction descriptions containing 8-Bit characters.
  • Check if xicclu is found before attempting to use it for the profile information window (gets rid of bogus “'NoneType' object has no attribute 'encode'” message).
  • Use a default generic message when prompting to choose a profile.
2012-10-05 19:04 (UTC) 1.1.2.1

1.1.2.1

Changed in this release:

  • Disable source profile selector in advanced gamut mapping options if not atleast one of perceptual or saturation checkboxes is selected.
  • Only show a warning if an incompatible colorimeter correction is explicitly selected via the filebrowser.
  • Show a less cryptic error message if an invalid file is selected when importing colorimeter corrections from other display profiling software.

Fixed in this release:

  • Whitepoint color temperature is an integer, not a float. This fixes calibration settings being detected as changed when they actually haven't.
  • Worked around a bug in wxPython where controls in a hidden window react to focus events. This fixes the sporadic hang after calibration measurements during a “Calibrate & profile” run.
  • Linux, Mac OS X: Unhandled exception when trying to import colorimeter corrections from other display profiling software and selecting a file with '.txt' extension.
2012-09-15 15:38 (UTC) 1.1

1.1

Added in this release:

  • Additional profile name placeholder %ds for the display device serial from EDID if applicable (may be empty or bogus).
  • Windows: Additional profile name placeholders %dnw (DeviceString) and %dnws (shortened DeviceString, it may be the same as %dnw if shortening isn't possible). The former is equivalent to what's shown in the display device dropdown. The DeviceString is often more verbose as the sometimes very generic EDID device name (placeholder %dn).

Changed in this release:

  • Updated spanish translation (thanks to Roberto Quintero).

Fixed in this release:

  • Show an error message if a colorimeter correction cannot be used with the selected instrument.
  • Show an error message when trying to import colorimeter corrections from an unsupported filetype.
2012-08-01 10:13 (UTC) 1.0.9.0

1.0.9.0

Changed in this release:

  • Use the original file basename for colorimeter corrections copied over to the storage directory (previously, if a colorimeter correction was copied, it inherited the same basename as the rest of the measurement/profile/calibration files, thus making it a bit cumbersome to determine which colorimeter correction was originally the source, especially in profile verification reports which only showed the filename and not the description from the file contents).
  • Show colorimeter correction file basename in addition to the description if they are different.
  • Linux: Fall back to gcm-import if colord profile installation fails.

Fixed in this release:

  • When switching to L*/Rec. 709/SMPTE or sRGB and then loading settings with a gamma value, the gamma entry field was not shown.
  • Report on calibrated/uncalibrated display and calibration verification did not work if using a colorimeter correction (regression of changeset #1020).
  • Do not freeze if loading a settings file which had an accompanying colorimeter correction that was since deleted.
  • Windows 2000: Don't fail to launch.
2012-06-28 22:05 (UTC) 1.0.7.7

1.0.7.7

This is a bug-fix release for version 1.0.7.6.

Fixed in this release:

  • Unhandled exception in gamut view calculation after profile creation if using french localization.
2012-06-23 00:25 (UTC) 1.0.7.6

1.0.7.6

Added in this release:

  • Option to auto-select a suitable colorimeter correction if available locally.
  • Ability to choose between L*a*b*, XYZ and xyY in profile verification reports.

Changed in this release:

  • Reset default black point correction from automatic to off.
  • If a profile contains no 'vcgt' tag, assume linear calibration.
  • When creating a colorimeter correction, remember the last selected reference and colorimeter measurement file separately.
  • When creating a colorimeter correction, automatically only use white, red, green and blue patches (at 100% device value each) from measurement files, regardless if they contain more patches. This allows re-using of measurement files with different patch counts (as long as they contain those four combinations) that have been created as by-product of other operations, e.g. during profiling. Note that measurements still need to be done under identical conditions and within reasonable timeframe (ideally less than a few minutes apart) to minimize effects of display and instrument drift when creating colorimeter corrections from them.
  • When measuring the colorimeter correction testchart, automatically set the resulting measurement as last selected reference or colorimeter file depending on whether it contains spectral data or not.
  • When restoring the current calibration after measuring the colorimeter correction testchart, do it silently (don't show a message window).
  • Filter colorimeter corrections by selected instrument.
  • Show colorimeter correction description in the dropdown instead of the filename. Show the filename and path on mouse hover.
  • ColorHug: Only enable colorimeter corrections for “Factory” and “Raw” measurement modes.
  • ColorHug: Automatically set “Factory” measurement mode when measuring the colorimeter correction testchart and measurement mode is not yet “Factory” or “Raw”. Restore previous measurement mode afterwards.
  • Linux: Enable ColorHug support by default.
  • Linux: colord wrapper now uses PyGObject instead of ctypes.
  • Updated french translation, thanks to Loïc Guégant.

Fixed in this release:

  • When creating a 3D LUT, don't fail if the target profile contains no 'vcgt' tag and the preference is “Apply calibration” (which is the default) irrespective of checkbox state.
  • Use colorimeter correction (if applicable) from settings stored in calibration files and profiles when loading them.
  • When creating a colorimeter correction, the display name in the description is now taken from the measurement file if available.
  • When creating a colorimeter correction, automatically order the measurements exactly the same by device (RGB) triplets.
  • Hide any profile information window(s) when the main window is hidden and restore them when it is shown again.
  • Correct ID on profile created from EDID after adding gamut coverage/volume metadata.
  • Measurement modes other than “LCD (generic)” and “Refresh (generic)” are now correctly restored from settings embedded in calibration files and profiles.
  • If using the current calibration curves for profiling without calibrating (“Profile only” with “Reset video card gamma table” unchecked), using Argyll CMS 1.4.0, the resulting profile will now contain a 'vcgt' tag with the current calibration like with previous Argyll versions.
  • RGB bars and chromaticity/color temperature readouts when adjusting a whitepoint with blackbody target are now working correctly.
  • Ignore and do not show any explicitly selected Colorimeter Calibration Spectral Sample (CCSS) file for instruments that do not support it.
  • Changing Argyll version/binaries in dispcalGUI with automatic instrument detection switched off is working correctly again without the need to restart the program.
  • Show ColorHug-specific measurement modes (please run instrument detection once again to refresh the list if you already used the ColorHug in a previous version of dispcalGUI).
  • Saturation gamut mapping settings are no longer ignored.
  • Trying to view profile information for profiles whose black point X Y Z sum is zero will no longer result in a division by zero error.
  • Black point compensation is no longer attempted if not atleast one black or white patch is found in measurement data.
  • Linux: Don't error out if profile installation with dispwin fails, but profile installation via colord or oyranos-monitor is successful (fixes profile installation when using the distribution-packaged Argyll under Fedora)
  • Linux: colord device key name now correctly adheres to device naming spec for xrandr devices (fixes some profile installation problems).
  • Linux, Windows: Correctly detect in the profile loader if linear calibration is assumed when using Argyll CMS 1.4.0 or newer.
  • Windows: Continuous measurements during interactive display adjustment are now stopped reliably when clicking the “Stop measurements” button or hitting the space key.
2012-04-02 19:24 (UTC) 0.9.9.1

0.9.9.1

Added in this release:

  • Spyder 4 support if using Argyll CMS >= 1.3.6. To make all measurement modes available, you have to use “Import correction matrices from other display profiling softwares...” from the “Tools” menu.
  • Experimental ColorHug support is enabled through Argyll CMS >= 1.3.6 if the ENABLE_COLORHUG environment variable is set, but the ColorHug currently doesn't work reliably across all platforms.
  • Added information about instrument measurement modes to the ReadMe.

Changed in this release:

  • GUI spring-cleaning: Re-arranged some controls and replaced radiobuttons and read-only combo-boxes with choice controls instead. Only the controls related to a selected choice are shown.
  • Default calibration black point correction to automatic.
  • Replaced previous 19-patch colorimeter correction testchart with smaller 4-patch version (just red, green, blue at 100% each and white, as is the default with Argyll CMS 1.3.6).
  • Linux packages: Added Argyll CMS to dependencies. Please note: If you want the latest Argyll features or run into problems, it is recommemded to download the standalone Argyll binaries from argyllcms.com as the distribution repositories often only contain older Argyll CMS releases.

Fixed in this release:

  • Fixed unhandled exception when adding metadata to a profile from EDID that contains an invalid (out of range) gamma value.
  • Fixed slightly off the mark whitepoint in resulting profile when using black point compensation (typical max. error 0.2 ΔE*76). You may want to re-create existing profiles.
  • Do not reset visibility of advanced calibration options when restoring defaults.
  • Store black point compensation setting in profiles.
  • Mac OS X: The application bundle now again contains all required files (no missing files when dragging just the bundle to Mac OS X “Applications” folder).
2012-03-15 14:45 (UTC) 0.9.6.6

0.9.6.6

Added in this release:

  • Black point compensation option for profiles (default ON). This effectively prevents black crush, but at the expense of accuracy of the resulting profile.
  • Profile information window with 2D gamut plot as well as information pane which shows profile header and tag data in detail (with few exceptions).
  • Ability to create display correction 3D LUTs for use in movie post-processing applications that don't have ICC support. Currently supported are the .3dl and .cube formats.
  • Write gamut VRML files and calculate coverage and volume percentages against sRGB and Adobe RGB when creating profiles.
  • Add 'chrm' tag (xy chromaticities for each primary) to created profiles. Unlike the values from 'rXYZ', 'gXYZ', 'bXYZ', A2Bx or 'clrt' tags, the 'chrm' data corresponds to the actual measured chromaticities without chromatic adaptation or interpolation. The 'chrm' tag is purely informational.
  • Windows 7 and later: Added an option to let the operating system handle calibration loading when installing a profile (this option requires dispcalGUI to be run as Administrator and is also available in the dispcalGUI installer. If selecting the option there, the dispcalGUI Profile Loader will not be installed to the startup items. A shortcut to the loader is still available in the dispcalGUI folder in the start menu though, to be able to quickly force a reload of calibration).

Changed in this release:

  • Instrument detection now defaults to manual. A click on the icon with the swirling arrows or choosing the corresponding menu item in the “Options” menu detects connected instruments. Automatic instrument detection can be (re-)enabled/disabled there, too.
  • The dispcalGUI Profile Loader can now be set to not show error messages again (errors will still be logged).
  • Tone response curves are now plotted as L* → RGB by default and are also calculated for LUT profiles (profiles with both LUT and matrix TRC tags allow on-the-fly switching between them). In addition, the transfer function is shown if it can be estimated.
  • Windows: Allow enabling/disabling of calibration loading on login when installing a profile (to be able to change this option when Windows 7 or later is set up to handle calibration loading, either dispcalGUI needs to be run as administrator or in the Windows color management control panel “Advanced” tab, click on “Change system defaults...” and disable “Use Windows display calibration”).

Fixed in this release:

  • Do not fail to launch due to unhandled exception when parsing CGATS files containing KEYWORD, INDEX, SAMPLE_ID or DATA_FORMAT values in exponential notation.
  • Do not use exponential notation for low (< 0.0001) calibration black level target values.
  • Correctly handle failed instrument calibration (by asking to repeat) and measurement failures which are not misreads or communication failures (and should thus not be retried automatically).
  • Also look at ASCII descriptor blocks when determining the display device name from EDID (fixes display model not being set in profiles for certain Apple displays).
  • Don't loose 'mmod' tag (monitor make and model) when creating a profile from measurement data embedded in an existing profile.
  • Automatically restore calibration after measuring the colorimeter correction testchart.
  • Restore Argyll CMS < 1.3.0 compatibility (broken in 0.8.9.3).
  • Windows Vista, 7 and later: Automatically enable “Use my settings for this device” in Windows' colormanagement settings when installing a profile.
2012-02-11 03:56 (UTC) 0.8.9.3

0.8.9.3

Fixed in this release:

  • Selecting a smaller default testchart than the recommended one did not work (was reset to the recommended default when starting measurements or re-starting dispcalGUI).
  • Restore previously selected testchart if canceling colorimeter correction measurements.
  • Disable the “Measure” button in the “Create colorimeter correction” dialog if no display or instrument detected/selected.
  • Disable menus while the main window isn't shown (only affects operating systems where the menu is not part of the main window e.g. Mac OS X).
  • Linux: Fixed i1 Display Pro / ColorMunki Display missing from Argyll udev rules (this was actually already fixed in 0.8.5.2, but not mentioned in the changelog).
  • Mac OS X Lion: Removed sporadic password dialog being shown after calibration measurements when running “Calibrate & profile”.
  • Mac OS X Lion: Fixed an issue with profile installation for the current user which only installed the profile for the root user, thus not making it available in system preferences and making e.g. the login screen the only visible place where it was effectively being used.

Changed in this release:

  • Allow the selection of LCD or CRT measurement modes for spectrometers too (determines the available controls during interactive display adjustment).

Added in this release:

  • GUI for interactive display adjustment.
  • Add 'mmod' tag (monitor make and model, an Apple-specific private tag) to created profiles (ensures the profiles still show up in Mac OS X system preferences if “Show profiles for this display only” is ticked).
2012-01-24 18:40 (UTC) 0.8.5.2

0.8.5.2

Fixed in this release:

  • Added missing numbers to “delta E too high” message when trying to upload a profile with low self-fit accuracy.
  • Decoding of numerical manufacturer ID from EDID when adding metadata to a profile was done in the wrong byte order.
  • Fixed missing terminating NUL character for copyright tag when creating a profile from EDID.
  • Fixed missing underscore in EDID colorimetric metadata key names as per the ICC meta Tag for Monitor Profiles specification.
  • Linux: Display measurements couldn't be started if dispcalGUI was installed via the 0install feed.
  • Mac OS X: The file which maps Plug'n'Play device IDs to manufacturer names was not found when running from the application bundle, resulting in manufacturer entries in profiles always being equivalent to the three-letter PnP ID instead of the full manufacturer name.

Changed in this release:

  • Measurements for colorimeter corrections can now be started directly from the dialog, and the previous testchart is restored afterwards.
  • Add more metadata to generated profiles to allow better automatic selection/ranking on systems that support it and standardized a few previously dispcalGUI-only keys (ICC meta Tag for Monitor Profiles / GCM metadata specification).
  • Use product code as fallback for make/model when creating profiles from EDID.
  • Windows: In case of an Argyll CMS 'config 1 failed' error upon trying to use an instrument, inform the user its driver may not be installed.

Added in this release:

  • Added ability to specify the display technology for created colorimeter corrections.
  • Enabled overriding of default gamut mapping intents for LUT profiles. “Luminance matched appearance” is the default override for perceptual intent, which provides an effect similar to black point compensation.
  • The colorimeter corrections database now has a public web interface and API.
2011-12-08 13:33 (UTC) 0.8.1.9

0.8.1.9

Fixed in this release:

  • Ignore 'unknown' (not required) fields when verifying CGATS (fixes bug 'invalid testchart' after profiling with spectrometer, introduced in r780).
  • Force a default testchart if the selected one is invalid.
  • Linux (autopackage): Set PYTHONDONTWRITEBYTECODE= (empty string) to fix installation on Mandriva 2011.

Changed in this release:

  • Default profile type should be 3x shaper + matrix, not single shaper + matrix.
  • Some of the advanced calibration options (gamma type relative/absolute, ambient adjustment, black point correction and offset) are now hidden by default and can be shown via the corresponding menu item in the options menu.

Added in this release:

  • Option to share profiles via the openSUSE ICC Profile Taxi service.
  • Option to create profiles from extended display identification data (EDID).
  • Linux (GNOME 3): colord compatibility (query current profile, install & set profile).
2011-10-06 21:44 (UTC) 0.7.8.9

0.7.8.9

Fixed in this release:

  • Additional commandline arguments were ignored when doing profile verification measurements.
  • Windows: If the startup folder in the start menu was deliberately deleted, the profile loader shortcut wasn't created when installing a profile.
  • Windows: Profile loader correctly verifies if the calibration was sucessfully loaded.

Changed in this release:

  • Skip legacy serial ports by default when detecting instruments (serial instruments like the DTP92 or Spectrolino will no longer be selectable unless you manually set skip_legacy_serial_ports = 0 in dispcalGUI.ini or use a serial to USB adapter).
  • Windows: The profile loader shortcut in the startup folder inside the start menu is now created at installation time (and removed when uninstalling).
  • When checking for program updates, show the changelog for the new version if an update is available.
  • Confirm enabling of debugging output.

Added in this release:

  • Support for Argyll CMS 1.3.4 features: i1 Display Pro and Colormunki Display, Colorimeter Calibration Spectral Sample (.ccss) files.
  • Ability to import colorimeter corrections from other display profiling softwares. Currently iColor Display, i1 Profiler and ColorMunki Display are supported.
  • Ability to create correction matrices and Calibration Spectral Sample files, with the option to share them via an online database.
  • Option to automatically check for program updates on startup.
  • Added information how to fix instrument not working correctly/constantly disconnecting under Linux due to a conflict with libmtp (thanks to Pascal Obry who notified me of the issue back in May 2011).
2011-08-05 01:06 (UTC) 0.7.3.7

0.7.3.7

Fixed in this release:

  • Linux: Fixed multi-display support when not using separate X screens.
  • Mac OS X: Fixed not being able to run under a standard user account, and Mac OS X 10.7 compatibility.
  • Mac OS X 10.4.x: Fixed functionality requiring elevated privileges, e.g. installing profiles system wide or enabling the Spyder 2 using Argyll 1.1.x (regression of a change introduced in r706 / 0.7.0.7)
  • Windows: Fixed several problems with special characters in paths which are not representable through the file system encoding.
  • Windows: Worked around OS localtime() bug. If the system's clock was set to a date far into the future, dispcalGUI failed to launch on subsequent runs because of the logfile's timestamp which could not be processed by localtime().
  • Windows Vista/7: Querying the user display profile resulted in a “not found” error if the checkbox “Use my settings for this device” was never ticked in Windows' color management control panel, failing the fallback of querying the system display profile in case of no user display profile.

Changed in this release:

  • All presets now use curves + matrix as profile type (for better overall application compatibility).
  • Better feedback when trying to open broken/invalid files (display an error dialog instead of just logging the error).
  • Icons in the task switcher on Windows Vista/7 (and presumably Linux) should now be crisp and not pixelated.
2011-06-02 21:45 (UTC) 0.7.0.7

0.7.0.7

Fixed in this release:

  • wxPython 2.8.12 compatibility.
  • Linux: Preserve environment when installing a profile system-wide so $DISPLAY is available for dispwin.
  • Linux (Source): Changed highest supported Python version to “lower than 3.0” because openSUSE Build Service would choke on “lower than or equal to 2.7” when building for Ubuntu 11.04.
  • Linux (Source): Fixed setup.py bdist_deb as far as possible (see notes under installing from source, additional setup commands, bdist_deb)
  • Windows: Fixed error when the display profile cannot be determined (e.g. when running remotely).
2011-04-20 21:08 (UTC) 0.7.0.0

0.7.0.0

Fixed in this release:

  • Updating profile verification reports created in versions prior to revision 672 should not strip calibration and gray balance information anymore (regression of a change in r672).
  • If the Spyder 2 was enabled using Argyll CMS 1.2 or newer, this should now be reflected correctly in the “Tools” menu by a checkmark next to the “Enable Spyder 2” menu item.
  • Linux (Autopackage, DEB and RPM installs) and source: Fixed missing application icons in sizes other than 16x16 and 32x32 if the source archive was created with setup.py under Mac OS X or Windows (regression of a change in r501).
  • Linux/Windows: The location of the Argyll binaries was not stored in the system-wide configuration, which could prevent the profile loader from finding the Argyll binaries if they were not on the PATH environment variable and a profile was installed system-wide.
  • Windows: Fixed program termination if EnumDisplayDevices fails (e.g. when running remotely).
  • Windows: Fixed program termination if a display device has no driver entry in the registry (the very generic Windows error message is misleading in that case: It pretends a file was not found).
  • Windows XP: Correctly enumerate display device names and EDID.

Changed in this release:

  • When doing verification measurements of a (non-Argyll) profile containing a chromatic adaptation 'chad' tag, dispcalGUI now tries to use the same chromatic adaptation transform to calculate adapted values from the measurements instead of using a hardcoded Bradford transform.
  • The default delta E formula for “RGB + gray balance” evaluation is now DE 2000.
  • The delta E formula is now locked for the Fogra MediaWedge and IDEAlliance Control Strip evaluation criteria.
  • The “Update calibration” and “Update profile” checkboxes were combined into one. This removes the ambiguity about what “Update profile” functionality actually was: Only updating the calibration inside the profile. Both updating stand-alone calibration '.cal' files and calibrations embedded in profiles are now handled with the single “Update calibration” checkbox. The slightly different workflow of only updating the calibration, and then creating an actual new profile on top of it in one go, is still possible by explicitly loading a calibration '.cal' file under “Settings”.
  • Made the GUI a bit nicer towards low screen resolutions by moving more controls into the scrollable area and also removing the graphical banner and allowing horizontal scrollbars if things get really cramped.
  • Windows Vista/7 and later: To be able to install a profile system-wide, you now need to run dispcalGUI explicitly as administrator (right-click the dispcalGUI icon, then select “Run as administrator”) to show the appropriate controls in the profile installation dialog.

Added in this release:

2011-01-24 03:56 (UTC) 0.6.7.7

0.6.7.7

Fixed in this release:

  • Fixed measurements hanging at the start if using the black background option.
  • wxPython 2.9 compatibility.
  • Windows: Potential COM error caused by obsolete code.
  • Windows Vista/7: Potential WMI errors when trying to read a display's EDID are now suppressed (the EDID can not be read on systems where WMI has errors, which may prevent more accurate display descriptions, but will not impede functionality otherwise).

Added in this release:

  • Profiles can now be dragged and dropped onto the curve viewer.
  • When using the profile verification feature, it is now possible to first select a simulation profile before choosing a testchart.
2010-11-05 03:12 (UTC) 0.6.6.7

0.6.6.7

Fixed in this release:

  • Re-enabled warning message from the profile loader if the calibration in the video card does not match the requested calibration after loading.
  • Fixed “Show curves” checkbox in the profile installation dialog not doing anything if the curve viewer was not shown before (regression of a change in version 0.6.2.2).
  • Fixed a small visual glitch where the message “Calibration complete” was not cleared from the progress window after instrument calibration.
  • Fixed possibility of unprintable characters from EDID strings (e.g. display name) causing errors.
  • Fixed Argyll CMS diagnostic output not working for dispwin when using Argyll CMS 1.3.1
  • Linux: Fixed Autopackage install not working with Python 2.7

Added in this release:

  • Linux: Added a “Load profile and calibration on login” checkbox to the profile installation dialog. Normally, you want to keep this checked, so that dispcalGUI's profile loader can setup the configured display(s). But if you use another solution for loading profiles, like Oyranos with the CompICC plugin, you should uncheck it, so that display profiles are solely handled by CompICC.
  • Mac OS X: Like on the other platforms, EDID is now used if available.
2010-10-24 04:36 (UTC) 0.6.5.3

0.6.5.3

Fixed in this release:

  • Fixed a bug where the wrong correction matrix setting was stored in a profile or calibration file when changing the correction matrix, and creating a profile with a previous settings file selected which used a different correction matrix. Note this didn't affect measurements when creating the new profile or calibration file, but when loading it in dispcalGUI, the correction matrix used for the previously selected settings file was set instead of the one actually used when creating the new file.
  • Fixed missing XYZ values for the assumed whitepoint in profile verification reports.
  • Fixed crash when the manufacturer ID from a display's EDID contains invalid data.
  • Honor the selected display when loading calibration curves from a settings file.
  • Linux: Installing profiles under multi-display configurations using separate X screens should now work better when Oyranos is installed (previously, when the profile for the second screen was installed after the profile for the first screen, it would override the first profile in the Oyranos configuration. Profiles can be re-installed with this version of dispcalGUI to fix this).
  • Linux: Profile loader: When Oyranos is installed, but not xcalib, the fallback to dispwin to load the calibration curves was not working.

Changed in this release:

  • Reset additional commandline arguments too when restoring defaults.
  • The profile loader will no longer show an error message when unable to determine a display's current ICC profile, as there may just not be any profile installed for the respective display. Instead, such errors are now silently logged.
  • Improved error messages from the profile loader by adding some information about the affected display for easier troubleshooting of multi-display configurations.
  • Windows: Profile installation: When a system-wide autostart entry for the calibration loader already exists, do not create a per-user entry.
  • Linux: The autopackage can now be installed just for the current user. Note this will not setup instrument access though, as that requires root privileges.

Added in this release:

  • Save the device model and manufacturer description to measurement data (.ti3) files and use that information when creating a profile.
  • Log all output from the profile loader.
  • Ability to just measure a testchart and create a measurement data file (menu “Options”, “Measure testchart”).
  • Approximate gamma for grayscales is shown in profile verification reports.
  • Build system: Added --skip-postinstall option.
2010-09-19 17:53 (UTC) 0.6.2.2

0.6.2.2

Fixed in this release:

  • Trying to verify or view curves of a (non-Argyll) profile with a 'formula' type vcgt tag no longer fails with a 'NameError'.
  • When the measurement window was moved to the leftmost and/or topmost coordinates of the screen, the calculated relative position could become negative and prevent starting measurements.
  • Trying to profile a display which provides an empty model description via EDID no longer fails.
  • Profile name placeholder %im (instrument measurement mode) now inserts the correct string.
  • Profiling did not finish if “Show actual calibration curves from video card gamma table” was checked and the curves window shown.
  • Fixed black point correction rate not being restored correctly when loading settings.
  • Fixed conversion of the color temperature to xy chromaticity coordinates (the input fields in the GUI) which was erroneously being calculated with the formula for daylight even if a blackbody locus was chosen.
  • Fixed assumed whitepoint in profile verification reports erroneously being calculated with the formula for daylight even if a blackbody locus was originally chosen when creating the profile.
  • Fixed profile verification reports not working in Internet Explorer 5.x-6.0 and Opera 7.x.
  • Fixed profile verification reports showing “missing data” for some fields if using the Fogra Media Wedge V3 criteria and the reference file contained both XYZ and Lab data.
  • Mac OS X: A double extension (.icc.icm) is no longer added when creating a profile from an existing one (menu “Options”, “Create profile from measurement data...”).

Changed in this release:

  • When loading settings from calibration (.cal) files, the actual parameters chosen when calibrating are now set instead of stored measured values (e.g. whitepoint, black- and white level. Will only work for .cal files created in this version and up).
  • “Allow skipping of spectrometer self-calibration” (in the “Options” menu) for characterization readings after calibration is now disabled by default to help sensor stability (especially for the ColorMunki).
  • Black point correction rate now uses a floating-point control with the range 0.05...20.0 (consistent with the Argyll CMS dispcal commandline tool) instead of the previous integer control with the range 5...2000.
  • The default evaluation criteria for RGB testcharts in profile verification reports is now RGB only.
  • The default Delta E formula used for results in profile verification reports is now Delta E 2000 (except for standardised criteria like the Fogra Media Wedge V3).
  • Additional statistics in profile verification reports are now hidden by default.
  • Selecting “CMYK” or “RGB” in profile verification reports now actually makes a difference (shows the corresponding device values in the overview).
  • “Evaluate gray balance through calibration only” in profile verification reports is now disabled by default.
  • Windows: Installing a profile system-wide removes an existing user autostart entry for the profile loader to avoid having two entries.
  • Windows: EDID info will be used if available instead of generic device strings ('PnP-Monitor' et al).

Added in this release:

  • Ability to enable Argyll CMS diagnostic (debugging) output for measurements via menu “Options”.
  • Option to choose blackbody whitepoint reference instead of daylight in profile verification reports.
  • Original profile whitepoint is now shown in profile verification reports.
  • Instrument black level and display white level drift compensation options when using Argyll CMS >= 1.3.0
  • Ability to choose a correction matrix for colorimeters when using Argyll CMS >= 1.3.0
  • Allow setting of additional commandline arguments for dispcal, dispread, spotread and colprof via a new menu item in the “Options” menu.
  • IDEAlliance Control Strip 2009 aim values for profile verification with CMYK test charts.
  • Profile verification report shows instrument measurement mode and correction matrix (if any).
  • Menu option to update existing profile verification reports with the current templates.
2010-08-01 03:19 (UTC) 0.5.8.1

0.5.8.1

Fixed in this release:

  • Argyll CMS 1.2.0 compatibility
2010-07-25 13:19 (UTC) 0.5.8.0

0.5.8.0

Fixed in this release:

  • The timeout of 10 seconds for the startup of Argyll tools and instrument initialization was too short for some instruments and is now increased to 30 seconds. If the timeout is ever exceeded, dispcalGUI should now also abort automatically and no longer hang.
  • When previewing the calibration upon profile installation, use a linear calibration if no display profile is present when toggling the preview on and off (fixes the curve viewer not updating).
  • Fixed closing the log window not re-enabling the “show log automatically” menuitem.
  • Linux (Autopackage install): Fixed menu entry sometimes disappearing permanently after logging out under GNOME.
  • Linux: Fixed dispcalGUI not working if libX11 or libXrandr do not expose certain functions (e.g. under Mandriva 2009).
  • Linux: Fixed not being able to install a profile using GNOME Color Manager when the profile was not writable.
  • Linux: Fixed not being able to install a profile using Oyranos when the profile was not located in ~/.color/icc/devices/display.
  • Linux/Mac OS X: Saving a log file from the log window now works correctly.
  • Mac OS X: The terminal should no longer lose its focus when the measurement area is shown. This should also make the mouse cursor reappear which is otherwise hidden by dispcal/dispread.
  • Mac OS X 10.6: The current display profile should now be determined correctly (e.g. for the curve viewer) when loading its calibration curves or selecting the “<Current>” settings.
  • Windows (installer): An unused console window is no longer shown when launching dispcalGUI via the installed shortcuts.
  • Windows: Fixed executable not working under Windows 2000.

Changed in this release:

  • Do not pass through the “hit any key to retry” message from Argyll CMS tools to the progress dialog in case of misreads/port communication problems (retries happen automatically, so there is no need and also no possibility for keyboard interaction).
  • Enabling the Spyder 2 is now less cumbersome if the original installation CD is not available (especially on Mac OS X, where the firmware couldn't be found if a recent version of the Spyder 2 software was installed) and should work with the downloadable Spyder 2 software installers (but they need to be run to install the software first because the firmware can't be extracted from the installer binaries directly). Messages are now hopefully more informative to give a better idea of what to do. If the firmware can't be extracted from the Spyder 2 software installer, you are asked to install the software and try again. If that can't be done because of platform incompatibility (Linux), the last choice is to locate the Spyder.lib/CVSpyder.dll file manually (it must be copied from a Mac OS X or Windows system in that case).
  • Linux: Allow installation of profiles using GNOME Color Manager even if XRandR is not working/available.
  • Linux: Installation now checks for existing udev rules/hotplug scripts for instruments and only installs its own rules if none exist yet.
  • Linux/Windows: The profile loader will now show a warning dialog if a profile couldn't be loaded.
  • Linux/Windows: Device model and manufacturer are added to profiles if EDID[10] info is available.

+ Numerous other small fixes and changes.

2010-06-29 19:23 (UTC) 0.4.9.2

0.4.9.2

Fixed in this release:

  • Spectrometer sensor calibration sometimes accidentally occured when the instrument was still attached to the screen, leading to erroneous subsequent readings.
  • Immediately close a profile after reading to avoid locking it (fixes not being able to delete files from within the GUI).
  • Fixed quirks in “update calibration” and “update profile” operation.
  • The system-wide installation option in the profile install dialog is no longer hidden just because a profile has no embedded calibration curves (vcgt tag).
  • If the calibration curves of the current display profile couldn't be loaded for some reason (broken video card gamma table access, or no profile set), the curve viewer was not yet shown, and then a profile under “Settings” was selected, and then deleted, and then the curve viewer called up, an unhandled exception was raised.
  • Fixed ambient measurement via the “Measure” buttons timing out with the ColorMunki and various error handling issues regardless of instrument which could lead to an un-cancelable, forever looping progress bar.
  • Fixed ambient color temperature measurement via the “Measure” button not updating the kelvin field if selected.
  • Linux (only if the detected filesystem encoding is not UTF-8), Mac OS X and Windows: When installing a profile with “special” characters in the filename (everything not representable as 7-bit ASCII), it is now given an unique name containing the display number and MD5 hash, which fixes a few problems with filename encoding under Linux and Mac OS (under Linux the profile couldn't be successfully installed, under Mac OS X system-wide installation partly broke). This also fixes an issue under Windows where a profile whose name starts with the same first few characters (but has not the same name) as an already existing file in the system profile directory could accidentally overwrite that file, because I had not considered that filenames returned by win32api.GetShortPathName are only unique for the directory where a given file resides—and upon installation, that is the profile storage directory, not the system profile directory.
  • Linux, Mac OS X: When installing a profile, interaction with the curves window works now while the installation dialog is shown.
  • Windows (standalone executable): Fixed ambient measurement via the “Measure” buttons reproducably hanging (regardless of instrument) if the MS Visual C++ 2008 Redistributable Package (x86) was not installed.

Added in this release:

  • Linux: Oyranos support. If it is available, profiles are imported to the Oyranos database using oyranos-monitor upon installation, and an appropriate autostart entry is created to load calibration curves and setup the X _ICC_PROFILE atoms on login.
  • Linux: Rudimentary support for GNOME Color Manager. If it is available and XRandR is working, profiles are imported to GCM upon installation. Any calibration loaders created previously by dispcalGUI will be removed (except the possible oyranos-monitor entry). You then still have to manually assign the profile to a display in the GCM preferences by selecting it and then choosing the profile from the dropdown menu (in the future, this process will be made obsolete by using GCM library functions). Loading of calibration curves and setting up the X _ICC_PROFILE atom and XRandR output properties is then handled by GCM.
  • Menu option to automatically show the log window after certain operations (measurements, profile creation).

Changed in this release:

  • The terminal window is now only shown when required (e.g. keyboard interaction during interactive display adjustment). Also, the terminal used is no longer an external application, but a minimal emulator that just passes keyboard input to the Argyll CMS tools.
  • All measurements which do not require keyboard interaction with Argyll CMS tools now show a progress dialog with the option to cancel the measurements. All output that was previously visible through the terminal is still available via the log window (“Tools” menu) and -file.
  • Always load calibration curves before installing a profile, even if the profile has no vcgt tag (resets calibration to linear).
  • Automatically scroll to bottom when messages are added to the log window.
  • Store calibration and profiling settings in extra sections inside the TI3 file instead of the profile copyright tag. Use “generic” copyright information (“Created with dispcalGUI <version> and Argyll CMS <version>”), overridable by adding a line copyright = My copyright information in dispcalGUI's configuration file.
  • Made sure that only 7-bit ASCII gets written to a profile's copyright, ASCII description, and ASCII device model description. ICC v2 Unicode and Mac ScriptCode descriptions are now also written by default.
  • Presets default to high profile quality.
  • Remember visible state of curves, log window and testchart editor.
  • Updated french translation (thanks).
  • Linux: Unattended calibration & profiling no longer depends on xautomation.
  • Linux: EDID[10] is now used (if available) when generating descriptive identifiers for displays.
  • Linux: When determining a display's associated profile, check XrandR _ICC_PROFILE output properties first if available.
  • Linux: The option to install a profile system-wide is not offered if using GNOME Color Manager to install profiles (GCM has its own way to set profiles as system default).
  • Linux (only when GCM is not installed or XRandR is not working), Mac OS X, Windows: Installing a profile system-wide now also sets it as default for the current user.
  • Windows Vista and later: The option to install a profile system-wide is no longer offered if using Argyll CMS <= 1.1.1 (system scope in Argyll releases up to 1.1.1 acts like user scope on those systems).

+ Numerous other small fixes and changes. There is now also a mailing list for discussion and support as well as announcements (see at the top of this document).

2010-05-07 22:36 (UTC) 0.3.9.9

0.3.9.9

Fixed in this release:

  • Fixed unreliable (hanging occasionally) profile install when using system scope under Linux and Mac OS X (regression of a change in SVN r391 / 0.3.9.3).
  • Fixed ICC profile truncation if actual tag data is not in the same order as the tag table (regression of a change in SVN r274 / 0.3.0.7. Argyll profiles were not affected).
  • Fixed potential invalid profile name being generated if some unicode characters can't be conveyed in the file system encoding (Windows, Linux).
  • Fixed possible backslash in profile name due to wrong escaping when replacing invalid characters.
  • Fixed support for codepages 65000 (UTF-7) and 65001 (UTF-8) in the main application under Windows. This is actually a fix for shortcomings of Python.
2010-05-03 18:45 (UTC) 0.3.9.3

0.3.9.3

Added in this release:

  • Show percentage and amount of tone values per channel (+ grayscales) for calibration curves in the curve viewer and profile verification reports.
  • Profile verification: Enabled gray balance evaluation for all RGB charts containing grayscales (R=G=B). Added option to verify graybalance through calibration only (sets the target L* of each grayscale patch to the measured L* and target a*=b*=0).
  • Added documentation for the interactive display adjustment part of calibration.
  • Added further documentation of the profile verification feature with detailed information about underlying technical aspects.

Fixed in this release:

  • Fixed an unicode error after creating a profile verification report in a path containing unicode characters and a few other unrelated (potential) unicode errors.
  • Fixed potential unhandled exception if a JSON language file is malformed.
  • Fixed unhandled exception (local variable referenced before assignment) if trying to view calibration curves of an output with no video card gamma table access.
  • Fixed rare unhandled exception (local variable referenced before assignment) if logfile couldn't be renamed or removed during rollover.
  • Fail more gracefully (omit traceback from error message) if temp directory couldn't be created.
  • Fixed handling of XDG_CONFIG_DIRS and the system-wide autostart directory if the preferred configuration directory does not exist under Linux when installing a profile in local system scope, which prevented the system-wide autostart entry to be created.
  • Correctly determine system display profile under Windows Vista and 7 if no user profile is set. Fall back to sRGB if no display profile is set.

Changed in this release:

  • Changed default gamma from 2.4 to 2.2 in an attempt to increase the amount of available gamma table tone values after calibration for LCD screens, which often have a native response that is closer to a gamma of 2.2 than 2.4.
  • Changed default profile type to single curve + matrix.
  • Profile verification: Only evaluate grayscales (R=G=B) if their luminance is atleast 1% of the white luminance. Also evaluate combined Δa and Δb range.
  • Moved instrument feature details to separate JSON configuration file.
  • Made compatible with wxPython 2.8.6.0.
2010-03-31 15:24 (UTC) 0.3.8.0

0.3.8.0

Added in this release:

  • “Very large” testchart with 912 patches.
  • Profile verification: Support (non-Argyll) profiles which use chromatic adaption.

Fixed in this release:

  • Improved error message when Argyll binaries are not found (only files not found are now shown, together with alternatives). Automatically fall back to xicclu if icclu is not found (eg. Ubuntu's Argyll 1.0.3 package doesn't contain icclu).
  • Fixed 'invalid syntax' error when running under Python 2.5.
  • Profile verification report: Fixed a parsing error when reference or measurement data contained numbers in exponential notation.
  • Linux: Unhandled exception if DISPLAY environment variable is in the format [host]:displaynumber instead of [host]:displaynumber.screennumber (eg. :0 instead of :0.0).
  • Mac OS X: Fixed values entered in combo boxes not updating the configuration correctly under some circumstances.

Changed in this release:

  • Profile verification: Lookup device values relative colorimetrically and adapt the measured values to D50 before comparison (using Bradford matrix), so that the measured whitepoint corresponds to L*a*b* 100 0 0. Please note that verification results obtained with reference files measured in earlier versions of dispcalGUI should not be compared to those obtained via this new approach if the display whitepoint is not D50, as the results are likely to be different as an effect of the relative lookup and the chromatic adaption.
  • Profile verification: Improved support for non-Argyll CGATS text files. Handling is as follows:
    • If the file contains RGB_R RGB_G RGB_B fields, it is handled like a Argyll *.ti1 (testchart) file—any XYZ or Lab data is ignored and the RGB numbers are sent to the display and measured. Afterwards, the measured values are compared to the expected values, which are obtained by sending the RGB numbers through the profile. If RGB values above 100 are found, a range of 0-255 is assumed. Otherwise, a range of 0-100 (like Argyll *.ti1) is assumed.
    • If the file doesn't contain RGB_R RGB_G RGB_B fields, but XYZ_X XYZ_Y XYZ_Z or LAB_L LAB_A LAB_B, it is handled like a Argyll measurement data (*.ti3) file—the values are used to lookup corresponding RGB numbers through the profile and these are then sent to the display and measured. Afterwards, the measured values are compared to the original XYZ or Lab values.
  • Profile verification report: Show measured whitepoint and assumed target color temperature (based on closest daylight temperature), and use them to calculate the Delta E for the whitepoint. A few performance improvements when processing large datasets with several hundred or thousand measurements.
  • GUI and ReadMe: Changed all occurences of the term “LUT curves” to “calibration curves” and also changed all occurences of the term “video LUT” to “video card gamma table” to better distinguish from “LUT profile”. Also renamed the “LUT viewer” to curve viewer as a more accurate description of its functionality.
2010-03-17 18:50 (UTC) 0.3.6.4

0.3.6.4

Added in this release:

  • Profile verification: CGATS-compatible text files (*.txt) containing measurement data can now be selected in addition to Argyll testchart (*.ti1) and measurement data (*.ti3) files.
  • Profile verification report: Depending on the chart used, you can now choose among different evaluation criteria from within the report. Also added Fogra Media Wedge V3 tolerance values for CMYK testcharts.

Fixed in this release:

  • Profile verification: Error 'Unknown color representation Lab' when trying to verify a L*a*b* LUT profile.
  • Profile verification: Wrong XYZ scaling when reading from *.ti3 files containing XYZ, but no L*a*b* values.
  • Profile verification: When measuring a display other than the first one, the calibration curves were erroneously still loaded to the 1st display.

Changed in this release:

  • Profile verification report: Show nominal and actual measured values as L*a*b* instead of XYZ. Reduced visible decimals in report to increase readability.
  • Split the cramped “Extra” menu into “Options” and “Tools”.
2010-03-13 06:31 (UTC) 0.3.6.2

0.3.6.2

Added in this release:

  • Profile verification by measurements. Argyll testchart (*.ti1) and measurement data (*.ti3) files can be measured.

Fixed in this release:

  • Testchart editor: Do not automatically select a saved testchart (regression of a change in 0.3.3.5). Do not show empty rows when creating a testchart using an algorythm that does not create the expected number of rows.
  • Bumped wxPython version check to 2.8.8.0 so a proper error message is displayed if wxPython is too old.
  • Linux: When using TwinView or Xinerama, the size of the measurement window was sometimes not correct.
  • Linux: Failure in get_argyll_version if Argyll utilities have alternate names (eg. argyll-targen instead of targen), which could prevent being able to open the testchart editor (regression of a change in 0.3.3.5).
  • Mac OS X 10.4: Fall back to ColorSyncScripting if Image Events does not return a display profile.

Changed in this release:

  • Linux: Info window no longer stays always on top.
  • Linux: When getting the current profile for a display, also look at the _ICC_DEVICE_PROFILE atom (see draft ICC Profiles in X Specification 0.4).
2010-03-02 20:12 (UTC) 0.3.3.6

0.3.3.6

Fixed in this release:

  • Linux/Mac OS X: 'tcgetattr failed' when trying to calibrate or profile.

Changed in this release:

  • Linux: Updated udev rules.
2010-03-01 06:27 (UTC) 0.3.3.5

0.3.3.5

Added in this release:

  • Capability to set whitepoint or ambient light level for viewing condition adjustment by measuring ambient light.
  • Profile name %tpa placeholder (test patch amount).
  • Documentation for ambient light level viewing conditions adjustment, advanced profiling options (gamut mapping) and testchart editor in the ReadMe. Also a few additions to the existing whitepoint/white level and tone curve documentation (mostly taken from the Argyll CMS documentation).
  • Two entries to the known issues & solutions section in the ReadMe (swapped colors and Photoshop “Monitor profile appears to be defective”).

Changed in this release:

  • New improved testcharts and presets, with lower patch counts: 12 patches default for gamma+matrix profiles, 48 patches default for curves+matrix profiles (former chart had 91 patches), 124 patches default for LUT profiles which should actually be usable this time around when coupled with a profile quality setting of “high”, unlike its predecessor with 127 patches which yielded mediocre results at best (but for increased accuracy, the new 238-patch “extended” testchart is recommended). 396 and 2386-patch charts (the new “large” and “massive” quantity) are also included.
  • Default to high profile quality (and force for gamma+matrix profiles, as there is no processing penalty like for curves+matrix or LUT profiles).
  • Removed limit for remembered settings files.
  • When calibration or profiling measurements fail, first show the main application window, then the error message (small dialog boxes are sometimes hard to spot on big screens if the application context is missing).
  • Moved profile quality, type and advanced settings above testchart selector (this order is more logical, as profile quality and type influences testchart selection).
  • Testchart editor: Default to adaption of 10% for testchart creation using optimized farthest point sampling (OFPS). Support both device and L*a*b* diagnostic VRML files when creating testcharts using Argyll >= 1.1.0. No longer calculate the amount of white/gray/single color patches or multidimensional cube steps if info is missing in testchart file (calculations take way too long for little added benefit).
  • Cleaned up the known issues & solutions section in the ReadMe.

Fixed in this release:

  • Wrong value for adaption settings in testchart editor being stored.
  • Linux (cosmetic): Incorrect special characters in console window when using non-english locale under certain configurations (regression of a change introduced in 0.3.0.7).
  • Non-critical: File information in Argyll CGATS TI1 to TI3 conversion.
  • Testchart editor: Do not allow overwriting of predefined testcharts when saving. Correctly remember last used filename when “saving as...”.
  • Log window: Correctly remember last used filename when saving.
  • Typo in the ReadMe (the second “Report on calibrated display device” entry under “Menu commands” should have been “Report on uncalibrated display device”).
2010-02-17 15:53 (UTC) 0.3.1.0

0.3.1.0

Fixed in this release:

  • Running “Calibrate & profile” several times in succession no longer fails on the 2nd and subsequent runs.
  • Linux: Missing wxPython version check for the measurement window subprocess.
2010-02-15 17:27 (UTC) 0.3.0.9

0.3.0.9

Added in this release:

  • Test chart editor: Support for Argyll 1.1.0 perceptual space-filling quasi-random test patch distribution.
2010-02-13 16:36 (UTC) 0.3.0.8

0.3.0.8

Fixed in this release:

  • #2951168 Windows: Critical bug with win32 API calls to get the display name returning 8-bit characters where only ASCII was expected.
2010-02-12 20:13 (UTC) 0.3.0.7

0.3.0.7

Added in this release:

  • Support for Argyll >= 1.1.0 adaptive emissive measurement mode with the i1 Pro spectrometer.
  • All of Argyll's profile types are now available (XYZ LUT on Windows only if using Argyll >= 1.1.0).
  • Support for “very low” calibration quality.
  • Optionally create a fast matrix/shaper profile when just calibrating.
  • “Reset video card gamma table” checkbox in the dialog shown when just profiling.
  • Information how to install Argyll >= 1.1.0 USB drivers on Windows Vista/7 64-bit to the “known issues and solutions” section in the ReadMe.
  • ReadMe, license, bug tracker and support forum can now be accessed from the “Help” menu.
  • “Check for update...” in the help menu (launches a web browser and displays the dispcalGUI homepage if a new version is found).
  • Curve viewer: Capability to show the actual curves from the video card.
  • Curve viewer: Capability to show a matrix profile's rTRC/gTRC/bTRC curves.

Changed in this release:

  • When restoring defaults, selected display/instrument/measurement mode, language and profile name are retained.
  • The display/instrument selector is only enabled if more than one device detected respectively.
  • Changed i1 Pro highres measurement mode from implicit to user choice.
  • Gamut mapping: When selecting a source profile, pre-select a source viewing condition based on profile class (monitor or printer).
  • Updated defaults and presets to Argyll 1.1.0 values (i.e. black output offset).
  • Short display name placeholder (%dns) for profile name should not yield single numbers or model name without model number any more (or atleast less likely).
  • Log messages from most informational and all error dialogs.
  • Show file paths in most dialogs involving file processing.
  • Documentation in the ReadMe has been updated and is now more or less complete for the main application (testchart editor docs are still to be done). Setup instructions have also been streamlined.
  • Moved information how to fix video card gamma table access under Linux/X11 to the “known issues and solutions” section in the ReadMe.
  • Linux: Updated udev rules to those provided with Argyll 1.1.0. Removed obsolete permissions and policy files.
  • Linux: In multi-display setups using separate X screens, it should no longer be necessary to launch dispcalGUI on the display you want to measure.
  • Windows: Get names of displays via additional Windows API calls (should yield more descriptive names than “DISPLAY1”, “DISPLAY2” etc.)
  • Windows (cosmetic): Use default command prompt text color, and a darker variant only when doing measurements.
  • dispcalGUI version now corresponds to SVN revision number, split into its digit components. Build system (setup.py) uses SVN to generate version information.

Fixed in this release:

  • Curve viewer: When no display is selected (i.e. when Argyll binaries are not found), it will now try to show the vcgt of the 1st display's profile.
  • Curve viewer: When hiding the viewer and loading different calibration curves, those changes were not reflected when showing the viewer again.
  • Curve viewer: If a profile does not contain a 'vcgt' tag, clear canvas and disable R/G/B checkboxes.
  • Selection of display used for video card gamma table access not working correctly.
  • Loading of calibration upon initial preview in profile installation dialog if profile does not contain dispcalGUI settings.
  • Do not show failure message if user cancels profile installation via the password dialog when installing in system scope.
  • In some cases, values read from the configuration file were not correctly validated (would only show with deliberately altered or broken config file).
  • colprof output is no longer swallowed when creating a matrix profile with Argyll versions <= 1.0.4.
  • Linux: Fall back to ASCII if detected encoding is not UTF-8 to fix profile install issues.
  • Linux/Mac OS X: Enabling the Spyder 2 colorimeter might need elevated privileges.
  • Linux/Mac OS X: When installing a profile in local system scope, the necessary password was not accepted under newer Linux distros and also Mac OS X > 10.4.11
  • Mac OS X (cosmetic): Suppress spurious AppleScript messages.
  • Windows: Get display profile via registry instead of Windows API because the latter does not reflect runtime changes to profile associations (you still need to refresh the curve viewer when changing profile associations outside of dispcalGUI while it is running).

Known issues in this release:

  • Linux: You can't interact with the drop-down menu or the checkboxes in the curve viewer while a profile installation dialog is shown.
2009-07-16
  • Fixed a glitch in the Linux Autopackage installer where it would install even if required libraries were missing.
2009-06-30 0.2.6b3 (SVN r239)
  • fix (Windows): Fixed a critical bug in the Windows codepath which tried to access non-existent paths when certain settings were used.
2009-06-26 0.2.6b2
  • fix: Only look at <major>.<minor> during the Python version check (fixes a critical error on Ubuntu 9.10 Beta, where the Python revision number has an unexpected value).
  • fix: The curve viewer is now also able to plot calibration curves from *.cal files.
  • fix (Linux): If launched on an X display which is not the first display, the measurement window's location no longer determines the display which is used for measurements. This allows non-Xinerama multiscreen configurations to work with dispcalGUI. Note: You need to launch dispcalGUI on the display you want to measure, e.g. `DISPLAY=:0.1 dispcalGUI`.
  • fix (Linux): Get the profile from the correct display when loading a display's calibration curves into the curve viewer.
  • fix (Linux, cosmetic): Suppress CUPS warnings encountered on some systems when using the curve viewer.
  • fix (Mac OS X): Do not offer 'Network' scope during profile installation if /Network/Library/ColorSync/Profiles does not exist.
  • fix (Windows, cosmetic): Made sure the message "Debug: src/helpers.cpp(140): 'CreateActCtx' failed with error 0x0000007b (the filename, directory name, or volume label syntax is incorrect.)" is not shown when launching the standalone Windows executable, by changing the way *.pyd files are bundled (they are now copied to the executable's directory and are no longer part of the executable itself).
  • chg: The curve viewer resets to linear if a display without associated profile is selected.
2009-06-22 0.2.6b
  • fix: calibration preview checkbox in the “install profile” dialog should now correctly toggle between previous and new calibration.
  • fix: profiling failed when creating a profile on top of an existing calibration.
  • fix: correctly decode environment variables (should fix a failure when trying to create a profile and the username contains non-ASCII characters).
  • fix: automatic restoration of defaults before loading settings from a profile or cal file should no longer restore “do not show again” dialogs.
  • fix (Windows): several errors related to character encoding.
  • chg: unattended calibration and profiling: wait 10 seconds instead of 5 after calibration before trying to start profiling measurements (some instruments seem to need longer to initialize than others, e.g. Spyder 2).
  • chg (Python packages and source): instead of requiring wxPython 2.8.x specifically, only ensure a minimal version of 2.8.
  • add: Curve viewer.
2009-06-11 21:33 (UTC)
  • Added Linux Autopackage download.
  • Renamed 55-Argyll.rules to 92-Argyll.rules, so it can work on Debian too.
  • Removed “Creating a standalone executable from source” section from the ReadMe (the topic is still handled under “Installing from source” / “Additional setup.py commands”).
2009-06-07 0.2.5b4
  • fix: “TypeError: coercing to Unicode: need string or buffer, instance found” when calling any of the get*Description() methods of an ICCProfile instance, which caused profile creation from existing profile to fail.
  • fix: (Windows Vista) application exit on launch if autostart directory did not exist.
  • fix: (source, Debian and RPM packages) use the correct wxPython version
  • fix: tab-key traversal of calibration settings controls.
  • fix: automatically scroll into view focused calibration settings controls if scrollbars are shown.
  • fix: properly clean & remove temporary directory.
  • fix: (cosmetic) added some padding to calibration settings right-hand side so scrollbar won't overlap if shown.
  • chg: (cosmetic) enable auto-sizing (fit to contents) for colortemp locus, trc type and profile type selectors.
  • chg: (cosmetic) do not show vendor name in instrument select dropdown (conserve some space).
  • chg: (cosmetic) made the instrument selector a little narrower (needs less space now to display instrument name because the vendor name is stripped) and the measure mode selector a bit wider (to accommodate for projector mode).
  • chg: only try to re-start within terminal if running as standalone executable.
  • chg: show application restart request in the chosen language after changing it.
  • chg: allow resizing/maximizing of main window (a minimal size is forced to prevent layout glitches).
  • chg: (Linux) install from source or package will try to automatically setup access to your instrument. Some services (PolicyKit/HAL or udev) may need to be restarted to get the updated configuration recognized. If in doubt, a reboot should work in all cases.
  • add: french translation (by Loïc Guégant, thanks!)
  • add: bdist_deb command and --cfg option for setup.py
2009-05-16 0.2.5b3
  • Fixed calibration loader autostart entry creation (“access denied” error) under Windows Vista and later with User Account Control enabled.
2009-05-07 0.2.5b2
  • Fixed “error: nothing to repeat” when using a spectrometer.
2009-05-05 0.2.5b
  • fix: encoding-related issues on all platforms and strange Unicode-related problems with AppleScript and Terminal on Mac OS X 10.4 (Details).
  • fix: (Windows) several actions unexpectedly failing under Windows 7 (dispcalGUI created temporary files via system calls on several occasions, but on Windows, this does not create the file in the user's temp directory as one would expect, but in the ROOT directory e.g. C:\—a sane method is now being used instead).
  • fix: bug in sorting function caused leading and trailing zeroes of numbers in testchart filenames to get lost, thus failing to load such files.
  • fix: (Linux) “No module named _md5” error with the standalone executable on some Linux distros (apparently an OpenSSL-related issue, because normally it wouldn't fall back to the legacy _md5 module which is not even built by default in recent Python versions). The fallback _md5 module is now included.
  • fix: calibration was not automatically added & selected in the dropdown menu when only calibrating.
  • fix: dropping a profile which was not created in dispcalGUI onto the application window no longer results in an unhandled error.
  • fix: when trying to load calibration curves from a profile which actually does not contain any, an error message is now shown instead of resetting the video card gamma table to linear and erroneously stating the curves were succesfully loaded.
  • fix: add display device name as device model description when profiling.
  • fix: when creating a new profile from an existing profile, use that profile's device model description if present.
  • fix: also create .app/.sh/.cmd files when creating a new profile from existing measurement data.
  • fix: restore advanced gamut mapping options to default if selecting a profile which does not contain those settings.
  • fix: allow free selection of source and target viewing conditions in advanced gamut mapping options for LUT[7] profiles regardless of source profile type.
  • fix: if the screen or instrument that was selected in a previous session is not available, select an available one.
  • fix: (Mac) the “enable spyder 2” menu item would not allow to select files other than “setup.exe”.
  • fix: [src] (Mac) if dispcalGUI was installed as application and then run from (separate) source, multiple copies were launched at certain occasions.
  • fix: selecting a different Argyll binary directory than the previous one now actually works.
  • chg: the previously empty entry at the top of the settings dropdown (settings which are not associated to a profile or .cal file) is now named “<current settings>”.
  • chg: changed settings which are associated to a profile or .cal file are now marked with a leading asterisk in the settings dropdown.
  • chg: default to a gamma of 2.4 (Argyll default).
  • chg: warn before changed settings are discarded.
  • chg: new default profile naming scheme.
  • chg: new default file locations on all platforms.
    - On Linux, dispcalGUI now adheres to the XDG Base Directory Specification—the configuration file is saved as $XDG_CONFIG_HOME/dispcalGUI/dispcalGUI.ini ($XDG_CONFIG_HOME defaults to ~/.config if not set), all files created during calibration/profiling go into $XDG_DATA_HOME/dispcalGUI/storage/ ($XDG_DATA_HOME defaults to ~/.local/share if not set) by default, and logfiles into $XDG_DATA_HOME/dispcalGUI/logs/
    Any old (pre v0.2.5b) configuration data is retained in the file ~/.dispcalGUI and may be safely deleted after using v0.2.5b or newer for the first time.
    - On Mac OS, the configuration is saved as ~/Library/Preferences/dispcalGUI/dispcalGUI.ini, all files created during calibration/profiling go into ~/Library/Application Support/dispcalGUI/storage/ by default, and logfiles into ~/Library/Logs/dispcalGUI/
    Any old (pre v0.2.5b) configuration data is retained in the file ~/Library/Preferences/dispcalGUI Preferences and may be safely deleted after using v0.2.5b or newer for the first time.
    - On Windows, the configuration file is saved as %APPDATA%\dispcalGUI\dispcalGUI.ini, all files created during calibration/profiling go into %APPDATA%\dispcalGUI\storage\ by default, and logfiles into %APPDATA%\dispcalGUI\logs\
    Any old (pre v0.2.5b) configuration data is retained in the registry key HKEY_CURRENT_USER\Software\dispcalGUI.
  • chg: [build/src] (Windows) removed MS Visual C++ 2008 Redistributable DLLs from the source package. Users who build under Windows will have them anyway as they are installed with Python 2.6, so they are now copied directly from %SystemRoot%\WinSxS (Windows side-by-side assemblies) if possible.
  • chg: [build/src] SendKeys is now a dependency on Windows when running or building from source.
  • chg: [build/src] made dispcalGUI a distutils package, so it can be built/installed via setup.py.
  • chg: default locations are now also searched for resource files ($XDG_DATA_HOME/dispcalGUI, $XDG_DATA_DIRS/dispcalGUI on Linux, ~/Library/Application Support/dispcalGUI, /Library/Application Support/dispcalGUI on Mac OS X, %APPDATA%\dispcalGUI, %COMMONAPPDATA%\dispcalGUI and %COMMONPROGRAMFILES%\dispcalGUI on Windows) in addition to the current working directory (which is always searched first if it differs from the executable directory) and the executable directory (which is always searched last).
  • chg: better error handling. For unhandled exceptions, a message box is shown and an entry is written to the logfile.
  • chg: (Linux) the calibration loader will no longer try and handle gnome-screensaver quirks—it was working too unreliably, and should really be fixed in gnome-screensaver. The current recommendation is to not use a screensaver at all if possible, and instead rely on the system's energy saving options.
  • chg: (Linux) there's no longer an installer for the Linux version.
  • chg: cancelling of certain operations like profile calculation and testchart generation is now also supported when using Python 2.5
  • chg: when searching for Argyll executables, also search for files with “argyll-” prefix or “-argyll” suffix (thanks to Mark Whitis for report).
  • chg: disable measurement mode selection when using a spectrometer.
  • add: logging (also see the change related to file-storage). Logfiles are created per-date. A maximum of 5 old ones is being kept as backup.
  • add: placeholders like display name, measurement device, whitepoint etc. can now be used in the profile name.
  • add: unattended calibration and profiling for some instruments, meaning it is no longer necessary to press a key after calibration to start the measurements for profiling (needs xautomation under Linux).
  • add: settings and related files can be deleted.
  • add: (Linux, Mac, Vista) profile install scope can be selected (note: local system scope install is broken with current Argyll versions under Linux).
  • add: version and translation information in the about window.
  • add: projector mode when using Argyll 1.1.0 Beta or newer with the X-Rite ColorMunki.
2009-01-01
Linux and sourcecode bugfix update: Creation of the autostart entry failed when the autostart directory did not yet exist.
2008-12-24 0.2.1b
  • fix: video card gamma table access check always returned false when no display profile was set.
  • chg: (Linux) dispcalGUI now uses the autostart specification from freedesktop.org for the profile loader under Linux when installing profiles. NOTE for users: This also means you should manually remove any autostarts from previous versions, e.g.
    rm ~/.gnome2/dispwin-*.sh
    rm ~/.kde/Autostart/dispwin-*.sh

    and then re-install your current profile so the new loader is created. The new loader will be created in $XDG_CONFIG_HOME/autostart/ (if set) or ~/.config/autostart/ (if not set), with the filename dispcalGUI-Calibration-Loader-Display-x.desktop, where x is the display number.
  • chg: the calibration loader will check if gnome-screensaver is running and if so, exit it before loading the calibration, then start it again to prevent resetting the calibration when activated.
  • chg: .sh/.cmd file in profile folder is no longer created when just installing a profile.
  • add: message box when selecting LUT[7] as profile type with recommendation to use more samples for higher quality profiles.
  • add: default to english locale if translation doesn't exist.
2008-12-18 0.2b
  • fix: no longer possible to introduce invalid value types through a malformed config file (which could lead to dispcalGUI not launching).
  • fix: windows can no longer be moved permanently out of the visible screen area.
  • fix: spaces and special chars in the profile name should work now (should have from the start, but I had some superfluous code which broke it).
  • fix: spaces in the path to dispcalGUI should work now under Linux and Mac OS X too (Windows had no problem)
  • fix: measurement file no longer gets deleted after successful measurement if profile generation fails (was a simple oversight on my side).
  • fix: [cosmetic] logo header now always spans the whole width of the window.
  • fix: [cosmetic] (Mac OS X) on first launch, a second, unused, terminal window is no longer opened.
  • fix: windows will now try to adjust its height to fit on small screens (scrollbars might appear).
  • chg: “Calibration file” renamed to “Settings” and moved to the top, is now a dropdown box remembering the last 10 used files. Settings are stored in and loaded from profiles.
  • chg: renamed “Display type” to “Measurement mode” and moved over to measurement device selector.
  • chg: default to “LCD” for measurement mode.
  • chg: default testchart file names are now localized.
  • chg: new default testcharts, four flavours: matrix default (91 patches), LUT[7] default (127 patches), large (512 patches) and massive (3012 patches).
  • chg: testchart selector is now a dropdown box, shows all testchart files in chosen directory plus the default testcharts.
  • chg: [build/src] new and improved build system.
  • chg: [build/src] Python 2.6 is now the recommended version to run and/or build dispcalGUI. Python 2.5 is still supported, but you will not be able to cancel profile or testchart creation through the GUI[4].
  • chg: (Linux) externally installed wxGTK is no longer a dependency for executables.
  • chg: [build] Executables are now completely self-contained. The following paths are searched for additional language files: <user home directory>/dispcalGUI/lang, <dispcalGUI root directory>/lang
  • add: all settings now stored in profile whenever possible.
  • add: “Install” button next to settings dropdown to install selected profile.
  • add: dropdown to choose the display to use for video card gamma table access if all of the following applies:
    - more than one display connected
    - one of those displays seems to have non-working video card gamma table access (detected on startup)
    - one of those displays seems to have working video card gamma table access (detected on startup)
  • add: show patch count of selected testchart next to dropdown.
  • add: ability to select an icc profile (if it contains appropriate data) or measurement data file (.ti3) as testchart (converted on-the-fly).
  • add: testchart generator with editing cabability (experimental)
    - to select patches, click and drag the mouse over table cells, or hold SHIFT (select range) or CTRL/CMD (add/remove single cells/rows to/from selection)
    - to add a patch, double-click a row label
    - to delete patches, select them, then hold CTRL or CMD and hit DEL or BACKSPACE (will always delete whole rows even if only single cells selected)
    - CTRL-C/CTRL-V/CTRL-A = copy/paste/select all
  • add: advanced gamut mapping options for LUT[7]-type profiles, can also be used to overcome an apparent Photoshop CS3 bug under Mac OS X where the brush cursor shows strange artifacts when using LUT[7]-profiles with only one intent (thanks to Klaus Karcher for reporting this).
  • add: ability to generate profile from existing measurement data, even from an existing profile (if it contains appropriate data).
  • add: drag and drop calibration files (.cal), profiles (.icc/.icm), testcharts (.ti1) and measurement data files (.ti3) to the main window to process/select them (does not work very reliably on Mac OS X depending on where you drop the files, and you also get no optical feedback during the drag operation like the changed mouse cursor on Linux/Windows. Your best bet when dropping any files is perhaps the unoccupied area below “Settings”).
  • add: fully movable/resizable measurement window.
  • add: profile and testchart creation can be aborted (when running from source only if using Python >= 2.6).
  • add: “Before” / “After” switch when calibration / profiling complete.
  • add: menu item to enable Spyder 2 from within dispcalGUI.
  • add: italian and spanish GUI[4] translations (thanks contributors!)
  • Numerous other small fixes/changes.
2008-08-21
Executable-only update for Linux (thanks to Patrice Vetsel for bug report): dispcalGUI is now built against wxGTK 2.8.7.1, which becomes a dependency.
2008-08-18 0.1b
First public release.

Definitions

[1] CGATS
Graphic Arts Technologies Standards, CGATS.5 Data Exchange Format (ANSI CGATS.5-1993 Annex J)
[2] CMM / CMS
Color Management Module / Color Management System
[3] GPL
GNU General Public License — gnu.org/licenses/gpl.html
[4] GUI
Graphical User Interface
[5] ICC
International Color Consortium — color.org
[6] JSON
JavaScript Object Notation, a lightweight data-interchange format — json.org
[7] LUT
Look Up Table — en.wikipedia.org/wiki/Lookup_table
[8] SVN
Subversion, a version-control system — subversion.tigris.org
[9] UAC
User Account Control — en.wikipedia.org/wiki/User_Account_Control
[10] EDID
Extended Display Identification Data — en.wikipedia.org/wiki/EDID

dispcalGUI-1.7.1.6/misc/setup.debian.cfg000644 000765 000000 00000001143 12025152313 017604 0ustar00svpwheel000000 000000 [bdist_rpm] # IMPORTANT: # install all packages listed under build_requires below # then run sudo rpmdb --initdb before running setup.py bdist_rpm release = 1 distribution_name = Debian packager = Florian Höch group = graphics python = /usr/bin/python requires = argyll, python-wxgtk2.8, python-numpy # build_requires = alien, build-essential, libxinerama-dev, libxrandr-dev, libxxf86vm-dev, python >= 2.5, python <= 2.7, python-all-dev post_install = misc/debian.postinst post_uninstall = misc/debian.postrm # keep_temp = 1 [install] compile = 0 prefix = /usr record = INSTALLED_FILES dispcalGUI-1.7.1.6/misc/setup.fedora.cfg000644 000765 000000 00000001053 12025152313 017622 0ustar00svpwheel000000 000000 [bdist_rpm] release = 1 distribution_name = Fedora packager = Florian Höch group = Applications/Multimedia python = /usr/bin/python requires = argyllcms, wxPython, numpy build_requires = gcc, libX11-devel, libXinerama-devel, libXrandr-devel, libXxf86vm-devel, python >= 2.5, python <= 2.7, python-devel, rpm-build post_install = util/rpm_postinstall.sh post_uninstall = util/rpm_postuninstall.sh doc_files = LICENSE.txt README.html screenshots/ theme/ # keep_temp = 1 [install] optimize = 2 prefix = /usr record = INSTALLED_FILES dispcalGUI-1.7.1.6/misc/setup.mandriva.cfg000644 000765 000000 00000000755 12025152313 020173 0ustar00svpwheel000000 000000 [bdist_rpm] release = 1 distribution_name = Mandriva packager = Florian Höch group = Graphics python = /usr/bin/python requires = argyllcms, wxPythonGTK, python-numpy build_requires = gcc, python >= 2.5, python <= 2.7, libpython-devel, rpm-build, libxorg-x11-devel post_install = util/rpm_postinstall.sh post_uninstall = util/rpm_postuninstall.sh doc_files = LICENSE.txt README.html screenshots/ theme/ # keep_temp = 1 [install] prefix = /usr record = INSTALLED_FILES dispcalGUI-1.7.1.6/misc/setup.mandriva64.cfg000644 000765 000000 00000000757 12025152313 020347 0ustar00svpwheel000000 000000 [bdist_rpm] release = 1 distribution_name = Mandriva packager = Florian Höch group = Graphics python = /usr/bin/python requires = argyllcms, wxPythonGTK, python-numpy build_requires = gcc, python >= 2.5, python <= 2.7, libpython-devel, rpm-build, lib64xorg-x11-devel post_install = util/rpm_postinstall.sh post_uninstall = util/rpm_postuninstall.sh doc_files = LICENSE.txt README.html screenshots/ theme/ # keep_temp = 1 [install] prefix = /usr record = INSTALLED_FILES dispcalGUI-1.7.1.6/misc/setup.openSUSE.cfg000644 000765 000000 00000000765 12025152313 020034 0ustar00svpwheel000000 000000 [bdist_rpm] release = 1 distribution_name = openSUSE packager = Florian Höch group = Productivity/Graphics/Other python = /usr/bin/python requires = argyllcms, python-wxGTK, python-numpy build_requires = gcc, python >= 2.5, python <= 2.7, python-devel, rpm, xorg-x11-devel post_install = util/rpm_postinstall.sh post_uninstall = util/rpm_postuninstall.sh doc_files = LICENSE.txt README.html screenshots/ theme/ # keep_temp = 1 [install] prefix = /usr record = INSTALLED_FILES dispcalGUI-1.7.1.6/misc/setup.ubuntu.cfg000644 000765 000000 00000001170 12025152313 017704 0ustar00svpwheel000000 000000 [bdist_rpm] # IMPORTANT: # install all packages listed under build_requires below # then run sudo rpmdb --initdb before running setup.py bdist_rpm release = 1 distribution_name = Ubuntu packager = Florian Höch group = graphics python = /usr/bin/python requires = argyll, python-wxgtk2.8, python-numpy # build_requires = alien, build-essential, libxinerama-dev, libxrandr-dev, libxxf86vm-dev, python >= 2.5, python <= 2.7, python-all-dev post_install = misc/debian.postinst post_uninstall = misc/debian.postrm # keep_temp = 1 [install] compile = 0 install-layout = deb prefix = /usr record = INSTALLED_FILES dispcalGUI-1.7.1.6/misc/tests/000755 000765 000000 00000000000 12266723171 015722 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/ti3/000755 000765 000000 00000000000 12266723171 015257 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/winversion.txt000644 000765 000000 00000001464 12025152313 017514 0ustar00svpwheel000000 000000 VSVersionInfo( ffi=FixedFileInfo( filevers=%(filevers)s, prodvers=%(prodvers)s, mask=0x0, flags=0x0, OS=0x4, fileType=0x1, subtype=0x0, date=(0, 0) ), kids=[ StringFileInfo( [ StringTable( '040904b0', [StringStruct('CompanyName', '%(CompanyName)s'), StringStruct('FileDescription', '%(FileDescription)s'), StringStruct('FileVersion', '%(FileVersion)s'), StringStruct('InternalName', '%(InternalName)s'), StringStruct('LegalCopyright', '%(LegalCopyright)s'), StringStruct('OriginalFilename', '%(OriginalFilename)s'), StringStruct('ProductName', '%(ProductName)s'), StringStruct('ProductVersion', '%(ProductVersion)s')]) ]), VarFileInfo([VarStruct('Translation', [1033, 1200])]) ] )dispcalGUI-1.7.1.6/misc/xrced_plugins/000755 000765 000000 00000000000 12266723171 017426 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/z-dispcalGUI-apply-profiles.desktop000644 000765 000000 00000000600 12025152313 023331 0ustar00svpwheel000000 000000 [Desktop Entry] Version=1.0 Encoding=UTF-8 Type=Application Name=dispcalGUI ICC Profile Loader Name[de]=dispcalGUI ICC-Profil-Lader Comment=Sets ICC profiles and loads calibration curves for all configured display devices Comment[de]=Setzt ICC-Profile und lädt Kalibrierungskurven für alle konfigurierten Anzeigegeräte Icon=dispcalGUI Exec=dispcalGUI-apply-profiles Terminal=false dispcalGUI-1.7.1.6/misc/xrced_plugins/filebrowsebutton.crx000644 000765 000000 00000003210 12263672717 023543 0ustar00svpwheel000000 000000 control pos size labelText buttonText toolTip dialogTitle startDirectory initialValue fileMask fileMode labelWidth 1 xh_filebrowsebutton FileBrowseButtonXmlHandler gizmo A control to allow the user to type in a filename or browse with the standard file dialog to select file 10 control pos size labelText buttonText toolTip dialogTitle startDirectory initialValue fileMask fileMode labelWidth 1 xh_filebrowsebutton FileBrowseButtonWithHistoryXmlHandler gizmo A control to allow the user to type in a filename or browse with the standard file dialog to select file 10 dispcalGUI-1.7.1.6/misc/xrced_plugins/floatspin.crx000644 000765 000000 00000001444 12025152312 022130 0ustar00svpwheel000000 000000 control pos size value min_val max_val increment digits 1 FS_LEFT FS_RIGHT FS_CENTRE FS_READONLY EVT_FLOATSPIN xh_floatspin FloatSpinCtrlXmlHandler gizmo Floating Point SpinCtrl 10 dispcalGUI-1.7.1.6/misc/xrced_plugins/xh_floatspin.py000644 000765 000000 00000002551 12025152312 022463 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import wx import wx.xrc as xrc try: import wx.lib.agw.floatspin as floatspin except ImportError: import floatspin class FloatSpinCtrlXmlHandler(xrc.XmlResourceHandler): def __init__(self): xrc.XmlResourceHandler.__init__(self) # Standard styles self.AddWindowStyles() # Custom styles self.AddStyle('FS_LEFT', floatspin.FS_LEFT) self.AddStyle('FS_RIGHT', floatspin.FS_RIGHT) self.AddStyle('FS_CENTRE', floatspin.FS_CENTRE) self.AddStyle('FS_READONLY', floatspin.FS_READONLY) def CanHandle(self,node): return self.IsOfClass(node, 'FloatSpin') # Process XML parameters and create the object def DoCreateResource(self): try: min_val = float(self.GetText('min_val')) except: min_val = None try: max_val = float(self.GetText('max_val')) except: max_val = None try: increment = float(self.GetText('increment')) except: increment = 1.0 w = floatspin.FloatSpin(parent=self.GetParentAsWindow(), id=self.GetID(), pos=self.GetPosition(), size=self.GetSize(), style=self.GetStyle(), min_val=min_val, max_val=max_val, increment=increment, name=self.GetName()) try: w.SetValue(float(self.GetText('value'))) except: w.SetValue(0.0) try: w.SetDigits(int(self.GetText('digits'))) except: pass self.SetupWindow(w) return w dispcalGUI-1.7.1.6/misc/ti3/laptop.ti3000644 000765 000000 00000030003 12237536425 017175 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" BEGIN_ARGYLL_COLPROF_ARGS -qh -as END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -t -g2.2 -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/low_contrast.ti3000644 000765 000000 00000027604 12237536425 020431 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.20000 0.20000 0.20000 0.00392 0.20235 0.20235 0.20235 0.00784 0.20471 0.20471 0.20471 0.01176 0.20706 0.20706 0.20706 0.01569 0.20941 0.20941 0.20941 0.01961 0.21176 0.21176 0.21176 0.02353 0.21412 0.21412 0.21412 0.02745 0.21647 0.21647 0.21647 0.03137 0.21882 0.21882 0.21882 0.03529 0.22118 0.22118 0.22118 0.03922 0.22353 0.22353 0.22353 0.04314 0.22588 0.22588 0.22588 0.04706 0.22824 0.22824 0.22824 0.05098 0.23059 0.23059 0.23059 0.05490 0.23294 0.23294 0.23294 0.05882 0.23529 0.23529 0.23529 0.06275 0.23765 0.23765 0.23765 0.06667 0.24000 0.24000 0.24000 0.07059 0.24235 0.24235 0.24235 0.07451 0.24471 0.24471 0.24471 0.07843 0.24706 0.24706 0.24706 0.08235 0.24941 0.24941 0.24941 0.08627 0.25176 0.25176 0.25176 0.09020 0.25412 0.25412 0.25412 0.09412 0.25647 0.25647 0.25647 0.09804 0.25882 0.25882 0.25882 0.10196 0.26118 0.26118 0.26118 0.10588 0.26353 0.26353 0.26353 0.10980 0.26588 0.26588 0.26588 0.11373 0.26824 0.26824 0.26824 0.11765 0.27059 0.27059 0.27059 0.12157 0.27294 0.27294 0.27294 0.12549 0.27529 0.27529 0.27529 0.12941 0.27765 0.27765 0.27765 0.13333 0.28000 0.28000 0.28000 0.13725 0.28235 0.28235 0.28235 0.14118 0.28471 0.28471 0.28471 0.14510 0.28706 0.28706 0.28706 0.14902 0.28941 0.28941 0.28941 0.15294 0.29176 0.29176 0.29176 0.15686 0.29412 0.29412 0.29412 0.16078 0.29647 0.29647 0.29647 0.16471 0.29882 0.29882 0.29882 0.16863 0.30118 0.30118 0.30118 0.17255 0.30353 0.30353 0.30353 0.17647 0.30588 0.30588 0.30588 0.18039 0.30824 0.30824 0.30824 0.18431 0.31059 0.31059 0.31059 0.18824 0.31294 0.31294 0.31294 0.19216 0.31529 0.31529 0.31529 0.19608 0.31765 0.31765 0.31765 0.20000 0.32000 0.32000 0.32000 0.20392 0.32235 0.32235 0.32235 0.20784 0.32471 0.32471 0.32471 0.21176 0.32706 0.32706 0.32706 0.21569 0.32941 0.32941 0.32941 0.21961 0.33176 0.33176 0.33176 0.22353 0.33412 0.33412 0.33412 0.22745 0.33647 0.33647 0.33647 0.23137 0.33882 0.33882 0.33882 0.23529 0.34118 0.34118 0.34118 0.23922 0.34353 0.34353 0.34353 0.24314 0.34588 0.34588 0.34588 0.24706 0.34824 0.34824 0.34824 0.25098 0.35059 0.35059 0.35059 0.25490 0.35294 0.35294 0.35294 0.25882 0.35529 0.35529 0.35529 0.26275 0.35765 0.35765 0.35765 0.26667 0.36000 0.36000 0.36000 0.27059 0.36235 0.36235 0.36235 0.27451 0.36471 0.36471 0.36471 0.27843 0.36706 0.36706 0.36706 0.28235 0.36941 0.36941 0.36941 0.28627 0.37176 0.37176 0.37176 0.29020 0.37412 0.37412 0.37412 0.29412 0.37647 0.37647 0.37647 0.29804 0.37882 0.37882 0.37882 0.30196 0.38118 0.38118 0.38118 0.30588 0.38353 0.38353 0.38353 0.30980 0.38588 0.38588 0.38588 0.31373 0.38824 0.38824 0.38824 0.31765 0.39059 0.39059 0.39059 0.32157 0.39294 0.39294 0.39294 0.32549 0.39529 0.39529 0.39529 0.32941 0.39765 0.39765 0.39765 0.33333 0.40000 0.40000 0.40000 0.33725 0.40235 0.40235 0.40235 0.34118 0.40471 0.40471 0.40471 0.34510 0.40706 0.40706 0.40706 0.34902 0.40941 0.40941 0.40941 0.35294 0.41176 0.41176 0.41176 0.35686 0.41412 0.41412 0.41412 0.36078 0.41647 0.41647 0.41647 0.36471 0.41882 0.41882 0.41882 0.36863 0.42118 0.42118 0.42118 0.37255 0.42353 0.42353 0.42353 0.37647 0.42588 0.42588 0.42588 0.38039 0.42824 0.42824 0.42824 0.38431 0.43059 0.43059 0.43059 0.38824 0.43294 0.43294 0.43294 0.39216 0.43529 0.43529 0.43529 0.39608 0.43765 0.43765 0.43765 0.40000 0.44000 0.44000 0.44000 0.40392 0.44235 0.44235 0.44235 0.40784 0.44471 0.44471 0.44471 0.41176 0.44706 0.44706 0.44706 0.41569 0.44941 0.44941 0.44941 0.41961 0.45176 0.45176 0.45176 0.42353 0.45412 0.45412 0.45412 0.42745 0.45647 0.45647 0.45647 0.43137 0.45882 0.45882 0.45882 0.43529 0.46118 0.46118 0.46118 0.43922 0.46353 0.46353 0.46353 0.44314 0.46588 0.46588 0.46588 0.44706 0.46824 0.46824 0.46824 0.45098 0.47059 0.47059 0.47059 0.45490 0.47294 0.47294 0.47294 0.45882 0.47529 0.47529 0.47529 0.46275 0.47765 0.47765 0.47765 0.46667 0.48000 0.48000 0.48000 0.47059 0.48235 0.48235 0.48235 0.47451 0.48471 0.48471 0.48471 0.47843 0.48706 0.48706 0.48706 0.48235 0.48941 0.48941 0.48941 0.48627 0.49176 0.49176 0.49176 0.49020 0.49412 0.49412 0.49412 0.49412 0.49647 0.49647 0.49647 0.49804 0.49882 0.49882 0.49882 0.50196 0.50118 0.50118 0.50118 0.50588 0.50353 0.50353 0.50353 0.50980 0.50588 0.50588 0.50588 0.51373 0.50824 0.50824 0.50824 0.51765 0.51059 0.51059 0.51059 0.52157 0.51294 0.51294 0.51294 0.52549 0.51529 0.51529 0.51529 0.52941 0.51765 0.51765 0.51765 0.53333 0.52000 0.52000 0.52000 0.53725 0.52235 0.52235 0.52235 0.54118 0.52471 0.52471 0.52471 0.54510 0.52706 0.52706 0.52706 0.54902 0.52941 0.52941 0.52941 0.55294 0.53176 0.53176 0.53176 0.55686 0.53412 0.53412 0.53412 0.56078 0.53647 0.53647 0.53647 0.56471 0.53882 0.53882 0.53882 0.56863 0.54118 0.54118 0.54118 0.57255 0.54353 0.54353 0.54353 0.57647 0.54588 0.54588 0.54588 0.58039 0.54824 0.54824 0.54824 0.58431 0.55059 0.55059 0.55059 0.58824 0.55294 0.55294 0.55294 0.59216 0.55529 0.55529 0.55529 0.59608 0.55765 0.55765 0.55765 0.60000 0.56000 0.56000 0.56000 0.60392 0.56235 0.56235 0.56235 0.60784 0.56471 0.56471 0.56471 0.61176 0.56706 0.56706 0.56706 0.61569 0.56941 0.56941 0.56941 0.61961 0.57176 0.57176 0.57176 0.62353 0.57412 0.57412 0.57412 0.62745 0.57647 0.57647 0.57647 0.63137 0.57882 0.57882 0.57882 0.63529 0.58118 0.58118 0.58118 0.63922 0.58353 0.58353 0.58353 0.64314 0.58588 0.58588 0.58588 0.64706 0.58824 0.58824 0.58824 0.65098 0.59059 0.59059 0.59059 0.65490 0.59294 0.59294 0.59294 0.65882 0.59529 0.59529 0.59529 0.66275 0.59765 0.59765 0.59765 0.66667 0.60000 0.60000 0.60000 0.67059 0.60235 0.60235 0.60235 0.67451 0.60471 0.60471 0.60471 0.67843 0.60706 0.60706 0.60706 0.68235 0.60941 0.60941 0.60941 0.68627 0.61176 0.61176 0.61176 0.69020 0.61412 0.61412 0.61412 0.69412 0.61647 0.61647 0.61647 0.69804 0.61882 0.61882 0.61882 0.70196 0.62118 0.62118 0.62118 0.70588 0.62353 0.62353 0.62353 0.70980 0.62588 0.62588 0.62588 0.71373 0.62824 0.62824 0.62824 0.71765 0.63059 0.63059 0.63059 0.72157 0.63294 0.63294 0.63294 0.72549 0.63529 0.63529 0.63529 0.72941 0.63765 0.63765 0.63765 0.73333 0.64000 0.64000 0.64000 0.73725 0.64235 0.64235 0.64235 0.74118 0.64471 0.64471 0.64471 0.74510 0.64706 0.64706 0.64706 0.74902 0.64941 0.64941 0.64941 0.75294 0.65176 0.65176 0.65176 0.75686 0.65412 0.65412 0.65412 0.76078 0.65647 0.65647 0.65647 0.76471 0.65882 0.65882 0.65882 0.76863 0.66118 0.66118 0.66118 0.77255 0.66353 0.66353 0.66353 0.77647 0.66588 0.66588 0.66588 0.78039 0.66824 0.66824 0.66824 0.78431 0.67059 0.67059 0.67059 0.78824 0.67294 0.67294 0.67294 0.79216 0.67529 0.67529 0.67529 0.79608 0.67765 0.67765 0.67765 0.80000 0.68000 0.68000 0.68000 0.80392 0.68235 0.68235 0.68235 0.80784 0.68471 0.68471 0.68471 0.81176 0.68706 0.68706 0.68706 0.81569 0.68941 0.68941 0.68941 0.81961 0.69176 0.69176 0.69176 0.82353 0.69412 0.69412 0.69412 0.82745 0.69647 0.69647 0.69647 0.83137 0.69882 0.69882 0.69882 0.83529 0.70118 0.70118 0.70118 0.83922 0.70353 0.70353 0.70353 0.84314 0.70588 0.70588 0.70588 0.84706 0.70824 0.70824 0.70824 0.85098 0.71059 0.71059 0.71059 0.85490 0.71294 0.71294 0.71294 0.85882 0.71529 0.71529 0.71529 0.86275 0.71765 0.71765 0.71765 0.86667 0.72000 0.72000 0.72000 0.87059 0.72235 0.72235 0.72235 0.87451 0.72471 0.72471 0.72471 0.87843 0.72706 0.72706 0.72706 0.88235 0.72941 0.72941 0.72941 0.88627 0.73176 0.73176 0.73176 0.89020 0.73412 0.73412 0.73412 0.89412 0.73647 0.73647 0.73647 0.89804 0.73882 0.73882 0.73882 0.90196 0.74118 0.74118 0.74118 0.90588 0.74353 0.74353 0.74353 0.90980 0.74588 0.74588 0.74588 0.91373 0.74824 0.74824 0.74824 0.91765 0.75059 0.75059 0.75059 0.92157 0.75294 0.75294 0.75294 0.92549 0.75529 0.75529 0.75529 0.92941 0.75765 0.75765 0.75765 0.93333 0.76000 0.76000 0.76000 0.93725 0.76235 0.76235 0.76235 0.94118 0.76471 0.76471 0.76471 0.94510 0.76706 0.76706 0.76706 0.94902 0.76941 0.76941 0.76941 0.95294 0.77176 0.77176 0.77176 0.95686 0.77412 0.77412 0.77412 0.96078 0.77647 0.77647 0.77647 0.96471 0.77882 0.77882 0.77882 0.96863 0.78118 0.78118 0.78118 0.97255 0.78353 0.78353 0.78353 0.97647 0.78588 0.78588 0.78588 0.98039 0.78824 0.78824 0.78824 0.98431 0.79059 0.79059 0.79059 0.98824 0.79294 0.79294 0.79294 0.99216 0.79529 0.79529 0.79529 0.99608 0.79765 0.79765 0.79765 1.00000 0.80000 0.80000 0.80000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/madVR.ti3000644 000765 000000 00000244434 12237536425 016726 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "9" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "9" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "33" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "USE_BLACK_POINT_COMPENSATION" USE_BLACK_POINT_COMPENSATION "NO" BEGIN_ARGYLL_COLPROF_ARGS -qh -bl -ax END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1399 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 0.00000 50.0000 25.0000 9.48738 16.5179 8.31499 3 0.00000 62.5000 37.5000 15.4124 26.5039 16.0335 4 37.5000 62.5000 37.5000 20.1494 28.9463 16.2555 5 68.7500 56.2500 6.25000 28.4553 29.6752 5.57215 6 87.5000 75.0000 12.5000 49.9236 53.6516 9.93103 7 73.9583 73.9583 73.9583 48.6594 51.1377 55.6166 8 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 9 10.4167 10.4167 10.4167 2.00521 2.05749 2.15195 10 0.00000 0.00000 9.37500 1.16227 1.06490 1.85470 11 6.25000 0.00000 0.00000 1.21051 1.10854 1.00986 12 12.5000 0.00000 0.00000 1.58591 1.30210 1.02745 13 15.6250 0.00000 0.00000 1.86037 1.44361 1.04032 14 18.7500 0.00000 0.00000 2.19807 1.61773 1.05614 15 21.8750 0.00000 0.00000 2.60260 1.82631 1.07510 16 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 17 28.1250 0.00000 0.00000 3.62521 2.35357 1.12301 18 31.2500 0.00000 0.00000 4.24932 2.67536 1.15226 19 34.3750 0.00000 0.00000 4.95236 3.03785 1.18520 20 37.5000 0.00000 0.00000 5.73696 3.44239 1.22197 21 40.6250 0.00000 0.00000 6.60561 3.89027 1.26267 22 43.7500 0.00000 0.00000 7.56070 4.38272 1.30742 23 46.8750 0.00000 0.00000 8.60454 4.92093 1.35634 24 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 25 53.1250 0.00000 0.00000 10.9672 6.13913 1.46705 26 56.2500 0.00000 0.00000 12.2903 6.82130 1.52904 27 59.3750 0.00000 0.00000 13.7105 7.55355 1.59559 28 62.5000 0.00000 0.00000 15.2297 8.33690 1.66678 29 65.6250 0.00000 0.00000 16.8500 9.17230 1.74270 30 68.7500 0.00000 0.00000 18.5730 10.0607 1.82344 31 71.8750 0.00000 0.00000 20.4007 11.0031 1.90908 32 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 33 78.1250 0.00000 0.00000 24.3766 13.0531 2.09539 34 81.2500 0.00000 0.00000 26.5283 14.1625 2.19621 35 84.3750 0.00000 0.00000 28.7913 15.3293 2.30225 36 87.5000 0.00000 0.00000 31.1672 16.5543 2.41358 37 90.6250 0.00000 0.00000 33.6575 17.8383 2.53027 38 93.7500 0.00000 0.00000 36.2638 19.1821 2.65240 39 96.8750 0.00000 0.00000 38.9875 20.5865 2.78003 40 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 41 9.37500 0.00000 0.00000 1.37074 1.19116 1.01737 42 0.00000 0.00000 3.12500 1.04323 1.01729 1.22767 43 0.00000 6.25000 0.00000 1.18254 1.36502 1.06085 44 0.00000 12.5000 0.00000 1.50806 2.01598 1.16935 45 0.00000 15.6250 0.00000 1.74606 2.49191 1.24869 46 0.00000 18.7500 0.00000 2.03889 3.07749 1.34630 47 0.00000 21.8750 0.00000 2.38967 3.77895 1.46323 48 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 49 0.00000 28.1250 0.00000 3.27641 5.55219 1.75881 50 0.00000 31.2500 0.00000 3.81760 6.63441 1.93921 51 0.00000 34.3750 0.00000 4.42723 7.85350 2.14242 52 0.00000 37.5000 0.00000 5.10758 9.21400 2.36920 53 0.00000 40.6250 0.00000 5.86081 10.7203 2.62028 54 0.00000 43.7500 0.00000 6.68900 12.3764 2.89635 55 0.00000 46.8750 0.00000 7.59415 14.1865 3.19807 56 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 57 0.00000 53.1250 0.00000 9.64291 18.2834 3.88099 58 0.00000 56.2500 0.00000 10.7902 20.5776 4.26342 59 0.00000 59.3750 0.00000 12.0217 23.0402 4.67392 60 0.00000 62.5000 0.00000 13.3391 25.6747 5.11306 61 0.00000 65.6250 0.00000 14.7441 28.4843 5.58139 62 0.00000 68.7500 0.00000 16.2382 31.4721 6.07943 63 0.00000 71.8750 0.00000 17.8230 34.6412 6.60771 64 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 65 0.00000 78.1250 0.00000 21.2707 41.5357 7.75694 66 0.00000 81.2500 0.00000 23.1365 45.2667 8.37888 67 0.00000 84.3750 0.00000 25.0988 49.1908 9.03299 68 0.00000 87.5000 0.00000 27.1590 53.3106 9.71972 69 0.00000 90.6250 0.00000 29.3184 57.6289 10.4395 70 0.00000 93.7500 0.00000 31.5784 62.1482 11.1929 71 0.00000 96.8750 0.00000 33.9402 66.8713 11.9802 72 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 73 0.00000 9.37500 0.00000 1.32148 1.64288 1.10716 74 1.04167 1.04167 1.04167 1.07587 1.07982 1.08695 75 0.00000 0.00000 6.25000 1.09214 1.03685 1.48530 76 11.4583 11.4583 11.4583 2.17040 2.23126 2.34125 77 0.00000 0.00000 15.6250 1.37658 1.15061 2.98349 78 0.00000 0.00000 18.7500 1.52439 1.20972 3.76201 79 0.00000 0.00000 21.8750 1.70145 1.28053 4.69460 80 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 81 0.00000 0.00000 28.1250 2.14904 1.45954 7.05211 82 0.00000 0.00000 31.2500 2.42221 1.56879 8.49092 83 0.00000 0.00000 34.3750 2.72992 1.69186 10.1117 84 0.00000 0.00000 37.5000 3.07334 1.82920 11.9205 85 0.00000 0.00000 40.6250 3.45354 1.98126 13.9230 86 0.00000 0.00000 43.7500 3.87158 2.14845 16.1249 87 0.00000 0.00000 46.8750 4.32846 2.33117 18.5313 88 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 89 0.00000 0.00000 53.1250 5.36259 2.74476 23.9782 90 0.00000 0.00000 56.2500 5.94168 2.97636 27.0283 91 0.00000 0.00000 59.3750 6.56328 3.22496 30.3024 92 0.00000 0.00000 62.5000 7.22826 3.49091 33.8049 93 0.00000 0.00000 65.6250 7.93744 3.77454 37.5402 94 0.00000 0.00000 68.7500 8.69161 4.07616 41.5125 95 0.00000 0.00000 71.8750 9.49155 4.39609 45.7259 96 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 97 0.00000 0.00000 78.1250 11.2318 5.09208 54.8920 98 0.00000 0.00000 81.2500 12.1736 5.46873 59.8524 99 0.00000 0.00000 84.3750 13.1641 5.86486 65.0694 100 0.00000 0.00000 87.5000 14.2040 6.28076 70.5467 101 0.00000 0.00000 90.6250 15.2940 6.71668 76.2878 102 0.00000 0.00000 93.7500 16.4347 7.17291 82.2963 103 0.00000 0.00000 96.8750 17.6269 7.64970 88.5755 104 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 105 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 106 0.00000 0.00000 12.5000 1.25645 1.10256 2.35074 107 3.12500 3.12500 3.12500 1.22762 1.23945 1.26085 108 2.08333 2.08333 2.08333 1.15175 1.15964 1.17390 109 4.16667 4.16667 4.16667 1.30372 1.31952 1.34806 110 5.20833 5.20833 5.20833 1.38828 1.40847 1.44496 111 6.25000 6.25000 6.25000 1.48518 1.51041 1.55601 112 0.00000 12.5000 12.5000 1.76451 2.11854 2.52009 113 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 114 0.00000 3.12500 0.00000 1.08564 1.17125 1.02855 115 9.37500 9.37500 9.37500 1.85450 1.89893 1.97923 116 7.29167 7.29167 7.29167 1.59489 1.62583 1.68173 117 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 118 13.5417 13.5417 13.5417 2.54563 2.62600 2.77126 119 14.5833 14.5833 14.5833 2.75638 2.84772 3.01278 120 15.6250 15.6250 15.6250 2.98301 3.08613 3.27249 121 17.7083 17.7083 17.7083 3.48519 3.61442 3.84797 122 18.7500 18.7500 18.7500 3.76135 3.90494 4.16445 123 19.7917 19.7917 19.7917 4.05464 4.21348 4.50055 124 20.8333 20.8333 20.8333 4.36533 4.54033 4.85660 125 21.8750 21.8750 21.8750 4.69372 4.88579 5.23292 126 22.9167 22.9167 22.9167 5.04007 5.25016 5.62984 127 23.9583 23.9583 23.9583 5.40467 5.63371 6.04766 128 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 129 26.0417 26.0417 26.0417 6.18963 6.45949 6.94721 130 27.0833 27.0833 27.0833 6.61052 6.90226 7.42953 131 28.1250 28.1250 28.1250 7.05067 7.36530 7.93393 132 29.1667 29.1667 29.1667 7.51032 7.84886 8.46069 133 30.2083 30.2083 30.2083 7.98973 8.35320 9.01009 134 31.2500 31.2500 31.2500 8.48913 8.87856 9.58238 135 32.2917 32.2917 32.2917 9.00874 9.42519 10.1778 136 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 137 34.3750 34.3750 34.3750 10.1095 10.5832 11.4393 138 35.4167 35.4167 35.4167 10.6911 11.1951 12.1058 139 36.4583 36.4583 36.4583 11.2938 11.8291 12.7965 140 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 141 38.5417 38.5417 38.5417 12.5634 13.1647 14.2514 142 39.5833 39.5833 39.5833 13.2307 13.8667 15.0161 143 40.6250 40.6250 40.6250 13.9200 14.5918 15.8060 144 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 145 42.7083 42.7083 42.7083 15.3650 16.1120 17.4620 146 43.7500 43.7500 43.7500 16.1213 16.9076 18.3287 147 44.7917 44.7917 44.7917 16.9003 17.7271 19.2214 148 45.8333 45.8333 45.8333 17.7021 18.5707 20.1403 149 46.8750 46.8750 46.8750 18.5272 19.4386 21.0857 150 47.9167 47.9167 47.9167 19.3754 20.3310 22.0579 151 48.9583 48.9583 48.9583 20.2472 21.2481 23.0569 152 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 153 51.0417 51.0417 51.0417 22.0619 23.1572 25.1365 154 52.0833 52.0833 52.0833 23.0052 24.1495 26.2175 155 53.1250 53.1250 53.1250 23.9727 25.1673 27.3263 156 54.1667 54.1667 54.1667 24.9646 26.2107 28.4629 157 55.2083 55.2083 55.2083 25.9810 27.2800 29.6277 158 56.2500 56.2500 56.2500 27.0221 28.3752 30.8208 159 57.2917 57.2917 57.2917 28.0881 29.4967 32.0424 160 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 161 59.3750 59.3750 59.3750 30.2954 31.8187 34.5719 162 60.4167 60.4167 60.4167 31.4370 33.0197 35.8802 163 61.4583 61.4583 61.4583 32.6042 34.2476 37.2177 164 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 165 63.5417 63.5417 63.5417 35.0158 36.7846 39.9814 166 64.5833 64.5833 64.5833 36.2605 38.0941 41.4078 167 65.6250 65.6250 65.6250 37.5315 39.4311 42.8643 168 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 169 67.7083 67.7083 67.7083 40.1524 42.1884 45.8679 170 68.7500 68.7500 68.7500 41.5028 43.6089 47.4154 171 69.7917 69.7917 69.7917 42.8800 45.0577 48.9935 172 70.8333 70.8333 70.8333 44.2840 46.5348 50.6026 173 71.8750 71.8750 71.8750 45.7152 48.0404 52.2427 174 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 175 12.5000 37.5000 37.5000 7.76682 10.3453 13.3171 176 72.9167 72.9167 72.9167 47.1736 49.5746 53.9140 177 76.0417 76.0417 76.0417 51.7136 54.3507 59.1167 178 77.0833 77.0833 77.0833 53.2824 56.0011 60.9145 179 78.1250 78.1250 78.1250 54.8791 57.6808 62.7443 180 79.1667 79.1667 79.1667 56.5039 59.3901 64.6063 181 80.2083 80.2083 80.2083 58.1569 61.1291 66.5006 182 81.2500 81.2500 81.2500 59.8383 62.8979 68.4275 183 82.2917 82.2917 82.2917 61.5482 64.6967 70.3870 184 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 185 84.3750 84.3750 84.3750 65.0541 68.3849 74.4046 186 85.4167 85.4167 85.4167 66.8503 70.2745 76.4631 187 86.4583 86.4583 86.4583 68.6756 72.1947 78.5548 188 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 189 88.5417 88.5417 88.5417 72.4138 76.1273 82.8387 190 89.5833 89.5833 89.5833 74.3270 78.1400 85.0312 191 90.6250 90.6250 90.6250 76.2698 80.1838 87.2576 192 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 193 92.7083 92.7083 92.7083 80.2446 84.3653 91.8126 194 93.7500 93.7500 93.7500 82.2769 86.5032 94.1415 195 94.7917 94.7917 94.7917 84.3392 88.6728 96.5049 196 95.8333 95.8333 95.8333 86.4317 90.8742 98.9029 197 96.8750 96.8750 96.8750 88.5546 93.1074 101.336 198 97.9167 97.9167 97.9167 90.7080 95.3727 103.803 199 98.9583 98.9583 98.9583 92.8919 97.6702 106.306 200 12.5000 12.5000 0.00000 2.09397 2.31807 1.19681 201 25.0000 12.5000 0.00000 3.58534 3.08703 1.26669 202 37.5000 12.5000 0.00000 6.24502 4.45837 1.39132 203 50.0000 12.5000 0.00000 10.2474 6.52201 1.57886 204 62.5000 12.5000 0.00000 15.7378 9.35287 1.83614 205 75.0000 12.5000 0.00000 22.8427 13.0162 2.16906 206 87.5000 12.5000 0.00000 31.6752 17.5703 2.58294 207 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 208 87.5000 87.5000 25.0000 58.2353 69.2285 15.9222 209 25.0000 25.0000 0.00000 4.87856 5.67311 1.69777 210 37.5000 25.0000 0.00000 7.53824 7.04444 1.82240 211 50.0000 25.0000 0.00000 11.5406 9.10808 2.00994 212 62.5000 25.0000 0.00000 17.0310 11.9389 2.26721 213 75.0000 25.0000 0.00000 24.1359 15.6023 2.60014 214 87.5000 25.0000 0.00000 32.9684 20.1563 3.01401 215 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 216 100.000 75.0000 25.0000 61.2394 59.4106 13.8689 217 25.0000 37.5000 0.00000 7.18485 10.2851 2.46654 218 37.5000 37.5000 0.00000 9.84453 11.6564 2.59117 219 50.0000 37.5000 0.00000 13.8469 13.7200 2.77871 220 62.5000 37.5000 0.00000 19.3373 16.5509 3.03598 221 75.0000 37.5000 0.00000 26.4422 20.2142 3.36891 222 87.5000 37.5000 0.00000 35.2747 24.7683 3.78278 223 100.000 37.5000 0.00000 45.9377 30.2662 4.28243 224 100.000 75.0000 12.5000 60.5866 59.1495 10.4307 225 100.000 87.5000 12.5000 68.2456 74.4653 12.9837 226 100.000 87.5000 25.0000 68.8983 74.7264 16.4219 227 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 228 62.5000 50.0000 0.00000 22.8079 23.4911 4.19286 229 75.0000 50.0000 0.00000 29.9128 27.1544 4.52578 230 87.5000 50.0000 0.00000 38.7453 31.7085 4.93966 231 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 232 100.000 62.5000 0.00000 54.1692 46.7269 7.02629 233 37.5000 50.0000 0.00000 13.3151 18.5966 3.74804 234 37.5000 62.5000 0.00000 18.0760 28.1171 5.33503 235 50.0000 62.5000 0.00000 22.0784 30.1807 5.52257 236 62.5000 62.5000 0.00000 27.5688 33.0116 5.77984 237 75.0000 62.5000 0.00000 34.6737 36.6749 6.11276 238 87.5000 62.5000 0.00000 43.5062 41.2290 6.52664 239 87.5000 75.0000 0.00000 49.6671 53.5491 8.58029 240 25.0000 62.5000 0.00000 15.4164 26.7458 5.21040 241 25.0000 75.0000 0.00000 21.5773 39.0658 7.26405 242 37.5000 75.0000 0.00000 24.2369 40.4372 7.38868 243 50.0000 75.0000 0.00000 28.2393 42.5008 7.57622 244 62.5000 75.0000 0.00000 33.7297 45.3317 7.83349 245 75.0000 75.0000 0.00000 40.8346 48.9950 8.16642 246 100.000 75.0000 0.00000 60.3302 59.0470 9.07994 247 100.000 87.5000 0.00000 67.9891 74.3628 11.6330 248 25.0000 50.0000 0.00000 10.6555 17.2253 3.62342 249 25.0000 87.5000 0.00000 29.2362 54.3816 9.81706 250 37.5000 87.5000 0.00000 31.8959 55.7530 9.94169 251 50.0000 87.5000 0.00000 35.8983 57.8166 10.1292 252 62.5000 87.5000 0.00000 41.3887 60.6475 10.3865 253 75.0000 87.5000 0.00000 48.4936 64.3108 10.7194 254 87.5000 87.5000 0.00000 57.3261 68.8649 11.1333 255 12.5000 87.5000 0.00000 27.7449 53.6127 9.74718 256 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 257 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 258 37.5000 100.000 0.00000 41.1422 74.2429 13.0238 259 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 260 62.5000 100.000 0.00000 50.6349 79.1374 13.4686 261 75.0000 100.000 0.00000 57.7399 82.8007 13.8015 262 87.5000 100.000 0.00000 66.5724 87.3548 14.2154 263 100.000 100.000 0.00000 77.2354 92.8527 14.7151 264 12.5000 0.00000 12.5000 1.84236 1.40466 2.37819 265 25.0000 0.00000 12.5000 3.33373 2.17362 2.44808 266 37.5000 0.00000 12.5000 5.99341 3.54495 2.57270 267 50.0000 0.00000 12.5000 9.99578 5.60859 2.76025 268 62.5000 0.00000 12.5000 15.4862 8.43946 3.01752 269 75.0000 0.00000 12.5000 22.5911 12.1028 3.35044 270 87.5000 0.00000 12.5000 31.4236 16.6568 3.76432 271 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 272 100.000 12.5000 37.5000 44.4116 23.8974 14.0031 273 25.0000 12.5000 12.5000 3.84179 3.18959 2.61743 274 37.5000 12.5000 12.5000 6.50147 4.56093 2.74206 275 50.0000 12.5000 12.5000 10.5038 6.62457 2.92960 276 62.5000 12.5000 12.5000 15.9942 9.45544 3.18687 277 75.0000 12.5000 12.5000 23.0992 13.1188 3.51980 278 87.5000 12.5000 12.5000 31.9317 17.6728 3.93367 279 100.000 12.5000 12.5000 42.5947 23.1707 4.43332 280 100.000 37.5000 25.0000 46.8470 30.6298 9.07135 281 100.000 62.5000 25.0000 55.0785 47.0905 11.8152 282 25.0000 25.0000 12.5000 5.13501 5.77567 3.04851 283 37.5000 25.0000 12.5000 7.79469 7.14701 3.17314 284 50.0000 25.0000 12.5000 11.7971 9.21065 3.36068 285 62.5000 25.0000 12.5000 17.2875 12.0415 3.61795 286 75.0000 25.0000 12.5000 24.3924 15.7048 3.95087 287 87.5000 25.0000 12.5000 33.2249 20.2589 4.36475 288 100.000 25.0000 12.5000 43.8879 25.7568 4.86440 289 100.000 37.5000 37.5000 48.0111 31.0954 15.2029 290 100.000 50.0000 37.5000 51.4817 38.0356 16.3598 291 25.0000 37.5000 12.5000 7.44130 10.3876 3.81728 292 37.5000 37.5000 12.5000 10.1010 11.7590 3.94191 293 50.0000 37.5000 12.5000 14.1034 13.8226 4.12945 294 62.5000 37.5000 12.5000 19.5938 16.6535 4.38672 295 75.0000 37.5000 12.5000 26.6987 20.3168 4.71965 296 87.5000 37.5000 12.5000 35.5312 24.8708 5.13352 297 100.000 37.5000 12.5000 46.1942 30.3687 5.63317 298 100.000 62.5000 12.5000 54.4257 46.8294 8.37703 299 12.5000 50.0000 0.00000 9.16408 16.4563 3.55353 300 25.0000 50.0000 12.5000 10.9119 17.3278 4.97415 301 37.5000 50.0000 12.5000 13.5716 18.6992 5.09878 302 50.0000 50.0000 12.5000 17.5740 20.7628 5.28633 303 62.5000 50.0000 12.5000 23.0643 23.5937 5.54360 304 75.0000 50.0000 12.5000 30.1693 27.2570 5.87652 305 87.5000 50.0000 12.5000 39.0018 31.8111 6.29040 306 100.000 50.0000 12.5000 49.6648 37.3090 6.79005 307 12.5000 25.0000 12.5000 3.64363 5.00671 2.97862 308 12.5000 37.5000 12.5000 5.94993 9.61866 3.74740 309 25.0000 62.5000 12.5000 15.6728 26.8483 6.56114 310 37.5000 62.5000 12.5000 18.3325 28.2197 6.68576 311 50.0000 62.5000 12.5000 22.3349 30.2833 6.87331 312 62.5000 62.5000 12.5000 27.8253 33.1142 7.13058 313 75.0000 62.5000 12.5000 34.9302 36.7775 7.46350 314 87.5000 62.5000 12.5000 43.7627 41.3315 7.87738 315 12.5000 50.0000 12.5000 9.42053 16.5589 4.90427 316 12.5000 62.5000 12.5000 14.1814 26.0794 6.49125 317 12.5000 75.0000 12.5000 20.3423 38.3995 8.54491 318 25.0000 75.0000 12.5000 21.8337 39.1684 8.61479 319 37.5000 75.0000 12.5000 24.4934 40.5398 8.73942 320 50.0000 75.0000 12.5000 28.4958 42.6034 8.92696 321 62.5000 75.0000 12.5000 33.9862 45.4343 9.18423 322 75.0000 75.0000 12.5000 41.0911 49.0976 9.51716 323 87.5000 87.5000 12.5000 57.5826 68.9674 12.4840 324 0.00000 62.5000 12.5000 13.5955 25.7773 6.46380 325 0.00000 75.0000 12.5000 19.7564 38.0974 8.51745 326 12.5000 87.5000 12.5000 28.0013 53.7152 11.0979 327 25.0000 87.5000 12.5000 29.4927 54.4842 11.1678 328 37.5000 87.5000 12.5000 32.1524 55.8555 11.2924 329 50.0000 87.5000 12.5000 36.1547 57.9192 11.4800 330 62.5000 87.5000 12.5000 41.6451 60.7500 11.7372 331 75.0000 87.5000 12.5000 48.7500 64.4134 12.0702 332 81.2500 93.7500 18.7500 57.6311 75.5204 15.1511 333 0.00000 87.5000 12.5000 27.4154 53.4132 11.0705 334 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 335 12.5000 100.000 12.5000 37.2476 72.2052 14.1800 336 25.0000 100.000 12.5000 38.7389 72.9741 14.2499 337 37.5000 100.000 12.5000 41.3986 74.3455 14.3745 338 50.0000 100.000 12.5000 45.4010 76.4091 14.5621 339 62.5000 100.000 12.5000 50.8914 79.2400 14.8194 340 75.0000 100.000 12.5000 57.9963 82.9033 15.1523 341 87.5000 100.000 12.5000 66.8288 87.4574 15.5662 342 100.000 100.000 12.5000 77.4918 92.9552 16.0658 343 12.5000 0.00000 25.0000 2.49512 1.66572 5.81637 344 25.0000 0.00000 25.0000 3.98649 2.43468 5.88625 345 37.5000 0.00000 25.0000 6.64617 3.80602 6.01088 346 50.0000 0.00000 25.0000 10.6485 5.86966 6.19842 347 62.5000 0.00000 25.0000 16.1389 8.70052 6.45569 348 75.0000 0.00000 25.0000 23.2439 12.3638 6.78862 349 87.5000 0.00000 25.0000 32.0764 16.9179 7.20249 350 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 351 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 352 12.5000 12.5000 25.0000 3.00318 2.68170 5.98572 353 25.0000 12.5000 25.0000 4.49455 3.45066 6.05561 354 37.5000 12.5000 25.0000 7.15423 4.82200 6.18023 355 50.0000 12.5000 25.0000 11.1566 6.88564 6.36778 356 62.5000 12.5000 25.0000 16.6470 9.71650 6.62505 357 75.0000 12.5000 25.0000 23.7519 13.3798 6.95797 358 87.5000 12.5000 25.0000 32.5844 17.9339 7.37185 359 100.000 12.5000 25.0000 43.2474 23.4318 7.87150 360 0.00000 25.0000 12.5000 3.05773 4.70462 2.95117 361 0.00000 25.0000 25.0000 3.71049 4.96568 6.38934 362 37.5000 25.0000 25.0000 8.44745 7.40807 6.61131 363 50.0000 25.0000 25.0000 12.4498 9.47171 6.79885 364 62.5000 25.0000 25.0000 17.9402 12.3026 7.05612 365 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 366 87.5000 25.0000 25.0000 33.8776 20.5200 7.80292 367 100.000 25.0000 25.0000 44.5407 26.0178 8.30257 368 100.000 25.0000 37.5000 45.7048 26.4834 14.4341 369 3.12500 0.00000 0.00000 1.09876 1.05092 1.00463 370 31.2500 18.7500 18.7500 5.81260 4.96257 4.26057 371 37.5000 37.5000 25.0000 10.7537 12.0200 7.38008 372 50.0000 37.5000 25.0000 14.7561 14.0837 7.56763 373 62.5000 37.5000 25.0000 20.2465 16.9145 7.82490 374 75.0000 37.5000 25.0000 27.3514 20.5778 8.15782 375 87.5000 37.5000 25.0000 36.1839 25.1319 8.57170 376 68.7500 31.2500 43.7500 24.2622 16.8436 17.8875 377 12.5000 25.0000 25.0000 4.29640 5.26778 6.41680 378 12.5000 37.5000 25.0000 6.60270 9.87973 7.18557 379 25.0000 50.0000 25.0000 11.5647 17.5889 8.41233 380 37.5000 50.0000 25.0000 14.2243 18.9602 8.53696 381 50.0000 50.0000 25.0000 18.2267 21.0239 8.72450 382 62.5000 50.0000 25.0000 23.7171 23.8547 8.98177 383 75.0000 50.0000 25.0000 30.8220 27.5181 9.31470 384 87.5000 50.0000 25.0000 39.6545 32.0721 9.72857 385 100.000 50.0000 25.0000 50.3176 37.5700 10.2282 386 12.5000 50.0000 25.0000 10.0733 16.8199 8.34245 387 12.5000 62.5000 25.0000 14.8342 26.3404 9.92943 388 25.0000 62.5000 25.0000 16.3256 27.1094 9.99931 389 37.5000 62.5000 25.0000 18.9852 28.4807 10.1239 390 50.0000 62.5000 25.0000 22.9876 30.5444 10.3115 391 62.5000 62.5000 25.0000 28.4780 33.3752 10.5688 392 75.0000 62.5000 25.0000 35.5829 37.0385 10.9017 393 87.5000 62.5000 25.0000 44.4154 41.5926 11.3156 394 0.00000 62.5000 25.0000 14.2483 26.0383 9.90197 395 0.00000 75.0000 25.0000 20.4092 38.3584 11.9556 396 12.5000 75.0000 25.0000 20.9951 38.6605 11.9831 397 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 398 37.5000 75.0000 25.0000 25.1462 40.8008 12.1776 399 50.0000 75.0000 25.0000 29.1485 42.8645 12.3651 400 62.5000 75.0000 25.0000 34.6389 45.6953 12.6224 401 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 402 87.5000 75.0000 25.0000 50.5764 53.9127 13.3692 403 12.5000 62.5000 0.00000 13.9250 25.9768 5.14051 404 12.5000 75.0000 0.00000 20.0859 38.2969 7.19417 405 12.5000 87.5000 25.0000 28.6541 53.9763 14.5361 406 25.0000 87.5000 25.0000 30.1454 54.7453 14.6060 407 37.5000 87.5000 25.0000 32.8051 56.1166 14.7306 408 50.0000 87.5000 25.0000 36.8075 58.1802 14.9181 409 62.5000 87.5000 25.0000 42.2979 61.0111 15.1754 410 75.0000 87.5000 25.0000 49.4028 64.6744 15.5083 411 0.00000 50.0000 12.5000 8.83462 16.2568 4.87682 412 0.00000 87.5000 25.0000 28.0682 53.6742 14.5086 413 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 414 12.5000 100.000 25.0000 37.9003 72.4662 17.6182 415 25.0000 100.000 25.0000 39.3917 73.2352 17.6881 416 37.5000 100.000 25.0000 42.0514 74.6065 17.8127 417 50.0000 100.000 25.0000 46.0538 76.6702 18.0003 418 62.5000 100.000 25.0000 51.5442 79.5010 18.2575 419 75.0000 100.000 25.0000 58.6491 83.1644 18.5905 420 87.5000 100.000 25.0000 67.4816 87.7184 19.0043 421 100.000 100.000 25.0000 78.1446 93.2163 19.5040 422 12.5000 0.00000 37.5000 3.65924 2.13130 11.9479 423 25.0000 0.00000 37.5000 5.15062 2.90026 12.0178 424 37.5000 0.00000 37.5000 7.81030 4.27159 12.1424 425 50.0000 0.00000 37.5000 11.8127 6.33523 12.3300 426 62.5000 0.00000 37.5000 17.3031 9.16610 12.5873 427 75.0000 0.00000 37.5000 24.4080 12.8294 12.9202 428 87.5000 0.00000 37.5000 33.2405 17.3835 13.3341 429 100.000 0.00000 37.5000 43.9035 22.8814 13.8337 430 0.00000 12.5000 37.5000 3.58140 2.84518 12.0898 431 12.5000 12.5000 37.5000 4.16730 3.14728 12.1173 432 25.0000 12.5000 37.5000 5.65868 3.91623 12.1872 433 37.5000 12.5000 37.5000 8.31836 5.28757 12.3118 434 50.0000 12.5000 37.5000 12.3207 7.35121 12.4993 435 62.5000 12.5000 37.5000 17.8111 10.1821 12.7566 436 75.0000 12.5000 37.5000 24.9160 13.8454 13.0895 437 87.5000 12.5000 37.5000 33.7486 18.3995 13.5034 438 0.00000 12.5000 25.0000 2.41727 2.37961 5.95827 439 0.00000 25.0000 37.5000 4.87462 5.43126 12.5209 440 12.5000 25.0000 37.5000 5.46052 5.73335 12.5484 441 25.0000 25.0000 37.5000 6.95189 6.50231 12.6182 442 37.5000 25.0000 37.5000 9.61157 7.87365 12.7429 443 50.0000 25.0000 37.5000 13.6140 9.93729 12.9304 444 62.5000 25.0000 37.5000 19.1043 12.7682 13.1877 445 75.0000 25.0000 37.5000 26.2093 16.4315 13.5206 446 87.5000 25.0000 37.5000 35.0418 20.9855 13.9345 447 87.5000 37.5000 37.5000 37.3481 25.5975 14.7033 448 0.00000 37.5000 12.5000 5.36402 9.31657 3.71994 449 25.0000 37.5000 25.0000 8.09407 10.6487 7.25545 450 25.0000 37.5000 37.5000 9.25819 11.1143 13.3870 451 50.0000 37.5000 37.5000 15.9202 14.5492 13.6992 452 62.5000 37.5000 37.5000 21.4106 17.3801 13.9565 453 75.0000 37.5000 37.5000 28.5156 21.0434 14.2894 454 0.00000 37.5000 25.0000 6.01679 9.57763 7.15812 455 0.00000 37.5000 37.5000 7.18091 10.0432 13.2897 456 0.00000 50.0000 37.5000 10.6515 16.9834 14.4466 457 12.5000 50.0000 37.5000 11.2374 17.2855 14.4740 458 25.0000 50.0000 37.5000 12.7288 18.0545 14.5439 459 37.5000 50.0000 37.5000 15.3885 19.4258 14.6685 460 50.0000 50.0000 37.5000 19.3908 21.4895 14.8561 461 62.5000 50.0000 37.5000 24.8812 24.3203 15.1133 462 75.0000 50.0000 37.5000 31.9862 27.9836 15.4463 463 87.5000 50.0000 37.5000 40.8187 32.5377 15.8601 464 12.5000 25.0000 0.00000 3.38719 4.90415 1.62789 465 12.5000 37.5000 0.00000 5.69348 9.51610 2.39666 466 12.5000 62.5000 37.5000 15.9983 26.8060 16.0610 467 25.0000 62.5000 37.5000 17.4897 27.5750 16.1309 468 37.5000 100.000 50.0000 44.9673 75.7727 33.1713 469 50.0000 62.5000 37.5000 24.1517 31.0099 16.4430 470 62.5000 62.5000 37.5000 29.6421 33.8408 16.7003 471 75.0000 62.5000 37.5000 36.7471 37.5041 17.0332 472 87.5000 62.5000 37.5000 45.5796 42.0582 17.4471 473 87.5000 75.0000 62.5000 55.8954 56.0400 41.3852 474 87.5000 75.0000 75.0000 59.0052 57.2837 57.7647 475 87.5000 87.5000 75.0000 66.6641 72.5995 60.3177 476 87.5000 100.000 75.0000 75.9104 91.0894 63.3998 477 37.5000 75.0000 37.5000 26.3103 41.2664 18.3092 478 50.0000 75.0000 37.5000 30.3127 43.3300 18.4967 479 62.5000 75.0000 37.5000 35.8031 46.1609 18.7540 480 75.0000 75.0000 37.5000 42.9080 49.8242 19.0869 481 87.5000 75.0000 37.5000 51.7405 54.3783 19.5008 482 87.5000 87.5000 37.5000 59.3994 69.6941 22.0538 483 12.5000 75.0000 37.5000 22.1592 39.1261 18.1146 484 12.5000 87.5000 37.5000 29.8182 54.4419 20.6677 485 25.0000 87.5000 37.5000 31.3096 55.2108 20.7375 486 37.5000 87.5000 37.5000 33.9692 56.5822 20.8622 487 50.0000 87.5000 37.5000 37.9716 58.6458 21.0497 488 62.5000 87.5000 37.5000 43.4620 61.4767 21.3070 489 75.0000 87.5000 37.5000 50.5669 65.1400 21.6399 490 6.25000 43.7500 6.25000 6.99165 12.5218 3.39151 491 0.00000 87.5000 37.5000 29.2323 54.1398 20.6402 492 0.00000 100.000 37.5000 38.4785 72.6297 23.7223 493 12.5000 100.000 37.5000 39.0645 72.9318 23.7498 494 25.0000 100.000 37.5000 40.5558 73.7008 23.8197 495 37.5000 100.000 37.5000 43.2155 75.0721 23.9443 496 50.0000 100.000 37.5000 47.2179 77.1358 24.1318 497 62.5000 100.000 37.5000 52.7083 79.9666 24.3891 498 75.0000 100.000 37.5000 59.8132 83.6299 24.7220 499 87.5000 100.000 37.5000 68.6457 88.1840 25.1359 500 100.000 100.000 37.5000 79.3087 93.6819 25.6355 501 100.000 100.000 50.0000 81.0605 94.3825 34.8625 502 25.0000 0.00000 50.0000 6.90243 3.60087 21.2448 503 37.5000 0.00000 50.0000 9.56211 4.97221 21.3694 504 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 505 62.5000 0.00000 50.0000 19.0549 9.86671 21.8143 506 75.0000 0.00000 50.0000 26.1598 13.5300 22.1472 507 87.5000 0.00000 50.0000 34.9923 18.0841 22.5611 508 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 509 100.000 37.5000 87.5000 59.1417 35.5469 73.8291 510 100.000 37.5000 100.000 63.8089 37.4135 98.4114 511 25.0000 12.5000 50.0000 7.41049 4.61685 21.4142 512 37.5000 12.5000 50.0000 10.0702 5.98819 21.5388 513 50.0000 12.5000 50.0000 14.0725 8.05183 21.7263 514 62.5000 12.5000 50.0000 19.5629 10.8827 21.9836 515 75.0000 12.5000 50.0000 26.6679 14.5460 22.3165 516 87.5000 12.5000 50.0000 35.5004 19.1001 22.7304 517 87.5000 62.5000 100.000 61.3773 48.3763 100.656 518 87.5000 75.0000 100.000 67.5382 60.6964 102.709 519 87.5000 87.5000 100.000 75.1972 76.0122 105.262 520 100.000 87.5000 100.000 85.8602 81.5101 105.762 521 37.5000 25.0000 50.0000 11.3634 8.57426 21.9699 522 50.0000 25.0000 50.0000 15.3658 10.6379 22.1574 523 62.5000 25.0000 50.0000 20.8562 13.4688 22.4147 524 75.0000 25.0000 50.0000 27.9611 17.1321 22.7476 525 87.5000 25.0000 50.0000 36.7936 21.6862 23.1615 526 100.000 25.0000 50.0000 47.4566 27.1840 23.6611 527 100.000 50.0000 87.5000 62.6123 42.4871 74.9860 528 100.000 50.0000 100.000 67.2794 44.3537 99.5683 529 100.000 62.5000 100.000 72.0404 53.8742 101.155 530 100.000 75.0000 100.000 78.2013 66.1943 103.209 531 50.0000 37.5000 50.0000 17.6721 15.2499 22.9262 532 62.5000 37.5000 50.0000 23.1625 18.0807 23.1835 533 75.0000 37.5000 50.0000 30.2674 21.7440 23.5164 534 87.5000 37.5000 50.0000 39.0999 26.2981 23.9303 535 100.000 37.5000 50.0000 49.7629 31.7960 24.4299 536 100.000 62.5000 87.5000 67.3732 52.0076 76.5730 537 100.000 75.0000 87.5000 73.5341 64.3277 78.6266 538 37.5000 37.5000 50.0000 13.6697 13.1862 22.7386 539 37.5000 50.0000 50.0000 17.1403 20.1264 23.8955 540 62.5000 50.0000 50.0000 26.6331 25.0209 24.3403 541 75.0000 50.0000 50.0000 33.7380 28.6843 24.6733 542 87.5000 50.0000 50.0000 42.5705 33.2383 25.0871 543 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 544 12.5000 50.0000 50.0000 12.9892 17.9861 23.7010 545 12.5000 62.5000 50.0000 17.7501 27.5066 25.2880 546 25.0000 62.5000 50.0000 19.2415 28.2756 25.3579 547 37.5000 62.5000 50.0000 21.9012 29.6469 25.4825 548 50.0000 62.5000 50.0000 25.9036 31.7106 25.6700 549 62.5000 62.5000 50.0000 31.3940 34.5414 25.9273 550 75.0000 62.5000 50.0000 38.4989 38.2047 26.2602 551 87.5000 62.5000 50.0000 47.3314 42.7588 26.6741 552 100.000 62.5000 50.0000 57.9944 48.2567 27.1738 553 100.000 62.5000 62.5000 60.3975 49.2178 39.8312 554 6.25000 56.2500 6.25000 11.0928 20.7230 4.75858 555 0.00000 62.5000 50.0000 17.1642 27.2045 25.2605 556 25.0000 75.0000 50.0000 25.4024 40.5957 27.4115 557 50.0000 75.0000 50.0000 32.0645 44.0306 27.7237 558 62.5000 75.0000 50.0000 37.5549 46.8615 27.9810 559 75.0000 75.0000 50.0000 44.6598 50.5248 28.3139 560 87.5000 75.0000 50.0000 53.4923 55.0789 28.7278 561 100.000 75.0000 50.0000 64.1553 60.5768 29.2274 562 100.000 75.0000 62.5000 66.5584 61.5379 41.8848 563 100.000 87.5000 87.5000 81.1931 79.6435 81.1796 564 37.5000 75.0000 50.0000 28.0621 41.9670 27.5361 565 37.5000 87.5000 50.0000 35.7211 57.2828 30.0892 566 50.0000 87.5000 50.0000 39.7234 59.3464 30.2767 567 62.5000 87.5000 50.0000 45.2138 62.1773 30.5340 568 75.0000 87.5000 50.0000 52.3187 65.8406 30.8669 569 87.5000 87.5000 50.0000 61.1513 70.3947 31.2808 570 100.000 87.5000 50.0000 71.8143 75.8926 31.7804 571 12.5000 87.5000 50.0000 31.5700 55.1425 29.8946 572 12.5000 100.000 50.0000 40.8163 73.6324 32.9768 573 12.5000 100.000 62.5000 43.2194 74.5935 45.6342 574 100.000 100.000 100.000 95.1065 100.000 108.844 575 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 576 62.5000 100.000 50.0000 54.4601 80.6672 33.6161 577 75.0000 100.000 50.0000 61.5650 84.3305 33.9490 578 87.5000 100.000 50.0000 70.3975 88.8846 34.3629 579 12.5000 0.00000 50.0000 5.41106 2.83192 21.1749 580 12.5000 0.00000 62.5000 7.81417 3.79301 33.8324 581 25.0000 0.00000 62.5000 9.30554 4.56196 33.9022 582 37.5000 0.00000 62.5000 11.9652 5.93330 34.0269 583 50.0000 0.00000 62.5000 15.9676 7.99694 34.2144 584 62.5000 0.00000 62.5000 21.4580 10.8278 34.4717 585 75.0000 0.00000 62.5000 28.5629 14.4911 34.8046 586 87.5000 0.00000 62.5000 37.3954 19.0452 35.2185 587 100.000 0.00000 62.5000 48.0584 24.5431 35.7181 588 12.5000 12.5000 50.0000 5.91912 3.84789 21.3443 589 12.5000 12.5000 62.5000 8.32223 4.80899 34.0017 590 25.0000 12.5000 62.5000 9.81360 5.57794 34.0716 591 37.5000 12.5000 62.5000 12.4733 6.94928 34.1962 592 50.0000 12.5000 62.5000 16.4757 9.01292 34.3838 593 62.5000 12.5000 62.5000 21.9661 11.8438 34.6410 594 75.0000 12.5000 62.5000 29.0710 15.5071 34.9740 595 87.5000 12.5000 62.5000 37.9035 20.0612 35.3878 596 100.000 12.5000 62.5000 48.5665 25.5591 35.8875 597 0.00000 25.0000 50.0000 6.62643 6.13187 21.7479 598 0.00000 25.0000 62.5000 9.02954 7.09297 34.4053 599 25.0000 25.0000 62.5000 11.1068 8.16402 34.5027 600 37.5000 25.0000 62.5000 13.7665 9.53536 34.6273 601 50.0000 25.0000 62.5000 17.7689 11.5990 34.8148 602 62.5000 25.0000 62.5000 23.2593 14.4299 35.0721 603 75.0000 25.0000 62.5000 30.3642 18.0932 35.4050 604 87.5000 25.0000 62.5000 39.1967 22.6472 35.8189 605 100.000 25.0000 62.5000 49.8597 28.1451 36.3186 606 100.000 25.0000 75.0000 52.9695 29.3888 52.6981 607 25.0000 37.5000 50.0000 11.0100 11.8149 22.6140 608 25.0000 37.5000 62.5000 13.4131 12.7760 35.2714 609 37.5000 37.5000 62.5000 16.0728 14.1473 35.3961 610 50.0000 37.5000 62.5000 20.0752 16.2109 35.5836 611 62.5000 37.5000 62.5000 25.5656 19.0418 35.8409 612 75.0000 37.5000 62.5000 32.6705 22.7051 36.1738 613 87.5000 37.5000 62.5000 41.5030 27.2592 36.5877 614 100.000 37.5000 62.5000 52.1660 32.7571 37.0873 615 100.000 37.5000 75.0000 55.2758 34.0008 53.4668 616 87.5000 75.0000 87.5000 62.8711 58.8298 78.1270 617 25.0000 50.0000 62.5000 16.8837 19.7162 36.4283 618 37.5000 50.0000 62.5000 19.5434 21.0875 36.5529 619 50.0000 50.0000 62.5000 23.5458 23.1512 36.7405 620 62.5000 50.0000 62.5000 29.0362 25.9820 36.9978 621 75.0000 50.0000 62.5000 36.1411 29.6453 37.3307 622 87.5000 50.0000 62.5000 44.9736 34.1994 37.7446 623 100.000 50.0000 62.5000 55.6366 39.6973 38.2442 624 100.000 50.0000 75.0000 58.7464 40.9410 54.6237 625 25.0000 50.0000 50.0000 14.4806 18.7551 23.7709 626 25.0000 62.5000 62.5000 21.6446 29.2367 38.0153 627 37.5000 62.5000 62.5000 24.3043 30.6080 38.1399 628 50.0000 62.5000 62.5000 28.3067 32.6716 38.3275 629 75.0000 62.5000 62.5000 40.9020 39.1658 38.9177 630 87.5000 62.5000 62.5000 49.7345 43.7199 39.3315 631 100.000 62.5000 75.0000 63.5073 50.4615 56.2107 632 100.000 75.0000 75.0000 69.6682 62.7816 58.2644 633 100.000 87.5000 75.0000 77.3272 78.0974 60.8174 634 25.0000 75.0000 62.5000 27.8055 41.5568 40.0690 635 37.5000 75.0000 62.5000 30.4652 42.9281 40.1936 636 50.0000 75.0000 62.5000 34.4676 44.9917 40.3811 637 62.5000 75.0000 62.5000 39.9580 47.8226 40.6384 638 75.0000 75.0000 62.5000 47.0629 51.4859 40.9713 639 6.25000 18.7500 6.25000 2.34153 3.22288 1.84146 640 6.25000 31.2500 6.25000 4.12024 6.77979 2.43437 641 0.00000 75.0000 50.0000 23.3251 39.5246 27.3142 642 0.00000 87.5000 50.0000 30.9841 54.8404 29.8672 643 0.00000 87.5000 62.5000 33.3872 55.8015 42.5246 644 37.5000 87.5000 62.5000 38.1242 58.2439 42.7466 645 50.0000 87.5000 62.5000 42.1266 60.3075 42.9341 646 62.5000 87.5000 62.5000 47.6169 63.1384 43.1914 647 75.0000 87.5000 62.5000 54.7219 66.8017 43.5243 648 87.5000 87.5000 62.5000 63.5544 71.3558 43.9382 649 100.000 87.5000 62.5000 74.2174 76.8537 44.4379 650 25.0000 75.0000 37.5000 23.6506 39.8951 18.1845 651 25.0000 100.000 50.0000 42.3076 74.4014 33.0466 652 25.0000 100.000 62.5000 44.7108 75.3625 45.7041 653 37.5000 100.000 62.5000 47.3704 76.7338 45.8287 654 50.0000 100.000 62.5000 51.3728 78.7975 46.0162 655 62.5000 100.000 62.5000 56.8632 81.6283 46.2735 656 75.0000 100.000 62.5000 63.9681 85.2916 46.6064 657 87.5000 100.000 62.5000 72.8006 89.8457 47.0203 658 100.000 100.000 62.5000 83.4636 95.3436 47.5200 659 100.000 100.000 75.0000 86.5734 96.5873 63.8995 660 25.0000 0.00000 75.0000 12.4153 5.80568 50.2817 661 37.5000 0.00000 75.0000 15.0750 7.17702 50.4064 662 50.0000 0.00000 75.0000 19.0774 9.24066 50.5939 663 62.5000 0.00000 75.0000 24.5678 12.0715 50.8512 664 75.0000 0.00000 75.0000 31.6727 15.7348 51.1841 665 87.5000 0.00000 75.0000 40.5052 20.2889 51.5980 666 100.000 0.00000 75.0000 51.1682 25.7868 52.0976 667 0.00000 12.5000 75.0000 10.8461 5.75060 50.3538 668 12.5000 12.5000 75.0000 11.4320 6.05270 50.3812 669 25.0000 12.5000 75.0000 12.9234 6.82166 50.4511 670 37.5000 12.5000 75.0000 15.5831 8.19300 50.5757 671 50.0000 12.5000 75.0000 19.5854 10.2566 50.7633 672 62.5000 12.5000 75.0000 25.0758 13.0875 51.0205 673 75.0000 12.5000 75.0000 32.1807 16.7508 51.3535 674 87.5000 12.5000 75.0000 41.0133 21.3049 51.7673 675 100.000 12.5000 75.0000 51.6763 26.8028 52.2670 676 12.5000 25.0000 62.5000 9.61545 7.39506 34.4328 677 12.5000 25.0000 75.0000 12.7252 8.63878 50.8123 678 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 679 37.5000 25.0000 75.0000 16.8763 10.7791 51.0068 680 50.0000 25.0000 75.0000 20.8787 12.8427 51.1944 681 62.5000 25.0000 75.0000 26.3690 15.6736 51.4516 682 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 683 87.5000 25.0000 75.0000 42.3065 23.8910 52.1984 684 100.000 25.0000 87.5000 56.8354 30.9350 73.0603 685 100.000 25.0000 100.000 61.5026 32.8015 97.6426 686 25.0000 25.0000 50.0000 8.70371 7.20292 21.8452 687 25.0000 37.5000 75.0000 16.5229 14.0197 51.6510 688 37.5000 37.5000 75.0000 19.1826 15.3910 51.7756 689 50.0000 37.5000 75.0000 23.1850 17.4547 51.9631 690 62.5000 37.5000 75.0000 28.6753 20.2855 52.2204 691 75.0000 37.5000 75.0000 35.7803 23.9488 52.5533 692 87.5000 37.5000 75.0000 44.6128 28.5029 52.9672 693 12.5000 37.5000 50.0000 9.51864 11.0459 22.5441 694 12.5000 37.5000 62.5000 11.9217 12.0070 35.2016 695 12.5000 50.0000 75.0000 18.5021 20.1909 52.7379 696 25.0000 50.0000 75.0000 19.9935 20.9599 52.8078 697 37.5000 50.0000 75.0000 22.6532 22.3312 52.9325 698 50.0000 50.0000 75.0000 26.6555 24.3949 53.1200 699 62.5000 50.0000 75.0000 32.1459 27.2257 53.3773 700 75.0000 50.0000 75.0000 39.2509 30.8891 53.7102 701 87.5000 50.0000 75.0000 48.0834 35.4431 54.1241 702 87.5000 50.0000 87.5000 51.9493 36.9893 74.4863 703 0.00000 12.5000 62.5000 7.73632 4.50689 33.9743 704 12.5000 62.5000 75.0000 23.2630 29.7114 54.3249 705 25.0000 62.5000 75.0000 24.7544 30.4804 54.3948 706 37.5000 62.5000 75.0000 27.4141 31.8517 54.5194 707 50.0000 62.5000 75.0000 31.4165 33.9154 54.7070 708 62.5000 62.5000 75.0000 36.9068 36.7462 54.9643 709 75.0000 62.5000 75.0000 44.0118 40.4095 55.2972 710 87.5000 62.5000 75.0000 52.8443 44.9636 55.7111 711 87.5000 62.5000 87.5000 56.7102 46.5097 76.0733 712 12.5000 75.0000 50.0000 23.9110 39.8267 27.3416 713 12.5000 75.0000 62.5000 26.3142 40.7878 39.9991 714 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 715 37.5000 75.0000 75.0000 33.5750 44.1718 56.5731 716 50.0000 75.0000 75.0000 37.5774 46.2355 56.7606 717 62.5000 75.0000 75.0000 43.0678 49.0663 57.0179 718 62.5000 87.5000 87.5000 54.5927 65.9282 79.9332 719 62.5000 87.5000 100.000 59.2598 67.7948 104.515 720 25.0000 87.5000 50.0000 33.0614 55.9115 29.9645 721 25.0000 87.5000 62.5000 35.4645 56.8726 42.6220 722 25.0000 87.5000 75.0000 38.5743 58.1163 59.0015 723 37.5000 87.5000 75.0000 41.2339 59.4876 59.1261 724 50.0000 87.5000 75.0000 45.2363 61.5512 59.3136 725 62.5000 87.5000 75.0000 50.7267 64.3821 59.5709 726 0.00000 75.0000 37.5000 21.5733 38.8240 18.0872 727 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 728 0.00000 100.000 62.5000 42.6335 74.2914 45.6067 729 0.00000 100.000 75.0000 45.7432 75.5351 61.9862 730 12.5000 100.000 75.0000 46.3292 75.8372 62.0137 731 25.0000 100.000 75.0000 47.8205 76.6062 62.0836 732 37.5000 100.000 75.0000 50.4802 77.9775 62.2082 733 50.0000 100.000 75.0000 54.4826 80.0412 62.3958 734 62.5000 100.000 75.0000 59.9730 82.8720 62.6530 735 75.0000 100.000 75.0000 67.0779 86.5354 62.9859 736 75.0000 87.5000 75.0000 57.8316 68.0454 59.9038 737 12.5000 0.00000 75.0000 10.9239 5.03672 50.2119 738 12.5000 0.00000 87.5000 14.7899 6.58285 70.5741 739 25.0000 0.00000 87.5000 16.2813 7.35181 70.6440 740 37.5000 0.00000 87.5000 18.9409 8.72315 70.7687 741 50.0000 0.00000 87.5000 22.9433 10.7868 70.9562 742 62.5000 0.00000 87.5000 28.4337 13.6177 71.2135 743 75.0000 0.00000 87.5000 35.5386 17.2810 71.5464 744 87.5000 0.00000 87.5000 44.3711 21.8350 71.9603 745 100.000 0.00000 87.5000 55.0341 27.3329 72.4599 746 100.000 0.00000 100.000 59.7013 29.1995 97.0422 747 100.000 12.5000 100.000 60.2093 30.2155 97.2115 748 25.0000 12.5000 87.5000 16.7893 8.36779 70.8134 749 37.5000 12.5000 87.5000 19.4490 9.73913 70.9380 750 50.0000 12.5000 87.5000 23.4514 11.8028 71.1255 751 62.5000 12.5000 87.5000 28.9418 14.6336 71.3828 752 75.0000 12.5000 87.5000 36.0467 18.2969 71.7157 753 87.5000 12.5000 87.5000 44.8792 22.8510 72.1296 754 100.000 12.5000 87.5000 55.5422 28.3489 72.6293 755 12.5000 12.5000 87.5000 15.2979 7.59883 70.7435 756 12.5000 25.0000 87.5000 16.5912 10.1849 71.1746 757 25.0000 25.0000 87.5000 18.0825 10.9539 71.2445 758 37.5000 25.0000 87.5000 20.7422 12.3252 71.3691 759 50.0000 25.0000 87.5000 24.7446 14.3888 71.5566 760 62.5000 25.0000 87.5000 30.2350 17.2197 71.8139 761 75.0000 25.0000 87.5000 37.3399 20.8830 72.1468 762 87.5000 25.0000 87.5000 46.1724 25.4371 72.5607 763 87.5000 25.0000 100.000 50.8395 27.3037 97.1430 764 12.5000 37.5000 75.0000 15.0315 13.2507 51.5811 765 12.5000 37.5000 87.5000 18.8975 14.7969 71.9433 766 25.0000 37.5000 87.5000 20.3888 15.5658 72.0132 767 37.5000 37.5000 87.5000 23.0485 16.9371 72.1379 768 50.0000 37.5000 87.5000 27.0509 19.0008 72.3254 769 62.5000 37.5000 87.5000 32.5413 21.8317 72.5827 770 75.0000 37.5000 87.5000 39.6462 25.4950 72.9156 771 87.5000 37.5000 87.5000 48.4787 30.0490 73.3295 772 87.5000 37.5000 100.000 53.1458 31.9156 97.9117 773 87.5000 50.0000 100.000 56.6164 38.8558 99.0686 774 12.5000 25.0000 50.0000 7.21234 6.43397 21.7754 775 25.0000 50.0000 87.5000 23.8594 22.5060 73.1701 776 37.5000 50.0000 87.5000 26.5191 23.8774 73.2947 777 50.0000 50.0000 87.5000 30.5215 25.9410 73.4823 778 62.5000 50.0000 87.5000 36.0119 28.7719 73.7395 779 75.0000 50.0000 87.5000 43.1168 32.4352 74.0725 780 75.0000 62.5000 87.5000 47.8777 41.9557 75.6594 781 75.0000 62.5000 100.000 52.5448 43.8222 100.242 782 12.5000 50.0000 87.5000 22.3681 21.7371 73.1002 783 12.5000 62.5000 87.5000 27.1290 31.2576 74.6872 784 25.0000 62.5000 87.5000 28.6203 32.0265 74.7571 785 37.5000 62.5000 87.5000 31.2800 33.3978 74.8817 786 50.0000 62.5000 87.5000 35.2824 35.4615 75.0693 787 62.5000 62.5000 87.5000 40.7728 38.2924 75.3265 788 62.5000 62.5000 100.000 45.4399 40.1589 99.9088 789 12.5000 50.0000 62.5000 15.3923 18.9472 36.3584 790 12.5000 62.5000 62.5000 20.1532 28.4677 37.9454 791 12.5000 75.0000 75.0000 29.4239 42.0315 56.3786 792 12.5000 75.0000 87.5000 33.2899 43.5776 76.7409 793 25.0000 75.0000 87.5000 34.7812 44.3466 76.8107 794 37.5000 75.0000 87.5000 37.4409 45.7179 76.9354 795 50.0000 75.0000 87.5000 41.4433 47.7816 77.1229 796 62.5000 75.0000 87.5000 46.9337 50.6124 77.3802 797 75.0000 75.0000 87.5000 54.0386 54.2758 77.7131 798 75.0000 87.5000 87.5000 61.6976 69.5916 80.2661 799 12.5000 87.5000 62.5000 33.9731 56.1036 42.5521 800 12.5000 87.5000 75.0000 37.0829 57.3473 58.9316 801 12.5000 87.5000 87.5000 40.9488 58.8934 79.2939 802 25.0000 87.5000 87.5000 42.4402 59.6624 79.3637 803 37.5000 87.5000 87.5000 45.0999 61.0337 79.4884 804 50.0000 87.5000 87.5000 49.1023 63.0974 79.6759 805 0.00000 75.0000 62.5000 25.7282 40.4857 39.9716 806 0.00000 87.5000 75.0000 36.4970 57.0452 58.9041 807 0.00000 87.5000 87.5000 40.3629 58.5913 79.2664 808 0.00000 100.000 87.5000 49.6092 77.0813 82.3485 809 12.5000 100.000 87.5000 50.1951 77.3834 82.3760 810 25.0000 100.000 87.5000 51.6865 78.1523 82.4459 811 37.5000 100.000 87.5000 54.3461 79.5237 82.5705 812 50.0000 100.000 87.5000 58.3485 81.5873 82.7580 813 62.5000 100.000 87.5000 63.8389 84.4182 83.0153 814 75.0000 100.000 87.5000 70.9438 88.0815 83.3482 815 87.5000 100.000 87.5000 79.7763 92.6356 83.7621 816 100.000 100.000 87.5000 90.4394 98.1334 84.2618 817 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 818 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 819 37.5000 0.00000 100.000 23.6081 10.5897 95.3509 820 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 821 62.5000 0.00000 100.000 33.1008 15.4842 95.7957 822 75.0000 0.00000 100.000 40.2058 19.1475 96.1287 823 87.5000 0.00000 100.000 49.0383 23.7016 96.5425 824 0.00000 12.5000 87.5000 14.7120 7.29673 70.7160 825 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 826 12.5000 12.5000 100.000 19.9651 9.46539 95.3258 827 25.0000 12.5000 100.000 21.4564 10.2343 95.3957 828 37.5000 12.5000 100.000 24.1161 11.6057 95.5203 829 50.0000 12.5000 100.000 28.1185 13.6693 95.7078 830 62.5000 12.5000 100.000 33.6089 16.5002 95.9651 831 75.0000 12.5000 100.000 40.7138 20.1635 96.2980 832 87.5000 12.5000 100.000 49.5463 24.7176 96.7119 833 0.00000 12.5000 50.0000 5.33321 3.54580 21.3168 834 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 835 12.5000 25.0000 100.000 21.2583 12.0515 95.7568 836 25.0000 25.0000 100.000 22.7497 12.8204 95.8267 837 37.5000 25.0000 100.000 25.4093 14.1918 95.9514 838 50.0000 25.0000 100.000 29.4117 16.2554 96.1389 839 62.5000 25.0000 100.000 34.9021 19.0863 96.3962 840 75.0000 25.0000 100.000 42.0070 22.7496 96.7291 841 0.00000 37.5000 75.0000 14.4456 12.9486 51.5536 842 0.00000 37.5000 87.5000 18.3115 14.4948 71.9159 843 0.00000 37.5000 100.000 22.9787 16.3613 96.4982 844 12.5000 37.5000 100.000 23.5646 16.6634 96.5256 845 25.0000 37.5000 100.000 25.0560 17.4324 96.5955 846 37.5000 37.5000 100.000 27.7156 18.8037 96.7201 847 50.0000 37.5000 100.000 31.7180 20.8673 96.9077 848 62.5000 37.5000 100.000 37.2084 23.6982 97.1649 849 75.0000 37.5000 100.000 44.3133 27.3615 97.4979 850 0.00000 25.0000 75.0000 12.1393 8.33668 50.7848 851 0.00000 25.0000 87.5000 16.0053 9.88281 71.1471 852 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 853 12.5000 50.0000 100.000 27.0352 23.6036 97.6825 854 25.0000 50.0000 100.000 28.5266 24.3726 97.7524 855 37.5000 50.0000 100.000 31.1862 25.7439 97.8770 856 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 857 62.5000 50.0000 100.000 40.6790 30.6384 98.3218 858 75.0000 50.0000 100.000 47.7839 34.3017 98.6547 859 0.00000 37.5000 62.5000 11.3358 11.7049 35.1741 860 0.00000 50.0000 87.5000 21.7821 21.4350 73.0728 861 0.00000 62.5000 100.000 31.2102 32.8220 99.2420 862 12.5000 62.5000 100.000 31.7961 33.1241 99.2695 863 25.0000 62.5000 100.000 33.2875 33.8931 99.3394 864 37.5000 62.5000 100.000 35.9471 35.2644 99.4640 865 50.0000 62.5000 100.000 39.9495 37.3280 99.6515 866 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 867 0.00000 62.5000 62.5000 19.5673 28.1656 37.9180 868 0.00000 75.0000 75.0000 28.8380 41.7294 56.3511 869 0.00000 75.0000 87.5000 32.7040 43.2756 76.7134 870 0.00000 75.0000 100.000 37.3711 45.1421 101.296 871 12.5000 75.0000 100.000 37.9570 45.4442 101.323 872 25.0000 75.0000 100.000 39.4484 46.2132 101.393 873 37.5000 75.0000 100.000 42.1081 47.5845 101.518 874 50.0000 75.0000 100.000 46.1104 49.6481 101.705 875 62.5000 75.0000 100.000 51.6008 52.4790 101.962 876 75.0000 75.0000 100.000 58.7057 56.1423 102.295 877 75.0000 87.5000 100.000 66.3647 71.4581 104.848 878 0.00000 62.5000 75.0000 22.6771 29.4093 54.2975 879 0.00000 62.5000 87.5000 26.5430 30.9555 74.6597 880 12.5000 87.5000 100.000 45.6160 60.7600 103.876 881 25.0000 87.5000 100.000 47.1073 61.5290 103.946 882 37.5000 87.5000 100.000 49.7670 62.9003 104.071 883 50.0000 87.5000 100.000 53.7694 64.9639 104.258 884 0.00000 37.5000 50.0000 8.93273 10.7438 22.5167 885 0.00000 50.0000 62.5000 14.8064 18.6451 36.3310 886 0.00000 50.0000 75.0000 17.9162 19.8888 52.7105 887 0.00000 87.5000 100.000 45.0301 60.4579 103.849 888 0.00000 100.000 100.000 54.2763 78.9478 106.931 889 12.5000 100.000 100.000 54.8622 79.2499 106.958 890 25.0000 100.000 100.000 56.3536 80.0189 107.028 891 37.5000 100.000 100.000 59.0133 81.3902 107.153 892 50.0000 100.000 100.000 63.0157 83.4539 107.340 893 62.5000 100.000 100.000 68.5060 86.2847 107.598 894 75.0000 100.000 100.000 75.6110 89.9480 107.930 895 87.5000 100.000 100.000 84.4435 94.5021 108.344 896 18.7500 6.25000 6.25000 2.47275 2.01960 1.60228 897 31.2500 6.25000 6.25000 4.52400 3.07723 1.69840 898 43.7500 6.25000 6.25000 7.83538 4.78459 1.85357 899 56.2500 6.25000 6.25000 12.5649 7.22317 2.07519 900 68.7500 6.25000 6.25000 18.8477 10.4626 2.36959 901 81.2500 6.25000 6.25000 26.8030 14.5644 2.74236 902 93.7500 6.25000 6.25000 36.5384 19.5840 3.19854 903 100.000 12.5000 50.0000 46.1634 24.5980 23.2301 904 18.7500 18.7500 6.25000 3.32910 3.73207 1.88774 905 31.2500 18.7500 6.25000 5.38035 4.78970 1.98385 906 43.7500 18.7500 6.25000 8.69173 6.49706 2.13902 907 56.2500 18.7500 6.25000 13.4213 8.93563 2.36064 908 68.7500 18.7500 6.25000 19.7041 12.1751 2.65504 909 81.2500 18.7500 6.25000 27.6593 16.2768 3.02781 910 93.7500 18.7500 6.25000 37.3948 21.2964 3.48400 911 100.000 87.5000 37.5000 70.0625 75.1920 22.5534 912 18.7500 31.2500 6.25000 5.10781 7.28899 2.48064 913 31.2500 31.2500 6.25000 7.15906 8.34662 2.57676 914 43.7500 31.2500 6.25000 10.4704 10.0540 2.73193 915 56.2500 31.2500 6.25000 15.2000 12.4926 2.95355 916 68.7500 31.2500 6.25000 21.4828 15.7320 3.24795 917 81.2500 31.2500 6.25000 29.4380 19.8337 3.62072 918 93.7500 31.2500 6.25000 39.1735 24.8534 4.07690 919 100.000 75.0000 37.5000 62.4035 59.8762 20.0004 920 18.7500 43.7500 6.25000 7.97921 13.0310 3.43779 921 31.2500 43.7500 6.25000 10.0305 14.0886 3.53391 922 43.7500 43.7500 6.25000 13.3418 15.7960 3.68907 923 56.2500 43.7500 6.25000 18.0714 18.2346 3.91069 924 68.7500 43.7500 6.25000 24.3542 21.4740 4.20509 925 81.2500 43.7500 6.25000 32.3095 25.5757 4.57786 926 93.7500 43.7500 6.25000 42.0449 30.5954 5.03405 927 93.7500 56.2500 6.25000 46.1461 38.7965 6.40111 928 18.7500 56.2500 6.25000 12.0804 21.2322 4.80485 929 31.2500 56.2500 6.25000 14.1316 22.2898 4.90097 930 43.7500 56.2500 6.25000 17.4430 23.9972 5.05614 931 56.2500 56.2500 6.25000 22.1726 26.4357 5.27775 932 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 933 81.2500 56.2500 6.25000 36.4106 33.7769 5.94493 934 81.2500 68.7500 81.2500 52.9401 49.1033 66.1280 935 81.2500 81.2500 93.7500 64.0995 64.6021 90.8714 936 93.7500 81.2500 93.7500 73.8349 69.6217 91.3275 937 18.7500 68.7500 6.25000 17.5284 32.1267 6.62087 938 43.7500 68.7500 6.25000 22.8910 34.8916 6.87215 939 56.2500 68.7500 6.25000 27.6206 37.3302 7.09377 940 68.7500 68.7500 6.25000 33.9033 40.5696 7.38817 941 81.2500 68.7500 6.25000 41.8586 44.6714 7.76094 942 93.7500 68.7500 6.25000 51.5941 49.6910 8.21713 943 6.25000 68.7500 6.25000 16.5408 31.6175 6.57459 944 6.25000 81.2500 6.25000 23.4391 45.4121 8.87404 945 31.2500 81.2500 6.25000 26.4779 46.9789 9.01643 946 43.7500 81.2500 6.25000 29.7893 48.6863 9.17160 947 56.2500 81.2500 6.25000 34.5189 51.1249 9.39322 948 68.7500 81.2500 6.25000 40.8016 54.3643 9.68762 949 81.2500 81.2500 6.25000 48.7569 58.4660 10.0604 950 93.7500 81.2500 6.25000 58.4923 63.4857 10.5166 951 18.7500 81.2500 6.25000 24.4267 45.9213 8.92032 952 18.7500 93.7500 6.25000 32.8686 62.8028 11.7343 953 31.2500 93.7500 6.25000 34.9198 63.8604 11.8304 954 43.7500 93.7500 6.25000 38.2312 65.5678 11.9856 955 56.2500 93.7500 6.25000 42.9608 68.0064 12.2072 956 68.7500 93.7500 6.25000 49.2436 71.2458 12.5016 957 81.2500 93.7500 6.25000 57.1988 75.3475 12.8744 958 93.7500 93.7500 6.25000 66.9343 80.3672 13.3306 959 93.7500 93.7500 18.7500 67.3665 80.5400 15.6073 960 18.7500 6.25000 18.7500 2.90500 2.19248 3.87900 961 31.2500 6.25000 18.7500 4.95625 3.25011 3.97512 962 43.7500 6.25000 18.7500 8.26763 4.95747 4.13028 963 56.2500 6.25000 18.7500 12.9972 7.39604 4.35190 964 68.7500 6.25000 18.7500 19.2800 10.6355 4.64630 965 81.2500 6.25000 18.7500 27.2352 14.7372 5.01907 966 93.7500 6.25000 18.7500 36.9707 19.7569 5.47526 967 93.7500 81.2500 81.2500 69.5738 67.9175 68.8837 968 100.000 100.000 100.000 95.1065 100.000 108.844 969 43.7500 18.7500 18.7500 9.12398 6.66993 4.41573 970 56.2500 18.7500 18.7500 13.8535 9.10851 4.63735 971 68.7500 18.7500 18.7500 20.1363 12.3479 4.93175 972 81.2500 18.7500 18.7500 28.0916 16.4497 5.30452 973 93.7500 18.7500 18.7500 37.8270 21.4693 5.76071 974 93.7500 56.2500 81.2500 57.2275 43.2284 64.7682 975 93.7500 56.2500 93.7500 61.4886 44.9326 87.2121 976 18.7500 31.2500 18.7500 5.54006 7.46186 4.75736 977 43.7500 31.2500 18.7500 10.9027 10.2268 5.00864 978 56.2500 31.2500 18.7500 15.6322 12.6654 5.23026 979 68.7500 31.2500 18.7500 21.9150 15.9048 5.52466 980 81.2500 31.2500 18.7500 29.8703 20.0066 5.89743 981 93.7500 31.2500 18.7500 39.6057 25.0262 6.35362 982 93.7500 56.2500 68.7500 53.7455 41.8359 46.4283 983 93.7500 68.7500 68.7500 59.1935 52.7303 48.2443 984 93.7500 81.2500 68.7500 66.0918 66.5250 50.5438 985 43.7500 43.7500 18.7500 13.7741 15.9689 5.96579 986 56.2500 43.7500 18.7500 18.5037 18.4074 6.18740 987 68.7500 43.7500 18.7500 24.7864 21.6469 6.48180 988 81.2500 43.7500 18.7500 32.7417 25.7486 6.85457 989 93.7500 43.7500 18.7500 42.4771 30.7682 7.31076 990 31.2500 31.2500 18.7500 7.59131 8.51949 4.85348 991 31.2500 43.7500 18.7500 10.4627 14.2615 5.81062 992 31.2500 56.2500 18.7500 14.5639 22.4627 7.17768 993 43.7500 56.2500 18.7500 17.8753 24.1700 7.33285 994 56.2500 56.2500 18.7500 22.6048 26.6086 7.55447 995 68.7500 56.2500 18.7500 28.8876 29.8480 7.84887 996 81.2500 56.2500 18.7500 36.8429 33.9498 8.22164 997 93.7500 56.2500 18.7500 46.5783 38.9694 8.67783 998 93.7500 68.7500 18.7500 52.0263 49.8639 10.4938 999 31.2500 68.7500 6.25000 19.5796 33.1843 6.71699 1000 31.2500 68.7500 18.7500 20.0119 33.3572 8.99370 1001 43.7500 68.7500 18.7500 23.3233 35.0645 9.14887 1002 56.2500 68.7500 18.7500 28.0528 37.5031 9.37049 1003 68.7500 68.7500 18.7500 34.3356 40.7425 9.66489 1004 81.2500 68.7500 18.7500 42.2909 44.8443 10.0377 1005 93.7500 81.2500 18.7500 58.9246 63.6585 12.7933 1006 18.7500 43.7500 18.7500 8.41147 13.2039 5.71450 1007 18.7500 56.2500 18.7500 12.5126 21.4050 7.08157 1008 31.2500 81.2500 18.7500 26.9102 47.1518 11.2931 1009 43.7500 81.2500 18.7500 30.2215 48.8592 11.4483 1010 56.2500 81.2500 18.7500 34.9511 51.2977 11.6699 1011 68.7500 81.2500 18.7500 41.2339 54.5372 11.9643 1012 81.2500 81.2500 18.7500 49.1892 58.6389 12.3371 1013 18.7500 68.7500 18.7500 17.9606 32.2995 8.89758 1014 18.7500 81.2500 18.7500 24.8589 46.0942 11.1970 1015 18.7500 93.7500 18.7500 33.3008 62.9757 14.0110 1016 31.2500 93.7500 18.7500 35.3521 64.0333 14.1071 1017 43.7500 93.7500 18.7500 38.6635 65.7407 14.2623 1018 56.2500 93.7500 18.7500 43.3930 68.1792 14.4839 1019 68.7500 93.7500 18.7500 49.6758 71.4186 14.7783 1020 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1021 6.25000 6.25000 18.7500 1.91743 1.68328 3.83272 1022 6.25000 6.25000 31.2500 2.81525 2.04236 8.56163 1023 18.7500 6.25000 31.2500 3.80282 2.55155 8.60790 1024 31.2500 6.25000 31.2500 5.85407 3.60918 8.70402 1025 43.7500 6.25000 31.2500 9.16545 5.31654 8.85919 1026 56.2500 6.25000 31.2500 13.8950 7.75511 9.08081 1027 68.7500 6.25000 31.2500 20.1778 10.9945 9.37521 1028 81.2500 6.25000 31.2500 28.1331 15.0963 9.74798 1029 93.7500 6.25000 31.2500 37.8685 20.1159 10.2042 1030 93.7500 31.2500 81.2500 50.2549 29.2852 62.4440 1031 93.7500 43.7500 93.7500 57.3875 36.7314 85.8450 1032 31.2500 18.7500 31.2500 6.71042 5.32164 8.98947 1033 43.7500 18.7500 31.2500 10.0218 7.02900 9.14464 1034 56.2500 18.7500 31.2500 14.7514 9.46758 9.36626 1035 68.7500 18.7500 31.2500 21.0341 12.7070 9.66066 1036 81.2500 18.7500 31.2500 28.9894 16.8088 10.0334 1037 93.7500 18.7500 31.2500 38.7249 21.8284 10.4896 1038 93.7500 31.2500 43.7500 41.9529 25.9650 18.7165 1039 93.7500 31.2500 56.2500 44.0230 26.7929 29.6199 1040 93.7500 43.7500 56.2500 46.8944 32.5349 30.5771 1041 56.2500 31.2500 31.2500 16.5301 13.0245 9.95917 1042 68.7500 31.2500 31.2500 22.8128 16.2639 10.2536 1043 81.2500 31.2500 31.2500 30.7681 20.3657 10.6263 1044 93.7500 31.2500 31.2500 40.5036 25.3853 11.0825 1045 93.7500 43.7500 43.7500 44.8243 31.7070 19.6736 1046 18.7500 31.2500 31.2500 6.43788 7.82093 9.48626 1047 18.7500 43.7500 31.2500 9.30929 13.5629 10.4434 1048 43.7500 43.7500 31.2500 14.6719 16.3279 10.6947 1049 56.2500 43.7500 31.2500 19.4015 18.7665 10.9163 1050 68.7500 43.7500 31.2500 25.6842 22.0059 11.2107 1051 81.2500 43.7500 31.2500 33.6395 26.1077 11.5835 1052 93.7500 43.7500 31.2500 43.3750 31.1273 12.0397 1053 93.7500 56.2500 43.7500 48.9255 39.9081 21.0407 1054 31.2500 43.7500 31.2500 11.3605 14.6206 10.5395 1055 31.2500 56.2500 31.2500 15.4617 22.8217 11.9066 1056 43.7500 56.2500 31.2500 18.7731 24.5291 12.0618 1057 56.2500 56.2500 31.2500 23.5026 26.9677 12.2834 1058 68.7500 56.2500 31.2500 29.7854 30.2071 12.5778 1059 81.2500 56.2500 31.2500 37.7407 34.3089 12.9505 1060 93.7500 56.2500 31.2500 47.4761 39.3285 13.4067 1061 100.000 62.5000 37.5000 56.2426 47.5561 17.9468 1062 18.7500 68.7500 31.2500 18.8584 32.6586 13.6265 1063 31.2500 68.7500 31.2500 20.9097 33.7162 13.7226 1064 43.7500 68.7500 31.2500 24.2211 35.4236 13.8778 1065 56.2500 68.7500 31.2500 28.9506 37.8622 14.0994 1066 68.7500 68.7500 31.2500 35.2334 41.1016 14.3938 1067 81.2500 68.7500 31.2500 43.1887 45.2033 14.7666 1068 93.7500 68.7500 31.2500 52.9241 50.2230 15.2227 1069 93.7500 81.2500 31.2500 59.8224 64.0176 17.5222 1070 6.25000 68.7500 18.7500 16.9731 31.7903 8.85131 1071 6.25000 81.2500 31.2500 24.7692 45.9440 15.8797 1072 43.7500 81.2500 31.2500 31.1194 49.2182 16.1772 1073 56.2500 81.2500 31.2500 35.8489 51.6568 16.3988 1074 68.7500 81.2500 31.2500 42.1317 54.8962 16.6932 1075 81.2500 81.2500 31.2500 50.0870 58.9980 17.0660 1076 6.25000 81.2500 18.7500 23.8713 45.5850 11.1508 1077 6.25000 93.7500 18.7500 32.3133 62.4665 13.9648 1078 6.25000 93.7500 31.2500 33.2111 62.8255 18.6937 1079 31.2500 93.7500 31.2500 36.2499 64.3924 18.8361 1080 43.7500 93.7500 31.2500 39.5613 66.0997 18.9912 1081 56.2500 93.7500 31.2500 44.2909 68.5383 19.2128 1082 68.7500 93.7500 31.2500 50.5736 71.7777 19.5072 1083 81.2500 93.7500 31.2500 58.5289 75.8795 19.8800 1084 93.7500 93.7500 31.2500 68.2643 80.8991 20.3362 1085 93.7500 93.7500 43.7500 69.7137 81.4788 27.9702 1086 18.7500 6.25000 43.7500 5.25219 3.13120 16.2419 1087 31.2500 6.25000 43.7500 7.30344 4.18884 16.3380 1088 43.7500 6.25000 43.7500 10.6148 5.89619 16.4932 1089 56.2500 6.25000 43.7500 15.3444 8.33477 16.7148 1090 68.7500 6.25000 43.7500 21.6272 11.5742 17.0092 1091 81.2500 6.25000 43.7500 29.5824 15.6760 17.3820 1092 93.7500 6.25000 43.7500 39.3179 20.6956 17.8381 1093 93.7500 18.7500 81.2500 48.4762 25.7283 61.8511 1094 93.7500 18.7500 93.7500 52.7374 27.4325 84.2950 1095 93.7500 31.2500 93.7500 54.5161 30.9894 84.8879 1096 43.7500 18.7500 43.7500 11.4712 7.60866 16.7786 1097 56.2500 18.7500 43.7500 16.2007 10.0472 17.0002 1098 68.7500 18.7500 43.7500 22.4835 13.2867 17.2946 1099 81.2500 18.7500 43.7500 30.4388 17.3884 17.6674 1100 93.7500 18.7500 43.7500 40.1742 22.4080 18.1236 1101 93.7500 18.7500 56.2500 42.2443 23.2360 29.0270 1102 31.2500 18.7500 43.7500 8.15979 5.90130 16.6235 1103 31.2500 31.2500 43.7500 9.93850 9.45822 17.2164 1104 43.7500 31.2500 43.7500 13.2499 11.1656 17.3715 1105 81.2500 31.2500 43.7500 32.2175 20.9453 18.2603 1106 100.000 100.000 100.000 95.1065 100.000 108.844 1107 6.25000 18.7500 18.7500 2.77379 3.39575 4.11818 1108 6.25000 31.2500 18.7500 4.55249 6.95267 4.71108 1109 6.25000 43.7500 18.7500 7.42390 12.6947 5.66823 1110 6.25000 43.7500 31.2500 8.32172 13.0537 10.3971 1111 31.2500 43.7500 43.7500 12.8099 15.2002 18.1735 1112 56.2500 43.7500 43.7500 20.8508 19.3462 18.5503 1113 68.7500 43.7500 43.7500 27.1336 22.5856 18.8447 1114 81.2500 43.7500 43.7500 35.0889 26.6873 19.2175 1115 81.2500 68.7500 68.7500 49.4581 47.7107 47.7881 1116 6.25000 56.2500 18.7500 11.5251 20.8959 7.03529 1117 18.7500 56.2500 31.2500 13.4104 21.7641 11.8105 1118 31.2500 56.2500 43.7500 16.9111 23.4014 19.5406 1119 43.7500 56.2500 43.7500 20.2224 25.1088 19.6957 1120 56.2500 56.2500 43.7500 24.9520 27.5473 19.9174 1121 68.7500 56.2500 43.7500 31.2348 30.7868 20.2118 1122 81.2500 56.2500 43.7500 39.1901 34.8885 20.5845 1123 93.7500 56.2500 56.2500 50.9956 40.7361 31.9441 1124 93.7500 68.7500 56.2500 56.4436 51.6305 33.7601 1125 93.7500 81.2500 56.2500 63.3419 65.4252 36.0596 1126 31.2500 68.7500 43.7500 22.3591 34.2959 21.3566 1127 43.7500 68.7500 43.7500 25.6704 36.0032 21.5117 1128 56.2500 68.7500 43.7500 30.4000 38.4418 21.7334 1129 68.7500 68.7500 43.7500 36.6828 41.6812 22.0278 1130 81.2500 68.7500 43.7500 44.6381 45.7830 22.4005 1131 93.7500 68.7500 43.7500 54.3735 50.8026 22.8567 1132 93.7500 81.2500 43.7500 61.2718 64.5973 25.1562 1133 31.2500 81.2500 31.2500 27.8080 47.5109 16.0221 1134 31.2500 81.2500 43.7500 29.2574 48.0905 23.6560 1135 43.7500 81.2500 43.7500 32.5687 49.7979 23.8112 1136 56.2500 81.2500 43.7500 37.2983 52.2365 24.0328 1137 68.7500 81.2500 43.7500 43.5811 55.4759 24.3272 1138 81.2500 81.2500 43.7500 51.5363 59.5776 24.7000 1139 18.7500 81.2500 31.2500 25.7567 46.4532 15.9259 1140 18.7500 93.7500 31.2500 34.1987 63.3347 18.7399 1141 18.7500 93.7500 43.7500 35.6480 63.9144 26.3739 1142 31.2500 93.7500 43.7500 37.6993 64.9720 26.4700 1143 43.7500 93.7500 43.7500 41.0107 66.6794 26.6252 1144 56.2500 93.7500 43.7500 45.7402 69.1180 26.8468 1145 68.7500 93.7500 43.7500 52.0230 72.3574 27.1412 1146 81.2500 93.7500 43.7500 59.9783 76.4591 27.5140 1147 6.25000 6.25000 43.7500 4.26462 2.62201 16.1956 1148 6.25000 6.25000 56.2500 6.33472 3.44992 27.0990 1149 18.7500 6.25000 56.2500 7.32229 3.95911 27.1453 1150 31.2500 6.25000 56.2500 9.37354 5.01674 27.2414 1151 43.7500 6.25000 56.2500 12.6849 6.72410 27.3966 1152 56.2500 6.25000 56.2500 17.4145 9.16268 27.6182 1153 68.7500 6.25000 56.2500 23.6972 12.4021 27.9126 1154 81.2500 6.25000 56.2500 31.6525 16.5039 28.2854 1155 93.7500 6.25000 56.2500 41.3880 21.5235 28.7416 1156 6.25000 18.7500 43.7500 5.12097 4.33448 16.4811 1157 6.25000 18.7500 56.2500 7.19107 5.16239 27.3845 1158 31.2500 18.7500 56.2500 10.2299 6.72921 27.5269 1159 43.7500 18.7500 56.2500 13.5413 8.43657 27.6820 1160 56.2500 18.7500 56.2500 18.2708 10.8751 27.9037 1161 68.7500 18.7500 56.2500 24.5536 14.1146 28.1981 1162 81.2500 18.7500 56.2500 32.5089 18.2163 28.5708 1163 93.7500 18.7500 68.7500 44.9942 24.3358 43.5112 1164 93.7500 31.2500 68.7500 46.7730 27.8927 44.1041 1165 18.7500 18.7500 31.2500 4.65917 4.26401 8.89336 1166 18.7500 31.2500 43.7500 7.88725 8.40059 17.1202 1167 43.7500 31.2500 56.2500 15.3200 11.9935 28.2749 1168 56.2500 31.2500 56.2500 20.0495 14.4321 28.4966 1169 68.7500 31.2500 56.2500 26.3323 17.6715 28.7910 1170 81.2500 31.2500 56.2500 34.2876 21.7732 29.1637 1171 93.7500 43.7500 68.7500 49.6444 33.6347 45.0612 1172 93.7500 43.7500 81.2500 53.1263 35.0272 63.4011 1173 93.7500 68.7500 81.2500 62.6755 54.1229 66.5842 1174 93.7500 68.7500 93.7500 66.9366 55.8271 89.0281 1175 56.2500 31.2500 43.7500 17.9794 13.6042 17.5931 1176 56.2500 43.7500 56.2500 22.9209 20.1741 29.4537 1177 68.7500 43.7500 56.2500 29.2037 23.4135 29.7481 1178 81.2500 43.7500 56.2500 37.1590 27.5153 30.1209 1179 43.7500 31.2500 31.2500 11.8005 10.5859 9.73755 1180 43.7500 43.7500 56.2500 18.1914 17.7355 29.2321 1181 31.2500 43.7500 56.2500 14.8800 16.0281 29.0769 1182 31.2500 56.2500 56.2500 18.9812 24.2293 30.4440 1183 43.7500 56.2500 56.2500 22.2925 25.9367 30.5992 1184 68.7500 56.2500 56.2500 33.3049 31.6147 31.1152 1185 81.2500 56.2500 56.2500 41.2601 35.7164 31.4879 1186 81.2500 56.2500 68.7500 44.0101 36.8162 45.9721 1187 81.2500 56.2500 81.2500 47.4921 38.2088 64.3120 1188 18.7500 68.7500 56.2500 22.3779 34.0662 32.1639 1189 31.2500 68.7500 56.2500 24.4292 35.1238 32.2600 1190 43.7500 68.7500 56.2500 27.7405 36.8312 32.4152 1191 56.2500 68.7500 56.2500 32.4701 39.2697 32.6368 1192 68.7500 68.7500 56.2500 38.7529 42.5091 32.9312 1193 81.2500 68.7500 56.2500 46.7082 46.6109 33.3040 1194 18.7500 68.7500 43.7500 20.3078 33.2383 21.2605 1195 18.7500 81.2500 43.7500 27.2061 47.0329 23.5599 1196 18.7500 81.2500 56.2500 29.2762 47.8608 34.4633 1197 31.2500 81.2500 56.2500 31.3275 48.9184 34.5595 1198 43.7500 81.2500 56.2500 34.6388 50.6258 34.7146 1199 56.2500 81.2500 56.2500 39.3684 53.0644 34.9362 1200 68.7500 81.2500 56.2500 45.6512 56.3038 35.2306 1201 81.2500 81.2500 56.2500 53.6064 60.4056 35.6034 1202 81.2500 81.2500 68.7500 56.3564 61.5054 50.0876 1203 6.25000 93.7500 6.25000 31.8810 62.2936 11.6880 1204 18.7500 93.7500 56.2500 37.7181 64.7423 37.2773 1205 31.2500 93.7500 56.2500 39.7694 65.7999 37.3735 1206 43.7500 93.7500 56.2500 43.0808 67.5073 37.5286 1207 56.2500 93.7500 56.2500 47.8103 69.9459 37.7502 1208 68.7500 93.7500 56.2500 54.0931 73.1853 38.0446 1209 81.2500 93.7500 56.2500 62.0484 77.2870 38.4174 1210 93.7500 93.7500 56.2500 71.7838 82.3067 38.8736 1211 93.7500 93.7500 68.7500 74.5337 83.4065 53.3578 1212 18.7500 6.25000 68.7500 10.0722 5.05891 41.6295 1213 31.2500 6.25000 68.7500 12.1235 6.11654 41.7256 1214 43.7500 6.25000 68.7500 15.4348 7.82390 41.8808 1215 56.2500 6.25000 68.7500 20.1644 10.2625 42.1024 1216 68.7500 6.25000 68.7500 26.4472 13.5019 42.3968 1217 81.2500 6.25000 68.7500 34.4025 17.6037 42.7695 1218 93.7500 6.25000 68.7500 44.1379 22.6233 43.2257 1219 18.7500 18.7500 56.2500 8.17864 5.67158 27.4308 1220 18.7500 18.7500 68.7500 10.9286 6.77138 41.9149 1221 31.2500 18.7500 68.7500 12.9798 7.82901 42.0110 1222 43.7500 18.7500 68.7500 16.2912 9.53636 42.1662 1223 56.2500 18.7500 68.7500 21.0208 11.9749 42.3878 1224 68.7500 18.7500 68.7500 27.3035 15.2144 42.6822 1225 81.2500 18.7500 68.7500 35.2588 19.3161 43.0550 1226 81.2500 31.2500 93.7500 44.7806 25.9698 84.4317 1227 81.2500 56.2500 93.7500 51.7532 39.9130 86.7559 1228 31.2500 31.2500 56.2500 12.0086 10.2861 28.1198 1229 31.2500 31.2500 68.7500 14.7585 11.3859 42.6039 1230 43.7500 31.2500 68.7500 18.0699 13.0933 42.7591 1231 56.2500 31.2500 68.7500 22.7995 15.5319 42.9807 1232 68.7500 31.2500 68.7500 29.0822 18.7713 43.2751 1233 81.2500 31.2500 68.7500 37.0375 22.8730 43.6479 1234 81.2500 68.7500 93.7500 57.2012 50.8075 88.5719 1235 6.25000 31.2500 56.2500 8.96978 8.71930 27.9774 1236 6.25000 43.7500 68.7500 14.5911 15.5611 43.4187 1237 31.2500 43.7500 68.7500 17.6299 17.1279 43.5611 1238 43.7500 43.7500 68.7500 20.9413 18.8353 43.7163 1239 56.2500 43.7500 68.7500 25.6709 21.2739 43.9379 1240 68.7500 43.7500 68.7500 31.9536 24.5133 44.2323 1241 81.2500 43.7500 68.7500 39.9089 28.6151 44.6050 1242 18.7500 31.2500 56.2500 9.95735 9.22850 28.0237 1243 18.7500 31.2500 68.7500 12.7073 10.3283 42.5078 1244 18.7500 56.2500 68.7500 19.6798 24.2715 44.8320 1245 31.2500 56.2500 68.7500 21.7311 25.3291 44.9282 1246 43.7500 56.2500 68.7500 25.0425 27.0365 45.0833 1247 56.2500 56.2500 68.7500 29.7720 29.4750 45.3049 1248 68.7500 56.2500 68.7500 36.0548 32.7145 45.5993 1249 18.7500 43.7500 43.7500 10.7587 14.1426 18.0774 1250 18.7500 56.2500 43.7500 14.8598 22.3438 19.4444 1251 18.7500 56.2500 56.2500 16.9299 23.1717 30.3479 1252 18.7500 68.7500 68.7500 25.1278 35.1660 46.6481 1253 31.2500 68.7500 68.7500 27.1791 36.2236 46.7442 1254 43.7500 68.7500 68.7500 30.4905 37.9310 46.8993 1255 56.2500 68.7500 68.7500 35.2200 40.3695 47.1210 1256 56.2500 81.2500 81.2500 45.6003 55.5567 67.7603 1257 6.25000 56.2500 31.2500 12.4229 21.2549 11.7642 1258 6.25000 68.7500 31.2500 17.8709 32.1494 13.5802 1259 6.25000 68.7500 56.2500 21.3904 33.5570 32.1176 1260 31.2500 81.2500 68.7500 34.0774 50.0182 49.0436 1261 43.7500 81.2500 68.7500 37.3888 51.7256 49.1988 1262 56.2500 81.2500 68.7500 42.1183 54.1642 49.4204 1263 68.7500 81.2500 68.7500 48.4011 57.4036 49.7148 1264 6.25000 81.2500 56.2500 28.2886 47.3516 34.4171 1265 6.25000 93.7500 56.2500 36.7306 64.2331 37.2311 1266 6.25000 93.7500 68.7500 39.4805 65.3329 51.7152 1267 18.7500 93.7500 68.7500 40.4681 65.8421 51.7615 1268 31.2500 93.7500 68.7500 42.5193 66.8997 51.8576 1269 43.7500 93.7500 68.7500 45.8307 68.6071 52.0128 1270 56.2500 93.7500 68.7500 50.5602 71.0457 52.2344 1271 68.7500 93.7500 68.7500 56.8430 74.2851 52.5288 1272 81.2500 93.7500 68.7500 64.7983 78.3868 52.9016 1273 6.25000 6.25000 68.7500 9.08465 4.54972 41.5832 1274 6.25000 6.25000 81.2500 12.5666 5.94229 59.9231 1275 18.7500 6.25000 81.2500 13.5542 6.45148 59.9694 1276 31.2500 6.25000 81.2500 15.6054 7.50911 60.0655 1277 43.7500 6.25000 81.2500 18.9168 9.21647 60.2207 1278 56.2500 6.25000 81.2500 23.6464 11.6550 60.4423 1279 68.7500 6.25000 81.2500 29.9292 14.8945 60.7367 1280 81.2500 6.25000 81.2500 37.8844 18.9962 61.1094 1281 93.7500 6.25000 81.2500 47.6199 24.0159 61.5656 1282 93.7500 6.25000 93.7500 51.8810 25.7200 84.0095 1283 18.7500 18.7500 43.7500 6.10854 4.84367 16.5273 1284 31.2500 18.7500 81.2500 16.4618 9.22158 60.3509 1285 43.7500 18.7500 81.2500 19.7732 10.9289 60.5061 1286 56.2500 18.7500 81.2500 24.5027 13.3675 60.7277 1287 68.7500 18.7500 81.2500 30.7855 16.6069 61.0221 1288 81.2500 18.7500 81.2500 38.7408 20.7087 61.3949 1289 81.2500 18.7500 93.7500 43.0019 22.4129 83.8388 1290 18.7500 18.7500 81.2500 14.4105 8.16395 60.2548 1291 18.7500 31.2500 81.2500 16.1892 11.7209 60.8477 1292 31.2500 31.2500 81.2500 18.2405 12.7785 60.9439 1293 43.7500 31.2500 81.2500 21.5519 14.4859 61.0990 1294 56.2500 31.2500 81.2500 26.2814 16.9244 61.3206 1295 68.7500 31.2500 81.2500 32.5642 20.1638 61.6150 1296 81.2500 31.2500 81.2500 40.5195 24.2656 61.9878 1297 18.7500 43.7500 56.2500 12.8288 14.9705 28.9808 1298 18.7500 43.7500 68.7500 15.5787 16.0703 43.4650 1299 18.7500 43.7500 81.2500 19.0607 17.4629 61.8049 1300 31.2500 43.7500 81.2500 21.1119 18.5205 61.9010 1301 43.7500 43.7500 81.2500 24.4233 20.2279 62.0562 1302 56.2500 43.7500 81.2500 29.1528 22.6664 62.2778 1303 68.7500 43.7500 81.2500 35.4356 25.9059 62.5722 1304 81.2500 43.7500 81.2500 43.3909 30.0076 62.9450 1305 81.2500 43.7500 93.7500 47.6520 31.7118 85.3888 1306 6.25000 18.7500 68.7500 9.94100 6.26218 41.8686 1307 18.7500 56.2500 81.2500 23.1618 25.6640 63.1719 1308 31.2500 56.2500 81.2500 25.2131 26.7217 63.2681 1309 43.7500 56.2500 81.2500 28.5244 28.4290 63.4232 1310 56.2500 56.2500 81.2500 33.2540 30.8676 63.6448 1311 68.7500 56.2500 81.2500 39.5368 34.1070 63.9392 1312 68.7500 68.7500 81.2500 44.9848 45.0015 65.7553 1313 6.25000 56.2500 43.7500 13.8722 21.8346 19.3982 1314 6.25000 56.2500 56.2500 15.9423 22.6625 30.3016 1315 18.7500 68.7500 81.2500 28.6098 36.5585 64.9880 1316 31.2500 68.7500 81.2500 30.6611 37.6162 65.0841 1317 43.7500 68.7500 81.2500 33.9724 39.3235 65.2392 1318 56.2500 68.7500 81.2500 38.7020 41.7621 65.4609 1319 68.7500 81.2500 81.2500 51.8831 58.7962 68.0547 1320 68.7500 81.2500 93.7500 56.1442 60.5003 90.4986 1321 6.25000 81.2500 68.7500 31.0386 48.4514 48.9012 1322 6.25000 81.2500 81.2500 34.5205 49.8440 67.2411 1323 18.7500 81.2500 81.2500 35.5081 50.3532 67.2874 1324 31.2500 81.2500 81.2500 37.5594 51.4108 67.3835 1325 43.7500 81.2500 81.2500 40.8707 53.1182 67.5387 1326 6.25000 68.7500 43.7500 19.3203 32.7291 21.2142 1327 6.25000 81.2500 43.7500 26.2185 46.5237 23.5136 1328 6.25000 93.7500 43.7500 34.6605 63.4052 26.3276 1329 6.25000 93.7500 81.2500 42.9625 66.7255 70.0551 1330 18.7500 93.7500 81.2500 43.9500 67.2347 70.1014 1331 31.2500 93.7500 81.2500 46.0013 68.2923 70.1975 1332 43.7500 93.7500 81.2500 49.3127 69.9997 70.3527 1333 56.2500 93.7500 81.2500 54.0422 72.4382 70.5743 1334 68.7500 93.7500 81.2500 60.3250 75.6777 70.8687 1335 81.2500 93.7500 81.2500 68.2803 79.7794 71.2415 1336 93.7500 93.7500 81.2500 78.0157 84.7990 71.6977 1337 6.25000 6.25000 93.7500 16.8278 7.64648 82.3670 1338 18.7500 6.25000 93.7500 17.8153 8.15567 82.4133 1339 31.2500 6.25000 93.7500 19.8666 9.21330 82.5094 1340 43.7500 6.25000 93.7500 23.1780 10.9207 82.6645 1341 56.2500 6.25000 93.7500 27.9075 13.3592 82.8862 1342 68.7500 6.25000 93.7500 34.1903 16.5987 83.1806 1343 81.2500 6.25000 93.7500 42.1456 20.7004 83.5533 1344 6.25000 18.7500 81.2500 13.4230 7.65475 60.2086 1345 6.25000 18.7500 93.7500 17.6841 9.35894 82.6524 1346 18.7500 18.7500 93.7500 18.6717 9.86813 82.6987 1347 31.2500 18.7500 93.7500 20.7229 10.9258 82.7948 1348 43.7500 18.7500 93.7500 24.0343 12.6331 82.9500 1349 56.2500 18.7500 93.7500 28.7639 15.0717 83.1716 1350 68.7500 18.7500 93.7500 35.0466 18.3111 83.4660 1351 6.25000 31.2500 68.7500 11.7197 9.81910 42.4616 1352 6.25000 31.2500 81.2500 15.2017 11.2117 60.8015 1353 6.25000 31.2500 93.7500 19.4628 12.9159 83.2453 1354 18.7500 31.2500 93.7500 20.4504 13.4251 83.2916 1355 31.2500 31.2500 93.7500 22.5016 14.4827 83.3877 1356 43.7500 31.2500 93.7500 25.8130 16.1900 83.5429 1357 56.2500 31.2500 93.7500 30.5426 18.6286 83.7645 1358 68.7500 31.2500 93.7500 36.8254 21.8680 84.0589 1359 68.7500 43.7500 93.7500 39.6968 27.6100 85.0161 1360 6.25000 43.7500 81.2500 18.0731 16.9537 61.7586 1361 6.25000 43.7500 93.7500 22.3342 18.6579 84.2025 1362 18.7500 43.7500 93.7500 23.3218 19.1671 84.2488 1363 31.2500 43.7500 93.7500 25.3730 20.2247 84.3449 1364 43.7500 43.7500 93.7500 28.6844 21.9320 84.5000 1365 56.2500 43.7500 93.7500 33.4140 24.3706 84.7217 1366 6.25000 43.7500 56.2500 11.8412 14.4613 28.9345 1367 6.25000 56.2500 68.7500 18.6923 23.7623 44.7858 1368 6.25000 56.2500 81.2500 22.1743 25.1549 63.1257 1369 6.25000 56.2500 93.7500 26.4354 26.8590 85.5695 1370 18.7500 56.2500 93.7500 27.4230 27.3682 85.6158 1371 31.2500 56.2500 93.7500 29.4742 28.4259 85.7119 1372 43.7500 56.2500 93.7500 32.7856 30.1332 85.8671 1373 56.2500 56.2500 93.7500 37.5151 32.5718 86.0887 1374 68.7500 56.2500 93.7500 43.7979 35.8112 86.3831 1375 68.7500 68.7500 93.7500 49.2459 46.7057 88.1991 1376 6.25000 68.7500 81.2500 27.6223 36.0493 64.9417 1377 6.25000 68.7500 93.7500 31.8834 37.7535 87.3856 1378 18.7500 68.7500 93.7500 32.8710 38.2627 87.4318 1379 31.2500 68.7500 93.7500 34.9222 39.3204 87.5280 1380 43.7500 68.7500 93.7500 38.2336 41.0277 87.6831 1381 56.2500 68.7500 93.7500 42.9632 43.4663 87.9047 1382 56.2500 81.2500 93.7500 49.8614 57.2609 90.2042 1383 6.25000 18.7500 31.2500 3.67160 3.75482 8.84708 1384 6.25000 31.2500 43.7500 6.89968 7.89139 17.0740 1385 18.7500 81.2500 68.7500 32.0261 48.9606 48.9475 1386 18.7500 81.2500 93.7500 39.7692 52.0574 89.7313 1387 31.2500 81.2500 93.7500 41.8205 53.1150 89.8274 1388 43.7500 81.2500 93.7500 45.1319 54.8223 89.9826 1389 6.25000 31.2500 31.2500 5.45031 7.31174 9.43999 1390 6.25000 43.7500 43.7500 9.77109 13.6334 18.0311 1391 6.25000 68.7500 68.7500 24.1403 34.6568 46.6018 1392 6.25000 81.2500 93.7500 38.7817 51.5482 89.6850 1393 6.25000 93.7500 93.7500 47.2236 68.4297 92.4990 1394 18.7500 93.7500 93.7500 48.2112 68.9389 92.5453 1395 31.2500 93.7500 93.7500 50.2624 69.9965 92.6414 1396 43.7500 93.7500 93.7500 53.5738 71.7038 92.7966 1397 56.2500 93.7500 93.7500 58.3034 74.1424 93.0182 1398 68.7500 93.7500 93.7500 64.5861 77.3818 93.3126 1399 81.2500 93.7500 93.7500 72.5414 81.4836 93.6854 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -dmadvr -qh -w0.3127,0.3290 -gs -f1 -m END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/office_web.ti3000644 000765 000000 00000030007 12237536425 017772 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" BEGIN_ARGYLL_COLPROF_ARGS -qh -as END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -t6500 -g2.2 -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/photo.ti3000644 000765 000000 00000030007 12237536425 017033 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Tue Feb 23 08:46:43 2010" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" BEGIN_ARGYLL_COLPROF_ARGS -qh -as END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -t5000 -g2.2 -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/prepress.ti3000644 000765 000000 00000127205 12237536425 017554 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Tue Feb 23 08:46:43 2010" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "73" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "7" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "7" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "25" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "USE_BLACK_POINT_COMPENSATION" USE_BLACK_POINT_COMPENSATION "NO" BEGIN_ARGYLL_COLPROF_ARGS -qh -ax END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 679 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 0.00000 16.6667 33.3333 3.46086 3.32388 9.82998 3 0.00000 16.6667 50.0000 5.66257 4.20442 21.4266 4 0.00000 16.6667 66.6667 9.02121 5.54766 39.1169 5 0.00000 50.0000 16.6667 9.00087 16.3233 5.75245 6 0.00000 66.6667 16.6667 15.6548 29.6293 7.97045 7 0.00000 83.3333 16.6667 24.8565 48.0302 11.0377 8 41.6667 75.0000 8.33333 25.5506 41.0987 8.16187 9 58.3333 91.6667 25.0000 43.1958 65.7803 16.0487 10 0.00000 8.33333 0.00000 1.27008 1.54008 1.09003 11 2.77778 2.77778 2.77778 1.20233 1.21285 1.23186 12 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 13 25.0000 8.33333 8.33333 3.48368 2.66565 1.90539 14 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 15 29.1667 0.00000 0.00000 3.82465 2.45640 1.13236 16 33.3333 0.00000 0.00000 4.70908 2.91242 1.17380 17 37.5000 0.00000 0.00000 5.73696 3.44239 1.22197 18 41.6667 0.00000 0.00000 6.91425 4.04941 1.27713 19 45.8333 0.00000 0.00000 8.24660 4.73637 1.33956 20 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 21 54.1667 0.00000 0.00000 11.3976 6.36102 1.48721 22 58.3333 0.00000 0.00000 13.2261 7.30384 1.57290 23 62.5000 0.00000 0.00000 15.2297 8.33690 1.66678 24 66.6667 0.00000 0.00000 17.4128 9.46250 1.76908 25 70.8333 0.00000 0.00000 19.7797 10.6829 1.87999 26 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 27 79.1667 0.00000 0.00000 25.0816 13.4165 2.12842 28 83.3333 0.00000 0.00000 28.0245 14.9339 2.26632 29 87.5000 0.00000 0.00000 31.1672 16.5543 2.41358 30 91.6667 0.00000 0.00000 34.5133 18.2796 2.57037 31 95.8333 0.00000 0.00000 38.0664 20.1116 2.73687 32 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 33 100.000 66.6667 50.0000 59.8874 52.0422 27.8048 34 100.000 83.3333 50.0000 69.0892 70.4431 30.8720 35 0.00000 12.5000 0.00000 1.50806 2.01598 1.16935 36 0.00000 16.6667 0.00000 1.83742 2.67460 1.27914 37 0.00000 20.8333 0.00000 2.26612 3.53189 1.42204 38 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 39 0.00000 29.1667 0.00000 3.44935 5.89801 1.81646 40 0.00000 33.3333 0.00000 4.21627 7.43164 2.07210 41 0.00000 37.5000 0.00000 5.10758 9.21400 2.36920 42 0.00000 41.6667 0.00000 6.12844 11.2555 2.70950 43 0.00000 45.8333 0.00000 7.28377 13.5658 3.09461 44 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 45 0.00000 54.1667 0.00000 10.0161 19.0296 4.00538 46 0.00000 58.3333 0.00000 11.6017 22.2004 4.53393 47 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 48 0.00000 66.6667 0.00000 15.2321 29.4602 5.74408 49 0.00000 70.8333 0.00000 17.2845 33.5645 6.42822 50 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 51 0.00000 79.1667 0.00000 21.8820 42.7581 7.96071 52 0.00000 83.3333 0.00000 24.4338 47.8611 8.81135 53 0.00000 87.5000 0.00000 27.1590 53.3106 9.71972 54 0.00000 91.6667 0.00000 30.0605 59.1128 10.6869 55 0.00000 95.8333 0.00000 33.1416 65.2741 11.7139 56 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 57 83.3333 100.000 16.6667 63.8524 85.9035 16.2945 58 9.72222 9.72222 9.72222 1.90315 1.95012 2.03499 59 0.00000 0.00000 12.5000 1.25645 1.10256 2.35074 60 0.00000 0.00000 16.6667 1.42269 1.16905 3.22637 61 0.00000 0.00000 20.8333 1.63909 1.25559 4.36613 62 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 63 0.00000 0.00000 29.1667 2.23633 1.49445 7.51188 64 0.00000 0.00000 33.3333 2.62344 1.64927 9.55084 65 0.00000 0.00000 37.5000 3.07334 1.82920 11.9205 66 0.00000 0.00000 41.6667 3.58863 2.03529 14.6346 67 0.00000 0.00000 45.8333 4.17179 2.26852 17.7061 68 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 69 0.00000 0.00000 54.1667 5.55095 2.82009 24.9703 70 0.00000 0.00000 58.3333 6.35130 3.14018 29.1859 71 0.00000 0.00000 62.5000 7.22826 3.49091 33.8049 72 0.00000 0.00000 66.6667 8.18379 3.87306 38.8378 73 0.00000 0.00000 70.8333 9.21977 4.28739 44.2944 74 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 75 0.00000 0.00000 79.1667 11.5404 5.21548 56.5172 76 0.00000 0.00000 83.3333 12.8285 5.73063 63.3017 77 0.00000 0.00000 87.5000 14.2040 6.28076 70.5467 78 0.00000 0.00000 91.6667 15.6685 6.86649 78.2607 79 0.00000 0.00000 95.8333 17.2237 7.48847 86.4521 80 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 81 33.3333 66.6667 100.000 36.8123 38.5200 100.047 82 0.00000 0.00000 8.33333 1.13632 1.05452 1.71803 83 0.00000 4.16667 0.00000 1.11427 1.22850 1.03809 84 0.00000 0.00000 4.16667 1.05768 1.02307 1.30380 85 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 86 1.38889 1.38889 1.38889 1.10116 1.10642 1.11593 87 4.16667 4.16667 4.16667 1.30372 1.31952 1.34806 88 5.55556 5.55556 5.55556 1.41919 1.44098 1.48038 89 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 90 13.8889 13.8889 13.8889 2.61414 2.69807 2.84977 91 15.2778 15.2778 15.2778 2.90569 3.00478 3.18388 92 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 93 18.0556 18.0556 18.0556 3.57536 3.70928 3.95131 94 19.4444 19.4444 19.4444 3.95495 4.10861 4.38632 95 20.8333 20.8333 20.8333 4.36533 4.54033 4.85660 96 22.2222 22.2222 22.2222 4.80716 5.00513 5.36292 97 23.6111 23.6111 23.6111 5.28109 5.50371 5.90604 98 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 99 26.3889 26.3889 26.3889 6.32780 6.60485 7.10555 100 27.7778 27.7778 27.7778 6.90179 7.20869 7.76333 101 29.1667 29.1667 29.1667 7.51032 7.84886 8.46069 102 30.5556 30.5556 30.5556 8.15397 8.52597 9.19829 103 31.9444 31.9444 31.9444 8.83328 9.24060 9.97677 104 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 105 34.7222 34.7222 34.7222 10.3011 10.7847 11.6588 106 36.1111 36.1111 36.1111 11.0906 11.6153 12.5636 107 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 108 38.8889 38.8889 38.8889 12.7834 13.3962 14.5036 109 40.2778 40.2778 40.2778 13.6878 14.3475 15.5399 110 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 111 43.0556 43.0556 43.0556 15.6146 16.3746 17.7480 112 44.4444 44.4444 44.4444 16.6381 17.4512 18.9209 113 45.8333 45.8333 45.8333 17.7021 18.5707 20.1403 114 47.2222 47.2222 47.2222 18.8073 19.7333 21.4068 115 48.6111 48.6111 48.6111 19.9540 20.9396 22.7209 116 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 117 51.3889 51.3889 51.3889 22.3737 23.4851 25.4938 118 52.7778 52.7778 52.7778 23.6475 24.8252 26.9536 119 54.1667 54.1667 54.1667 24.9646 26.2107 28.4629 120 55.5556 55.5556 55.5556 26.3253 27.6422 30.0222 121 56.9444 56.9444 56.9444 27.7300 29.1199 31.6320 122 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 123 59.7222 59.7222 59.7222 30.6731 32.2161 35.0048 124 61.1111 61.1111 61.1111 32.2123 33.8353 36.7686 125 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 126 63.8889 63.8889 63.8889 35.4278 37.2181 40.4535 127 65.2778 65.2778 65.2778 37.1049 38.9824 42.3755 128 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 129 68.0556 68.0556 68.0556 40.5996 42.6588 46.3803 130 69.4444 69.4444 69.4444 42.4179 44.5716 48.4641 131 70.8333 70.8333 70.8333 44.2840 46.5348 50.6026 132 72.2222 72.2222 72.2222 46.1983 48.5486 52.7963 133 73.6111 73.6111 73.6111 48.1611 50.6134 55.0456 134 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 135 76.3889 76.3889 76.3889 52.2335 54.8976 59.7124 136 77.7778 77.7778 77.7778 54.3438 57.1176 62.1308 137 79.1667 79.1667 79.1667 56.5039 59.3901 64.6063 138 80.5556 80.5556 80.5556 58.7142 61.7154 67.1393 139 81.9444 81.9444 81.9444 60.9751 64.0938 69.7302 140 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 141 84.7222 84.7222 84.7222 65.6496 69.0114 75.0871 142 86.1111 86.1111 86.1111 68.0640 71.5513 77.8539 143 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 144 88.8889 88.8889 88.8889 73.0483 76.7948 83.5658 145 90.2778 90.2778 90.2778 75.6189 79.4991 86.5117 146 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 147 93.0556 93.0556 93.0556 80.9187 85.0744 92.5851 148 94.4444 94.4444 94.4444 83.6484 87.9461 95.7133 149 95.8333 95.8333 95.8333 86.4317 90.8742 98.9029 150 97.2222 97.2222 97.2222 89.2690 93.8590 102.154 151 16.6667 0.00000 0.00000 1.96573 1.49793 1.04525 152 12.5000 0.00000 0.00000 1.58591 1.30210 1.02745 153 33.3333 16.6667 0.00000 5.54650 4.58702 1.45294 154 50.0000 16.6667 0.00000 10.5768 7.18063 1.68865 155 66.6667 16.6667 0.00000 18.2502 11.1371 2.04822 156 83.3333 16.6667 0.00000 28.8619 16.6085 2.54546 157 100.000 16.6667 0.00000 42.6676 23.7268 3.19237 158 100.000 66.6667 33.3333 57.6857 51.1617 16.2081 159 100.000 83.3333 33.3333 66.8875 69.5626 19.2754 160 50.0000 33.3333 0.00000 12.9556 11.9377 2.48161 161 66.6667 33.3333 0.00000 20.6291 15.8941 2.84118 162 83.3333 33.3333 0.00000 31.2408 21.3656 3.33842 163 100.000 33.3333 0.00000 45.0464 28.4838 3.98533 164 33.3333 33.3333 0.00000 7.92535 9.34406 2.24590 165 33.3333 50.0000 0.00000 12.2873 18.0666 3.69988 166 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 167 66.6667 50.0000 0.00000 24.9910 24.6167 4.29515 168 83.3333 50.0000 0.00000 35.6027 30.0881 4.79240 169 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 170 100.000 100.000 16.6667 77.6581 93.0217 16.9414 171 33.3333 66.6667 0.00000 18.9412 31.3726 5.91788 172 50.0000 66.6667 0.00000 23.9714 33.9663 6.15359 173 66.6667 66.6667 0.00000 31.6449 37.9227 6.51315 174 83.3333 66.6667 0.00000 42.2566 43.3942 7.01040 175 100.000 66.6667 0.00000 56.0623 50.5124 7.65731 176 100.000 83.3333 0.00000 65.2640 68.9133 10.7246 177 50.0000 83.3333 0.00000 33.1732 52.3672 9.22086 178 66.6667 83.3333 0.00000 40.8467 56.3236 9.58042 179 4.16667 0.00000 0.00000 1.13178 1.06794 1.00617 180 6.94444 6.94444 6.94444 1.55687 1.58583 1.63816 181 16.6667 83.3333 0.00000 25.3996 48.3591 8.85660 182 16.6667 100.000 0.00000 37.3709 72.2985 12.8471 183 33.3333 100.000 0.00000 40.1143 73.7129 12.9756 184 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 185 66.6667 100.000 0.00000 52.8180 80.2630 13.5709 186 83.3333 100.000 0.00000 63.4297 85.7344 14.0682 187 100.000 100.000 0.00000 77.2354 92.8527 14.7151 188 100.000 100.000 50.0000 81.0605 94.3825 34.8625 189 98.6111 98.6111 98.6111 92.1605 96.9008 105.468 190 20.8333 0.00000 0.00000 2.46012 1.75284 1.06842 191 66.6667 0.00000 16.6667 17.8355 9.63156 3.99545 192 83.3333 0.00000 16.6667 28.4472 15.1030 4.49270 193 100.000 0.00000 16.6667 42.2529 22.2212 5.13961 194 100.000 33.3333 50.0000 48.8716 30.0136 24.1328 195 33.3333 16.6667 16.6667 5.96919 4.75607 3.67932 196 50.0000 16.6667 16.6667 10.9994 7.34968 3.91503 197 66.6667 16.6667 16.6667 18.6729 11.3062 4.27459 198 83.3333 16.6667 16.6667 29.2846 16.7776 4.77184 199 100.000 16.6667 16.6667 43.0903 23.8958 5.41875 200 8.33333 0.00000 0.00000 1.31146 1.16059 1.01459 201 11.1111 11.1111 11.1111 2.11371 2.17162 2.27628 202 0.00000 33.3333 16.6667 4.63896 7.60069 4.29847 203 50.0000 33.3333 16.6667 13.3783 12.1067 4.70798 204 66.6667 33.3333 16.6667 21.0518 16.0632 5.06755 205 83.3333 33.3333 16.6667 31.6635 21.5346 5.56479 206 100.000 33.3333 16.6667 45.4691 28.6529 6.21170 207 100.000 83.3333 16.6667 65.6867 69.0824 12.9510 208 33.3333 33.3333 16.6667 8.34805 9.51311 4.47227 209 33.3333 50.0000 16.6667 12.7099 18.2357 5.92625 210 50.0000 50.0000 16.6667 17.7402 20.8293 6.16196 211 66.6667 50.0000 16.6667 25.4137 24.7858 6.52153 212 83.3333 50.0000 16.6667 36.0254 30.2572 7.01877 213 100.000 50.0000 16.6667 49.8310 37.3754 7.66568 214 16.6667 50.0000 16.6667 9.96660 16.8212 5.79771 215 16.6667 66.6667 16.6667 16.6205 30.1272 8.01570 216 33.3333 66.6667 16.6667 19.3639 31.5417 8.14425 217 50.0000 66.6667 16.6667 24.3941 34.1353 8.37996 218 66.6667 66.6667 16.6667 32.0676 38.0918 8.73953 219 83.3333 66.6667 16.6667 42.6793 43.5632 9.23677 220 100.000 66.6667 16.6667 56.4850 50.6815 9.88368 221 16.6667 33.3333 16.6667 5.60470 8.09863 4.34373 222 16.6667 83.3333 16.6667 25.8223 48.5281 11.0830 223 33.3333 83.3333 16.6667 28.5656 49.9426 11.2115 224 50.0000 83.3333 16.6667 33.5959 52.5362 11.4472 225 66.6667 83.3333 16.6667 41.2694 56.4927 11.8068 226 83.3333 83.3333 16.6667 51.8810 61.9641 12.3040 227 0.00000 62.5000 0.00000 13.3391 25.6747 5.11306 228 0.00000 100.000 16.6667 36.8279 71.9696 15.0282 229 16.6667 100.000 16.6667 37.7936 72.4675 15.0735 230 33.3333 100.000 16.6667 40.5370 73.8820 15.2020 231 50.0000 100.000 16.6667 45.5672 76.4756 15.4377 232 66.6667 100.000 16.6667 53.2407 80.4321 15.7973 233 83.3333 100.000 33.3333 65.0531 86.3837 22.6190 234 100.000 100.000 33.3333 78.8588 93.5020 23.2659 235 16.6667 0.00000 16.6667 2.38843 1.66699 3.27163 236 33.3333 0.00000 16.6667 5.13178 3.08147 3.40018 237 50.0000 0.00000 16.6667 10.1620 5.67508 3.63588 238 66.6667 0.00000 33.3333 19.0363 10.1118 10.3199 239 83.3333 0.00000 33.3333 29.6479 15.5832 10.8172 240 100.000 0.00000 33.3333 43.4536 22.7014 11.4641 241 100.000 0.00000 66.6667 49.0140 24.9252 40.7510 242 0.00000 16.6667 16.6667 2.26011 2.84365 3.50552 243 33.3333 16.6667 33.3333 7.16994 5.23629 10.0038 244 50.0000 16.6667 33.3333 12.2002 7.82991 10.2395 245 66.6667 16.6667 33.3333 19.8737 11.7864 10.5991 246 83.3333 16.6667 33.3333 30.4854 17.2578 11.0963 247 100.000 16.6667 33.3333 44.2910 24.3760 11.7432 248 100.000 16.6667 50.0000 46.4927 25.2566 23.3398 249 50.0000 0.00000 33.3333 11.3628 6.15530 9.96035 250 50.0000 33.3333 33.3333 14.5790 12.5869 11.0324 251 66.6667 33.3333 33.3333 22.2525 16.5434 11.3920 252 83.3333 33.3333 33.3333 32.8642 22.0148 11.8893 253 100.000 33.3333 33.3333 46.6699 29.1331 12.5362 254 100.000 50.0000 33.3333 51.0318 37.8557 13.9901 255 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 256 33.3333 50.0000 33.3333 13.9107 18.7159 12.2507 257 50.0000 50.0000 33.3333 18.9409 21.3095 12.4864 258 66.6667 50.0000 33.3333 26.6144 25.2660 12.8460 259 83.3333 50.0000 33.3333 37.2261 30.7374 13.3432 260 16.6667 33.3333 33.3333 6.80544 8.57885 10.6682 261 16.6667 50.0000 33.3333 11.1673 17.3014 12.1222 262 16.6667 66.6667 33.3333 17.8213 30.6074 14.3402 263 33.3333 66.6667 33.3333 20.5646 32.0219 14.4687 264 50.0000 66.6667 33.3333 25.5949 34.6155 14.7044 265 66.6667 66.6667 33.3333 33.2684 38.5720 15.0640 266 83.3333 66.6667 33.3333 43.8800 44.0434 15.5612 267 16.6667 50.0000 0.00000 9.54390 16.6522 3.57133 268 16.6667 66.6667 0.00000 16.1978 29.9582 5.78933 269 16.6667 83.3333 33.3333 27.0230 49.0083 17.4074 270 33.3333 83.3333 33.3333 29.7664 50.4228 17.5360 271 50.0000 83.3333 33.3333 34.7966 53.0164 17.7717 272 66.6667 83.3333 33.3333 42.4701 56.9729 18.1313 273 66.6667 100.000 33.3333 54.4415 80.9123 22.1217 274 0.00000 83.3333 33.3333 26.0573 48.5104 17.3622 275 0.00000 100.000 33.3333 38.0287 72.4498 21.3527 276 16.6667 100.000 33.3333 38.9944 72.9477 21.3979 277 33.3333 100.000 33.3333 41.7377 74.3622 21.5265 278 50.0000 100.000 33.3333 46.7680 76.9558 21.7622 279 100.000 100.000 100.000 95.1065 100.000 108.844 280 33.3333 83.3333 0.00000 28.1429 49.7736 8.98515 281 83.3333 83.3333 0.00000 51.4583 61.7951 10.0777 282 83.3333 83.3333 33.3333 53.0818 62.4443 18.6285 283 16.6667 0.00000 33.3333 3.58917 2.14721 9.59609 284 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 285 66.6667 0.00000 50.0000 21.2380 10.9923 21.9165 286 83.3333 0.00000 50.0000 31.8496 16.4637 22.4138 287 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 288 33.3333 0.00000 33.3333 6.33252 3.56169 9.72464 289 33.3333 0.00000 50.0000 8.53423 4.44223 21.3213 290 33.3333 16.6667 50.0000 9.37165 6.11684 21.6004 291 50.0000 16.6667 50.0000 14.4019 8.71045 21.8361 292 66.6667 16.6667 50.0000 22.0754 12.6669 22.1957 293 83.3333 16.6667 50.0000 32.6871 18.1383 22.6929 294 83.3333 83.3333 50.0000 55.2835 63.3249 30.2251 295 16.6667 16.6667 0.00000 2.80315 3.17254 1.32439 296 16.6667 33.3333 0.00000 5.18200 7.92957 2.11735 297 33.3333 33.3333 50.0000 11.7505 10.8739 22.3934 298 50.0000 33.3333 50.0000 16.7808 13.4675 22.6291 299 66.6667 33.3333 50.0000 24.4542 17.4240 22.9886 300 83.3333 33.3333 50.0000 35.0659 22.8954 23.4859 301 0.00000 33.3333 33.3333 5.83971 8.08091 10.6229 302 0.00000 33.3333 50.0000 8.04142 8.96146 22.2196 303 16.6667 33.3333 50.0000 9.00715 9.45939 22.2648 304 33.3333 50.0000 50.0000 16.1124 19.5965 23.8473 305 66.6667 50.0000 50.0000 28.8161 26.1465 24.4426 306 83.3333 50.0000 50.0000 39.4278 31.6180 24.9399 307 83.3333 66.6667 50.0000 46.0818 44.9240 27.1579 308 16.6667 50.0000 50.0000 13.3691 18.1820 23.7188 309 16.6667 66.6667 50.0000 20.0230 31.4880 25.9368 310 33.3333 66.6667 50.0000 22.7663 32.9025 26.0653 311 50.0000 66.6667 50.0000 27.7966 35.4961 26.3011 312 66.6667 66.6667 50.0000 35.4701 39.4526 26.6606 313 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 314 0.00000 66.6667 50.0000 19.0573 30.9901 25.8915 315 0.00000 83.3333 50.0000 28.2590 49.3910 28.9588 316 16.6667 83.3333 50.0000 29.2247 49.8889 29.0041 317 33.3333 83.3333 50.0000 31.9681 51.3034 29.1326 318 50.0000 83.3333 50.0000 36.9983 53.8970 29.3683 319 66.6667 83.3333 50.0000 44.6718 57.8535 29.7279 320 0.00000 50.0000 33.3333 10.2016 16.8035 12.0769 321 0.00000 66.6667 33.3333 16.8555 30.1095 14.2949 322 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 323 16.6667 100.000 50.0000 41.1961 73.8283 32.9946 324 33.3333 100.000 50.0000 43.9394 75.2428 33.1231 325 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 326 66.6667 100.000 50.0000 56.6432 81.7928 33.7184 327 83.3333 100.000 50.0000 67.2549 87.2643 34.2156 328 16.6667 0.00000 50.0000 5.79088 3.02775 21.1927 329 16.6667 0.00000 66.6667 9.14952 4.37100 38.8830 330 33.3333 0.00000 66.6667 11.8929 5.78548 39.0116 331 50.0000 0.00000 66.6667 16.9231 8.37909 39.2473 332 66.6667 0.00000 66.6667 24.5966 12.3356 39.6068 333 83.3333 0.00000 66.6667 35.2083 17.8070 40.1041 334 16.6667 16.6667 33.3333 4.42659 3.82181 9.87523 335 16.6667 16.6667 50.0000 6.62830 4.70235 21.4719 336 16.6667 16.6667 66.6667 9.98694 6.04560 39.1621 337 33.3333 16.6667 66.6667 12.7303 7.46008 39.2907 338 50.0000 16.6667 66.6667 17.7605 10.0537 39.5264 339 66.6667 16.6667 66.6667 25.4340 14.0102 39.8860 340 83.3333 16.6667 66.6667 36.0457 19.4816 40.3832 341 83.3333 33.3333 66.6667 38.4246 24.2386 41.1762 342 83.3333 33.3333 83.3333 43.0692 26.0962 65.6401 343 83.3333 66.6667 100.000 60.1277 50.5415 101.139 344 33.3333 33.3333 66.6667 15.1091 12.2171 40.0837 345 50.0000 33.3333 66.6667 20.1394 14.8107 40.3194 346 66.6667 33.3333 66.6667 27.8129 18.7672 40.6789 347 66.6667 33.3333 100.000 38.5002 23.0415 96.9701 348 8.33333 41.6667 58.3333 11.7912 13.5562 30.9100 349 0.00000 50.0000 66.6667 15.7620 19.0273 41.3638 350 16.6667 50.0000 66.6667 16.7277 19.5252 41.4091 351 33.3333 50.0000 66.6667 19.4710 20.9397 41.5376 352 50.0000 50.0000 66.6667 24.5013 23.5333 41.7733 353 66.6667 50.0000 66.6667 32.1748 27.4898 42.1329 354 8.33333 41.6667 8.33333 6.57623 11.4706 3.44212 355 8.33333 58.3333 58.3333 17.2645 24.5012 32.7344 356 0.00000 66.6667 66.6667 22.4159 32.3333 43.5818 357 16.6667 66.6667 66.6667 23.3816 32.8312 43.6271 358 33.3333 66.6667 66.6667 26.1250 34.2457 43.7556 359 50.0000 66.6667 66.6667 31.1552 36.8393 43.9913 360 58.3333 75.0000 75.0000 41.0642 48.0333 56.9240 361 8.33333 41.6667 41.6667 9.02853 12.4513 16.3587 362 8.33333 58.3333 41.6667 14.5018 23.3963 18.1831 363 16.6667 83.3333 66.6667 32.5834 51.2321 46.6943 364 33.3333 83.3333 66.6667 35.3267 52.6466 46.8229 365 50.0000 83.3333 66.6667 40.3570 55.2402 47.0586 366 50.0000 83.3333 83.3333 45.0016 57.0978 71.5225 367 8.33333 91.6667 25.0000 31.2812 59.6371 15.4904 368 8.33333 91.6667 58.3333 35.7232 61.4136 38.8874 369 0.00000 100.000 66.6667 43.5890 74.6736 50.6396 370 16.6667 100.000 66.6667 44.5547 75.1715 50.6848 371 33.3333 100.000 66.6667 47.2981 76.5860 50.8134 372 50.0000 100.000 66.6667 52.3283 79.1796 51.0491 373 66.6667 100.000 66.6667 60.0018 83.1361 51.4087 374 83.3333 100.000 66.6667 70.6135 88.6075 51.9059 375 100.000 100.000 66.6667 84.4192 95.7257 52.5528 376 25.0000 8.33333 58.3333 8.69866 4.75131 29.3732 377 33.3333 0.00000 83.3333 16.5375 7.64305 63.4755 378 50.0000 0.00000 83.3333 21.5678 10.2367 63.7112 379 66.6667 0.00000 83.3333 29.2413 14.1931 64.0707 380 83.3333 0.00000 83.3333 39.8529 19.6646 64.5680 381 91.6667 8.33333 91.6667 49.4519 24.6861 79.9211 382 0.00000 16.6667 83.3333 13.6659 7.40523 63.5808 383 16.6667 16.6667 83.3333 14.6316 7.90317 63.6261 384 33.3333 16.6667 83.3333 17.3750 9.31765 63.7546 385 50.0000 16.6667 83.3333 22.4052 11.9113 63.9903 386 66.6667 16.6667 83.3333 30.0787 15.8677 64.3499 387 83.3333 16.6667 83.3333 40.6904 21.3392 64.8471 388 83.3333 83.3333 100.000 69.3294 68.9424 104.207 389 16.6667 33.3333 66.6667 12.3658 10.8026 39.9551 390 16.6667 33.3333 83.3333 17.0105 12.6602 64.4190 391 33.3333 33.3333 83.3333 19.7538 14.0747 64.5476 392 50.0000 33.3333 83.3333 24.7841 16.6683 64.7833 393 66.6667 33.3333 83.3333 32.4575 20.6248 65.1428 394 75.0000 41.6667 91.6667 42.1316 28.1222 80.9699 395 8.33333 25.0000 58.3333 8.46404 6.90283 29.8009 396 8.33333 25.0000 75.0000 12.4508 8.49727 50.7994 397 16.6667 50.0000 83.3333 21.3724 21.3828 65.8730 398 33.3333 50.0000 83.3333 24.1157 22.7973 66.0015 399 50.0000 50.0000 83.3333 29.1460 25.3909 66.2373 400 66.6667 50.0000 83.3333 36.8194 29.3474 66.5968 401 66.6667 66.6667 100.000 49.5160 45.0701 100.642 402 8.33333 58.3333 75.0000 21.2512 26.0956 53.7329 403 0.00000 66.6667 83.3333 27.0606 34.1909 68.0457 404 16.6667 66.6667 83.3333 28.0263 34.6888 68.0910 405 33.3333 66.6667 83.3333 30.7696 36.1033 68.2195 406 50.0000 66.6667 83.3333 35.7999 38.6969 68.4553 407 66.6667 66.6667 83.3333 43.4734 42.6534 68.8148 408 66.6667 83.3333 83.3333 52.6751 61.0543 71.8821 409 8.33333 75.0000 75.0000 29.1495 41.8900 56.3657 410 0.00000 83.3333 83.3333 36.2623 52.5918 71.1130 411 16.6667 83.3333 83.3333 37.2280 53.0897 71.1583 412 33.3333 83.3333 83.3333 39.9714 54.5042 71.2868 413 8.33333 75.0000 58.3333 25.1627 40.2956 35.3672 414 0.00000 83.3333 66.6667 31.6176 50.7342 46.6491 415 8.33333 91.6667 75.0000 39.7100 63.0080 59.8859 416 0.00000 100.000 83.3333 48.2337 76.5312 75.1035 417 16.6667 100.000 83.3333 49.1994 77.0291 75.1488 418 33.3333 100.000 83.3333 51.9427 78.4436 75.2773 419 50.0000 100.000 83.3333 56.9730 81.0372 75.5130 420 66.6667 100.000 83.3333 64.6465 84.9937 75.8726 421 100.000 100.000 83.3333 89.0638 97.5833 77.0167 422 16.6667 0.00000 83.3333 13.7942 6.22857 63.3469 423 16.6667 0.00000 100.000 19.8368 8.64525 95.1742 424 33.3333 0.00000 100.000 22.5802 10.0597 95.3028 425 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 426 66.6667 0.00000 100.000 35.2839 16.6098 95.8980 427 83.3333 0.00000 100.000 45.8956 22.0812 96.3953 428 100.000 0.00000 100.000 59.7013 29.1995 97.0422 429 100.000 83.3333 100.000 83.1351 76.0606 104.854 430 16.6667 16.6667 100.000 20.6743 10.3198 95.4534 431 33.3333 16.6667 100.000 23.4176 11.7343 95.5819 432 50.0000 16.6667 100.000 28.4479 14.3279 95.8176 433 66.6667 16.6667 100.000 36.1213 18.2844 96.1772 434 66.6667 83.3333 100.000 58.7178 63.4710 103.709 435 0.00000 33.3333 83.3333 16.0447 12.1623 64.3738 436 0.00000 33.3333 100.000 22.0874 14.5790 96.2011 437 16.6667 33.3333 100.000 23.0531 15.0769 96.2463 438 33.3333 33.3333 100.000 25.7965 16.4914 96.3749 439 50.0000 33.3333 100.000 30.8267 19.0850 96.6106 440 0.00000 33.3333 66.6667 11.4001 10.3047 39.9098 441 8.33333 41.6667 75.0000 15.7779 15.1507 51.9085 442 8.33333 41.6667 91.6667 21.1084 17.2825 79.9848 443 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 444 16.6667 50.0000 100.000 27.4150 23.7995 97.7003 445 33.3333 50.0000 100.000 30.1584 25.2140 97.8288 446 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 447 50.0000 66.6667 100.000 41.8426 41.1136 100.283 448 0.00000 50.0000 83.3333 20.4066 20.8849 65.8277 449 8.33333 58.3333 91.6667 26.5817 28.2275 81.8093 450 0.00000 66.6667 100.000 33.1032 36.6075 99.8730 451 16.6667 100.000 100.000 55.2420 79.4458 106.976 452 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 453 83.3333 16.6667 100.000 46.7330 23.7558 96.6744 454 83.3333 33.3333 100.000 49.1119 28.5129 97.4674 455 83.3333 50.0000 100.000 53.4738 37.2355 98.9214 456 0.00000 16.6667 100.000 19.7085 9.82192 95.4081 457 16.6667 66.6667 100.000 34.0689 37.1055 99.9183 458 16.6667 83.3333 100.000 43.2707 55.5064 102.986 459 33.3333 83.3333 100.000 46.0140 56.9209 103.114 460 50.0000 83.3333 100.000 51.0443 59.5145 103.350 461 8.33333 25.0000 41.6667 5.70137 5.79793 15.2496 462 8.33333 25.0000 91.6667 17.7813 10.6291 78.8758 463 8.33333 75.0000 91.6667 34.4800 44.0219 84.4421 464 0.00000 83.3333 100.000 42.3050 55.0085 102.940 465 0.00000 100.000 100.000 54.2763 78.9478 106.931 466 33.3333 100.000 100.000 57.9854 80.8602 107.105 467 50.0000 100.000 100.000 63.0157 83.4539 107.340 468 66.6667 100.000 100.000 70.6891 87.4103 107.700 469 83.3333 100.000 100.000 81.3008 92.8817 108.197 470 100.000 100.000 100.000 95.1065 100.000 108.844 471 41.6667 8.33333 8.33333 7.32065 4.64400 2.08519 472 58.3333 8.33333 8.33333 13.6325 7.89843 2.38095 473 75.0000 8.33333 8.33333 22.7410 12.5948 2.80776 474 91.6667 8.33333 8.33333 34.9197 18.8741 3.37843 475 91.6667 41.6667 25.0000 40.5509 28.8986 9.06878 476 91.6667 58.3333 25.0000 46.0242 39.8436 10.8932 477 41.6667 25.0000 8.33333 8.85185 7.70598 2.59559 478 58.3333 25.0000 8.33333 15.1637 10.9604 2.89136 479 75.0000 25.0000 8.33333 24.2722 15.6568 3.31816 480 91.6667 25.0000 8.33333 36.4509 21.9361 3.88883 481 91.6667 75.0000 25.0000 53.9225 55.6380 13.5260 482 91.6667 91.6667 25.0000 64.4830 76.7560 17.0462 483 41.6667 41.6667 8.33333 12.1790 14.3594 3.70466 484 58.3333 41.6667 8.33333 18.4909 17.6138 4.00042 485 75.0000 41.6667 8.33333 27.5994 22.3102 4.42723 486 91.6667 41.6667 8.33333 39.7780 28.5895 4.99790 487 25.0000 25.0000 8.33333 5.01488 5.72763 2.41580 488 25.0000 41.6667 8.33333 8.34205 12.3810 3.52486 489 41.6667 58.3333 8.33333 17.6523 25.3044 5.52909 490 58.3333 58.3333 8.33333 23.9642 28.5588 5.82485 491 75.0000 58.3333 8.33333 33.0727 33.2552 6.25166 492 91.6667 58.3333 8.33333 45.2513 39.5345 6.82233 493 91.6667 75.0000 8.33333 53.1496 55.3289 9.45512 494 91.6667 75.0000 75.0000 62.3513 59.0090 57.9215 495 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 496 58.3333 75.0000 8.33333 31.8624 44.3532 8.45764 497 75.0000 75.0000 8.33333 40.9710 49.0495 8.88445 498 25.0000 58.3333 8.33333 13.8153 23.3260 5.34929 499 25.0000 75.0000 8.33333 21.7136 39.1204 7.98208 500 25.0000 91.6667 8.33333 32.2741 60.2384 11.5023 501 41.6667 91.6667 8.33333 36.1111 62.2168 11.6821 502 58.3333 91.6667 8.33333 42.4229 65.4712 11.9778 503 75.0000 91.6667 8.33333 51.5314 70.1676 12.4046 504 91.6667 91.6667 8.33333 63.7101 76.4469 12.9753 505 8.33333 8.33333 25.0000 2.49075 2.06429 5.89353 506 25.0000 8.33333 25.0000 4.25657 2.97476 5.97628 507 41.6667 8.33333 25.0000 8.09354 4.95311 6.15607 508 58.3333 8.33333 25.0000 14.4054 8.20754 6.45183 509 75.0000 8.33333 25.0000 23.5139 12.9039 6.87864 510 91.6667 8.33333 25.0000 35.6926 19.1833 7.44931 511 91.6667 25.0000 41.6667 38.9032 22.9169 16.8054 512 41.6667 25.0000 25.0000 9.62474 8.01509 6.66648 513 58.3333 25.0000 25.0000 15.9366 11.2695 6.96224 514 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 515 91.6667 25.0000 25.0000 37.2238 22.2452 7.95972 516 8.33333 25.0000 25.0000 4.02195 5.12627 6.40394 517 8.33333 41.6667 25.0000 7.34912 11.7797 7.51300 518 41.6667 41.6667 25.0000 12.9519 14.6685 7.77554 519 58.3333 41.6667 25.0000 19.2638 17.9229 8.07130 520 75.0000 41.6667 25.0000 28.3723 22.6193 8.49811 521 75.0000 58.3333 25.0000 33.8456 33.5643 10.3225 522 25.0000 41.6667 25.0000 9.11494 12.6901 7.59575 523 25.0000 58.3333 25.0000 14.5882 23.6351 9.42018 524 41.6667 58.3333 25.0000 18.4252 25.6135 9.59997 525 58.3333 58.3333 25.0000 24.7370 28.8679 9.89574 526 75.0000 75.0000 41.6667 43.4233 50.0303 21.8010 527 91.6667 75.0000 41.6667 55.6019 56.3096 22.3717 528 8.33333 25.0000 8.33333 3.24906 4.81716 2.33305 529 8.33333 58.3333 25.0000 12.8224 22.7246 9.33744 530 8.33333 75.0000 25.0000 20.7207 38.5190 11.9702 531 58.3333 75.0000 25.0000 32.6353 44.6623 12.5285 532 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 533 75.0000 91.6667 25.0000 52.3043 70.4767 16.4755 534 8.33333 75.0000 41.6667 22.4001 39.1907 20.8159 535 8.33333 91.6667 41.6667 32.9606 60.3087 24.3361 536 8.33333 91.6667 91.6667 45.0405 65.1399 87.9622 537 100.000 100.000 100.000 95.1065 100.000 108.844 538 91.6667 41.6667 41.6667 42.2303 29.5703 17.9145 539 91.6667 58.3333 41.6667 47.7036 40.5153 19.7389 540 91.6667 58.3333 75.0000 54.4530 43.2146 55.2887 541 91.6667 58.3333 91.6667 59.7835 45.3465 83.3650 542 100.000 66.6667 100.000 73.9334 57.6597 101.786 543 58.3333 8.33333 41.6667 16.0848 8.87920 15.2975 544 75.0000 8.33333 41.6667 25.1933 13.5756 15.7243 545 91.6667 8.33333 41.6667 37.3720 19.8549 16.2950 546 91.6667 8.33333 58.3333 40.1347 20.9598 30.8463 547 41.6667 8.33333 41.6667 9.77296 5.62477 15.0017 548 41.6667 25.0000 41.6667 11.3042 8.68675 15.5121 549 58.3333 25.0000 41.6667 17.6160 11.9412 15.8079 550 75.0000 25.0000 41.6667 26.7246 16.6376 16.2347 551 83.3333 50.0000 66.6667 42.7865 32.9612 42.6301 552 83.3333 50.0000 83.3333 47.4311 34.8188 67.0941 553 100.000 50.0000 83.3333 61.2368 41.9370 67.7410 554 58.3333 41.6667 41.6667 20.9432 18.5946 16.9170 555 75.0000 41.6667 41.6667 30.0517 23.2910 17.3438 556 75.0000 91.6667 58.3333 56.7464 72.2532 39.8725 557 25.0000 41.6667 41.6667 10.7944 13.3618 16.4414 558 25.0000 58.3333 41.6667 16.2676 24.3068 18.2658 559 41.6667 58.3333 41.6667 20.1046 26.2851 18.4456 560 58.3333 58.3333 41.6667 26.4165 29.5396 18.7414 561 75.0000 58.3333 41.6667 35.5250 34.2359 19.1682 562 83.3333 66.6667 66.6667 49.4404 46.2672 44.8481 563 83.3333 83.3333 66.6667 58.6421 64.6681 47.9154 564 25.0000 75.0000 41.6667 24.1659 40.1011 20.8986 565 41.6667 75.0000 41.6667 28.0029 42.0795 21.0784 566 41.6667 75.0000 58.3333 30.7655 43.1844 35.6297 567 66.6667 83.3333 66.6667 48.0305 59.1967 47.4182 568 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 569 25.0000 91.6667 25.0000 33.0470 60.5475 15.5732 570 25.0000 91.6667 41.6667 34.7264 61.2192 24.4188 571 41.6667 91.6667 41.6667 38.5634 63.1975 24.5986 572 58.3333 91.6667 41.6667 44.8752 66.4520 24.8944 573 75.0000 91.6667 41.6667 53.9838 71.1483 25.3212 574 91.6667 91.6667 41.6667 66.1624 77.4277 25.8919 575 91.6667 91.6667 58.3333 68.9251 78.5326 40.4431 576 8.33333 8.33333 41.6667 4.17016 2.73595 14.7392 577 41.6667 8.33333 58.3333 12.5356 6.72967 29.5530 578 58.3333 8.33333 58.3333 18.8475 9.98410 29.8488 579 75.0000 8.33333 58.3333 27.9560 14.6805 30.2756 580 100.000 16.6667 66.6667 49.8514 26.5998 41.0301 581 100.000 16.6667 83.3333 54.4960 28.4574 65.4940 582 100.000 16.6667 100.000 60.5387 30.8741 97.3213 583 100.000 33.3333 100.000 62.9175 35.6311 98.1143 584 58.3333 25.0000 58.3333 20.3787 13.0461 30.3592 585 75.0000 25.0000 58.3333 29.4872 17.7424 30.7860 586 91.6667 25.0000 58.3333 41.6659 24.0218 31.3567 587 100.000 33.3333 66.6667 52.2302 31.3569 41.8231 588 100.000 33.3333 83.3333 56.8749 33.2144 66.2870 589 100.000 50.0000 100.000 67.2794 44.3537 99.5683 590 58.3333 41.6667 58.3333 23.7059 19.6995 31.4683 591 75.0000 41.6667 58.3333 32.8144 24.3959 31.8951 592 91.6667 41.6667 58.3333 44.9930 30.6752 32.4657 593 100.000 50.0000 66.6667 56.5921 40.0795 43.2771 594 100.000 66.6667 83.3333 67.8907 55.2430 69.9590 595 100.000 83.3333 83.3333 77.0925 73.6439 73.0262 596 75.0000 58.3333 58.3333 38.2876 35.3408 33.7195 597 91.6667 58.3333 58.3333 50.4663 41.6202 34.2902 598 100.000 66.6667 66.6667 63.2461 53.3855 45.4951 599 100.000 83.3333 66.6667 72.4478 71.7864 48.5623 600 58.3333 75.0000 41.6667 34.3148 45.3339 21.3742 601 58.3333 75.0000 58.3333 37.0774 46.4388 35.9255 602 75.0000 75.0000 58.3333 46.1859 51.1352 36.3523 603 91.6667 75.0000 58.3333 58.3646 57.4145 36.9230 604 41.6667 75.0000 25.0000 26.3234 41.4078 12.2328 605 41.6667 91.6667 25.0000 36.8839 62.5259 15.7530 606 41.6667 91.6667 58.3333 41.3260 64.3024 39.1499 607 58.3333 91.6667 58.3333 47.6379 67.5569 39.4457 608 91.6667 91.6667 75.0000 72.9118 80.1270 61.4417 609 8.33333 8.33333 58.3333 6.93284 3.84085 29.2905 610 8.33333 8.33333 75.0000 10.9196 5.43529 50.2890 611 25.0000 8.33333 75.0000 12.6854 6.34575 50.3718 612 41.6667 8.33333 75.0000 16.5224 8.32411 50.5516 613 58.3333 8.33333 75.0000 22.8343 11.5785 50.8473 614 75.0000 8.33333 75.0000 31.9428 16.2749 51.2741 615 91.6667 8.33333 75.0000 44.1214 22.5543 51.8448 616 100.000 0.00000 83.3333 53.6586 26.7828 65.2149 617 41.6667 25.0000 58.3333 14.0668 9.79164 30.0634 618 41.6667 25.0000 75.0000 18.0536 11.3861 51.0620 619 58.3333 25.0000 75.0000 24.3655 14.6405 51.3577 620 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 621 91.6667 25.0000 75.0000 45.6526 25.6162 52.3552 622 91.6667 41.6667 91.6667 54.3103 34.4015 81.5406 623 41.6667 41.6667 58.3333 17.3940 16.4450 31.1725 624 41.6667 41.6667 75.0000 21.3807 18.0395 52.1710 625 58.3333 41.6667 75.0000 27.6926 21.2939 52.4668 626 75.0000 41.6667 75.0000 36.8011 25.9903 52.8936 627 91.6667 41.6667 75.0000 48.9798 32.2696 53.4643 628 25.0000 8.33333 41.6667 5.93599 3.64642 14.8219 629 25.0000 25.0000 41.6667 7.46719 6.70839 15.3324 630 41.6667 58.3333 75.0000 26.8540 28.9845 53.9955 631 58.3333 58.3333 75.0000 33.1659 32.2389 54.2912 632 75.0000 58.3333 75.0000 42.2744 36.9353 54.7180 633 83.3333 66.6667 83.3333 54.0851 48.1248 69.3121 634 91.6667 75.0000 91.6667 67.6818 61.1408 85.9978 635 41.6667 58.3333 58.3333 22.8672 27.3900 32.9969 636 41.6667 75.0000 75.0000 34.7523 44.7788 56.6283 637 41.6667 75.0000 91.6667 40.0828 46.9107 84.7046 638 25.0000 58.3333 58.3333 19.0303 25.4117 32.8171 639 25.0000 75.0000 58.3333 26.9286 41.2060 35.4499 640 25.0000 91.6667 58.3333 37.4891 62.3241 38.9701 641 41.6667 91.6667 75.0000 45.3128 65.8969 60.1484 642 58.3333 91.6667 75.0000 51.6247 69.1513 60.4442 643 75.0000 91.6667 75.0000 60.7332 73.8477 60.8710 644 83.3333 100.000 83.3333 75.2582 90.4651 76.3698 645 8.33333 8.33333 91.6667 16.2501 7.56716 78.3654 646 25.0000 8.33333 91.6667 18.0159 8.47762 78.4481 647 41.6667 8.33333 91.6667 21.8529 10.4560 78.6279 648 58.3333 8.33333 91.6667 28.1648 13.7104 78.9237 649 75.0000 8.33333 91.6667 37.2733 18.4068 79.3505 650 25.0000 25.0000 58.3333 10.2299 7.81329 29.8836 651 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 652 25.0000 25.0000 91.6667 19.5471 11.5396 78.9585 653 41.6667 25.0000 91.6667 23.3841 13.5180 79.1383 654 58.3333 25.0000 91.6667 29.6960 16.7724 79.4341 655 75.0000 25.0000 91.6667 38.8045 21.4688 79.8609 656 91.6667 25.0000 91.6667 50.9831 27.7481 80.4315 657 25.0000 41.6667 75.0000 17.5438 16.0611 51.9912 658 25.0000 41.6667 91.6667 22.8743 18.1930 80.0676 659 41.6667 41.6667 91.6667 26.7112 20.1714 80.2474 660 58.3333 41.6667 91.6667 33.0231 23.4258 80.5431 661 66.6667 50.0000 100.000 42.8621 31.7640 98.4241 662 25.0000 41.6667 58.3333 13.5570 14.4667 30.9927 663 25.0000 58.3333 75.0000 23.0170 27.0061 53.8157 664 25.0000 58.3333 91.6667 28.3475 29.1380 81.8920 665 41.6667 58.3333 91.6667 32.1845 31.1163 82.0718 666 58.3333 58.3333 91.6667 38.4964 34.3708 82.3676 667 75.0000 58.3333 91.6667 47.6049 39.0671 82.7944 668 75.0000 75.0000 91.6667 55.5032 54.8615 85.4272 669 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 670 25.0000 75.0000 91.6667 36.2458 44.9323 84.5248 671 58.3333 75.0000 91.6667 46.3947 50.1651 85.0004 672 8.33333 58.3333 8.33333 12.0495 22.4155 5.26655 673 8.33333 75.0000 8.33333 19.9478 38.2099 7.89934 674 8.33333 91.6667 8.33333 30.5083 59.3279 11.4195 675 25.0000 91.6667 75.0000 41.4758 63.9185 59.9687 676 25.0000 91.6667 91.6667 46.8063 66.0504 88.0450 677 41.6667 91.6667 91.6667 50.6433 68.0287 88.2248 678 58.3333 91.6667 91.6667 56.9552 71.2832 88.5205 679 75.0000 91.6667 91.6667 66.0637 75.9795 88.9474 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -t5000 -b130 -gl -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/softproof.ti3000644 000765 000000 00000131151 12237536425 017725 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Tue Feb 23 08:46:43 2010" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "73" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "7" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "7" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "25" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "USE_BLACK_POINT_COMPENSATION" USE_BLACK_POINT_COMPENSATION "NO" BEGIN_ARGYLL_COLPROF_ARGS -qh -ax END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 679 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 0.00000 16.6667 33.3333 3.46086 3.32388 9.82998 3 0.00000 16.6667 50.0000 5.66257 4.20442 21.4266 4 0.00000 16.6667 66.6667 9.02121 5.54766 39.1169 5 0.00000 50.0000 16.6667 9.00087 16.3233 5.75245 6 0.00000 66.6667 16.6667 15.6548 29.6293 7.97045 7 0.00000 83.3333 16.6667 24.8565 48.0302 11.0377 8 41.6667 75.0000 8.33333 25.5506 41.0987 8.16187 9 58.3333 91.6667 25.0000 43.1958 65.7803 16.0487 10 0.00000 8.33333 0.00000 1.27008 1.54008 1.09003 11 2.77778 2.77778 2.77778 1.20233 1.21285 1.23186 12 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 13 25.0000 8.33333 8.33333 3.48368 2.66565 1.90539 14 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 15 29.1667 0.00000 0.00000 3.82465 2.45640 1.13236 16 33.3333 0.00000 0.00000 4.70908 2.91242 1.17380 17 37.5000 0.00000 0.00000 5.73696 3.44239 1.22197 18 41.6667 0.00000 0.00000 6.91425 4.04941 1.27713 19 45.8333 0.00000 0.00000 8.24660 4.73637 1.33956 20 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 21 54.1667 0.00000 0.00000 11.3976 6.36102 1.48721 22 58.3333 0.00000 0.00000 13.2261 7.30384 1.57290 23 62.5000 0.00000 0.00000 15.2297 8.33690 1.66678 24 66.6667 0.00000 0.00000 17.4128 9.46250 1.76908 25 70.8333 0.00000 0.00000 19.7797 10.6829 1.87999 26 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 27 79.1667 0.00000 0.00000 25.0816 13.4165 2.12842 28 83.3333 0.00000 0.00000 28.0245 14.9339 2.26632 29 87.5000 0.00000 0.00000 31.1672 16.5543 2.41358 30 91.6667 0.00000 0.00000 34.5133 18.2796 2.57037 31 95.8333 0.00000 0.00000 38.0664 20.1116 2.73687 32 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 33 100.000 66.6667 50.0000 59.8874 52.0422 27.8048 34 100.000 83.3333 50.0000 69.0892 70.4431 30.8720 35 0.00000 12.5000 0.00000 1.50806 2.01598 1.16935 36 0.00000 16.6667 0.00000 1.83742 2.67460 1.27914 37 0.00000 20.8333 0.00000 2.26612 3.53189 1.42204 38 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 39 0.00000 29.1667 0.00000 3.44935 5.89801 1.81646 40 0.00000 33.3333 0.00000 4.21627 7.43164 2.07210 41 0.00000 37.5000 0.00000 5.10758 9.21400 2.36920 42 0.00000 41.6667 0.00000 6.12844 11.2555 2.70950 43 0.00000 45.8333 0.00000 7.28377 13.5658 3.09461 44 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 45 0.00000 54.1667 0.00000 10.0161 19.0296 4.00538 46 0.00000 58.3333 0.00000 11.6017 22.2004 4.53393 47 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 48 0.00000 66.6667 0.00000 15.2321 29.4602 5.74408 49 0.00000 70.8333 0.00000 17.2845 33.5645 6.42822 50 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 51 0.00000 79.1667 0.00000 21.8820 42.7581 7.96071 52 0.00000 83.3333 0.00000 24.4338 47.8611 8.81135 53 0.00000 87.5000 0.00000 27.1590 53.3106 9.71972 54 0.00000 91.6667 0.00000 30.0605 59.1128 10.6869 55 0.00000 95.8333 0.00000 33.1416 65.2741 11.7139 56 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 57 83.3333 100.000 16.6667 63.8524 85.9035 16.2945 58 9.72222 9.72222 9.72222 1.90315 1.95012 2.03499 59 0.00000 0.00000 12.5000 1.25645 1.10256 2.35074 60 0.00000 0.00000 16.6667 1.42269 1.16905 3.22637 61 0.00000 0.00000 20.8333 1.63909 1.25559 4.36613 62 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 63 0.00000 0.00000 29.1667 2.23633 1.49445 7.51188 64 0.00000 0.00000 33.3333 2.62344 1.64927 9.55084 65 0.00000 0.00000 37.5000 3.07334 1.82920 11.9205 66 0.00000 0.00000 41.6667 3.58863 2.03529 14.6346 67 0.00000 0.00000 45.8333 4.17179 2.26852 17.7061 68 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 69 0.00000 0.00000 54.1667 5.55095 2.82009 24.9703 70 0.00000 0.00000 58.3333 6.35130 3.14018 29.1859 71 0.00000 0.00000 62.5000 7.22826 3.49091 33.8049 72 0.00000 0.00000 66.6667 8.18379 3.87306 38.8378 73 0.00000 0.00000 70.8333 9.21977 4.28739 44.2944 74 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 75 0.00000 0.00000 79.1667 11.5404 5.21548 56.5172 76 0.00000 0.00000 83.3333 12.8285 5.73063 63.3017 77 0.00000 0.00000 87.5000 14.2040 6.28076 70.5467 78 0.00000 0.00000 91.6667 15.6685 6.86649 78.2607 79 0.00000 0.00000 95.8333 17.2237 7.48847 86.4521 80 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 81 33.3333 66.6667 100.000 36.8123 38.5200 100.047 82 0.00000 0.00000 8.33333 1.13632 1.05452 1.71803 83 0.00000 4.16667 0.00000 1.11427 1.22850 1.03809 84 0.00000 0.00000 4.16667 1.05768 1.02307 1.30380 85 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 86 1.38889 1.38889 1.38889 1.10116 1.10642 1.11593 87 4.16667 4.16667 4.16667 1.30372 1.31952 1.34806 88 5.55556 5.55556 5.55556 1.41919 1.44098 1.48038 89 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 90 13.8889 13.8889 13.8889 2.61414 2.69807 2.84977 91 15.2778 15.2778 15.2778 2.90569 3.00478 3.18388 92 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 93 18.0556 18.0556 18.0556 3.57536 3.70928 3.95131 94 19.4444 19.4444 19.4444 3.95495 4.10861 4.38632 95 20.8333 20.8333 20.8333 4.36533 4.54033 4.85660 96 22.2222 22.2222 22.2222 4.80716 5.00513 5.36292 97 23.6111 23.6111 23.6111 5.28109 5.50371 5.90604 98 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 99 26.3889 26.3889 26.3889 6.32780 6.60485 7.10555 100 27.7778 27.7778 27.7778 6.90179 7.20869 7.76333 101 29.1667 29.1667 29.1667 7.51032 7.84886 8.46069 102 30.5556 30.5556 30.5556 8.15397 8.52597 9.19829 103 31.9444 31.9444 31.9444 8.83328 9.24060 9.97677 104 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 105 34.7222 34.7222 34.7222 10.3011 10.7847 11.6588 106 36.1111 36.1111 36.1111 11.0906 11.6153 12.5636 107 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 108 38.8889 38.8889 38.8889 12.7834 13.3962 14.5036 109 40.2778 40.2778 40.2778 13.6878 14.3475 15.5399 110 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 111 43.0556 43.0556 43.0556 15.6146 16.3746 17.7480 112 44.4444 44.4444 44.4444 16.6381 17.4512 18.9209 113 45.8333 45.8333 45.8333 17.7021 18.5707 20.1403 114 47.2222 47.2222 47.2222 18.8073 19.7333 21.4068 115 48.6111 48.6111 48.6111 19.9540 20.9396 22.7209 116 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 117 51.3889 51.3889 51.3889 22.3737 23.4851 25.4938 118 52.7778 52.7778 52.7778 23.6475 24.8252 26.9536 119 54.1667 54.1667 54.1667 24.9646 26.2107 28.4629 120 55.5556 55.5556 55.5556 26.3253 27.6422 30.0222 121 56.9444 56.9444 56.9444 27.7300 29.1199 31.6320 122 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 123 59.7222 59.7222 59.7222 30.6731 32.2161 35.0048 124 61.1111 61.1111 61.1111 32.2123 33.8353 36.7686 125 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 126 63.8889 63.8889 63.8889 35.4278 37.2181 40.4535 127 65.2778 65.2778 65.2778 37.1049 38.9824 42.3755 128 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 129 68.0556 68.0556 68.0556 40.5996 42.6588 46.3803 130 69.4444 69.4444 69.4444 42.4179 44.5716 48.4641 131 70.8333 70.8333 70.8333 44.2840 46.5348 50.6026 132 72.2222 72.2222 72.2222 46.1983 48.5486 52.7963 133 73.6111 73.6111 73.6111 48.1611 50.6134 55.0456 134 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 135 76.3889 76.3889 76.3889 52.2335 54.8976 59.7124 136 77.7778 77.7778 77.7778 54.3438 57.1176 62.1308 137 79.1667 79.1667 79.1667 56.5039 59.3901 64.6063 138 80.5556 80.5556 80.5556 58.7142 61.7154 67.1393 139 81.9444 81.9444 81.9444 60.9751 64.0938 69.7302 140 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 141 84.7222 84.7222 84.7222 65.6496 69.0114 75.0871 142 86.1111 86.1111 86.1111 68.0640 71.5513 77.8539 143 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 144 88.8889 88.8889 88.8889 73.0483 76.7948 83.5658 145 90.2778 90.2778 90.2778 75.6189 79.4991 86.5117 146 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 147 93.0556 93.0556 93.0556 80.9187 85.0744 92.5851 148 94.4444 94.4444 94.4444 83.6484 87.9461 95.7133 149 95.8333 95.8333 95.8333 86.4317 90.8742 98.9029 150 97.2222 97.2222 97.2222 89.2690 93.8590 102.154 151 16.6667 0.00000 0.00000 1.96573 1.49793 1.04525 152 12.5000 0.00000 0.00000 1.58591 1.30210 1.02745 153 33.3333 16.6667 0.00000 5.54650 4.58702 1.45294 154 50.0000 16.6667 0.00000 10.5768 7.18063 1.68865 155 66.6667 16.6667 0.00000 18.2502 11.1371 2.04822 156 83.3333 16.6667 0.00000 28.8619 16.6085 2.54546 157 100.000 16.6667 0.00000 42.6676 23.7268 3.19237 158 100.000 66.6667 33.3333 57.6857 51.1617 16.2081 159 100.000 83.3333 33.3333 66.8875 69.5626 19.2754 160 50.0000 33.3333 0.00000 12.9556 11.9377 2.48161 161 66.6667 33.3333 0.00000 20.6291 15.8941 2.84118 162 83.3333 33.3333 0.00000 31.2408 21.3656 3.33842 163 100.000 33.3333 0.00000 45.0464 28.4838 3.98533 164 33.3333 33.3333 0.00000 7.92535 9.34406 2.24590 165 33.3333 50.0000 0.00000 12.2873 18.0666 3.69988 166 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 167 66.6667 50.0000 0.00000 24.9910 24.6167 4.29515 168 83.3333 50.0000 0.00000 35.6027 30.0881 4.79240 169 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 170 100.000 100.000 16.6667 77.6581 93.0217 16.9414 171 33.3333 66.6667 0.00000 18.9412 31.3726 5.91788 172 50.0000 66.6667 0.00000 23.9714 33.9663 6.15359 173 66.6667 66.6667 0.00000 31.6449 37.9227 6.51315 174 83.3333 66.6667 0.00000 42.2566 43.3942 7.01040 175 100.000 66.6667 0.00000 56.0623 50.5124 7.65731 176 100.000 83.3333 0.00000 65.2640 68.9133 10.7246 177 50.0000 83.3333 0.00000 33.1732 52.3672 9.22086 178 66.6667 83.3333 0.00000 40.8467 56.3236 9.58042 179 4.16667 0.00000 0.00000 1.13178 1.06794 1.00617 180 6.94444 6.94444 6.94444 1.55687 1.58583 1.63816 181 16.6667 83.3333 0.00000 25.3996 48.3591 8.85660 182 16.6667 100.000 0.00000 37.3709 72.2985 12.8471 183 33.3333 100.000 0.00000 40.1143 73.7129 12.9756 184 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 185 66.6667 100.000 0.00000 52.8180 80.2630 13.5709 186 83.3333 100.000 0.00000 63.4297 85.7344 14.0682 187 100.000 100.000 0.00000 77.2354 92.8527 14.7151 188 100.000 100.000 50.0000 81.0605 94.3825 34.8625 189 98.6111 98.6111 98.6111 92.1605 96.9008 105.468 190 20.8333 0.00000 0.00000 2.46012 1.75284 1.06842 191 66.6667 0.00000 16.6667 17.8355 9.63156 3.99545 192 83.3333 0.00000 16.6667 28.4472 15.1030 4.49270 193 100.000 0.00000 16.6667 42.2529 22.2212 5.13961 194 100.000 33.3333 50.0000 48.8716 30.0136 24.1328 195 33.3333 16.6667 16.6667 5.96919 4.75607 3.67932 196 50.0000 16.6667 16.6667 10.9994 7.34968 3.91503 197 66.6667 16.6667 16.6667 18.6729 11.3062 4.27459 198 83.3333 16.6667 16.6667 29.2846 16.7776 4.77184 199 100.000 16.6667 16.6667 43.0903 23.8958 5.41875 200 8.33333 0.00000 0.00000 1.31146 1.16059 1.01459 201 11.1111 11.1111 11.1111 2.11371 2.17162 2.27628 202 0.00000 33.3333 16.6667 4.63896 7.60069 4.29847 203 50.0000 33.3333 16.6667 13.3783 12.1067 4.70798 204 66.6667 33.3333 16.6667 21.0518 16.0632 5.06755 205 83.3333 33.3333 16.6667 31.6635 21.5346 5.56479 206 100.000 33.3333 16.6667 45.4691 28.6529 6.21170 207 100.000 83.3333 16.6667 65.6867 69.0824 12.9510 208 33.3333 33.3333 16.6667 8.34805 9.51311 4.47227 209 33.3333 50.0000 16.6667 12.7099 18.2357 5.92625 210 50.0000 50.0000 16.6667 17.7402 20.8293 6.16196 211 66.6667 50.0000 16.6667 25.4137 24.7858 6.52153 212 83.3333 50.0000 16.6667 36.0254 30.2572 7.01877 213 100.000 50.0000 16.6667 49.8310 37.3754 7.66568 214 16.6667 50.0000 16.6667 9.96660 16.8212 5.79771 215 16.6667 66.6667 16.6667 16.6205 30.1272 8.01570 216 33.3333 66.6667 16.6667 19.3639 31.5417 8.14425 217 50.0000 66.6667 16.6667 24.3941 34.1353 8.37996 218 66.6667 66.6667 16.6667 32.0676 38.0918 8.73953 219 83.3333 66.6667 16.6667 42.6793 43.5632 9.23677 220 100.000 66.6667 16.6667 56.4850 50.6815 9.88368 221 16.6667 33.3333 16.6667 5.60470 8.09863 4.34373 222 16.6667 83.3333 16.6667 25.8223 48.5281 11.0830 223 33.3333 83.3333 16.6667 28.5656 49.9426 11.2115 224 50.0000 83.3333 16.6667 33.5959 52.5362 11.4472 225 66.6667 83.3333 16.6667 41.2694 56.4927 11.8068 226 83.3333 83.3333 16.6667 51.8810 61.9641 12.3040 227 0.00000 62.5000 0.00000 13.3391 25.6747 5.11306 228 0.00000 100.000 16.6667 36.8279 71.9696 15.0282 229 16.6667 100.000 16.6667 37.7936 72.4675 15.0735 230 33.3333 100.000 16.6667 40.5370 73.8820 15.2020 231 50.0000 100.000 16.6667 45.5672 76.4756 15.4377 232 66.6667 100.000 16.6667 53.2407 80.4321 15.7973 233 83.3333 100.000 33.3333 65.0531 86.3837 22.6190 234 100.000 100.000 33.3333 78.8588 93.5020 23.2659 235 16.6667 0.00000 16.6667 2.38843 1.66699 3.27163 236 33.3333 0.00000 16.6667 5.13178 3.08147 3.40018 237 50.0000 0.00000 16.6667 10.1620 5.67508 3.63588 238 66.6667 0.00000 33.3333 19.0363 10.1118 10.3199 239 83.3333 0.00000 33.3333 29.6479 15.5832 10.8172 240 100.000 0.00000 33.3333 43.4536 22.7014 11.4641 241 100.000 0.00000 66.6667 49.0140 24.9252 40.7510 242 0.00000 16.6667 16.6667 2.26011 2.84365 3.50552 243 33.3333 16.6667 33.3333 7.16994 5.23629 10.0038 244 50.0000 16.6667 33.3333 12.2002 7.82991 10.2395 245 66.6667 16.6667 33.3333 19.8737 11.7864 10.5991 246 83.3333 16.6667 33.3333 30.4854 17.2578 11.0963 247 100.000 16.6667 33.3333 44.2910 24.3760 11.7432 248 100.000 16.6667 50.0000 46.4927 25.2566 23.3398 249 50.0000 0.00000 33.3333 11.3628 6.15530 9.96035 250 50.0000 33.3333 33.3333 14.5790 12.5869 11.0324 251 66.6667 33.3333 33.3333 22.2525 16.5434 11.3920 252 83.3333 33.3333 33.3333 32.8642 22.0148 11.8893 253 100.000 33.3333 33.3333 46.6699 29.1331 12.5362 254 100.000 50.0000 33.3333 51.0318 37.8557 13.9901 255 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 256 33.3333 50.0000 33.3333 13.9107 18.7159 12.2507 257 50.0000 50.0000 33.3333 18.9409 21.3095 12.4864 258 66.6667 50.0000 33.3333 26.6144 25.2660 12.8460 259 83.3333 50.0000 33.3333 37.2261 30.7374 13.3432 260 16.6667 33.3333 33.3333 6.80544 8.57885 10.6682 261 16.6667 50.0000 33.3333 11.1673 17.3014 12.1222 262 16.6667 66.6667 33.3333 17.8213 30.6074 14.3402 263 33.3333 66.6667 33.3333 20.5646 32.0219 14.4687 264 50.0000 66.6667 33.3333 25.5949 34.6155 14.7044 265 66.6667 66.6667 33.3333 33.2684 38.5720 15.0640 266 83.3333 66.6667 33.3333 43.8800 44.0434 15.5612 267 16.6667 50.0000 0.00000 9.54390 16.6522 3.57133 268 16.6667 66.6667 0.00000 16.1978 29.9582 5.78933 269 16.6667 83.3333 33.3333 27.0230 49.0083 17.4074 270 33.3333 83.3333 33.3333 29.7664 50.4228 17.5360 271 50.0000 83.3333 33.3333 34.7966 53.0164 17.7717 272 66.6667 83.3333 33.3333 42.4701 56.9729 18.1313 273 66.6667 100.000 33.3333 54.4415 80.9123 22.1217 274 0.00000 83.3333 33.3333 26.0573 48.5104 17.3622 275 0.00000 100.000 33.3333 38.0287 72.4498 21.3527 276 16.6667 100.000 33.3333 38.9944 72.9477 21.3979 277 33.3333 100.000 33.3333 41.7377 74.3622 21.5265 278 50.0000 100.000 33.3333 46.7680 76.9558 21.7622 279 100.000 100.000 100.000 95.1065 100.000 108.844 280 33.3333 83.3333 0.00000 28.1429 49.7736 8.98515 281 83.3333 83.3333 0.00000 51.4583 61.7951 10.0777 282 83.3333 83.3333 33.3333 53.0818 62.4443 18.6285 283 16.6667 0.00000 33.3333 3.58917 2.14721 9.59609 284 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 285 66.6667 0.00000 50.0000 21.2380 10.9923 21.9165 286 83.3333 0.00000 50.0000 31.8496 16.4637 22.4138 287 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 288 33.3333 0.00000 33.3333 6.33252 3.56169 9.72464 289 33.3333 0.00000 50.0000 8.53423 4.44223 21.3213 290 33.3333 16.6667 50.0000 9.37165 6.11684 21.6004 291 50.0000 16.6667 50.0000 14.4019 8.71045 21.8361 292 66.6667 16.6667 50.0000 22.0754 12.6669 22.1957 293 83.3333 16.6667 50.0000 32.6871 18.1383 22.6929 294 83.3333 83.3333 50.0000 55.2835 63.3249 30.2251 295 16.6667 16.6667 0.00000 2.80315 3.17254 1.32439 296 16.6667 33.3333 0.00000 5.18200 7.92957 2.11735 297 33.3333 33.3333 50.0000 11.7505 10.8739 22.3934 298 50.0000 33.3333 50.0000 16.7808 13.4675 22.6291 299 66.6667 33.3333 50.0000 24.4542 17.4240 22.9886 300 83.3333 33.3333 50.0000 35.0659 22.8954 23.4859 301 0.00000 33.3333 33.3333 5.83971 8.08091 10.6229 302 0.00000 33.3333 50.0000 8.04142 8.96146 22.2196 303 16.6667 33.3333 50.0000 9.00715 9.45939 22.2648 304 33.3333 50.0000 50.0000 16.1124 19.5965 23.8473 305 66.6667 50.0000 50.0000 28.8161 26.1465 24.4426 306 83.3333 50.0000 50.0000 39.4278 31.6180 24.9399 307 83.3333 66.6667 50.0000 46.0818 44.9240 27.1579 308 16.6667 50.0000 50.0000 13.3691 18.1820 23.7188 309 16.6667 66.6667 50.0000 20.0230 31.4880 25.9368 310 33.3333 66.6667 50.0000 22.7663 32.9025 26.0653 311 50.0000 66.6667 50.0000 27.7966 35.4961 26.3011 312 66.6667 66.6667 50.0000 35.4701 39.4526 26.6606 313 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 314 0.00000 66.6667 50.0000 19.0573 30.9901 25.8915 315 0.00000 83.3333 50.0000 28.2590 49.3910 28.9588 316 16.6667 83.3333 50.0000 29.2247 49.8889 29.0041 317 33.3333 83.3333 50.0000 31.9681 51.3034 29.1326 318 50.0000 83.3333 50.0000 36.9983 53.8970 29.3683 319 66.6667 83.3333 50.0000 44.6718 57.8535 29.7279 320 0.00000 50.0000 33.3333 10.2016 16.8035 12.0769 321 0.00000 66.6667 33.3333 16.8555 30.1095 14.2949 322 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 323 16.6667 100.000 50.0000 41.1961 73.8283 32.9946 324 33.3333 100.000 50.0000 43.9394 75.2428 33.1231 325 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 326 66.6667 100.000 50.0000 56.6432 81.7928 33.7184 327 83.3333 100.000 50.0000 67.2549 87.2643 34.2156 328 16.6667 0.00000 50.0000 5.79088 3.02775 21.1927 329 16.6667 0.00000 66.6667 9.14952 4.37100 38.8830 330 33.3333 0.00000 66.6667 11.8929 5.78548 39.0116 331 50.0000 0.00000 66.6667 16.9231 8.37909 39.2473 332 66.6667 0.00000 66.6667 24.5966 12.3356 39.6068 333 83.3333 0.00000 66.6667 35.2083 17.8070 40.1041 334 16.6667 16.6667 33.3333 4.42659 3.82181 9.87523 335 16.6667 16.6667 50.0000 6.62830 4.70235 21.4719 336 16.6667 16.6667 66.6667 9.98694 6.04560 39.1621 337 33.3333 16.6667 66.6667 12.7303 7.46008 39.2907 338 50.0000 16.6667 66.6667 17.7605 10.0537 39.5264 339 66.6667 16.6667 66.6667 25.4340 14.0102 39.8860 340 83.3333 16.6667 66.6667 36.0457 19.4816 40.3832 341 83.3333 33.3333 66.6667 38.4246 24.2386 41.1762 342 83.3333 33.3333 83.3333 43.0692 26.0962 65.6401 343 83.3333 66.6667 100.000 60.1277 50.5415 101.139 344 33.3333 33.3333 66.6667 15.1091 12.2171 40.0837 345 50.0000 33.3333 66.6667 20.1394 14.8107 40.3194 346 66.6667 33.3333 66.6667 27.8129 18.7672 40.6789 347 66.6667 33.3333 100.000 38.5002 23.0415 96.9701 348 8.33333 41.6667 58.3333 11.7912 13.5562 30.9100 349 0.00000 50.0000 66.6667 15.7620 19.0273 41.3638 350 16.6667 50.0000 66.6667 16.7277 19.5252 41.4091 351 33.3333 50.0000 66.6667 19.4710 20.9397 41.5376 352 50.0000 50.0000 66.6667 24.5013 23.5333 41.7733 353 66.6667 50.0000 66.6667 32.1748 27.4898 42.1329 354 8.33333 41.6667 8.33333 6.57623 11.4706 3.44212 355 8.33333 58.3333 58.3333 17.2645 24.5012 32.7344 356 0.00000 66.6667 66.6667 22.4159 32.3333 43.5818 357 16.6667 66.6667 66.6667 23.3816 32.8312 43.6271 358 33.3333 66.6667 66.6667 26.1250 34.2457 43.7556 359 50.0000 66.6667 66.6667 31.1552 36.8393 43.9913 360 58.3333 75.0000 75.0000 41.0642 48.0333 56.9240 361 8.33333 41.6667 41.6667 9.02853 12.4513 16.3587 362 8.33333 58.3333 41.6667 14.5018 23.3963 18.1831 363 16.6667 83.3333 66.6667 32.5834 51.2321 46.6943 364 33.3333 83.3333 66.6667 35.3267 52.6466 46.8229 365 50.0000 83.3333 66.6667 40.3570 55.2402 47.0586 366 50.0000 83.3333 83.3333 45.0016 57.0978 71.5225 367 8.33333 91.6667 25.0000 31.2812 59.6371 15.4904 368 8.33333 91.6667 58.3333 35.7232 61.4136 38.8874 369 0.00000 100.000 66.6667 43.5890 74.6736 50.6396 370 16.6667 100.000 66.6667 44.5547 75.1715 50.6848 371 33.3333 100.000 66.6667 47.2981 76.5860 50.8134 372 50.0000 100.000 66.6667 52.3283 79.1796 51.0491 373 66.6667 100.000 66.6667 60.0018 83.1361 51.4087 374 83.3333 100.000 66.6667 70.6135 88.6075 51.9059 375 100.000 100.000 66.6667 84.4192 95.7257 52.5528 376 25.0000 8.33333 58.3333 8.69866 4.75131 29.3732 377 33.3333 0.00000 83.3333 16.5375 7.64305 63.4755 378 50.0000 0.00000 83.3333 21.5678 10.2367 63.7112 379 66.6667 0.00000 83.3333 29.2413 14.1931 64.0707 380 83.3333 0.00000 83.3333 39.8529 19.6646 64.5680 381 91.6667 8.33333 91.6667 49.4519 24.6861 79.9211 382 0.00000 16.6667 83.3333 13.6659 7.40523 63.5808 383 16.6667 16.6667 83.3333 14.6316 7.90317 63.6261 384 33.3333 16.6667 83.3333 17.3750 9.31765 63.7546 385 50.0000 16.6667 83.3333 22.4052 11.9113 63.9903 386 66.6667 16.6667 83.3333 30.0787 15.8677 64.3499 387 83.3333 16.6667 83.3333 40.6904 21.3392 64.8471 388 83.3333 83.3333 100.000 69.3294 68.9424 104.207 389 16.6667 33.3333 66.6667 12.3658 10.8026 39.9551 390 16.6667 33.3333 83.3333 17.0105 12.6602 64.4190 391 33.3333 33.3333 83.3333 19.7538 14.0747 64.5476 392 50.0000 33.3333 83.3333 24.7841 16.6683 64.7833 393 66.6667 33.3333 83.3333 32.4575 20.6248 65.1428 394 75.0000 41.6667 91.6667 42.1316 28.1222 80.9699 395 8.33333 25.0000 58.3333 8.46404 6.90283 29.8009 396 8.33333 25.0000 75.0000 12.4508 8.49727 50.7994 397 16.6667 50.0000 83.3333 21.3724 21.3828 65.8730 398 33.3333 50.0000 83.3333 24.1157 22.7973 66.0015 399 50.0000 50.0000 83.3333 29.1460 25.3909 66.2373 400 66.6667 50.0000 83.3333 36.8194 29.3474 66.5968 401 66.6667 66.6667 100.000 49.5160 45.0701 100.642 402 8.33333 58.3333 75.0000 21.2512 26.0956 53.7329 403 0.00000 66.6667 83.3333 27.0606 34.1909 68.0457 404 16.6667 66.6667 83.3333 28.0263 34.6888 68.0910 405 33.3333 66.6667 83.3333 30.7696 36.1033 68.2195 406 50.0000 66.6667 83.3333 35.7999 38.6969 68.4553 407 66.6667 66.6667 83.3333 43.4734 42.6534 68.8148 408 66.6667 83.3333 83.3333 52.6751 61.0543 71.8821 409 8.33333 75.0000 75.0000 29.1495 41.8900 56.3657 410 0.00000 83.3333 83.3333 36.2623 52.5918 71.1130 411 16.6667 83.3333 83.3333 37.2280 53.0897 71.1583 412 33.3333 83.3333 83.3333 39.9714 54.5042 71.2868 413 8.33333 75.0000 58.3333 25.1627 40.2956 35.3672 414 0.00000 83.3333 66.6667 31.6176 50.7342 46.6491 415 8.33333 91.6667 75.0000 39.7100 63.0080 59.8859 416 0.00000 100.000 83.3333 48.2337 76.5312 75.1035 417 16.6667 100.000 83.3333 49.1994 77.0291 75.1488 418 33.3333 100.000 83.3333 51.9427 78.4436 75.2773 419 50.0000 100.000 83.3333 56.9730 81.0372 75.5130 420 66.6667 100.000 83.3333 64.6465 84.9937 75.8726 421 100.000 100.000 83.3333 89.0638 97.5833 77.0167 422 16.6667 0.00000 83.3333 13.7942 6.22857 63.3469 423 16.6667 0.00000 100.000 19.8368 8.64525 95.1742 424 33.3333 0.00000 100.000 22.5802 10.0597 95.3028 425 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 426 66.6667 0.00000 100.000 35.2839 16.6098 95.8980 427 83.3333 0.00000 100.000 45.8956 22.0812 96.3953 428 100.000 0.00000 100.000 59.7013 29.1995 97.0422 429 100.000 83.3333 100.000 83.1351 76.0606 104.854 430 16.6667 16.6667 100.000 20.6743 10.3198 95.4534 431 33.3333 16.6667 100.000 23.4176 11.7343 95.5819 432 50.0000 16.6667 100.000 28.4479 14.3279 95.8176 433 66.6667 16.6667 100.000 36.1213 18.2844 96.1772 434 66.6667 83.3333 100.000 58.7178 63.4710 103.709 435 0.00000 33.3333 83.3333 16.0447 12.1623 64.3738 436 0.00000 33.3333 100.000 22.0874 14.5790 96.2011 437 16.6667 33.3333 100.000 23.0531 15.0769 96.2463 438 33.3333 33.3333 100.000 25.7965 16.4914 96.3749 439 50.0000 33.3333 100.000 30.8267 19.0850 96.6106 440 0.00000 33.3333 66.6667 11.4001 10.3047 39.9098 441 8.33333 41.6667 75.0000 15.7779 15.1507 51.9085 442 8.33333 41.6667 91.6667 21.1084 17.2825 79.9848 443 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 444 16.6667 50.0000 100.000 27.4150 23.7995 97.7003 445 33.3333 50.0000 100.000 30.1584 25.2140 97.8288 446 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 447 50.0000 66.6667 100.000 41.8426 41.1136 100.283 448 0.00000 50.0000 83.3333 20.4066 20.8849 65.8277 449 8.33333 58.3333 91.6667 26.5817 28.2275 81.8093 450 0.00000 66.6667 100.000 33.1032 36.6075 99.8730 451 16.6667 100.000 100.000 55.2420 79.4458 106.976 452 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 453 83.3333 16.6667 100.000 46.7330 23.7558 96.6744 454 83.3333 33.3333 100.000 49.1119 28.5129 97.4674 455 83.3333 50.0000 100.000 53.4738 37.2355 98.9214 456 0.00000 16.6667 100.000 19.7085 9.82192 95.4081 457 16.6667 66.6667 100.000 34.0689 37.1055 99.9183 458 16.6667 83.3333 100.000 43.2707 55.5064 102.986 459 33.3333 83.3333 100.000 46.0140 56.9209 103.114 460 50.0000 83.3333 100.000 51.0443 59.5145 103.350 461 8.33333 25.0000 41.6667 5.70137 5.79793 15.2496 462 8.33333 25.0000 91.6667 17.7813 10.6291 78.8758 463 8.33333 75.0000 91.6667 34.4800 44.0219 84.4421 464 0.00000 83.3333 100.000 42.3050 55.0085 102.940 465 0.00000 100.000 100.000 54.2763 78.9478 106.931 466 33.3333 100.000 100.000 57.9854 80.8602 107.105 467 50.0000 100.000 100.000 63.0157 83.4539 107.340 468 66.6667 100.000 100.000 70.6891 87.4103 107.700 469 83.3333 100.000 100.000 81.3008 92.8817 108.197 470 100.000 100.000 100.000 95.1065 100.000 108.844 471 41.6667 8.33333 8.33333 7.32065 4.64400 2.08519 472 58.3333 8.33333 8.33333 13.6325 7.89843 2.38095 473 75.0000 8.33333 8.33333 22.7410 12.5948 2.80776 474 91.6667 8.33333 8.33333 34.9197 18.8741 3.37843 475 91.6667 41.6667 25.0000 40.5509 28.8986 9.06878 476 91.6667 58.3333 25.0000 46.0242 39.8436 10.8932 477 41.6667 25.0000 8.33333 8.85185 7.70598 2.59559 478 58.3333 25.0000 8.33333 15.1637 10.9604 2.89136 479 75.0000 25.0000 8.33333 24.2722 15.6568 3.31816 480 91.6667 25.0000 8.33333 36.4509 21.9361 3.88883 481 91.6667 75.0000 25.0000 53.9225 55.6380 13.5260 482 91.6667 91.6667 25.0000 64.4830 76.7560 17.0462 483 41.6667 41.6667 8.33333 12.1790 14.3594 3.70466 484 58.3333 41.6667 8.33333 18.4909 17.6138 4.00042 485 75.0000 41.6667 8.33333 27.5994 22.3102 4.42723 486 91.6667 41.6667 8.33333 39.7780 28.5895 4.99790 487 25.0000 25.0000 8.33333 5.01488 5.72763 2.41580 488 25.0000 41.6667 8.33333 8.34205 12.3810 3.52486 489 41.6667 58.3333 8.33333 17.6523 25.3044 5.52909 490 58.3333 58.3333 8.33333 23.9642 28.5588 5.82485 491 75.0000 58.3333 8.33333 33.0727 33.2552 6.25166 492 91.6667 58.3333 8.33333 45.2513 39.5345 6.82233 493 91.6667 75.0000 8.33333 53.1496 55.3289 9.45512 494 91.6667 75.0000 75.0000 62.3513 59.0090 57.9215 495 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 496 58.3333 75.0000 8.33333 31.8624 44.3532 8.45764 497 75.0000 75.0000 8.33333 40.9710 49.0495 8.88445 498 25.0000 58.3333 8.33333 13.8153 23.3260 5.34929 499 25.0000 75.0000 8.33333 21.7136 39.1204 7.98208 500 25.0000 91.6667 8.33333 32.2741 60.2384 11.5023 501 41.6667 91.6667 8.33333 36.1111 62.2168 11.6821 502 58.3333 91.6667 8.33333 42.4229 65.4712 11.9778 503 75.0000 91.6667 8.33333 51.5314 70.1676 12.4046 504 91.6667 91.6667 8.33333 63.7101 76.4469 12.9753 505 8.33333 8.33333 25.0000 2.49075 2.06429 5.89353 506 25.0000 8.33333 25.0000 4.25657 2.97476 5.97628 507 41.6667 8.33333 25.0000 8.09354 4.95311 6.15607 508 58.3333 8.33333 25.0000 14.4054 8.20754 6.45183 509 75.0000 8.33333 25.0000 23.5139 12.9039 6.87864 510 91.6667 8.33333 25.0000 35.6926 19.1833 7.44931 511 91.6667 25.0000 41.6667 38.9032 22.9169 16.8054 512 41.6667 25.0000 25.0000 9.62474 8.01509 6.66648 513 58.3333 25.0000 25.0000 15.9366 11.2695 6.96224 514 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 515 91.6667 25.0000 25.0000 37.2238 22.2452 7.95972 516 8.33333 25.0000 25.0000 4.02195 5.12627 6.40394 517 8.33333 41.6667 25.0000 7.34912 11.7797 7.51300 518 41.6667 41.6667 25.0000 12.9519 14.6685 7.77554 519 58.3333 41.6667 25.0000 19.2638 17.9229 8.07130 520 75.0000 41.6667 25.0000 28.3723 22.6193 8.49811 521 75.0000 58.3333 25.0000 33.8456 33.5643 10.3225 522 25.0000 41.6667 25.0000 9.11494 12.6901 7.59575 523 25.0000 58.3333 25.0000 14.5882 23.6351 9.42018 524 41.6667 58.3333 25.0000 18.4252 25.6135 9.59997 525 58.3333 58.3333 25.0000 24.7370 28.8679 9.89574 526 75.0000 75.0000 41.6667 43.4233 50.0303 21.8010 527 91.6667 75.0000 41.6667 55.6019 56.3096 22.3717 528 8.33333 25.0000 8.33333 3.24906 4.81716 2.33305 529 8.33333 58.3333 25.0000 12.8224 22.7246 9.33744 530 8.33333 75.0000 25.0000 20.7207 38.5190 11.9702 531 58.3333 75.0000 25.0000 32.6353 44.6623 12.5285 532 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 533 75.0000 91.6667 25.0000 52.3043 70.4767 16.4755 534 8.33333 75.0000 41.6667 22.4001 39.1907 20.8159 535 8.33333 91.6667 41.6667 32.9606 60.3087 24.3361 536 8.33333 91.6667 91.6667 45.0405 65.1399 87.9622 537 100.000 100.000 100.000 95.1065 100.000 108.844 538 91.6667 41.6667 41.6667 42.2303 29.5703 17.9145 539 91.6667 58.3333 41.6667 47.7036 40.5153 19.7389 540 91.6667 58.3333 75.0000 54.4530 43.2146 55.2887 541 91.6667 58.3333 91.6667 59.7835 45.3465 83.3650 542 100.000 66.6667 100.000 73.9334 57.6597 101.786 543 58.3333 8.33333 41.6667 16.0848 8.87920 15.2975 544 75.0000 8.33333 41.6667 25.1933 13.5756 15.7243 545 91.6667 8.33333 41.6667 37.3720 19.8549 16.2950 546 91.6667 8.33333 58.3333 40.1347 20.9598 30.8463 547 41.6667 8.33333 41.6667 9.77296 5.62477 15.0017 548 41.6667 25.0000 41.6667 11.3042 8.68675 15.5121 549 58.3333 25.0000 41.6667 17.6160 11.9412 15.8079 550 75.0000 25.0000 41.6667 26.7246 16.6376 16.2347 551 83.3333 50.0000 66.6667 42.7865 32.9612 42.6301 552 83.3333 50.0000 83.3333 47.4311 34.8188 67.0941 553 100.000 50.0000 83.3333 61.2368 41.9370 67.7410 554 58.3333 41.6667 41.6667 20.9432 18.5946 16.9170 555 75.0000 41.6667 41.6667 30.0517 23.2910 17.3438 556 75.0000 91.6667 58.3333 56.7464 72.2532 39.8725 557 25.0000 41.6667 41.6667 10.7944 13.3618 16.4414 558 25.0000 58.3333 41.6667 16.2676 24.3068 18.2658 559 41.6667 58.3333 41.6667 20.1046 26.2851 18.4456 560 58.3333 58.3333 41.6667 26.4165 29.5396 18.7414 561 75.0000 58.3333 41.6667 35.5250 34.2359 19.1682 562 83.3333 66.6667 66.6667 49.4404 46.2672 44.8481 563 83.3333 83.3333 66.6667 58.6421 64.6681 47.9154 564 25.0000 75.0000 41.6667 24.1659 40.1011 20.8986 565 41.6667 75.0000 41.6667 28.0029 42.0795 21.0784 566 41.6667 75.0000 58.3333 30.7655 43.1844 35.6297 567 66.6667 83.3333 66.6667 48.0305 59.1967 47.4182 568 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 569 25.0000 91.6667 25.0000 33.0470 60.5475 15.5732 570 25.0000 91.6667 41.6667 34.7264 61.2192 24.4188 571 41.6667 91.6667 41.6667 38.5634 63.1975 24.5986 572 58.3333 91.6667 41.6667 44.8752 66.4520 24.8944 573 75.0000 91.6667 41.6667 53.9838 71.1483 25.3212 574 91.6667 91.6667 41.6667 66.1624 77.4277 25.8919 575 91.6667 91.6667 58.3333 68.9251 78.5326 40.4431 576 8.33333 8.33333 41.6667 4.17016 2.73595 14.7392 577 41.6667 8.33333 58.3333 12.5356 6.72967 29.5530 578 58.3333 8.33333 58.3333 18.8475 9.98410 29.8488 579 75.0000 8.33333 58.3333 27.9560 14.6805 30.2756 580 100.000 16.6667 66.6667 49.8514 26.5998 41.0301 581 100.000 16.6667 83.3333 54.4960 28.4574 65.4940 582 100.000 16.6667 100.000 60.5387 30.8741 97.3213 583 100.000 33.3333 100.000 62.9175 35.6311 98.1143 584 58.3333 25.0000 58.3333 20.3787 13.0461 30.3592 585 75.0000 25.0000 58.3333 29.4872 17.7424 30.7860 586 91.6667 25.0000 58.3333 41.6659 24.0218 31.3567 587 100.000 33.3333 66.6667 52.2302 31.3569 41.8231 588 100.000 33.3333 83.3333 56.8749 33.2144 66.2870 589 100.000 50.0000 100.000 67.2794 44.3537 99.5683 590 58.3333 41.6667 58.3333 23.7059 19.6995 31.4683 591 75.0000 41.6667 58.3333 32.8144 24.3959 31.8951 592 91.6667 41.6667 58.3333 44.9930 30.6752 32.4657 593 100.000 50.0000 66.6667 56.5921 40.0795 43.2771 594 100.000 66.6667 83.3333 67.8907 55.2430 69.9590 595 100.000 83.3333 83.3333 77.0925 73.6439 73.0262 596 75.0000 58.3333 58.3333 38.2876 35.3408 33.7195 597 91.6667 58.3333 58.3333 50.4663 41.6202 34.2902 598 100.000 66.6667 66.6667 63.2461 53.3855 45.4951 599 100.000 83.3333 66.6667 72.4478 71.7864 48.5623 600 58.3333 75.0000 41.6667 34.3148 45.3339 21.3742 601 58.3333 75.0000 58.3333 37.0774 46.4388 35.9255 602 75.0000 75.0000 58.3333 46.1859 51.1352 36.3523 603 91.6667 75.0000 58.3333 58.3646 57.4145 36.9230 604 41.6667 75.0000 25.0000 26.3234 41.4078 12.2328 605 41.6667 91.6667 25.0000 36.8839 62.5259 15.7530 606 41.6667 91.6667 58.3333 41.3260 64.3024 39.1499 607 58.3333 91.6667 58.3333 47.6379 67.5569 39.4457 608 91.6667 91.6667 75.0000 72.9118 80.1270 61.4417 609 8.33333 8.33333 58.3333 6.93284 3.84085 29.2905 610 8.33333 8.33333 75.0000 10.9196 5.43529 50.2890 611 25.0000 8.33333 75.0000 12.6854 6.34575 50.3718 612 41.6667 8.33333 75.0000 16.5224 8.32411 50.5516 613 58.3333 8.33333 75.0000 22.8343 11.5785 50.8473 614 75.0000 8.33333 75.0000 31.9428 16.2749 51.2741 615 91.6667 8.33333 75.0000 44.1214 22.5543 51.8448 616 100.000 0.00000 83.3333 53.6586 26.7828 65.2149 617 41.6667 25.0000 58.3333 14.0668 9.79164 30.0634 618 41.6667 25.0000 75.0000 18.0536 11.3861 51.0620 619 58.3333 25.0000 75.0000 24.3655 14.6405 51.3577 620 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 621 91.6667 25.0000 75.0000 45.6526 25.6162 52.3552 622 91.6667 41.6667 91.6667 54.3103 34.4015 81.5406 623 41.6667 41.6667 58.3333 17.3940 16.4450 31.1725 624 41.6667 41.6667 75.0000 21.3807 18.0395 52.1710 625 58.3333 41.6667 75.0000 27.6926 21.2939 52.4668 626 75.0000 41.6667 75.0000 36.8011 25.9903 52.8936 627 91.6667 41.6667 75.0000 48.9798 32.2696 53.4643 628 25.0000 8.33333 41.6667 5.93599 3.64642 14.8219 629 25.0000 25.0000 41.6667 7.46719 6.70839 15.3324 630 41.6667 58.3333 75.0000 26.8540 28.9845 53.9955 631 58.3333 58.3333 75.0000 33.1659 32.2389 54.2912 632 75.0000 58.3333 75.0000 42.2744 36.9353 54.7180 633 83.3333 66.6667 83.3333 54.0851 48.1248 69.3121 634 91.6667 75.0000 91.6667 67.6818 61.1408 85.9978 635 41.6667 58.3333 58.3333 22.8672 27.3900 32.9969 636 41.6667 75.0000 75.0000 34.7523 44.7788 56.6283 637 41.6667 75.0000 91.6667 40.0828 46.9107 84.7046 638 25.0000 58.3333 58.3333 19.0303 25.4117 32.8171 639 25.0000 75.0000 58.3333 26.9286 41.2060 35.4499 640 25.0000 91.6667 58.3333 37.4891 62.3241 38.9701 641 41.6667 91.6667 75.0000 45.3128 65.8969 60.1484 642 58.3333 91.6667 75.0000 51.6247 69.1513 60.4442 643 75.0000 91.6667 75.0000 60.7332 73.8477 60.8710 644 83.3333 100.000 83.3333 75.2582 90.4651 76.3698 645 8.33333 8.33333 91.6667 16.2501 7.56716 78.3654 646 25.0000 8.33333 91.6667 18.0159 8.47762 78.4481 647 41.6667 8.33333 91.6667 21.8529 10.4560 78.6279 648 58.3333 8.33333 91.6667 28.1648 13.7104 78.9237 649 75.0000 8.33333 91.6667 37.2733 18.4068 79.3505 650 25.0000 25.0000 58.3333 10.2299 7.81329 29.8836 651 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 652 25.0000 25.0000 91.6667 19.5471 11.5396 78.9585 653 41.6667 25.0000 91.6667 23.3841 13.5180 79.1383 654 58.3333 25.0000 91.6667 29.6960 16.7724 79.4341 655 75.0000 25.0000 91.6667 38.8045 21.4688 79.8609 656 91.6667 25.0000 91.6667 50.9831 27.7481 80.4315 657 25.0000 41.6667 75.0000 17.5438 16.0611 51.9912 658 25.0000 41.6667 91.6667 22.8743 18.1930 80.0676 659 41.6667 41.6667 91.6667 26.7112 20.1714 80.2474 660 58.3333 41.6667 91.6667 33.0231 23.4258 80.5431 661 66.6667 50.0000 100.000 42.8621 31.7640 98.4241 662 25.0000 41.6667 58.3333 13.5570 14.4667 30.9927 663 25.0000 58.3333 75.0000 23.0170 27.0061 53.8157 664 25.0000 58.3333 91.6667 28.3475 29.1380 81.8920 665 41.6667 58.3333 91.6667 32.1845 31.1163 82.0718 666 58.3333 58.3333 91.6667 38.4964 34.3708 82.3676 667 75.0000 58.3333 91.6667 47.6049 39.0671 82.7944 668 75.0000 75.0000 91.6667 55.5032 54.8615 85.4272 669 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 670 25.0000 75.0000 91.6667 36.2458 44.9323 84.5248 671 58.3333 75.0000 91.6667 46.3947 50.1651 85.0004 672 8.33333 58.3333 8.33333 12.0495 22.4155 5.26655 673 8.33333 75.0000 8.33333 19.9478 38.2099 7.89934 674 8.33333 91.6667 8.33333 30.5083 59.3279 11.4195 675 25.0000 91.6667 75.0000 41.4758 63.9185 59.9687 676 25.0000 91.6667 91.6667 46.8063 66.0504 88.0450 677 41.6667 91.6667 91.6667 50.6433 68.0287 88.2248 678 58.3333 91.6667 91.6667 56.9552 71.2832 88.5205 679 75.0000 91.6667 91.6667 66.0637 75.9795 88.9474 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -t5500 -b160 -gl -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/sRGB.ti3000644 000765 000000 00000030602 12237536425 016500 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" BEGIN_ARGYLL_COLPROF_ARGS -qh -as END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -w0.3127,0.3290 -gs -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/ti3/video.ti3000644 000765 000000 00000030020 12237536425 017003 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" BEGIN_ARGYLL_COLPROF_ARGS -qh -as END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -w0.3127,0.3290 -g2.2 -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/misc/tests/fakecgats.txt000644 000765 000000 00000000020 12027572512 020377 0ustar00svpwheel000000 000000 CC BEGIN_DATAdispcalGUI-1.7.1.6/misc/tests/junk.cal000644 000765 000000 00000000140 12027572512 017341 0ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/tests/junk.icc000644 000765 000000 00000000001 12027572512 017334 0ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/tests/junk.icm000644 000765 000000 00000000001 12027572512 017346 0ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/tests/junk.ti1000644 000765 000000 00000000001 12027572512 017273 0ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/tests/junk.ti2000644 000765 000000 00000000001 12027572512 017274 0ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/tests/junk.ti3000644 000765 000000 00000000001 12027572512 017275 0ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/py2exe/boot_common.py000644 000765 000000 00000007234 12025152312 020651 0ustar00svpwheel000000 000000 # Common py2exe boot script - executed for all target types. # When we are a windows_exe we have no console, and writing to # sys.stderr or sys.stdout will sooner or later raise an exception, # and tracebacks will be lost anyway (see explanation below). # # We assume that output to sys.stdout can go to the bitsink, but we # *want* to see tracebacks. So we redirect sys.stdout into an object # with a write method doing nothing, and sys.stderr into a logfile # having the same name as the executable, with '.log' appended. # # We only open the logfile if something is written to sys.stderr. # # If the logfile cannot be opened for *any* reason, we have no choice # but silently ignore the error. # # It remains to be seen if the 'a' flag for opening the logfile is a # good choice, or 'w' would be better. # # More elaborate explanation on why this is needed: # # The sys.stdout and sys.stderr that GUI programs get (from Windows) are # more than useless. This is not a py2exe problem, pythonw.exe behaves # in the same way. # # To demonstrate, run this program with pythonw.exe: # # import sys # sys.stderr = open("out.log", "w") # for i in range(10000): # print i # # and open the 'out.log' file. It contains this: # # Traceback (most recent call last): # File "out.py", line 6, in ? # print i # IOError: [Errno 9] Bad file descriptor # # In other words, after printing a certain number of bytes to the # system-supplied sys.stdout (or sys.stderr) an exception will be raised. # import sys if sys.frozen == "windows_exe": class Stderr(object): encoding = None softspace = 0 _file = None _error = None def write(self, text, alert=sys._MessageBox, fname=sys.executable + '.log'): if self._file is None and self._error is None: try: self._file = open(fname, 'a') except Exception, details: self._error = details import atexit atexit.register(alert, 0, "The logfile '%s' could not be opened:\n %s" % \ (fname, details), "Errors occurred") else: import atexit atexit.register(alert, 0, "See the logfile '%s' for details" % fname, "Errors occurred") if self._file is not None: self._file.write(text) self._file.flush() def flush(self): if self._file is not None: self._file.flush() def isatty(self): return False sys.stderr = Stderr() del sys._MessageBox del Stderr class Blackhole(object): encoding = None softspace = 0 def write(self, text): pass def flush(self): pass def isatty(self): return False sys.stdout = Blackhole() del Blackhole del sys # Disable linecache.getline() which is called by # traceback.extract_stack() when an exception occurs to try and read # the filenames embedded in the packaged python code. This is really # annoying on windows when the d: or e: on our build box refers to # someone elses removable or network drive so the getline() call # causes it to ask them to insert a disk in that drive. import linecache def fake_getline(filename, lineno, module_globals=None): return '' linecache.orig_getline = linecache.getline linecache.getline = fake_getline del linecache, fake_getline dispcalGUI-1.7.1.6/misc/obs-autopackage-deploy/dispcalGUI.spec000644 000765 000000 00000005366 12025152312 023753 0ustar00svpwheel000000 000000 # # spec file for package dispcalGUI # # Copyright (c) ${YEAR} SUSE LINUX Products GmbH, Nuernberg, Germany. # Copyright (c) ${YEAR} Florian Hoech # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # %define numpy_version 1.0 %define py_minversion ${PY_MINVERSION} %define py_maxversion ${PY_MAXVERSION} %define wx_minversion ${WX_MINVERSION} Summary: ${SUMMARY} License: GPL-3.0+ Group: Applications/Multimedia Name: ${PACKAGE} Version: ${VERSION} Release: 0 Source: http://%{name}.hoech.net/download/%{name}-%version.tar.gz Url: http://dispcalgui.hoech.net/ BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: autopackage-devel BuildRequires: python < 3.0 BuildRequires: python >= %{py_minversion} %if 0%{?mandriva_version} > 0 Requires: autopackage Requires: python < 3.0 Requires: python >= %{py_minversion} Requires: python-numpy >= %{numpy_version} Requires: wxPythonGTK >= %{wx_minversion} %else %if 0%{?suse_version} > 0 Requires: autopackage Requires: python < 3.0 Requires: python >= %{py_minversion} Requires: python-numpy >= %{numpy_version} Requires: python-wxGTK >= %{wx_minversion} %py_requires %else %if 0%{?fedora_version} > 0 Requires: autopackage Requires: numpy >= %{numpy_version} Requires: python < 3.0 Requires: python >= %{py_minversion} Requires: wxPython >= %{wx_minversion} %endif %endif %endif %description ${DESC} %prep %setup # Make files executable chmod +x misc/Argyll chmod +x scripts/* chmod +x util/*.sh # Convert line endings in LICENSE.txt python -c "f = open('LICENSE.txt', 'rb') d = f.read().replace('\r\n', '\n').replace('\r', '\n') f.close() f = open('LICENSE.txt', 'wb') f.write(d) f.close()" %build util/dist_autopackage.sh chmod +x dist/dispcalGUI-*.package %install mkdir -p %{buildroot}/var/lib/packages mv dist/dispcalGUI-*.package %{buildroot}/var/lib/packages mv dist/dispcalGUI-*.package.meta %{buildroot}/var/lib/packages %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) /var/lib/packages/dispcalGUI-*.package /var/lib/packages/dispcalGUI-*.package.meta %changelog dispcalGUI-1.7.1.6/misc/media/icon-install.bmp000644 000765 000000 00000015470 12025152312 020724 0ustar00svpwheel000000 000000 BM86(00  պuA;22222292222222k9e2e2e2e2e2e2k:e2e2e2e2e2e2e2j:e2e2e2e2e2e2l:pAu823;233232;3323324;e2f3f3e3f3f3k:f3g3e2f3e2f3f3k:f3f3e2f3f3e2l;f4e2i8ï՜9434<344343<4434434>>=>D=>>=>=D>>=>>=>D=o>o>n=o>o>sCo>o>n=o>n=o>o>sCo>o>n=o>o>n=tDo>n=o>o>o>66666>666666>6666666>6i6i6i6i6i6o>i6i6i6i6i6i6i6o>i6i6i6i6i6i6o>i6i6i6j6i678878@788787@8878878@7k8k8j7k8k8p?k8k8j7k8j7k8k8p?k8k8j7k8k8j7q@k8j7k8k8k889989A899898A9989989A8l9l9k8l9l9q@l9l9k8l9k8l9l9q@l9l9k8l9l9k8rAl9k8l9l9l999999A999999A9999999A9l9l9l9l9l9r@l9l9l9l9l9l9l9r@l9l9l9l9l9l9rAl9l9l9l9l9:;;:;C:;;:;:C;;:;;:;C:n;n;m:n;n;sBn;n;m:n;m:n;n;sBn;n;m:n;n;m:tCn;m:n;n;n;;<;;;C;;;=Reo^K;;;;;Cq;o;n??>CuFq>r?r?q>r?r?vEr?r?q>r?q>r?r?vEr?r?q>r?r?q>wFr?q>r?r?r??@@VҨyrFs@s@r?s@s@wFs@s@r?s@r?s@s@wFs@s@r?s@s@r?xGs@r?s@s@s@@@dxssOs@s@s@s@xGs@s@s@s@s@s@s@xGs@s@s@s@s@s@xGs@s@s@s@s@A`Ƶu{tuuKtAuBuBzIuBuBtAuBtAuBuCzIuBuBtAuBuBtAzIuBtAuBuBuBKݩ[~n|vwwvCwDwD{JwDvDvCwDvBvDwD{JwCwDvCwDwDvC|KwDvCwDwDwD[\`XuwwwywDwD|KwDwDwDwDwDwDwD|KwDwDwDwDwDwD|KwDwDwDwDwDyq|\sst@3eyxyIyF}LyFyFxEyFxEyFyF}LyFyFxEyFyFxE~MyFxEyFyFyFYt[[׈>(NSvNSNN~MN~MNNSNO~MNN~MTNMONN{{{{|{{{{{x[@HHśJR5 XOxEO{H{H{H{H{H{H{HO{H{H{H{H{H{HO{H{H{H{H{H|}}|}|}}|}|}}|}}|hR>>>Z4> k:}J}J|I}J|I}J}JP}J}J|I}J}J|IQ}J|I}J}J}J}~~~}~~~~~~~}~~}~uNtJ66l:2KuB}J~K}J~K~KQ~K~K~K~K~K~JR~K}J~K~KKz;5[22ȉzjE25Z'|ILLLRLLLLLLRLLLLLυ[74mɉ22v>PW$32? j7NNTNNMNNMUNMNNNG?D:|_v22Y 2225^+QZTTTTTH@22MDⴄ^M632232FVÆUL2222? tDVUVVVμp2222fSWJ322222pB\U_,32222NLVVVoཊ[XaP2233gWH222222c@WXs@:22225a.UXYuXYm862275yzYrC222222X=WYƁOG22222As@‘`‘`‘‘‘Ĕ‘‘‘‘‘‘Ĕ‘‘‘‘‘‘‘Ĕ‘‘‘`‘`‘`‘`}c2222E?귊l_d@222222N<\‘`Ď]Y'222222[\\ÒÒÒy\\[\\fJA2222]Nο][Y>222222C6U\[p?82222\]]\vēēēm\]]\]]ēbv432222|a]ZN;222222>6S\ēc̀MB222Ð]Ð]Ð]Ð]Ð]ŔdÐÐÐÐÐÐŔÐÐÐÐÐÐuÐ]ŔcÐ]Ð]Ð]Ð]Ð]Ð]ŔcÐ]aP222233vÐ]^D722222283OŔcÐ]ƋXR 22đ^đ_đ_đ^đ_ƕeđ^đ_đeđđđƕđđđ~đađ_đ^đ_ƕeđ^đ_đ_đ^đ_đ_ƕdđ_r862222?;rƕdX>622222232Rđ_đ^Đ_i75Œ_Œ`Œ`Œ_Œ`ȖfŒ_Œ`Œ`Œ_Œ`Œ_ȖfŒ`Œ`Œ_Œ`Œ`Œ_Œ`ǖfŒ_Œ`Œ`Œ_Œ`Œ`ȖeŒ`Œ`d222222TIÓjƒ`U8322222233yHē_Œ`Œ`}JǓ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`eIA222222r\Ǔ`Ǔ`Q3222222222jCĕ_Ǔ`Ǔ`ʘhʘhʘgʘgʘh˛lʘgʘgʘhʘgʘgʘf˛lʘgʘhʘgʘhʘgʘgʘh˛lʘgʘhʗhʘfʘhʘh˛kʘgʘhʘg}32222222uʘgʘgS3322222222]@eʘh̝nɕcɕcɕbɕc˘hɔbɕcȔbɔbȔbɕb˘hɔcɔbɕbȔcɕcɕbȔb˙hɕbȔbȔbȕbɔbȕb˘gɕcȕbɕbȔccR222222;8}ȕbȕb{J2222222222R=i۸ɕbɕbɕbɕb˙hɕbɕbɕbɕbɕbɕb˙hɕbɕbɕbɕbɕbɕbɕb˙hɕbɕbɕbɕbɕbɕb˙hɕbɕbɕbɕbu86222222KBkɕbȖbkD2222222222z˙gʖdʖcʖd̚jʖcʖdʖdʖcʖdʖc̚jʖdʖdʖcʖdʖdʖcʖd̚jʖcʖdʖdʖcʖdʖd̚iʖdʖdʖcʖdʖch22222222fTɖdʖdǘb^A22222277͚i˗d˗e̛j˗d˗e˗e˗d˗e˗d͛j˗e˗e˗d˗e˗e˗d˗e͚j˗d˗e˗e˗d˗e˗e͛j˗e˗e˗d˗e˗dœjKC22222222l˗e˗dĠgS=2277ܹРr͜k˗d˗e˗e˗d˗e˗d͛k˗e˗e˗d˗e˗e˗d˗e͛k˗d˗e˗e˗d˗e˗e͛j˗e˗e˗d˗e˗d˗e|2222222276˗d͜kémydispcalGUI-1.7.1.6/misc/media/install-py.bmp000644 000765 000000 00000350440 12025152312 020423 0ustar00svpwheel000000 000000 BM 6(  }Rf3f3f3f3f3f3f3f4f3g3f3f3f4f3f3f3f3f3f4f3f3g3f3f3f3g3f3f3f3f3f3f3f3f4g3f3f3f3f3~Sf4f3f3f4f3f3f3f3f3f3f4f3f3f4f3f3f3g3f3f3f3g4f3f3f3f3f4f3f3f3f3g3f4f3f3f3f3g3f3Uf3f3f3f3f3f3f3f3f3f3f4f3f3f3f3f3f3f4f4f3f3g3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3Uf3f3f3f3f3f3f3g3f3f4g3f3f3f3f3f3f3f3f3f3f3f3f3f3f4f3f3f3f3f3f3}Rf3f3f4f3f3f3f3g4f4f3g4f3f3f3f3f3f3f3f4g3g3f3g3g4f4f4f3f4f3f3f3f3f3f3f4g4f4f3f3~Sg3f4f3f3f3f3f3f4f3f3f3f3g4f3g3f3f3f3f3f3g4g3f3g3f4f3f4g3g3f3f3f3g3f3f3f3f4g4f3Tg3f3f4f4g3g3f3f3f3f4f4f3f3f3g3f3f3f3f3f3g3f3f4f3f3f4f4f4f4f3f3f3f3f4g3f3f4f4f3Uf3f4f3f3g3f3f3f3f3f3f3f4f3f4f3f3f3g3f3f3g3f3f3f3f4g3g4g4f3f4f3}Qf3f3f3f3g3f3g3f3f3f3f4g3f4f3g3f3f3f3f4f3g3g4f3f3f3g3f3f4g3f3f3f3g3f4g4f4f4g4f3~Sg4f3f3f3g3f3f4f3f3f3f4f3f3f4g3g3f3f4g3g3f3f3g3g3f3f3g3f3f4f3g3f4g3f3f3g4f3f3f3Tf3g3f4g3g3f3f3g3g3f4g3f3f4f3f3f3g3f4g3g3f4g3f3g3f3g4f3f3g4f3f4f4f3f3f3f3g3f3f3Ug3f3f3g3f3g4f4f3f4f3f3f3f3g3g3f3f4f4f3g4f3f3f3f4g3f3g3g4g4f3f4~Qg3f4f3g4f3f3g3g4f4f4f4f4f3f3f4g3f4g4f4g3f3f4f4f4f3f4f3g4f3f3g3f4f4g4g3f3f4f3g4Tf3g4f4g4f4f4f3f3g3g3g4g3f4g4f3g3f4g4g3f3g4f3f4f3g3g3g3g3f3f3f3g4g4f3f3g4f3g3g4Ug3f3g3g3f3f3g4f3f3f3f4g3f3f3f4g3g3f3f3f3f3f3g4f3f4f3g3f3f3f4f4f4f4f4f3g3f3f3f3Ug4g3f3f4g4g3g4f3g4g4g3g3f4f3g3f3f3f3f4f3f3f4f3g4g3g4g3f4g4f3f4~Qf3f3f4g4g3f4g3f3f3g4g4g3f4f3g4f4f3f4g3f4g3f4f3g3g3g3f4f3f4g4g3g3f4g4g3f4g4f3f3~Sg3g3g3f3g4f3f3g4g4g3f3g3f3f3g4f3g4g3f4f3g3f3f3f3g4g4g4g3f4g4g3f3g4f4g4f3g3f4f3Ug4g3f3f4f3g4g4g3g3f4g4g4f4g4g3g4f4g3g4g4f4f4g4f4g3g4g3g3g3f4f3f4g4g3f3f4f4f3f3Uf4g3f4g3f3g3f4g3g3g3g3f4g4g4f4g3f4f3f4f3g3g3f3g3g3g3f3g4g3f3f4}Qf4g3g3f4f3g3f4f4g4g3g4f3f3g4g3g3f4g3g3g4g4g4f4f4g3f3g4f3g4g3g4f3g3f3g4g4f4f4f3}Sg3f3f3g4g3f3g4g3g4f4g4g4g4g3g3f3f4g3f3g3f4g4g4g4g3g4f3g4f4g3f4f3f4g3g3g4g4g4g4Ug3g3g4g3g3g4g4g4g4g3f4g4g4f4f4g4e3d3e3d2e3g3f4g4f4f3g4g3f4f3f3g3f4g3g4f3f4g4g3Uf4f4g4g4g4g4g4g3g3g4g4g3g4f4g4g4g4g4f4f4g4f4g4f3g3g3g4f4f4g4f3}Rg3g3f3g3f4g4g3g4g3f3f4g4f4f4f4g4f3g4g4f4g4f4g4g4g4g4f4f4g4g4g4g4g4g3g4f4g4g3g4~Sf3g4g4f4f3g4f4f3g4g4f4g3g3f4g3f4g3g4g4g4g3g4g3g4f4f4g4f3f4g3g4f3g3g3g3g4f4g4g4~Tg4f4g4g4g4g3f3g3f4g3g4f3f3e3b1_0[.Z.Z-Z.\.^0a1d3f3g4g3g3f3g3f4g4g4g4g4f4g4e3d2yQa1`1a0a1a0b0d2e3g4f4g3g4e3c2a0_0^0^0_0_/_0a1d3e3f4g3g3g4f4g4f3}Qg4g4g4g4g4g4f3g3g4f4g3g3g4g4g4g4g4g4g4f3f4g4g4g4g4g3g3g4g4g4g4g4g4g4f4f4g4g4g4~Rg3g4g4g3g4g4g4g4g4f3g3g4g4g3g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g3g4g4f4g4g4g4g4f4g4Sf4g4g4g4g3g4g4f4g4g4g3e3a1\.~U+tN(w\u[u[u[w\uN'}T)Z.a1e3f4g4f4g4g4g4g4g4f4g4f3c2^/oJW+X,X,X,X,Y,^/c2e3g3g4f4c2^/W,~T+}T*}T)|S*~T*W+[.a1e3g4g4g4g4g3g4g4}Qg4g4g4g4g4g4g4g4g4g3g4g3g4g4g4g4g4g4g4g4g4g4g4g4g4f4g4g4g4f4g4g4g4g4g4g4g4f4g4~Sg4g4g4g4g4f4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4Tg4g3g4g4g4g4g4g4g4g4e3_0V,bAøúv\}T*^/d2g4g4g4g4g4g4g4g4g4e3^0{ʰ{^0e3g4g4f3`0`_0d3g4g4g3g4g4f4g4}Qg4g5g4g4g4g4g4g4h4g4g4g4g4g5g4g5g4g4g4g4g4g4g4h4g4g4g4g4g5g4g4g4g4g4g4g5g4g4g4Sg4g4g4g4g4g4g4g4g4g4g4g4g4g5g4g4g4g4g4h4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4h4g4g4g4Tg4g4g4g4g4g4g4g4g4e3a1U+vyQ)^/d3g4g4g4g5g4h4g4g5d2[.÷z^}__}_z]ʼ\.d3g4g4e3^0iE䜃jrL'cBǻa@yQ)Y-a1e4g4g4g4g4g4g4g5}Qg5g5h4g4g5g4g5h4g4g5g4h4h5h4h4g4g4g4g4h5g4g4h4h4g4h5h4g4g4g4g4g4h4h5g4h4g4g4h4~Rg4g5g5g4g4g4g4g4g4g4h4g4g4g4g4g4g5h4h4g4h4g4g4h5g4g4h5h4g4g5g4g4g5g4g4h4g5h4h4Tg4h4g5g4g5h4g4h4g4c2Y.iŹ~T*a1g4g4g4g4g4h4g4g4c2Z.xP(W-[/W,wP(]/e3h4h5e3_/_pK&sM'sN'yV4ȼU+^0d3f4g4g4g4g4h5g4g4}Qh4g4g4g4h4g4h4g4g4g4g4g4g4h4g4h4g5h4h4h5h5g5g4g4g4h5g4g5g4g4g4g4g4h5h4h5g5g5g4Rg4g4g4g5h4h5g4g4h5h4h4g4g4h4g4h4h4g4h4g4g4h4g4g4g4g5g4g4g5h5g4g4g4g4h5g4g5g4h4~Th4g4g5h4h4g5g4g4f5_0xQ)򮞏|^?pL&sM'pL&}^?w\\.e3g5g4g4h5g4h5g4d3\/zxP)W,[.W+xQ(זtS^0e3h4h4f4_1vTdBwO(xP(ʽ\0c2h4g4h4g5g5g4g4h5g4}Rg4g4g5g5h4g4g5g5h4g4g4g5g4g4g4h4h5h4h5h5g5h4g4h4h5h4g4g4h5h5g5h4h5h4h4h4g5g5g4~Sg4g5h5h4g4h5h5g4g4g4g5h4g4g4g5g5g5h4h5g4g5g5g4h4h4h4h5g4h4g5g5g5h4h4g4g4h4h4h5~Th5g4g5g5h4g4g4g4e4\.w\gLzQ*Z.]0^0]/[-|S*qR2V,c2h5g5g5g4h5h4h4e4`1a9yQ*|T+[5˽ׄX-a1f4g5h5h4c1Y.²ʈa9_1e4g4g4g4h5g5h5g4g4g5}Qh4h4h5g5h4g5g5g4h5h4h4h5g5g4g4h4h5h5g4g5h4h5h5g5g5h5h5h5h4h5g5g5h5g4g4h5g4h5g5Rh5g4h4h5h5g5g4g5h5h5h4h4h4h5h5h4g5h5h4h5h4h5h5h4h5g4g5h4h5g4g4h4g4g5h5g5g4g5g4Th4h4h5g5h5g4g4h5d3Y-t{R*_0f3h5h4g5f4a1V+y[?|T+a1h5h5g5g4g4g4g4f4b2\.gɃ^6\/c2h5h5h5h5d2\.xQ(lI%gE#jG$sM'X-a1f4g5h5g4g5h5h5h5h5h4}Rh5h5h5h4h4g5h5h4h5h4h5h5h5h5g4h5h5h5g4h4h5h5h5h5g5h4h5h4g5g5h4g5h5h5h5h4h4h5h5~Rh4h4h4h4h5h5h5h5g5h5h4h5g5g5h4h5g4h4h5g5h5g4h5h5g4h5g4h5h4g4h4g4h5h5g5h4h5g5g4Th4h5h4h5h5g5h5h5d2W,qR2Z-e4h4g4g5h5g4f3^/rL'|S*a2g5h5h4g4h5g5h5g4d3_/lHwP(yV4u[uS2rL'~T+^0d3g4h5h5h5b2Z.yɆ`8_0e4g4h4h4g5h5g4h5g4h4}Rh5h5h5h4h5h5h5g5h4h4h5g5g5h5g5h5h5g5h5h5h5g5h4g5h5h5h5h5h4h5h5h5h5h4g5h5h5h5h5~Rh5g5h4h5h5h5g5h5h5h5h5h5h5h4h5h5g5g5h5g4h5h5h5h5g5g5g5h5g5h5h5h5g5h5h5g5h5h5h5Th5h5h4h5g5h4h4h5e4Y.|^?Z.e4h5h5h5h5h5g5_0sM(~T*c2h5h4g4h4h5h5h5f4d2~a~_ba2f4h5h4g4`1wUpPxP([6˽Ϳ\/d2h5h5h5h4h5h5h5h5h5}Qh5h5h5h5h5h5h5h5h5g5h5h5h5h5h5h5h5h5h5h5h5h5h5h4h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5~Rh5h5h5h5h5h5h5h5h4h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5Sh5h5h5h5h5h5h5h5f4]/lOt{S*`1f4h5h5h5g4d3Y-rS2X-d3h5h5h5h5h5h5h5f4d3b~_b`1f4h5h5f4_0`vO(yQ)xP)|X5ʆZ.c3h5h5h5h5h5h5h5h5h5}Rh5h5h5h5h5h5i5i5h5h5h5h6h5h5h5h5h5h5h5h5h5h5h5h5i5h5h5h5h5h6h5h5i5h6h5h5i5h6h5~Rh5h5i5h6h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h6i5h5h5h5i5h5h5h5h5h6h5h5Sh5h5h5f4e4d3d3d3c2\/tN(hL|T*]/`1a2a2^0X.pK&¹aA\/f5h5h5h5h5i5h5i5h4f4b2qKzR*tS3rM(ka^0e5h5h5f4_0aZ5yR)xQ)ɽ\/d4i6h6h5i5h5h6i5i6h5}Rh5i5h5h5i5h6h5i6i5h5h5i5i5h5h5h6h5h6h6h6h5h5h6h5h5h5h5h5i5h6h5h5h5i5h5h5i6h6h5~Rh6h6h5h5i6h5h6i5h5h6h6i6h6h5h5h5i5i5h5h5i5h5h5h6h5h6h5h6i5i5h6i6h5h5h5h5h5h5h5Sh5h5f5a2\/X-V,V-V,{T*nI&kVupK&yP){S*zR*sM'hMsM(^0f4i5i6h6h5h5h5h5h5g5d4pKŻƺnI&]/e3h5h5h4b1V,ʼvT_1f4h5h5h5i5h5i5h5h5h5~Qi6h6i6i5h5i6h5h6h5h5h5i5i5i6h5h5h5h6h6i5i5i5i6h6i6h6h5h5h6h5i5h5h5h5i5i6h6h5i5}Rh5i6i5h6h5i5h6h6h5h5h6i6h6h6i6h5i5h6h5i5h5h5h5h5h5h5h5h6h5h5i5i5h5i5i6h5i5h5h5Si5g4b2nHü񨛎y]]0g5h5h5i5h5i6h6h6i6h6e4sLxU4jN׽]/e4i5h6g5b2nGkjNtZw\[6Y-a2g4i6h5i6h6i6i5h5i5i5~R~Q~Q~R~R}Q}R~R}Q}R~R~R~R~R~R~R~Q~R}R}Q~Q~R}Q}Q~Q}R}R}R~R~R}R~R~R~R}R~R}R~R}R}R}R~R}R}R}R}R}R~R~R}R}R~R~RS~S~R~RR~SSSS~R~RS~S~R~R~R~S~SR~RR~SSSS~SSSS}StLpoI|SUTUTUUUTU|RsLz[<|clHwO}RTUyPaɿw`?lIxO~UVUUUUVVUV}Qh6i5i6h6i5h5i6i6i5i5i5i6i6i6i5h6i6h5i5h6i5i5i6i6h6h6i6i6i6i6i6i6i6h6h5i6h5i5i5~Ri6h6i5h6i5i6i6i6i5i6i6h6i6i6i6h6h6h5i5h5i6i6i5h6i6h5i6i6h6i5i6h5i6h5i6h6i6h6i6Si6g5`1}_\/f5h6h6i6i6i6i6i6i6i6g5tNW-wP)qM'kG%gF$gF#qK'T+]0d3g5i6d4_1}U,cBvŻƵ_1g5i5h6i6i6i6i6h5h5i5}Qi5i6h6i5i6i6i6h6i6h5i6i6i6h6i6i6i6i6h6i6i6i6i6i6h6i6i6i6i6i6h6i6h6i6i6i6i6i6i5}Ri5i6i6i5h6i6h6i6i6h6h5i6i6i5i6i5i6i5i6i6i6i6i6i5h6i5i6h6i5i6i6h6h5i6i6h6h6h6i6Si6h5a3nGa`2g5i5i6i6i6i6i6h5i6h6f5sLˑb2g5i5e4\0zQ*~_@׷`1g5i6i5i6i6i6h5i6i5h6}Qi6i6i6i6i6i6i6i6i6h6h6i6i6i6i6i6i6i6i6i6i6i6h6i6i6i6i6i6i6i5i6i6i6i6i6h6i6i6i6}Ri6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6h6i6i6i6i6i6i5i6i6i6i6h6i6i6i6i6i6i6i6i6i6i6Si6i6f5b2\/Y.W-W-W-W-W-W-W-W-W-W-W-W-W,W-W-W,V-W-Y.[/`2e4h6i5i6i6i6i6i6i6i5i6f5qK}_ׄcCuO(cBzV5}T+]0d3g5h6d3yUש}^@uO(X-b2g5i6i6i6i6i6i6i6i6i6}Qi6i6i6i6i6j6i6i6i6i6i6i6i6i6i6i6i6i6i7i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i7j6i6i6~Ri6i6i6i7i6i6i6i6i6i6i6i6i6i6i6i6i6i6i7i6i6i6i6i6i6i6i6i6i6i6i7i6i6i6i6i6i6i6i6Si6i6h6g5e5c3c3d3d4d3d3d3b3b3b3b3b3b3b3b3b3b3b3b3c3d3f4g5j6i7i6i6i6i6i6i6i6i6f4qJx]sM(uO(tN(x]Y.b3g5i6i6d3pIȼĻv|X5X-b2g5i6i6i6i6j6j6i6i6i6|Qi7i6j6i7j6j6j7i6j6i6i6i6i6i6i6i7j6i7j6i6i6i7i7j6j6i6j6i6i6j6j6i6i6i7i6i6j6j6i6~Ri6i6i6j6j7i6i6i7j6i6i6i6i6i7i6i6i7i6i6i7j6i6i7i6j7i6i7i6j6i7i6j6i6j6i7i6i6i6j6Si7i7h5e4b2_2_1a2e4g6e4`2]0]/\/]/\/]0\0\/]0]0\/]/^0_2b3g5i6i6i7i6i6i7i6i6j7i6g5sMׇfDwQ*gEʹ`1g6j6j7i6e4]1{R+nJ&hŹƵ`2g6i6i7i6i6i6j6i7i6j6|Pi6i7i6j6i6i6i7i6i6j7j6i6j7i6j6i6i7i6i7i7i6i6i7j6j6i6j6j7i7i6i7j6i7j7j6i7i7i7j7~Rj7j7i7j6j6i6i6i7j6j7i6j6i7j7j6j7i6i6j6j7j7j6j6i6j6i6i7j6j6j7j6i6i7j6j7j7i6j7i6~Sj6i7f5`1vU{^{_wTa1b3^1ay^v\v\w\v\w\w\v\w\w\v\v\w]|_nHc3g5j7j6i6j6i6i7j6i6g5c3pK~T+ʼòX-c3h5i6i6i6e5`1U,kׯ{`2g5j6i7i7i7j6i6i6i6i7}Qj6j6i6i7j7i6i6j6j6j7j7j7j6i6i7j7i6i7i6i6j6j7i6i7j7j6j7j7j7j6i6j7i6i6j7j6j7j7j7~Ri7j7i6i6i6j7j7j6i6i6i6i7i7j7j6j7j6j6i7i6i7i7i7i6j7i6i6i6i6i7i6j6i6j7j7i6i7j7j6Ri7j7e5Y/ɅZ/_0V,]0g5i7j6j7i7i7i6j7h6f4`2nH}T,vO(qL'oK'sM'{R+[/e4i6i7i6j6e4zWƻ|^?sN)Y.b2h6j6i7j7i6j6j7i7j7j6}Qj6j7j6j7i7j6j7j7i6j7j7i7j7j7i7j7j7i7i6j7i7j7i7j7i7j7j7j7i6i7i7j6j7j7i7j7j7j7j7~Rj6i6j7i6i7j7j6j7i7j7i7j7i7j7i7j6j6j7j6i6i7j7j6j6i7j7i7j7i7i7j7j6j7j7j7i7i6i7j6~Sj7j6e3W.ɃX.]1~U,[0g4j7j7j7j7j7j7j7h6b4ʴ}d4h6j7j6h7d3ctV8ɿʼvSwO~RTUTTTUT~Op=o=p=pp=p=p=p=p=p=p=p=p=p=p=p=p=p=p=p=p=p=p>p=p=p=q>p=p=p=p=p=p=p>p=p=p>q=p=Qp=p=p=p>p=p=p=p=p=p=p=p=p=p=q=p=p=p=p=p=p>p=p=q=p=p=p=p=p>p=p=p=p=p=p=p=p>p=p=Rp=p=p=p=p=p=p=p=p>p=p=np=m;i9f8d6e7i:l;np=p=p>p=p=q=q>p=p>p=q>p=q=p=p=q>p=q>q=q=p=p=q=q=p>q=p>p=p>q>q=p=p=q=q=q=Qp=q=p=q>p=p>p=q=p=q=p=q=q>q>p>p=p=p=p=p=p=p=p=p=p=p=q>p>p=q=p>p=q=q=q>p=q=p=q=Rp=p=p=q>q=p=q>q=p=q=oq=q=q=q>q=q>q>q>p=l;rJʾzT.}U/|U/­f8mq=p>p=p=p>p=p=Pq=q>p>p=p>p>q=q=q=q>p>p>q=p>q>q>p>q>q>p>q=q>q>q=p>p>p>q>p=q=q>q>q>q>q>p>p=p=p>Qq=p>p>q>p>p>p>q>p>q=q=q>q>q=q=p>p=p=p=p>p>p=p>q>q>p=q>p=p>p=q=q=p>p=p=q=q=q=p>Sp=p=q>q=p>p=q=q=p>op=q>q=p=p>p=p=p=p=op=p=q=p=o=n=k;i8g8i8l;pq>p>q=q>q=p>}Pp=q>q=p>p>q>p=q>q>q>p>p>p>q=q=q=q>q>q>q>q>q>q>q=q>q>p>q=q>p>q=q>q=q>p>q>q>q=q>Rq>q>q>p>q>q>q>q=q>p>q>q=q>q>p>q>p=q=q>q>p>q>q>q>q>q=q>q>p=q>q>q>q>p=p>p=q>q>q>Rq>q>q>p=q>q>q>q=q=nq=p>p>q>p>q>q>q>q=o=wN]4wR-mQw_oR{U.`5j:o=q>q>q>o=mp>q>p>q>q>q>q>}Pq>q>q>q>p>q>q=q>q>q>q>q>q>q>q>q>q>q>p>q>q>q>q>q>q>p>q>q>q>q>q>p>q>q>q=q>q>q>q>Rq>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>p>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q=Rq>q=q>p>q>q>q>q>q>j:[2v^zT.[2]3\3W0zY8Ļ`;f8o=q=q>q>q>q>q>q>q=q>o=vM̷j:o=q>p=mq>p>q>p>q>p>q>q>~Pq>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>r>q>q>q>q>q>q>r>q>q>r?q?q>r>q>r>q>q>r>q>q>q>q>Rq>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q?q>q>q>r>q>q>q>q>r>q?q>r>q>q>q>q>r?q>r>r>q>r>q>Sr>q>q?q>q?q>q>q>o=f8iGbE\3f9k;lr?r>q>q>q>q>q>o=vMqMĴ~bdfxPl;p=q>m=f8^3}Ƚ[2e7mr>q>q>q>q?q?q?q>Pq>q>r?r?r>q?q?q>q>r?q?q?q>q>q>q?q>r>r?q?q>q>q>q?r?q>r>r?q>r>q?q?q>r>q>q>q?q?q>Qq>r>r>q>q>q?q>q>r>r>q>q?q>q>r>q>q?r>r>r>r>r>q>r>r?r>r>r>q?r?q>r>q?q>q>r?q>q?q>Rr>q>q>q>q>r>q?q>o>b6n[1j:o>q>q>r>q>mr>r>q>r>q?r>q>q?o=vMW1X1Z1]4d7k;p>p>k<\ȽloL*{`_4j:p>q>r>q>r?q?r?q>q?q>r>Oq>r>q>q>r?r>r>r?r?r>r?q>q>r?r?r?r?r?r?q?q>r>q?r>q?q>q?r>q>q?q>r>r>r>r?q?q?q?r?Qr?r>q?q?r?q>r>q>r?q>r?r>q?q>q>r?q?r>r?q?r?q?r?q?q?r?r?q?r?q?q>r>q>r?r>r?r?r?q>Rr?q>r>r?q>r>r>q?mr?r>q>q?r?p?f9zT.Ʉ[2j:r?q?r?q?r?q>q>r?q>p=wNvNpM\2mJa5k;o=q?k;uO嶥bEz`_4i:p=r?r>r>q?q>q?q>r?r>q?Pr?q?r?q?r>q>r>r?r?r?r?r?r?r?q>r?r?r?r?r?r?r?r?r?q?r?r?r?q>r?r?q?r?r>r?r?r>r?r?Rr?r?r?r>r?r?q?r?q>r>q?q?r?q?r>q?q?r?r?r?r>r>r>r?r>r?r?r?r?r?r?r>q?r?r?r?r?q>r?Sr?r?r>r?q>q?r?r?m=a5tP,d8o>r?q>r>r?q?r?h:|U.Ƀ[2k;r?r?q?r?r?r>r?q>r?o=uL}[|U.Ƚg9n=r?n=h9_5xXͿ˾Y2c7n=p>r?r>r?r?q?r?r>q>q?Pr?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?Rr?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?Sr?r?r?r?r?r?r?r?o=c7{|ae8p>r?r?r?r?r?q>g9_;Ʌ\3lr?r?r?r?r?r?r?r?r?Qr?r?r?r?r?s?r?s?s?r?s?s@r@s?r?r?s?r?r?r?r@r?r?r?r?r?s?r?r?r?r?r@s?r@r?s?r?s?r@Qr?r?r?s?r@r?s?r@r@s?r?r?r?r@r?r?s?r?r?s@r?r?s?r@r?s@s?r?r@r?r?r?r@s?r@r?r?r?r?Sr?s?r?r?r?s@r?r?p>g9vWf8o>r?r@r?r@r?p>h:}a5n=r?s?r?r@r@r?r?r?r?o=rJ򨗅rS5e?g9p>r@r?r@n=i9`5Y2{U/xS.vVh:o>r?r?r?r?r@s?r?r?r?Pr?r?s?r?s?r@r?r?r?s?r?s?s?r?s?r?r?s@s@s?r@r?s@s@r@r@r?s?r@r?r@s?r?r?s?s@r?r@r?Rs@s@s@r?s?s@r?r@r?r?r@r@r@s?s@s?s@r@r@r?s?s@r@s@r?r?r?s?s?r?r@r?r@s@r@s?r?s?r?Sr?r@r?r@r?r@r?r?r?kr?r@r?s@q?p>i9fɾˡeh9p>r@r?r?s@r@r?r?s?r?o=sJnKįj:p>s@r?q?m<]̿i:o>s?s?r?s?s@s?s?r?r?~Ps@s?r@r?r@s?r?s?s@s@s@r@s@s@s@s?s@s@s@s@s?r@s@s@s?r@s@r@s@s@s?s@s@s?s?s@s?s@s?Rs?s@r@s@s?r?r?s@r@r@s?r@r@r@r@s?s@s@s?r@s@s@s?r@r@s@r@r@r@s?r?s@r@s@r@r?r@s@s?Sr?s@s@r@s@s@s@s@s@p>ln=lq?r>n=h:^4kJ}b|biHY2b6kp?s?s@s?s@r?s@s@r@Ps@t@s@s@s@s@s@s@s@s@s@s@sAs@sAs@s@t@s@s@s@s@s@s@s@sAs@s@s@s@sAs@s@s@t@s@t@s@s@Qs@t@s@s@s@s@s@s@s@s@t@s@s@t@s@s@sAsAs@s@s@s@t@sAs@s@s@s@s@s@s@s@s@s@s@s@s@s@s@Ts@s@s@s@s@s@s@s@s@r?o>j;e8f9j;n=n=g9b>Ǽʆb>f9o>s@sAs@s@s@s@s@tAs@p>i:i:p>s@s@r?ls@s@s@s@s@s@s@QtAsAt@sAs@tAs@s@sAs@s@sAt@sAs@t@s@sAtAsAsAs@s@sAs@s@tAt@t@sAt@s@t@tAs@s@s@t@t@Rt@t@s@s@sAt@t@t@s@t@tAt@tAs@tAs@s@s@sAs@t@s@s@s@t@sAs@t@s@sAt@s@t@tAs@s@s@s@sASs@sAs@s@s@sAsAs@s@q>j:qMuj;i:[3׃[2k;r@sAs@s@sAt@s@sAs@o>h;hDvR.zU/{U/îh;q?s@s@r?ksAsAs@t@t@sAs@Qt@tAs@t@t@sAt@s@t@tAs@t@s@tAtAs@s@tAs@sAs@t@s@t@t@sAtAs@sAs@s@t@tAs@s@sAs@sAt@QsAsAsAs@s@tAt@s@sAtAt@sAs@sAs@t@sAs@tAsAsAt@s@t@t@tAtAt@s@sAsAs@t@t@tAsAsAsAs@TtAs@t@s@tAsAt@t@tAn>a6ʽ{Zh:b7||e8q>s@t@s@tAsAsAs@r?n>j:mFZ3}W1}W1}V1}W0X1tOi;q?s@sAr@j;h˿}V1~X1~W0̿{U0e7mtAt@s@tAtAt@tAq@n>ϲv®Űk;q@tAtAs@i:}[ŵzU0|V0zU0otQ-d8m=tAt@sAtAt@t@t@QtAtAtAtAtAtAtAtAtAt@tAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAQtAtAtAtAtAtAtAt@tAtAtAtAtAtAtAtAtAt@tAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAsAsAtAtAtAStAtAtAtAtAtAtAtAr@f9}bnb7f9}W1wR.`6^5xX8Ɇ]4n=tAtAtAtAtAtAtAr@p?m=uK`6~W1tQ-oM+sP-}V1b7m=r@tAtAs@j;hBĴ~b圅nɾ³f9o>tAtAtAtAtAtAtAQtAtAuAtAuBtAtAtBtAtAtAtAuAuAtAtAtBtAuBtAtAtAtAuAtAuAtBuBtAtBtAtAtAtBuAtAtAtAtBRtAtBtAtAtAuAtAtAtAtBuAtAtAtAtBtBuBtAuBtAuAtAtAtAtAtBuBtBtAtAuAtAuBtAtAtAtAtAtBSuAtBtAtBuAtAtAtBr?c8\;e9f:~b_5m=i;}W1Ɇ]5m>tAtAtAtAtBtBtAtAr@o>vL_6ŵ`6kuAtAtAuAtBuAuBtAuBr?wLِnLZ3oLٵj;q@uAuAtAm<~\eFqO-xT/|V0}X1[3ijyRئ{\;{U0xYișvt^yvzU0i;sBuCuBuBuBvBvBuBuBuCsAyOkDٺkDl=sAuCuBuCq@j<`6qʽدjCi;p?tAuBuBuBuCuBuBuBQuCuBuCuBuBuCuBuBvBvCuCuCvCvBuCvBvBvCuBuBuBvBuBuBuCuCuCvBuCuCuBuBuBuBuBuCuCvBvCRuBuCuBuCuCuCuCuBuCuBuBvBuCvCuCvBvBuBuBuCuCvBvCuBuBuBuCuBuBvBuCuBvCvBuBuBvCuBuBSuBuCvBvBuCvBuCuBuCo?b7f:s@vCuCvCuBuCvCuCvBuBtAzPc8b>o}b?d9n?tAvBr@p?h<~\ذhH}V1_6h;o@sBuCuBuBuCuBuBuCvBQvBvCuCuCvCvCuCuCvBvBuBuCuBuBuCvCvCvCuBuCvCvCvBuCvCvBvCvCuCuCvCvBuBvBuCuBuBuBvBRuBvBvBvCvBvBvBvCuCuCuBuBvCvCvBvCvBvBvCvCvCuBvCvCvCuCuCuCvCvCvBvBvBuBuBvCvCvBvCSuBuBvCuCuBvCvBvBvCr@j=f@f:qAuCvBuBvBvBvCvBvBvCsAyNjko>tBtBo@j;b8d?iIvR.wS/}W2^5e:n?sBvCuCvCuBvBvBuCvBvCQvCuCvCvCvCvCuCvCuBvCvCuCvCvCvCvCvCvCuCvBvCuCvCvCuBuCvCuCuCvCuCvCvCuCuBvCvCvCuCRvBvCvBvCvCuCvCvCvCvCvBvCvCvCvCvCuCvCuCvCuCvCvCuCvCuCuCuCuBvCvCvCvCvCvCvBuBvCvBSvCvBvCvCvCvCvCvCvBvBq@j<^6pǻih;b8_6^5]5]5]5]5]5]5\4\4`6i;p?tBvCvCvCvCvCvCvCvCvCsAuL®}W2\4a7e9k=q@uBsAm?c8[4|W1{V1{V1{V1}W1[4c8m>sAvCvCwCvCvDvCvCvCvCQvCvCwCwCvDvCvCvCwCwCvCvDvCvCvCvCvCwCwDvDvCwCvCwCvDvCvCvCwDvCvCvDvDwCvCvDvCvDwCRvDvCwCwDwCwCvCvCvCvCwDvCvCwCwCvDwDwDvCvCvCvCvCwCwDvCwCvCvCwCvCvCwDwDvCvCvCvCvCSvCwCvCvCvCvCvCvDwCwCvCwCvBsArAp?o?p@p?o?o@o?o?n?n>o?r@tCwCwCvCvCwDvDvCvDwCvCtAuLįZ3^6c8g:l=q@uBtCn>îîn>tCvCvCwCvCvCvCwCvCwCQvDwDwCvDvDwCvCvCvDwDwCwCvDwCwCwDwDwDwDvDvDvCvCwCwDvDwDvCvDvDvDwCvCvCwCwDvCwCvCRvDvCwDvCwCvCwCvDwCwCwDwDvDvCvCvCwDvCvDwCvCwCvCvDwDwCwDvDvDvDwDvCvCvCwDwCwDvCvCTwCwCuCsAr@o?p@p?o@p@p?p@p?o@o?o?o@o?o?o@p@o@o?o@o@qAsAtCvCwCvDwCvCvDwCwCvDvCuCyOwRοr@vBuBr@bmkkkkklbqAuCvCwDvCwDvCwCwDwCvCQwDwDwCwCwCvDvDwDwDwDwDwCwCwCwCwDwDwCwDwDwDvDwDvDvDwDwDwDwDwCwDwDwDwDvDwDvCwDvDSvDwDwDvDvCvDwDwDwCwDwDwDwCvDwCwDwDwDvDwDwDvDwDwDwDwDwDvDvDvCvDvCvDwDwCwDwDwDvDRwCwDsBl>e9_7^6]6^6^6]6]6^6^5^6^6^6^6]5^5]6]6]6^5`6d9jim=m>m>m=o>q@tBvDwDvDwDwDwDwDwDwCvDQwDwDvDwDvDwDwDwDwDwDwDwDwDwDwDwDwDwDwCwDwDwDwCwDwDwDwDwDwDwDwDwDwDwDwDwDwDwDwDSwDwDwDwDwCwDwDwDwDwDwDwDwDwDwDwDwDwDwDwCwDwDwDwDwCwDwDwDwDwDwDwDwDwDwDwDwDwDwDSwDvCn?]˳k=tBwDwDwDwDwDvDwDwCwDwDTtBqAp@o?p@qAsBuCwDwDwDvCuCuCtBtBtBtCuCvCwDwDwDwDwDwDwDwDwDwDvDQxEwDwDwDwDwEwDwDwDxDwDwEwDwEwDwDwEwEwDwEwDxEwDxDwDwDwDwDwEwDwDwDwDxDwDxDwDwDwDRxDwDwDwDxDwDwExEwDwDwDwEwDwDwDwDwDwDxDwDwDxDwEwDwDxDwDxDwDwDwDwDwDwDxDxDwEwDwDSxEvCm?gi;sBwDwDwDwEwDwEwDwDwEwDTwDwDwDuCtBuBvDxDwDwDwEwDtBqAn?m>o?p@sBvCwDwDwDwDwDwEwEwDxEwDwDQxExExDxDwExDwDxExDwDxExDwDwDxDwExEwDwEwEwEwEwDwDxDwDwDwDwDxDwDwDwDxExDxExDwDwERxDwDwEwDxDwDwDxDwDxDxExEwDwDwDwDxExEwDwDwExEwDxDwDwDwDxDxExDxEwEwDxDxEwDwDwEwDSxEuCn?hjk=p@uCxEwDwDsBn@hhoF´槇ij=rAwDxExEwDwEwExExDwDwDQwExEwExExExExExExExExExEwExExDxExExExExExExExExExExExDxExExExExExDxExExEwExExESxExExEwEwExEwExEwDxExExExExDxExDxDxExExExExExExEwExExExExExExEwExExExExExEwExETxExEuDqAm?j=ip@uCxExExDxExExExDxExExEvDzNl[4̿m?uCwDqAh<³qO`7^6]m?uCxExExDwExExExExExEQxFxEyExExExExExExExExExExExExFxExExExExExEyExExExEyFxExExExExFxEyExExEyExExExESxExEyExExExExFxExExFxFxExExExExExExExEyExExExExExExExEyFxFxExExExFxExEyFxExFxETxExEyFwEvDvDvDwDvDuCuCsBpAo@m?l>l?m?oAqAsBuDuCvDvDvDwDxExExExExExExExFyExExEuDvLïoUmL,¯k=uCwDn?^`7f;l>i<`8ôi=sBxExExExExExExExFxERRQQRQRQQQQQQRSSRSRRRSSRRRRSRRSRSSSRRSRSRRSSSTSSSTTSSSTTSTSSSSSSSSSTTSSUTUTUTTUUTTUUUUUTTTQ{NtJmFhCeAd@d@fAjEoGuK|ORSTUTTTTTTTTUTTTRuLIJ󭝍{_DŷsPwMTSwM­ƴpH{OURsKsњrJ}QUUVVVVVUURyFyExFyFyExFxExFyEyFyFxFyFyFyEyFyFyEyFxFyFyExFyFyFyFyFxExEyEyFyEyEyFyFxEyFyFxFSyFyFyFyFyFyFyEyFxFxFyEyFxExEyExFxFxFyEyExFyEyFyFyFyFxEyExFxFxFyFxEyFxFyFxEyEyFUxFyEyFyFxFxExEwDqBj=`7uXʮlMb8k=sAvEyFyFyFxFyEyFxEyFxFxExFxExEwEwMsOİm?vDuDo@xŵk=tByFuDm@k˜j>sBxFyEyFyFxFyExFyFxERyFyFyFyFyExFyFyFyFyFyEyFxFxFxFyFyFyFyFyFyFyFyFyFyFyFxEyFyEyFyFyFyFyFyFyExEyFyFRyEyEyFyFyFyExFyFyFyExFyFyFyFyFxFyFyFyFyFyFyFyFyFyFyFyFxEyFyEyFyFxFyExFyFyFyFyFSyFyFxFyFyFyFuDpAe9vXǼmMge`8o@vEyFzGzGzGzGzFuDl?\5żeBoAyFzGzHzGzHzGzGzGzGzGxF{OpHʴrCxFzGyFvDqAj>c9oMôkpAxFzGzGzGzGzGzGzGzGzGS{GzGzGzG{GzHzGzHzGzGzGzGzGzHzHzG{HzGzH{GzGzGzG{HzHzGzGzG{G{G{G{GzGzGzH{GzGzGzGS{GzH{HzGzGzGzHzGzHzGzG{G{GzGzH{G{GzH{HzGzGzGzGzGzGzH{G{H{GzHzGzG{GzGzGzGzGzGzGTzGzGzGtEe<ȼʂ[5n@wEzGzGzGzHzGzGzGzGvDj>a?qj>xF{GzGzGzHzGzGzH{GzGyF~Qk>]6xU1sQ0yU1\6h>rCyGzGzHyFtDnAg;]6`>ŵoAwE{GzHzHzG{HzHzGzG{GSzGzH{H{H{GzG{HzHzGzH{G{G{H{G{GzH{H{H{H{H{G{HzHzG{GzH{G{H{HzH{GzG{G{GzHzGzG{HzHSzH{HzG{GzHzH{H{HzGzG{HzG{HzH{HzH{G{H{HzGzHzG{GzH{HzH{H{G{H{HzH{GzG{HzGzH{G{GzHU{HzH{GrCa9phc9{\˾xZf;rCyGzH{H{H{HzH{HzHzH{GRzGzH{H{H{H{HzHzH{HzHzHzH{HzH{H{H{H{G{H{GzG{H{H{H{G{HzH{H{H{H{H{H{H{H{G{G{H{H{HS{H{H{GzH{HzH{HzH{G{H{H{G{H{H{H{H{H{H{G{H{G{H{H{HzH{H{HzH{H{GzH{H{H{HzH{HzHzH{GU{HzH{HqC^7~Y4n@yF{G{GvEn@ftDyG{HwFi>pʌc:tDzHzH{H{G{GzH{H{GzGwFzOڣh]7iڹoByF{HvEk?ئ}^>|X3`7i=sCxG{HzHzH{G{H{G{H{H{HS{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{HS{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{HV{H{H{HqB]6ׅ^7rC{H{HyGqBkm@xF{HyGm@kMʋb9sC{H{H{H{H{H{H{H{HyGsCqI®s[5]6\6tűnAxFzGtDnнrCyG{H{H{H{H{H{H{H{H{IS|H{H{I{H{H|I{H{H|H{H{H{H{H{I|I|H|H|I{H{H{H{H{H{I{H{H{H{H{H{H{H|H{H{H{H{H|H{I|HS{H{I|I{H{H{H{H{H|I{H{H{H{I|H{H{I{H{H{I|I{I{H{I|H|I{H{H|H{H{H{H{I{H{H{H{H|H{H|HT{H{H|IqC\6ʈ`8tC{I{HyHm@gi>vE{I{GnA~Y4ʋa:tD{H{I|H{H{I{H{HyGvEnAlEteB^7hC´wSoBxG{HuDrIg}c}dgjjkbqBxF{I{I{H{H{H|H{H{I{HS{H{I{H|I|I{H{I{H{H{H{H|H{H|H{I{H|I{H{I{I{H|I|I|H|I{H{I{H{I|H{I{I{I{H|H|H{H{H{IS{I{H{I|H{H|H|H|I|I{H{H{H|I{H|I|I|H|H{I{H{H|I|H{I{I{I|I|H|H|H|H{I{I{H|H|I|I{I|HT|I{H{HqC]6ʆ_8rD{H|IyGl@eb:qCvFuDj>jLʋb:tD|I{I|H{I{I|H|HzGsC󻡅sDzGzHtEi>oMe^7fgxF}JzHm@fi>wF|I|I|I|I|I|I|I|I|I}JVzHyGyGyGzH}I|I}I|IzHpB˹_8^8}Y4ĶmAwG}J|I|J|I|J|J|I|I}JS|I|I}I|I|I}J|I|I|J}J}J}J}J|J|I|J|I|J}J}I|J|I}I}J}J}I}I}J}J|I|I}I}J|J|J|I}J}I|JU}I|I}I}I|I|I|I|I}I|I|J|I}I}I|J}I|I|J}I}I|I}I|J}I}J|I|I|I}I|J}J|I}I}I|J}I|J}I|IV}I}I}IyHm@sJwF}IzIoBihoAzG|J|I|I}J|I|I|J|J}IzIRsCnBmAnAsDvFzH}J}IzHuEeѾm@k@yTbrDyH|I}I}I}J}J|I}I|I|IT}J}J}I}J}I}I}J|J}I}J}J}J|J|J}J}J}J}J|J}J|I}J|J|J}I}J}J}J}J|I}I|J}J|J}J}J}I}J}JU}J|J|J}J}J}J}J}I}J}I|J|I|I}J}I}I}J}J|J|I}I}J|J|I}J}J}J}J|I}J|I}J|J}J|I}J|I}J|JT}J|J}I{IsDqIkxNyG|J{HtDb͒gi=k?qDxF|I}J}J|J}J}I}J}J|J|JS}J}J}J}J}I}J}J}I}J|J}J}J}J}J}J}J}J|J|J}J}J}J|J}J}J}J}J}J}J}J}J}J}J|J}J}J}J}J}JU}I}J}J}J}J|J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}J}JU}J}I|I}IyHtEoBnAqCwF{I}J}JyGrDj?eqBvEoCf=˺DzpB{I~J~K~K~J~J}K~J}J}K}J~K}J~J~K}K}K~K~J}J}K~J}KT}J~K}J}K}K~J~K~K}K~K~J~J}K~K}J~K}J}J~K~K~K}K}K}J}K~K~J~K}K}J~K}J}J~K~J~J~K~J~KT~J}J}K~K~J}K~K}J}K~K~J~J~K~J}K}K~K}K~J}K~J}K}K}K~K~K~K~J}K~J}J}K}J~K}J}K~K}K~KV~J~J~K{JvGnBh=d;c;c;d;d;d;d;c;d;c;dmArEzH~KLLLLLLLLLLKKLLKL~LLLLLLTLLMLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLMLLULLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLLMLVLLLM~K|J{IzIzJzIzIzJzIzIzIzIzIyIyHvGqDe=sXnB|JLLLLLLLL}KwHtKű`9e=k@oBuGzI~KLLLLMLLLLMLLLLLMLLLLLMULMLLMMMLMMMLLMLMLMMLLLLMLLLLLLMLLLMLLLMUMLLLMLLLLLLMMLMMMLMMLLMMLLMLLMMLLLLLLLMVMLMLLLLLLLMLLMLLMMLL}KvGd<ɽi?yHLLMMLMLML~L}Qqűdz˵szJLMLLLLMMLLMLLMLMLMLLLMLUMLMMLLMMLMLMMLMLLMMLLLMLMMLLMMLLLMMMMMMVMMMMLMMMMLLMLMLMMMLLMLMLMLMMLMLLMMMMLMLVLMLMLLMMMLLLMMMMMMMML|JmBfːg>xHLMMMLMMLM~LRqD{Vmkkl~YxH}LMMLMMLMLMLMMLMMMLLLMMMUMMMMMMMMMMMMMMMMMMMMMMMMLMMMMMMMLMMMMMMULMMMMMMMLMMMMMMMMMMMMMMMMMLMMMMLMLMMLMLWMLMMMLMMMMMLMMMMMMMML~LqD~Z6ˎf=xGLMMMMMMMM~LSrEj@cyHMMMMMMNMM}K|P}ƒ]8󻪙DzsE}KMMNMMMMMMMMMMMNNMMMMMMVMMMNMMMMMMMNMNMMMMMMMMMNMMNMNNMNMMMMMMNVMMMNMNNMNMMMMMNMMMMNMMMMNMMNNNMMNNMMMMMVMNMMNNMMMNNNMMNNMMMM~LyHg>~ȿi?yIMNMMNMMMN|LzNDzsYtR2trE|KMMMMMMMMMMMMMMNNMMMMNMUNNMNNNMMNNNNMMNNNNNMMMNMNNNNNNNNNNNNMMNUMNNNNMNMMMNNMMMNMNNNNMNNNNNNNNNMNNNMNMNWMNNNM}L|K|K{J|J|J|K|J|K|K|J{J{K{IxHuGj?bAmC|KMNNNMMNMM|KzNʽ٘erKuG}LMMMNMNNNNNNNMMMMNMMNMMUNNNNNNNMNNNMNNNNNNMNNNMNNNMMMNNNMMNNNMNVNNNNMMNNNNMNNNNNMMNNNNNNNNMNNNMNNNNNNNNWNMNM{JtFnClAkAkAkAkAkAkAkAkAkAkAj@g=_:}esStF~MNNNNNNNNN~L|OqKμvH~LNMNNNNNNNNNNNNNNNNNNNNVNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNVNNNNNOONNNNONNNNNNNNNNNNNNNONNNNNNNNNNNWNNN}LsGƼkAzJNNNNONNNNNM~RlA_:|Y6{X5]8duG}LNOONONOOOOOL~QuMŶzqKlBqDwG|KMOONONONOOOOONNNOONNNNOVOOOOOOOOOOOOOONOOOOOOONNOOOOOOONOOOOOOOWONOOONNNOOOOOONNOOOOOOOOOOONOONOOOOOOOOWOON}LrE˺ucf>h?kAtE|KMOOOONNNONNOOOOOOOOOOOOUUUVVVVWVVVVVVWVVVVVVVVVVVVVVVVVVVWWWWWWWWWWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXWWWWWWVRwLqHlElElElFlElElElFlFlFlFlFnGqIwM|PTWXXXXXXXXXXYXXV~QvLoHmFţ}VSXYYYYYYYYYZYYYZYYYYYYYYVOPOOPOOOOOPOPPOOPPOPOOOOOPOPPOPOPOPOOPOWOOOOOPOOPPOOPOPOOOOOOOPPOOOOPOOOOPOPPPOWOOOOO~L{KzJzJ{J{JzJzJzJzJzKzJzJzK{K}M~MNOOOPOPOPOOOPOPO~N{O}ƒ^:󴡎ȳuGMOPPOOPOOOPPPOOOOOOOPOOUPPOOPOPPPPOPPOOPPPOOPPOOPPOOPOOPOPOPOOOVOOOOPOOOOPPOOPPPOPPPPOOPOPOOOPOOPPPPOPOXOOOOPONNMMNNNMNNNMNMNNNMMOOOOPOOPPPPPPNyOdzŶ~etS2uuH~NOOOPPOPPOOPPPOPPOOPOOOVPPOPOPPPPPPPOOPPPPPPPPPPPPPPPPPPPPPPPPOWOPPPOOPPPPPOPPPOPPPPPPPPPOOOPPPPPPPOPPOXPPPO~MyIuHsFsFsEsFrFsFsFsEsFrFrFsFsFsFrEsEsFtFvG{KMPPPPPPPPPONzOɽ٘ftLwIMPPPPPPPPOPPPPPOOPPPPPOVPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQPPWPPPPPPPPPPPPPPPPPPPPPPPPPPQPPPPPPPPPPPPXPPPNxIfljiiijiiiiiiiiiiiijn[zJOPPPPPPPPQORtNξyJOPPPPPPPPPPPPPPPPPPPPPPWPPPPQPQQPPPPQPQPPPPPPQPPQPPQPQPPPPPQPPPWPPPPPPPPQPPPQPPPPQPQQQPPPPPPPPPPPPQPQPQXPPP}NoD°tFNPQQPQPPPPOSqDakAsG}MPQQQQQQQQQO|P˶|nDqFnD|ʵvHNQQQQQQQQQQQQQQQQQQQQQQVQQQQRQRRQQRQQQRQRQQQQQQQQQQQQRQQRQQQQRQWQQRQQQRQRQQQRQQRRRRRQRRQRQRRRQQQQQQQQRQXQRRQO~N{KyJzJzKyJyJzJyJzJyJyJzJzJzJzKyJyKyJzL|LOPQRQRQQQQQQO|Oŭ˶tHyJvIͷθyJORQQQRQQRQQQRRQRQQQQQRQVQQQRRQQRQRQQRRQQRQQRQQQQQRRQRQRRQRRRRQQWQRQRQRRRQƅQ̅QԄQRRRRRQRބRԄQԅQфQƄQ„QQQRRQQRQRQQQQRXQQRRRQRQRQQQRRRRQQQQRQQRRRRRQRQQQRRRRP|LvLdyWmCrFqEoD^{LPQRRQQRQRRRRRRRQRRQRRRQVQRRRQRRRQRRQQRRRRQRRRQRRQRRQQRQRRRRRRRRWRQRR˄RڄRRRQRQRRRRRQQQRRRRRRRRRׅRŅRQRQRRQRQQYQRRQRRRRQQRQRRRQRRRRRRRQQQRQRRQRQQRRROyJjöµmopqqF{LPRRRQQRRRRQRRRRRRQRQQQRWRRQRRRRRRRRRQRRRRRRRRRRRRRRRRRRRRRRQRRRXŅRۅRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR҅RRRRRRRYRRRRRRRRRRQRRRRQRRRRRRRRRRRRRRRRRRRRRPxIŭzKPRRRRRRRRQRRRRRRRRRRRRQXRSRRRSRRRRSRRRRRRRRRRRRSRSRRRRRRRRSRRąR߅RWRRRRRRSRRSSRRRRRSRRRRRRRSRRRRRRRSRR؆RRRRYRRRRRRRRRRRRRRRRSRRRRRSRRRRRRSRRRRRRRQ}MtJñ}Z8~[8]9ʵxJPRRSRRRRSRRSSRRRSSRRRRRXRRSSRSRSSSRSRRSSSRSRRSRRSSSRSRRSRRSԅSSSSXRRSRRRSRSSSRRRSSRSRSRSRSSSSSRSSSRSRRSR˅RXSSSSSSRSRRSSSSSRRSSRSSSSRRSSSRRSRRSSSSO{PkArSsTuNzLPRSSSRRRSRRSRRRSRRRRSSRXRSRSRSRRSSSSSSSRSSSSRSRRSRRRSSSRS܆SRSRSSXSSRRRSSRRSSSSSSSSSSSSSRRSSSSSRRRRSSRRRRYӆSRRSSSSSRSSSRRSRSSRSSSRSRSSSRRSSSSRRRSQ~R[ǸfyJQSSRSSSSSRRSRSSRSRRRSRSXSSSRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSRSSXSSSRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSYSS҆SSRSSSSSRSSSSSSSSSSSSSSSSSSRRSSSSSSSQ|Qʵ{Y7\9°ʶxKQSRSSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSTSSSSTSTSSSSSSTSSSTSSTSSSSYSSSSSSSSSSSSSSSSSSSSTTSTSSSSSSSSSSTSTSSYSSSS·SSSTTSSSSSSSSSSSSSSSSTTSSSSTSTSSSTQ}Q˶\9Έc=ͷzKQSTSSSSSSSSSSSSSSSSSTSTYTSTTSTSSSTSTTTSSTSSSTTSSTSSSSTTSSSSSSTSXTSTSSTSSSSTSTSSTSSTTSSSSSSSSSSTTSTSTTSTZSSTSSTSTTTSSTTTSSSSSSSSSSSTSTTSSSSTTSTQR\΋e>¬u{MRSSSTTSTSTTSSTTSSTSTSTTYSTSTTTSTTSTSSSSSTSTTTSTTSTTSTSSSTTSTSTSYSTTTSTSTSTSTTTTTSTTSTSTSTTTTSTTTSSSTTSTYTTSTTTT؇STTSSTTTSTSSSTTTTSTTSSTSTTTSTTTRTpEamCvJNSSTSTSTTSTSSTSSTTSTSSSSXSTSTSTTTTTTTTTSTTTTSTTTTTTTTTTTTTTTTTTTYTTTTTTTTSSTTTTTTSSTTTSTTTTTTTTTTTTTTTTSYTTTTTSTTSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSŪOSTSTTTTTSTTTTTSSTTTTSTTXTTTTTTTUTTTTTTTTTTTTUUTTTTTTTTTTTTUTTTTYTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTTTTTTTTTTYTTTTTTTTTT͇TTTTUTTTTTTTTTTTTTTTTTTTTTTTRR\輨psvbQSUTTTTUTTTTTTTTUTUTTTTTXTTTUTUUTUUUTTTUUUUTUTTTTTTTUTUTTUTTTTTUYTUTTUUUTUTTTUUTTUUUTUUTTUUUTTUUUTUUTUUTYUTTTTTTUTTT߇TUTTUUTUTTTTTUTUTTUTTTTUUUSQzO¬ıd>iAoFtHzMQTUTTUTTUUTTTTTTTTTTUTTUXTTTUUUTUTUTUTTUTUTTUUTUTTTUUUTUTUUTTTUTZUUUUUUTTTUUTTTTUTTUUUUTUTTUTTTUTTTTUUTUZUTTTUUUUUTTTUTTTUTUTTTTTUUUTUUTTUUUTSR}OzO[|YhAkCoFsH{LQTTUUUUTUTTTTTUTUUUUUTTTYUTUUUTUUUUUUTUTTUTTUUUUTUUUTUUUTUUUTUUUZUUTUTUTUUTUUUUUUUTUUUUUUUUTUUUUUUUUUUTUZUTUTUUUUTUTTUTUTUUUTUTTUUUTUUUUTUUUURQӸzɵ͸}NSUUTUUTUUUUUUTTUUUTTUUUZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVUUUUUUUUZUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZUUUUUVUUUUUUUUUĈUUUUVUUUUUUUVUUUUUUUUTR~O{PoFkCiBe?a=vU~[{MSUUUUUUUUUUUUVUUUUUUUUUYVUVVUUVVUUUUUUVUUVVUUUUUUUUUUVUUVUUVVVUZVUUUVUUUVUVUUUUUUVUUUVUUVUUVUUVVUVUUUUU[UUUUVUUUUUVVUUUVÈUUUUUUUUVUUVVUUUVUUVUTP|Qʶdzf@b=ƳwKRUVUVUVVVUUUVUUVUVUUVVUYUVVVUUUUUVVVUVVUUVUUUUUUVUVUVUUUVVUUUVVZUVVVUVUUVUVUUVVUVUUVUVUVVVVUUVVUUVVUUUV[VVVUUVUUVVVVVVUUVˆUUUUVVUUVVVVVVUUUUVVVS|OɵımJķödzxKSUUUUUVVVVVUUUUUUVUUUUUYVVVVUUVUUVVVUVVUUVVUVUVVUUVVVUVVVVVVVVVYVUUVVVVVVVUVVVVUVVVUVVVVVVVVVVVVVVVVVVV[VVVVVUVVVUVVUVVUVV‰UUVUVUVUVVVUUUVVVUVVSzOƳķkIñȵwLSUVUVUVUVVVVUVVVVUVUVUUYVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVZVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVV[VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUS}Qɵf@f?Ų˶zMSVVVVVVVVVVVVVVVVVVVVVVZVVVVVVWVVWVVVVVVVWVVVVWVVVVVVVVVVWWVVVVZVVVVVWVVVVVVVVVVVWVVWVVWVVWVVVVVVVVWVWV[VVVVWVVVVVVWVVVVWWWVWVVVVVWVWVVVVVVVVVTS_~[kChAop\|NTVVWWVVWVWVWVVVVWVVVVVVYVVWWVVWWVWVVWVWVWVVWWWWVWVWVVWWWWVWWVVWZVWVVVWWVVVWVVVVWVWWVVVVWWWWWVVWVWVVVVWV\VWVVVWWWWWVWWWWVVVWVۉWVVWWVVVVWVVVWWVVWTS`iAķzMUVVVWWVWWWVWVVVWWVVVWVVZWWWVVWWVWWWWWWWWWWVWVWVWWWVWWWWWWWWVWVV[WWWVVWWVVWWVVWWWVVWVVWVWVVWVVVVWWWWVWVV\VVVWWWWVVVWVVWVWWWWVVΊVWVWWWWVVVWWVVWWWUSƮ˻hGbD¶ɶ{MUWWVVVVVWVVWVWVWWVWWVVVYWWVWWWVWWWWWWWWWVWWWWWVWWWWWWWVVWWWWWWW[WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW\WWWWWWWWWWVWWWWWWWWWWWŠWWVWWWWWWVWVWWVWU~RɵΡuyX8t|NUWWWWWWWWWVVVVWWWWWWVWWZWWWXWWWWWWWWWWWWXWWWWWWWWXWWWWWWWWWWWWWZWWWWWWWWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[WWWWWWWWWWXXWWWWWWXWWWWWWWWXWXWWWWWXWWUSs趖wPVWWWWWXWWWWXWWWWWWWXWWWZXWWWXXXWWWXWWWWWWWXWWWWWWXXWXWWWWWXWXWWZWXXWWWWWWWXWWWXWWXXXWWWWWWXWWXXWXWWWWWW[XXWWXXWWXXWWWXWWWWXXXWW֊XWWWWWWWWXWXWWWS{PjCrTkknrbRVXWXXWWWWWWWXXWWWXWXWWWZXXWXXXWWWWXXXXXWXXXWXWXXWXWWWWXXWXXXXWW[WXWWXXXWWXWWXWXXWWWXXXXXWXWWXXXWXXXXXXX[WXXWWXXXWWXWXXWXWXXWWXXXÊWXWWXXWXWXXWWVRuLIJ^;`=e?kDwJRVXXXXXXXXXWXWXWXXXXXWWX[XWXXWXXXXWXXXXXXWXWWXWWXXXXXXXXXXXXXXXX[XXXXWWXWXWXXXXXXXXXXXXXXXXXXWXWXWWXXXXX[XWXWXXXXXXXWXXXXXXXXWWWXXXXXXWXXWWXXXV}N軞QUXXWXXWXXXXWXWXXXWXXXWX[YXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\XXXXXXXXXXXXXXXXXXXXXXXXXʋXXXXXXXXXXXXV~PrKıc?e@e@Ƹ̷}OVXXXXXXXXXXXXXXXXXXXXXX[YYXXXXXXXXXYXYYXXXYYXXXYYXYXXXYYXXXXXXX\XXXXXXXYXXXXXXYXXXXYXXYXYXYXXXXXXXXYXXX\XXXYXXXYYXYYXXXXXYYXXYYXXYXYXXXXYYXXXU~PxO~[zZgBhBfAqu}OVXYXXYXXYYXXYXXXXXXXXXX[\[[[[\\\[[\[[\\\\[\\\\\[[\\[\[[[[[\[\[[[\[\[\\[\\\\[\\\[[\\[\[\\\\\\[[[[[[\[\]\\\\]]\]\\\]]\]\]]\]\]\]\\\\Ў]\]]\\]]\][YȵrĩV\]]]]]]]^]^]]]]]^]^]^]][XXXYYYYYYYYYYXXXYXYXXYYYYYXXYYYYXYXXXXY\YYYYYXYYYXXYXXXYYYXYYYXYXYXXYYYXXXXYYYX[YYXYYYYYYXYXXYYXYXXYYYYYXXYXYXYXXYYYXVs^`qnlnqbRXYYYYXXXYXYXYYYYXYXYYXY\YYYYYYYXYYYYXYYYYYYYYYYYYYYYYYXYYYYYYYY\YYYYYYYYXYYYYXYYYXYYYYYYYYYYYYYYYYYYYYY\YYXXYYXYYYYYYYYYYYYYYYYYYYY͌YYYYYYYYYXWUUtJqööquKSXYYYYYYYYYYYXYYYYYYYYYY]YYYYYYYYYYYYYYYYZYYYYYYYYYYYYYYYYYYZYYY\YYYYZZYYYYYYYYYYZYYYYYYYYZYYYYYYYYYYYYY\YYYZYYYYYYYYZYYYYYYYYYYYYYYZYYYYYYYYYYWUaƳqƳwQWYYYYYYYYZYYYYYYYYZYYYY\YYYYYYZZYYYYZYZYYYZYYYYYYZZZYYZZYYZYZYY]YYYZZZYZZZYZYZYZYYYZYYZZZYYZYZYZYYYYYYZ\ZZZYYZYZZYYYYZZZZYZYZYYZZYYZȌYYZYZYYZZYWT͸lEoFlE̸~PWYYZYYZYYYYYZYYYZYYYYZY[ZZZYZZZZYZZZZYYYZYZYZZYYYYZZZZZYYZZYZZZ]YZYYYYYZYZZZZZYZZZZZZZYZYYYZZZYZZZZZZZY\ZZYYYYZYYYZZZZYZZZZZZYZZZZYZZYZZYZYZZYXT̸lFoGmF̸}PXYZZYZZYYZZZYYZZYZZYYZY[ZZZYZZYZYYZZZZZZZYYYZZZYYZYYZZZYZZYYZZZ\ZZZYYZZZZZZYZZZZYZZZZZZZZZZZZZZYZZZZYZZ]ZZYZZZZZYZYZZZYZZYZZZZZZZZZZZZZZZZZYZZXVwƳqwRXYZYYZYYZZZZZZYZZZZZZZZ\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZYZZZZ]ZZZZZZZZZZZYZZZZZZZZZZZZZZZZZZZZZZZZZZZ]ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZэZZZZZZZZZYWuKqöêqvKTYZZZZZZZZZZZZZZZZZZZZZZ\Z[ZZZ[ZZZZZZZZZ[[ZZZ[ZZZZ[Z[ZZZZZZZZZZZ]ZZZZZZZZ[Z[ZZZ[Z[[[[ZZZZZ[ZZ[Z[[ZZ[ZZ[Z^ZZZZZZZZZZZZZZZZ[ZZ[[ZZZ[ZZZ[[ZZ[ZZZ[ZYVapmlnsdUYZZZZZ[ZZZ[Z[[ZZZZZZZ[Z\[[ZZ[ZZZZ[Z[[[[[ZZZZZ[Z[ZZZ[ZZZZ[[Z[[[Z]ZZ[[Z[ZZZ[ZZ[[[ZZ[[Z[[[Z[[ZZZ[ZZZ[ZZ[ZZ]ZZ[[Z[[Z[ZZ[[ZZZZZZZZ[Z[[[ZZZ[[Z[ZZZZ[XTɭUY[ZZZ[[Z[[Z[Z[[ZZZ[ZZZZ]Z[[ZZZ[Z[[ZZ[ZZZ[Z[Z[[Z[[[[[[[[[[ZZZ[[Z]ZZ[ZZZ[Z[[ZZZ[[[[[ZZ[[[[Z[[[[Z[[[ZZZ[[Z^[[[ZZZ[Z[Z[[[[Z[[[ZZ[[[[[Z[ZZ[ЎZ[[[[ZZ[X~RîƸgAnFtKyNRWZ[Z[[[Z[ZZ[[[Z[[Z[Z[ZZZ\[[[[[Z[[[[[[[[[[[[[[[[[[[[[[Z[[[[[[[[[[][[[[[[[[[[[[[[[[[[[[[[Z[[[Z[[[[[[[[[[[[^[[[Z[[[[ZZ[[[[[[[[[[[[Z[[[[[Z[[[[Z[[[[XT˷}iBoGtKyNRWZ[[[[Z[[[[[Z[[[[[[[[[[[][[[[\[[[[[[[[[[[[[[\[[[[[[[\[\[[[\[[[[[][[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\[[[[\[[[^[[[[[[[[[[[[[[[[[[[[\[[[[[[[[[[[\[\[[[YVϾʷ͹ѻŸ}WZ[[\[[[[[[[[[Ž[[[[[[[[Ž[[^[[[[[[[[[[\\[[[\[[\\[[[[[[[[[\[[[[\[[[\^[[[\[[\\[[[[\\[[[[[[[[[[[[[[\[[[[[[[[[[_[[[\[[\[[[[\\\[[[[[[[[[[[[[[\\[Ž[[Ž\[[[\ZZQn͹˷͹ѻŸ}WZ[[\[[Ž[Ž[[[[[Ž[Ž[Ž\[[\Ž\[[[[][[\\[[[[[[[\[[[\\[[[\\[[[\[[[\[[\\\\\[[][\\\\\[[[\[\\[[[[[\\[\\\[[[[[[\[\\\[[[[_[[\[[\[\[[[\\[[\[\\\[[\\[\[\[\[ώ[[[[Ž\\Ž\\]XT~R}P~QRVY[Ž\\\\Ž[\Ž[\[Ž[Ž[[[Ž[\[\[\\[\\[\\\\\\\[\\[\[[\\[\\\[\\\\\\\\[\\\\[\\[^[\\\\\\[\\[[\\\\\[[\[\\\\\[\[\\[[[[\\[\^\\\[\\\\\\[[[\[[[\\[[\\\\\\[\\\܏[\\[\\\[_[ZXXWYZ[\[Ž\\Ž\\\Ž[[Ž\\\[[[\Ž\[[Ž\[Ž[[\\\\\\\\\\\\\\\\\\\\\[\\\\\\[\[\[[\\\\\\^\\\\\\\\\\\\\[\\\\\\\\\\\\[\\\\\\\\\\\\_\\\\\\\\\\\\\\\[\\\[\\[[\\\\\\\\\\\\[\\Ð_\\\\\\\\\Ž\\\\\[Ž\\\\\\Ž\\\\\\Ž\\\[]\\\]]\\\\\\\\\\\\\\\\\\\\\\\\\\]]\\\\\\^\\]\]\\\\\]\\\\]\\\\\\\\\\\]\\\\\\\\\\\_\\\\\\\\\\\\\\\\\\\\\\\\]\]\\\\]\\\\\\\Ē_\\\\\\\Ï]\\\]\\\Ï\\\\\\\\\\\\Ï\\\\]\\]\]\]\\\\\\\\\]]\\]]\]\\\\]\\]]\]\\\\^\]]\\\\]\\]\\\\]]\]]\\]]]]\\]\\\\]\\]]]^\\\\\\\\\\]]\\\\]\\]\\\\\\\]\]\]Ï\Ï]]\\\\Ñ_\\\\\Ð\Ï]\\Ï\\\]Ï\\\\\]\]]Ï\\\Ï\]]\\Ï]]]]]]\\]]]\\]]\]\]]\]\]]]]]\]\\\]\]\]]]\^\]]\\\\]\]\]]\]\]\\\]\]\\]\\\\\\]\]\]]\_]\]]]\]\]]]]]]]]]\\]]]\]\\\\\\]]Ɛ]\Ï\\]\Ï]đ_\Ï]Ð\Ï]\Ï\]Ð\\\]Ð]\\\]]Ï\Ï]\]Ï]\Ð\\]\Ï\\Ï]Ð]]]]]\]]\]]]]]]]\\]]]]]]]\]]]]]]]]]]]\]]]^]]\]]]]]]\]]\\]]]\]\\]]]\]]]]]]]\\\\]]\_]]]\]\]]]\]]\]]]]]]]]]]]\\]]]]\\ΐ]Ð]Ð]]]Ð\Ð\đ`Ð]Ð]Ï]Ð]\Ð\Ï\]Ï\Ð]Ï\Ï\]Ï\\Ð\Ð]Ð]Ð]Ð]Ï]Ï]]Ð]Ð\Ï\]]Ð]Ð]]^]\]]]]]]]]]]]]]]]]]]]]\]]]]]]]]]]]]]]]\^]]]]\]\]]]]]\]]]]\]]]\]]]]\]]]]]]]]]\]]_]]\]]]]]]]]]]]]]]]]]]]]]\]\]]]]]Ӑ]Ð]Ð]Ð]Ð]Ð]Ð]Ē`Ï]]Ï\Ð]Ð]Ð]Ð]Ð]Ð\Ð\Ð]Ð]Ð]Ð]Ð]Ð]Ð]]Ð]Ï]]Ð]Ï]Ð\Ð]Ð]Ï]Ð]Ð]Ð]Ð]^]^]]]]]]]]]]]]]]]]]]]]]]]]]]]^]]]]]]]]]^]]]^^]]]]]]^]]]]]]]]]]]^]]]]]^]^]]]^]]]_]]]]]]]]]^]]]]]]^]]^]]^]]]]^]]]]Ր]Ð]Ð]Ð]Ð]Ð^Ð]Ē`Ñ]Ð]Ð]Ð]Đ]Ð]Ð]Ð^Ð]Ð^Ð]đ]Ð]Ñ^Ð]Ñ^Ð]Ð]Đ]Ñ]Ð]Ð]Ð]Đ]Ð]Ð]Ð]Ñ]Ñ]Ð^Ñ]}}p^^]^^]^^]]]]]]]^]]]^]]]]]^^_^^^^^^]]^]^]]]^]^]]]]]^^]^]^]]]]^^]]]]]_]]]^]]]]]^^^]]]^]^]]]]]^]]^^]]]]ؐ]Ð]Ð^Ñ]Ñ^Ñ]Ð^Ē`Ð]Ñ]Ð]Ð]Ð]Ð]Ð]Đ]Đ]Ð]Ð]Đ]Ð^Ñ^đ]Ñ^Đ]Ñ]Ð]Ð]Ð]Ð]Ð]Ð]Ð^Ð]Ð]Đ]Ð]Đ]Đ]z]]^]]^]^]^]]^^^^]]]]]]_^]]]]]]^^]^^^]]^^]^]]^]]^^^^^]^^]]^]^^^_]]]^]]^^]^^]]^^^^]]^]^^^^]^^]^]]ڐ^Ñ^Đ^đ^Ñ]đ^đ^Œađ]Đ]Ñ^Đ]Đ^đ]đ]Đ^Đ^Ñ^Ð^Ñ]Đ^Ñ^Đ^Đ]Ñ]Ð^Ñ]Đ]Ð]Ð^đ]Ñ]Ð^Ñ]Đ]Ñ^Ð^Ð^Ñ^o^]]^^]^^^^^^^^^^^^^]^]^^^^^]]^^^^^]^^^^^^^^^^]^]]^^^]^]^^^`^^^]]]]^^^^]^^^^^]^^]^^^^^^]^]^^ݑ^Ð^đ^đ^Đ^đ^đ]đ`Ñ^Ñ^đ^Ð^Đ^Đ^Đ^đ]Ñ^đ^Ð^đ^Đ^đ^Đ^Đ^Ð^Ñ^Ñ]Đ]đ]Ñ]đ^Ð]Đ^đ^đ]Ñ^đ^đ^Đ]s^^^^^^^^^]^^^^^_^^^^^^^^^^^^]]^^]^^^^^^^^^^^^^^]^]^]^]^`^]^^]^^^^^^^^^^^^^^^^^^^^^^^^^^^ܑ^đ^đ^đ]đ^đ^đ^Œ`đ^đ^đ^đ^đ^đ^đ^đ^Đ^đ^Ñ^Ñ^đ^đ^đ^đ]đ^đ^đ^đ^đ^đ^Đ^Ñ^đ^đ^Đ^đ^đ^Ñ^Đ^^^^^^^^^^^^_^_^^^^^^^^^^^_^^_^^^^^^^^_^^^^^^^^^^^^^^^`^^^^^^^^^^__^^^^^^^^^^^^^^^_^_^_ܑ^đ_đ^đ^Ē^đ^đ^Œ`đ_đ^đ^đ^đ^đ^đ^ő^đ^đ^đ^ő^đ_đ^đ^đ_đ^đ^đ^đ^đ^đ^đ^đ^ő^đ^đ^đ^đ^đ_đ^h_^^^_^^^^^`^^_^_^^_^^_^^_^^^^^^^^^^^_^^_^^_^_^^^^^a^_^^^^^_^^^^^^^^__^^^^^^_^^_^^_^ّ_đ^đ_ő_Œ^ő^Ē^Œ`đ_ő^ő^đ^Ē_đ^đ_Ē^đ^Ē^đ^đ^ő^đ^đ_đ^đ^đ^đ^đ^ő_đ^đ_Ē^ő^đ_đ^đ^ő_ő_đ^f^_^^^_^^__^_^^_^___^___^__^^^^^_^^___^^_^_^^^^____^____^_^^_^_^^^^^__^^^^^_^__^_^ؑ^Œ_Ē_ő^ő^Ē^Œ^œ`đ_Ē^đ_ő_đ^Ē^Ē_ő^đ^Ē_đ_ő_ő^Œ^Ē^ő_ő^đ^đ_đ_đ_ő_ő_Œ^Œ_ő_đ_ő_đ_ő^Ē_`__^___`^____^__^^^_^__^_^_____^_^_^^_^____^__^__^_^_________^_______^_^_^^^_^^^Ғ_Œ_Œ_ő_Œ^Ē^Œ^ƒaĒ_Ē_Ē_Œ^Œ^Œ_ő^Œ_Ē^đ_đ_ő_Ē_Ē^Œ^Œ^Œ_Œ_Œ_Ē_Ē^ő_Œ^Œ_Œ^Œ_Œ_Œ_Œ_Œ_ő^_____`_______________^______^________________`__^_^_^__________________^___^__͒^Ē_ő_Œ_Œ_ő_ő_ƒaĒ_Œ_ő_Ē_Ē_Œ_ő_Œ_Œ_Œ_Œ_Œ^ő_ő_ő_Œ_Œ^Œ_Œ_Œ_Œ_Œ_Ē_Ē_Œ_Œ_Œ_đ_Ē_Œ_Œ_Ŀh___`__________________________`____________`________________________________Ǔ_Œ_Œ_Œ_Œ_Œ_Œ_ƓaŒ_Œ_œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_œ_Œ_Œ_Œ_Œ_Ɠ_Œ_Œ_Œ_Œ_Œ_`_`_`_______`_____``____`_____``_____`_`__`______`_``_``_`__`_________`____Œ_œ`œ_Ɠ_Œ`ƒ_Œ`Ǔaœ_Œ_Œ_Œ_Œ`ƒ_œ_Œ`Œ_œ_Œ`œ_Œ_ƒ_Œ_Ɠ_ƒ_Œ`Œ_œ_Œ`Œ_Œ_œ`ƒ_œ_Œ`ƒ`Œ_ƒ_Œ_a`__```_`_`_`___``_`_``_`____`_``___`_``_a___`_`____`_``_`__```__``___`___œ`Ɠ_Ɠ_œ`œ`Œ_Œ_ƔaŒ`œ`Ɠ`Œ_ƒ_œ`Ɠ`ƒ_Œ_œ_Œ_Œ_œ_Œ_Œ`Œ`œ`Œ`Œ_ƒ_Œ_ƒ`ƒ_Œ_Œ`Œ_Œ_œ_Œ`Œ`Ɠ_p```__`_```___`_``````_`````__`__````_`_`_``___`_````_``_``````_```_`_``_Ɠ`ƒ`œ`Ɠ`Œ`œ`Ɠ`Ǔaœ_Ɠ_œ`Ɠ_Ɠ`œ`œ_Œ_Ɠ`œ_ƒ_œ`Ɠ_Ɠ_Œ_Ɠ_œ_Ɠ`Œ_Ɠ`ƒ_Ɠ`Ɠ`Ɠ`ƒ_Ɠ_Ɠ`ƒ_Œ_ƒ_œ_հx`_``````_```_```___```__```__`````__``a`_``_`___````````_```_`````_``_ݓ`œ_Ɠ`Ɠ`Ɠ`Ɠ`ƒ`Ɠ`ŔaƓ`ƒ`œ`œ`Ɠ`Ɠ`Ɠ`Ɠ`œ`Ɠ`œ_ƒ`Œ_Ɠ`Œ`Ɠ`Œ`Ɠ`œ`Œ`ƒ`œ`ƒ`Ɠ_œ_Ɠ`ƒ`Ɠ`Ɠ`œ`ƒ_ߟ```````````````````````_````````````_a``````_````````````````````````ѓ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ_ƔaƓ`ƒ`Ɠ`Ɠ`Ɠ`Ɠ`ƒ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`ƒ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`œ`ƒ`œ`Ɠ`Ɠ`Ɠ_Ɠ`Ɠ`Ɠ`Zɥ```````````````````````````a`````a``a```a`````````a`````a````````aa`ȓaƓ`ƓaƔ`Ɠ`Ɠ`Ǔ`Ɣ`ƔaƔ`Ɠ`Ɠ`Ɠ`Ɣ`Ɠ`ƓaƓaƓaƔ`ƓaƓ`Ɠ`Ɠ`Ɣ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ǔ`Ɠ`Ɠ`Ɠ`Ɣ`ƓaǓ`Ɠ`Ɠ`Ɠ`Ɠ`tH``a`````````a`a```````a`a``a````a``a`````a`a`a`````a``````a`aa`a```Ɣ`ƔaƓ`Ɠ`Ɠ`Ǔ`Ɠ`Ǔ`ƔaƓaƓ`Ɠ`Ɠ`Ɣ`Ǔ`ƓaƓaƓ`Ɠ`ƓaƔ`Ɠ`Ɣ`Ɠ`Ɠ`ƔaǓ`Ɠ`Ɠ`Ɠ`Ɠ`ƔaƓ`ƓaƔaǓaƓ`ǓaƔ`Ɠ`ΠtaabababaaabbabbabaabbbbabbbaaabaaabbabbbaabaabbaabbbbaabaaabbaabbbǕaǔbǔaƕbƕaǔaƕaǕaƕbǕbƔbƔbƔaǔaǔbǔaǕaƕbǔbƕaƔaƔbƕaƔaƔaǔaƔaǔaƕaǔaǕbƔaƕaƔbƔaƔaǔcǕcǔbȕcxx|$3aaa``aa`a`aaa`a``aa`aaaaaaaaa`aa`b``aaaaaaaaa`aaaa`aa`a`a``aaaa`єaǓaǔaǓaƔaǔaǓ`Ɣaǔ`ǔbǔaǔaǔaƔaǓ`ǓaǓ`ƔaƔaǔ`ƔaǓaǔaǔaƔaǓaǔ`ƔaǔaǓ`ǓaƔ`Ɣ`ǔaƔ`ǔaƓaǓ`ǔaƓaƔ`zzooHhx}aa`a`aaaaaaaaaaaaaaaaa`a`a``aaaaba`aaaaaaaa`aaaaaa`aaaa`aaaaaaaǔ`ǔaǔaǔaǓaƔaƔaǔ`ǔaǕbǔaǔaǔ`ǔaǔ`ǔ`ǔaǔaǔaƔaƓaǓaǔ`ƓaǓaǔaƔ`ǔaǔaƔaƔaǓaǔaƔaǔaǔaǔaǔaǔ`ǔaǔajj{>G!|naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaǔaǔ`ǔaǓaǔaǔaǔaǔaǔaǕbǔaǔaǔaǔaǔaǔaǔaǔaǔaǓaǔaǔaǔaǔaǔaǔ`ǔaǔaǔaǔaǔaǔaǔaǔaǔaǔaǔaǔaǔaǔaǓaxxffɼx? ;[]fabaaabaaabbaabababaaaaabaaaaaacaaabaaababaaaaaaaaaaababababbԔaǔaǕaȔbǔaȔaǕaǔaǔaȔaǕbȔaǕaǔaǔaǔaȕaȔaǔbȔaȔaǔaǔaǔaǕaǔaǔaǔaǕaǔaǕaǕaǔaǔaȔaǔaǔaǔbȔaǕaǔaǕaffǿܡffϪH$;BubabaaabaaaabaabaaabaaaaabbaaabbaaababaabaabbabaabaaaaaaabaaaȔaǔaǕbǔaȔaȔaȔbȕbǔaǔbǖbǔaȔbǕbȕbǔaǔaǔbȔaǕaǔaǔaȔaȕbǕaǔaǕaǕbǔbǕaǔaǕaǕbǔbǔaǔaǕaȔbǔaǔbȔaǔakEߕff؞UH<;THbabbabaabbbaaabbbbaaaaabaabaacaaabbaaababbbabaaaabaabaabbbaȔbȕaȕaǔaǕaǔbȔaǔaȕbǔaǕbǔaǔbȔbȕaǕaȕbȔbȕbȕaȔbǕaǕbǔbȔbǔaȔaǔbǕaȕaǔaǔaȕbǕbǔaǕbȔaǔaȔbȔaǔaȔaqBxFffg{;<@ mlbbabbaabbbbbbbbabaabbababbabcabbbabbaabbabbbbbbbbaabbbbaa̕bȕaȔbǕaȔbǕbȕaȕbǕaȕbȕbȖcȕbȔaȕaǔaȔaǕaȕaȔaǕaȕbǕbȕaȔbǕaȔbȕaȕbȕbǔaǕaȕbǕaȕbǕbȕaȕbȕbȕaȔaȔbȕbtffff=fg.aeeeededeedeeeeede՘e˘eʘe˘e˘d˘eʘe˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘eʘe˘e˘e˘e˘e˘e˘d˗e˗e˗e˘e˘e˘e˘e˘e˘e˘e˘e˘eʘe˘e˘e˘e˘e˘e˘e˘d˗e˗e˘˘˙˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘՘]f=f=f=f=k@׳jjffffffffffffƻei1==========I Jeeeeeeeeeeeeeee͙e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘e˘f˘e˙e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e̘˘˘̘˘˘˘˘̘˘˘˘˘̘˘˘˘˘˘˘˘˙˘˘˘˘͘qCf=f=f=f=xHιhhffffffffffffѪee{FA==========^%^eeeeefeeeefژe˘e˙f˘e˘e˘e˘e˙e˙e˘f˘e˙e̙e˘e˘e̘e˘e̘e˘e˘e̘e˘e˘e˘e˘e˘f˙e˘e˙e˘e̘f˘e˘f˘e˘e˘e̘f˘e˘e̘e˘e̙e˘e˙e˘e˘e˘e̘f˘e˘e̘e˘e˘e̘f˘e˘e˘e˙e˘f˘e˙e˘f˘e̘e̘̘˙˘˘˘˘˘˙˘˘˘˘̘˘˘˘˘˙˘˘˘˘˘̘˘˘˘Ԙwf=f=f=f=f=SffffffffffffffۜeeeUJ==========EyAfeeeeeefe͙e˘e˘e̘e˙e˘e˘f˘e˘f˘e˙e˙e˘e˘e˘e˘e˘e˘f˘e̘f˘e˘e̘e̘e̘f˘e˙e̘e̙e˘e˙e˘e˘e˘f˘e˙e̘e˘e˘e̘e̘e˘e˘e˘f˙e̘e˘e˙f˘e̘e̘f˙f˘f˙e˘e˘e˙f˘f˘e˘e˘e˘e˘f˘e˘f˘˙˙˙̘˘˘̘˙˙˘̙˘̘̘̙˙̙˙˙˘˘˘˙̙˘˘˘̘˙ޘWf=f=f=f=f=eϮffffffffffffffpbeef`W===========WYfffefӘe̙f˘e˘e˘f˘e˘e˘f˙e˘f˘e˙f̘e˘f̙f˘f̘f˘e˘e˘f˘e˘e̙f̙e˙e̙f˙f̘e˙e˙f˘e̘e˙e˙e˙e̙f̙e˙e˘e̘f̘f̙e˙f̙e˘e˙e˙f˙e̙f˘e̙f̘e˘e˘f̙f˙e˙e̘e˘e˘e˙e˘f˘e̙e˘e˘f˙e˘̙̘˙˙˘˘˘˙˙˘˘̘˘˘˘˘˘̘̙˙̘̙˘˘̘˙̘̘˘̘̘mAf=f=f=f=f=wؠfffffffffffffT4`efffi1===========Ao8df٘e̙e˙e˘f˙e̘e̙e̙f˘e˘e̘e̙f˙f˘e˘e˙f˘e˘f̘e̙e̘e˙e˙e̘f̙f˘e̘f̘e̘e˙e̙e˘e˘e˘f̘e˘f˙e˙e˘f˘f˘f˘e̘e˙f̙e˘e̘f˙f̙e˘f̘e˘f̘e̙e̘f̘e˙f̘f˘f̙e˘e˙e̙e˙f˘f̙e̘e˘f˘e̙̘˙˘̘̘˙̙˘˙̘˙̙̘˙˘˘˙˙̘̙˙̙̘˘̙̙˙˙̘̘̙˘͘pf=f=f=f=f=k@ߕfffffffffffVf(|1\efff{FA===========NֈS˙e˙e˘f˘f̙f̘e˘f˙f˙f˙f̘f˙e˙f̙f˙e̘f˘f˙e˘f̘f̘e˙f̙e̙e˘e̙f̙f˙e˘f̙f˘f˙f̘f˘f̘f˘f̙e˙f̙f˙f̙e̘e̙f̘f˘e̙e˙f˘f̙f˙f̙f˘f̙f̘f̘f̘e̘e˘f˙e̙e̘e̙f̘e˙f˙e̙f̘f̙e̘e˙̙˘̘̙̘̙̙˙˙˘˙̙̘̙˘˙̘̘̙̙˙̘̙̙˙̘̙̙̙̘˘˙ؙ̙̙̘Pf=f=f=f=f=xHfffffffffXf)f)t/YffffTJ===========>g.Ζb̙f̙f̙f˙f̙e̙e̘f̙f̙f̙f˙f̘f̙f˙f˘f̙f̘f̙f̘e̘f˙f˙f̙f˙f˘f̙f̙e˙e˙f̙f̙e˘e̙f̘f̙f̙e̙e̙f̙e̘f̙f˘e˙f̙e̘f̙f̙e̙e̙f˙f̙f̙e̙f̙e̘f˙f̘f̘f̙f̘e̙f̙f˘e̙e̙e̘f̙e̙̙˙̘˙̙̙̙̙̘̙˙̙˙̙̙˘̘˙̙̙̙̙˙˘˙̙˙˘̘̙̘̙̘̙̙̙̙ϙj?f=f=f=f=f=S||fffffff[f)f)f)m,ֵUffff`W============I ڀJ˙f̙f̙f̙f̘f̙f̙f̙f˙f̙f̙f̘f̙f̙f̙e̙f˘e̙f̙e̙e̙f̙f̙f̙f̘f˙e̙f̙e˙f̙e̙f˘f̙f̘f̙f˙f̘f̙e̘f̘f̙f̙f̙f˙f̙f̙f̘e̙e˙e̙f˘f̙f̙f̙f̙f̙e̙f̙f̙e̙e̙f̙f˘f̙f̙e̙f̙˙̙̙̙̙̙̘̙̙̙̙̙̙˙˙̙̙̙̙̙˙̘̘˙̙˙˙̙̙̙̙̙̙̙̙̙̙̙̙̙Йޙhf=f=f=f=f=f=evvfffff[f)f)f(f)j*ɽOfffffi1=============_%ϓ_̙f̙f̙f̙e̙f̙f̙f̘f˙f˘f̙f̙e̙e̘f̙f̙f̙e̙f̙f̙f̙f˙f̙f̘f˙f̘f̙e̙e̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f˙e˙f̙f̙f̙f̙f̙f̙f̘f̙e˙f˙f̙f̙f̙f̘f̙f̙f˙f̙f˙f̙f̙f˙f̙f˙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̗iJ[=_=c=f=f=f=woofffYf)f)f)f)f)c)Kfԙf̙f̙f̙f|FA============EyB̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙fdispcalGUI-1.7.1.6/misc/media/install.bmp000644 000765 000000 00000455660 12025152312 020007 0ustar00svpwheel000000 000000 BM[6(:z[  Zf3g3f4f3f3f3f3g3f3f3f3f3f3f3f3f3f3g3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3g3f3Zf3f3f3f3f3f3f3f3f3f3f3f3g3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3[f3f3f3f3f3f3f3g3f4f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f4f3f3f3f3f3f3f3f3f3f3g3f3f3\f3f3f3f3f3f3f3f3f3f3f3f3f3g3f3f3f3f3f3f3f3f3f3f4g3f3f3f3g3f3f3f3f3f3f3f3f3f3f3\f3f3f3Yf3f3f3g4f3f3f3f3f3f3f3f3f3f4f4f4f3f4g3f3f3g3f3f3f3f3f3f4f3f3f3f3f4f3f3g4g3f3f4Zg3f3f3f3f3f3f3f3f3f3f3g3f4f3f3f3g3f4f3f3f3f3f3f3g3f3f3f3f3g4g3f3g3g3g3f3f3f4f3[f4f3f3f3f3f3f3f3g3f3g3f3f3f4f3f3f3f3f3f3f3f3f4g3f3g3f3f3f3f4f3f3f4f3f3f3f4f3f3\f3f3g3f3f3f4g3f3g3f3f3f4f4f3f4f3f3f3f4f4f3f3f3g3f4f3f3f3g4g3f3f3f3g3f3f3f3g3f3\f3f3f3Yf3f4f3f3g4f3f3f4f3f3f4f4f3f4f3f3g3f3f3f3f3f3g3f3f4f3f3f3g3f3f4f3f3f3f3f4f3f3f3Zf3f3f3g3f4f3f3f4f4f3g3f3f4g3f3f4f3f3f3f4f3f4g4g3f4f3f3f3g3f3f3f3f4g3f4f4f4g3f3[f4f3f3g4g3f4f3f3f4f4f3f4f3f3f3f3f4f3f4g3f3g3f3g3f3f3f3f3g4f3f3f3f3f4f3f3f4g3f4]g3f4f4f3f3f3g4f3f3g3f4f4f3f3f3f3f4f3f3f3f3f3f3f3f3f3f3f3f4f4f3f3f3f3f3f3f4f3f3]f3f3f3Yg4g3f4f3f3f3g4g3f3g3f3f3f3g3g3g3g3g3f4f3f3g4g4f3f3f4f3g3f3f3g4f4f4g4g3f3f3g4f3Zf3f4f4g3f4f3f3f3f4f3f3g3f3g4f4f3f3f4f4f3f4g3f3f3f3g3g3f3g4f4g4g3f3f3g4f3f3f3f3[f3g3f3f3g3f3f4f4f4f4f4g3f3f3g3f3f3g3f3f3f3f3f3f3f4g3g4g4f3g3f4g4g4f3f3f3g3g3g4\g3f4f4f3g3g3g3f3g3g3g3g3f3g4f3f3f4f3g3g4f4f4f3g3f4f3g3f3f4g3f3g3g4f3f4f3f4f3g3\f3f4f3Zf3f3g4f3f3g3g3f4f3f3f3f3f4g4f3f3f4f4f4g3f4f3f3f3f4f4f3f3f4g3f4f4g4f4f4f3g3f3f3Zf3f4f4g3g4f3g4f3g3f3f3g4g3g3f3f4g3f4f3g3f4f4f3f3f4g3g4f3g4f3g4f4f4g3f3g3g4f3g4[f3g4g4f4g3f4g3f4f3f3f4g4g3f3g4g3f4g3f4g3g3f4f3f4f3g3f3f4g4f3f4f3g4f3g3g4f3g4f4]f3f3g3g3f3f4f4f4f3g4g3f3f3f4f3f3g3g3f3f3g4f3f4f3f4f3g3f3f4f4f3f3g3f3g4g4g3f4g4]f3f4f3Zg4g4f4g4f4g4f4g3g4f3g3f4f3g4f4f3g4f3g4f4f3g4f3f4g3f3f3f3f3g3f4g3f3g3g3f3g3f3f3Zg3f3g4g4g4f4f3g4f4g4g4f3f3g4f4f4f3f3f3g3f4g3f4f3g4g4g4f4f4g3f4g3g4g3f3f4f4g4g3\g4g4g4g4f3f3g4g4g4g3f3g3g3g3f4f4g3g4f4f4f3g3g3f3g3g3g4f3f4g3f4f3g3g3f4f4g3g4g4[f3f3g4f4f4f4g4g3g4f4g4g4g3f3g4f3g3f4f4f4f3g3g3g3g3g3f4g3f3f3g4g4f3f3g4g3f4g3f4]f4f3f4Yg3g4g3g4g3f4f4g4f3f4f4f4g4g4g3g4g4g4f3g4f3g4f4f3f3g3g3g3g3g4g3g3f3g4g4g3f4f3g3[g3f4g3g3f3g4g4f4g4f4g3f4f3g4g4g4f4g3g4g4f4g3g4f4f4f4g4g3g4f4g3g3g4g3g4g3g3f3g4\g4g3g3f3f4g4g4f3g4f4g4g4f3f4g4f3f4g3g3f3g3f4g4g3g3g4g3g3g4f4g4g4f3g4f4f3g4g3g3\g4g4g4g4g4f4g3g4g4g4f3g3f4f3g4f3g4f3f4g3g3g3g3f4g3f3g4g3g3g4f4g3f4g4g4g4g3g4f4\f3g4g4Yg4g3g4g4g4f3f4f4f3g4g3g3g4g4f4g4g4g3f4g4g4g4g4g3g4g4g4g3g4f4g4g4f4f3g4f4f4g3g4Zg3g4g4g4g4g4g4g3g4f3g4g4g3g3g3f4g4g4g4g3g3g4f3f4g4g4g4g4g4g3f4f3g4f3f3f4g3f4g4[g4g4g3f4g3g4f4g4f4g4g3g4g4g4g4f4g4f4g4g4f4g3g3g4g4g4g4g3f4g4f3g3g3g4g4f4g4f4f3\f4g4g3g3g4g4g4f4g4g3f3g4g4g4g4g4f4g4f4g4g4g3f3f4f4g3g3g3f4g3g3g4g4g3g3g3f3g3g4\g4g4g4Yg3g3f4f4f4g4g4g4g3g4g4g4f4g4g4f3g4g4g4g3g4g4f4g4g4g4f4g4g4g4g3f4g3g4g4g4g4g4f4Zg4f4f4g4f4g4g4g3g4g4g3g4g4g4f4g4g3g4g4g3g3g4g4f3g4f4g4g4g3g3g4g3g3g4f4g4g3g4g4Zf4f3g3g4g4g4g4f4g4g3g4g4g4g3f3g4g4g4g4g3g4g4f4g3g4g4g4g4g4g4g4g4g3g3g4f3f4g4g4\g4g4g3f4g4f3f3g4f4g4f4g4g4g4g4f4g4f4g4g4f4g4g4g4g3g3g4g4g4g3g3g4g4f4g3f4g4g4g4]g3g4g4Yg4g4g4g4g3g4g4g4g4g4g4f4g4g4g3g4g4f4g4f4g4g4g4g3g4g4g3g4g4g4f3g4g4g4g4g4g4f4g4Zg3g4g4f4g4g4f3g4g4g4g3g4g4g4g3g3g4g4g4g4g4g4g4g4g4g4g4f4g4g4g4g4g4g4g4g4g4g4g4[g4g4g4f4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4f4g4g4g4g4g4g4g4f4f3g4g4g4g4\g4g4g4g4g4g4g4g4g3g4g4g4g4g4g4g3g4g3g4f4g3g4g4g4g4f4f4g3g4g4g4g4f4g4g4g4g4g4g4]g4g4g3Yg4g4g3g4g4g4g4g4g4g4g4g3g4g4g4g4g4g4g4g3g4g4g4g4g4g4g4g4g4g4g4g4g3g4g4g4g4g4f4Zg4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4[g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4f4g4g4g4g4g4g4\g4g4g4g4g4g4g4g4g3g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g3g4g4]g4g4g4Yg4g4g4h4g4g4g4g4g4g5g4g4g4g4g4g4g5g4g4g5g4h4g4g4g4g4g5g4g4g5g4g4h4g4g4g4h4g5h4Zg4g4g5g4h4g4g4g4g5g4g4g4g4g4g4g4g4g4g4g4h4g4g4g4g4g4g5g4g4g4g4g4g4g5g5g4g4g4h4[g4g4g4g4h4g4g4g4g4g4g4g4g4g4g4h4h4g4g4g4g4g4h4g4g4g5g4g4g4g4g4g4g4g4g4g4g4g4g4\g5g4g4g4g4g4g4g4g4h4g4g4g5g4g4g4g5h5g4g4g4g4g4g4g4g4g4g4g5h4g4g4g4g4g4g4g4g4g4]h5g4g5Yg4g4g4g4g4h4h5g4g4g4g4h5g5g5g4h5g4g4g4g4g4g4g5g5g5g4g4g4h4g5g4g4g4g4g4h5g4g4g4Zh5g4g4h4h4g4g4g4g5g4g4g4g5g4g5g4g4h4g4g4h4g4h4g4g5g4g4g4g4g4g5g5g4g4g4g4h4h5g5[h4g4g4g4g4g4g4h4h4g4g5g4g4g5g5g5g5h4g4h4g4g5g4g4g5g5g4g4g4g5g4g4h4g4g4g4g4h4g4]g4g5g4g4g4g4g4g4h4g4g4g4g5g4h5h5h4g5g4g4g4g4g4g4g4h4g4g5g4g4g4g4g5g4h4g4g4h4g5\h4g4g4Yg4h4g4g4g4g4g4h4g4g4h5g4g5g4g4h4g4g4g5g4h4g5g4g4h4g4h4h5g4g4g4g4g4g5g5g5g5g5g4Yg5g4g4g4g4g4g5h4g4g4h5h4g4g5g4g4g4h5g4h4g4g4h4h4h4g4g4g4g5h4g4g5g4g4g4g4h4g4g4[g4g4h5g4g4g4g4h4h4h5g4g4g5g4g4g4g4g5g4g4h5h4g4g4g4g5g4g4g5g4g5g5g4g4g4g4h4g4g4\g4h4g4g4g4h5g5g4g5g4g4h4g4h4g4g4g5g5g4g5g4g4g4h4h4g4h4g5h5h4g5g4g4g4g5g4g4g5h4]g5g4g5Yg4h4g4g4h4h4g4g5g4g4h4h4g4h5g4h5h4g4g4h5g5g4h5h5g4h4g5g4g5g5g5g4g4g5g5g5h4g5h4Zg4h4g4g5h5g5h4g4g5g4g5h5g4g5h5h5g4h5g4g4g4h4g5g4h5h5h4h4h5g5h4h4g5h4g5h4h4h4g4[h4g4h4g5h5g4h4g5g4g4h5h5g4g4h4g4h4g4h5g4h4g4g5g4g4g4g5h4g4h4g4h4h4h4g5h4g5g4h4[h4g5g5g5h5g5g4h4g4h4g4h4g5h4h4g5g5g4h5g4g5g5h4g4g5h4g4g4g4h4h5g4h4g5g4g5g4g5h4]h5g4g5Yh4g5g5h4g5h4h5g5h5h5h5h5g4g4g4g4g4g4g5h4g5g5g4g4h4h4g5g5h4g5h4g4g4h5h5g4g5h4g5Zh4g5g4g5g4g5h4h4g4h4g5h4h5g5h4h4h5h5g4g5g5g4h4g5h4g4h4h4h5g4g4g5g5h4h4h4h4h4g5Zh5g4g5g4g4g4g4g4h5h5g5g4h5g5h4g4g5g5g5h4g4g5g4h5h5h4g4h5g4h5g5g4g4h5h5h5h5g5g4\g5h4g5g5h5h5h5h5h4g5h4g4g4g5h4h5h5h4g4g5h5g4h4h5h4g4g5g4g4h4g5h4h4g4g4h5g5h5h5\h5h4h5Yg5g4g5g5h5h4h4h5h4g4h4g4h5h5g4h5g5h5g4h4h4g5g4h4h5h5h5h4h4g4h4g5g5g5h4h4h5g4h4Zh4g4h5h5g5g4h5h4g4h5g4h4h5g4g4h5h5g5h5h5g4g4h5g4g5h4h5h4g4h4g5h5g5h5g4h5h4h4g4Zh4g4g5g4h5h5g5g5h4g4g4g4h5h4h4h4h5h5h5h4h4h5g4g5g5g4h5h4g5h4g4g5g5g5h5g5g4h4h5[h4g5g5h5g5h4g5h5g5h5g5h5h4h5h5h4g5g4g5h5g5h4h5g4h5g4g4h4h5h4g5g4g5h5g4h5g5h5h5]h5g5h5Yh4h5h5h5g5h5h5h5g5h5g4h5g4h5h4g5h4h5h4h5g5g4h5h4h5h4h5h5h5h5g5h5h5h4h5h4h4h5h5Zg4h5h5h5g4h5g5g5h4g4g4h4h5h5h4h5h4g4h5g5g5h5g5h5g4h5h5h5h5g5h5h5h5h5h5h5h5g5g5[g5h4g5h5h5g4g5g5g4g5g5g5h4g5g5h4h5h5h5h4g4g5h4h5h4h5f4f3f3f4f3h5h5h5h5h4g5h4g5[h4h4h4h5h5h5h5h5h5g5h5g5h5g4h4g4h5h4g5g4g4h5h5h5h5h5h4h4g5h5h5h5h5g5h4h4g4h4h5]h5h5g5Yg5h4h5h4g5h5h5h5h5h5g4h5h5h5g5h5h5g5h5h5h5h5h5h5h5h5h5h4h5h4h5h5h5h5g5h5h5h4g5Yh5h5g4h5h5h5h5g4h5h5g5h5g5h5h4g5h5g5h5h5h5h5h5g5g5h5h4h4h5h5h4h4h5h4h4h5h5h5h5Zh5h5h5g5g5h4g4g5h5g5h5h5h5h5h5g5h5h5h5h4g4h5g5f3c2`1].[/[.Z.\.^0b2e3g4h5h5h5h5\h5h5h5h5h5h5h5e4d3c1b2a2a2a2b2b2e3f4h5h4h5h5f4d3b1_0_1_1_1_1`0a1e4g4h5h5h5g5h5]h4h5h4Yh5h4h5h5h5g5h5h5h4g5h5h5g5h5h4h5h5h5h5h5h5h4h5h5h5h5h5h5h5h5h4h5g5h5h5h5h5h5h5Zh5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5g5h5h5h5g5h5h5h5h5h5h5h5h5h5h5h5h5[h5h4g5h4h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5e4b2]/V,vO(x\v\v\v\w\uO(~T+[/a2f4h5h4h5[h5h5h4h5h5h5g4d3_0Z.Y-Y-Y-Y-Y-Z._0d3g4h5h5h5d3_0X-U+~T+~T+|T+~U+X-]/b2f3h5h5h5h5h5]h5h5h5Yh5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h6h5h5h5h5h5h5h5h5h5h5h5h5h5h5Yh5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5Zi6h5h5h5h5h6h5h5h5h5h5h5i5h5h5h5h5h6h5h5g4`1W,bAĸúw\~T+_0e3h5h5]h5h5h5h5h5h5f4_0{ʰ{_1f4h5h5g4a1a_1e4h5h5h5h5h5]h5h5h5Yh5i5i5h5i5h5h5h5h5h5h5h5h6h5h5i5h5i5h6h5h5h5h5h5h5h5h6h5i5i6h5h5h5h5h5h5h5h5h5Yh5h5h5h5h5h5i5h5h5h6h5h5h5h6i5h5h6h5i5h5h5h6h5h5i5h5h5h5h5h5h5h5h5h5h5h5h6h5h5Zh5h5h5h5h6h5h5h5h5i6h5i5h5i6h5h5h6h5h5f4a3V,vzR*_0f4h5\h5h6h5h5h5h5e3\/ʼz^}_`}_z^ʽ]0f5i5h5f4_0iF垃jsM'dBǻaAzR*Z.b3f4h5h5h5h5i5]h5h5i6Yh5h6h6i5h5i5h5h5h5h5h6i5h5h5h6h5h6h6h5h5h5h5h6h5i5h6h5h6i5h5h5i5i5h5h5i6h6h5i6Zh5i5i5h5h5i5i6h5h6h5h6h6h6h5h6h5h5h5h5i5h5h5i5h5h5h6h6i5h5h6i5h5h6h6h5h5h5h5i5Zh6i5h5h5h5i6h5h5h5h5i5i5h6h6i6h6h6h5h5d3[.iŹ~V+a2h5[h5h5h5i5h6i5d3[/xQ)X-]/W-xP)]/e4i5h5f5_0apK'uN(tN(yV4ȼV,_0e4g6h5h5h6h5h5\h5h5h5Yh6h5h5h5h5h6h5i5i6h5i5h6i6h6h5h5i5h6h5i5h5h6i6i5h6i6h5i6h5h6h6h5i5h5i6h5h5h5h5Yh5i6h6i5h5i6i5h5i5i5h5i5h6h5h5h6h6i5i5i5h6h6h6h5h5i6i5i6i6h5i5h6h5h5h6h6i5h5h5[i5i5h5h5i5h5h5i6i6h5h6i5h5h5h6h5h6i6g6`2yR)򮟐}^?qL'tM(rL'}^@x\]0f4\i5h5i5h6h5h5f5]0zȼzR)X-\/X,yQ)טuT`0g4h6h6h4`1wTdCwQ)xQ)ʾ]0d3h6h5i5h5h6i6h5]h5h6i6Xh6i5i6i5h6i5i6i5i5h6i5h6i6i5i6h5h5h5i6i5h5i5i5i5i6h6h6i5i6h6i5h6h6h5h5i5i5i5h6Zi5i5i6i6i5i6h5i5i5h5i5i5i6i6h5h5i6i6i5i6i5i6h5h6i6h6h6i6i5i5i5i5i5i6i5h6h5h5i5[h5h5h5h5h6i6i5h6i6i6i6h5i5h5i6h6h5h6f4\/w\gLzR*Z/^0`0^1[/}T+rS3X-e3[h5i6h5h5h5h6f4`1b:򲜆zR*}U+\6̽؅Z.b3g6i5h6h5c2Z/òʈa9`1g5i5h6i5i6h6h6h5]h5i6i6Yh5i5h6i6i5i5h6i5i5i5i5i6h6i5i5i5i6h6i6i6i5i6i6i5h6i5i6h6i6i6i6h6h6h6i5h6i5i5h6Zh5i6i6i6h6i5i6i5i6i6i6h5h6h6i6i6i6i6i6i6h6h5i5i6i5h6i6i5h5i5h6i5i6h6i5h5i6i5i5Zi6i5i6i5i6h6i5h6i6h6i6i6i6i6h6h6i6i5f3Z-t|R*a1f5i5i5i5f5a2V-y[?}U,c3\i6h6i5i5h6h6g6c3]/sSʃ^8]0e3h5i5i6h6e3\0yR*nI&hF$jG$sN'Y-b2g4i6i5i6h6i6i6i5]h6i6i5Yi6i6h6i5i6h5i6i6h6i6i5i5i6h6i6i6i6i5i5h5i6h6i6h6h6i6h5i5i5i6i6i6h6i5i6i6i6h5i6Yi6i6i5i6i5i6i6i6i6i6i6h6i5i5i5i6h6i6i6i6i6i6i6h6h5i5i6i6h6i6i6i5i6i6i6i5h6i6i6[i6i5i6i6h6i6i6i6i6h5i6h6i6i6i6h6i6i6e4Y.sS3[.f5h5i5i6h5i6h5^1sN(}T*c3\h6h5i5h6i6i6g5e3_1Y.yQ*zV5v\vT3tN'V,_0e4i5i6i6i6d2[/zɈ`9`1g5h6h6h6i6i6h5h6\i6i6i5Xi6i6h6h6i6i6i5h6h6i6i6i5i6i6i6i6i6i5i6i6i6i6i6i6i5i6h6i6h6i6i6i6i5i5i6i6h6i6i5Yi5i5h6i5h6i6i5i6h6h6i6h6i6i6i6i5i6i5i6i6h6i6i5i5i6i6i6i6i6i5h6i5i6i6i6h6i6i6i6Yh5i6i6i6i5i6h6i6i6i5h6i5i6i5h6i5h6i6f5Z.}^@Z/f5i6h6i6i5i6h6_1uO(U,d3[h6i6i5i6i6i6g5e4oH`cc3g5i6i6h5a2xUqQyQ*\7̽ο]/d4i6h6i6i6i5i6i6]i6i6h6Yi6i6i6i6i6i5i6i6i6i6i6i6i6h6i6i6i6i6i6i6h6i6i6i5i6i6i6i6i6i6h6i6i6i6i5i6i6i6i5Yi6i5i6i6i6i6i6i6i6i6i6i6h6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6h6i6i5i6i6Zi6i6i6i6i6i6i6i6i6i6i6h6i6i6i6i6i6i6g5]0mPu|T+a2g5i6i6i6h5d4Z.sS2Y.e4[i6i6i6i6i6i6f5e4pI`ba2g5i6i6g4`1awP)yR*yQ*}Y5ʇ[/d3i6i6i6i6i6i6i6]i6i6i6Yi6i7i6i6i6i6j6i6i7i6i6i6i6i6i7i6i6j6i6j6i6j6i6i6i6j6i6i6i6i6i6i6i6j6i6i7j6i6i6Yi6i7i6j6i6i7i6i6i6i6i6i6i6i6i6i6i6i6i7i6i6i6i6i6i6i6i6j6i6i6i6i6i6i6i6i6j6i6i6[i6i6i6i6i6i6i6i7i6i6i6i6i6g5f5e4e4e4d3]0uO(iM}T+]0a2b3b2_1Y.qL'¹bB]0g5[i6i6j6i7j6i6h5g5c4]0zR*uS3sM(la_2f5i6i6h5`1a׀[6zR*yR*ɽ\/e4i6i6i6i6i6i6i6\i6j7i6Xi6i6j6i6i6j7i6i7i6i6i6i6i6i7i7j6i6i6i7i6i6i6i6i6i6i6i7i6i6i6i6i6j7j6i6i6i6i6i6Yi6i6i6i6i7i6i6i7i6i6i6j7j6i6i6i6j6i7i6i6i7i6i6j7i6i7i6j6i6i6i6i6i6i6i6i6i6i6i6Zi6j6i6i6j7i6j7i6i6j7i6i6f5c2\/Y.W-X-W-}T+nJ&kWuqL'yQ*|S+zR+tO(iMuO)_1g5[j6i6j6i6i6i6i6h7e5]0ŻǺnJ&]0f4j6i6h5b2W-ʼvT`2g5i6j7i6i6j6j6i7\i6j6i6Xj7i7j6i6i7j6j6i6i6j6i6j7i6j6i6j7i7j7i6i7i6j6i6j6i6i6j7j6j7i7j6i7j6i6i7i7j7i6i7Zi6i7i6j6i6i6j7i6j6i7i6i7i6j6i6j6i6j6i7i6j6i6j6j6j7i6i6i7i6i6j6j7i6i6i6i7i6i6j6[i7i6i6i6i6j6i7j7i7j7i7h5b4nHý񩜎z]^0g6[i7i6i6i6i6i7i6j6f5_1xV5kO׽]0f5j7j6i7d4nHkjNu\w]\7Z/c3h6i7j6i6i6i6j7i7\i6i7j6Xj7i6i7i7i7j6i7j6i6j7j6j6j7i7i6j6i7j7i7i7j7j6j6i7j7i6j6j7j7i6i7j6j6j6i7i6i7i7i7Yj6i6j6j7j7i6i7i7i6i6i6j7i7j6i7j7i6i6i7j7j7i7j6j6i7i6i6j6j6j7j7j6i7j7j7j6j6i6i6Zi6i6j6j6j6i6i7i7i6i6i6h5`2}_\/f5[i6j6j7i7i7j7j6j6f5`1{zoK'oQZ/b2h5j7j6e4qJƹitN(Y.c2h6i7j7i6j7j6i7i6\j7i7i6YXXYYYYYXYYYYXXYYYXXYZYZYZZZZYZZZZZZZZYYZYZYZZZZZYZZYYZYZZZYZZYZYZYYYZYZYYZYYYYYY[Z[[[[Z[[Z[ZxStuPY\\\[[\[\[ZzToLfFaBx[>tX=tX<`BlJwRXZ[XxSkJuZ;zTY[\[\]]]\]\]Xj7j7j6j7j7j6j6i7j7j7j7j6j7j6i7j6i7j7i7i6j7i7j7j6j7j7j6i7j7i7j7j7j7j7j6i6j7j7j7Zj7j7j7j6j7j7i7i7j7j7j7j7i7j7j7i6i7i7j7j6j7j7j6i7j7j7j7i7i7j6j7j7j6j6i7i7j7j6j7Yj6j7j7j7j6j7i7i7j7j7i7h6c3nHba2h6[j7j7j7i7j7j6j7i7g5^1˒b3g6i7f5^1zS*a@׷a2g5i7i6j6j6j7j7j7\j7i7j7Wj7j7j7j6i7i6j7j7i6j7j7j7j7i7i6j7i7i7j7j7j7i7j7j7i7j7i7i7j6j7j7j7j7j6j7j7j7j7i7Zj6j7j7j7i7j7j7j7i7j7j7j7j7j7j6j7j7j7i7j7i7j7j7j7j7j7j7i7j7j7i6i6j7j7j7j7j6j7j6Zj7j6j7j7j6j7j7j7j7i6i7j7g5c2\0Y/X.X.X-X.X.X.X.X.X.W.X.X.W-X.W.X.X.X.Y.\0a2e5i7[j7j7j7j7j7j7i6j7g5^1~`ׅcDvO)dD{W5~U,^0e4h6i7d4zVש~_@vO)Y.c3h6j7j7j6j7j7j7i7\j6i6i7Xi7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7Zj7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7i7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7Zi7j7j7j7j7j7j7j7j7j7j7j7i7h6f5d4d4e4e4e4e4d4c4c4c4c4c4c4c4c4b4c4c4c4d3e4g5h6j7[j7j7j7j7j7j7j7j7g5^1y]tN)vO)tO)y]Z/c3h6j7j7e4pIȽŻv}Y6Y.c2h6j7j7j7j7j7j7j7\j7j7j7Xj8j7j7j7j7j8k7j7j7j7j8j7j7j8j7j7j7j7j7j7j7j8j7j8j7j7j7j7j7k7j7j7j7j7j7j7j7j7j7Yj7j7j7j7k7j7j7j7j7j7j7j7j7j7j8j7j7j8j7j8j7j8j7j8j7j7j7j7j8j8j7k8k7j7j8j8j7j7j7Zj7j7j7j7j7j7j7j7k7j7k7j7i6f5b4`2a2b3f6h6f6a2^1]0^0]0]0^0]0]0]0]0]0]0^1a2c4g5j7[k7j7j7j8j7j7j7j7h6`3؈fExQ*gEʹa2h6j7j7j7f5^1{T+nJ&hƹǵa2h6j7k7j7j7j7j7k7\j7j7j8Xj7j7j7k8j8j7j8j7j7j7j7k7j8j7j7j8j7j7k7k8j7j7j7j7j7j7j8j7j7j7j7j7j7j7k7k7j8j8j7Yj7j7j7j7j8j7j7j8j8j8k8k8k7j7j7j7j7j7j7k7j7j7k7j8j7k7j7j8j7j7j7j7j7k8j7j7j7k7j7Zj7k7k7j7j8j7j7j7j7j7j8j7h5b2wU{_|_wUa2c4_2ay^w\w\w\w\w]w]w\w\w\w\w\x]|_nHc3h7\j7j7k7j8k7j7j7h6d4^1~U,ʼòY.c3h7j8k7j7f6`2V,kׯ{a2h7j7j7j7j7j7j8j8\j7k7j7Xj7j7j8j7j8j7j7j8j7k7k8j8j7j7j8k7k7j8k8k7j7k7k7k8j8j8j7k8k8j7j7j8j8j7j7k7j7j7k7Yk7k7j8j7j8j8k7j7j8k8k7j8j7j8k7j7j8j8j7j7k8j7j7j7k8k7k8k7j7j7j8j7j7k7j7j8j7k7k8Zk8k7k7j7j7j8k8j7j8j7j7k8f5Z0Ɇ[/_2W-]1h5[j7j7j7k8j8k7h7g6b2[/~V,vO*qM(oK(sN){T+]0f5j7k7j8k8f4{XƼ|^@tN)Z.d3i6j7j7j7j7j8k8j7\j8k7k8Xj8j8k8j8j8k7k8j7j8j8j7j8j8k7j8j7k7k7j7j7k7j8j7j8j7j7j8k8j7k7j8k8j8j7k8j7j7k8j8Yj7j8k7k7j8k7j7j8k8j8k7k8k7k8j8k8k7k7j7j8k8j7j8k7j8j7j8j7k7j8k7k8k8k7j7j8k7j8k7Zj7k8k7k7k8j7k7j8k8j8j7k8f5Y.ɃX.^1~U-\1g6\k7k8k7k8k8j7h6d4˴}d4j7j7k8i7e4duP+­c4h8l:m9l:l:l9l:m9[l:m:m:Xl:l:l:m:m:m9m:l9l:m:l9m9m:m:l:l:l:l:m9m:l9m:m:m:l:l9m:m9l9l9l9l9l:l:l9m:l:m9l9Yl9l:m9m:l:m9l9l:m9l:m:l:m9m9l9m:m:l:l9l:m:m:m:m:m:m9m9l:m:m9l9m:m:l9l9m9l9l9l9Ym9m9m:m9m9m:m9m:l9m:m9m:l9m:l9l:m9l:l:g7`2bayWd4j9j8e6Y0y䭙X/d4j9m:[l9l:m:m9l9l:l:l:k8j7g6c4c4d5g6i8k8l9m:m:m:m:g7_2xR+w]v]sO*}U-]2e5i8m:l9m:m9m:m:m:[m:l:l9Wm:m:m:m:m9l:l:l:m:m:m:m:m9m9m:m:l:m:m9m:m:l:m:m:m:m9l9m:l:m9l:l9m:m9l:l9m9l9m9Ym9m9m:m:m:m9m9l9m:l:l9l:l:l:m:m:m:l:l:m:m:l:l:m9m:l9l9l:l:m9m9l:m:l:m:m:m:m:l:Ym9m9m9m:m:l:l:m:m9m:m:m:m9m:m:l:l:m:m:j9g7d5c4e5h8k9l9j8e6^1X.zT-zS-W.^2d6j8m:l:[l:m:m:m9m:m:l:k9h7b3]2nJcnJ]2b4h7k8m:m:m:l:f7^2n̾c󴟉W.Y0V.f>e6k9m:k9g7_2buP+yR,yR,[8ˍ`3h7m:m:m:m:m:m:m:\m:m:m:Wm:m:m:m:m:m;m;m:m:m:m:m:m;m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:n:n;n:m:n:m:Yn:m:m;m:n:m:m:m;m:m;n:m:m:m:m:m:n;m:m:m;n:m:m:m:m:m:m:m:m:m:n;m:m:m:m:m:m:m:m:Zm:m:m:m;m:m:m:m:m:m:m:m:n:m:m:m:n:m:m:g7[0ʋ_2i8m:j8c4οX0_3d5_3X/Ϳb4j8l9i8d5[0hFfFzS-{T-ba3i8m:n:m:m:n;m:m:[n;m:m:Wn:m:m:n:n:n:n:m;m:n;m:m:m:m;n:m:m:n:n:n:m;m:m;m;m:m:m:m;m:m:m;n:n:m:m:m:m;n:m;Xn:m:m:m:m;m;m;m:n:m:n:m:n;m:n:n;m:m:m:m:m;m:m:m:m;m:m:n;m:m:m;m:m:n:m;m:m:m;m:Zm:n:n:m:m:m:m:n:n:m:m:n;n:m:m:m;n:n:m:f6W.Ɇ[1h8n:j8a4b_2g7l:g7^3pb4k8k9h7κɷd6j8m;m;m:n:m:m:n;\n:m:m:Wn:m:n:m:m;n:m:n:m;n;m;m;m;m:m;n:m;m:n:m;m:m;m:m:m:n:m;n:m:n;n:m;n:n:m;n;n:n;m:Ym:n;n:n;n;n;n:n:n:n:m:m:n;n;n;m:n;m:m;m;m;m:m:m:n:n;m:m:m;n:m:n:m:m:n:m;n:m;m;Zm;m:m;n;n:m;m:m;n;n;m:n:m:n:n;m;m;m;n;g7W/ʋ^2i9n:k9c4îîb5j9n:j9a5­íc4j8m:i8e6`4]1Z0[0[0\1]2b4g8l:n:n:m;n;n:m:m:[n:n;m;Wm;n;n:n;m;n;n;m:m;n;n;n;n:n:m;n:n;m;m;n;m;n;m;n;m:m;n;n:m;m:n;n:n:n;n;n;n:m;m;Ym:n;m:m;n;m:n;n:m;n:m:n:n;n:m;n;m:m;n:n;n;n:m;n;n;n:n:n:n;m;m;n:n:m;n;m;m;n:m:Zn:n;m;m;n;n:n;m;n;m;m:m:n:m;m;m;m:n;m;h8[1eE%䧖w]mPw^vp\GcD%rN*wR,dCzS,V/]2f7l:n;j9e6te5i8i8d6]2{Yd6k:n:l:j9h7g7f6f6e6e7g6h7l:m:n;n;n:n:n;m:n:[m:m;n;Wn:n;n;n:m;n:n;n:n;n;n:n:n:n;n;m;m:m;n;n;n;m:n;m;n;n;m;n;n;m;n:n;n;m:m;n;n;n;m;Xn;n:n;m;n;n;n;n;n;n:n;n;n;m;m;n:n;n;n:m;n;n;n;n;m:n;m;n;n;n;m;m;n;m;n;m;m;n:n;Zn;m;n:m:n;n;n;n;m;n;n;n;m;n;m;m;n;n;n:g8Y0÷sN*X/^3_4_2[1yR,t\wW5[1c5zTd6f7g7k:n:n;m9k9f7e6e6e6b4[1bsU[1e5l:n;n;m:l:k9k:l:l:l:l:m:n;n;m;n;n;n;n;n;n;[n;n:n;Wn;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;m;n;n;n;n;n;n;n:n;n;n;m;Xn;n;n;n;n;n;n;n:n;n;n;n;n;n;n;n;n;n;n;m;n;n;n;n;n;n;n;n;n;n;n;n;n;n;m;n;n;n;n;Zn;n;n;n;n;n;n;n;n;n;n;n;n:n;n;m;n;n;m:e6^:ĻvQ+`3h8k9k:k9i7d5W/ix^3k9[n;n;n;m;n;n;n;m;k9f7uMX.pd5l:m;k9g7e6b5a4a4a4b5d5g7k9m;n;n;n;n;n;n;n;[n:n;n;Wn;n;n;n;o;n;op=p=p=p=p=p=p=p>p=p=p=p=p=p=p=p=p=p>p=p>p=p>q=p=Xq=p=p=p=p=p=p>p=p=p=p=p>p=p=p>p=p=p=q=q=p=p=p=p=p=p=p=p=p=p=p=p>p=p=p=q=p>p=p=Yp=p=p=q=p=p=p=p=q>q=p=p=p=q=p=p=p=p=p=p>np=p=q=p=p=p=l;c6ʾzT.|U.|U.Ϳ­e7np=p>p=p=p=p>p>[p=p=q=Xp=p=p=p>q=p=p=q>p=p>p=p=p=q=p=p=p>p=p=p=p>p=p=q>p=p=p>p=p=p>p>p=p>p=p=q=p=p=p=Xp=q=p=p>p=p=p=q=p=p>p>p=p=p=p>p=p=p=p=p=p=p=q=p>p=p=p>p>p=q=p=p>q=p=p>p=p=p=p>Yp>q>q=p>p=p=p=q=p=p>p=p>q=p>p>p>q=p=p=o=i9]3zƺY1g8n=q=Zq=p=q=p=p=p=p=q>np>p=q=o=n=j:i8g8h9lp=p=p=[p=p=p=Wp=q=p=p>p>p=p=q=p>q>q>q=p>q>p>p=p>p=q=q>q=p>p=p=p=q>q=p>q=p=p>p=q>q=q>q>q>p>p=Xq>q>p=p=p>p=q=p=q=q>q>p>q>q=p=p=q>p=q=p>p>p>q=p>p>p=p=p>q=p=q=p=q>p>q=p=p>p>p>Zq=p>q=p=q=q=p=q>q>q>q=p=p=q>p=p=p=q>q>mq=q>q>q=oq>np=p=p>q=q=q>\p>p=q>Vq>p>q=p=p=q>q>p=q=q>q>p>q=p>p>p>p>q>q>q=p>q>p=q=q=q=p>q>p>p=q=p>q>q=p>p>p>q>q=Xp>p>p=p>p>p>p>p>q>q>p>q>p>q>p>q=p>p>p=p>p>p>q>q>q=q>q>q>q=p=q>q>q=q=p>q=p>p>q=Yp>q=p=p>q=q>p=q>p=q>p>q>q=p=q=q>q>q>q=i:[2w]zU.[1]2[3W0zY8Ļ`;f8o<[p>q>p>q=q=q=q>q>np=p=q=q=p>q>\q=p>p=Wq=q>q=q>q>p>q>p>q>q>q>q=q>p>q=q>q>q>q>q>q>q>q>q>q>q>q>q>p>q>p>p>q>q>q=q>q>q>q>Xq>q=p>q=p>p=p=q>q>p>q>p=q=q>p=q=p=p>q=q>q>q>q>q>q>p=q>q>q>q>q>q=q>q>q>q>q>q>q>Yq>q>q>q>q>q>p>q>q=q>q>q>q=q>p>p>q>q>o=f8iGbD]3f8k;l;k:i9a5wR,Ļ`5lq>q>q>q>q>p>p>oq>q>p=q=q>p>p>[q>q>q=Wq>q>q>q>q>q>q>q>q>p=q>q>q>q>q>q>q>q>p>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>Xq>q>p>q=q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>Yq>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>n=b6mZ1i:o=q>q>q>p>m;`5bEż]3k;Zq>q>q>q>q>q>q>q>n=g9W0W0Y1]3d7k;p>p>k;[ȽloL*z`_4i:pq>q>q>q>q>q>q>\q>q=q>Wq>q>q>q>q>q>q>q>q>q>q>q?q>q>q>q>q>q>q>r>q>q>q>q>q>q?q>q>q?q>q>r?q>q>q>q>r>q>q>Xq?q>q>q>q>r>q>q>q>q>r?q?q>r>q>q>q>q>q>r>q>q>q>q>q>r>q>q>q>r?q>q>q>q>q?q>q>q?q>Yr>q>q>q>q?q>q>q>r>q>q>q>q>q>q>r>q>q>m<`5cEb6n>r>q>q>q>q>p?g8yT.ɃZ2j:Zq>r>q?r>r>q>r>q>o>i9uNpM[2mJa6j:o=q>k;uN嶥bEz`_4i9p=q?q>q>q>q>q>q>r>\q>q>q>Vq>q?q>q>r>q>q?q>r>q?q>q>r>q?r?q>q>q>r>q>q>q>q>q>q>r>r>q>r>r>r?q>r>r?q>q>r?r?q>Xr?q>q>q?q>q>q?q?q>q>q>q>r>q>r>q?q?q>q>q>q?q>q>q?r>q?q>q?q>q>q>r?q?q?q>r>q>q?r>Xr>q>q>q>q?q>r>q>r>q>r>q>r?q>q?r>q>r?m<`5tP,d8o>q>q>r>q>q?q>g9|U.Ƀ[1j:Zq>q>q>r>q?q>q>q>or>mq>q>q>q?r?r>\q>q?r>Wr?q>q>r>r>q?q?q>q>q?r?r>q>q>q?r?q?q?q>q>r?q>r>r>q?r?r>r>r?r?q?r>r?r>r?q?q>r?q?Yq?q?r>q>q?q>r?q>r>q>q>q>r>r?q?r>q>q?r>r>r?q?q?r?q>q>q?r?q?r>q?q?r>r>r>q?q?q>r?Xr?q?r>r>q?r>q?q>q?r?r?r?q?r?q>q?r>r?or>q?q>r?q?p>f9_;Ʉ[2l<[q>r?q?r?q?r?q>q?o=e7lPhH'e8n=r?q>mq?r>r>r>r>r?q?[q>r?r?Wq?r?r?r?r?q?q?r?r?r?r>r?r>r>r?r?r?q?q>q?r?r>r>r>q>r?r>q?r>r>q>q?r?r?r?r?r>r>q>Xr>r?q>r?r?q?q?r?r?r?r?r>q>q>r>r>r>q>r?q>r?q?r>r>q>r?r>q?q?r>r?r?q>q>r?r?r?q?r?Xr?r?r?q?q>r?q?r?q?r?r?r?q>r>r?r?r?q>o>f9uVe8o>r?r>r>r?q>p=g8}`5n=Zr>q?r?r?r>r>r>q?or?n=h9`5Y1{U/xS-uVh9nr?q>[q?r?r?Wr?q?r?r?r?r?r?r?q?r?r?r>r?r?r?r>r?r?r?r?r?r>r?r?r?r?r?q>r?q?r>r>r>r?r>q?r>r?r?Wr?q?r?r?r?r?r?r?r?q?r?r?q?r>r?r?r?r?r?r?r?r?q?r>r?r?r?r?r?r?r?r?r?r?r?q?r>q?r?Yr?r?q?r?r>r?q?r>r?r?r?r>q?r?r?r?r?r?r?j;a6Ƶi:p>r?r>q?r?q>o=h9f̾ˡef9o>Zr?r?r?q?r?r?r?r?o=e8mKîi:o=r?r?p?l<]̿i:o>r?r?q>r?r?r?r?[r?q?r?Vr?r?r@r?r?r?r?r?r?r?r?r?r?s?r?r?r?r?r?r?r?r?r?r?r?r@r?r?r?r?r?r?r?r?r?r?r?r?r?Xr?r@r@r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r@r?r?s?s?r?r?r?r@r?r?r?r@r?r?r?r?r?r?r?Yr?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r@r?p>k;e8e8h9n=q>r?q?o=k;h9e8a6]4\3_5f8mlr?r?q?j;kC˿Ƶrgh^l

r?r?r?s?r@r?r?\r?r?r?Ws?r?r?r?s?s@r?r?r@r?r?r?r@s?r?r@r?r@s?r?s?r?r?r?r?r?s?r?r?r@r?r@r?r?r?r?r?r?r?Xr?r?r?s?r?s?s@r?r?r?r?r?r?r@r@r@r?r?s?r@r?r?r?r?r?r@s?r?r?s@s?r?r@r?r?r?s@r?s?Yr?s?s?s?r?r?r?r?r?r?r?r?r?r?r?s?r?r?s?r?o>n=k;lq>n=h:]4jI}b|ahGY1a6j;p>r?[s?r?r?r?r@r?r?p?i:{Z̾ɼz`|a~bwW`5j;q>r?r?q?j;~[zT.~W0]4b6g9mr?r?r?r@r?r@[r?r?s?Vr?r?r?r?s?r@r?s?r?r?r@r@s@s@s?s@s?s@s?r?s?r?r?s?s?r?r@r?r?s?s?r?s@r?s@s?r?r?s@Yr?s@s@r?s?r@r?r@r@r@r?r?r@r@r@s?r@s?r@r?s?r?r@s@r@s?r?r@r?r@s@r?r@s@s@r?s@r?r?Ys?r@r?s@s@s?s?s@r@s?s?r@s?r@s?s?s?r?s?r?n=j:e8f9i:n=n=f8b=Ǽʆb=e8o>r?Zr?r@r?r?r?r@s?o>h9i:o>s?r@q?kr@r@r?s@r?\r@s?r?Wr?r?s?s@s?r@r?r@s@r?r@r@s@s@s@s@r@s@s?s?r@r@s?r@s@s@r@s@s@s@s@r@s@r@r?r?r?r@s@Xr@r?r?s?s?r@r@s@r@s?r?r@s@s@r?r@s?r@r@s?r@r?r@r?r@s@s?s?s?r@s?s@r@s?s?s@s@r?r@Yr?s?r@s?r?s?s?s@s?r?s@r@s?s?s@s?s?r@s?p>i:pMtj:h:[3ׂZ2j;r>Yr@r?s@s@s?r?s@o=h:\4vR.zU/zU/®h9p>r@s?q?j;a6yXqM͖h:nYs@s?s@s@s?s@q>n=i9a5Z2|V0|U0|V0|V0~X0sMi:p=s@r@q?j;h˿|V0}W0}W0̿zU/d7llt@tAs@s@s@[s@t@sAWs@tAt@t@tAs@s@sAs@tAsAs@s@t@tAsAt@tAtAtAtAtAt@tAsAtAt@sAtAt@sAs@sAsAsAtAs@t@s@Wt@sAs@tAsAs@t@t@t@sAsAtAsAtAs@t@sAsAs@tAt@tAtAt@t@t@t@s@t@s@tAs@tAsAsAtAs@s@sAZtAtAsAtAsAt@sAt@t@s@tAsAtAs@sAsAs@tAp?b7uQ.d8d7|a{`d7p>j:|V0ʇ_4m>Zs@tAs@sAt@sAs@sAq>i:ِnKY2mLٵj:q?sAt@s@k<~[eFqO,vR.zU/|W0[2hj:p?sAt@sAtAt@[tAt@s@WsAtAsAsAt@tAtAt@tAt@s@tAs@t@sAs@tAt@tAt@tAtAsAtAsAsAt@sAtAs@tAtAsAsAt@tAtAsAt@XtAt@sAt@t@tAsAtAtAtAtAtAt@s@s@sAsAtAs@t@sAt@s@s@sAtAt@tAtAt@t@t@tAtAs@sAt@tAs@YtAs@tAt@t@tAt@sAtAsAtAs@sAsAtAtAt@s@o>b6x_]5_5z`}\:e8k;a7dFb7o?Zt@tAtAs@tAt@sAtAq>g9®qZ1[3Z2r®g:p?tAtAr@n>wRئ{~\;zU0xXi;p?tAsAtAtAtA\sAtAtAWtAtAtAtAtAsAtAtAtAtAtAtAtAsAtAtAtAtAt@tAsAtAtAt@tAtAtAtAt@tAtAtAtAtAsAsAsAt@tAXtAtAt@tAsAtAtAtAt@tAt@t@s@sAtAtAsAtAsAtAtAtAtAtAt@tAtAtAtAtAtAtAtAtAtAt@tAsAtAYtAt@tAsAtAsAtAtAtAtAtAtAtAt@sAt@sAtAp>e9oûqO,vR.t\sU6Z2]4uQ.Ļ];g:q?YtAtAtAtAtAtAtAtAq?h;˿Z1[2Y2îi:q?s@sAt@p?h;_5yU/nȼ\ktAtAt@sAtA[tAt@tAWtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtBtAtAtAuAtAtAtAtAtAtAtAWtAtAtAtBtAtAtAtAtAtAtAtAtAuAtAtAtAtAtAtAuAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAuAtAtAYtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAs@j;b>Șvt]xuzU/h:r@ZtAtAtAtAuAtAtAtAr@ks@tAtAtAtAtA[tAtAtAWtAtAtAuAuAtAuAtAuAtAtAtAtAtAtBtBtAtAuAtBtAuAtAtAuAtAtAtAtAuAtBtAtAtAtAtAtAtAuAWtAtAtAuAtBtAtAuAtBuAtBtAtAtAuAuAtAtBtBtAtAuBtBuAtBtAuAtAtAuAuAuBtBtAtAuAuAtAuAYuBtAtBuAtAtBtAtAuAuAuAtAtAtAtBtAtAtAtBn>`6e9q?ZtAtAtAtAuAtBtAtAsAm>b7a=n{b>c8n=s@tAr@n=g:}[دgH{V0_5g:o>r@uAtAtAtBtAuA[tAtAtBWtBtBtAuAtAtAuAtAtAtAtAtAtAtBtAuBtAuAtBtAuAtAtBuAuAtAuAtAuAuAuBtBuAuAtAtAtBtBuAWuBtBuAtAuAtAtAuAtBuAtBtBtAuAtBuAuAtBuAtAuBuAtBtBuAuAuAtAtBtBtAtBtBuBuBtBtBuBuBYtAuAuBuAtBtAuAtAtAtBtAuBtBuAtAuAuAuAuAq@j;e@e8p?ZuBtAtAtAtAtBtAtAs@k=hjo>t@sAo?h:a6c?iIuQ.wR/}W0\5e9m=sAtAuBtBuAuAtAuA\tBuAtBWuBuBtAuBtAtAtBuBtAuAtBuAuBuBuBuBtBtBtBuBuBtBtAuBtAuBuBtBuBuAuAuAtBuBuAuBuAuAtAXtBuAtBtBtBtAtAuAtBuBuBtBuAuBuBuBtAtBuAtBuBuAuBtAuBuBuBtBuBtBtBuAuAuAuBtBuBuBuBXuAuAtBtAuAuBuBtBtAuAuAuBuBuBuAtBuBuBtBuBq?j<^4}bǻh;r@ZuBuBuBuAuBtAuAuBq?j<}[ĴŰko?tAq@j<Κjs@ZuBuAtBtBuBuBtBuBr?g;®~}W0[4_6c8jn>n>n>n>m>n>n>m>m>n>p?sAuBZuBuBuBuBuBuBuBuBr@j<įY2^5b7f9k=p?tAsAm=®®l=sAuBuBuBuBuBuBuB[uBuBuBWuBuCuCuCuBuBuBuBvCuBuBuBuBuCuBuBvBuBuBvBuCuCuBuBuBvBuBuCvBuBuBuBuBuCuBuBvBuBvBWvBuBuBuBvBuBuBvBuBuBuBuBvBvBuCvBuBuBuBuCvCuCvBuBuCuBuBuBuBuBuBuBvBuBuBuBuBvCuBYvBuBuCuBuBuBvBuBuBuBvBuBtAr@p?o?n>n>n?n>o>n>n>n>n>n>n?n>n>n>n>n>o?o?n>o?q@sAuBZuBuBuBvBuBuBuBuBsAm=wQοp?tAtAp?alkjjjkkap?tAuCuBuBvBuCuBuB[vBuBuBWuBvCuCuBuCvBvCuCvBuBuBuBvCuCuBuBuCvBvBuBuBvBvBuBvCuBuCuCuCuBuCuBvCvCvBuBuBuCvBXuCuBvCuBuBuCuBuBuBuCvBvCvCvCvBuBuBuBuCuBuCuBuCuCuBuBuCuBvBuBvCvBuBuBvBvBvCuCuBYuCuBvCvBuCvCvBuCuCuBuBuCq@kg;f9f9h;jr@vBvCrAp?m=l=l=k=k=l=m=o?r@uBvCuCuBuCuBuBvB[uBuCuBVuBvCvCuBvCvBvCuCvCuCvCvCuCuCuBvCuCuBuCvCuCvCuCuCvBvBuBuBvCuBvCuBvCuBvCvCvCuBuCXvBuCvBuBvBvCvBvCvCvBuCvCuCuCvCvCvBuCvCuCvCuBvBuCuBvCvBvBuCuBuCvBvBuBvBuBvCuCuBYvBvBvBvCuBuCuCvBuBvCvCuAl=\˲jln?r@uBvBuBvBvCvCvCvCvCvB[vBvCvCWvBvBvCvBvCvCvCuCvCvCvCvCvCvCvCvCvCvCvCvBvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCXvCvCvBvCvCvCvCvCvCvCvCvCvCvCvCvCuCvCvCuCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvCvBvCYvCuCvCvCvCvCvCvCvCvCvCtBl=hi;sAZvCvCvCvCvCvCvCvCvCuBtBrAp@l=jsAvCvCuBrAm>f:c8uPb7e9jtBZvCvCvCvCvCwCvCvCuBrAo?jmD³楆hi;q@uBvCvCvDvCvCvCvC[vCwCvDVwCwDvCvCvCwCvDvDwCvDwCvCwDvCvDvDwDwCwCvDvDvDwCvCvCvCvDvCvDwCvCvDvDvCvDvCvCwCvDXvCvCwCvCvCvDvCvCwDwCwCvDvCvCvDwCvDvCvDvCvDvCvCvDvCvCvCvCvCwCvCvDvCvCwCvDvDvDwCYvCwDwCwCvCvCvDwCwDvCvCvCtBqAk=i;g;g;g;g;g;h;h;g;h;g;h;g;g;g;g;g;g;g;h;jkY3̿l>sAuBp?f:pM_6]5]k=sAvDvDwCvCvCwCwC[wCvCwCVvDvDwDvCvCwDwDwCwDvCvCwCwDwCvDwDwCvDvDvDwCwCvDwCvCwDwCvDvDwDvDwDvDwCwCwCwDwDwCXwCvCwDvDvDwCwDwCwCvDwCvDwDvDwCwDwCwCvCvCwDwCvCwCwDvDwCwDwDwCwCvCwDwDvCwDwCvDvCYwCwCwCwDwDvDvDwCvDwCvDwCvDuCuBuBuCuBtCsAsBq@p@n?k>jn>o@r@sBsAtBuCuBuCvCwD[vDvCwCwDvDvCvDvDsAi=¯oTlK+®i]]5d:kp@n@i;l>sCwDwDxDwDwDxEwD\wDwDwDWxExEwDwDxDwDwDwDwDwExEwDwDwExDwDwDxDwDwDwDxEwEwDwDwEwDwDwDwDwDwExDwDwDxDwDwDwDXwEwDwDwDwDwExDwDwDwEwEwDwDxDwDwDxEwEwDwDwExDwDwExDwDwEwEwExDwEwDxEwDxExDwDwDwDYwDwDwDwDwDwEwDwDwDxDxEwExDwDwEuCn?`7}}cd9pAuDwDxE[wExEwDxDxDwDxEwDtCl?͹o?uCwCp@h;_7_6`7d9d9b8b8f:o@uCxDwDwDwDwDxEwD\wDwDwDWwExDwExDwEwDwDxExDxDwEwExDwExExEwDxDxExDxDxEwDxEwExDxEwDxDxDxDwDxDxDwEwDxEwDxEXxDwExEwDwEwDwExDxEwDwExEwExDxDxDwDwDxExDwEwDxEwDwDwDxDwEwEwDxDwDwEwDwExEwDwDxEYxDwEwDwEwExExExDxDxDwDwEwEwDvCpAc9}׼Ĺ~cf:qBxDwE[wExDwDxExEwDxExEuCk=uhjk~VrAwCwCp@^ϼn@tCwDwDxDxDwExExE\xExExDVxExExExExExDwDxDwExExDwDwEwExDwExDxEwDwExDxExDxExDxEwDxDxEwDwEwExEwDxExExExDwEXwEwDxDwDxDwExExDwEwEwEwDxExExEwExDxDxDwExExExDwEwDxExExExEwDwExEwDxExEwExExDxDYxDxEwExDxDwDxDxDxExDxExEwExEsCh;dŹhI[4a8b9b9`7Y3{bb?j=tBwEZxExExExExExExDxEtCi=®r}W2\5b8g;l?sBwCwDq@`Ǽzb}behap@vCwEwDxEwExDxExE\xExDxEWxExDxExExExExExExDwDxExExExExExDxExDwDxExExExExExDxExExDxExExDxExExExExDxExExEXxExEwExDxDxDxEwDxExExExExExEwEwExEwExExExExExExEwExDwExExExExDxExExDwDxExExExEYwExExEwExExExExExExExExExEwDo@^6{[5huCyFxExFxExEyFxExEuCh<_=}hd:[4^=Ĵo?uDxExExFxEyEyExE[xExEyEWyFyFyFyEyFyFyEyExEyExEyExExFxFyFxFxEyEyEyFxFyEyFxEyEyEyFxFxExExEyEyFyExFyEyFyEXyEyExEyEyExExFxExEyEyEyFyExFyFxEyExEyEyFyEyFxFyFyFxEyEyFyFxExEyEyFxExEyEyFyExEYxFxExExEyEyExFyFxExFyExExFpA_6pe;tBxExFvEtCrBqBtCvExEwDq@`7ƺd:tCZxFxEyFxFyFyFxEyExEpAf;澬e:pAvExEvDpBiwEyEyFtCl?e:d9j=qAvDyFuDgvCyFvEj>jKʈ`8qBZyFyFyFyFyFyFyEwEqAf;rY4\5[4tŰm?vDxEqBlмpAwEyFyFyFyFxFyEyF\yFyFyFWzFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFzFyFyFyFyFyFyFyFyFyFyFyFyFyFyGyFyFyFyFyFyFyGyFXyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFzFyFyGyFzFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFYyFyFyFyFyFyFyFyFyFyFyFyFyFo@[4Ɇ^7qAyFyFwEl>fgtCzFzFyGzFyGzFzG\zFyGzGWyGyGzGzFyFzFzGzGzGyGzGyGzGzFzGyGzGzGzGzFzGzGzGzFzGyGyGzFyFzFzGyGyFyGzGyGzFzFyGXzGyGyGyGzGyGzGyGzGzFyFzGzFzFzFzGzGzGzGzGzGyGyFyGzFzGyFyFyFyFzGyGyGyGzGyFzGzFyFZyGzFzGzGzGzFyGyFzFzFzFzGyGrB_7jKk>xEyGwEj=eȯºƻc9tBZzFzFyGzGzFzGyGwFuCsCrAqApApAqAqBtDxFyGxFn@sWegC]7hΗi=sCzGzGzFzGzFzFyG\zFzGyFWzGzGzGzGzGzGzGzGzGzGzGzGzFzGzGzGyGyGzFzGzGzGzGzGzGzGzGzGyFyGzGzGzGzGzGyGzGzGzFXzGzGzGzGzGyGzGzGzGzGzGzGzGzGzFzGzGzGzGzFzGzGzFzGzGzGzGzGyGzGzGzGzFzGzGzGzGzGzGXzGzFzGzGzGzGzGzFzGzGzGzGzGtCd:ǽheguDzGyGzGzGzGzGzG[zFzGyGWzGzGzGzGzGzHzGzGzG{GzHzGzG{GzGzGzH{GzGzGzGzGzH{HzGzGzGzGzGzGzGzGzGzGzHzGzHzGzGXzGzGzGzHzGzG{GzGzGzGzGzGzGzGzGzH{GzGzGzGzHzGzGzGzGzGzGzGzGzGzG{GzGzGzGzGzGzGzGYzG{GzGzGzG{GzGzGzGzGzGzGzGvEj>qHuDzGxFn@ggl?wEZzG{G{GzGzGzGzH{GxGtDpAm?l?m?pAtDxGzGzGxFrBcѾk>j>wS`oAwE{GzGzGzGzGzGzG[zGzGzGWzHzGzHzGzGzGzG{HzG{G{G{HzHzH{GzGzGzGzHzGzG{GzGzGzGzHzGzH{G{HzGzG{G{HzGzG{GzG{HXzG{G{H{G{GzGzGzGzGzGzGzGzGzGzG{GzG{GzG{GzGzG{H{GzGzGzGzHzHzGzGzGzHzG{G{HzHzHzGYzGzG{G{GzGzGzGzGzGzGzGzHzGyGqBoHjwLvEzGzFrC_̏f;sByF[zHzGzGzGzHzGzGxGsCk>xTİxTk>sDxFzGzHwEtCrCuEsCoAh=go@tExG{GzHvEoBhm@rCvEyG|H{H{H{H[{H{H{H{H{H{IwEm@Ʋxl?vF{HvEl?xDzmAwF{H{H{H{H{H|H{H{H{H{H{H{H{H{H{I|H{H|H{H{H[{H{H{HW{H{H{H{H{H|I{H|H{I|H{H{I{H{H{H{H{H{I{I{H{H|H{H{H|H{H{H{H|H{I{I{H{H{H{H{H{H{H{HX{H{H{H{H{H{I|H{H{I{H{H{H|H{H|I{H{H{H|H{H|I{H|I{H|H{H|H|H{H{H{H{H{I|I{H|I{H{I{IY{H{H{H|H{H{H{H{I{H{H{H{H{HxEl?ɸ˾wY`8j>rCxF{H{H{H[{H|I|H{H{H{HwFoAȳDzn@uDyGuEm@ȳªoBxF{H|H{H{H{H{H|H{H|H{H{I{I{H|I{I{H|I|H{H|I[{H{H{HW|I|I{I|H{I{I{I{H|I|I|H{I|H|I|H{I{H|H{I{I{I{H|I{I|I|I{H{I|I|I|H|H|H{H|H|H{I{I{IY|I{I|I{H{I|H|H{I{H|I|H{H|H|I{I|H{I{I{I{H|I{H{I|I{H|H|H{I|H{H|H|I|H{I|I{H{H|H|IZ{H{I|H|I|H|H|H|I{I{I{H{H{IuDg=墊rc:pBxG{I{I[{I|I|H{H{H{HxGoAagmAl?h<}VrCxF|H{I{H{H|I|I{H{H|I|H{H|I{H|I|I{H|I{I{I|H[|H|H{IV|I|I|I|I{I|I|I|H|I|I|I{I{I{H|I|H|H|I{I|H|H|I|H{I|H|I|H{I|I|H{H|H|I|I{I{H{I|I|IX{H|I{I|I|I{I|H|I{I{H{I|H{H{I|I{I|I{I|I{I|H|I{I|I|I|I{I|H|H|I{H|I{I{I|H|I|I|H{IY|I|I|H{H{I{H|I|I|I{I{I|I{IvFh>ɽc:rCzG{IZ|I{H{I|I{I{HxFpBmjijkkkk~VsDzG{I|I{H|I{H{I|H|I{I|I|I|I{H{I|I{I{I|H|I|I\|I|I{HW|I|H|I{H|I|I{I|I|I|I|I|I|H|I{I|I|I|I|H|H|H|I|I{I|I{I{I|I|I|I|I|I|I|I{I|I|I|I|IY|I|I|I|I{I|I{I|I|I|I{I|H|I{H|I|I|I{I|I|I|I|I|I|I|I|I|H|I|I|H|I|I|H{I|H|H|I|I{IY|I{H{I|H|I|I|I|I|I|I|I|I|IwGoAi>uF|I[|I|I|H|I|I|IyGqCοuEzH|I|I|I{I|I|I|I|I|I|I|I|I|H|I|I|I|I{I|I{I\|I{I|IX|I|I|I|I|I|I|I|I|I|I|I|I|I|J|I|I|I|I|I|I|I|I|I|I|I|J|I}I|I|I|I|I|I|I|I}I|I|I|IX|I|J|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I}I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|I|IY|J|I|I|I|I|I|I}I|I|I|I|I|IzHvFpBk?h=g=g=g=g=g=g=g=g=g=gm@rCwF|H}I|I}J|I|I|I|I}J|J|J}I|I}I|I|I|I|I|I|I|I\}J|J|IW|J|J|I}J|I|J}J|J}I}J|I|I}J}J}J}I|J}I|I|J}I}I|J|J}J|I|J|I}I|J}I|I|J|J}J|J|J|J|IX|J|I}I|I}J|I|J|J|J}I}I|I}J|J|I}J|I}J|I}J}I}J|J}J|J}J|I|J|J}J|I}J}I}I}J|I}I}I|JZ}J}J|J|J|I|J|I}I}J|J}J}J|J|I|I}J}J}I}J|J|J}J}I|I}J}J|J}I}I}JzHsCa:ȼg=vFZ}J}J|J}J}I|J}I|IzIsDnİƲɴqxG{H}I}I|J}I}I|I}I}J}J}I|J|I|J}I|I}I|J}I}I}I\|J|J|IW|J}J}J|J|I}J|I|J}J}J|I}J}I}J|I}J|I}I}J}J|J|J|J}J}J|I}J|J}J|J}I|J}I}I|J}I}I|I|JY|J}I}J}J}I}J|I|J}J}J|J}J}I}I|I}J}J}I|I|J}J}J|J}J}J}J}J}J|J}J}J}J}I}I}J}I|J}J}JY}I}I}I}J}J}I}I}I}I|J|J|I}I|J}J}J}J}J|I}J|J}J}I|I}J|I}J}J|I|J}JzHj?~eˍd;vEZ}J}J}J}J}I}I}I|J|IuFnAxTkiik}WtD{I}J|J|I}J|J}J}J}J|I|I|J}I}J}J}I}J}I}I}I}J[}J}J}JW}J}J|I}I}J}J}J}J|I}I|J}J}J}J}J}J}J}J}J}J}J}I|J}J}J}I}J}I}J}J}J}J|J}J|J}J}J}J}JX}J}I}J|I}J}J}J|J}J|J}J}I}J|J}J}J}J}J}I}J}J}J|J}J}J}I|J}J}J}J}J}J}J}J}J}J|J}J}JZ|J}J}J}J}J}J}J|J|J}I}J}J}J|J}J}J}J}J}J}J|J}J}J}J}J}J}I|I}J}J}J{IoA|X4ʌc;uE[|J}J}J}J|J}J}J}J|IwFpBgi>i>i>i>h>h>i>i>i>g=d;]8|dgDrD|IZ}K}K~J~K}K~J}J}J|JsEpIͻtE{J}J~K~K}J~K~K}K}K~J~J~K}K~K~K~K~K~J}K~K~J[}K~K~KX~K~K~K}K~K}K~K~K~J~K}K~K~K~J~K~K}K~K~K~K~J~K~K~K~J~K~K}K~K}K~K~K~K}K~K~K~K~K~KX~K~J~K~K~K~K~K~K~K~K~K~K~K~K~K~K~K~J~K~K~J}K~K~K~K~K~K~K~K~K~K~K~K~K}K~K~K~K~JZ}K~K~K~K~K~K~K~K}J~K~K~K~KzHqCƻi>wF~K[~K~K~K~K~K~K~J}K{JtFi?]7zV4xV3~Z6a:l@vE|J}K~K~K~K~K~J~K~J~K~K}K~K~K~K~K~K~K~K~K~K\~K~K~KX~K~K~K~K~K~K~KK~K~K~K~K~K~K~K~K~K~LK~K~K~KK~K~K~K~K~K~K~K~K~K~K~K~K~K~K~K~KX~K~K~K~K~K~K~K~K~K~K~K~K~K~K~K~K~L~K~K~K~K~K~K~L~K~K~K~K~K~K~K~K~K~K~K~K~K~K~KZ~K~K~K~L~K~K~K~L~K~L~K~K~KxGj?ʾc;sE|J~K[~K~K~K~K~K~K~L~K|JtEȳxG|K~L~L~KL~K~K~K~K~K~K~K~K~K~L~K~K~K~K~K~K\~L~K~KYK~KK~KK~LL~K~L~K~K~K~LL~K~K~KK~L~K~K~KLK~KK~LK~K~K~LK~K~LL~K~K~K~KXL~KK~K~KK~K~K~LK~K~K~KK~LKK~KK~K~K~K~KKKK~K~K~K~K~K~L~LKKL~K~K~LY~K~K~K~K~K~K~K~KK~KK~K~KxHj@򲟌eqCyG~KK~LK~LK~L~KK~L~LKL~L~L~K~L~K~LK~K[K~L~KWK~LKLLLLL~KKLKKLL~L~LLLKK~K~LL~LKLL~L~LLKKK~LLKKLYK~KLLLLLKLL~LLLLLKL~LLKK~L~LK~KLL~LL~LKLL~LK~KKL~LZLKL~L~LLL~KK~KLKL}KxHpCi>e=e;dml}ZxJPQRRRRRQQRRQQRRQRRRRR^RRRYRRRRRRRRRQRRRRRRRRQRRRRRRRRRRRRRRRRRRRR[RRRRRRRRRQRRQRRRRRRRRRRRRRRRRRRRQRRRRQR[RRRRRRRRRRRRQRRRRRRRRRRRQQRRRQRRRRRRRRQ\RRRRRRRRPzK\e>ö|vIPRQRRRRRRRRRRRRRRRQRR^RRRYRRRRRRRRRRRRRRRRRRRRRSRRRRRSRSRSRSRSSRRZRRSRSRRRRRRRSRRRRRRRRRRRRRRRRRRRSRRRRRR[RRSRRRRRRRRSRRRRRSRRRRRRRRRRRSRRRRSRSRR\RRRRRSRSPxJĬɹeDaBȴvIPRRRRRRRRRSSRSSRRRRRS^RRRZSSRRSRRRRSRSRRSSRRSRRSSRSRRRRSRRSRSSRSR[SSRSRRSSSRRSRSSSSRRRRRRRRSRRSRRRRSRRSRR[SRRRRRRRRRSSRRRRRRRSRRSSRRSRSRRRSSRRSSR\RSSRRRRRPvJǴ͟tvU4qwJQRSRSRRRRSRRRRSRSRRSR]RSRYSRSRRRSSRRSRSSRSSRRRSRRRRSRRRSSRSSSRSSSZRRRSSSSRSSSSRRRSSSRRSRSRRRSSRRRRSRSRRRS[RSRRSSSRSSRRSRRRRRSRSSRRSRRSRSRSRRSSRSS]RRSRRSSRPxJq糓t{LRSRSSSRSSSRSSSRSSSRSS]RSSZSRSRSSSSSSSSSRSRSSSRSSRSSSRRSSSSSSSSRSSZSSRSRSSRSSRRSSSRSRSSRRRSSRSRRSSSRSSSSSR\SRSRSSRSRSSRSSSSRSSSRSRSSRSSSSSRSSSSSSS]SSSSSRSQOtIg?oQhilo^~MRSSSSSRSSSSSSRSSSSRSS^RSSZSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS[SSSSSSSSSSSSSSSS†SΆSՆSSSSSRSSSSSSSSSSRՆSɆSRS\SSSSSRSSSSSSSSSSSSSSSSRSSSSSSSSSSSSSSRS\SSSSSSSR}MnD°}Z8^:b=h@sG~NRSSSSSSSSSSSSSSSSSSSS^SSSZTSSSSSSSSSSSSSSSSTSSSSSTSSSTSSSSTTSSSSSZTTSSSSSSSSSTΆT܆SSSSSSSSSSSSSSSTSSSSSSTSST\نSʇSSSTSSSSSTTSSSSSTSSSSTSSSSTSSTSSSSSSST\TSSSSSSQyK踛{LQSSSSSSSSSSSSTSSTSTST^TSS[SSSTSSSSSSSTSTSSSSTTSTSSTSTSTTSSSSTSSSTZTSTSSSTS†S؇TTSSSSSTTSTTSSSTTTTSSTTSTSSTTT\TSSSЇSSSSSTSSSSSTSSSSTTSTSSTSSTSTTSTSTSS\STSTSSTRyKlC°`;b=b=ŷʵyLQSSTSSTTTTTSSSSSSSSST]TSS[SSTSTTSSTSTSTTTSSTSSTTTSTTSSSTTSTTTTSST[TTTTTS؇TTSTTTTSTSTTSSSTSTTTSSTSSTSTSSTSS\TSSTTTSԆTSSTTTTTTSTSTSTSTTSSTTSSTSTTTSSS]TTTSTTRQzLqG{YwVd>d>b=nszKQTSTTSSTTTTSTSSTTSSTS^STS[TSTSSTTTSTTTSTTTSTSTTTSTTTTTTTTSTTTSTTT[TTT͇TTSTTSSTTSTTTSSTTTTSTTTTTSSTTTTTTSTT\TTTTSTSTTSņTTTSTSTTTTTTTTTTTTTTTTTSTSSST]TTSTTTQPƱk|MRSSTTSTTTSTSTTTSSSTTS^STSZZY[[[[[[[[[[Z[[[[[[[[[[[[Z[[[[[[[[[[[[[[[֌[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\[\[\[\\\\\\\\Ѝ\\]]]]\]]]]\]]]]]]]\]]]]]]]]]]]]]]\Zv^ctqnptdW\]]]]\]]]]]]]]]^^^^^^^^^^ZTTTUTTTTTTTTTTTTTTTTTUTTTTTTTTTUTTTTTTT[TTTTTTTTTTTTTTTUTTTTTTTTUTTTTTTTTTTTUTT\UUTTTTTTTTTTTṪTTTUTTTUTUTTTTTTTTTTTTTUT]TTTTTTTRP{LpFoµµnqF}NSTTUTTUUUTTTTTTTTTTTT_TTTZUTTTUTTTUUTUTUUUTTUTTUTUTUTUTTTUTTTTUTT[UUTTUTTTTTTUTTTTTTTTTUTUTTUTUTTTUTTTTTT\TUTUTTTTUUTTTTTTɇTTTTTTTTUTTTTUUUUTUTUUT^UTTTTTTTR{N]IJnıt{NRUTTUTTUUUTTTTTTTUTTU^TTT[UTUTTUUTTUUTTTUUUTUTUUTTTTTTTTTTUTTTUTT\TTTTUTUTTTTUUTTTUTUTTUTTTUTUUUUTTTUUUUU[TTTTUTTUTTTUUTUTTUUTUTTUUTUTTUUTUUTTUUU]UUUUUTUUSzK˶hAjBhBʶyKRTTUUUUUTTUTUTUTTTUUU]UUU[UUTUUUUUUUUUUUTUUUTUUUUTTUUUUUTUUUUUUUU\UTUTUTTUTTUUUTTUUTUUUUTUTUUUTUTUUTUUTUT[UTUUTUTUUUTUUUUUTTTӈUTTUUTUUUTUTUUUUUTUT^UUUTUTUUSzL˶hAkCiAʶzLSUTUUUUTTUTUUUTUUUUUU^TUU[UUTUUUUUUUTUUTUUUUUUUUTUUUUUUUUUUUUUUUU[UUUUUUTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\UUUUUUUTTTUUUUUUUUUUUˆUUUUUUTTUTUUUTUUUU]TUUUUTUUS|NtIJnt|NRUUUUTUUUUUUUUUUUUUUU^TUTZUUUUUUUUVVUUUUVUUUUUUUUUVUUUUUUUUUUUUUU\UUVVVUUUUUUUUUUUUVUVUUUUUUUUUUUUUUUUUUU\UUUUUUVUUUUUUUVUUUUUUUΈUUUUUUUUUUUUUUUUU]UUUVUUUUT~OqGnµ§orG~OTUVUUUUUUUUUUVUUUVUUU^UUUZUUVUUUVUUUVUVUUUUUVUVUUUUVUUVUUVUUUUVUU[UUVVUUVVUUUUUUUUUUVVUUUVVUUUUUUVUVUUVVU]VVUUUUUUUUUUUUUVUVUVUUU߉VUVUUUUVUVUUVUUU]UUUUUUVUT}O]njjlq`QTVUUUUUUVUUUVUUUUVVUV^VUUZUVUUUVUUUUUVVUUVUVVUUUVVVVUUVVUUUUUVUUU[UUUUUVUUVVVUUUUVUVUUVVUUVUUUUVVUUUUVUUV\VUUUVVUVUUVVUUUUUVUVUVUUUUVVVUVUUUUVUVV]VVUUVVUVS{MƫQTUUUUUUUVUUUUUVVUVVUU_UVV[VVUUUUVVVUUVVVVUVVVUVVVVVUUVVVUUUVVUVVV[VVVUVUVUUUVUVUUVVVVUVUVUVVUUVUVVVVVVVVV]VVUVVVVVVUUVUUVVVVVUUVUUVVňUUVVUUVVVVVVV^UUVVVVVVRyLķc>iBoFtJ|NSUVVUVVVVVVUUVVVVUUVUV_VUUZVUVVUVVVVVUVVVVVVVVVVVUVUVVVVUUVVUVVVVV\VVVVVVVUUVVVVVVVVUVVVVVVVVVVVVVVVVUVVVU]VVVVVVVVVVVVVVVVVVVVUVVVVVVʉVVVVVVVVVVUV]VVVUVVVUSzMɵ{e?kCpFuI|NSUVUVVVVVVVVVVVVVVVVVV_UVV[VVVVVVVVVVVVVVVVVVVVVVVWVVVVVVVVVVVVVVV\VVVVVVWVVVVVVVVVVVVVWVVVVVWVVVVVVVVVVVV]VVVVVVVVVVWVVVVVVVVVVVVVVVVVωVVVVVVVVVVV]VVVVVVVVT}Oͽȵ˷ϺzRUVVVVWVVVVVVVVVVVVVVV_VVV[VVVVWVVVWVVWVVVVVVVVWWVWWVVVVVVVVVVVWVV\VWVVVVVVVVVVVWVWVVVVVWWVWVVVWWVVVWVVVVW]VWVWVWWVVWVVVVVWVWVVVWVVVVVVV͉VVVVVVWVVV]VVVVWWVVURzMj˶ɵ˷ϹzRVVVWVVVVWWWVVVVVVVVVV^WWW[VWVVWWWWVWVVVVVVVWVWVVWWWVVWWVVVWWWVVVW[VWVVWWVWWVWWWWVVVWVWWVVVVWVWWVVWWWVWWVV^VVVWVWVVWVVWVVWVWWVWWWVWVVWVVW̊VWWWWVWVW^VWVWVVVVVVS}OzMxLzL|NRTWVWVVVWVWWVVVVWVWVWWW_WWV[WWWWWWWVWVVVWWWVWWWVWWVVWWWVWVWWWVWVWWV\WVWVWVVWVVWVWWWWVWWWVVVWWVWWWWVVVWWWWVW\WVWWWWWVVWWWWWVVWWWWWVWWWWVWWVVʊWWWVVWWW]WWVVWWVWVWUUSSSSTUVWWVVVVWWVVWWWVWWWWVW_VWV\WWWWVWVWWWWWWWWWWWVWWWWWVWVWWWWWWWWVWVW\WWWWVVWWWWVWWVWWWWWVWWWVWWWWWWWWWWVWWWW]WWVWWWWWWWVWWWWVWWWWVWWWWVWWWWVWƊVWWWWWW^VVWWWWWWWWWWWWWWWWWWWWWWWWVWVWWWVVWWWWW^WWW\WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW\WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW]WXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXWWWWWWW^WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXWW_WWW\XWWXWWWXWWXWWWWWWWWWWWWWXWWWXWWWWWWWWWX]WWXXWXWWWWWXWWWWWXWWWWWWWWWXWWWWWWWWWWW]WWWXWXXWWWWXXWWWWWWXWWXXWWWWWXWWWWWXWWW^XWWWWWWWWWWXWWWWXWWXWWWWXWXWWWWWWXWWXWW_WWW\WXWWWWWWXWXXXXWWXWXWXXXWWWWXXWWXWXWXWWW\WWXXWWXXWWXXWWWWWWWXWWWXXWXXXXWWXWWXWWW]WXWXXWWXXWWWWWXXXWXWXWWWXWXWWWXWXWߋXWWXW_XWWWXWWXWXWWWXWXWWXXWXXXWWWWWXWWXWWWWXX_WXW\WXXXWWXWXXWWXWXXWXWXXXXWWWXXXWXXXXXXWWW\XWXWWWXWWXXXWWXWWXXWWXWWXWXXWXXXWWXWXWW]XWWXWXXWWXWWWWXXXXXWXXWWWXXXXXWXWXW΋WXWX^WWWXWWXWXWWXXWXWXWXWXXXXWWXWWXXXXXWXXXW^WWX\XXXXXXXXXXWXXXXWWXXXXXXXWXXXXXXWXXXWXXX\XXWXWXWXXWXXXXXWXWXWXXXXXWXXXXWXXXXXWXX]XXXXXXXXXXXXWXWXXXXXXXXXWXXXXWWXXXXX‹XXX_XWXXXXXXWXXXXWXXXXXWXXXXXXWXWXXXXXXWXXW_XXX\XXXXXXXXXXXXXXXXXXXXXXXXXWXXXXXXXXXXXXX]XXXWXXWXXWXXXXXXXXXXXXXXXWXXXXXXXXXXXXX]XXXXXXXXXXXXXWXXXXXXXXXXWXXXXXXXXXXXXXX^XXXXXXXXXXXXXXXXXXXXXXXXXXWXXXXXWXXXXXX_XWX\YXXYYXXXXXXXXXXYXXXXXXXXXXYXXXXXXXXXXYX]XXXXXXXYXYXXXYXXXXYXXXXYXXXXXXXXXYXXXXX]XXYYXXXXXXXYYXXXXXXXYYXXYXYXYXXXXXYXXӋXX^XYXXXYXXXXXXXXYXXXYXXXXXXXYXXXXXXXYXXXX_XXX\XXYXXXXXYYYXXYXXXXYXXXXXYXXXXXYYYYYYYXX^YXXYYYXXYXXXYXXYXXXXYYYXXXXXXXXXYYYYXYX^XYYYXXYXYXXYXXXXXXXYXXYYYXYXXYXXYYYXYXY_YXYXYXXXYYYYYXXXXYXXXXXXXXXXYXXXYXYXXYY_XXY]YXYYYYYXXYYXYYYYXXYYYXXYXYYYYYXYXXYYYYX^YXYYYXXXYXXYXXXYXXXXYYXYXYXXXYXXXXYYYXX^YYXYXXXYYYXXXXXYXYYYXXXYYXXXXYYXYYYXXXX^YXXYYXYXYXXXXYXXYYXYXYXXYYXYXYXXXYYYYXX_YYY\YXXYYXXYYYYYXYYYXXYXYYXYYYXYXYYYXXYYYYX]XYYYYYXYYYYXYYYXYYYYYXXYXYYXYXXXYXYYYXY^XYXYYYYYYXYYYXYYXYYYYYYYYYXYXXYYYYYYXYYʏ_YXYXYYYYYXYYXYYYYYYYYYYYYYYYYYYXYYYYYYY‘`YYX]YYYYYYYYYYYYYYYYYYYYXXYYYYXYYXYYYYYYYYY^YYYYYXXYYYYYYYYYYXYYYYYYYYXYYYYYYYYYYXY^YYYYYYYYYYYYYYYXYYYYYYYXYYYYYYYYYXYYYYY_YYYYYYYYYYYYYYYXXYYYYYYYYYYYYYYYYYYYYYX‘_YYY\YYYYYYYYYZYZYYYYYYYYYYZYYYYYYYYYYYYYYYY]YYYYYYYYYYYYYZYYYYYYYZYYYZYYYYYYYYYYYYY^YYYYYYYYYYYYYYYYYYYYZYYYYYYYYYYYYYYYYYY^̌YYYYZYYYYYYYYYYYYYYYYYZYZZYYYYYYYYYYYYY‘`YYY\YYZYYZYYYYZYZYYYYYZYYYYYYYYYYYYZYYYZYYZ^YYZYYZYYZZYYZZYYYYYYYYYYYYYYYZYYYYZYYZY^YYYYYZYYZYYYZYYYYZZYYZYYYYYYYZZYZYYYYYY^YYYZYZYYYYZYZYYYYYYZYYYZYYZYYYZZYYYYYYY_YYY\YYYYYZYYYYYYYZZZYZYZYYYZYYZZYZZYZYZYYYZ^YZYYYYYYZYZYZZYZZYZYYZYYZZZYYYYYZZZZYZY^YYYZYZYZZYYZYYZZYYZYYYZYZYYZYZYYZYYYYYZ^YʌYYZZYZZYZYYYZYZZZYYZYZYZZYYZYYZZZZYYYY_YZZ]ZZZYZZZZZZZYZZZZYZZZZZYYYZZYZZZZYYZZYZZ]YYZZZYZZZZZZZYZZYZZZZYYZZZZZZYZZYYZZZZZ_ZZYYZZYYZYYYZZYZZZZZYZYYYZYZYZYZZYYZZZY^YZYZZZYYZYYYYYYZYZYZZZYZZYZYYYYYZYZZZYZ`YZZ]YYYZZZYYZYZZZZZZZZZZZZZZZZZZZZZYZZYZZZZ^YZYZZZZZZZZYZZZZZZYYYZZZZZZZZZZZYZZYZYZ_ZZYZZZZZZZZZYZZZYZZZZYYZZZZZZZZZZYZZZZY_YZnjZZZZZZYZZZYZZZZZZZYZYZZYZZYZYZYZYZZZZ‘`ZZY]ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ^ZZZZZZZZZZZZZZZZZZZZZZZYZZZZZZZZZZZZZZZ_ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ_ZZZZZZZZZZZZZZZYZZZZZZZZZZZZZZZZZZZZZZZ‘`ZZZ]ZZZZZZZZZZZZZ[ZZZZZZZZZZZZZZZZZZZZ[ZZZZ_[ZZZZZZZZZZZZZZZZ[ZZZZZZZZZZZZZZZZZZZZZ_ZZZZZZZZZZZZZZZ[[ZZZZZZZZZZZ[ZZZZZZZZZZ_ZZZZZZZZZZZZZZ[ZZZZZZ[ZZZZZZ[ZZ[Z[ZZZZZÑ`Z[Z]ZZ[Z[[ZZZ[ZZZZZZ[ZZZZ[[Z[[ZZZ[ZZ[Z[ZZZZ^ZZZZZ[ZZZZZZZZ[Z[Z[ZZ[[Z[[ZZ[Z[ZZZZZZ[Z^ZZZ[[Z[[ZZ[[ZZZZ[ZZ[[ZZZ[ZZZ[ZZ[[ZZZZZ[_ZZZҎZZZ[ZZZZZ[ZZZZ[ZZZZZZZZZZZ[[ZZ[ZZ[Z[‘_ZZZ^[ZZZ[Z[[ZZZ[Z[[[[[ZZZ[[Z[Z[[[Z[[[[[[Z[Z][[[[ZZ[[[Z[[Z[ZZ[Z[Z[[ZZ[[ZZ[Z[[Z[[ZZZ[_[Z[[Z[ZZ[ZZZZZZZZ[ZZ[[Z[ZZ[Z[[[[[ZZ[Z[Z`ZZ[ZZZZ[[[[[Z[Z[[[ZZZ[Z[Z[ZZ[[Z[[[[[Z[[Ñ`[[[][[ZZZ[[Z[[[[[[[Z[[Z[[[[[ZZ[[Z[[[[ZZ[ZZ[^[[[ZZ[Z[Z[ZZZZ[Z[[[[[[[[[Z[[[[[[[[[Z[ZZ_Z[[[[[ZZ[ZZ[[[[[[ZZZ[[[Z[[[[[ZZZ[[ZZ[[Z_[[[[Ž[Z[[Z[[[[Z[[[ZZ[[ZZ[[[[[Z[[[ZZZ[[[[’_[[[^[Z[[[Z[[Z[[[[[[Z[Z[[[[[[[[[[[[[Z[[[[[[[^[[[[[Z[Z[[[Z[[[[Z[[[[Z[Z[ZZ[[[[[[[[[Z[[_[[[[[[[[[[[[[Z[[[[[Z[[[[[[[[[[[[[[Z[[[[`[[[ZЍ[[[[[[Z[[[[Z[[[[[[[[[Z[[[[[[[[[Z[[[Ò`[[[_[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[_[[[[[[[[[[\[[[[[[[[[[[[[[[[[[[[[[[[[[[[_[[[\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[`[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[Ò`\[\^\[[\[[\[[[[[[[[\[\[[[[[[\[[[[[[\[[[[\\\^\[[[[[\[\[[[[[[[[[[[[[[[[\[[[[[\\[[\[\[`[[[[\[[[[[[[[[[\[[[[[\\[[\[[[[[[[[[[[\\`\\\[[[[[[\[[[[[[[\[Ž\[[[[[[Ž\[[[[[[[[[[[[ēa[[[^^^_^^^^_^__^^^^_____^^_^_^^^^^^^^_^^^_____^^___^^^_^^^^__^^^^_^^^__^^_^^^^^^_````___``_```_`___``___`__`______`_```__````````ʑ`Ñ`Ò`Ñ`Ò`Ñ`Ñ`đ`Ē`Ñ`Ē`Ñ`Ò`Ñ`Ò`đ`đ`đ`Ē`Ñ`Ē`Ñ`Ē`Ñ`Ē`Ò`Ò`đ`đ`Ñ`Ó`Ò`Ē`Ò`Ó`ē`ÒaĒ`^\[[[\\\[[\\[[\\[[\\\[[\[[\[\[[\[[[[\\\\^\[[\[[[[\\[[[[[[[\[\\\\[[[\[\\\\[[[\\[[^\\\\\[[\\\\[\[\[[[[[\[[\[\[\\[[[[[[[[[\`\[\\[Տ\[Ž[\Ž\\[\[Ž[\\\\[Ž\\\[[Ž\\\Ž\[\\Ž\[\[[\\Ē`[\\_\\[\\[[[\\\\[\\\[\[\\\\\\\\[\[\[[\\\\\\_\[\\\\\\\\[\\[\\\\\\\\[\\[[[\\\\\[[\\\\_[\\\\\\[[[\\[[\\\\\[[\\\\\\\\[\\[[[[[[\`\\\\[\\\Ž\\\Ž[[\\[\\Ž\\\\Ž\\\\[Ž\[\[\\\Ž\Ž\\Ž\Ž\Ē`Ž\\\_\\\\\[[\\\\\\\\\\[\\\\\\\\\\\\\\\[[[\\\_[\\\\\\\\\\\\\\\\[\[\\\\\\\\\\\\\\\\\\\_[\\\\\\\\\\\\\\\\\\\\\\\\\\\[\\\\\\[\\\`[\\\\\\Ž\\\[\\Ž\\Ž\\\\[\\[\\\Ž[\\\\\\Ž\\\[\\đ`\\[^]\\\\\\\\\\\\\\\\\\\\\\\\]]\\\\\\\\\\\\_\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]\\\\\\_\\\\]\\\]\\\\\\\\\\\]\\\\\\\\\\\]\]\\\\`\\\\\\Ï\Ï\\]\Ï]\Ï\\\\\\\\\Ï\\\\\\\\\\\Ï\\]\\\Ē`\\\^]\\\]\]\\\\\\\\\]]\\\\]]\\\\\]]\\\]]\\\_\\]\\]]]]\\\\]\\]]\\\]\\\\\\\\\]\]\\\\\_\\\\]\]]]]\\\\\\\\\]\\]\]\\\\\]\\\\\\\\`]\\\\]ʏ\\Ï\\]\]\Ï\]\]\\\Ï\]\Ï\]Ï]Ð\]]\\\]\\\]Ï]Ē`\\Ï\_\\]\\]\\\]\\\\\\\\\\]\\]\\\]\\\\\\]\]\]_\]\\]\\\\]\\]\\]\]]\]\]]]\\\\\]\\\\\\]]`]\\]\]\\]]\]\\\]\\\]]\]\\\]\]]\]]\]\\]\`\]]\\\ԏ\]Ï]]]Ð]\\\\\\]]]Ï\Ð\\\Ï]Ï\]Ï\\\]\\]Ð\Ð]\\œ`Ð]\Ï]_]\]]\]]]]]]]\]]\]]]\]]]\]\]]]\]]\\\]]\\`\]]]\]]]\\]\]\]\\\]\\\\]\\]\]\\]\]]]]]\_\\\]]\\]]\]\]]\\]\\]\\]\\]\]\]\]]]]]]]\`\]]]\\ܐ]]Ð]Ð\\\\Ï\Ï]Ð]Ð]]Ï\Ð]\Ð\]Ð]Ð\Ï]Ï]Ï\Ï]Ð]Ï]]Ï]]\Ð\]\Ð]œaÐ\Ï\]^\]]]]]\]]]]]]]\]]]\\]]]]]]\]\\]\]\]]\\]_]]]\]]]\]]]]\]]]]\\]\]]]]]]]]]]]]\]]]]]`\]\]]]]]]\\]]\\]]]]\]]]]]]\]]]]]]]]]]]]`\\]]\]]]]Ð]Ð]Ð]Ð\Ï]\]]Ð]Ð]Ð]Ï\Ð]Ð]\]]Ð]Ð]Ï]Ð]]Ï]Ð\Ï]]Ï]Ï]Ð\Ï]ÓaÐ]]Ð\_]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\]]]]\]]]`]]\]]]]]]]]]\]]]]]]]]]\]]]]]\]]\]]]]]]]`]]]]]]]\]\]]]]]]]]]\]]]]]]]]]]]]]]]]]]]`]]]]]]]Ð]]Ð]Ð]Ð]Ð]Ð]]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]]Ð]Ï]Ð]Ð]]Ð]]]ēaÐ\Ð]Ð]_]]]]]^]^]]]]]^]^]]]]]]^^]]]]^]]]]]]^]]]`]^]]]^]]]]^]]]]^]]]]]]]]]^]]]]]]]]]]]]]`]]]]^]]]^]]]]]]^]]]]^]]]]]]]]]]]]]]^]]^`]]]]]]]Ð]Đ]Ð]Ð]Ð]Ð]Ð]Ð]Ñ]Ð]Ð]Ð]Đ]Ð]Ð]Ð]Ð]Đ]Ð]Ñ]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ñ]ēaÐ]Ð]Ñ^_]]^]^]]]]]]^]]]^]]]]]]]]^]]]]]]]]^]]^]]`]^]]^]]]]]]]]]]]]^]]]]]]^]]]]^]]]]]^]]^`]]]]^^]^]]^]]]]^]]^]]^]]]]]^]^^]]]]]]]]`]^]^^]]Ð]Ð]Đ]Ð]Đ]Ð]Ñ]Ð]Ð]Ð]Ð]Ð^Đ]Ñ]Ð]Đ]Ñ]Ð^Ñ^Ð]Đ]Ñ]Ñ]Ð]Ð]Đ]Ñ]Ñ]Ð]Ð]đ]Đ^œaÐ]Ð^Đ]`]x}_]^^]^^^]^^]^^]]]]^^`^]^]^]]^^]]^]]^]^]]^^]]^^^]]]]]]^^]^]]^`]]]]^]]]^]]]]^]^]]]^^]]^^]^^]]^]^^]^^]]`]^]]^^]Ð]đ]Ñ]Đ^Đ^Ñ^Ð]Ð^đ]Ñ]đ]đ]Ð^đ^Ð^Ð^đ]Ñ^Ñ]Ñ^Đ]Ð^Đ^Đ]đ^Ñ^Ñ]Ð]Ð]Đ^đ]Đ]ēbđ]Đ^Ð]d^]^^^^^^^]]^^]_]]^]]]^^^^]^^^^^^]^^^^]^^]^^]^]^^]^^]^^a^]]]^]^^]^^]]^^^]]^^^^^]]^]^^^^]^^^^^]]a^^^^]]^Ñ]Đ^Ð]đ]Ð]đ^đ^đ^Ð^đ]Đ]Ñ^đ^Ñ^Ð^Ð^Đ]Ñ^đ^đ]Ð^Đ]Đ]đ]đ^đ^đ^Ð^Đ^đ^đ^đ^œbÐ]đ^Ñ^z^]^^]]^^^^^_^^^^]^^^^^]^^]^^]^]^^]]^^]^^^]^^^^^^^^^a^^^]^^^^^^^^^^^^^]^]]^]]^^^^^^]^^^^^^^^`^^^]^^^Đ^đ]Đ^Đ^Ñ^đ^đ^đ^Đ]đ^đ^Ð^Ñ]đ^đ^Ñ^đ]đ]đ]đ^đ^Ñ^Ð^Ñ^đ^Ñ^đ^Đ^Đ]đ^Ñ^đ^Ĕbđ^đ^Ñ]]^^^^^^^_]^]^^^^^^^^]]^^^^^^^^^^]^]]^^^]^^^]^^^^a^^^^^^]^^]^^^^]^^^^^^^^^]^^^^^]^^^]^^^^a^^^]^^^đ^đ^đ^đ^đ]đ^đ^đ^đ^đ^đ^đ]đ^Ñ^đ^đ^Đ^đ^đ^đ^đ^đ^đ]Đ]Đ]đ^Đ^Ñ^Đ^đ^đ^đ^œađ^đ^đ^g^^^^^`_^^^^^_^^^^^^^^^^^^^^^^_^^_^^^^^^^^^^^^a^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^_a^^^^^^_đ^đ^đ^đ_ő^đ_đ^đ^đ^đ^đ^đ^đ^Ē^đ_đ^đ^đ^đ^đ^đ^đ^đ^đ^Ē^đ^đ^đ^đ^đ^đ^đ^œađ^đ^đ^z^^^`^^^^^^__^_^^^^^^^^_^^__^^^_^__^^^_^^^^^a_^^^^^^^^_^^^^^__^^^^^^^^^^^^_^^^_^^_^^a^^^^_^^đ^Ē^ő^ő^đ^Œ^đ_đ^đ^đ^đ^đ^đ^đ_Ē^đ^Ē_đ^đ_ő_đ^đ^đ^Ē^đ^đ^đ^ő^đ^ő^Ē_ő^Ŕađ^Œ_Ē^w^`__^_^___^^^^__^^^^_^^^_^__^^^^_^^^^^___a^__^_^_^^^^^__^^_^_^^^_^^^^_^_^___^^_^_a_^^^^_^ő_Ē^Ē^đ_đ^đ^đ^Œ^Ē^đ^đ^Ē^Ē^Ē_ő_ő^Ē^Œ_đ_Ē^đ_đ^đ^đ^Œ^Ē^ő^đ_đ_đ^Ē^Œ_ŔbĒ^Ē_ő^u^^^_________^___^_^^_^^_^^___^__^^^^___`^__^_^^_^^^___^____^^_^_^^___^_^_^^_^^^b^^^^^^^Œ_ő_Ē^Œ^Œ^đ_ő_Œ_Œ_Œ^Ē_Œ_Œ^ő_Ē^đ_ő_Ē_Œ_Ē^đ_ő_ő^Œ^ő_Ē^Œ^ő_Œ^đ^Ē_Œ_Ŕbđ_Ē^Œ_d_^_^_^^__^_^^_^_^__^__^^^_______^____a^^_^^__________^___^__^__^__^__________a_^____^Œ^Œ^ő_Ē_Œ_Œ_Ē^Œ^ő^Œ_ő_Œ_ő_đ_Œ_đ^Œ^Œ^ő_Œ_Œ_ő_Œ^Œ_Ē_Œ_ő^Œ_Œ_ő_Œ_Œ^ƔbĒ^Œ_Œ____________^___^^^____^_______^^___^a^____^_______^_____________^___^___^___b__^____Œ^Œ_Ē_Œ_Œ_Ē_Œ^Œ_Œ_Ē_Œ_Œ_Œ_Œ^Œ_ő_Œ_ő_Œ_Œ_Œ_Œ^Œ^Œ_Œ_ő_Œ_Œ^Ē_Œ^Œ^ő_Ɣađ_Œ_Œ^j__________________________________a______________________^________________b______ݒ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ^Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_ƔbŒ_Œ_Œ________`_________``______________b`____`____________```____`____`______`_b____`_Ւ_Œ_Œ_Œ_Œ`Œ_Œ_œ_Œ_œ_œ_œ_Œ_Œ_Œ_œ_ƒ_Œ_Œ_Œ_Œ_Œ_ƒ_œ_œ_Œ`œ_Œ_Œ_Œ_Œ`œ`Œ`ƕbŒ_Œ`Œ_`___`_____`___```__``__`_`____`_a`__``_`____`_``___``_`_``____``__`_____b_`_`_`͒_Œ_Œ_œ`Ɠ`œ_Œ_ƒ_ƒ`œ_ƒ`ƒ_Œ_Œ`Œ_Œ_Œ`Œ_Œ_Œ_ƒ`Ɠ_œ`œ`Œ`Ɠ_Œ_Œ_Œ_Œ`Œ_Œ`Œ_ǔbŒ`ƒ_Œ_i```___`_```_``_``________````_a`_____`_``__`_``__``___```_`_`__``_````b`____`ƒ_Ɠ`Œ_Ɠ`ƒ_Ɠ`Ɠ`œ`ƒ_Œ`ƒ`Ɠ_Œ`Ɠ_ƒ_œ_œ`œ_œ`Œ`œ_Œ`œ_ƒ`Œ`Ɠ`Ɠ`ƒ_Œ`Ɠ`Œ`Ɠ`Œ_ǕbŒ`Œ_Ɠ`ׯΫs```````__```_``_`___````__`_`a``_`__`___``___``_`_```__`__```_`_```_`b```__`Ɠ`œ`œ`Ɠ`ƒ_œ`ƒ`Ɠ`Œ`œ`Ɠ`Ɠ_Ɠ_œ`Ɠ`Ɠ_Ɠ`Ɠ`Ɠ`œ`Ɠ`Ɠ_Ɠ_œ_Ɠ`ƒ_Œ`Œ`ƒ`Ɠ`Ɠ_ƒ_œ_ƕbœ`ƒ_ƒ`r{````_`_```_``_````````````_`b``_``````__`````___`_``_`___````````_``b```_``Ɠ`Ɠ`Œ`Ɠ`œ`Ɠ`ƒ`Ɠ_Ɠ`Ɠ`Ɠ`Ɠ`œ`Ɠ_Ɠ`Ɠ`Ɠ`Œ`ƒ_Ɠ`Ɠ`Ɠ`ƒ`Ɠ`œ`Ɠ`œ`ƒ_Ɠ`Ɠ`ƒ`Ɠ`Ɠ_ǕbŒ`Ɠ`Ɠ`i~````````_`````_````````````b````````_`_```````````````_`````__`````b`````ד`Ɠ`œ_œ`Ɠ`œ`Ɠ`ƒ`Ɠ`œ`ƒ_Ɠ`ƒ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ_Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`œ`ǕbƓ`Ɠ`ƒ`ď-``````a```````````````````a`````a`````````````````a```````````````b```a`ʓ`Ɠ`Ɠ`Ɠ`ƓaƓ`Ɠ`Ɠ`Ɠ`Ɣ`Ɠ`Ɣ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ɠ`Ǔ`Ɠ`Ɠ`Ɠ`Ɣ`Ɠ`Ɠ`Ɠ`Ɠ`Ɣ`Ɠ`Ɠ`ƓaƓ`ƓaƓ`ǕbƓ`Ɠ`Ɠ`߰vi``````````a`````aa`a`a```aaa`````````a```````````a`a````````aa```b`````Ɠ`ƓaƓ`Ɣ`Ɠ`Ǔ`Ɠ`ǔ`Ɣ`Ɣ`Ɠ`Ɠ`Ɣ`Ɠ`Ɣ`ƓaƓaƔ`ƓaƓ`Ɠ`Ǔ`Ɣ`Ɠ`Ǔ`Ɠ`Ɣ`Ɠaǔ`Ɣ`Ǔ`Ɠ`Ɠ`Ɠ`ǕbƓ`ƓaƓavv݁ooffjjǼr=;<;O9bbabbabbbabababbbcabbbbbbbbbabbbabbbbbbbbbbbbbbbbabbaabaacaȕaȕbȕbȕbȕbȕbǕbǕaȕbȕbȔbȕaȕbȕbȕaȕbȕaȕbȕaȕbȕaǕbȕbȔaȕaȕbȕbȔaȕaȕbǕbȕaȔbȔbȕbȕbȕbȕbɖdȕaȕaȕaNff<<<<ExbbbbbccbcbcbbcccbbcbbbbbbbbbcbcbbbbbbbcbcbbcbbbbcbbbbbbȖcɕbɕcȖbȕcɖbȕcɕbȖbɕbȕbȕbȕcȕbȕbɕbȕbȖbȕbȕcȕbȖcɕbȕbȕcȕbɕbȕbɕbȕcȕbȕbȕbȕbȕbɕbȖbɖbȕbɖbȖcɕbɕbȕcۀf݂ڜffffffE<<<<<WNcbbbccbbcbbcbbdbbbbbcbcbbcccbbcbcbcbbbccbccbcbbccccbcɖcɗdȖbȕbɕbɕbɖbȕbɖbȕcȕcɕbȕcȖbɕcɖbɖbȕcɕbȕbɕcɕcɕbȖbɕcȖcɕcȖcȖbȕbɕcɖbɖbɕbɖcȕbȖbȖbȖbɕcȕcȖcȕcȖbȖcaf<<<<<>h~cbbcbccccccccdbccccccccbcbccccccccbcccccbbcccccbcc̖cɖcɖcɗdɖbɕcɕcȖcɖcɖcɖcɖcȖbɖcɖcɖcɖcȖcɖcɖcɖcɕcɖcȖcɖcɖbɖbɖcȕcɖcɕcɖcɖcɖbɕcɕbȖbɖcɖbȖcȖbɖcɖcɗdɖcɖbɖcɟɖɖɖɖɖɖZf݃ooffffffffŻQ<<<<<<<<aicccdccccccccdccccccccccccccccccccdccccccccccccccɖcɖcɖcɖcɖdɖcɖcɖcɖcɗcɖcɗcɖdɖcɖcɖdɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcɖcʖcɖcɖcɖcɖcɖcɖcɖcɖcɗdɖcɖcɗcɺɟɖɖɖɖʖɖɖɖɖʖɖɖɖ̗rf<<<<<<<X$Yddccccccccdccddcddddccdccccccccccddccddccccc˗dɖdʗcʗcʖcɖcʗdɗcʗcɗcɖdɖcɗdɖcɖcɖcɖdɗcɖcʖcɗcɗcɗcɖdɖcɖdɖdɖcɖcɖcɖdʖcʖcɖcɗcʗcɖcɖcɖcɖdɗcɖdɖcɗcʖcɖcʗdʖdʖdɖdʗʖɗɖɗɗɗɖɗɖɖɗʗɗɖʖɗɖɗɗɗɗ֖j>f݃ڜffffffffffzzai<<<<<<<<>i1bddcdddddddccdcdcdcddddcdcdddddcdddcdՖcɗdɗcɗcɗdʖdʗcɗcʗdʗdʖdɗcɗdɗcʖdʗdʗcʖcʗcɗdɗdɖdʖcʖdɗdʗdʖcɖcʗdɖdʗdɗdɖdɗcʗdʖdʖcɖdʗcʖcɖdɗdʖdʗdʖdɗdɖdʗcʗdɗeɗdʗdʗdʗɖʗɖʗʗʖɗʗʗʗʗʖʗʗʗʗʗʖʗʗɗɗʗɖߗh=f<<<<<<<<JLdcddecddcdddcdcddddddddcdcddddddcdԗcʗdʖdʖdʗdʗdʗcʗcʗcɗdʗeʖdʗdʖdʖdʗdʗdʗdʗdʗdɖdɗdʖcʗdɗdʗcɗdɗcʗcʗdʗcɗdʖdɗcɖdʗdɗdʗdɖcʗcʗdʖcɗdʗdɗdɖdʖdʗdʗdɗdʗeʗdʗdʗcʖʗʖʗʗʗʗʗʗʗɖʗʗʗʗʖʗʗʗʗʖʗɗɗʗʗߗef݄ooffffffffffffҩt><<<=<<<<<@p:ddddddedddddddddededdddd̘dʗeʗdʘdʗdʘdʗdʘdʗdʘdʗdʗdʗdʗeʗeʗdʘdʗdʗdʗdʗdʗeʗdʗdʗd˗dʗd˘dʘdʗd˗dʘdʗdʗdʗeʘdʗdʗeʗdʗeʗeʗdʗd˗eʗdʘdʗdʗdʗdʗdʗdʗdʘdʘeʗe˘dʗdʗeʗʘ˗ʗʘʗ˘ʘʘʗʘʗʘʗʗʗʗʗ˘ʗ˗˗˗ʘ˗ʗʗ˗ʘ˗̗qBfi1bedeeddddeededdedd՘dʘd˗e˘dʗe˗e˘d˘dʘd˗eʗeʗdʗe˘d˗eʗeʗdʗe˗eʗeʗd˘dʘeʗdʗeʗdʗeʗe˘eʗe˘d˘d˗dʘeʗdʗdʗd˘eʗe˗dʗe˗dʗe˘d˗dʘdʘd˗eʗd˗eʗdʗdʘd˘dʗd˗d˗eʗfʘdʗdʗe˗˘ʗʘʗʘ˘ʗ˗˘˘ʘ˘˗˗ʗ˘˗˗˗ʗ˘ʗʗʗ˗˘˘ʘʗ˗˘ʘҘWf=f?<==<<===<==b*_deeddeeeeeeژeʘeʘd˗d˗e˗e˘dʘdʘeʘdʘd˗d˗eʘeʗd˘e˗e˘eʗe˗eʗeʘe˘d˘e˗d˘eʘd˘e˗dʘeʘd˗e˗eʘdʗdʗeʗeʘeʘd˘dʘd˗e˘d˘e˘eʗe˗d˘d˘e˘d˘d˗dʘdʘd˘d˗eʘd˗e˗d˗e˘f˗e˗dʘe˘˘˘˘˘ʘ˗ʘʗʘʗʗ˘ʗ˗˘ʘʘʗ˗ʘ˘˗˘˘˘ʘʗ˘˗˘˘˘ʗ˘˗јpf?============QԉT˘e˘e˘e˘e˘e˙e˘e˘e˘f˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e̘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘e˘e˙˘̘˘˘˘̘˘˘˘˘˘̘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˘˙̙˘˘˘˘˙̘˘˘Ԙ|Jf=f=f=f=f=f=tssfffffffffff/f(f(CeeeeePG ============?j2̖c˘e˘f˘e˘e˙e˘e˘f˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘e˘e˘e˘e̘e˘e˘e˘e˘e˙f˘e˘e˘e̘e˘e˘e˘e˙f˘e˘e˘e˘e˘e˘e˘e˘e˘e˘f˘e˘f˘e˘f˙e˘e˘e˙e˘e˘e˘f˘e˘e˘f˘˘̘˘˘˙˙˘˘̙˘̘˘˘̘˘˘˘˘˘˘˘˘̙˘˙˘˘˘˘˘˘̘˘˘˘˘˘˘˘˙˘˙˙̘˘͙ޘۃf=f=f=f=f=f=j?݄oofffffffff0f(f(f(>deffe[R=============K׃M˙e̘e̙e˘e˙e˙e˘e˘e˘e˘e̘f˘e˘e˙f˘e˘f˘e˙e̘f˘e˘e˘e˘g˙e˘e̘e˙f˘e˘f˘e˘e˘e˙e̘e˘e˘f˘e̘e˘e˘f˘e˘e˙f˘e˘e˘f˘e˘e˘f˘f˘e˘f˘e˘e̙e˘e˘e˘e̘e̘e˙e̘e˘g˘e˘e˘e˘˙˘˘̙˘˘˘˙˘˘˘̘˘˘˙˙˘˙̘˙˘˘˙˙˙˘˘̙̘̘˘˘˘˘˘˘̘˙̘˙˘˘˘̘˘˘˘̙͘ܙbf=f=f=f=f=f=tF׳jjfffffff0f(f)f(f)8beefedb*==============b*Γ_̘e̘e˘e˘e˘e˘f̘e̘e˙e̙e˘e˘e˙f˘e˘f˘e˘f̘e˙e˘e˘g˘e˘e̘e˙e̘e˙f˙e˙e˘f˘f˘f˘e̘f̘e̙e˙e˘e̘f̘e˘e˘e˙f̙e˘e̙e̘e̘e˘e˙e˘e˙e˙e˙e˘f˘e˘e˙f˙e˘e˘f˘f˘e̙e̘̙̘˙̘˙˙̘˘˘˘˙˘˘̘̙̙˘̘̙˘˘˙˘˘̙̘˘̘˘˘̙˘̙̘̘̙˙̙˘˘˙̘̙̘˙˘˘˘̙̙˘̙ԙٓnGc=f=f=f=f=f=Qɼfffffff.f(f(f(f(f(4`efޙeҘf˘eu>?=============G zD̘f˘f̙f̙e̘e˙e˘e˙e̘f˘f˘e˘e˘e̙e̙e̙e̘e˘f˙e˘f̘e̙f˙f˘e˘e˙f˘e˘f˘e˘f̘e̘f̘e˘e˙f̘e˘e˙f̘e˘e̙e˘e˘f̘e˘e˘e˘e˘f̙f̘e˘e˘f̘e̘e˙e˘f˘e̘e˘e˘g˘f˘e̘e˘̙˙̙̘̙̙˘̘̘˘˘˙̘˘˙̘˙̙˘˙̘̙̘˘̙̙˙˘̙˘̘̘˙˙˘̘˘˙˘˘˘˘˙˙̘˙˘˙̘˙˙˘˘̙{Q=R=U=Y=\=^=`=`ƻdfbfb,b(`)^([(X(V)b0\˙e̘f˘f˙f̘e׆PG ==============YюZ̙e̘f̘e̙f˘e̘f˘e˘f̙e˙e˙e˙e˘f̙e˘e˙f̘e˙e˙f̘f˘e˘f̙f˙e˙e̘e˙f̘e̙e˘e˘f˙f˘f˙f˙f̘f̙f̘f̙f̘f˙e̙f̘e̙e˘f˘e˙f˘f˘e̙f˘e̙e˘f̘e̙f˘e̘f˙f˘e˘e̘e˘̘̙˙̘˘˙˘̘̙̙̙̙̙̙̙̙˙̙̘̙˘˙˙̙˙̙̘̘̙˙̙̙˙̘̘̙̙˙˘˙̙̘̘̙̘̘̘˙̘̙˘̘̙˘˘y[Q=R=R=R=R=Q=R=t̙˙̘̙ϮRfR)R)R(Q(R)R)R(Q)\.Y̙f˘e̙e̙e̙fѐ\R==============Ar;˘f̙f̙f̘f˘f̙f̘e˙f˙e˙e̘e̘f̘f˙e̙e̙e̘f̙e˙e˙f̙e̙e˙e̙e̘e˙e̙f̘e̘f̙f̙f˘e̙e̘f˘e̘f˘e˘f̘f˘f̙e̘f̘f˙e˘f˙f˘e̙f̘f̙f˘e̙f˘e˙f̘f̙e̙f̘e̘e̙e˘˙˙̘̙̙̘̙̘̙̘̘˙̘̘̙̘̙̙˙˙˘˙˙̙̘̘̘̙̙̘˙̙̙̙̘̘̘̙̙̙˙̘˙̘̙̘˙̙̙̙̙̘̘̙˙[CR=R=Q=Q=R=R=U?˘̙̙̙}ۙR(R(R(R)R(R(R)R(R)X,U̙f˙e̘e̙e˙f͖cb*===============RԊU̘e̘f̘f˘f̙f̙e̘f˘f̙f̙e̙e˙e˙e̙e̙f̙e̘e̙f˙e˘f̙e˘f̘f̙e̙f̘f̘e̙e̙e̙e̙f̘e˙f̙f̙f̘e̘f̘f̘e˙f˙e̘e˙f̙f˘f˙e˙f̙e̘f̙f̙f˙f˙f̙e̙g̙f̙f̙e̘̙̘̙̘̙˙˘˙̘̘̙˙˙̙˘˙˘̘̘˙̘̙˘˘̙̙̙˘̙̙̙˙˙̙˙̙̙˙̘˘̙̙̙̙˘̙̘̙̙̙̙̘̙˙̘̙tR=R=Q=R=R=R=R=\F̙̙̙ɚq9R)R(Q)R)R)Q)R)Q)R)U*P˙f̙f̘e˘e̙e̙fu>?==============?j2͗c̙e̙e̙f̘f̙e̘e̙f̙f̘f̘f˘f̙e˘f˙f̘f˙f˘f̙f̙f̙f̘f̙e̙f˙f̙f̙e̙e̙e̙e̙e̘f̘f˘f̙f̙f̙f˙e̙f̙f̙f̘f˙f̙f̘e̙f̙f̙f̙e˙f̙f̘f̙f˙g̙f̘f̙f̙̙˙̙˙˙˘̙̙̙̘̙̙̙̘̙̙̙˙̙̘̘̙̙̙̘̙̙̙˙̘̙˙̙̙˙̘̙̙̘̙̙̙̙̙̘̙˙̙˙̙̙˘̘̙̙̘̙pTR=Q=Q=R=Q=R=R=mRɗ̙̘̘ǝdk6Q(R)R)R)R(R(R(R)R(R)K˘e̙f˙e˙f̙f̙f׆PG ===============K؃N̙f˙f̙f̙e̘f̙f˙f̙f̙f̙f̘f̙f̙f̘f̙f̙e˙f̘f̙f˙e̙f̙f˙f̙f˘f̙f˘e̙f˙f̙f̙f̙e̙f̙f̙f˙f̙f̙f˘f̙f̙f̙e̙f˙f̘f̙f̘f˙f̙f̙f˙e̙g˙f˙e̙f̙̙̙̙˙̙̙̙̙̙˙˙̙̙̙̘̙̙̙̙̙̙̙̙̙̙˙̙̘̙̙̙̙̙̙̘̙̙̙̘̙̙̙̙̙̘̙̙̙̙̙̙̙̙̙̙̙̙U?R=R=R=R=R=Q=R=a̙̘̙̙f¡ab2R)R)R)R)R)R)R)R)R)R)D̙f̙f̙f̙f̙f̙fя\S================c*Δ`̙f̙f̙f̙f̙f˙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙e̘f̙f̙e̙e̙f̙f̙f̙f̙f̙f˙f̙e̙f̙f̙f̙f̙f̙e̙e˙e̙f̙f̙f̙f˙g̙f̙f̙f̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙̙nR=R=R=R=R=R=R=R=t̙̙̙f̙f]\.R)R)R)R)R)R)R)R)R)R)}?ɛe̙f̙f̙f̙f̙f͗dc*================G {D̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙f̙g̙g̙g̙gdispcalGUI-1.7.1.6/misc/InnoSetup/v5/000755 000765 000000 00000000000 12266723171 017036 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/InnoSetup/v5/Default.isl000644 000765 000000 00000041623 12265441406 021136 0ustar00svpwheel000000 000000 ; *** Inno Setup version 5.1.11+ English messages *** ; ; To download user-contributed translations of this file, go to: ; http://www.jrsoftware.org/files/istrans/ ; ; Note: When translating this text, do not add periods (.) to the end of ; messages that didn't have them already, because on those messages Inno ; Setup adds the periods automatically (appending a period would result in ; two periods being displayed). [LangOptions] ; The following three entries are very important. Be sure to read and ; understand the '[LangOptions] section' topic in the help file. LanguageName=English LanguageID=$0409 LanguageCodePage=0 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. ;DialogFontName= ;DialogFontSize=8 ;WelcomeFontName=Verdana ;WelcomeFontSize=12 ;TitleFontName=Arial ;TitleFontSize=29 ;CopyrightFontName=Arial ;CopyrightFontSize=8 [Messages] ; *** Application titles SetupAppTitle=Setup SetupWindowTitle=Setup - %1 UninstallAppTitle=Uninstall UninstallAppFullTitle=%1 Uninstall ; *** Misc. common InformationTitle=Information ConfirmTitle=Confirm ErrorTitle=Error ; *** SetupLdr messages SetupLdrStartupMessage=This will install %1. Do you wish to continue? LdrCannotCreateTemp=Unable to create a temporary file. Setup aborted LdrCannotExecTemp=Unable to execute file in the temporary directory. Setup aborted ; *** Startup error messages LastErrorMessage=%1.%n%nError %2: %3 SetupFileMissing=The file %1 is missing from the installation directory. Please correct the problem or obtain a new copy of the program. SetupFileCorrupt=The setup files are corrupted. Please obtain a new copy of the program. SetupFileCorruptOrWrongVer=The setup files are corrupted, or are incompatible with this version of Setup. Please correct the problem or obtain a new copy of the program. NotOnThisPlatform=This program will not run on %1. OnlyOnThisPlatform=This program must be run on %1. OnlyOnTheseArchitectures=This program can only be installed on versions of Windows designed for the following processor architectures:%n%n%1 MissingWOW64APIs=The version of Windows you are running does not include functionality required by Setup to perform a 64-bit installation. To correct this problem, please install Service Pack %1. WinVersionTooLowError=This program requires %1 version %2 or later. WinVersionTooHighError=This program cannot be installed on %1 version %2 or later. AdminPrivilegesRequired=You must be logged in as an administrator when installing this program. PowerUserPrivilegesRequired=You must be logged in as an administrator or as a member of the Power Users group when installing this program. SetupAppRunningError=Setup has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. UninstallAppRunningError=Uninstall has detected that %1 is currently running.%n%nPlease close all instances of it now, then click OK to continue, or Cancel to exit. ; *** Misc. errors ErrorCreatingDir=Setup was unable to create the directory "%1" ErrorTooManyFilesInDir=Unable to create a file in the directory "%1" because it contains too many files ; *** Setup common messages ExitSetupTitle=Exit Setup ExitSetupMessage=Setup is not complete. If you exit now, the program will not be installed.%n%nYou may run Setup again at another time to complete the installation.%n%nExit Setup? AboutSetupMenuItem=&About Setup... AboutSetupTitle=About Setup AboutSetupMessage=%1 version %2%n%3%n%n%1 home page:%n%4 AboutSetupNote= TranslatorNote= ; *** Buttons ButtonBack=< &Back ButtonNext=&Next > ButtonInstall=&Install ButtonOK=OK ButtonCancel=Cancel ButtonYes=&Yes ButtonYesToAll=Yes to &All ButtonNo=&No ButtonNoToAll=N&o to All ButtonFinish=&Finish ButtonBrowse=&Browse... ButtonWizardBrowse=B&rowse... ButtonNewFolder=&Make New Folder ; *** "Select Language" dialog messages SelectLanguageTitle=Select Setup Language SelectLanguageLabel=Select the language to use during the installation: ; *** Common wizard text ClickNext=Click Next to continue, or Cancel to exit Setup. BeveledLabel= BrowseDialogTitle=Browse For Folder BrowseDialogLabel=Select a folder in the list below, then click OK. NewFolderName=New Folder ; *** "Welcome" wizard page WelcomeLabel1=Welcome to the [name] Setup Wizard WelcomeLabel2=This will install [name/ver] on your computer.%n%nIt is recommended that you close all other applications before continuing. ; *** "Password" wizard page WizardPassword=Password PasswordLabel1=This installation is password protected. PasswordLabel3=Please provide the password, then click Next to continue. Passwords are case-sensitive. PasswordEditLabel=&Password: IncorrectPassword=The password you entered is not correct. Please try again. ; *** "License Agreement" wizard page WizardLicense=License Agreement LicenseLabel=Please read the following important information before continuing. LicenseLabel3=Please read the following License Agreement. You must accept the terms of this agreement before continuing with the installation. LicenseAccepted=I &accept the agreement LicenseNotAccepted=I &do not accept the agreement ; *** "Information" wizard pages WizardInfoBefore=Information InfoBeforeLabel=Please read the following important information before continuing. InfoBeforeClickLabel=When you are ready to continue with Setup, click Next. WizardInfoAfter=Information InfoAfterLabel=Please read the following important information before continuing. InfoAfterClickLabel=When you are ready to continue with Setup, click Next. ; *** "User Information" wizard page WizardUserInfo=User Information UserInfoDesc=Please enter your information. UserInfoName=&User Name: UserInfoOrg=&Organization: UserInfoSerial=&Serial Number: UserInfoNameRequired=You must enter a name. ; *** "Select Destination Location" wizard page WizardSelectDir=Select Destination Location SelectDirDesc=Where should [name] be installed? SelectDirLabel3=Setup will install [name] into the following folder. SelectDirBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. DiskSpaceMBLabel=At least [mb] MB of free disk space is required. ToUNCPathname=Setup cannot install to a UNC pathname. If you are trying to install to a network, you will need to map a network drive. InvalidPath=You must enter a full path with drive letter; for example:%n%nC:\APP%n%nor a UNC path in the form:%n%n\\server\share InvalidDrive=The drive or UNC share you selected does not exist or is not accessible. Please select another. DiskSpaceWarningTitle=Not Enough Disk Space DiskSpaceWarning=Setup requires at least %1 KB of free space to install, but the selected drive only has %2 KB available.%n%nDo you want to continue anyway? DirNameTooLong=The folder name or path is too long. InvalidDirName=The folder name is not valid. BadDirName32=Folder names cannot include any of the following characters:%n%n%1 DirExistsTitle=Folder Exists DirExists=The folder:%n%n%1%n%nalready exists. Would you like to install to that folder anyway? DirDoesntExistTitle=Folder Does Not Exist DirDoesntExist=The folder:%n%n%1%n%ndoes not exist. Would you like the folder to be created? ; *** "Select Components" wizard page WizardSelectComponents=Select Components SelectComponentsDesc=Which components should be installed? SelectComponentsLabel2=Select the components you want to install; clear the components you do not want to install. Click Next when you are ready to continue. FullInstallation=Full installation ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=Compact installation CustomInstallation=Custom installation NoUninstallWarningTitle=Components Exist NoUninstallWarning=Setup has detected that the following components are already installed on your computer:%n%n%1%n%nDeselecting these components will not uninstall them.%n%nWould you like to continue anyway? ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceMBLabel=Current selection requires at least [mb] MB of disk space. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=Select Additional Tasks SelectTasksDesc=Which additional tasks should be performed? SelectTasksLabel2=Select the additional tasks you would like Setup to perform while installing [name], then click Next. ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Select Start Menu Folder SelectStartMenuFolderDesc=Where should Setup place the program's shortcuts? SelectStartMenuFolderLabel3=Setup will create the program's shortcuts in the following Start Menu folder. SelectStartMenuFolderBrowseLabel=To continue, click Next. If you would like to select a different folder, click Browse. MustEnterGroupName=You must enter a folder name. GroupNameTooLong=The folder name or path is too long. InvalidGroupName=The folder name is not valid. BadGroupName=The folder name cannot include any of the following characters:%n%n%1 NoProgramGroupCheck2=&Don't create a Start Menu folder ; *** "Ready to Install" wizard page WizardReady=Ready to Install ReadyLabel1=Setup is now ready to begin installing [name] on your computer. ReadyLabel2a=Click Install to continue with the installation, or click Back if you want to review or change any settings. ReadyLabel2b=Click Install to continue with the installation. ReadyMemoUserInfo=User information: ReadyMemoDir=Destination location: ReadyMemoType=Setup type: ReadyMemoComponents=Selected components: ReadyMemoGroup=Start Menu folder: ReadyMemoTasks=Additional tasks: ; *** "Preparing to Install" wizard page WizardPreparing=Preparing to Install PreparingDesc=Setup is preparing to install [name] on your computer. PreviousInstallNotCompleted=The installation/removal of a previous program was not completed. You will need to restart your computer to complete that installation.%n%nAfter restarting your computer, run Setup again to complete the installation of [name]. CannotContinue=Setup cannot continue. Please click Cancel to exit. ; *** "Installing" wizard page WizardInstalling=Installing InstallingLabel=Please wait while Setup installs [name] on your computer. ; *** "Setup Completed" wizard page FinishedHeadingLabel=Completing the [name] Setup Wizard FinishedLabelNoIcons=Setup has finished installing [name] on your computer. FinishedLabel=Setup has finished installing [name] on your computer. The application may be launched by selecting the installed icons. ClickFinish=Click Finish to exit Setup. FinishedRestartLabel=To complete the installation of [name], Setup must restart your computer. Would you like to restart now? FinishedRestartMessage=To complete the installation of [name], Setup must restart your computer.%n%nWould you like to restart now? ShowReadmeCheck=Yes, I would like to view the README file YesRadio=&Yes, restart the computer now NoRadio=&No, I will restart the computer later ; used for example as 'Run MyProg.exe' RunEntryExec=Run %1 ; used for example as 'View Readme.txt' RunEntryShellExec=View %1 ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=Setup Needs the Next Disk SelectDiskLabel2=Please insert Disk %1 and click OK.%n%nIf the files on this disk can be found in a folder other than the one displayed below, enter the correct path or click Browse. PathLabel=&Path: FileNotInDir2=The file "%1" could not be located in "%2". Please insert the correct disk or select another folder. SelectDirectoryLabel=Please specify the location of the next disk. ; *** Installation phase messages SetupAborted=Setup was not completed.%n%nPlease correct the problem and run Setup again. EntryAbortRetryIgnore=Click Retry to try again, Ignore to proceed anyway, or Abort to cancel installation. ; *** Installation status messages StatusCreateDirs=Creating directories... StatusExtractFiles=Extracting files... StatusCreateIcons=Creating shortcuts... StatusCreateIniEntries=Creating INI entries... StatusCreateRegistryEntries=Creating registry entries... StatusRegisterFiles=Registering files... StatusSavingUninstall=Saving uninstall information... StatusRunProgram=Finishing installation... StatusRollback=Rolling back changes... ; *** Misc. errors ErrorInternal2=Internal error: %1 ErrorFunctionFailedNoCode=%1 failed ErrorFunctionFailed=%1 failed; code %2 ErrorFunctionFailedWithMessage=%1 failed; code %2.%n%3 ErrorExecutingProgram=Unable to execute file:%n%1 ; *** Registry errors ErrorRegOpenKey=Error opening registry key:%n%1\%2 ErrorRegCreateKey=Error creating registry key:%n%1\%2 ErrorRegWriteKey=Error writing to registry key:%n%1\%2 ; *** INI errors ErrorIniEntry=Error creating INI entry in file "%1". ; *** File copying errors FileAbortRetryIgnore=Click Retry to try again, Ignore to skip this file (not recommended), or Abort to cancel installation. FileAbortRetryIgnore2=Click Retry to try again, Ignore to proceed anyway (not recommended), or Abort to cancel installation. SourceIsCorrupted=The source file is corrupted SourceDoesntExist=The source file "%1" does not exist ExistingFileReadOnly=The existing file is marked as read-only.%n%nClick Retry to remove the read-only attribute and try again, Ignore to skip this file, or Abort to cancel installation. ErrorReadingExistingDest=An error occurred while trying to read the existing file: FileExists=The file already exists.%n%nWould you like Setup to overwrite it? ExistingFileNewer=The existing file is newer than the one Setup is trying to install. It is recommended that you keep the existing file.%n%nDo you want to keep the existing file? ErrorChangingAttr=An error occurred while trying to change the attributes of the existing file: ErrorCreatingTemp=An error occurred while trying to create a file in the destination directory: ErrorReadingSource=An error occurred while trying to read the source file: ErrorCopying=An error occurred while trying to copy a file: ErrorReplacingExistingFile=An error occurred while trying to replace the existing file: ErrorRestartReplace=RestartReplace failed: ErrorRenamingTemp=An error occurred while trying to rename a file in the destination directory: ErrorRegisterServer=Unable to register the DLL/OCX: %1 ErrorRegSvr32Failed=RegSvr32 failed with exit code %1 ErrorRegisterTypeLib=Unable to register the type library: %1 ; *** Post-installation errors ErrorOpeningReadme=An error occurred while trying to open the README file. ErrorRestartingComputer=Setup was unable to restart the computer. Please do this manually. ; *** Uninstaller messages UninstallNotFound=File "%1" does not exist. Cannot uninstall. UninstallOpenError=File "%1" could not be opened. Cannot uninstall UninstallUnsupportedVer=The uninstall log file "%1" is in a format not recognized by this version of the uninstaller. Cannot uninstall UninstallUnknownEntry=An unknown entry (%1) was encountered in the uninstall log ConfirmUninstall=Are you sure you want to completely remove %1 and all of its components? UninstallOnlyOnWin64=This installation can only be uninstalled on 64-bit Windows. OnlyAdminCanUninstall=This installation can only be uninstalled by a user with administrative privileges. UninstallStatusLabel=Please wait while %1 is removed from your computer. UninstalledAll=%1 was successfully removed from your computer. UninstalledMost=%1 uninstall complete.%n%nSome elements could not be removed. These can be removed manually. UninstalledAndNeedsRestart=To complete the uninstallation of %1, your computer must be restarted.%n%nWould you like to restart now? UninstallDataCorrupted="%1" file is corrupted. Cannot uninstall ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=Remove Shared File? ConfirmDeleteSharedFile2=The system indicates that the following shared file is no longer in use by any programs. Would you like for Uninstall to remove this shared file?%n%nIf any programs are still using this file and it is removed, those programs may not function properly. If you are unsure, choose No. Leaving the file on your system will not cause any harm. SharedFileNameLabel=File name: SharedFileLocationLabel=Location: WizardUninstalling=Uninstall Status StatusUninstalling=Uninstalling %1... ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1 version %2 AdditionalIcons=Additional icons: CreateDesktopIcon=Create a &desktop icon CreateQuickLaunchIcon=Create a &Quick Launch icon ProgramOnTheWeb=%1 on the Web UninstallProgram=Uninstall %1 LaunchProgram=Launch %1 AssocFileExtension=&Associate %1 with the %2 file extension AssocingFileExtension=Associating %1 with the %2 file extension... CalibrationLoading=Calibration loading on login: CalibrationLoadingHandledByDispcalGUI=Let dispcalGUI handle calibration loading (high quality) CalibrationLoadingHandledByOS=Let the operating system handle calibration loading (low quality)dispcalGUI-1.7.1.6/misc/InnoSetup/v5/Languages/000755 000765 000000 00000000000 12266723171 020744 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/misc/InnoSetup/v5/Languages/French.isl000644 000765 000000 00000050623 12265441406 022665 0ustar00svpwheel000000 000000 ; *** Inno Setup version 5.1.11+ French messages *** ; ; To download user-contributed translations of this file, go to: ; http://www.jrsoftware.org/is3rdparty.php ; ; Note: When translating this text, do not add periods (.) to the end of ; messages that didn't have them already, because on those messages Inno ; Setup adds the periods automatically (appending a period would result in ; two periods being displayed). ; ; Maintained by Pierre Yager (pierre@levosgien.net) ; ; Contributors : Frdric Bonduelle, Francis Pallini, Lumina, Pascal Peyrot ; ; Changes : ; + Accents on uppercase letters ; http://www.academie-francaise.fr/langue/questions.html#accentuation (lumina) ; + Typography quotes [see ISBN: 978-2-7433-0482-9] ; http://fr.wikipedia.org/wiki/Guillemet (lumina) ; + Binary units (Kio, Mio) [IEC 80000-13:2008] ; http://fr.wikipedia.org/wiki/Octet (lumina) ; + Reverted to standard units (Ko, Mo) to follow Windows Explorer Standard ; http://blogs.msdn.com/b/oldnewthing/archive/2009/06/11/9725386.aspx ; ; $jrsoftware: issrc/Files/Languages/French.isl,v 1.18 2011/02/15 14:52:59 mlaan Exp $ [LangOptions] LanguageName=Fran<00E7>ais LanguageID=$040C LanguageCodePage=1252 [Messages] ; *** Application titles SetupAppTitle=Installation SetupWindowTitle=Installation - %1 UninstallAppTitle=Dsinstallation UninstallAppFullTitle=Dsinstallation - %1 ; *** Misc. common InformationTitle=Information ConfirmTitle=Confirmation ErrorTitle=Erreur ; *** SetupLdr messages SetupLdrStartupMessage=Cet assistant va installer %1. Voulez-vous continuer ? LdrCannotCreateTemp=Impossible de crer un fichier temporaire. Abandon de l'installation LdrCannotExecTemp=Impossible d'excuter un fichier depuis le dossier temporaire. Abandon de l'installation ; *** Startup error messages LastErrorMessage=%1.%n%nErreur %2 : %3 SetupFileMissing=Le fichier %1 est absent du dossier d'installation. Veuillez corriger le problme ou vous procurer une nouvelle copie du programme. SetupFileCorrupt=Les fichiers d'installation sont altrs. Veuillez vous procurer une nouvelle copie du programme. SetupFileCorruptOrWrongVer=Les fichiers d'installation sont altrs ou ne sont pas compatibles avec cette version de l'assistant d'installation. Veuillez corriger le problme ou vous procurer une nouvelle copie du programme. NotOnThisPlatform=Ce programme ne fonctionne pas sous %1. OnlyOnThisPlatform=Ce programme ne peut fonctionner que sous %1. OnlyOnTheseArchitectures=Ce programme ne peut tre install que sur des versions de Windows qui supportent ces architectures : %n%n%1 MissingWOW64APIs=La version de Windows que vous utilisez ne dispose pas des fonctionnalits ncessaires pour que l'assistant puisse raliser une installation 64 bits. Pour corriger ce problme vous devez installer le Service Pack %1. WinVersionTooLowError=Ce programme requiert la version %2 ou suprieure de %1. WinVersionTooHighError=Ce programme ne peut pas tre install sous %1 version %2 ou suprieure. AdminPrivilegesRequired=Vous devez disposer des droits d'administration de cet ordinateur pour installer ce programme. PowerUserPrivilegesRequired=Vous devez disposer des droits d'administration ou faire partie du groupe Utilisateurs avec pouvoir de cet ordinateur pour installer ce programme. SetupAppRunningError=L'assistant d'installation a dtect que %1 est actuellement en cours d'excution.%n%nVeuillez fermer toutes les instances de cette application puis appuyer sur OK pour continuer, ou bien appuyer sur Annuler pour abandonner l'installation. UninstallAppRunningError=La procdure de dsinstallation a dtect que %1 est actuellement en cours d'excution.%n%nVeuillez fermer toutes les instances de cette application puis appuyer sur OK pour continuer, ou bien appuyer sur Annuler pour abandonner la dsinstallation. ; *** Misc. errors ErrorCreatingDir=L'assistant d'installation n'a pas pu crer le dossier "%1" ErrorTooManyFilesInDir=L'assistant d'installation n'a pas pu crer un fichier dans le dossier "%1" car celui-ci contient trop de fichiers ; *** Setup common messages ExitSetupTitle=Quitter l'installation ExitSetupMessage=L'installation n'est pas termine. Si vous abandonnez maintenant, le programme ne sera pas install.%n%nVous devrez relancer cet assistant pour finir l'installation.%n%nVoulez-vous quand mme quitter l'assistant d'installation ? AboutSetupMenuItem=& propos... AboutSetupTitle= Propos de l'assistant d'installation AboutSetupMessage=%1 version %2%n%3%n%nPage d'accueil de %1 :%n%4 AboutSetupNote= TranslatorNote=Traduction franaise maintenue par Pierre Yager (pierre@levosgien.net) ; *** Buttons ButtonBack=< &Prcdent ButtonNext=&Suivant > ButtonInstall=&Installer ButtonOK=OK ButtonCancel=Annuler ButtonYes=&Oui ButtonYesToAll=Oui pour &tout ButtonNo=&Non ButtonNoToAll=N&on pour tout ButtonFinish=&Terminer ButtonBrowse=Pa&rcourir... ButtonWizardBrowse=Pa&rcourir... ButtonNewFolder=Nouveau &dossier ; *** "Select Language" dialog messages SelectLanguageTitle=Langue de l'assistant d'installation SelectLanguageLabel=Veuillez slectionner la langue qui sera utilise par l'assistant d'installation : ; *** Common wizard text ClickNext=Appuyez sur Suivant pour continuer ou sur Annuler pour abandonner l'installation. BeveledLabel= BrowseDialogTitle=Parcourir les dossiers BrowseDialogLabel=Veuillez choisir un dossier de destination, puis appuyez sur OK. NewFolderName=Nouveau dossier ; *** "Welcome" wizard page WelcomeLabel1=Bienvenue dans l'assistant d'installation de [name] WelcomeLabel2=Cet assistant va vous guider dans l'installation de [name/ver] sur votre ordinateur.%n%nIl est recommand de fermer toutes les applications actives avant de continuer. ; *** "Password" wizard page WizardPassword=Mot de passe PasswordLabel1=Cette installation est protge par un mot de passe. PasswordLabel3=Veuillez saisir le mot de passe (attention la distinction entre majuscules et minuscules) puis appuyez sur Suivant pour continuer. PasswordEditLabel=&Mot de passe : IncorrectPassword=Le mot de passe saisi n'est pas valide. Veuillez essayer nouveau. ; *** "License Agreement" wizard page WizardLicense=Accord de licence LicenseLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. LicenseLabel3=Veuillez lire le contrat de licence suivant. Vous devez en accepter tous les termes avant de continuer l'installation. LicenseAccepted=Je comprends et j'&accepte les termes du contrat de licence LicenseNotAccepted=Je &refuse les termes du contrat de licence ; *** "Information" wizard pages WizardInfoBefore=Information InfoBeforeLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. InfoBeforeClickLabel=Lorsque vous tes prt continuer, appuyez sur Suivant. WizardInfoAfter=Information InfoAfterLabel=Les informations suivantes sont importantes. Veuillez les lire avant de continuer. InfoAfterClickLabel=Lorsque vous tes prt continuer, appuyez sur Suivant. ; *** "User Information" wizard page WizardUserInfo=Informations sur l'Utilisateur UserInfoDesc=Veuillez saisir les informations qui vous concernent. UserInfoName=&Nom d'utilisateur : UserInfoOrg=&Organisation : UserInfoSerial=Numro de &srie : UserInfoNameRequired=Vous devez au moins saisir un nom. ; *** "Select Destination Location" wizard page WizardSelectDir=Dossier de destination SelectDirDesc=O [name] doit-il tre install ? SelectDirLabel3=L'assistant va installer [name] dans le dossier suivant. SelectDirBrowseLabel=Pour continuer, appuyez sur Suivant. Si vous souhaitez choisir un dossier diffrent, appuyez sur Parcourir. DiskSpaceMBLabel=Le programme requiert au moins [mb] Mo d'espace disque disponible. ToUNCPathname=L'assistant d'installation ne supporte pas les chemins rseau. Si vous souhaitez effectuer cette installation sur un rseau, vous devez d'abord connecter un lecteur rseau. InvalidPath=Vous devez saisir un chemin complet avec sa lettre de lecteur ; par exemple :%n%nC:\APP%n%nou un chemin rseau de la forme :%n%n\\serveur\partage InvalidDrive=L'unit ou l'emplacement rseau que vous avez slectionn n'existe pas ou n'est pas accessible. Veuillez choisir une autre destination. DiskSpaceWarningTitle=Espace disponible insuffisant DiskSpaceWarning=L'assistant a besoin d'au moins %1 Ko d'espace disponible pour effectuer l'installation, mais l'unit que vous avez slectionne ne dispose que de %2 Ko d'espace disponible.%n%nSouhaitez-vous continuer malgr tout ? DirNameTooLong=Le nom ou le chemin du dossier est trop long. InvalidDirName=Le nom du dossier est invalide. BadDirName32=Le nom du dossier ne doit contenir aucun des caractres suivants :%n%n%1 DirExistsTitle=Dossier existant DirExists=Le dossier :%n%n%1%n%nexiste dj. Souhaitez-vous installer dans ce dossier malgr tout ? DirDoesntExistTitle=Le dossier n'existe pas DirDoesntExist=Le dossier %n%n%1%n%nn'existe pas. Souhaitez-vous que ce dossier soit cr ? ; *** "Select Components" wizard page WizardSelectComponents=Composants installer SelectComponentsDesc=Quels composants de l'application souhaitez-vous installer ? SelectComponentsLabel2=Slectionnez les composants que vous dsirez installer ; dcochez les composants que vous ne dsirez pas installer. Appuyez ensuite sur Suivant pour continuer l'installation. FullInstallation=Installation complte ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=Installation compacte CustomInstallation=Installation personnalise NoUninstallWarningTitle=Composants existants NoUninstallWarning=L'assistant d'installation a dtect que les composants suivants sont dj installs sur votre systme :%n%n%1%n%nDslectionner ces composants ne les dsinstallera pas pour autant.%n%nVoulez-vous continuer malgr tout ? ComponentSize1=%1 Ko ComponentSize2=%1 Mo ComponentsDiskSpaceMBLabel=Les composants slectionns ncessitent au moins [mb] Mo d'espace disponible. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=Tches supplmentaires SelectTasksDesc=Quelles sont les tches supplmentaires qui doivent tre effectues ? SelectTasksLabel2=Slectionnez les tches supplmentaires que l'assistant d'installation doit effectuer pendant l'installation de [name], puis appuyez sur Suivant. ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Slection du dossier du menu Dmarrer SelectStartMenuFolderDesc=O l'assistant d'installation doit-il placer les raccourcis du programme ? SelectStartMenuFolderLabel3=L'assistant va crer les raccourcis du programme dans le dossier du menu Dmarrer indiqu ci-dessous. SelectStartMenuFolderBrowseLabel=Appuyez sur Suivant pour continuer. Appuyez sur Parcourir si vous souhaitez slectionner un autre dossier du menu Dmarrer. MustEnterGroupName=Vous devez saisir un nom de dossier du menu Dmarrer. GroupNameTooLong=Le nom ou le chemin du dossier est trop long. InvalidGroupName=Le nom du dossier n'est pas valide. BadGroupName=Le nom du dossier ne doit contenir aucun des caractres suivants :%n%n%1 NoProgramGroupCheck2=Ne pas crer de &dossier dans le menu Dmarrer ; *** "Ready to Install" wizard page WizardReady=Prt installer ReadyLabel1=L'assistant dispose prsent de toutes les informations pour installer [name] sur votre ordinateur. ReadyLabel2a=Appuyez sur Installer pour procder l'installation ou sur Prcdent pour revoir ou modifier une option d'installation. ReadyLabel2b=Appuyez sur Installer pour procder l'installation. ReadyMemoUserInfo=Informations sur l'utilisateur : ReadyMemoDir=Dossier de destination : ReadyMemoType=Type d'installation : ReadyMemoComponents=Composants slectionns : ReadyMemoGroup=Dossier du menu Dmarrer : ReadyMemoTasks=Tches supplmentaires : ; *** "Preparing to Install" wizard page WizardPreparing=Prparation de l'installation PreparingDesc=L'assistant d'installation prpare l'installation de [name] sur votre ordinateur. PreviousInstallNotCompleted=L'installation ou la suppression d'un programme prcdent n'est pas totalement acheve. Veuillez redmarrer votre ordinateur pour achever cette installation ou suppression.%n%nUne fois votre ordinateur redmarr, veuillez relancer cet assistant pour reprendre l'installation de [name]. CannotContinue=L'assistant ne peut pas continuer. Veuillez appuyer sur Annuler pour abandonner l'installation. ; *** "Installing" wizard page WizardInstalling=Installation en cours InstallingLabel=Veuillez patienter pendant que l'assistant installe [name] sur votre ordinateur. ; *** "Setup Completed" wizard page FinishedHeadingLabel=Fin de l'installation de [name] FinishedLabelNoIcons=L'assistant a termin l'installation de [name] sur votre ordinateur. FinishedLabel=L'assistant a termin l'installation de [name] sur votre ordinateur. L'application peut tre lance l'aide des icnes cres sur le Bureau par l'installation. ClickFinish=Veuillez appuyer sur Terminer pour quitter l'assistant d'installation. FinishedRestartLabel=L'assistant doit redmarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redmarrer maintenant ? FinishedRestartMessage=L'assistant doit redmarrer votre ordinateur pour terminer l'installation de [name].%n%nVoulez-vous redmarrer maintenant ? ShowReadmeCheck=Oui, je souhaite lire le fichier LISEZMOI YesRadio=&Oui, redmarrer mon ordinateur maintenant NoRadio=&Non, je prfre redmarrer mon ordinateur plus tard ; used for example as 'Run MyProg.exe' RunEntryExec=Excuter %1 ; used for example as 'View Readme.txt' RunEntryShellExec=Voir %1 ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=L'assistant a besoin du disque suivant SelectDiskLabel2=Veuillez insrer le disque %1 et appuyer sur OK.%n%nSi les fichiers de ce disque se trouvent un emplacement diffrent de celui indiqu ci-dessous, veuillez saisir le chemin correspondant ou appuyez sur Parcourir. PathLabel=&Chemin : FileNotInDir2=Le fichier "%1" ne peut pas tre trouv dans "%2". Veuillez insrer le bon disque ou slectionner un autre dossier. SelectDirectoryLabel=Veuillez indiquer l'emplacement du disque suivant. ; *** Installation phase messages SetupAborted=L'installation n'est pas termine.%n%nVeuillez corriger le problme et relancer l'installation. EntryAbortRetryIgnore=Appuyez sur Ressayer pour essayer nouveau, Ignorer pour continuer malgr tout, ou Abandonner pour annuler l'installation. ; *** Installation status messages StatusCreateDirs=Cration des dossiers... StatusExtractFiles=Extraction des fichiers... StatusCreateIcons=Cration des raccourcis... StatusCreateIniEntries=Cration des entres du fichier INI... StatusCreateRegistryEntries=Cration des entres de registre... StatusRegisterFiles=Enregistrement des fichiers... StatusSavingUninstall=Sauvegarde des informations de dsinstallation... StatusRunProgram=Finalisation de l'installation... StatusRollback=Annulation des modifications... ; *** Misc. errors ErrorInternal2=Erreur interne : %1 ErrorFunctionFailedNoCode=%1 a chou ErrorFunctionFailed=%1 a chou ; code %2 ErrorFunctionFailedWithMessage=%1 a chou ; code %2.%n%3 ErrorExecutingProgram=Impossible d'excuter le fichier :%n%1 ; *** Registry errors ErrorRegOpenKey=Erreur lors de l'ouverture de la cl de registre :%n%1\%2 ErrorRegCreateKey=Erreur lors de la cration de la cl de registre :%n%1\%2 ErrorRegWriteKey=Erreur lors de l'criture de la cl de registre :%n%1\%2 ; *** INI errors ErrorIniEntry=Erreur d'criture d'une entre dans le fichier INI "%1". ; *** File copying errors FileAbortRetryIgnore=Appuyez sur Ressayer pour essayer nouveau, Ignorer pour passer ce fichier (dconseill), ou Abandonner pour annuler l'installation. FileAbortRetryIgnore2=Appuyez sur Ressayer pour essayer nouveau, Ignorer pour continuer malgr tout (dconseill), ou Abandonner pour annuler l'installation. SourceIsCorrupted=Le fichier source est altr SourceDoesntExist=Le fichier source "%1" n'existe pas ExistingFileReadOnly=Le fichier existant est protg en lecture seule.%n%nAppuyez sur Ressayer pour enlever la protection et essayer nouveau, Ignorer pour passer ce fichier, ou Abandonner pour annuler l'installation. ErrorReadingExistingDest=Une erreur s'est produite lors de la tentative de lecture du fichier existant : FileExists=Le fichier existe dj.%n%nSouhaitez-vous que l'installation le remplace ? ExistingFileNewer=Le fichier existant est plus rcent que celui que l'assistant essaie d'installer. Il est recommand de conserver le fichier existant.%n%nSouhaitez-vous conserver le fichier existant ? ErrorChangingAttr=Une erreur est survenue en essayant de modifier les attributs du fichier existant : ErrorCreatingTemp=Une erreur est survenue en essayant de crer un fichier dans le dossier de destination : ErrorReadingSource=Une erreur est survenue lors de la lecture du fichier source : ErrorCopying=Une erreur est survenue lors de la copie d'un fichier : ErrorReplacingExistingFile=Une erreur est survenue lors du remplacement d'un fichier existant : ErrorRestartReplace=Le marquage d'un fichier pour remplacement au redmarrage de l'ordinateur a chou : ErrorRenamingTemp=Une erreur est survenue en essayant de renommer un fichier dans le dossier de destination : ErrorRegisterServer=Impossible d'enregistrer la bibliothque DLL/OCX : %1 ErrorRegSvr32Failed=RegSvr32 a chou et a retourn le code d'erreur %1 ErrorRegisterTypeLib=Impossible d'enregistrer la bibliothque de type : %1 ; *** Post-installation errors ErrorOpeningReadme=Une erreur est survenue l'ouverture du fichier LISEZMOI. ErrorRestartingComputer=L'installation n'a pas pu redmarrer l'ordinateur. Merci de bien vouloir le faire vous-mme. ; *** Uninstaller messages UninstallNotFound=Le fichier "%1" n'existe pas. Impossible de dsinstaller. UninstallOpenError=Le fichier "%1" n'a pas pu tre ouvert. Impossible de dsinstaller UninstallUnsupportedVer=Le format du fichier journal de dsinstallation "%1" n'est pas reconnu par cette version de la procdure de dsinstallation. Impossible de dsinstaller UninstallUnknownEntry=Une entre inconnue (%1) a t rencontre dans le fichier journal de dsinstallation ConfirmUninstall=Voulez-vous vraiment dsinstaller compltement %1 ainsi que tous ses composants ? UninstallOnlyOnWin64=La dsinstallation de ce programme ne fonctionne qu'avec une version 64 bits de Windows. OnlyAdminCanUninstall=Ce programme ne peut tre dsinstall que par un utilisateur disposant des droits d'administration. UninstallStatusLabel=Veuillez patienter pendant que %1 est retir de votre ordinateur. UninstalledAll=%1 a t correctement dsinstall de cet ordinateur. UninstalledMost=La dsinstallation de %1 est termine.%n%nCertains lments n'ont pas pu tre supprims automatiquement. Vous pouvez les supprimer manuellement. UninstalledAndNeedsRestart=Vous devez redmarrer l'ordinateur pour terminer la dsinstallation de %1.%n%nVoulez-vous redmarrer maintenant ? UninstallDataCorrupted=Le ficher "%1" est altr. Impossible de dsinstaller ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=Supprimer les fichiers partags ? ConfirmDeleteSharedFile2=Le systme indique que le fichier partag suivant n'est plus utilis par aucun programme. Souhaitez-vous que la dsinstallation supprime ce fichier partag ?%n%nSi des programmes utilisent encore ce fichier et qu'il est supprim, ces programmes ne pourront plus fonctionner correctement. Si vous n'tes pas sr, choisissez Non. Laisser ce fichier dans votre systme ne posera pas de problme. SharedFileNameLabel=Nom du fichier : SharedFileLocationLabel=Emplacement : WizardUninstalling=tat de la dsinstallation StatusUninstalling=Dsinstallation de %1... ; Les messages personnaliss suivants ne sont pas utilis par l'installation ; elle-mme, mais si vous les utilisez dans vos scripts, vous devez les ; traduire [CustomMessages] NameAndVersion=%1 version %2 AdditionalIcons=Icnes supplmentaires : CreateDesktopIcon=Crer une icne sur le &Bureau CreateQuickLaunchIcon=Crer une icne dans la barre de &Lancement rapide ProgramOnTheWeb=Page d'accueil de %1 UninstallProgram=Dsinstaller %1 LaunchProgram=Excuter %1 AssocFileExtension=&Associer %1 avec l'extension de fichier %2 AssocingFileExtension=Associe %1 avec l'extension de fichier %2... CalibrationLoading=Chargement d'talonnage lors de la connexion: CalibrationLoadingHandledByDispcalGUI=dispcalGUI Profile Loader (haute qualit) CalibrationLoadingHandledByOS=Systme d'exploitation (faible qualit)dispcalGUI-1.7.1.6/misc/InnoSetup/v5/Languages/German.isl000644 000765 000000 00000045470 12265441406 022675 0ustar00svpwheel000000 000000 ; ****************************************************** ; *** *** ; *** Inno Setup version 5.1.11+ German messages *** ; *** *** ; *** Original Author: *** ; *** *** ; *** Michael Reitz (innosetup@assimilate.de) *** ; *** *** ; *** Contributors: *** ; *** *** ; *** Roland Ruder (info@rr4u.de) *** ; *** LaughingMan (puma.d@web.de) *** ; *** *** ; ****************************************************** ; ; Diese bersetzung hlt sich an die neue deutsche Rechtschreibung. [LangOptions] LanguageName=Deutsch LanguageID=$0407 LanguageCodePage=1252 [Messages] ; *** Application titles SetupAppTitle=Setup SetupWindowTitle=Setup - %1 UninstallAppTitle=Entfernen UninstallAppFullTitle=%1 entfernen ; *** Misc. common InformationTitle=Information ConfirmTitle=Besttigen ErrorTitle=Fehler ; *** SetupLdr messages SetupLdrStartupMessage=%1 wird jetzt installiert. Mchten Sie fortfahren? LdrCannotCreateTemp=Es konnte keine temporre Datei erstellt werden. Das Setup wurde abgebrochen LdrCannotExecTemp=Die Datei konnte nicht im temporren Ordner ausgefhrt werden. Das Setup wurde abgebrochen ; *** Startup error messages LastErrorMessage=%1.%n%nFehler %2: %3 SetupFileMissing=Die Datei %1 fehlt im Installations-Ordner. Bitte beheben Sie das Problem, oder besorgen Sie sich eine neue Kopie des Programms. SetupFileCorrupt=Die Setup-Dateien sind beschdigt. Besorgen Sie sich bitte eine neue Kopie des Programms. SetupFileCorruptOrWrongVer=Die Setup-Dateien sind beschdigt oder inkompatibel zu dieser Version des Setups. Bitte beheben Sie das Problem, oder besorgen Sie sich eine neue Kopie des Programms. NotOnThisPlatform=Dieses Programm kann nicht unter %1 ausgefhrt werden. OnlyOnThisPlatform=Dieses Programm muss unter %1 ausgefhrt werden. OnlyOnTheseArchitectures=Dieses Programm kann nur auf Windows-Versionen installiert werden, die folgende Prozessor-Architekturen untersttzen:%n%n%1 MissingWOW64APIs=Ihre Windows-Version enthlt nicht die Funktionen, die vom Setup fr eine 64-bit Installation bentigt werden. Installieren Sie bitte Service Pack %1, um dieses Problem zu beheben. WinVersionTooLowError=Dieses Programm bentigt %1 Version %2 oder hher. WinVersionTooHighError=Dieses Programm kann nicht unter %1 Version %2 oder hher installiert werden. AdminPrivilegesRequired=Sie mssen als Administrator angemeldet sein, um dieses Programm installieren zu knnen. PowerUserPrivilegesRequired=Sie mssen als Administrator oder als Mitglied der Hauptbenutzer-Gruppe angemeldet sein, um dieses Programm installieren zu knnen. SetupAppRunningError=Das Setup hat entdeckt, dass %1 zur Zeit ausgefhrt wird.%n%nBitte schlieen Sie jetzt alle laufenden Instanzen, und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden. UninstallAppRunningError=Die Deinstallation hat entdeckt, dass %1 zur Zeit ausgefhrt wird.%n%nBitte schlieen Sie jetzt alle laufenden Instanzen, und klicken Sie auf "OK", um fortzufahren, oder auf "Abbrechen", um zu beenden. ; *** Misc. errors ErrorCreatingDir=Das Setup konnte den Ordner "%1" nicht erstellen ErrorTooManyFilesInDir=Das Setup konnte eine Datei im Ordner "%1" nicht erstellen, weil er zu viele Dateien enthlt ; *** Setup common messages ExitSetupTitle=Setup verlassen ExitSetupMessage=Das Setup ist noch nicht abgeschlossen. Wenn Sie jetzt beenden, wird das Programm nicht installiert.%n%nSie knnen das Setup zu einem spteren Zeitpunkt nochmals ausfhren, um die Installation zu vervollstndigen.%n%nSetup verlassen? AboutSetupMenuItem=&ber das Setup ... AboutSetupTitle=ber das Setup AboutSetupMessage=%1 Version %2%n%3%n%n%1 Internet-Seite:%n%4 AboutSetupNote= TranslatorNote=German translation maintained by Michael Reitz (innosetup@assimilate.de) ; *** Buttons ButtonBack=< &Zurck ButtonNext=&Weiter > ButtonInstall=&Installieren ButtonOK=OK ButtonCancel=Abbrechen ButtonYes=&Ja ButtonYesToAll=J&a fr Alle ButtonNo=&Nein ButtonNoToAll=N&ein fr Alle ButtonFinish=&Fertigstellen ButtonBrowse=&Durchsuchen ... ButtonWizardBrowse=Du&rchsuchen ... ButtonNewFolder=&Neuen Ordner erstellen ; *** "Select Language" dialog messages SelectLanguageTitle=Setup-Sprache auswhlen SelectLanguageLabel=Whlen Sie die Sprache aus, die whrend der Installation benutzt werden soll: ; *** Common wizard text ClickNext="Weiter" zum Fortfahren, "Abbrechen" zum Verlassen. BeveledLabel= BrowseDialogTitle=Ordner suchen BrowseDialogLabel=Whlen Sie einen Ordner aus, und klicken Sie danach auf "OK". NewFolderName=Neuer Ordner ; *** "Welcome" wizard page WelcomeLabel1=Willkommen zum [name] Setup-Assistenten WelcomeLabel2=Dieser Assistent wird jetzt [name/ver] auf Ihrem Computer installieren.%n%nSie sollten alle anderen Anwendungen beenden, bevor Sie mit dem Setup fortfahren. ; *** "Password" wizard page WizardPassword=Passwort PasswordLabel1=Diese Installation wird durch ein Passwort geschtzt. PasswordLabel3=Bitte geben Sie das Passwort ein, und klicken Sie danach auf "Weiter". Achten Sie auf korrekte Gro-/Kleinschreibung. PasswordEditLabel=&Passwort: IncorrectPassword=Das eingegebene Passwort ist nicht korrekt. Bitte versuchen Sie es noch einmal. ; *** "License Agreement" wizard page WizardLicense=Lizenzvereinbarung LicenseLabel=Lesen Sie bitte folgende, wichtige Informationen bevor Sie fortfahren. LicenseLabel3=Lesen Sie bitte die folgenden Lizenzvereinbarungen. Benutzen Sie bei Bedarf die Bildlaufleiste oder drcken Sie die "Bild Ab"-Taste. LicenseAccepted=Ich &akzeptiere die Vereinbarung LicenseNotAccepted=Ich &lehne die Vereinbarung ab ; *** "Information" wizard pages WizardInfoBefore=Information InfoBeforeLabel=Lesen Sie bitte folgende, wichtige Informationen bevor Sie fortfahren. InfoBeforeClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind mit dem Setup fortzufahren. WizardInfoAfter=Information InfoAfterLabel=Lesen Sie bitte folgende, wichtige Informationen bevor Sie fortfahren. InfoAfterClickLabel=Klicken Sie auf "Weiter", sobald Sie bereit sind mit dem Setup fortzufahren. ; *** "User Information" wizard page WizardUserInfo=Benutzerinformationen UserInfoDesc=Bitte tragen Sie Ihre Daten ein. UserInfoName=&Name: UserInfoOrg=&Organisation: UserInfoSerial=&Seriennummer: UserInfoNameRequired=Sie mssen einen Namen eintragen. ; *** "Select Destination Location" wizard page WizardSelectDir=Ziel-Ordner whlen SelectDirDesc=Wohin soll [name] installiert werden? SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren. SelectDirBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswhlen mchten. DiskSpaceMBLabel=Mindestens [mb] MB freier Speicherplatz ist erforderlich. ToUNCPathname=Das Setup kann nicht in einen UNC-Pfad installieren. Wenn Sie auf ein Netzlaufwerk installieren mchten, mssen Sie dem Netzwerkpfad einen Laufwerksbuchstaben zuordnen. InvalidPath=Sie mssen einen vollstndigen Pfad mit einem Laufwerksbuchstaben angeben; z.B.:%n%nC:\Beispiel%n%noder einen UNC-Pfad in der Form:%n%n\\Server\Freigabe InvalidDrive=Das angegebene Laufwerk bzw. der UNC-Pfad existiert nicht oder es kann nicht darauf zugegriffen werden. Whlen Sie bitte einen anderen Ordner. DiskSpaceWarningTitle=Nicht genug freier Speicherplatz DiskSpaceWarning=Das Setup bentigt mindestens %1 KB freien Speicherplatz zum Installieren, aber auf dem ausgewhlten Laufwerk sind nur %2 KB verfgbar.%n%nMchten Sie trotzdem fortfahren? DirNameTooLong=Der Ordnername/Pfad ist zu lang. InvalidDirName=Der Ordnername ist nicht gltig. BadDirName32=Ordnernamen drfen keine der folgenden Zeichen enthalten:%n%n%1 DirExistsTitle=Ordner existiert bereits DirExists=Der Ordner:%n%n%1%n%n existiert bereits. Mchten Sie trotzdem in diesen Ordner installieren? DirDoesntExistTitle=Ordner ist nicht vorhanden DirDoesntExist=Der Ordner:%n%n%1%n%nist nicht vorhanden. Soll der Ordner erstellt werden? ; *** "Select Components" wizard page WizardSelectComponents=Komponenten auswhlen SelectComponentsDesc=Welche Komponenten sollen installiert werden? SelectComponentsLabel2=Whlen Sie die Komponenten aus, die Sie installieren mchten. Klicken Sie auf "Weiter", wenn sie bereit sind fortzufahren. FullInstallation=Vollstndige Installation CompactInstallation=Kompakte Installation CustomInstallation=Benutzerdefinierte Installation NoUninstallWarningTitle=Komponenten vorhanden NoUninstallWarning=Das Setup hat festgestellt, dass die folgenden Komponenten bereits auf Ihrem Computer installiert sind:%n%n%1%n%nDiese nicht mehr ausgewhlten Komponenten werden nicht vom Computer entfernt.%n%nMchten Sie trotzdem fortfahren? ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceMBLabel=Die aktuelle Auswahl erfordert min. [mb] MB Speicherplatz. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=Zustzliche Aufgaben auswhlen SelectTasksDesc=Welche zustzlichen Aufgaben sollen ausgefhrt werden? SelectTasksLabel2=Whlen Sie die zustzlichen Aufgaben aus, die das Setup whrend der Installation von [name] ausfhren soll, und klicken Sie danach auf "Weiter". ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Startmen-Ordner auswhlen SelectStartMenuFolderDesc=Wo soll das Setup die Programm-Verknpfungen erstellen? SelectStartMenuFolderLabel3=Das Setup wird die Programm-Verknpfungen im folgenden Startmen-Ordner erstellen. SelectStartMenuFolderBrowseLabel=Klicken Sie auf "Weiter", um fortzufahren. Klicken Sie auf "Durchsuchen", falls Sie einen anderen Ordner auswhlen mchten. MustEnterGroupName=Sie mssen einen Ordnernamen eingeben. GroupNameTooLong=Der Ordnername/Pfad ist zu lang. InvalidGroupName=Der Ordnername ist nicht gltig. BadGroupName=Der Ordnername darf keine der folgenden Zeichen enthalten:%n%n%1 NoProgramGroupCheck2=&Keinen Ordner im Startmen erstellen ; *** "Ready to Install" wizard page WizardReady=Installation durchfhren ReadyLabel1=Das Setup ist jetzt bereit, [name] auf Ihrem Computer zu installieren. ReadyLabel2a=Klicken Sie auf "Installieren", um mit der Installation zu beginnen, oder auf "Zurck", um Ihre Einstellungen zu berprfen oder zu ndern. ReadyLabel2b=Klicken Sie auf "Installieren", um mit der Installation zu beginnen. ReadyMemoUserInfo=Benutzerinformationen: ReadyMemoDir=Ziel-Ordner: ReadyMemoType=Setup-Typ: ReadyMemoComponents=Ausgewhlte Komponenten: ReadyMemoGroup=Startmen-Ordner: ReadyMemoTasks=Zustzliche Aufgaben: ; *** "Preparing to Install" wizard page WizardPreparing=Vorbereitung der Installation PreparingDesc=Das Setup bereitet die Installation von [name] auf diesen Computer vor. PreviousInstallNotCompleted=Eine vorherige Installation/Deinstallation eines Programms wurde nicht abgeschlossen. Der Computer muss neu gestartet werden, um die Installation/Deinstallation zu beenden.%n%nStarten Sie das Setup nach dem Neustart Ihres Computers erneut, um die Installation von [name] durchzufhren. CannotContinue=Das Setup kann nicht fortfahren. Bitte klicken Sie auf "Abbrechen" zum Verlassen. ; *** "Installing" wizard page WizardInstalling=Installiere ... InstallingLabel=Warten Sie bitte whrend [name] auf Ihrem Computer installiert wird. ; *** "Setup Completed" wizard page FinishedHeadingLabel=Beenden des [name] Setup-Assistenten FinishedLabelNoIcons=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen. FinishedLabel=Das Setup hat die Installation von [name] auf Ihrem Computer abgeschlossen. Die Anwendung kann ber die installierten Programm-Verknpfungen gestartet werden. ClickFinish=Klicken Sie auf "Fertigstellen", um das Setup zu beenden. FinishedRestartLabel=Um die Installation von [name] abzuschlieen, muss das Setup Ihren Computer neu starten. Mchten Sie jetzt neu starten? FinishedRestartMessage=Um die Installation von [name] abzuschlieen, muss das Setup Ihren Computer neu starten.%n%nMchten Sie jetzt neu starten? ShowReadmeCheck=Ja, ich mchte die LIESMICH-Datei sehen YesRadio=&Ja, Computer jetzt neu starten NoRadio=&Nein, ich werde den Computer spter neu starten RunEntryExec=%1 starten RunEntryShellExec=%1 anzeigen ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=Nchste Diskette einlegen SelectDiskLabel2=Legen Sie bitte Diskette %1 ein, und klicken Sie auf "OK".%n%nWenn sich die Dateien von dieser Diskette in einem anderen als dem angezeigten Ordner befinden, dann geben Sie bitte den korrekten Pfad ein oder klicken auf "Durchsuchen". PathLabel=&Pfad: FileNotInDir2=Die Datei "%1" befindet sich nicht in "%2". Bitte Ordner ndern oder richtige Diskette einlegen. SelectDirectoryLabel=Geben Sie bitte an, wo die nchste Diskette eingelegt wird. ; *** Installation phase messages SetupAborted=Das Setup konnte nicht abgeschlossen werden.%n%nBeheben Sie bitte das Problem, und starten Sie das Setup erneut. EntryAbortRetryIgnore=Klicken Sie auf "Wiederholen" fr einen weiteren Versuch, "Ignorieren", um trotzdem fortzufahren, oder "Abbrechen", um die Installation abzubrechen. ; *** Installation status messages StatusCreateDirs=Ordner werden erstellt ... StatusExtractFiles=Dateien werden entpackt ... StatusCreateIcons=Verknpfungen werden erstellt ... StatusCreateIniEntries=INI-Eintrge werden erstellt ... StatusCreateRegistryEntries=Registry-Eintrge werden erstellt ... StatusRegisterFiles=Dateien werden registriert ... StatusSavingUninstall=Deinstallations-Informationen werden gespeichert ... StatusRunProgram=Installation wird beendet ... StatusRollback=nderungen werden rckgngig gemacht ... ; *** Misc. errors ErrorInternal2=Interner Fehler: %1 ErrorFunctionFailedNoCode=%1 schlug fehl ErrorFunctionFailed=%1 schlug fehl; Code %2 ErrorFunctionFailedWithMessage=%1 schlug fehl; Code %2.%n%3 ErrorExecutingProgram=Datei kann nicht ausgefhrt werden:%n%1 ; *** Registry errors ErrorRegOpenKey=Registry-Schlssel konnte nicht geffnet werden:%n%1\%2 ErrorRegCreateKey=Registry-Schlssel konnte nicht erstellt werden:%n%1\%2 ErrorRegWriteKey=Fehler beim Schreiben des Registry-Schlssels:%n%1\%2 ; *** INI errors ErrorIniEntry=Fehler beim Erstellen eines INI-Eintrages in der Datei "%1". ; *** File copying errors FileAbortRetryIgnore=Klicken Sie auf "Wiederholen" fr einen weiteren Versuch, "Ignorieren", um diese Datei zu berspringen (nicht empfohlen), oder "Abbrechen", um die Installation abzubrechen. FileAbortRetryIgnore2=Klicken Sie auf "Wiederholen" fr einen weiteren Versuch, "Ignorieren", um trotzdem fortzufahren (nicht empfohlen), oder "Abbrechen", um die Installation abzubrechen. SourceIsCorrupted=Die Quelldatei ist beschdigt SourceDoesntExist=Die Quelldatei "%1" existiert nicht ExistingFileReadOnly=Die vorhandene Datei ist schreibgeschtzt.%n%nKlicken Sie auf "Wiederholen", um den Schreibschutz zu entfernen, "Ignorieren", um die Datei zu berspringen, oder "Abbrechen", um die Installation abzubrechen. ErrorReadingExistingDest=Lesefehler in Datei: FileExists=Die Datei ist bereits vorhanden.%n%nSoll sie berschrieben werden? ExistingFileNewer=Die vorhandene Datei ist neuer als die Datei, die installiert werden soll. Es wird empfohlen die vorhandene Datei beizubehalten.%n%n Mchten Sie die vorhandene Datei beibehalten? ErrorChangingAttr=Fehler beim ndern der Datei-Attribute: ErrorCreatingTemp=Fehler beim Erstellen einer Datei im Ziel-Ordner: ErrorReadingSource=Fehler beim Lesen der Quelldatei: ErrorCopying=Fehler beim Kopieren einer Datei: ErrorReplacingExistingFile=Fehler beim Ersetzen einer vorhandenen Datei: ErrorRestartReplace="Ersetzen nach Neustart" fehlgeschlagen: ErrorRenamingTemp=Fehler beim Umbenennen einer Datei im Ziel-Ordner: ErrorRegisterServer=DLL/OCX konnte nicht registriert werden: %1 ErrorRegSvr32Failed=RegSvr32-Aufruf scheiterte mit Exit-Code %1 ErrorRegisterTypeLib=Typen-Bibliothek konnte nicht registriert werden: %1 ; *** Post-installation errors ErrorOpeningReadme=Fehler beim ffnen der LIESMICH-Datei. ErrorRestartingComputer=Das Setup konnte den Computer nicht neu starten. Bitte fhren Sie den Neustart manuell durch. ; *** Uninstaller messages UninstallNotFound=Die Datei "%1" existiert nicht. Entfernen der Anwendung fehlgeschlagen. UninstallOpenError=Die Datei "%1" konnte nicht geffnet werden. Entfernen der Anwendung fehlgeschlagen. UninstallUnsupportedVer=Das Format der Deinstallations-Datei "%1" konnte nicht erkannt werden. Entfernen der Anwendung fehlgeschlagen UninstallUnknownEntry=In der Deinstallations-Datei wurde ein unbekannter Eintrag (%1) gefunden ConfirmUninstall=Sind Sie sicher, dass Sie %1 und alle zugehrigen Komponenten entfernen mchten? UninstallOnlyOnWin64=Diese Installation kann nur unter 64-bit Windows-Versionen entfernt werden. OnlyAdminCanUninstall=Diese Installation kann nur von einem Benutzer mit Administrator-Rechten entfernt werden. UninstallStatusLabel=Warten Sie bitte whrend %1 von Ihrem Computer entfernt wird. UninstalledAll=%1 wurde erfolgreich von Ihrem Computer entfernt. UninstalledMost=Entfernen von %1 beendet.%n%nEinige Komponenten konnten nicht entfernt werden. Diese knnen von Ihnen manuell gelscht werden. UninstalledAndNeedsRestart=Um die Deinstallation von %1 abzuschlieen, muss Ihr Computer neu gestartet werden.%n%nMchten Sie jetzt neu starten? UninstallDataCorrupted="%1"-Datei ist beschdigt. Entfernen der Anwendung fehlgeschlagen. ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=Gemeinsame Datei entfernen? ConfirmDeleteSharedFile2=Das System zeigt an, dass die folgende gemeinsame Datei von keinem anderen Programm mehr benutzt wird. Mchten Sie diese Datei entfernen lassen?%nSollte es doch noch Programme geben, die diese Datei benutzen, und sie wird entfernt, funktionieren diese Programme vielleicht nicht mehr richtig. Wenn Sie unsicher sind, whlen Sie "Nein" um die Datei im System zu belassen. Es schadet Ihrem System nicht, wenn Sie die Datei behalten. SharedFileNameLabel=Dateiname: SharedFileLocationLabel=Ordner: WizardUninstalling=Entfernen (Status) StatusUninstalling=Entferne %1 ... [CustomMessages] NameAndVersion=%1 Version %2 AdditionalIcons=Zustzliche Symbole: CreateDesktopIcon=&Desktop-Symbol erstellen CreateQuickLaunchIcon=Symbol in der Schnellstartleiste erstellen ProgramOnTheWeb=%1 im Internet UninstallProgram=%1 entfernen LaunchProgram=%1 starten AssocFileExtension=&Registriere %1 mit der %2-Dateierweiterung AssocingFileExtension=%1 wird mit der %2-Dateierweiterung registriert... CalibrationLoading=Kalibrierung bei Anmeldung laden: CalibrationLoadingHandledByDispcalGUI=dispcalGUI Profil-Lader (hohe Qualitt) CalibrationLoadingHandledByOS=Betriebssystem (niedrige Qualitt)dispcalGUI-1.7.1.6/misc/InnoSetup/v5/Languages/Italian.isl000644 000765 000000 00000044476 12265441406 023052 0ustar00svpwheel000000 000000 ; *** Inno Setup versione 5.1.11+ lingua Italiana *** ; ; To download user-contributed translations of this file, go to: ; http://www.jrsoftware.org/is3rdparty.php ; ; Note: When translating this text, do not add periods (.) to the end of ; messages that didn't have them already, because on those messages Inno ; Setup adds the periods automatically (appending a period would result in ; two periods being displayed). ; ; Italian.isl revisione 30b - 2007/02/28 (Basato su Default.isl 1.69) ; ; Tradotto da ale5000 ; E-mail: ale5000 AT tiscali DOT it ; Segnalatemi via e-mail eventuali errori o suggerimenti. [LangOptions] ; The following three entries are very important. Be sure to read and ; understand the '[LangOptions] section' topic in the help file. LanguageName=Italiano LanguageID=$0410 LanguageCodePage=1252 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. ;DialogFontName= ;DialogFontSize=8 ;WelcomeFontName=Verdana ;WelcomeFontSize=12 ;TitleFontName=Arial ;TitleFontSize=29 ;CopyrightFontName=Arial ;CopyrightFontSize=8 [Messages] ; *** Application titles SetupAppTitle=Installazione SetupWindowTitle=Installazione di %1 UninstallAppTitle=Disinstallazione UninstallAppFullTitle=Disinstallazione di %1 ; *** Misc. common InformationTitle=Informazioni ConfirmTitle=Conferma ErrorTitle=Errore ; *** SetupLdr messages SetupLdrStartupMessage=Questa l'installazione di %1. Si desidera continuare? LdrCannotCreateTemp=Impossibile creare un file temporaneo. Installazione annullata LdrCannotExecTemp=Impossibile eseguire un file nella cartella temporanea. Installazione annullata ; *** Startup error messages LastErrorMessage=%1.%n%nErrore %2: %3 SetupFileMissing=File %1 non trovato nella cartella di installazione. Correggere il problema o richiedere una nuova copia del software. SetupFileCorrupt=I file di installazione sono danneggiati. Richiedere una nuova copia del software. SetupFileCorruptOrWrongVer=I file di installazione sono danneggiati, o sono incompatibili con questa versione del programma di installazione. Correggere il problema o richiedere una nuova copia del software. NotOnThisPlatform=Questo programma non compatibile con %1. OnlyOnThisPlatform=Questo programma richiede %1. OnlyOnTheseArchitectures=Questo programma pu essere installato solo su versioni di Windows progettate per le seguenti architetture del processore:%n%n%1 MissingWOW64APIs=La versione di Windows utilizzata non include la funzionalit richiesta dal programma di installazione per realizzare un'installazione a 64-bit. Per correggere questo problema, installare il Service Pack %1. WinVersionTooLowError=Questo programma richiede %1 versione %2 o successiva. WinVersionTooHighError=Questo programma non pu essere installato su %1 versione %2 o successiva. AdminPrivilegesRequired=Sono richiesti privilegi di amministratore per installare questo programma. PowerUserPrivilegesRequired=Sono richiesti privilegi di amministratore o di Power Users per poter installare questo programma. SetupAppRunningError=%1 attualmente in esecuzione.%n%nChiudere adesso tutte le istanze del programma e poi premere OK, oppure premere Annulla per uscire. UninstallAppRunningError=%1 attualmente in esecuzione.%n%nChiudere adesso tutte le istanze del programma e poi premere OK, oppure premere Annulla per uscire. ; *** Misc. errors ErrorCreatingDir=Impossibile creare la cartella "%1" ErrorTooManyFilesInDir=Impossibile creare i file nella cartella "%1" perch contiene troppi file ; *** Setup common messages ExitSetupTitle=Uscita dall'installazione ExitSetupMessage=L'installazione non completa. Uscendo dall'installazione in questo momento, il programma non sar installato.%n%n possibile eseguire l'installazione in un secondo tempo.%n%nUscire dall'installazione? AboutSetupMenuItem=&Informazioni sull'installazione... AboutSetupTitle=Informazioni sull'installazione AboutSetupMessage=%1 versione %2%n%3%n%n%1 sito web:%n%4 AboutSetupNote= TranslatorNote= ; *** Buttons ButtonBack=< &Indietro ButtonNext=&Avanti > ButtonInstall=&Installa ButtonOK=OK ButtonCancel=Annulla ButtonYes=&Si ButtonYesToAll=Si a &tutto ButtonNo=&No ButtonNoToAll=N&o a tutto ButtonFinish=&Fine ButtonBrowse=&Sfoglia... ButtonWizardBrowse=S&foglia... ButtonNewFolder=&Crea nuova cartella ; *** "Select Language" dialog messages SelectLanguageTitle=Selezionare la lingua dell'installazione SelectLanguageLabel=Selezionare la lingua da utilizzare durante l'installazione: ; *** Common wizard text ClickNext=Premere Avanti per continuare, o Annulla per uscire. BeveledLabel= BrowseDialogTitle=Sfoglia per cartelle BrowseDialogLabel=Selezionare una cartella dalla lista, poi premere OK. NewFolderName=Nuova cartella ; *** "Welcome" wizard page WelcomeLabel1=Benvenuti nel programma di installazione di [name] WelcomeLabel2=[name/ver] sar installato sul computer.%n%nSi consiglia di chiudere tutte le applicazioni attive prima di procedere. ; *** "Password" wizard page WizardPassword=Password PasswordLabel1=Questa installazione protetta da password. PasswordLabel3=Inserire la password, poi premere Avanti per continuare. Le password sono sensibili alle maiuscole/minuscole. PasswordEditLabel=&Password: IncorrectPassword=La password inserita non corretta, riprovare. ; *** "License Agreement" wizard page WizardLicense=Contratto di licenza LicenseLabel=Leggere con attenzione le informazioni che seguono prima di procedere. LicenseLabel3=Leggere il seguente contratto di licenza. necessario accettare tutti i termini del contratto per procedere con l'installazione. LicenseAccepted=&Accetto i termini del contratto di licenza LicenseNotAccepted=&Non accetto i termini del contratto di licenza ; *** "Information" wizard pages WizardInfoBefore=Informazioni InfoBeforeLabel=Leggere le importanti informazioni che seguono prima di procedere. InfoBeforeClickLabel=Quando si pronti per proseguire, premere Avanti. WizardInfoAfter=Informazioni InfoAfterLabel=Leggere le importanti informazioni che seguono prima di procedere. InfoAfterClickLabel=Quando si pronti per proseguire, premere Avanti. ; *** "User Information" wizard page WizardUserInfo=Informazioni utente UserInfoDesc=Inserire le seguenti informazioni. UserInfoName=&Nome: UserInfoOrg=&Societ: UserInfoSerial=&Numero di serie: UserInfoNameRequired= necessario inserire un nome. ; *** "Select Destination Location" wizard page WizardSelectDir=Selezione della cartella di installazione SelectDirDesc=Dove si vuole installare [name]? SelectDirLabel3=[name] sar installato nella seguente cartella. SelectDirBrowseLabel=Per continuare, premere Avanti. Per scegliere un'altra cartella, premere Sfoglia. DiskSpaceMBLabel=Sono richiesti almeno [mb] MB di spazio sul disco. ToUNCPathname=Non possiblie installare su un percorso di rete. Se si sta installando attraverso una rete, si deve connettere la risorsa come una unit di rete. InvalidPath=Si deve inserire un percorso completo di lettera di unit; per esempio:%n%nC:\APP%n%no un percorso di rete nella forma:%n%n\\server\condivisione InvalidDrive=L'unit o il percorso di rete selezionato non esiste o non accessibile. Selezionarne un'altro. DiskSpaceWarningTitle=Spazio su disco insufficiente DiskSpaceWarning=L'installazione richiede almeno %1 KB di spazio libero per eseguire l'installazione, ma l'unit selezionata ha solo %2 KB disponibili.%n%nSi desidera continuare comunque? DirNameTooLong=Il nome della cartella o il percorso sono troppo lunghi. InvalidDirName=Il nome della cartella non valido. BadDirName32=Il nome della cartella non pu includere nessuno dei caratteri seguenti:%n%n%1 DirExistsTitle=Cartella gi esistente DirExists=La cartella:%n%n%1 esiste gi.%n%nSi desidera utilizzarla comunque? DirDoesntExistTitle=Cartella inesistente DirDoesntExist=La cartella:%n%n%1 non esiste.%n%nSi desidera crearla? ; *** "Select Components" wizard page WizardSelectComponents=Selezione componenti SelectComponentsDesc=Quali componenti devono essere installati? SelectComponentsLabel2=Selezionare i componenti da installare, deselezionare quelli che non si desidera installare. Premere Avanti per continuare. FullInstallation=Installazione completa ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=Installazione compatta CustomInstallation=Installazione personalizzata NoUninstallWarningTitle=Componente esistente NoUninstallWarning=I seguenti componenti sono gi installati sul computer:%n%n%1%n%nDeselezionando questi componenti non verranno disinstallati.%n%nSi desidera continuare comunque? ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceMBLabel=La selezione corrente richiede almeno [mb] MB di spazio su disco. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=Selezione processi addizionali SelectTasksDesc=Quali processi aggiuntivi si vogliono avviare? SelectTasksLabel2=Selezionare i processi aggiuntivi che verranno eseguiti durante l'installazione di [name], poi premere Avanti. ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Selezione della cartella nel Menu Avvio/Start SelectStartMenuFolderDesc=Dove si vuole inserire i collegamenti al programma? SelectStartMenuFolderLabel3=Saranno creati i collegamenti al programma nella seguente cartella del Menu Avvio/Start. SelectStartMenuFolderBrowseLabel=Per continuare, premere Avanti. Per selezionare un'altra cartella, premere Sfoglia. MustEnterGroupName=Si deve inserire il nome della cartella. GroupNameTooLong=Il nome della cartella o il percorso sono troppo lunghi. InvalidGroupName=Il nome della cartella non valido. BadGroupName=Il nome della cartella non pu includere nessuno dei caratteri seguenti:%n%n%1 NoProgramGroupCheck2=&Non creare una cartella nel Menu Avvio/Start ; *** "Ready to Install" wizard page WizardReady=Pronto per l'installazione ReadyLabel1=Il programma di installazione pronto per iniziare l'installazione di [name] sul computer. ReadyLabel2a=Premere Installa per continuare con l'installazione, o Indietro per rivedere o modificare le impostazioni. ReadyLabel2b=Premere Installa per procedere con l'installazione. ReadyMemoUserInfo=Informazioni utente: ReadyMemoDir=Cartella di installazione: ReadyMemoType=Tipo di installazione: ReadyMemoComponents=Componenti selezionati: ReadyMemoGroup=Cartella del menu Avvio/Start: ReadyMemoTasks=Processi addizionali: ; *** "Preparing to Install" wizard page WizardPreparing=Preparazione all'installazione PreparingDesc=Preparazione all'installazione di [name] sul computer. PreviousInstallNotCompleted=L'installazione/disinstallazione precedente del programma non stata completata. necessario riavviare il sistema per completare l'installazione.%n%nAl successivo riavvio del sistema eseguire di nuovo l'installazione di [name]. CannotContinue=L'installazione non pu continuare. Premere Annulla per uscire. ; *** "Installing" wizard page WizardInstalling=Installazione in corso InstallingLabel=Attendere il completamento dell'installazione di [name] sul computer. ; *** "Setup Completed" wizard page FinishedHeadingLabel=Completamento dell'installazione di [name] FinishedLabelNoIcons=L'installazione di [name] stata completata con successo. FinishedLabel=L'installazione di [name] stata completata con successo. L'applicazione pu essere eseguita selezionando le relative icone. ClickFinish=Premere Fine per uscire dall'installazione. FinishedRestartLabel=Per completare l'installazione di [name], necessario riavviare il sistema. Si desidera riavviare adesso? FinishedRestartMessage=Per completare l'installazione di [name], necessario riavviare il sistema.%n%nSi desidera riavviare adesso? ShowReadmeCheck=Si, desidero vedere il file LEGGIMI adesso YesRadio=&Si, riavvia il sistema adesso NoRadio=&No, riavvia il sistema pi tardi ; used for example as 'Run MyProg.exe' RunEntryExec=Avvia %1 ; used for example as 'View Readme.txt' RunEntryShellExec=Visualizza %1 ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=L'installazione necessita del disco successivo SelectDiskLabel2=Inserire il disco %1 e premere OK.%n%nSe i file su questo disco si trovano in una cartella diversa da quella visualizzata sotto, inserire il percorso corretto o premere Sfoglia. PathLabel=&Percorso: FileNotInDir2=Il file "%1" non stato trovato in "%2". Inserire il disco corretto o selezionare un'altra cartella. SelectDirectoryLabel=Specificare il percorso del prossimo disco. ; *** Installation phase messages SetupAborted=L'installazione non stata completata.%n%nCorreggere il problema e rieseguire nuovamente l'installazione. EntryAbortRetryIgnore=Premere Riprova per ritentare nuovamente, Ignora per procedere in ogni caso, o Interrompi per terminare l'installazione. ; *** Installation status messages StatusCreateDirs=Creazione cartelle... StatusExtractFiles=Estrazione file... StatusCreateIcons=Creazione icone... StatusCreateIniEntries=Creazione voci nei file INI... StatusCreateRegistryEntries=Creazione voci di registro... StatusRegisterFiles=Registrazione file... StatusSavingUninstall=Salvataggio delle informazioni di disinstallazione... StatusRunProgram=Termine dell'installazione... StatusRollback=Recupero delle modifiche... ; *** Misc. errors ErrorInternal2=Errore Interno %1 ErrorFunctionFailedNoCode=%1 fallito ErrorFunctionFailed=%1 fallito; codice %2 ErrorFunctionFailedWithMessage=%1 fallito; codice %2.%n%3 ErrorExecutingProgram=Impossibile eseguire il file:%n%1 ; *** Registry errors ErrorRegOpenKey=Errore di apertura della chiave di registro:%n%1\%2 ErrorRegCreateKey=Errore di creazione della chiave di registro:%n%1\%2 ErrorRegWriteKey=Errore di scrittura della chiave di registro:%n%1\%2 ; *** INI errors ErrorIniEntry=Errore nella creazione delle voci INI nel file "%1". ; *** File copying errors FileAbortRetryIgnore=Premere Riprova per tentare di nuovo, Ignora per saltare questo file (sconsigliato), o Interrompi per terminare l'installazione. FileAbortRetryIgnore2=Premere Riprova per tentare di nuovo, Ignora per proseguire comunque (sconsigliato), o Interrompi per terminare l'installazione. SourceIsCorrupted=Il file sorgente danneggiato SourceDoesntExist=Il file sorgente "%1" non esiste ExistingFileReadOnly=Il file esistente ha l'attributo di sola lettura.%n%nPremere Riprova per rimuovere l'attributo di sola lettura e ritentare, Ignora per saltare questo file, o Interrompi per terminare l'installazione. ErrorReadingExistingDest=Si verificato un errore durante la lettura del file esistente: FileExists=Il file esiste gi.%n%nDesideri sovrascriverlo? ExistingFileNewer=Il file esistente pi recente di quello che si st installando. Si raccomanda di mantenere il file esistente.%n%nSi desidera mantenere il file esistente? ErrorChangingAttr=Si verificato un errore durante il tentativo di modifica dell'attributo del file esistente: ErrorCreatingTemp=Si verificato un errore durante la creazione di un file nella cartella di installazione: ErrorReadingSource=Si verificato un errore durante la lettura del file sorgente: ErrorCopying=Si verificato un errore durante la copia di un file: ErrorReplacingExistingFile=Si verificato un errore durante la sovrascrittura del file esistente: ErrorRestartReplace=Errore durante Riavvio-Sostituzione: ErrorRenamingTemp=Si verificato un errore durante il tentativo di rinominare un file nella cartella di installazione: ErrorRegisterServer=Impossibile registrare la DLL/OCX: %1 ErrorRegSvr32Failed=RegSvr32 fallito con codice di uscita %1 ErrorRegisterTypeLib=Impossibile registrare la libreria di tipo: %1 ; *** Post-installation errors ErrorOpeningReadme=Si verificato un errore durante l'apertura del file LEGGIMI. ErrorRestartingComputer=Impossibile riavviare il sistema. Riavviare manualmente. ; *** Uninstaller messages UninstallNotFound=Il file "%1" non esiste. Impossibile disinstallare. UninstallOpenError=Il file "%1" non pu essere aperto. Impossibile disinstallare UninstallUnsupportedVer=Il file log di disinstallazione "%1" in un formato non riconosciuto da questa versione del programma di disinstallazione. Impossibile disinstallare UninstallUnknownEntry=Trovata una voce sconosciuta (%1) nel file di log della disinstallazione ConfirmUninstall=Si desidera rimuovere completamente %1 e tutti i suoi componenti? UninstallOnlyOnWin64=Questo programma pu essere disinstallato solo su Windows a 64-bit. OnlyAdminCanUninstall=Questa applicazione pu essere disinstallata solo da un utente con privilegi di amministratore. UninstallStatusLabel=Attendere fino a che %1 stato rimosso dal computer. UninstalledAll=%1 stato rimosso con successo dal computer. UninstalledMost=Disinstallazione di %1 completata.%n%nAlcuni elementi non possono essere rimossi. Dovranno essere rimossi manualmente. UninstalledAndNeedsRestart=Per completare la disinstallazione di %1, necessario riavviare il sistema.%n%nSi desidera riavviare adesso? UninstallDataCorrupted=Il file "%1" danneggiato. Impossibile disinstallare ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=Rimuovere il file condiviso? ConfirmDeleteSharedFile2=Il sistema indica che il seguente file condiviso non pi usato da nessun programma. Rimuovere questo file condiviso?%n%nSe qualche programma usasse questo file, potrebbe non funzionare pi correttamente. Se non si sicuri, scegliere No. Lasciare il file nel sistema non pu causare danni. SharedFileNameLabel=Nome del file: SharedFileLocationLabel=Percorso: WizardUninstalling=Stato della disinstallazione StatusUninstalling=Disinstallazione di %1 in corso... ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1 versione %2 AdditionalIcons=Icone aggiuntive: CreateDesktopIcon=Crea un'icona sul &desktop CreateQuickLaunchIcon=Crea un'icona nella barra &Avvio veloce ProgramOnTheWeb=%1 sul Web UninstallProgram=Disinstalla %1 LaunchProgram=Avvia %1 AssocFileExtension=&Associa l'estensione %2 a %1 AssocingFileExtension=Associazione dell'estensione %2 a %1 in corso... CalibrationLoading=Caricamento di calibrazione su login: CalibrationLoadingHandledByDispcalGUI=dispcalGUI Profile Loader (alta qualit) CalibrationLoadingHandledByOS=Sistema operativo (di bassa qualit)dispcalGUI-1.7.1.6/misc/InnoSetup/v5/Languages/Spanish.isl000644 000765 000000 00000044744 12265441406 023074 0ustar00svpwheel000000 000000 ; *** Inno Setup version 5.1.11+ Spanish messages *** ; ; Maintained by Jorge Andres Brugger (jbrugger@gmx.net) ; Spanish.isl version 0.9 (20100922) ; Default.isl version 1.72 ; ; Thanks to Germn Giraldo, Jordi Latorre, Ximo Tamarit, Emiliano Llano, ; Ramn Verduzco, Graciela Garca and Carles Millan [LangOptions] ; The following three entries are very important. Be sure to read and ; understand the '[LangOptions] section' topic in the help file. LanguageName=Espa<00F1>ol LanguageID=$0c0a LanguageCodePage=1252 ; If the language you are translating to requires special font faces or ; sizes, uncomment any of the following entries and change them accordingly. ;DialogFontName= ;DialogFontSize=8 ;WelcomeFontName=Verdana ;WelcomeFontSize=12 ;TitleFontName=Arial ;TitleFontSize=29 ;CopyrightFontName=Arial ;CopyrightFontSize=8 [Messages] ; *** Application titles SetupAppTitle=Instalar SetupWindowTitle=Instalar - %1 UninstallAppTitle=Desinstalar UninstallAppFullTitle=Desinstalar - %1 ; *** Misc. common InformationTitle=Informacin ConfirmTitle=Confirmar ErrorTitle=Error ; *** SetupLdr messages SetupLdrStartupMessage=Este programa instalar %1. Desea continuar? LdrCannotCreateTemp=Imposible crear archivo temporal. Instalacin interrumpida LdrCannotExecTemp=Imposible ejecutar archivo en la carpeta temporal. Instalacin interrumpida ; *** Startup error messages LastErrorMessage=%1.%n%nError %2: %3 SetupFileMissing=El archivo %1 no se encuentra en la carpeta de instalacin. Por favor, solucione el problema u obtenga una copia nueva del programa. SetupFileCorrupt=Los archivos de instalacin estn daados. Por favor, obtenga una copia nueva del programa. SetupFileCorruptOrWrongVer=Los archivos de instalacin estn daados, o son incompatibles con esta versin del programa de instalacin. Por favor, solucione el problema u obtenga una copia nueva del programa. NotOnThisPlatform=Este programa no se ejecutar en %1. OnlyOnThisPlatform=Este programa debe ejecutarse en %1. OnlyOnTheseArchitectures=Este programa slo puede instalarse en versiones de Windows diseadas para las siguientes arquitecturas de procesadores:%n%n%1 MissingWOW64APIs=La versin de Windows que est utilizando no cuenta con la funcionalidad requerida por el instalador para realizar una instalacin de 64-bits. Para solucionar este problema, por favor instale el Service Pack %1. WinVersionTooLowError=Este programa requiere %1 versin %2 o posterior. WinVersionTooHighError=Este programa no puede instalarse en %1 versin %2 o posterior. AdminPrivilegesRequired=Debe iniciar la sesin como administrador para instalar este programa. PowerUserPrivilegesRequired=Debe iniciar la sesin como administrador o como un miembro del grupo Usuarios Avanzados para instalar este programa. SetupAppRunningError=El programa de instalacin ha detectado que %1 est ejecutndose.%n%nPor favor, cirrelo ahora, luego haga clic en Aceptar para continuar, o en Cancelar para salir. UninstallAppRunningError=El desinstalador ha detectado que %1 est ejecutndose.%n%nPor favor, cirrelo ahora, luego haga clic en Aceptar para continuar, o en Cancelar para salir. ; *** Misc. errors ErrorCreatingDir=El programa de instalacin no pudo crear la carpeta "%1" ErrorTooManyFilesInDir=Imposible crear un archivo en la carpeta "%1" porque contiene demasiados archivos ; *** Setup common messages ExitSetupTitle=Salir de la Instalacin ExitSetupMessage=La instalacin no se ha completado an. Si cancela ahora, el programa no ser instalado.%n%nPuede ejecutar nuevamente el programa de instalacin en otra ocasin para completarla.%n%nSalir de la instalacin? AboutSetupMenuItem=&Acerca de Instalar... AboutSetupTitle=Acerca de Instalar AboutSetupMessage=%1 versin %2%n%3%n%n%1 sitio Web:%n%4 AboutSetupNote= TranslatorNote=Spanish translation maintained by Jorge Andres Brugger (jbrugger@gmx.net) ; *** Buttons ButtonBack=< &Atrs ButtonNext=&Siguiente > ButtonInstall=&Instalar ButtonOK=Aceptar ButtonCancel=Cancelar ButtonYes=&S ButtonYesToAll=S a &Todo ButtonNo=&No ButtonNoToAll=N&o a Todo ButtonFinish=&Finalizar ButtonBrowse=&Examinar... ButtonWizardBrowse=&Examinar... ButtonNewFolder=&Crear Nueva Carpeta ; *** "Select Language" dialog messages SelectLanguageTitle=Seleccione el Idioma de la Instalacin SelectLanguageLabel=Seleccione el idioma a utilizar durante la instalacin: ; *** Common wizard text ClickNext=Haga clic en Siguiente para continuar, o en Cancelar para salir de la instalacin. BeveledLabel= BrowseDialogTitle=Buscar Carpeta BrowseDialogLabel=Seleccione una carpeta, y luego haga clic en Aceptar. NewFolderName=Nueva Carpeta ; *** "Welcome" wizard page WelcomeLabel1=Bienvenido al asistente de instalacin de [name] WelcomeLabel2=Este programa instalar [name/ver] en su sistema.%n%nSe recomienda que cierre todas las dems aplicaciones antes de continuar. ; *** "Password" wizard page WizardPassword=Contrasea PasswordLabel1=Esta instalacin est protegida por contrasea. PasswordLabel3=Por favor, ingrese la contrasea, y haga clic en Siguiente para continuar. En las contraseas se hace diferencia entre maysculas y minsculas. PasswordEditLabel=&Contrasea: IncorrectPassword=La contrasea ingresada no es correcta. Por favor, intntelo nuevamente. ; *** "License Agreement" wizard page WizardLicense=Acuerdo de Licencia LicenseLabel=Por favor, lea la siguiente informacin de importancia antes de continuar. LicenseLabel3=Por favor, lea el siguiente acuerdo de licencia. Debe aceptar los trminos de este acuerdo antes de continuar con la instalacin. LicenseAccepted=A&cepto el acuerdo LicenseNotAccepted=&No acepto el acuerdo ; *** "Information" wizard pages WizardInfoBefore=Informacin InfoBeforeLabel=Por favor, lea la siguiente informacin de importancia antes de continuar. InfoBeforeClickLabel=Cuando est listo para continuar con la instalacin, haga clic en Siguiente. WizardInfoAfter=Informacin InfoAfterLabel=Por favor, lea la siguiente informacin de importancia antes de continuar. InfoAfterClickLabel=Cuando est listo para continuar, haga clic en Siguiente. ; *** "User Information" wizard page WizardUserInfo=Informacin de Usuario UserInfoDesc=Por favor, introduzca su informacin. UserInfoName=Nombre de &Usuario: UserInfoOrg=&Organizacin: UserInfoSerial=Nmero de &Serie: UserInfoNameRequired=Debe ingresar un nombre. ; *** "Select Destination Location" wizard page WizardSelectDir=Seleccione la Carpeta de Destino SelectDirDesc=Dnde debe instalarse [name]? SelectDirLabel3=El programa instalar [name] en la siguiente carpeta. SelectDirBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta diferente, haga clic en Examinar. DiskSpaceMBLabel=Se requieren al menos [mb] MB de espacio libre en el disco. ToUNCPathname=No es posible realizar la instalacin en una ruta de acceso UNC. Si est intentando instalar en una red, necesitar mapear una unidad de la red. InvalidPath=Debe ingresar una ruta completa con la letra de la unidad; por ejemplo:%n%nC:\APP%n%no una ruta de acceso UNC de la siguiente forma:%n%n\\servidor\compartido InvalidDrive=La unidad o ruta de acceso UNC que seleccion no existe o no es accesible. Por favor, seleccione otra. DiskSpaceWarningTitle=Espacio Insuficiente en Disco DiskSpaceWarning=La instalacin requiere al menos %1 KB de espacio libre, pero la unidad seleccionada slo cuenta con %2 KB disponibles.%n%nDesea continuar de todas formas? DirNameTooLong=El nombre de la carpeta o la ruta son demasiado largos. InvalidDirName=El nombre de la carpeta no es vlido. BadDirName32=Los nombres de carpetas no pueden incluir los siguientes caracteres:%n%n%1 DirExistsTitle=La Carpeta Ya Existe DirExists=La carpeta:%n%n%1%n%nya existe. Desea realizar la instalacin en esa carpeta de todas formas? DirDoesntExistTitle=La Carpeta No Existe DirDoesntExist=La carpeta:%n%n%1%n%nno existe. Desea crear esa carpeta? ; *** "Select Components" wizard page WizardSelectComponents=Seleccione los Componentes SelectComponentsDesc=Qu componentes deben instalarse? SelectComponentsLabel2=Seleccione los componentes que desea instalar; desactive los componentes que no desea instalar. Haga clic en Siguiente cuando est listo para continuar. FullInstallation=Instalacin Completa ; if possible don't translate 'Compact' as 'Minimal' (I mean 'Minimal' in your language) CompactInstallation=Instalacin Compacta CustomInstallation=Instalacin Personalizada NoUninstallWarningTitle=Componentes Existentes NoUninstallWarning=El programa de instalacin ha detectado que los siguientes componentes ya estn instalados en su sistema:%n%n%1%n%nQuitar la seleccin a estos componentes no los desinstalar.%n%nDesea continuar de todos modos? ComponentSize1=%1 KB ComponentSize2=%1 MB ComponentsDiskSpaceMBLabel=La seleccin actual requiere al menos [mb] MB de espacio en disco. ; *** "Select Additional Tasks" wizard page WizardSelectTasks=Seleccione las Tareas Adicionales SelectTasksDesc=Qu tareas adicionales deben realizarse? SelectTasksLabel2=Seleccione las tareas adicionales que desea que se realicen durante la instalacin de [name] y haga clic en Siguiente. ; *** "Select Start Menu Folder" wizard page WizardSelectProgramGroup=Seleccione la Carpeta del Men Inicio SelectStartMenuFolderDesc=Dnde deben colocarse los accesos directos del programa? SelectStartMenuFolderLabel3=El programa de instalacin crear los accesos directos del programa en la siguiente carpeta del Men Inicio. SelectStartMenuFolderBrowseLabel=Para continuar, haga clic en Siguiente. Si desea seleccionar una carpeta distinta, haga clic en Examinar. MustEnterGroupName=Debe proporcionar un nombre de carpeta. GroupNameTooLong=El nombre de la carpeta o la ruta son demasiado largos. InvalidGroupName=El nombre de la carpeta no es vlido. BadGroupName=El nombre de la carpeta no puede incluir ninguno de los siguientes caracteres:%n%n%1 NoProgramGroupCheck2=&No crear una carpeta en el Men Inicio ; *** "Ready to Install" wizard page WizardReady=Listo para Instalar ReadyLabel1=Ahora el programa est listo para iniciar la instalacin de [name] en su sistema. ReadyLabel2a=Haga clic en Instalar para continuar con el proceso, o haga clic en Atrs si desea revisar o cambiar alguna configuracin. ReadyLabel2b=Haga clic en Instalar para continuar con el proceso. ReadyMemoUserInfo=Informacin del usuario: ReadyMemoDir=Carpeta de Destino: ReadyMemoType=Tipo de Instalacin: ReadyMemoComponents=Componentes Seleccionados: ReadyMemoGroup=Carpeta del Men Inicio: ReadyMemoTasks=Tareas Adicionales: ; *** "Preparing to Install" wizard page WizardPreparing=Preparndose para Instalar PreparingDesc=El programa de instalacin est preparndose para instalar [name] en su sistema. PreviousInstallNotCompleted=La instalacin/desinstalacin previa de un programa no se complet. Deber reiniciar el sistema para completar esa instalacin.%n%nUna vez reiniciado el sistema, ejecute el programa de instalacin nuevamente para completar la instalacin de [name]. CannotContinue=El programa de instalacin no puede continuar. Por favor, presione Cancelar para salir. ; *** "Installing" wizard page WizardInstalling=Instalando InstallingLabel=Por favor, espere mientras se instala [name] en su sistema. ; *** "Setup Completed" wizard page FinishedHeadingLabel=Completando la instalacin de [name] FinishedLabelNoIcons=El programa complet la instalacin de [name] en su sistema. FinishedLabel=El programa complet la instalacin de [name] en su sistema. Puede ejecutar la aplicacin haciendo clic sobre el icono instalado. ClickFinish=Haga clic en Finalizar para salir del programa de instalacin. FinishedRestartLabel=Para completar la instalacin de [name], su sistema debe reiniciarse. Desea reiniciarlo ahora? FinishedRestartMessage=Para completar la instalacin de [name], su sistema debe reiniciarse.%n%nDesea reiniciarlo ahora? ShowReadmeCheck=S, deseo ver el archivo LAME YesRadio=&S, deseo reiniciar el sistema ahora NoRadio=&No, reiniciar el sistema ms tarde ; used for example as 'Run MyProg.exe' RunEntryExec=Ejecutar %1 ; used for example as 'View Readme.txt' RunEntryShellExec=Ver %1 ; *** "Setup Needs the Next Disk" stuff ChangeDiskTitle=El Programa de Instalacin Necesita el Siguiente Disco SelectDiskLabel2=Por favor, inserte el Disco %1 y haga clic en Aceptar.%n%nSi los archivos pueden ser hallados en una carpeta diferente a la indicada abajo, introduzca la ruta correcta o haga clic en Examinar. PathLabel=&Ruta: FileNotInDir2=El archivo "%1" no se ha podido hallar en "%2". Por favor, inserte el disco correcto o seleccione otra carpeta. SelectDirectoryLabel=Por favor, especifique la ubicacin del siguiente disco. ; *** Installation phase messages SetupAborted=La instalacin no se ha completado.%n%nPor favor solucione el problema y ejecute nuevamente el programa de instalacin. EntryAbortRetryIgnore=Haga clic en Reintentar para intentarlo de nuevo, en Omitir para continuar de todas formas, o en Anular para cancelar la instalacin. ; *** Installation status messages StatusCreateDirs=Creando carpetas... StatusExtractFiles=Extrayendo archivos... StatusCreateIcons=Creando accesos directos... StatusCreateIniEntries=Creando entradas INI... StatusCreateRegistryEntries=Creando entradas de registro... StatusRegisterFiles=Registrando archivos... StatusSavingUninstall=Guardando informacin para desinstalar... StatusRunProgram=Terminando la instalacin... StatusRollback=Deshaciendo cambios... ; *** Misc. errors ErrorInternal2=Error interno: %1 ErrorFunctionFailedNoCode=%1 fall ErrorFunctionFailed=%1 fall; cdigo %2 ErrorFunctionFailedWithMessage=%1 fall; cdigo %2.%n%3 ErrorExecutingProgram=Imposible ejecutar el archivo:%n%1 ; *** Registry errors ErrorRegOpenKey=Error al abrir la clave del registro:%n%1\%2 ErrorRegCreateKey=Error al crear la clave del registro:%n%1\%2 ErrorRegWriteKey=Error al escribir la clave del registro:%n%1\%2 ; *** INI errors ErrorIniEntry=Error al crear entrada INI en el archivo "%1". ; *** File copying errors FileAbortRetryIgnore=Haga clic en Reintentar para intentarlo de nuevo, en Omitir para excluir este archivo (no recomendado), o en Anular para cancelar la instalacin. FileAbortRetryIgnore2=Haga clic en Reintentar para intentarlo de nuevo, en Omitir para continuar de todas formas (no recomendado), o en Anular para cancelar la instalacin. SourceIsCorrupted=El archivo de origen est daado SourceDoesntExist=El archivo de origen "%1" no existe ExistingFileReadOnly=El archivo existente est marcado como slo-lectura.%n%nHaga clic en Reintentar para quitar el atributo de slo-lectura e intentarlo de nuevo, en Omitir para excluir este archivo, o en Anular para cancelar la instalacin. ErrorReadingExistingDest=Ocurri un error mientras se intentaba leer el archivo: FileExists=El archivo ya existe.%n%nDesea sobreescribirlo? ExistingFileNewer=El archivo existente es ms reciente que el que est tratando de instalar. Se recomienda que mantenga el archivo existente.%n%nDesea mantener el archivo existente? ErrorChangingAttr=Ocurri un error al intentar cambiar los atributos del archivo: ErrorCreatingTemp=Ocurri un error al intentar crear un archivo en la carpeta de destino: ErrorReadingSource=Ocurri un error al intentar leer el archivo de origen: ErrorCopying=Ocurri un error al intentar copiar el archivo: ErrorReplacingExistingFile=Ocurri un error al intentar reemplazar el archivo existente: ErrorRestartReplace=Fall reintento de reemplazar: ErrorRenamingTemp=Ocurri un error al intentar renombrar un archivo en la carpeta de destino: ErrorRegisterServer=Imposible registrar el DLL/OCX: %1 ErrorRegSvr32Failed=RegSvr32 fall con el cdigo de salida %1 ErrorRegisterTypeLib=Imposible registrar la librera de tipos: %1 ; *** Post-installation errors ErrorOpeningReadme=Ocurri un error al intentar abrir el archivo LAME. ErrorRestartingComputer=El programa de instalacin no pudo reiniciar el equipo. Por favor, hgalo manualmente. ; *** Uninstaller messages UninstallNotFound=El archivo "%1" no existe. Imposible desinstalar. UninstallOpenError=El archivo "%1" no pudo ser abierto. Imposible desinstalar UninstallUnsupportedVer=El archivo de registro para desinstalar "%1" est en un formato no reconocido por esta versin del desinstalador. Imposible desinstalar UninstallUnknownEntry=Una entrada desconocida (%1) fue encontrada en el registro de desinstalacin ConfirmUninstall=Est seguro que desea desinstalar completamente %1 y todos sus componentes? UninstallOnlyOnWin64=Este programa slo puede ser desinstalado en Windows de 64-bits. OnlyAdminCanUninstall=Este programa slo puede ser desinstalado por un usuario con privilegios administrativos. UninstallStatusLabel=Por favor, espere mientras %1 es desinstalado de su sistema. UninstalledAll=%1 fue desinstalado satisfactoriamente de su sistema. UninstalledMost=La desinstalacin de %1 ha sido completada.%n%nAlgunos elementos no pudieron eliminarse. Estos pueden ser eliminados manualmente. UninstalledAndNeedsRestart=Para completar la desinstalacin de %1, su sistema debe reiniciarse.%n%nDesea reiniciarlo ahora? UninstallDataCorrupted=El archivo "%1" est daado. No puede desinstalarse ; *** Uninstallation phase messages ConfirmDeleteSharedFileTitle=Eliminar Archivo Compartido? ConfirmDeleteSharedFile2=El sistema indica que el siguiente archivo compartido no es usado por ningn otro programa. Desea eliminar este archivo compartido?%n%nSi hay programas que usan este archivo y el mismo es eliminado, esos programas pueden dejar de funcionar correctamente. Si no est seguro, elija No. Dejar el archivo en su sistema no producir ningn dao. SharedFileNameLabel=Archivo: SharedFileLocationLabel=Ubicacin: WizardUninstalling=Estado de la Desinstalacin StatusUninstalling=Desinstalando %1... ; The custom messages below aren't used by Setup itself, but if you make ; use of them in your scripts, you'll want to translate them. [CustomMessages] NameAndVersion=%1 versin %2 AdditionalIcons=Iconos adicionales: CreateDesktopIcon=Crear un icono en el &escritorio CreateQuickLaunchIcon=Crear un icono de &Inicio Rpido ProgramOnTheWeb=%1 en la Web UninstallProgram=Desinstalar %1 LaunchProgram=Ejecutar %1 AssocFileExtension=&Asociar %1 con la extensin de archivo %2 AssocingFileExtension=Asociando %1 con la extensin de archivo %2... CalibrationLoading=Calibracin de la carga en inicio de sesin: CalibrationLoadingHandledByDispcalGUI=dispcalGUI Profile Loader (calidad alta) CalibrationLoadingHandledByOS=Sistema operativo (baja calidad)dispcalGUI-1.7.1.6/misc/0install/dispcalGUI.xml000644 000765 000000 00000002076 12025152312 021003 0ustar00svpwheel000000 000000 ${PACKAGE}

${SUMMARY} ${DESC} http://dispcalgui.hoech.net Graphics dispcalGUI-1.7.1.6/man/dispcalGUI-3DLUT-maker.1000644 000765 000000 00000000457 12075564060 020400 0ustar00svpwheel000000 000000 .TH "dispcalGUI-3DLUT-maker" "1" "07 Jan 2013" "" "" .SH NAME dispcalGUI-3DLUT-maker \- 3D LUT creator .SH SYNOPSIS \fBdispcalGUI-3DLUT-maker\fR .SH "DESCRIPTION" .PP Creates 3D LUTs from a chain of ICC profiles. .SH "SEE ALSO" .PP dispcalGUI (1) .SH "AUTHOR" .PP Florian Höch dispcalGUI-1.7.1.6/man/dispcalGUI-apply-profiles.1000644 000765 000000 00000000742 12025152312 021377 0ustar00svpwheel000000 000000 .TH "dispcalGUI-apply-profiles" "1" "24 July 2010" "" "" .SH NAME dispcalGUI-apply-profiles \- ICC profile loader .SH SYNOPSIS \fBdispcalGUI-apply-profiles\fR .SH "DESCRIPTION" .PP Sets ICC profiles and loads calibration curves for all configured screens. .PP Utilizes Argyll CMS (dispwin), Oyranos (oyranos-monitor) or GNOME Color Manager (gcm-apply) if available for the actual work done. .SH "SEE ALSO" .PP dispcalGUI (1) .SH "AUTHOR" .PP Florian Höch dispcalGUI-1.7.1.6/man/dispcalGUI-curve-viewer.1000644 000765 000000 00000000514 12263672717 021075 0ustar00svpwheel000000 000000 .TH "dispcalGUI-curve-viewer" "1" "06 Jan 2014" "" "" .SH NAME dispcalGUI-curve-viewer \- ICC profile information .SH SYNOPSIS \fBdispcalGUI-curve-viewer\fR .SH "DESCRIPTION" .PP Shows video card gamma table and profile tone response curves. .SH "SEE ALSO" .PP dispcalGUI (1) .SH "AUTHOR" .PP Florian Höch dispcalGUI-1.7.1.6/man/dispcalGUI-profile-info.1000644 000765 000000 00000000525 12075564060 021035 0ustar00svpwheel000000 000000 .TH "dispcalGUI-profile-info" "1" "07 Jan 2013" "" "" .SH NAME dispcalGUI-profile-info \- ICC profile information .SH SYNOPSIS \fBdispcalGUI-profile-info\fR .SH "DESCRIPTION" .PP Shows ICC profile information like gamut, curves and embedded metadata. .SH "SEE ALSO" .PP dispcalGUI (1) .SH "AUTHOR" .PP Florian Höch dispcalGUI-1.7.1.6/man/dispcalGUI-synthprofile.1000644 000765 000000 00000000460 12142254475 021171 0ustar00svpwheel000000 000000 .TH "dispcalGUI-synthprofile" "1" "06 May 2013" "" "" .SH NAME dispcalGUI-synthprofile \- Synthetic Profile Creator .SH SYNOPSIS \fBdispcalGUI-synthprofile\fR .SH "DESCRIPTION" .PP Creates synthethic ICC profiles. .SH "SEE ALSO" .PP dispcalGUI (1) .SH "AUTHOR" .PP Florian Höch dispcalGUI-1.7.1.6/man/dispcalGUI-testchart-editor.1000644 000765 000000 00000000462 12075564060 021731 0ustar00svpwheel000000 000000 .TH "dispcalGUI-testchart-editor" "1" "07 Jan 2013" "" "" .SH NAME dispcalGUI-testchart-editor \- Testchart editor .SH SYNOPSIS \fBdispcalGUI-testchart-editor\fR .SH "DESCRIPTION" .PP Edits and generates testcharts. .SH "SEE ALSO" .PP dispcalGUI (1) .SH "AUTHOR" .PP Florian Höch dispcalGUI-1.7.1.6/man/dispcalGUI.1000644 000765 000000 00000001674 12025152312 016440 0ustar00svpwheel000000 000000 .TH "dispcalGUI" "1" "24 July 2010" "" "" .SH NAME dispcalGUI \- A graphical user interface for the Argyll CMS display calibration utilities .SH SYNOPSIS \fBdispcalGUI\fR .SH "DESCRIPTION" .PP Calibrates and characterizes display devices using a hardware sensor, driven by the open source color management system Argyll CMS. .PP Supports multi-display setups and a variety of available settings like customizable whitepoint, luminance, black level, tone response curve as well as the creation of matrix and look-up-table ICC profiles with optional gamut mapping. Calibrations and profiles can be verified through measurements, and profiles can be installed to make them available to color management aware applications. .PP Profile installation can utilize Argyll CMS, Oyranos and/or GNOME Color Manager if available, for flexible integration. .SH "SEE ALSO" .PP dispcalGUI-apply-profiles (1) .SH "AUTHOR" .PP Florian Höch dispcalGUI-1.7.1.6/dispcalGUI/__init__.py000644 000765 000000 00000000217 12025152311 017703 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- try: import __version__ except ImportError: __version__ = "0.0.0.0" else: __version__ = __version__.VERSION_STRING dispcalGUI-1.7.1.6/dispcalGUI/__version__.py000644 000765 000000 00000000272 12266723147 020450 0ustar00svpwheel000000 000000 # generated by setup.py BUILD_DATE = '2014-01-19T10:18:15.555768Z' LASTMOD = '2014-01-19T10:09:16.736566Z' VERSION = (1, 7, 1, 6) VERSION_BASE = (1, 7, 1, 6) VERSION_STRING = '1.7.1.6' dispcalGUI-1.7.1.6/dispcalGUI/argyll_cgats.py000644 000765 000000 00000026615 12265441405 020644 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import decimal Decimal = decimal.Decimal import os import traceback from time import strftime from options import debug from safe_print import safe_print from util_io import StringIOu as StringIO from util_str import safe_unicode import CGATS import ICCProfile as ICCP cals = {} def quote_nonoption_args(args): """ Puts quotes around all arguments which are not options (ie. which do not start with a hyphen '-') """ args = list(args) for i, arg in enumerate(args): if arg[0] != "-": args[i] = '"' + arg + '"' return args def add_dispcal_options_to_cal(cal, options_dispcal): # Add dispcal options to cal options_dispcal = quote_nonoption_args(options_dispcal) try: cgats = CGATS.CGATS(cal) cgats[0].add_section("ARGYLL_DISPCAL_ARGS", " ".join(options_dispcal).encode("UTF-7", "replace")) return cgats except Exception, exception: safe_print(safe_unicode(traceback.format_exc())) def add_options_to_ti3(ti3, options_dispcal=None, options_colprof=None): # Add dispcal and colprof options to ti3 try: cgats = CGATS.CGATS(ti3) if options_colprof: options_colprof = quote_nonoption_args(options_colprof) cgats[0].add_section("ARGYLL_COLPROF_ARGS", " ".join(options_colprof).encode("UTF-7", "replace")) if options_dispcal and len(cgats) > 1: options_dispcal = quote_nonoption_args(options_dispcal) cgats[1].add_section("ARGYLL_DISPCAL_ARGS", " ".join(options_dispcal).encode("UTF-7", "replace")) return cgats except Exception, exception: safe_print(safe_unicode(traceback.format_exc())) def cal_to_fake_profile(cal): """ Create and return a 'fake' ICCProfile with just a vcgt tag. cal must refer to a valid Argyll CAL file and can be a CGATS instance or a filename. """ if not isinstance(cal, CGATS.CGATS): try: cal = CGATS.CGATS(cal) except (IOError, CGATS.CGATSInvalidError, CGATS.CGATSInvalidOperationError, CGATS.CGATSKeyError, CGATS.CGATSTypeError, CGATS.CGATSValueError), exception: safe_print(u"Warning - couldn't process CGATS file '%s': %s" % tuple(safe_unicode(s) for s in (cal, exception))) return None required_fields = ("RGB_I", "RGB_R", "RGB_G", "RGB_B") data_format = cal.queryv1("DATA_FORMAT") if data_format: for field in required_fields: if not field in data_format.values(): if debug: safe_print("[D] Missing required field:", field) return None for field in data_format.values(): if not field in required_fields: if debug: safe_print("[D] Unknown field:", field) return None entries = cal.queryv(required_fields) if len(entries) < 1: if debug: safe_print("[D] No entries found in", cal.filename) return None profile = ICCP.ICCProfile() profile.fileName = cal.filename profile._data = "\0" * 128 profile._tags.desc = ICCP.TextDescriptionType("", "desc") profile._tags.desc.ASCII = safe_unicode( os.path.basename(cal.filename)).encode("ascii", "asciize") profile._tags.desc.Unicode = safe_unicode(os.path.basename(cal.filename)) profile._tags.vcgt = ICCP.VideoCardGammaTableType("", "vcgt") profile._tags.vcgt.update({ "channels": 3, "entryCount": len(entries), "entrySize": 2, "data": [[], [], []] }) for n in entries: for i in range(3): profile._tags.vcgt.data[i].append(int(round(entries[n][i + 1] * 65535.0))) profile.size = len(profile.data) profile.is_loaded = True return profile def can_update_cal(path): """ Check if cal can be updated by checking for required fields. """ try: calstat = os.stat(path) except Exception, exception: safe_print(u"Warning - os.stat('%s') failed: %s" % tuple(safe_unicode(s) for s in (path, exception))) return False if not path in cals or cals[path].mtime != calstat.st_mtime: try: cal = CGATS.CGATS(path) except (IOError, CGATS.CGATSInvalidError, CGATS.CGATSInvalidOperationError, CGATS.CGATSKeyError, CGATS.CGATSTypeError, CGATS.CGATSValueError), exception: if path in cals: del cals[path] safe_print(u"Warning - couldn't process CGATS file '%s': %s" % tuple(safe_unicode(s) for s in (path, exception))) else: if cal.queryv1("DEVICE_CLASS") == "DISPLAY" and not None in \ (cal.queryv1("TARGET_WHITE_XYZ"), cal.queryv1("TARGET_GAMMA"), cal.queryv1("BLACK_POINT_CORRECTION"), cal.queryv1("QUALITY")): cals[path] = cal return path in cals and cals[path].mtime == calstat.st_mtime def extract_cal_from_ti3(ti3_data): """ Extract and return the CAL section of a TI3. ti3_data can be a file object or a string holding the data. """ if isinstance(ti3_data, (str, unicode)): ti3 = StringIO(ti3_data) else: ti3 = ti3_data cal = False cal_lines = [] for line in ti3: line = line.strip() if line == "CAL": line = "CAL " # Make sure CGATS file identifiers are # always a minimum of 7 characters cal = True if cal: cal_lines += [line] if line == 'END_DATA': break if isinstance(ti3, file): ti3.close() return "\n".join(cal_lines) def extract_fix_copy_cal(source_filename, target_filename=None): """ Return the CAL section from a profile's embedded measurement data. Try to 'fix it' (add information needed to make the resulting .cal file 'updateable') and optionally copy it to target_filename. """ from worker import get_options_from_profile try: profile = ICCP.ICCProfile(source_filename) except (IOError, ICCP.ICCProfileInvalidError), exception: return exception if "CIED" in profile.tags or "targ" in profile.tags: cal_lines = [] ti3 = StringIO(profile.tags.get("CIED", "") or profile.tags.get("targ", "")) ti3_lines = [line.strip() for line in ti3] ti3.close() cal_found = False for line in ti3_lines: line = line.strip() if line == "CAL": line = "CAL " # Make sure CGATS file identifiers are #always a minimum of 7 characters cal_found = True if cal_found: cal_lines += [line] if line == 'DEVICE_CLASS "DISPLAY"': options_dispcal = get_options_from_profile(profile)[0] if options_dispcal: whitepoint = False b = profile.tags.lumi.Y for o in options_dispcal: if o[0] == "y": cal_lines += ['KEYWORD "DEVICE_TYPE"'] if o[1] == "c": cal_lines += ['DEVICE_TYPE "CRT"'] else: cal_lines += ['DEVICE_TYPE "LCD"'] continue if o[0] in ("t", "T"): continue if o[0] == "w": continue if o[0] in ("g", "G"): if o[1:] == "240": trc = "SMPTE240M" elif o[1:] == "709": trc = "REC709" elif o[1:] == "l": trc = "L_STAR" elif o[1:] == "s": trc = "sRGB" else: trc = o[1:] if o[0] == "G": try: trc = 0 - Decimal(trc) except decimal.InvalidOperation, \ exception: continue cal_lines += ['KEYWORD "TARGET_GAMMA"'] cal_lines += ['TARGET_GAMMA "%s"' % trc] continue if o[0] == "f": cal_lines += ['KEYWORD ' '"DEGREE_OF_BLACK_OUTPUT_OFFSET"'] cal_lines += [ 'DEGREE_OF_BLACK_OUTPUT_OFFSET "%s"' % o[1:]] continue if o[0] == "k": cal_lines += ['KEYWORD ' '"BLACK_POINT_CORRECTION"'] cal_lines += [ 'BLACK_POINT_CORRECTION "%s"' % o[1:]] continue if o[0] == "B": cal_lines += ['KEYWORD ' '"TARGET_BLACK_BRIGHTNESS"'] cal_lines += [ 'TARGET_BLACK_BRIGHTNESS "%s"' % o[1:]] continue if o[0] == "q": if o[1] == "l": q = "low" elif o[1] == "m": q = "medium" else: q = "high" cal_lines += ['KEYWORD "QUALITY"'] cal_lines += ['QUALITY "%s"' % q] continue if not whitepoint: cal_lines += ['KEYWORD "NATIVE_TARGET_WHITE"'] cal_lines += ['NATIVE_TARGET_WHITE ""'] if cal_lines: if target_filename: try: f = open(target_filename, "w") f.write("\n".join(cal_lines)) f.close() except Exception, exception: return exception return cal_lines else: return None def ti3_to_ti1(ti3_data): """ Create and return TI1 data converted from TI3. ti3_data can be a file object, a list of strings or a string holding the data. """ ti3 = CGATS.CGATS(ti3_data) ti3[0].type = "CTI1" ti3[0].DESCRIPTOR = "Argyll Calibration Target chart information 1" ti3[0].ORIGINATOR = "Argyll targen" if hasattr(ti3[0], "COLOR_REP"): color_rep = ti3[0].COLOR_REP.split('_')[0] else: color_rep = "RGB" ti3[0].add_keyword("COLOR_REP", color_rep) ti3[0].remove_keyword("DEVICE_CLASS") if hasattr(ti3[0], "LUMINANCE_XYZ_CDM2"): ti3[0].remove_keyword("LUMINANCE_XYZ_CDM2") if hasattr(ti3[0], "ARGYLL_COLPROF_ARGS"): del ti3[0].ARGYLL_COLPROF_ARGS return str(ti3[0]) def vcgt_to_cal(profile): """ Return a CAL (CGATS instance) from vcgt """ cgats = CGATS.CGATS(file_identifier="CAL ") context = cgats.add_data({"DESCRIPTOR": "Argyll Device Calibration State"}) context.add_data({"ORIGINATOR": "vcgt"}) context.add_data({"CREATED": strftime("%a %b %d %H:%M:%S %Y", profile.dateTime.timetuple())}) context.add_keyword("DEVICE_CLASS", "DISPLAY") context.add_keyword("COLOR_REP", "RGB") context.add_keyword("RGB_I") key = "DATA_FORMAT" context[key] = CGATS.CGATS() context[key].key = key context[key].parent = context context[key].root = cgats context[key].type = key context[key].add_data(("RGB_I", "RGB_R", "RGB_G", "RGB_B")) key = "DATA" context[key] = CGATS.CGATS() context[key].key = key context[key].parent = context context[key].root = cgats context[key].type = key values = profile.tags.vcgt.getNormalizedValues() for i, triplet in enumerate(values): context[key].add_data(("%.7f" % (i / float(len(values) - 1)), ) + triplet) return cgats def verify_cgats(cgats, required, ignore_unknown=True): """ Verify and return a CGATS instance or None on failure. Verify if a CGATS instance has a section with all required fields. Return the section as CGATS instance on success, None on failure. If ignore_unknown evaluates to True, ignore fields which are not required. Otherwise, the CGATS data must contain only the required fields, no more, no less. """ cgats_1 = cgats.queryi1(required) if cgats_1 and cgats_1.parent and cgats_1.parent.parent: cgats_1 = cgats_1.parent.parent if cgats_1.queryv1("NUMBER_OF_SETS"): if cgats_1.queryv1("DATA_FORMAT"): for field in required: if not field in cgats_1.queryv1("DATA_FORMAT").values(): raise CGATS.CGATSKeyError("Missing required field: %s" % field) if not ignore_unknown: for field in cgats_1.queryv1("DATA_FORMAT").values(): if not field in required: raise CGATS.CGATSError("Unknown field: %s" % field) else: raise CGATS.CGATSInvalidError("Missing DATA_FORMAT") else: raise CGATS.CGATSInvalidError("Missing NUMBER_OF_SETS") modified = cgats_1.modified cgats_1.filename = cgats.filename cgats_1.modified = modified return cgats_1 else: raise CGATS.CGATSKeyError("Missing required fields: %s" % ", ".join(required)) def verify_ti1_rgb_xyz(cgats): """ Verify and return a CGATS instance or None on failure. Verify if a CGATS instance has a TI1 section with all required fields for RGB devices. Return the TI1 section as CGATS instance on success, None on failure. """ return verify_cgats(cgats, ("RGB_R", "RGB_B", "RGB_G", "XYZ_X", "XYZ_Y", "XYZ_Z")) dispcalGUI-1.7.1.6/dispcalGUI/argyll_instruments.json000644 000765 000000 00000014501 12224371766 022455 0ustar00svpwheel000000 000000 { /* instrument names from Argyll source spectro/insttypes.c spectral: Does the instrument support spectral readings? adaptive_mode: Does the instrument support adaptive emissive readings? highres_mode: Does the instrument support high-res spectral readings? projector_mode: Does the instrument support a special projector mode? sensor_cal: Does the instrument need to calibrate its sensor by putting it on a reference tile or black surface? A value of false for sensor_cal means the instrument can be left on the display A value of true for sensor_cal means the instrument must be removed from the display for sensor calibration if it cannot be skipped skip_sensor_cal: Can the sensor calibration be skipped? A value of null for any of the keys means unknown/not tested */ "DTP92": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null }, "DTP94": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": false, "skip_sensor_cal": false // DTP94 instrument access fails // when using -N option to skip automatic sensor calibration // (dispread -D9 output: "Setting no-sensor_calibrate failed // failed with 'Unsupported function'") }, "Spectrolino": { "spectral": true, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": true }, "SpectroScan": { "spectral": true, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": true }, "SpectroScanT": { "spectral": true, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": true }, "Spectrocam": { "spectral": true, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": null }, "i1 Display": { // Argyll 1.3.5 and earlier "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": false, "skip_sensor_cal": false }, "i1 Display 1": { // Argyll 1.3.6 and newer "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": false }, "i1 Display 2": { // Argyll 1.3.6 and newer "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": false, "skip_sensor_cal": false // i1 Display 2 instrument access fails // when using -N option to skip automatic sensor calibration // (dispread -D9 output: "Setting no-sensor_calibrate failed // failed with 'Unsupported function'") }, "i1 DisplayPro, ColorMunki Display": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": false, "skip_sensor_cal": false, "measurement_mode_map": {"c": "r", "l": "n"} }, "i1 Monitor": { // like i1Pro "spectral": true, "adaptive_mode": true, "highres_mode": true, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": true }, "i1 Pro": { "spectral": true, "adaptive_mode": true, "highres_mode": true, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": true }, "i1 Pro 2": { "spectral": true, "adaptive_mode": true, "highres_mode": true, "projector_mode": false, "sensor_cal": true, "skip_sensor_cal": true }, "ColorHug": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null }, "ColorMunki": { "spectral": true, "adaptive_mode": true, "highres_mode": true, "projector_mode": true, "sensor_cal": true, "skip_sensor_cal": true }, "Colorimtre HCFR": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null }, "ColorMunki Smile": { // Argyll 1.5.x and newer "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": false, "skip_sensor_cal": false }, "Spyder2": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null }, "Spyder3": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null, "measurement_mode_map": {"c": "r", "l": "n"} }, "Spyder4": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null, "measurement_mode_map": {"c": "r", "l": "n"} }, "Huey": { "spectral": false, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null }, "specbos": { "spectral": true, "adaptive_mode": false, "highres_mode": false, "projector_mode": false, "sensor_cal": null, "skip_sensor_cal": null, "measurement_mode_map": {"c": "r", "l": "n"} }, "Dummy Meter / Hires & Projector": { // dummy instrument, just for testing "spectral": false, "adaptive_mode": false, "highres_mode": true, "projector_mode": true, "sensor_cal": false, "skip_sensor_cal": false }, "Dummy Spectro / Hires & Projector": { // dummy instrument, just for testing "spectral": true, "adaptive_mode": false, "highres_mode": true, "projector_mode": true, "sensor_cal": true, "skip_sensor_cal": true }, "Dummy Meter / Adaptive, Hires & Projector": { // dummy instrument, just for testing "spectral": false, "adaptive_mode": true, "highres_mode": true, "projector_mode": true, "sensor_cal": false, "skip_sensor_cal": false }, "Dummy Spectro / Adaptive, Hires & Projector": { // dummy instrument, just for testing "spectral": true, "adaptive_mode": true, "highres_mode": true, "projector_mode": true, "sensor_cal": true, "skip_sensor_cal": true } }dispcalGUI-1.7.1.6/dispcalGUI/argyll_instruments.py000644 000765 000000 00000001306 12147653633 022133 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from itertools import izip import re from jsondict import JSONDict from util_str import strtr instruments = JSONDict("argyll_instruments.json") vendors = [ "ColorVision", "Datacolor", "GretagMacbeth", "Hughski", "JETI", "X-Rite", "Xrite" ] def get_canonical_instrument_name(instrument_name, replacements=None, inverse=False): replacements = replacements or {} if inverse: replacements = dict(izip(replacements.itervalues(), replacements.iterkeys())) return strtr(remove_vendor_names(instrument_name), replacements) def remove_vendor_names(txt): for vendor in vendors: txt = re.sub(re.escape(vendor), "", txt, re.I) txt = txt.strip() return txt dispcalGUI-1.7.1.6/dispcalGUI/argyll_names.py000644 000765 000000 00000003321 12266411534 020634 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- # Argyll CMS tools used by dispcalGUI names = [ "applycal", "average", "cctiff", "ccxxmake", "dispcal", "dispread", "collink", "colprof", "dispwin", "iccgamut", "icclu", "xicclu", "spotread", "spyd2en", "spyd4en", "targen", "tiffgamut", "txt2ti3", "i1d3ccss", "viewgam" ] # Argyll CMS tools optionally used by dispcalGUI optional = ["applycal", "average", "cctiff", "ccxxmake", "i1d3ccss", "spyd2en", "spyd4en", "tiffgamut"] prefixes_suffixes = ["argyll"] # Alternative tool names (from older Argyll CMS versions or with filename # prefix/suffix like on some Linux distros) altnames = {"txt2ti3": ["logo2cgats"], "icclu": ["xicclu"], "ccxxmake": ["ccmxmake"], "i1d3ccss": ["oeminst"], "spyd2en": ["oeminst"], "spyd4en": ["oeminst"]} def add_prefixes_suffixes(name, altname): for prefix_suffix in prefixes_suffixes: altnames[name] += ["%s-%s" % (altname, prefix_suffix)] altnames[name] += ["%s-%s" % (prefix_suffix, altname)] # Automatically populate the alternative tool names with prefixed/suffixed # versions for name in names: if not name in altnames: altnames[name] = [] _altnames = list(altnames[name]) for altname in _altnames: add_prefixes_suffixes(name, altname) altnames[name] += [name] add_prefixes_suffixes(name, name) altnames[name].reverse() # Viewing conditions supported by colprof (only predefined choices) viewconds = [ "pp", "pe", "mt", "mb", "md", "jm", "jd", "pcd", "ob", "cx" ] # Intents supported by colprof intents = ["a", "aa", "aw", "la", "ms", "p", "pa", "r", "s"] # pa = Argyll >= 1.3.3 # Video input/output encodings supported by collink (Argyll >= 1.6) video_encodings = ["n", "t", "6", "7", "5", "2", "C", "x", "X"] dispcalGUI-1.7.1.6/dispcalGUI/argyll_RGB2XYZ.py000644 000765 000000 00000010377 12266411534 020651 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import math import colormath # from xcolorants.c icx_ink_table = { "C": [ [ 0.12, 0.18, 0.48 ], [ 0.12, 0.18, 0.48 ] ], "M": [ [ 0.38, 0.19, 0.20 ], [ 0.38, 0.19, 0.20 ] ], "Y": [ [ 0.76, 0.81, 0.11 ], [ 0.76, 0.81, 0.11 ] ], "K": [ [ 0.01, 0.01, 0.01 ], [ 0.04, 0.04, 0.04 ] ], "O": [ [ 0.59, 0.41, 0.03 ], [ 0.59, 0.41, 0.05 ] ], "R": [ [ 0.412414, 0.212642, 0.019325 ], [ 0.40, 0.21, 0.05 ] ], "G": [ [ 0.357618, 0.715136, 0.119207 ], [ 0.11, 0.27, 0.21 ] ], "B": [ [ 0.180511, 0.072193, 0.950770 ], [ 0.11, 0.27, 0.47 ] ], "W": [ [ 0.950543, 1.0, 1.089303 ], # D65 ? colormath.get_standard_illuminant("D50") ], # D50 "LC": [ [ 0.76, 0.89, 1.08 ], [ 0.76, 0.89, 1.08 ] ], "LM": [ [ 0.83, 0.74, 1.02 ], [ 0.83, 0.74, 1.02 ] ], "LY": [ [ 0.88, 0.97, 0.72 ], [ 0.88, 0.97, 0.72 ] ], "LK": [ [ 0.56, 0.60, 0.65 ], [ 0.56, 0.60, 0.65 ] ], "MC": [ [ 0.61, 0.81, 1.07 ], [ 0.61, 0.81, 1.07 ] ], "MM": [ [ 0.74, 0.53, 0.97 ], [ 0.74, 0.53, 0.97 ] ], "MY": [ [ 0.82, 0.93, 0.40 ], [ 0.82, 0.93, 0.40 ] ], "MK": [ [ 0.27, 0.29, 0.31 ], [ 0.27, 0.29, 0.31 ] ], "LLK": [ [ 0.76, 0.72, 0.65 ], # Very rough - should substiture real numbers [ 0.76, 0.72, 0.65 ] ], "": [ [ 0.0, 0.0, 0.0 ], [ 0.0, 0.0, 0.0 ] ] } s = { "Ynorm": 0.0, "iix": { 0: "R", 1: "G", 2: "B" } } s["Ynorm"] = 0.0 for e in xrange(3): s["Ynorm"] += icx_ink_table[s["iix"][e]][0][1] s["Ynorm"] = 1.0 / s["Ynorm"] def XYZ_denormalize_remove_glare(X, Y, Z): XYZ = [X, Y, Z] # De-Normalise Y from 1.0, & remove black glare for j in xrange(3): XYZ[j] = (XYZ[j] - icx_ink_table["K"][0][j]) / (1.0 - icx_ink_table["K"][0][j]) XYZ[j] /= s["Ynorm"] return tuple(XYZ) def XYZ_normalize_add_glare(X, Y, Z): XYZ = [X, Y, Z] # Normalise Y to 1.0, & add black glare for j in xrange(3): XYZ[j] *= s["Ynorm"] XYZ[j] = XYZ[j] * (1.0 - icx_ink_table["K"][0][j]) + \ icx_ink_table["K"][0][j] return tuple(XYZ) def RGB2XYZ(R, G, B): # from xcolorants.c -> icxColorantLu_to_XYZ d = (R, G, B) # We assume a simple additive model with gamma XYZ = [0.0, 0.0, 0.0] for e in xrange(3): v = d[e] if (v < 0.0): v = 0.0 elif (v > 1.0): v = 1.0 if (v <= 0.03928): v /= 12.92 else: v = math.pow((0.055 + v) / 1.055, 2.4) # Gamma for j in xrange(3): XYZ[j] += v * icx_ink_table[s["iix"][e]][0][j] return XYZ_normalize_add_glare(*XYZ) def XYZ2RGB(X, Y, Z): return colormath.XYZ2RGB(*XYZ_denormalize_remove_glare(X, Y, Z)) if __name__ == '__main__': for RGB, XYZ in iter(( ((1.0, 1.0, 1.0), (0.951065, 1.000000, 1.088440)), ((0.0, 0.0, 0.0), (0.010000, 0.010000, 0.010000)), ((0.5, 0.0, 0.0), (0.097393, 0.055060, 0.014095)), ((1.0, 0.0, 0.0), (0.418302, 0.220522, 0.029132)), ((0.0, 0.5, 0.0), (0.085782, 0.161542, 0.035261)), ((0.5, 0.5, 0.0), (0.173175, 0.206603, 0.039356)), ((1.0, 0.5, 0.0), (0.494083, 0.372064, 0.054393)), ((0.0, 1.0, 0.0), (0.364052, 0.718005, 0.128018)), ((0.5, 1.0, 0.0), (0.451445, 0.763065, 0.132113)), ((1.0, 1.0, 0.0), (0.772354, 0.928527, 0.147151)), ((0.0, 0.0, 0.5), (0.048252, 0.025298, 0.211475)), ((0.5, 0.0, 0.5), (0.135645, 0.070358, 0.215570)), ((1.0, 0.0, 0.5), (0.456553, 0.235820, 0.230607)), ((0.0, 0.5, 0.5), (0.124033, 0.176840, 0.236735)), ((0.5, 0.5, 0.5), (0.211427, 0.221901, 0.240831)), ((1.0, 0.5, 0.5), (0.532335, 0.387362, 0.255868)), ((0.0, 1.0, 0.5), (0.402304, 0.733303, 0.329493)), ((0.5, 1.0, 0.5), (0.489697, 0.778364, 0.333588)), ((1.0, 1.0, 0.5), (0.810605, 0.943825, 0.348625)), ((0.0, 0.0, 1.0), (0.188711, 0.081473, 0.951290)), ((0.5, 0.0, 1.0), (0.276104, 0.126533, 0.955385)), ((1.0, 0.0, 1.0), (0.597013, 0.291995, 0.970422)), ((0.0, 0.5, 1.0), (0.264493, 0.233015, 0.976550)), ((0.5, 0.5, 1.0), (0.351886, 0.278076, 0.980645)), ((1.0, 0.5, 1.0), (0.672794, 0.443537, 0.995683)), ((0.0, 1.0, 1.0), (0.542763, 0.789478, 1.069308)), ((0.5, 1.0, 1.0), (0.630157, 0.834539, 1.073403)))): XYZ1 = tuple(str(round(c, 6)) for c in RGB2XYZ(*RGB)) XYZ2 = tuple(str(c) for c in XYZ) try: assert(XYZ1 == XYZ2) except AssertionError: raise AssertionError('RGB2XYZ%r == (%s) != (%s)' % (RGB, ', '.join(XYZ1), ', '.join(XYZ2))) dispcalGUI-1.7.1.6/dispcalGUI/beep.wav000644 000765 000000 00000051474 12025152312 017240 0ustar00svpwheel000000 000000 RIFF4SWAVEfmt DdataS64$%+*^^mnTTllMLuxAB CCZYuu ) * =< xw<>^\  KI./  YWgfLL 8 7 (($% fg** Z Z \]a_45wu y y bcxw  |{LM}{xyi h   nm ACCBH I  32FI_^  & (  hfPS  EEED /-ut77vw]\gg II24 ,+NO""10 dd53km!"""$$t u ~~hf77N O 55QQ xw) ' gfhiAAPP  WW  - + hg \ [ DC    11 aajja `  DDed)*225 6 53 ~  FF  )) YWE F FG iis s --67ggwwQSJI srzz fgmlVX\ [ bb 87. - NO   >=! ! __ )(I K POEE ML%% u u ~~00t t  USC C  yztw   42$$uu;<  mk\^ \]NN= < DC~~a ` ,-ONrr 99&'OQVV   KL@>ab32<< zz==\]  JL/-  WYfgMM 7 7 &&%' ef+, X X ]]a`56uu y z abww  }~KK}{xyi h   on CBCBG I  11IJ^`   % '  ghRS  EDCC -.us77wu[]hg  JJ13 ,,OM!$// bc55mm!!#!%'t v ~gg89O N 65PPyx( ) hhhi@AON  YX  , + ig ] ] CC     22abkka _  ! BCed+,125 5 33 }  FF  )+ XWD E IH jls q -,79fgwwRTJH sr|| ffmnXX[ Z bc 89. . OP   ;= _` ()J K PMFGKL%% t t ~}10r u  TUD D  yytu   44$$ut::  km][ \ZNP= < DEb b --ONqp <9&%PQWW   JL@@bc21<; yx=?\]   KK./  VXegNM 9 7 &(%& fg,+ X Y ^\_`54tw y y baxw  }}JJ~}xyi g   mn !BBBBH H  12HH^_  ' '  fgRQ  EFCD .-uu79xvZ[hh  JI42 +-OO"!01 dd44ln"" "'$t t ~hg89N O 66POzx( ( ghih?@PP  YX + , gg [ \ DB     22abkja `  BCdf,*125 4 43 ~~  GG  *( ZYE E IG kjr s ,,88ffvwSQJJ ss{| hgllWX\ \ `` 79- . QO  =>!  __ ))K L NMEG MJ&& t u }}10s t  UT  ! ts][UT65  89onQQ||32morsGFMN55##,,_^onTUlmMNvxBB EDXYuu + ) =; yx=>\\!  JK/.  YWefNL 7 7 ('$% he*+ Y Y ^]`_56vt y y bawy  ~}KL{{yyi i  on!BACBH H  22IH_^  ' '  hhOP  EDDE ..tv88vv\]hg  II22 ,+PO!"/0 ee44mm !"!&&u t ~}ih99N N 54QQ yx' ) hghhA>PO  WY - - ff ] [ BC     12 ackj^ _   CDed,)037 5 34 |}  FE  )) WZF D IH iks r ,-76ghwvQQJJ ts{{ gflmVV\ Z ac 88- / QP   ==" ! _` *+J K NOFEKK&$ t t |}11s s  USC D  zzuv   22#$vu;;  ml[[ [\PN< < DD` b ,,MOqq ::'(PNVW   KL@>bd11<< xz>=]\  JJ./  XWfgML 7 7 ('#% fg+, X X ^^__76ts x y abxx  }|KL||yyi i  ooACCBH H  43HI_^  & '  ggQQ  FCDB ..ut98ww\Zgh KI23 -,NN"#0/ dd55mn !""&'s t }fh8:N P 46QP xx( ( gghg>@OO  VX  * + gf \ \ CB    13bakj_ `   CCde+)225 6 43 |  FF  ** ZYE E HH kjq s -,78ggxxQRKJ ss{z ghmkWW[ [ cb :8/ / QP  =>! ~`a *+K L ONFE MK%% u v |}10t t  TTC D  zzvw   34%"tv;:  lk[^ \\NN; < DDb a ,-NMqq ::''NQXX   LK?@bb21;: zy>>^^ II-/  YWdgNM 8 6 ()%# ee*+ Y W \^``66ut y y abxx  ~}JK}|wzj g   lo CBBBH H  34HH^^   ( (  hgPR  EECF /.vv78wx[[hg  II33 +,NO$#//  dd53kn !!&&s r ~gg78N O 56PPxy( ) ghhh>@ON  WW - * gg \ \ BC    31!a`jka a  BBee*)128 6 23 |~  GG  +( YYC E HH kir s .-87gfxvRQIJ tq{| hfkmVW] \ `b 99. / QO   ==! ! `_ ))L L NNFE KL%$ u s }|21t t  TU  " ut[[TS57 87noQQ}|41mntsHHOMdispcalGUI-1.7.1.6/dispcalGUI/camera_shutter.wav000644 000765 000000 00000072366 12025152312 021336 0ustar00svpwheel000000 000000 RIFFtWAVEfmt DXdatat~~}}~~~~}}}}~~~~}}~~||{{~~||}}}}~~}}}}}}}}{{zz~~zz{{~~}}{{zz{{||{{{{}}yy~~||{{}}}}}}~~tt~~ttppgg[[llssss~~}}ssee__[[tt{{{{ssvv||uuooxxjj__dduu{{TT[[xxbbnnvvmm}}ttMMNNccqqggkk}}llhhoozzwwee^^ppxx^^OOggzzooyyqqbbeeppvvwwzz}}||nnnnuuzzttxxxxnnqqttvv}}vvoommxxyylljjqq{{{{||ssooooss{{qquu||{{vvooooww~~xxkkoowwuu{{}}ttww{{}}}}}}{{{{wwuu}}{{xx{{}}~~~~rrss}}||||~~{{zz}}~~zzwwyy}}{{||}}~~{{uuoorr}}~~{{wwwwzz}}||||{{||}}{{~~~~||zz{{}}zzww||}}}}~~}}||yyzz~~}}}}~~}}}}}}~~~~}}~~~~~~~~~~~~}}}}~~~~~~||}}}}}}~~~~||||~~~~~~}}~~~~}}{{}}}}||}}||}}}}}}~~}}}}~~~~~~||~~}}}}}}}}xx{{||{{~~{{}}{{uu{{vvrrttvvvvqqzz}}vvuuxxttxx}}~~~~{{ttww{{xxwwxx}}~~zz}}{{uuww~~||wwttxx{{}}{{{{~~}}{{xx{{~~||{{}}~~||}}}}}}}}}}~~}}~~}}||}}}}}}||||~~}}}}}}}}}}{{{{}}~~}}||||~~~~}}}}~~~~}}||||~~~~~~}}~~~~~~}}}}~~~~~~}}}}~~}}}}~~~~~~~~}}}}}}}}~~}}}}}}}}}}~~~~}}}}}}~~}}}}||}}~~~~}}}}~~}}}}}}}}~~~~~~||}}}}~~~~}}~~}}}}}}~~~~}}}}}}}}~~~~}}}}~~~~~~~~~~}}~~~~~~}}~~}}}}}}{{||}}||~~}}}}{{yyzzrroovv{{vvpprr}}||vvqqqqvvzzuuttyyzzwwzz||yyrrsszzxxttuu{{~~yyzz}}}}yyxx{{~~~~~~}}~~~~~~~~~~~~}}~~~~~~~~}}}}}}}}}}}}~~}}}}~~}}{{}}~~}}~~~~~~~~}}}}||}}}}}}}}~~~~~~~~~~~~~~}}}}}}~~~~~~~~}}~~}}~~~~~~}}}}~~~~{{{{}}}}{{||}}}}}}}}~~~~~~}}}}~~||}}~~~~~~}}~~}}~~~~~~}}~~~~~~}}}}}}}}}}~~}}}}~~~~~~~~}}~~}}||}}~~~~~~~~~~~~}}~~~~}}~~~~~~~~~~}}}}~~~~}}}}~~}}}}~~~~~~~~}}~~~~}}}}~~~~}}~~~~}}~~~~~~~~~~~~}}~~}}~~~~}}}}}}}}~~~~~~~~~~~~~~}}}}~~~~}}}}}}}}~~}}||}}~~~~~~~~~~~~~~}}}}~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}~~}}||||}}}}||||~~}}}}~~~~{{vv||{{rrrrxxzzzzxx||}}}}}}~~}}}}{{xxxx}}{{xxvvxxzz{{}}yyww{{yyuuyy{{||||yy{{}}}}}}{{xxxxzz~~~~||zzzz{{}}}}{{{{||~~~~{{yyzz~~}}{{{{{{~~}}{{zz{{}}zzxxwwxx}}~~}}||||{{zz{{}}}}{{{{}}yy``oozzhhooqqjjllvveessgggg{{rrbboojjggzz^^YYuujjttssxxvvooxx~~}}xxvvrrooss{{}}uuqqssxx}}{{zz{{~~~~~~~~{{yy{{||yy{{}}}}{{~~}}~~}}{{{{yyyy~~}}yyxx~~}}{{}}}}{{yy{{||{{}}~~~~}}{{{{}}||||||zzzz{{}}}}}}||{{||}}}}~~}}}}}}||}}~~~~}}}}}}}}}}}}}}zz{{}}}}}}||yywwxxzz}}~~{{{{~~}}{{{{{{{{}}}}{{{{~~~~~~}}{{yyzz||}}~~}}||}}}}||}}~~}}{{||~~}}}}}}{{}}~~}}}}{{xxwwww{{}}}}||||}}{{{{{{}}~~~~~~||zz{{}}}}~~~~}}||||}}~~}}||}}~~~~~~~~~~}}}}}}~~}}}}~~}}}}}}~~}}}}~~~~~~}}}}~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~}}~~~~~~}}}}~~~~}}}}~~}}}}}}}}}}}}}}}}}}~~}}||}}}}||}}{{}}~~}}||}}~~{{||}}||~~zz}}{{rryy{{zzzzsswwyyvvvvttvvxxzz}}zzww{{yyzz}}xx||}}{{}}}}zzvvuu{{||xxxxzz{{{{~~wwuu{{~~zzxxzz}}}}||}}}}||~~}}||~~||{{{{}}~~~~}}}}}}~~{{||}}||||}}||{{yyxxxx{{~~~~}}}}~~||{{zz{{~~}}}}~~}}||zz~~{{{{xx||||zz~~}}{{zz||yyvvqqvv}}xxxxzz~~zzvvssssttxxzzxxwwxx~~||~~xxqqxx}}zzxx}}}}~~||{{}}xxyy~~~~{{{{}}{{xx}}}}{{}}}}yy{{||{{}}~~}}||||||xxvvxx}}{{{{}}}}~~~~~~||||||~~}}{{}}{{zz{{}}~~~~~~~~~~}}||||}}{{zzxxyy{{~~~~}}||||}}}}~~~~~~~~~~{{{{{{}}~~}}}}}}}}{{||}}~~~~}}}}}}~~~~~~~~~~~~~~~~}}}}}}~~~~~~}}}}}}~~~~~~}}}}}}~~~~~~~~}}}}~~~~}}~~~~}}}}~~~~}}~~~~~~~~~~}}||}}~~~~~~~~~~~~}}}}}}}}}}~~}}~~~~~~~~~~~~}}}}~~~~~~~~}}}}~~~~}}}}~~~~}}}}~~}}}}~~~~}}}}~~~~~~~~~~}}}}}}~~~~}}}}~~~~}}}}}}~~~~}}~~~~~~~~}}}}~~}}{{{{}}~~}}}}~~~~~~~~~~~~~~}}~~~~}}~~~~~~~~}}~~~~}}}}}}}}~~~~}}||||}}~~~~~~}}}}}}}}}}}}||||}}~~~~}}}}}}}}}}}}{{yy{{~~~~~~}}~~}}}}}}~~~~~~}}{{{{||}}||||{{{{{{}}~~}}}}}}}}}}~~}}{{{{{{{{}}}}~~~~~~}}}}}}||||||}}~~~~}}{{{{||||}}}}||{{{{{{{{||}}~~~~}}~~}}}}}}}}~~}}}}}}}}}}}}}}}}~~}}}}}}}}||||||}}||}}}}}}~~~~~~}}{{{{{{{{{{{{{{{{}}~~~~}}||||||}}{{wwww{{~~}}}}}}~~}}{{yyzz||~~~~~~}}||||}}~~~~~~||}}}}~~||{{||~~~~~~~~}}}}||}}~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~~~~~}}~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}~~~~}}~~~~~~~~}}}}}}~~~~}}}}}}}}}}}}~~~~}}}}}}}}~~~~~~}}||||}}}}}}~~~~~~}}}}~~}}}}}}~~~~~~~~}}}}||{{{{}}}}~~}}}}}}~~~~}}~~~~}}}}}}~~~~~~~~}}}}~~~~~~~~~~}}~~~~~~~~~~~~}}}}~~~~~~~~~~~~}}~~}}}}}}}}~~~~}}||}}~~~~~~~~~~}}}}}}~~{{zz{{}}~~~~~~~~~~}}}}~~~~}}}}}}~~~~~~~~~~}}}}||}}~~~~~~~~}}~~}}||||||}}~~}}||{{{{{{}}}}||}}~~~~~~}}||{{{{}}}}{{zzzz{{}}}}||{{||||}}~~}}}}||}}~~~~}}}}}}}}}}}}}}}}~~}}}}~~}}||||||||}}~~~~}}}}~~}}}}||||}}}}~~}}}}}}~~~~}}||}}}}}}~~}}{{}}}}~~~~}}}}~~~~~~}}~~~~}}}}~~~~~~||||||}}~~~~~~}}~~}}}}~~~~}}}}~~}}}}{{zz||~~}}}}}}}}||{{||||}}~~}}{{}}~~~~~~yy}}xxzz~~}}||||{{~~}}{{{{||{{{{}}}}~~}}}}}}}}~~}}}}}}}}||||}}}}~~||}}~~}}}}}}{{||}}}}||xxxxyyzz||~~}}||{{||}}~~~~}}||{{{{}}}}{{zz{{{{}}}}||||||}}}}~~}}{{zzzz{{}}~~}}{{{{{{}}~~}}{{{{{{}}~~~~}}}}}}||||~~}}{{zzzz{{||~~~~||{{yyxxyy{{}}~~}}{{{{{{{{{{}}}}||}}}}}}}}}}{{yy{{{{yy{{zz{{zz{{xx}}zzvvvvwwzz{{wwoovv{{oommrryywwuu{{}}ttrrvv{{zz}}}}ssqqvvyyyy~~yyuussvvxx{{~~~~{{zz{{{{yy{{}}}}xxvvvvxx||~~xxxx{{{{{{{{wwuuvvzz}}{{xxvvvvuuxx{{}}~~}}||yyxxxxyy}}||yyxxwwyy}}||{{zzzz}}~~}}}}~~}}}}}}~~}}~~~~||zzyyyy{{~~||{{{{{{{{{{zzzz}}}}zzxxyy{{{{zz{{}}~~}}}}}}{{{{}}~~}}{{||}}~~{{yy{{~~~~~~}}xxvvyyzz{{}}{{{{}}~~~~~~~~~~}}zzxxzz}}}}}}}}}}||||}}}}{{zz{{||~~~~~~~~}}||}}}}||}}~~}}||{{{{{{||}}~~~~}}~~}}{{zzyyzz{{||}}}}}}~~~~}}}}||{{zzzz{{}}~~}}}}}}||}}||}}}}{{{{{{}}}}||||~~}}}}}}{{{{{{{{}}}}}}}}}}~~~~}}||{{{{||}}~~~~}}~~}}~~~~}}}}}}~~||zzzz{{~~}}||||}}~~~~~~~~}}||}}}}~~}}{{{{}}{{{{{{}}}}}}}}~~~~~~}}}}}}}}~~~~{{zz{{||}}}}}}}}zzxxxx{{}}~~}}}}}}}}}}||}}~~}}{{xxzz||~~~~||{{{{{{}}||zzyyzz{{||}}~~}}}}{{zz{{||~~~~}}}}{{{{||}}}}}}||{{}}}}||||}}}}}}}}~~}}||{{||}}}}}}~~~~}}{{zz{{||}}||||}}||zz{{{{||}}~~~~}}{{||}}}}}}~~~~~~}}{{||~~}}{{zz{{||}}~~~~||zzyy{{{{{{{{||||||~~}}||{{}}}}}}}}}}}}~~}}||{{||||||~~}}}}||||}}~~~~~~}}{{yyxxxxzz~~~~}}~~~~~~}}}}}}}}}}~~{{zz{{}}}}{{zzyyyyyyyy{{~~}}}}}}}}||}}~~{{yyxxyy}}~~}}{{zz{{{{}}}}{{{{{{||}}||{{zzzz||~~}}}}||}}}}}}~~}}||{{{{{{{{}}}}||{{{{{{||}}~~}}}}}}||}}~~{{zzzz{{||}}~~}}{{{{{{}}}}{{{{{{}}}}||{{{{{{{{~~~~}}||{{zz{{}}}}||{{{{}}~~||{{{{||}}}}}}}}}}}}||{{}}}}{{{{{{||}}}}}}||||||~~}}||{{{{}}~~}}{{{{}}~~}}{{{{{{||}}}}~~}}{{{{{{{{~~~~||{{zzzz{{}}~~}}}}}}||||}}}}||{{{{}}~~}}{{{{zz{{~~||{{||zzxxxxzz}}}}zzzz}}~~{{yyyy{{}}{{{{||}}}}{{zzyy{{}}}}{{{{{{||}}~~}}{{zzzz{{||~~}}}}||||||}}}}||{{{{{{{{||}}}}}}||{{{{||~~~~}}{{zzzz{{||~~}}{{yyyy{{}}}}{{zzzz{{{{}}}}~~||{{{{{{||}}~~||{{zzzz{{{{}}}}{{{{{{{{}}||zzxxxxxxzz{{~~~~}}}}}}}}}}~~}}{{yyxxyyzz||~~}}||||||}}~~}}{{{{zzzz{{||}}~~||||{{{{||}}~~}}{{zzyyzzzz||~~}}||||||}}~~~~}}||{{{{{{{{}}}}}}||{{{{||}}}}||{{zzzz{{||~~}}}}}}||||}}~~~~}}{{{{{{{{{{~~~~}}}}}}||}}~~~~}}{{{{{{{{}}~~~~~~}}}}}}}}}}}}}}||{{{{||}}}}}}}}}}}}~~}}}}}}}}}}}}}}}}~~~~~~}}}}~~~~~~}}}}}}}}}}}}~~~~~~~~~~~~}}}}}}}}}}}}}}~~}}}}}}~~}}||||||||||||||}}}}~~}}}}~~~~}}{{{{||}}}}}}~~~~}}}}}}}}~~~~~~~~~~}}}}}}}}}}~~~~~~~~~~~~~~}}}}||}}}}~~~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}~~~~~~~~~~}}}}}}~~~~~~~~}}}}}}}}~~~~~~~~~~~~~~~~~~~~}}}}~~}}~~~~~~~~}}}}}}~~~~~~}}}}~~~~~~}}}}}}}}~~~~}}}}}}}}~~}}}}}}}}}}~~~~}}}}}}~~~~~~~~}}~~~~~~~~~~~~~~}}}}}}}}~~~~~~~~}}}}}}~~~~~~~~~~~~~~}}}}}}}}}}~~}}}}~~~~}}}}~~~~~~~~~~~~}}}}}}}}}}~~}}}}}}~~}}}}{{~~{{ww}}}}||||}}~~}}{{}}}}||}}||~~}}||{{}}}}}}~~~~}}}}}}}}}}~~}}}}}}}}~~}}~~~~~~}}}}}}}}}}~~}}{{||~~~~}}}}}}~~~~~~}}}}~~~~~~~~}}}}}}}}~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~}}}}~~~~}}}}~~~~}}~~~~~~~~~~~~~~}}}}~~}}}}}}}}~~~~~~~~}}}}~~~~}}}}||||}}~~}}}}}}||||||}}}}~~~~~~~~}}}}~~}}}}}}}}~~~~}}~~~~~~}}}}||||||}}}}~~~~~~~~}}}}}}}}~~~~}}}}~~}}}}~~~~~~}}}}~~~~}}||~~~~~~}}||}}~~}}}}~~~~~~~~~~~~}}~~~~~~~~~~~~}}}}~~~~}}}}}}}}~~}}}}~~~~~~~~}}}}~~}}}}}}}}~~}}||||||}}}}~~}}||}}~~~~~~~~}}}}}}~~}}~~~~}}}}||||}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}||}}}}}}~~~~}}}}~~~~~~~~}}}}~~~~~~~~~~~~}}}}~~~~}}}}}}}}~~}}}}~~}}}}}}~~~~~~~~}}}}}}~~~~}}}}}}}}}}~~~~~~~~~~~~}}~~~~}}}}~~~~~~~~~~~~~~~~~~}}}}~~~~}}~~~~}}}}~~~~}}}}}}}}~~~~~~~~~~~~~~~~}}}}||}}~~}}}}}}}}~~~~}}}}}}~~~~}}||||}}}}~~~~~~~~~~~~~~}}~~~~~~}}}}~~~~~~~~~~~~~~}}}}}}~~~~}}}}}}~~}}||||||||}}~~~~~~~~}}}}~~}}}}}}~~~~~~~~}}}}}}~~~~~~~~}}}}}}}}~~~~||{{||}}~~}}}}~~~~~~}}}}~~~~}}}}}}}}}}~~}}}}||||}}~~~~}}}}}}}}~~~~}}}}}}}}~~}}}}}}~~}}}}}}}}}}}}}}~~}}{{{{{{{{}}}}||||}}}}~~~~||||{{{{}}}}}}~~}}}}}}}}~~~~~~}}}}}}~~}}}}}}}}}}}}~~~~}}}}}}||}}~~~~}}}}}}||}}~~~~~~~~~~~~~~~~~~}}}}~~}}}}||||}}~~}}}}}}}}}}~~~~~~~~~~~~~~~~~~}}}}~~}}}}}}}}}}~~}}}}||}}~~~~~~~~~~~~~~}}~~~~}}~~~~~~}}}}~~~~~~~~}}~~~~}}}}~~~~~~~~~~}}~~}}||{{||}}~~}}~~}}{{||}}~~~~~~}}}}~~~~}}~~~~}}}}}}~~}}}}~~~~}}}}}}~~~~~~~~}}{{||}}}}~~~~~~~~}}||}}}}~~}}~~~~}}||||}}~~~~}}}}}}}}}}~~}}||}}}}}}}}}}~~}}~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~}}}}~~}}~~~~}}}}}}}}~~~~~~}}}}}}~~~~}}~~~~}}~~~~}}}}~~~~~~~~}}}}}}}}~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}~~}}}}~~~~~~}}}}||||}}~~}}~~~~}}}}~~~~}}}}}}}}~~~~}}~~~~~~~~~~~~~~~~}}~~~~~~~~}}}}}}}}~~~~}}}}~~~~}}}}}}~~~~~~~~~~}}{{yy}}||vvvv||~~zzzz}}||}}}}vvvv}}}}{{{{{{{{zzyyxxzz}}~~}}~~~~}}~~}}{{xxxxxxxx||}}{{yyzz}}{{vvrrrruuxx}}}}||}}}}{{||}}{{}}~~}}||}}~~~~}}{{yyyyyyzz{{}}}}{{{{{{||{{{{||{{zz||}}~~}}}}||{{}}}}||}}~~~~}}~~}}{{||}}{{yy{{}}}}}}}}~~||}}~~}}}}~~}}{{||}}~~~~~~||||}}}}}}~~~~}}~~~~}}~~~~~~{{yyxxxxzz{{}}}}}}}}}}~~}}||}}}}}}~~}}}}~~}}}}~~~~}}}}}}||}}}}}}||||}}}}}}}}~~}}~~~~~~~~}}}}}}}}~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~}}}}~~~~~~~~}}}}~~}}||||}}~~~~}}}}}}~~~~~~}}~~~~}}}}}}}}}}}}}}~~~~}}~~||}}~~~~}}~~||{{{{}}{{xxttzz}}||~~zz{{{{wwzzuuwwyy}}zz{{ssllxxxx}}~~~~yyqq}}}}wwvvuuvv}}}}}}{{rrvv||xxwwvvvv}}~~||{{zz||~~~~~~{{xxxx{{~~}}~~~~||{{zzzz~~~~{{zzyy{{~~~~}}~~}}||}}~~}}}}}}}}~~}}~~}}}}}}}}~~}}}}~~}}}}~~}}~~~~||||}}~~~~zzxxzzzz{{}}}}}}}}}}~~}}{{yyyy{{~~}}||}}~~||zzxx{{~~~~{{||}}}}}}{{}}}}{{zzwwxx~~~~}}{{{{||}}}}}}}}||yyvvwwzz{{~~~~~~~~||{{{{zzxxzz{{}}~~}}{{yywwvvvvwwxxzz{{{{{{||~~}}xxrrooxxkkbblltt}}xx{{||{{yyvv{{~~~~}}}}{{||}}vvuuzzxxoonnvv}}||zzzz~~{{{{~~}}~~}}}}~~~~~~~~}}~~}}}}~~~~}}{{}}~~}}}}~~~~}}~~~~~~~~}}~~~~}}||||~~}}||}}~~~~}}}}||{{}}}}{{||~~~~~~}}}}~~}}}}}}~~~~}}}}~~~~}}}}}}}}}}~~~~~~~~}}{{||}}}}~~~~~~~~}}~~~~~~~~~~~~}}}}~~}}}}}}}}~~~~}}~~~~~~~~~~~~}}~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~}}~~~~~~~~~~~~}}~~~~~~~~}}}}}}~~~~}}}}~~~~~~~~~~~~}}}}}}~~~~}}~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~dispcalGUI-1.7.1.6/dispcalGUI/ccmx.py000644 000765 000000 00000005617 12266411643 017124 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from __future__ import with_statement # Python 2.5 import codecs import os import sys import time import demjson CCMX_TEMPLATE = '''CCMX DESCRIPTOR "%(Name)s" KEYWORD "INSTRUMENT" INSTRUMENT "%(Device)s" KEYWORD "DISPLAY" DISPLAY "%(Display)s" KEYWORD "REFERENCE" REFERENCE "%(ReferenceDevice)s" ORIGINATOR "%(Originator)s" CREATED "%(DateTime)s" KEYWORD "COLOR_REP" COLOR_REP "XYZ" NUMBER_OF_FIELDS 3 BEGIN_DATA_FORMAT XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 3 BEGIN_DATA %(MatrixXYZ)s END_DATA ''' def convert_devicecorrections_to_ccmx(path, target_dir): """ Convert iColorDisplay DeviceCorrections.txt to individual Argyll CCMX files """ with codecs.open(path, 'r', 'utf8') as devcorrections_file: lines = devcorrections_file.read().strip().splitlines() # Convert to JSON # The DeviceCorrections.txt format is as follows, so a conversion is pretty # straightforward: # "Description here, e.g. Instrument X for Monitor Y" = # { # Name = "Description here, e.g. Instrument X for Monitor Y" # Device = "Instrument X" # Display = "Monitor Y" # ReferenceDevice = "eye-one Pro Rev.D" # MatrixXYZ = "3 3 1482250784 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 " # } # "Description here, e.g. Instrument X for Monitor Y" = # { # Name = "Description here, e.g. Instrument X for Monitor Y" # Device = "Instrument X" # Display = "Monitor Y" # ReferenceDevice = "eye-one Pro Rev.D" # MatrixXYZ = "3 3 1482250784 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 " # } # ...etc. # NOTE: The first three numbers in MatrixXYZ are irrelevant for our purposes. for i, line in enumerate(lines): parts = line.strip().split('=') if len(parts) == 2: for j, part in enumerate(parts): part = part.strip() if part and not part.startswith('"') and not part.endswith('"'): parts[j] = '"%s"' % part if parts[-1].strip() not in('', '{') and i < len(lines) - 1: parts[-1] += ',' lines[i] = ':'.join(parts) devcorrections_data = '{%s}' % ''.join(lines).replace(',}', '}') # Parse JSON devcorrections = demjson.decode(devcorrections_data) # Convert to ccmx for name, devcorrection in devcorrections.iteritems(): values = {'DateTime': time.strftime('%a %b %d %H:%M:%S %Y'), 'Originator': "Quato iColorDisplay"} for key in ('Name', 'Device', 'Display', 'ReferenceDevice', 'MatrixXYZ'): value = devcorrection[key] if key == 'MatrixXYZ': # The first three numbers in the matrix are irrelevant for our # purposes (see format example above). matrix = value.split()[3:] value = '\n'.join([' '.join(part) for part in (matrix[0:3], matrix[3:6], matrix[6:9])]) values[key] = value with codecs.open(os.path.join(target_dir, name + '.ccmx'), 'w', 'utf8') as ccmx: ccmx.write(CCMX_TEMPLATE % values) if __name__ == '__main__': convert_devicecorrections_to_ccmx(sys.argv[1], os.path.dirname(sys.argv[1])) dispcalGUI-1.7.1.6/dispcalGUI/CGATS.py000644 000765 000000 00000105206 12266411534 017025 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- """ Simple CGATS file parser class Copyright (C) 2008 Florian Hoech """ from __future__ import with_statement import math, os, re, sys import colormath from safe_print import safe_print from util_io import GzipFileProper, StringIOu as StringIO def get_device_value_labels(color_rep=None): return filter(bool, map(lambda v: v[1] if not color_rep or v[0] == color_rep else False, {"CMYK": ("CMYK_C", "CMYK_M", "CMYK_Y", "CMYK_K"), "RGB": ("RGB_R", "RGB_G", "RGB_B")}.iteritems())) def rpad(value, width): """ Right-pad a value to a given width. value is converted to a string first. """ strval = str(value) i = strval.find(".") if i > -1: if i < width - 1: strval = str(round(value, width - i - 1)).ljust(width, '0') else: strval = str(int(round(value))) return strval def rcut(value, width): """ Cut off any chars beyond width on the right-hand side. value is converted to a string first. """ strval = str(value) i = strval.find(".") if i > -1: if i < width - 1: strval = str(round(value, width - i - 1)) else: strval = str(int(round(value))) return strval def sort_RGB_gray_to_top(a, b): if a[0] == a[1] == a[2]: if b[0] == b[1] == b[2] and a[0] > b[0]: return 1 return -1 else: return 0 def sort_RGB_white_to_top(a, b): sum1, sum2 = sum(a[:3]), sum(b[:3]) if sum1 == 300: return -1 else: return 0 def sort_by_HSV(a, b): a = list(colormath.RGB2HSV(*a[:3])) b = list(colormath.RGB2HSV(*b[:3])) a[0] = round(a[0], 12) b[0] = round(b[0], 12) if a > b: return 1 elif a < b: return -1 else: return 0 def sort_by_RGB(a, b): if a[:3] > b[:3]: return 1 elif a[:3] < b[:3]: return -1 else: return 0 def sort_by_RGB_sum(a, b): sum1, sum2 = sum(a[:3]), sum(b[:3]) if sum1 > sum2: return 1 elif sum1 < sum2: return -1 else: return 0 def sort_by_L(a, b): Lab1 = colormath.XYZ2Lab(*a[3:]) Lab2 = colormath.XYZ2Lab(*b[3:]) if Lab1[0] > Lab2[0]: return 1 elif Lab1[0] < Lab2[0]: return -1 else: return 0 class CGATSError(Exception): pass class CGATSInvalidError(CGATSError, IOError): pass class CGATSInvalidOperationError(CGATSError): pass class CGATSKeyError(CGATSError, KeyError): pass class CGATSTypeError(CGATSError, TypeError): pass class CGATSValueError(CGATSError, ValueError): pass class CGATS(dict): """ CGATS structure. CGATS files are treated mostly as 'soup', so only basic checking is in place. """ datetime = None filename = None key = None _modified = False mtime = None parent = None root = None type = 'ROOT' vmaxlen = 0 def __init__(self, cgats=None, normalize_fields=False, file_identifier="CTI3"): """ Return a CGATS instance. cgats can be a path, a string holding CGATS data, or a file object. If normalize_fields evaluates to True, convert all KEYWORDs and all fields in DATA_FORMAT to UPPERCASE and SampleId or SampleName to SAMPLE_ID or SAMPLE_NAME respectively file_identifier is used as fallback if no file identifier is present """ self.normalize_fields = normalize_fields self.file_identifier = file_identifier self.root = self if cgats: if isinstance(cgats, list): raw_lines = cgats else: if isinstance(cgats, basestring): if cgats.find('\n') < 0 and cgats.find('\r') < 0: # assume filename cgats = open(cgats, 'rU') self.filename = cgats.name else: # assume text cgats = StringIO(cgats) elif isinstance(cgats, file): self.filename = cgats.name elif not isinstance(cgats, StringIO): raise CGATSInvalidError('Unsupported type: %s' % type(cgats)) if self.filename not in ('', None): self.mtime = os.stat(self.filename).st_mtime cgats.seek(0) raw_lines = cgats.readlines() cgats.close() context = self for raw_line in raw_lines: # strip control chars and leading/trailing whitespace line = re.sub('[^\x09\x20-\x7E\x80-\xFF]', '', raw_line.strip()) comment_offset = line.find('#') if comment_offset >= 0: # strip comment line = line[:comment_offset].strip() values = [value.strip('"') for value in line.split()] if line[:6] == 'BEGIN_': key = line[6:] if key in context: # Start new CGATS new = len(self) self[new] = CGATS() self[new].key = '' self[new].parent = self self[new].root = self.root self[new].type = '' context = self[new] if line == 'BEGIN_DATA_FORMAT': context['DATA_FORMAT'] = CGATS() context['DATA_FORMAT'].key = 'DATA_FORMAT' context['DATA_FORMAT'].parent = context context['DATA_FORMAT'].root = self context['DATA_FORMAT'].type = 'DATA_FORMAT' context = context['DATA_FORMAT'] elif line == 'END_DATA_FORMAT': context = context.parent elif line == 'BEGIN_DATA': context['DATA'] = CGATS() context['DATA'].key = 'DATA' context['DATA'].parent = context context['DATA'].root = self context['DATA'].type = 'DATA' context = context['DATA'] elif line == 'END_DATA': context = context.parent elif line[:6] == 'BEGIN_': key = line[6:] context[key] = CGATS() context[key].key = key context[key].parent = context context[key].root = self context[key].type = 'SECTION' context = context[key] elif line[:4] == 'END_': context = context.parent elif context.type in ('DATA_FORMAT', 'DATA'): if len(values): context = context.add_data(values) elif context.type == 'SECTION': context = context.add_data(line) elif len(values) > 1: if values[0] == 'Date:': context.datetime = line else: match = re.match( '([^"]+?)(?:\s+("[^"]+"|[^\s]+))?(?:\s*#(.*))?$', line) if match: key, value, comment = match.groups() if value != None: context = context.add_data({key: value.strip('"')}) else: context = context.add_data({key: ''}) elif values and values[0] not in ('Comment:', 'Date:') and \ len(line) >= 3 and not re.search("[^ 0-9A-Za-z]", line): context = self.add_data(line) self.setmodified(False) def __delattr__(self, name): del self[name] self.setmodified() def __delitem__(self, name): dict.__delitem__(self, name) self.setmodified() def __getattr__(self, name): if name in self: return self[name] else: raise AttributeError(name) def __getitem__(self, name): if name == -1: return self.get(len(self) - 1) elif name in ('NUMBER_OF_FIELDS', 'NUMBER_OF_SETS'): return getattr(self, name) elif name in self: if str(name).upper() in ('INDEX', 'SAMPLE_ID', 'SAMPLEID'): if type(self.get(name)) not in (int, float): return self.get(name) if str(name).upper() == 'INDEX': return self.key if type(self.get(name)) == float: return 1.0 / (self.NUMBER_OF_SETS - 1) * self.key return self.key + 1 return self.get(name) raise CGATSKeyError(name) def get(self, name, default=None): if name == -1: return dict.get(self, len(self) - 1, default) elif name in ('NUMBER_OF_FIELDS', 'NUMBER_OF_SETS'): return getattr(self, name, default) else: return dict.get(self, name, default) def get_colorants(self): color_rep = (self.queryv1("COLOR_REP") or "").split("_") if len(color_rep) == 2: query = {} colorants = [] for i in xrange(len(color_rep[0])): for j, channelname in enumerate(color_rep[0]): query["_".join([color_rep[0], channelname])] = {i: 100}.get(j, 0) colorants.append(self.queryi1(query)) return colorants def get_descriptor(self): """ Return descriptor """ desc = self.queryv1("DESCRIPTOR") if not desc or desc == "Not specified": desc = self.queryv1("INSTRUMENT") if desc: desc += " & " else: desc = "" desc += self.queryv1("DISPLAY") or "" if not desc and self.filename: desc = os.path.splitext(os.path.basename(self.filename))[0] return desc def __setattr__(self, name, value): if name == 'modified': self.setmodified(value) elif name in ('datetime', 'filename', 'file_identifier', 'key', 'mtime', 'normalize_fields', 'parent', 'root', 'type', 'vmaxlen'): object.__setattr__(self, name, value) self.setmodified() else: self[name] = value def __setitem__(self, name, value): dict.__setitem__(self, name, value) self.setmodified() def setmodified(self, modified=True): """ Set 'modified' state on the 'root' object. """ if self.root and self.root._modified != modified: object.__setattr__(self.root, '_modified', modified) def __str__(self): result = [] data = None if self.type == 'SAMPLE': result += [' '.join([str(self[item]) for item in self.parent.parent['DATA_FORMAT'].values()])] elif self.type == 'DATA': data = self elif self.type == 'DATA_FORMAT': result += [' '.join(self.values())] else: if self.datetime: result += [self.datetime] if self.type == 'SECTION': result += ['BEGIN_' + self.key] elif self.parent and self.parent.type == 'ROOT': result += [self.type.ljust(7)] # Make sure CGATS file # identifiers are always # a minimum of 7 characters result += [''] for key in self: value = self[key] if key == 'DATA': data = value elif type(value) in (float, int, str, unicode): if key not in ('NUMBER_OF_FIELDS', 'NUMBER_OF_SETS'): if type(key) == int: result += [str(value)] else: if 'KEYWORDS' in self and \ key in self['KEYWORDS'].values(): result += ['KEYWORD "%s"' % key] result += ['%s "%s"' % (key, value)] elif type(value) in (int, float): result += ['%s %s' % (key, value)] else: result += ['%s "%s"' % (key, value)] elif key not in ('DATA_FORMAT', 'KEYWORDS'): if (value.type == 'SECTION' and result[-1:] and result[-1:][0][-1] != '\n'): result += [''] result += [str(value)] if self.type == 'SECTION': result += ['END_' + self.key] if self.type == 'SECTION' or data: result += [''] if data and data.parent['DATA_FORMAT']: if 'KEYWORDS' in data.parent: for item in data.parent['DATA_FORMAT'].values(): if item in data.parent['KEYWORDS'].values(): result += ['KEYWORD "%s"' % item] result += ['NUMBER_OF_FIELDS %s' % len(data.parent['DATA_FORMAT'])] result += ['BEGIN_DATA_FORMAT'] result += [' '.join(data.parent['DATA_FORMAT'].values())] result += ['END_DATA_FORMAT'] result += [''] result += ['NUMBER_OF_SETS %s' % (len(data))] result += ['BEGIN_DATA'] for key in data: result += [' '.join([rpad(data[key][item], data.vmaxlen + (1 if data[key][item] < 0 else 0)) for item in data.parent['DATA_FORMAT'].values()])] result += ['END_DATA'] return '\n'.join(result) def add_keyword(self, keyword, value=None): """ Add a keyword to the list of keyword values. """ if self.type in ('DATA', 'DATA_FORMAT', 'KEYWORDS', 'SECTION'): context = self.parent elif self.type == 'SAMPLE': context = self.parent.parent else: context = self if not 'KEYWORDS' in context: context['KEYWORDS'] = CGATS() context['KEYWORDS'].key = 'KEYWORDS' context['KEYWORDS'].parent = context context['KEYWORDS'].root = self.root context['KEYWORDS'].type = 'KEYWORDS' if not keyword in context['KEYWORDS'].values(): newkey = len(context['KEYWORDS']) while newkey in context['KEYWORDS']: newkey += 1 context['KEYWORDS'][newkey] = keyword if value != None: context[keyword] = value def add_section(self, key, value): self[key] = CGATS() self[key].key = key self[key].parent = self self[key].root = self self[key].type = 'SECTION' self[key].add_data(value) def remove_keyword(self, keyword, remove_value=True): """ Remove a keyword from the list of keyword values. """ if self.type in ('DATA', 'DATA_FORMAT', 'KEYWORDS', 'SECTION'): context = self.parent elif self.type == 'SAMPLE': context = self.parent.parent else: context = self for key in context['KEYWORDS'].keys(): if context['KEYWORDS'][key] == keyword: del context['KEYWORDS'][key] if remove_value: del context[keyword] def insert(self, key=None, data=None): """ Insert data at index key. Also see add_data method. """ self.add_data(data, key) def append(self, data): """ Append data. Also see add_data method. """ self.add_data(data) def get_data(self, field_names=None): data = self.queryv1("DATA") if not data: return False elif field_names: data = data.queryi(field_names) return data def get_RGB_XYZ_values(self): field_names = ("RGB_R", "RGB_G", "RGB_B", "XYZ_X", "XYZ_Y", "XYZ_Z") data = self.get_data(field_names) if not data: return False valueslist = [] for key, item in data.iteritems(): values = [] for field_name in field_names: values.append(item[field_name]) valueslist.append(values) return data, valueslist def set_RGB_XYZ_values(self, valueslist): field_names = ("RGB_R", "RGB_G", "RGB_B", "XYZ_X", "XYZ_Y", "XYZ_Z") for i, values in enumerate(valueslist): for j, field_name in enumerate(field_names): self[i][field_name] = values[j] def checkerboard(self): data, valueslist = self.get_RGB_XYZ_values() if not valueslist: return False valueslist *= 2 valueslist.sort(sort_by_L) valueslist.sort(sort_RGB_white_to_top) split = len(valueslist) / 2 valueslist1 = valueslist[:split] valueslist2 = valueslist[split:] valueslist2.reverse() valueslist = valueslist1 + valueslist2 checkerboard = [] for i in xrange(split): if i % 2 == 1: i = len(valueslist) - 1 - i values = valueslist[i] checkerboard.append(values) return data.set_RGB_XYZ_values(checkerboard) def sort_RGB_gray_to_top(self): data, valueslist = self.get_RGB_XYZ_values() if not valueslist: return False valueslist.sort(sort_RGB_gray_to_top) return data.set_RGB_XYZ_values(valueslist) def sort_RGB_white_to_top(self): data, valueslist = self.get_RGB_XYZ_values() if not valueslist: return False valueslist.sort(sort_RGB_white_to_top) return data.set_RGB_XYZ_values(valueslist) def sort_by_HSV(self): data, valueslist = self.get_RGB_XYZ_values() if not valueslist: return False valueslist.sort(sort_by_HSV) return data.set_RGB_XYZ_values(valueslist) def sort_by_L(self): data, valueslist = self.get_RGB_XYZ_values() if not valueslist: return False valueslist.sort(sort_by_L) return data.set_RGB_XYZ_values(valueslist) def sort_by_RGB(self): data, valueslist = self.get_RGB_XYZ_values() if not valueslist: return False valueslist.sort(sort_by_RGB) return data.set_RGB_XYZ_values(valueslist) def sort_by_RGB_sum(self): data, valueslist = self.get_RGB_XYZ_values() if not valueslist: return False valueslist.sort(sort_by_RGB_sum) return data.set_RGB_XYZ_values(valueslist) @property def modified(self): if self.root: return self.root._modified return self._modified def moveby1(self, start, inc=1): """ Move items from start by icrementing or decrementing their key by inc. """ r = xrange(start, len(self) + 1) if inc > 0: r = reversed(r) for key in r: if key in self: if key + inc < 0: break else: self[key].key += inc self[key + inc] = self[key] if key == len(self) - 1: break def add_data(self, data, key=None): """ Add data to the CGATS structure. data can be a CGATS instance, a dict, a list, a tuple, or a string or unicode instance. """ context = self if self.type == 'DATA': if type(data) in (CGATS, dict, list, tuple): if self.parent['DATA_FORMAT']: fl, il = len(self.parent['DATA_FORMAT']), len(data) if fl != il: raise CGATSTypeError('DATA entries take exactly %s ' 'values (%s given)' % (fl, il)) dataset = CGATS() i = -1 for item in self.parent['DATA_FORMAT'].values(): i += 1 if type(data) in (CGATS, dict): try: value = data[item] except KeyError: raise CGATSKeyError(item) else: value = data[i] if item.upper() in ('INDEX', 'SAMPLE_ID', 'SAMPLEID'): if self.root.normalize_fields and \ item.upper() == 'SAMPLEID': item = 'SAMPLE_ID' # allow alphanumeric INDEX / SAMPLE_ID if isinstance(value, basestring): match = re.match( '(?:\d+|((?:\d*\.\d+|\d+)(?:e[+-]?\d+)?))$', value) if match: if match.groups()[0]: value = float(value) else: value = int(value) elif item.upper() not in ('SAMPLE_NAME', 'SAMPLE_LOC', 'SAMPLENAME'): try: value = float(value) except ValueError: raise CGATSValueError('Invalid data type for ' '%s (expected float, ' 'got %s)' % (item, type(value))) else: lencheck = len(str(abs(value)).split("e")[0]) if lencheck > self.vmaxlen: self.vmaxlen = lencheck elif self.root.normalize_fields and \ item.upper() == 'SAMPLENAME': item = 'SAMPLE_NAME' dataset[item] = value if type(key) == int: # accept only integer keys. # move existing items self.moveby1(key) else: key = len(self) dataset.key = key dataset.parent = self dataset.root = self.root dataset.type = 'SAMPLE' self[key] = dataset else: raise CGATSInvalidOperationError('Cannot add to DATA ' 'because of missing DATA_FORMAT') else: raise CGATSTypeError('Invalid data type for %s (expected ' 'CGATS, dict, list or tuple, got %s)' % (self.type, type(data))) elif self.type == 'ROOT': if isinstance(data, basestring) and data.find('\n') < 0 and \ data.find('\r') < 0: if type(key) == int: # accept only integer keys. # move existing items self.moveby1(key) else: key = len(self) self[key] = CGATS() self[key].key = key self[key].parent = self self[key].root = self.root self[key].type = data context = self[key] elif not len(self): context = self.add_data(self.file_identifier) # create root element context = context.add_data(data, key) else: raise CGATSTypeError('Invalid data type for %s (expected str ' 'or unicode without line endings, got %s)' % (self.type, type(data))) elif self.type == 'SECTION': if isinstance(data, basestring): if type(key) == int: # accept only integer keys. # move existing items self.moveby1(key) else: key = len(self) self[key] = data else: raise CGATSTypeError('Invalid data type for %s (expected str' 'or unicode, got %s)' % (self.type, type(data))) elif self.type in ('DATA_FORMAT', 'KEYWORDS') or \ (self.parent and self.parent.type == 'ROOT'): if type(data) in (CGATS, dict, list, tuple): for var in data: if var in ('NUMBER_OF_FIELDS', 'NUMBER_OF_SETS'): self[var] = None else: if type(data) in (CGATS, dict): if self.type in ('DATA_FORMAT', 'KEYWORDS'): key, value = len(self), data[var] else: key, value = var, data[var] else: key, value = len(self), var if self.root.normalize_fields: if isinstance(value, basestring): value = value.upper() if value == 'SAMPLEID': value = 'SAMPLE_ID' elif value == 'SAMPLENAME': value = 'SAMPLE_NAME' if var == 'KEYWORD': if value != 'KEYWORD': self.add_keyword(value) else: safe_print('Warning: cannot add keyword ' '"KEYWORD"') else: if isinstance(value, basestring): match = re.match( '(?:\d+|((?:\d*\.\d+|\d+)(?:e[+-]?\d+)?))$', value) if match: if match.groups()[0]: value = float(value) else: value = int(value) if self.type in ('DATA_FORMAT', 'KEYWORDS'): raise CGATSTypeError('Invalid data ' 'type for %s ' '(expected str ' 'or unicode, got ' '%s)' % (self.type, type(value))) self[key] = value else: raise CGATSTypeError('Invalid data type for %s (expected ' 'CGATS, dict, list or tuple, got %s)' % (self.type, type(data))) else: raise CGATSInvalidOperationError('Cannot add data to %s' % self.type) return context def export_vrml(self, filename, devicelocations=True, RGB_black_offset=40, normalize_RGB_white=False, compress=True): data = self.queryv1("DATA") if self.queryv1("ACCURATE_EXPECTED_VALUES") == "true": cat = "Bradford" else: cat = "XYZ scaling" radius = 15.0 / (len(data) ** (1.0 / 3.0)) white = data.queryi1({"RGB_R": 100, "RGB_G": 100, "RGB_B": 100}) if white: white = colormath.get_whitepoint((white["XYZ_X"], white["XYZ_Y"], white["XYZ_Z"])) vrml = """#VRML V2.0 utf8 Transform { children [ NavigationInfo { type "EXAMINE" } DirectionalLight { direction 0 0 -1 direction 0 -1 0 } Viewpoint { position 0 0 340 } #%(axes)s %(children)s ] } """ child = """ # Sphere Transform { translation %(x).6f %(y).6f %(z).6f children [ Shape{ geometry Sphere { radius %(radius).6f} appearance Appearance { material Material { diffuseColor %(R).6f %(G).6f %(B).6f} } } ] } """ if devicelocations: axes = "" else: axes = """# L* axis Transform { translation 0.0 0.0 0.0 children [ Shape { geometry Box { size 2.0 2.0 100.0 } appearance Appearance { material Material { diffuseColor 0.7 0.7 0.7 } } } ] } # L* axis label Transform { translation -3.0 -2.0 55.0 children [ Shape { geometry Text { string ["L"] fontStyle FontStyle { family "SANS" style "BOLD" size 10.0 } } appearance Appearance { material Material { diffuseColor 0.7 0.7 0.7} } } ] } # +a axis Transform { translation 50.0 0.0 -50.0 children [ Shape { geometry Box { size 100.0 2.0 2.0 } appearance Appearance { material Material { diffuseColor 1.0 0.0 0.0 } } } ] } # +a axis label Transform { translation 102.0 -2.0 -50.0 children [ Shape { geometry Text { string ["+a"] fontStyle FontStyle { family "SANS" style "BOLD" size 10.0 } } appearance Appearance { material Material { diffuseColor 1.0 0.0 0.0} } } ] } # -a axis Transform { translation -50.0 0.0 -50.0 children [ Shape { geometry Box { size 100.0 2.0 2.0 } appearance Appearance { material Material { diffuseColor 0.0 1.0 0.0 } } } ] } # -a axis label Transform { translation -108.0 -2.0 -50.0 children [ Shape { geometry Text { string ["-a"] fontStyle FontStyle { family "SANS" style "BOLD" size 10.0 } } appearance Appearance { material Material { diffuseColor 0.0 1.0 0.0} } } ] } # +b axis Transform { translation 0.0 50.0 -50.0 children [ Shape { geometry Box { size 2.0 100.0 2.0 } appearance Appearance { material Material { diffuseColor 1.0 1.0 0.0 } } } ] } # +b axis label Transform { translation -3.0 103.0 -50.0 children [ Shape { geometry Text { string ["+b"] fontStyle FontStyle { family "SANS" style "BOLD" size 10.0 } } appearance Appearance { material Material { diffuseColor 1.0 1.0 0.0} } } ] } # -b axis Transform { translation 0.0 -50.0 -50.0 children [ Shape { geometry Box { size 2.0 100.0 2.0 } appearance Appearance { material Material { diffuseColor 0.0 0.0 1.0 } } } ] } # -b axis label Transform { translation -3.0 -107.0 -50.0 children [ Shape { geometry Text { string ["-b"] fontStyle FontStyle { family "SANS" style "BOLD" size 10.0 } } appearance Appearance { material Material { diffuseColor 0.0 0.0 1.0} } } ] } """ children = [] for entry in data.itervalues(): X, Y, Z = colormath.adapt(entry["XYZ_X"], entry["XYZ_Y"], entry["XYZ_Z"], white, cat=cat) L, a, b = colormath.XYZ2Lab(X, Y, Z) if devicelocations: # Fudge device locations into Lab space x, y, z = (entry["RGB_G"] - 50, entry["RGB_B"] - 50, entry["RGB_R"] - 50) else: x, y, z = a, b, L - 50 if RGB_black_offset != 40: # Keep reference hue and saturation # Lab to sRGB using reference black offset of 40 like Argyll CMS R, G, B = colormath.Lab2RGB(L * (100.0 - 40.0) / 100.0 + 40.0, a, b, scale=.7, noadapt=not normalize_RGB_white) H_ref, S_ref, V_ref = colormath.RGB2HSV(R, G, B) # Lab to sRGB using actual black offset R, G, B = colormath.Lab2RGB(L * (100.0 - RGB_black_offset) / 100.0 + RGB_black_offset, a, b, scale=.7, noadapt=not normalize_RGB_white) if RGB_black_offset != 40: H, S, V = colormath.RGB2HSV(R, G, B) # Use reference H and S to go back to RGB R, G, B = colormath.HSV2RGB(H_ref, S_ref, V) children.append(child % {"x": x, "y": y, "z": z, "R": R + .05, "G": G + .05, "B": B + .05, "radius": radius}) children = "".join(children) vrml = vrml % {"children": children, "axes": axes} if compress: writer = GzipFileProper else: writer = open with writer(filename, 'w') as vrmlfile: vrmlfile.write(vrml) @property def NUMBER_OF_FIELDS(self): """Get number of fields""" if 'DATA_FORMAT' in self: return len(self['DATA_FORMAT']) return 0 @property def NUMBER_OF_SETS(self): """Get number of sets""" if 'DATA' in self: return len(self['DATA']) return 0 def query(self, query, query_value = None, get_value = False, get_first = False): """ Return CGATS object of items or values where query matches. Query can be a dict with key / value pairs, a tuple or a string. Return empty CGATS object if no matching items found. """ modified = self.modified if not get_first: result = CGATS() else: result = None if not isinstance(query, dict): if type(query) not in (list, tuple): query = (query, ) items = [self] + [self[key] for key in self] for item in items: if type(item) in (CGATS, dict, list, tuple): if not get_first: n = len(result) if get_value: result_n = CGATS() else: result_n = None match_count = 0 for query_key in query: if query_key in item or (type(item) == CGATS and ((query_key == 'NUMBER_OF_FIELDS' and 'DATA_FORMAT' in item) or (query_key == 'NUMBER_OF_SETS' and 'DATA' in item))): if query_value is None and isinstance(query, dict): current_query_value = query[query_key] else: current_query_value = query_value if current_query_value != None: if item[query_key] != current_query_value: break if get_value: result_n[len(result_n)] = item[query_key] match_count += 1 else: break if match_count == len(query): if not get_value: result_n = item if result_n != None: if get_first: if get_value and isinstance(result_n, dict) and \ len(result_n) == 1: result = result_n[0] else: result = result_n break elif len(result_n): if get_value and isinstance(result_n, dict) and \ len(result_n) == 1: result[n] = result_n[0] else: result[n] = result_n if type(item) == CGATS and item != self: result_n = item.query(query, query_value, get_value, get_first) if result_n != None: if get_first: result = result_n break elif len(result_n): for i in result_n: n = len(result) if result_n[i] not in result.values(): result[n] = result_n[i] if isinstance(result, CGATS): result.setmodified(modified) return result def queryi(self, query, query_value=None): """ Query and return matching items. See also query method. """ return self.query(query, query_value, get_value=False, get_first=False) def queryi1(self, query, query_value=None): """ Query and return first matching item. See also query method. """ return self.query(query, query_value, get_value=False, get_first=True) def queryv(self, query, query_value=None): """ Query and return matching values. See also query method. """ return self.query(query, query_value, get_value=True, get_first=False) def queryv1(self, query, query_value=None): """ Query and return first matching value. See also query method. """ return self.query(query, query_value, get_value=True, get_first=True) def remove(self, item): """ Remove an item from the internal CGATS structure. """ if type(item) == CGATS: key = item.key else: key = item maxindex = len(self) - 1 result = self[key] if type(key) == int and key != maxindex: self.moveby1(key + 1, -1) dict.pop(self, len(self) - 1) self.setmodified() return result def fix_device_values_scaling(self, color_rep=None): """ Attempt to fix device value scaling so that max = 100 Return number of fixed DATA sections """ fixed = 0 for labels in get_device_value_labels(color_rep): for dataset in self.query("DATA").itervalues(): for item in dataset.queryi(labels).itervalues(): for label in labels: if item[label] > 100: dataset.scale_device_values(color_rep=color_rep) fixed += 1 break return fixed def scale_device_values(self, factor=100.0 / 255, color_rep=None): """ Scales device values by multiplying with factor. """ for labels in get_device_value_labels(color_rep): for data in self.queryv("DATA").itervalues(): for item in data.queryi(labels).itervalues(): for label in labels: item[label] *= factor def adapt(self, whitepoint_source=None, whitepoint_destination=None, cat="Bradford"): """ Perform chromatic adaptation if possible (needs XYZ or LAB) Return number of affected DATA sections. """ n = 0 for dataset in self.query("DATA").itervalues(): if not dataset.has_cie(): continue if not whitepoint_source: whitepoint_source = dataset.get_white_cie("XYZ") if whitepoint_source: n += 1 for item in dataset.queryv1("DATA").itervalues(): if "XYZ_X" in item: X, Y, Z = item["XYZ_X"], item["XYZ_Y"], item["XYZ_Z"] else: X, Y, Z = colormath.Lab2XYZ(item["LAB_L"], item["LAB_A"], item["LAB_B"], scale=100) X, Y, Z = colormath.adapt(X, Y, Z, whitepoint_source, whitepoint_destination, cat) if "LAB_L" in item: (item["LAB_L"], item["LAB_A"], item["LAB_B"]) = colormath.XYZ2Lab(X, Y, Z) if "XYZ_X" in item: item["XYZ_X"], item["XYZ_Y"], item["XYZ_Z"] = X, Y, Z return n def apply_bpc(self, weight=False): """ Apply black point compensation. Scales XYZ so that black (RGB 0) = zero. Needs a CGATS structure with RGB and XYZ data and atleast one black and white patch. Return number of affected DATA sections. """ n = 0 for dataset in self.query("DATA").itervalues(): if dataset.type.strip() == "CAL": labels = ("RGB_R", "RGB_G", "RGB_B") data = dataset.queryi(labels) # Get black black1 = data.queryi1({"RGB_I": 0}) # Get white white1 = data.queryi1({"RGB_I": 1}) if not black1 or not white1: # Can't apply bpc continue black = [] white = [] for label in labels: black.append(black1[label]) white.append(white1[label]) else: labels = ("XYZ_X", "XYZ_Y", "XYZ_Z") data = dataset.queryi(("RGB_R", "RGB_G", "RGB_B") + labels) # Get blacks blacks = data.queryi({"RGB_R": 0, "RGB_G": 0, "RGB_B": 0}) # Get whites whites = data.queryi({"RGB_R": 100, "RGB_G": 100, "RGB_B": 100}) if not blacks or not whites: # Can't apply bpc continue black = [0, 0, 0] for i in blacks: if blacks[i]["XYZ_Y"] > black[1]: for j, label in enumerate(labels): black[j] = blacks[i][label] white = [0, 0, 0] for i in whites: if whites[i]["XYZ_Y"] > white[1]: for j, label in enumerate(labels): white[j] = whites[i][label] # Apply black point compensation n += 1 for i in data: XYZ = data[i].queryv1(labels) XYZ = colormath.apply_bpc(XYZ[0], XYZ[1], XYZ[2], black, (0, 0, 0), white, weight) for j, label in enumerate(labels): data[i][label] = max(0.0, XYZ[j]) return n def get_white_cie(self, colorspace=None): """ Get the 'white' from the CIE values (if any). """ data_format = self.has_cie() if data_format: if "RGB_R" in data_format.values(): white = {"RGB_R": 100, "RGB_G": 100, "RGB_B": 100} elif "CMYK_C" in data_format.values(): white = {"CMYK_C": 0, "CMYK_M": 0, "CMYK_Y": 0, "CMYK_K": 0} else: return if white: white = self.queryi1(white) if not white: white = self.queryv1("APPROX_WHITE_POINT") if white: try: white = [float(v) for v in white.split()] except ValueError: white = None else: if len(white) == 3: white = [v / white[1] * 100 for v in white] white = {"XYZ_X": white[0], "XYZ_Y": white[1], "XYZ_Z": white[2]} else: return if white and (("XYZ_X" in white and "XYZ_Y" in white and "XYZ_Z" in white) or ("LAB_L" in white and "LAB_B" in white and "LAB_B" in white)): if colorspace == "XYZ": if "XYZ_X" in white: return white["XYZ_X"], white["XYZ_Y"], white["XYZ_Z"] else: return colormath.Lab2XYZ(white["LAB_L"], white["LAB_A"], white["LAB_B"], scale=100) elif colorspace == "Lab": if "LAB_L" in white: return white["LAB_L"], white["LAB_A"], white["LAB_B"] else: return colormath.XYZ2Lab(white["XYZ_X"], white["XYZ_Y"], white["XYZ_Z"]) return white def has_cie(self): """ Check if DATA_FORMAT defines any CIE XYZ or LAB columns. Return the DATA_FORMAT on success or None on failure. """ data_format = self.queryv1("DATA_FORMAT") if data_format: cie = {} for ch in ("L", "A", "B"): cie[ch] = "LAB_%s" % ch in data_format.values() if len(cie.values()) in (0, 3): for ch in ("X", "Y", "Z"): cie[ch] = "XYZ_%s" % ch in data_format.values() if len(filter(lambda v: v is not None, cie.itervalues())) in (3, 6): return data_format pop = remove def write(self, filename=None): if not filename: filename = self.filename txt = open(filename, "w") txt.write(str(self)) txt.close() dispcalGUI-1.7.1.6/dispcalGUI/colord.py000644 000765 000000 00000012662 12266411534 017451 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from __future__ import with_statement import os import shutil import sys from time import sleep try: from gi.repository import Colord from gi.repository import Gio except ImportError: Colord = None Gio = None else: cancellable = Gio.Cancellable.new(); if sys.platform not in ("darwin", "win32"): from defaultpaths import xdg_data_home if not Colord or not hasattr(Colord, 'quirk_vendor_name'): from config import get_data_path import demjson quirk_cache = {'suffixes': [], 'vendor_names': {}} def client_connect(): """ Connect to colord """ client = Colord.Client.new() # Connect to colord if not client.connect_sync(cancellable): raise CDError("Couldn't connect to colord") return client def device_connect(client, device_id): """ Connect to device """ if isinstance(device_id, unicode): device_id = device_id.encode('UTF-8') try: device = client.find_device_sync(device_id, cancellable) except Exception, exception: raise CDError(exception.args[0]) # Connect to device if not device.connect_sync(cancellable): raise CDError("Couldn't connect to device with ID %r" % device_id) return device def device_id_from_edid(edid, quirk=True, use_unused_edid_keys=False): """ Assemble device key from EDID """ # https://gitorious.org/colord/master/blobs/master/doc/device-and-profile-naming-spec.txt incomplete = False parts = ["xrandr"] if use_unused_edid_keys: # Not currently used by colord edid_keys = ["manufacturer", "monitor_name", "ascii", "serial_ascii", "serial_32"] else: edid_keys = ["manufacturer", "monitor_name", "serial_ascii"] for name in edid_keys: value = edid.get(name) if value: if name == "serial_32" and "serial_ascii" in edid: # Only add numeric serial if no ascii serial continue elif name == "manufacturer" and quirk: value = quirk_manufacturer(value) parts.append(str(value)) elif name == "manufacturer": # Do not allow the manufacturer to be missing or empty # TODO: Should fall back to xrandr name in that case incomplete = True break if not incomplete: return "-".join(parts) def get_default_profile(device_id): """ Get default profile filename for device """ client = client_connect() # Connect to existing device device = device_connect(client, device_id) # Get default profile profile = device.get_default_profile() if not profile: # No assigned profile return # Connect to profile if not profile.connect_sync(cancellable): raise CDError("Couldn't get default profile for device ID %r" % device_id) filename = profile.get_filename() if not isinstance(filename, unicode): filename = filename.decode('UTF-8') return filename def install_profile(device_id, profile_filename, profile_installname=None, timeout=2): """ Install profile for device profile_installname filename of the installed profile (full path). The profile is copied to this location. If profile_installname is None, it defaults to ~/.local/share/icc/ timeout Time to allow for colord to pick up new profiles (recommended not below 2 secs) """ client = client_connect() # Connect to existing device device = device_connect(client, device_id) # Copy profile if not profile_installname: profile_installname = os.path.join(xdg_data_home, 'icc', os.path.basename(profile_filename)) shutil.copyfile(profile_filename, profile_installname) if isinstance(profile_installname, unicode): profile_installname = profile_installname.encode('UTF-8') # Query colord for newly added profile for i in xrange(int(timeout / .5)): try: profile = client.find_profile_by_filename_sync(profile_installname, cancellable) if profile: break except Exception, exception: # Profile not found pass # Give colord time to pick up the profile sleep(.5) if not profile: raise CDError("Querying for profile %r returned no result for %s secs" % (profile_installname, timeout)) # Connect to profile if not profile.connect_sync(cancellable): raise CDError("Could not connect to profile") # Add profile to device try: device.add_profile_sync(Colord.DeviceRelation.HARD, profile, cancellable) except Exception, exception: # Profile may already have been added pass # Make profile default for device if not device.make_profile_default_sync(profile, cancellable): raise CDError("Could not make profile %r default for device ID %s" % (profile.get_filename(), device_id)) def quirk_manufacturer(manufacturer): if Colord and hasattr(Colord, 'quirk_vendor_name'): return Colord.quirk_vendor_name(manufacturer) if not quirk_cache['suffixes'] or not quirk_cache['vendor_names']: quirk_filename = get_data_path('quirk.json') if quirk_filename: with open(quirk_filename) as quirk_file: quirk = demjson.decode(quirk_file.read()) quirk_cache['suffixes'] = quirk['suffixes'] quirk_cache['vendor_names'] = quirk['vendor_names'] # Correct some company names for old, new in quirk_cache['vendor_names'].iteritems(): if manufacturer.startswith(old): manufacturer = new break # Get rid of suffixes for suffix in quirk_cache['suffixes']: if manufacturer.endswith(suffix): manufacturer = manufacturer[0:len(manufacturer) - len(suffix)] manufacturer = manufacturer.rstrip() return manufacturer class CDError(Exception): pass if __name__ == "__main__": import sys for arg in sys.argv[1:]: print get_default_profile(arg) dispcalGUI-1.7.1.6/dispcalGUI/colormath.py000644 000765 000000 00000175272 12266411643 020167 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import logging import math import sys def get_transfer_function_phi(alpha, gamma): return (math.pow(1 + alpha, gamma) * math.pow(gamma - 1, gamma - 1)) / (math.pow(alpha, gamma - 1) * math.pow(gamma, gamma)) LSTAR_E = 216.0 / 24389.0 # Intent of CIE standard, actual CIE standard = 0.008856 LSTAR_K = 24389.0 / 27.0 # Intent of CIE standard, actual CIE standard = 903.3 REC709_K0 = 0.081 # 0.099 / (1.0 / 0.45 - 1) REC709_P = 4.5 # get_transfer_function_phi(0.099, 1.0 / 0.45) SMPTE240M_K0 = 0.0913 # 0.1115 / (1.0 / 0.45 - 1) SMPTE240M_P = 4.0 # get_transfer_function_phi(0.1115, 1.0 / 0.45) SRGB_K0 = 0.04045 # 0.055 / (2.4 - 1) SRGB_P = 12.92 # get_transfer_function_phi(0.055, 2.4) standard_illuminants = { # 1st level is the standard name => illuminant definitions # 2nd level is the illuminant name => CIE XYZ coordinates # (Y should always assumed to be 1.0 and is not explicitly defined) None: {"E": {"X": 1.00000, "Z": 1.00000}}, "ASTM E308-01": {"A": {"X": 1.09850, "Z": 0.35585}, "C": {"X": 0.98074, "Z": 1.18232}, "D50": {"X": 0.96422, "Z": 0.82521}, "D55": {"X": 0.95682, "Z": 0.92149}, "D65": {"X": 0.95047, "Z": 1.08883}, "D75": {"X": 0.94972, "Z": 1.22638}, "F2": {"X": 0.99186, "Z": 0.67393}, "F7": {"X": 0.95041, "Z": 1.08747}, "F11": {"X": 1.00962, "Z": 0.64350}}, "ICC": {"D50": {"X": 0.9642, "Z": 0.8249}, "D65": {"X": 0.9505, "Z": 1.0890}}, "Wyszecki & Stiles": {"A": {"X": 1.09828, "Z": 0.35547}, "B": {"X": 0.99072, "Z": 0.85223}, "C": {"X": 0.98041, "Z": 1.18103}, "D55": {"X": 0.95642, "Z": 0.92085}, "D65": {"X": 0.95017, "Z": 1.08813}, "D75": {"X": 0.94939, "Z": 1.22558}} } def specialpow(a, b): """ Wrapper for power, Rec. 601/709, SMPTE 240M, sRGB and L* functions Positive b = power, -2.4 = sRGB, -3.0 = L*, -240 = SMPTE 240M, -601 = Rec. 601, -709 = Rec. 709 (Rec. 601 and 709 transfer functions are identical) """ if b >= 0.0: # Power curve if a < 0.0: return -math.pow(-a, b) else: return math.pow(a, b) if a < 0.0: signScale = -1.0 a = -a else: signScale = 1.0 if b in (1.0 / -601, 1.0 / -709): # XYZ -> RGB, Rec. 601/709 TRC if a < REC709_K0 / REC709_P: v = a * REC709_P else: v = 1.099 * math.pow(a, 0.45) - 0.099 elif b == 1.0 / -240: # XYZ -> RGB, SMPTE 240M TRC if a < SMPTE240M_K0 / SMPTE240M_P: v = a * SMPTE240M_P else: v = 1.1115 * math.pow(a, 0.45) - 0.1115 elif b == 1.0 / -3.0: # XYZ -> RGB, L* TRC if a <= LSTAR_E: v = 0.01 * a * LSTAR_K else: v = 1.16 * math.pow(a, 1.0 / 3.0) - 0.16 elif b == 1.0 / -2.4: # XYZ -> RGB, sRGB TRC if a <= SRGB_K0 / SRGB_P: v = a * SRGB_P else: v = 1.055 * math.pow(a, 1.0 / 2.4) - 0.055 elif b == -2.4: # RGB -> XYZ, sRGB TRC if a <= SRGB_K0: v = a / SRGB_P else: v = math.pow((a + 0.055) / 1.055, 2.4) elif b == -3.0: # RGB -> XYZ, L* TRC if a <= 0.08: # E * K * 0.01 v = 100.0 * a / LSTAR_K else: v = math.pow((a + 0.16) / 1.16, 3.0) elif b == -240: # RGB -> XYZ, SMPTE 240M TRC if a < SMPTE240M_K0: v = a / SMPTE240M_P else: v = math.pow((0.1115 + a) / 1.1115, 1.0 / 0.45) elif b in (-601, -709): # RGB -> XYZ, Rec. 601/709 TRC if a < REC709_K0: v = a / REC709_P else: v = math.pow((a + .099) / 1.099, 1.0 / 0.45) else: raise ValueError("Invalid gamma %s" % b) return v * signScale rgb_spaces = { # http://brucelindbloom.com/WorkingSpaceInfo.html # ACES: https://github.com/ampas/aces-dev/blob/master/docs/ACES_1.0.1.pdf?raw=true # Adobe RGB: http://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf # DCI P3: http://www.hp.com/united-states/campaigns/workstations/pdfs/lp2480zx-dci--p3-emulation.pdf # http://dcimovies.com/specification/DCI_DCSS_v12_with_errata_2012-1010.pdf # # name gamma white primaries # point Rx Ry RY Gx Gy GY Bx By BY "ACES RGB": (1.0, (0.95265, 1.0, 1.00883), (0.7347, 0.2653, 0.343961), (0.0000, 1.0000, 0.728164), (0.0001,-0.0770,-0.072125)), "Adobe RGB (1998)": (2 + 51 / 256.0, "D65", (0.6400, 0.3300, 0.297361), (0.2100, 0.7100, 0.627355), (0.1500, 0.0600, 0.075285)), "Apple RGB": (1.8, "D65", (0.6250, 0.3400, 0.244634), (0.2800, 0.5950, 0.672034), (0.1550, 0.0700, 0.083332)), "Best RGB": (2.2, "D50", (0.7347, 0.2653, 0.228457), (0.2150, 0.7750, 0.737352), (0.1300, 0.0350, 0.034191)), "Beta RGB": (2.2, "D50", (0.6888, 0.3112, 0.303273), (0.1986, 0.7551, 0.663786), (0.1265, 0.0352, 0.032941)), "Bruce RGB": (2.2, "D65", (0.6400, 0.3300, 0.240995), (0.2800, 0.6500, 0.683554), (0.1500, 0.0600, 0.075452)), "CIE RGB": (2.2, "E", (0.7350, 0.2650, 0.176204), (0.2740, 0.7170, 0.812985), (0.1670, 0.0090, 0.010811)), "ColorMatch RGB": (1.8, "D50", (0.6300, 0.3400, 0.274884), (0.2950, 0.6050, 0.658132), (0.1500, 0.0750, 0.066985)), "DCI P3 RGB": (2.6, (0.89459, 1.0, 0.95442), (0.6800, 0.3200, 0.209475), (0.2650, 0.6900, 0.721592), (0.1500, 0.0600, 0.068903)), "Don RGB 4": (2.2, "D50", (0.6960, 0.3000, 0.278350), (0.2150, 0.7650, 0.687970), (0.1300, 0.0350, 0.033680)), "ECI RGB": (1.8, "D50", (0.6700, 0.3300, 0.320250), (0.2100, 0.7100, 0.602071), (0.1400, 0.0800, 0.077679)), "ECI RGB v2": (-3.0, "D50", (0.6700, 0.3300, 0.320250), (0.2100, 0.7100, 0.602071), (0.1400, 0.0800, 0.077679)), "Ekta Space PS5": (2.2, "D50", (0.6950, 0.3050, 0.260629), (0.2600, 0.7000, 0.734946), (0.1100, 0.0050, 0.004425)), "NTSC RGB": (2.2, "C", (0.6700, 0.3300, 0.298839), (0.2100, 0.7100, 0.586811), (0.1400, 0.0800, 0.114350)), "PAL/SECAM RGB": (2.2, "D65", (0.6400, 0.3300, 0.222021), (0.2900, 0.6000, 0.706645), (0.1500, 0.0600, 0.071334)), "ProPhoto RGB": (1.8, "D50", (0.7347, 0.2653, 0.288040), (0.1596, 0.8404, 0.711874), (0.0366, 0.0001, 0.000086)), "Rec. 709 RGB": (-709, "D65", (0.6400, 0.3300, 0.212656), (0.3000, 0.6000, 0.715158), (0.1500, 0.0600, 0.072186)), "SMPTE-C RGB": (2.2, "D65", (0.6300, 0.3400, 0.212395), (0.3100, 0.5950, 0.701049), (0.1550, 0.0700, 0.086556)), "SMPTE 240M RGB": (-240, "D65", (0.6300, 0.3400, 0.212395), (0.3100, 0.5950, 0.701049), (0.1550, 0.0700, 0.086556)), "sRGB": (-2.4, "D65", (0.6400, 0.3300, 0.212656), (0.3000, 0.6000, 0.715158), (0.1500, 0.0600, 0.072186)), "Wide Gamut RGB": (2.2, "D50", (0.7350, 0.2650, 0.258187), (0.1150, 0.8260, 0.724938), (0.1570, 0.0180, 0.016875)) } def get_cat_matrix(cat="Bradford"): if isinstance(cat, basestring): cat = cat_matrices[cat] if not isinstance(cat, Matrix3x3): cat = Matrix3x3(cat) return cat def cbrt(x): return math.pow(x, 1.0 / 3.0) if x >= 0 else -math.pow(-x, 1.0 / 3.0) def XYZ2LMS(X, Y, Z, cat="Bradford"): """ Convert from XYZ to cone response domain """ cat = get_cat_matrix(cat) p, y, b = cat * [X, Y, Z] return p, y, b def LMS_wp_adaption_matrix(whitepoint_source=None, whitepoint_destination=None, cat="Bradford"): """ Prepare a matrix to match the whitepoints in cone response domain """ # chromatic adaption # based on formula http://brucelindbloom.com/Eqn_ChromAdapt.html # cat = adaption matrix or predefined choice ('CAT02', 'Bradford', # 'Von Kries', 'XYZ Scaling', see cat_matrices), defaults to 'Bradford' cat = get_cat_matrix(cat) XYZWS = get_whitepoint(whitepoint_source) XYZWD = get_whitepoint(whitepoint_destination) if XYZWS[1] <= 1.0 and XYZWD[1] > 1.0: # make sure the scaling is identical XYZWS = [v * 100 for v in XYZWS] if XYZWD[1] <= 1.0 and XYZWS[1] > 1.0: # make sure the scaling is identical XYZWD = [v * 100 for v in XYZWD] Ls, Ms, Ss = XYZ2LMS(XYZWS[0], XYZWS[1], XYZWS[2], cat) Ld, Md, Sd = XYZ2LMS(XYZWD[0], XYZWD[1], XYZWD[2], cat) return Matrix3x3([[Ld/Ls, 0, 0], [0, Md/Ms, 0], [0, 0, Sd/Ss]]) def wp_adaption_matrix(whitepoint_source=None, whitepoint_destination=None, cat="Bradford"): """ Prepare a matrix to match the whitepoints in cone response doamin and transform back to XYZ """ # chromatic adaption # based on formula http://brucelindbloom.com/Eqn_ChromAdapt.html # cat = adaption matrix or predefined choice ('CAT02', 'Bradford', # 'Von Kries', 'XYZ Scaling', see cat_matrices), defaults to 'Bradford' cat = get_cat_matrix(cat) return cat.inverted() * LMS_wp_adaption_matrix(whitepoint_source, whitepoint_destination, cat) * cat def adapt(X, Y, Z, whitepoint_source=None, whitepoint_destination=None, cat="Bradford"): """ Transform XYZ under source illuminant to XYZ under destination illuminant """ # chromatic adaption # based on formula http://brucelindbloom.com/Eqn_ChromAdapt.html # cat = adaption matrix or predefined choice ('CAT02', 'Bradford', # 'Von Kries', 'XYZ Scaling', see cat_matrices), defaults to 'Bradford' return wp_adaption_matrix(whitepoint_source, whitepoint_destination, cat) * (X, Y, Z) def apply_bpc(X, Y, Z, bp_in, bp_out, wp_out="D50", weight=False): """ Apply black point compensation """ wp_out = get_whitepoint(wp_out) XYZ = [X, Y, Z] for i, v in enumerate(XYZ): if weight and v > 0: XYZ[i] = ((wp_out[i] - bp_out[i]) * v - wp_out[i] * (bp_in[i] * (bp_in[i] / v) - bp_out[i])) / (wp_out[i] - bp_in[i] * (bp_in[i] / v)) else: XYZ[i] = ((wp_out[i] - bp_out[i]) * v - wp_out[i] * (bp_in[i] - bp_out[i])) / (wp_out[i] - bp_in[i]) return XYZ def avg(*args): return float(sum(args)) / len(args) def interp(x, xp, fp, left=None, right=None): """ One-dimensional linear interpolation similar to numpy.interp Values do NOT have to be monotonically increasing interp(0, [0, 0], [0, 1]) will return 0 """ if x in xp: return fp[xp.index(x)] elif x < fp[0]: return xp[0] if left is None else left elif x > xp[-1]: return fp[-1] if right is None else right else: # Interpolate lower = 0 higher = len(fp) - 1 for i, v in enumerate(xp): if v < x and i > lower: lower = i elif v > x and i < higher: higher = i step = x - xp[lower] steps = (xp[higher] - xp[lower]) / step return fp[lower] + (fp[higher] - fp[lower]) / steps def compute_bpc(bp_in, bp_out): """ Black point compensation. Implemented as a linear scaling in XYZ. Black points should come relative to the white point. Fills and returns a matrix/offset element. [matrix]*bp_in + offset = bp_out [matrix]*D50 + offset = D50 """ # This is a linear scaling in the form ax+b, where # a = (bp_out - D50) / (bp_in - D50) # b = - D50* (bp_out - bp_in) / (bp_in - D50) D50 = get_standard_illuminant("D50") tx = bp_in[0] - D50[0] ty = bp_in[1] - D50[1] tz = bp_in[2] - D50[2] ax = (bp_out[0] - D50[0]) / tx ay = (bp_out[1] - D50[1]) / ty az = (bp_out[2] - D50[2]) / tz bx = - D50[0] * (bp_out[0] - bp_in[0]) / tx by = - D50[1] * (bp_out[1] - bp_in[1]) / ty bz = - D50[2] * (bp_out[2] - bp_in[2]) / tz matrix = Matrix3x3([[ax, 0, 0], [0, ay, 0] [0, 0, az]]) offset = [bx, by, bz] return matrix, offset def delta(L1, a1, b1, L2, a2, b2, method="1976", p1=None, p2=None, p3=None): """ Compute the delta of two samples CIE 1994 & CMC calculation code derived from formulas on www.brucelindbloom.com CIE 1994 code uses some alterations seen on www.farbmetrik-gall.de/cielab/korrcielab/cie94.html (see notes in code below) CIE 2000 calculation code derived from Excel spreadsheet available at www.ece.rochester.edu/~gsharma/ciede2000 method: either "CIE94", "CMC", "CIE2K" or "CIE76" (default if method is not set) p1, p2, p3 arguments have different meaning for each calculation method: CIE 1994: If p1 is not None, calculation will be adjusted for textiles, otherwise graphics arts (default if p1 is not set) CMC(l:c): p1 equals l (lightness) weighting factor and p2 equals c (chroma) weighting factor. Commonly used values are CMC(1:1) for perceptability (default if p1 and p2 are not set) and CMC(2:1) for acceptability CIE 2000: p1 becomes kL (lightness) weighting factor, p2 becomes kC (chroma) weighting factor and p3 becomes kH (hue) weighting factor (all three default to 1 if not set) """ if isinstance(method, basestring): method = method.lower() else: method = str(int(method)) if method in ("94", "1994", "cie94", "cie1994"): textiles = p1 dL = L1 - L2 C1 = math.sqrt(math.pow(a1, 2) + math.pow(b1, 2)) C2 = math.sqrt(math.pow(a2, 2) + math.pow(b2, 2)) dC = C1 - C2 dH2 = math.pow(a1 - a2, 2) + math.pow(b1 - b2, 2) - math.pow(dC, 2) dH = math.sqrt(dH2) if dH2 > 0 else 0 SL = 1.0 K1 = 0.048 if textiles else 0.045 K2 = 0.014 if textiles else 0.015 # brucelindbloom.com formula originally used C1 instead of C_, # but the results are different from ProfileMaker/MeasureTool # implementation, so use this instead # (found on www.farbmetrik-gall.de/cielab/korrcielab/cie94.html) C_ = (math.sqrt((1 + (K1 * C1)) * (1 + (K1 * C2))) - 1) / K1 SC = 1.0 + K1 * C_ SH = 1.0 + K2 * C_ KL = 2.0 if textiles else 1.0 KC = 1.0 KH = 1.0 dE = math.sqrt(math.pow(dL / (KL * SL), 2) + math.pow(dC / (KC * SC), 2) + math.pow(dH / (KH * SH), 2)) elif method in ("cmc(2:1)", "cmc21", "cmc(1:1)", "cmc11", "cmc"): if method in ("cmc(2:1)", "cmc21"): p1 = 2.0 l = p1 if isinstance(p1, (float, int)) else 1.0 c = p2 if isinstance(p2, (float, int)) else 1.0 dL = L1 - L2 C1 = math.sqrt(math.pow(a1, 2) + math.pow(b1, 2)) C2 = math.sqrt(math.pow(a2, 2) + math.pow(b2, 2)) dC = C1 - C2 dH2 = math.pow(a1 - a2, 2) + math.pow(b1 - b2, 2) - math.pow(dC, 2) dH = math.sqrt(dH2) if dH2 > 0 else 0 SL = 0.511 if L1 < 16 else (0.040975 * L1) / (1 + 0.01765 * L1) SC = (0.0638 * C1) / (1 + 0.0131 * C1) + 0.638 F = math.sqrt(math.pow(C1, 4) / (math.pow(C1, 4) + 1900.0)) H1 = math.degrees(math.atan2(b1, a1)) + (0 if b1 >= 0 else 360.0) T = 0.56 + abs(0.2 * math.cos(math.radians(H1 + 168.0))) if 164 <= H1 and H1 <= 345 else 0.36 + abs(0.4 * math.cos(math.radians(H1 + 35))) SH = SC * (F * T + 1 - F) dE = math.sqrt(math.pow(dL / (l * SL), 2) + math.pow(dC / (c * SC), 2) + math.pow(dH / SH, 2)) elif method in ("00", "2k", "2000", "cie00", "cie2k", "cie2000"): pow25_7 = math.pow(25, 7) k_L = p1 if isinstance(p1, (float, int)) else 1.0 k_C = p2 if isinstance(p2, (float, int)) else 1.0 k_H = p3 if isinstance(p3, (float, int)) else 1.0 C1 = math.sqrt(math.pow(a1, 2) + math.pow(b1, 2)) C2 = math.sqrt(math.pow(a2, 2) + math.pow(b2, 2)) C_avg = avg(C1, C2) G = .5 * (1 - math.sqrt(math.pow(C_avg, 7) / (math.pow(C_avg, 7) + pow25_7))) L1_ = L1 a1_ = (1 + G) * a1 b1_ = b1 L2_ = L2 a2_ = (1 + G) * a2 b2_ = b2 C1_ = math.sqrt(math.pow(a1_, 2) + math.pow(b1_, 2)) C2_ = math.sqrt(math.pow(a2_, 2) + math.pow(b2_, 2)) h1_ = 0 if a1_ == 0 and b1_ == 0 else math.degrees(math.atan2(b1_, a1_)) + (0 if b1_ >= 0 else 360.0) h2_ = 0 if a2_ == 0 and b2_ == 0 else math.degrees(math.atan2(b2_, a2_)) + (0 if b2_ >= 0 else 360.0) dh_cond = 1.0 if h2_ - h1_ > 180 else (2.0 if h2_ - h1_ < -180 else 0) dh_ = h2_ - h1_ if dh_cond == 0 else (h2_ - h1_ - 360.0 if dh_cond == 1 else h2_ + 360.0 - h1_) dL_ = L2_ - L1_ dL = dL_ dC_ = C2_ - C1_ dC = dC_ dH_ = 2 * math.sqrt(C1_ * C2_) * math.sin(math.radians(dh_ / 2.0)) dH = dH_ L__avg = avg(L1_, L2_) C__avg = avg(C1_, C2_) h__avg_cond = 3.0 if C1_ * C2_ == 0 else (0 if abs(h2_ - h1_) <= 180 else (1.0 if h2_ + h1_ < 360 else 2.0)) h__avg = h1_ + h2_ if h__avg_cond == 3 else (avg(h1_, h2_) if h__avg_cond == 0 else (avg(h1_, h2_) + 180.0 if h__avg_cond == 1 else avg(h1_, h2_) - 180.0)) AB = math.pow(L__avg - 50.0, 2) # (L'_ave-50)^2 S_L = 1 + .015 * AB / math.sqrt(20.0 + AB) S_C = 1 + .045 * C__avg T = (1 - .17 * math.cos(math.radians(h__avg - 30.0)) + .24 * math.cos(math.radians(2.0 * h__avg)) + .32 * math.cos(math.radians(3.0 * h__avg + 6.0)) - .2 * math.cos(math.radians(4 * h__avg - 63.0))) S_H = 1 + .015 * C__avg * T dTheta = 30.0 * math.exp(-1 * math.pow((h__avg - 275.0) / 25.0, 2)) R_C = 2.0 * math.sqrt(math.pow(C__avg, 7) / (math.pow(C__avg, 7) + pow25_7)) R_T = -math.sin(math.radians(2.0 * dTheta)) * R_C AJ = dL_ / S_L / k_L # dL' / k_L / S_L AK = dC_ / S_C / k_C # dC' / k_C / S_C AL = dH_ / S_H / k_H # dH' / k_H / S_H dE = math.sqrt(math.pow(AJ, 2) + math.pow(AK, 2) + math.pow(AL, 2) + R_T * AK * AL) else: # dE 1976 dL = L1 - L2 C1 = math.sqrt(math.pow(a1, 2) + math.pow(b1, 2)) C2 = math.sqrt(math.pow(a2, 2) + math.pow(b2, 2)) dC = C1 - C2 dH2 = math.pow(a1 - a2, 2) + math.pow(b1 - b2, 2) - math.pow(dC, 2) dH = math.sqrt(dH2) if dH2 > 0 else 0 dE = math.sqrt(math.pow(dL, 2) + math.pow(a1 - a2, 2) + math.pow(b1 - b2, 2)) return {"E": dE, "L": dL, "C": dC, "H": dH, "a": a1 - a2, "b": b1 - b2} def is_similar_matrix(matrix1, matrix2, digits=3): """ Compare two matrices and check if they are the same up to n digits after the decimal point """ return matrix1.rounded(digits) == matrix2.rounded(digits) def get_gamma(values, scale=1.0, vmin=0.0, vmax=1.0, average=True, least_squares=False): """ Return average or least squares gamma or a list of gamma values """ if least_squares: logxy = [] logx2 = [] else: gammas = [] vmin /= scale vmax /= scale for x, y in values: x /= scale y = (y / scale - vmin) * (vmax + vmin) if x > 0 and x < 1 and y > 0: if least_squares: logxy.append(math.log(x) * math.log(y)) logx2.append(math.pow(math.log(x), 2)) else: gammas.append(math.log(y) / math.log(x)) if average or least_squares: if least_squares: if not logxy or not logx2: return 0 return sum(logxy) / sum(logx2) else: if not gammas: return 0 return sum(gammas) / len(gammas) else: return gammas def guess_cat(chad, whitepoint_source=None, whitepoint_destination=None): """ Try and guess the chromatic adaption transform used in a chromatic adaption matrix as found in an ICC profile's 'chad' tag """ if chad == [[1, 0, 0], [0, 1, 0], [0, 0, 1]]: return "None" for cat in cat_matrices: if is_similar_matrix((chad * cat_matrices[cat].inverted() * LMS_wp_adaption_matrix(whitepoint_destination, whitepoint_source, cat)).inverted(), cat_matrices[cat], 2): return cat def CIEDCCT2xyY(T, scale=1.0): """ Convert from CIE correlated daylight temperature to xyY. T = temperature in Kelvin. Based on formula from http://brucelindbloom.com/Eqn_T_to_xy.html """ if isinstance(T, basestring): # Assume standard illuminant, e.g. "D50" return XYZ2xyY(*get_standard_illuminant(T, scale=scale)) if 4000 <= T and T <= 7000: xD = (((-4.607 * math.pow(10, 9)) / math.pow(T, 3)) + ((2.9678 * math.pow(10, 6)) / math.pow(T, 2)) + ((0.09911 * math.pow(10, 3)) / T) + 0.244063) elif 7000 < T and T <= 25000: xD = (((-2.0064 * math.pow(10, 9)) / math.pow(T, 3)) + ((1.9018 * math.pow(10, 6)) / math.pow(T, 2)) + ((0.24748 * math.pow(10, 3)) / T) + 0.237040) else: return None yD = -3 * math.pow(xD, 2) + 2.87 * xD - 0.275 return xD, yD, scale def CIEDCCT2XYZ(T, scale=1.0): """ Convert from CIE correlated daylight temperature to XYZ. T = temperature in Kelvin. """ xyY = CIEDCCT2xyY(T, scale) if xyY: return xyY2XYZ(*xyY) def HSV2RGB(H, S, V, scale=1.0): if S == 0: return (V * scale, ) * 3 else: h = H * 6.0 if h == 6: h = 0 i = int(h) component_1 = V * (1.0 - S) component_2 = V * (1.0 - S * (h - i)) component_3 = V * (1.0 - S * (1.0 - (h - i))) if i == 0: R = V G = component_3 B = component_1 elif i == 1: R = component_2 G = V B = component_1 elif i == 2: R = component_1 G = V B = component_3 elif i == 3: R = component_1 G = component_2 B = V elif i == 4: R = component_3 G = component_1 B = V else: R = V G = component_1 B = component_2 return R * scale, G * scale, B * scale def get_DBL_MIN(): t = "0.0" i = 10 n = 0 while True: if i > 1: i -= 1 else: t += "0" i = 9 if float(t + str(i)) == 0.0: if n > 1: break n += 1 t += str(i) i = 10 else: if n > 1: n -= 1 DBL_MIN = float(t + str(i)) return DBL_MIN DBL_MIN = get_DBL_MIN() def LCHab2Lab(L, C, H): a = C * math.cos(H * math.pi / 180.0) b = C * math.sin(H * math.pi / 180.0) return L, a, b def Lab2LCHab(L, a, b): C = math.sqrt(math.pow(a, 2) + math.pow(b, 2)) H = 180.0 * math.atan2(b, a) / math.pi if (H < 0.0): H += 360.0 return L, C, H def Lab2Luv(L, a, b, whitepoint=None, scale=100): X, Y, Z = Lab2XYZ(L, a, b, whitepoint, scale) return XYZ2Luv(X, Y, Z, whitepoint) def Lab2RGB(L, a, b, rgb_space=None, scale=1.0, round_=False, clamp=True, whitepoint=None, noadapt=False, cat="Bradford"): """ Convert from Lab to RGB """ X, Y, Z = Lab2XYZ(L, a, b, whitepoint) if not noadapt: X, Y, Z = adapt(X, Y, Z, whitepoint, rgb_space[1] if rgb_space else "D65", cat) return XYZ2RGB(X, Y, Z, rgb_space, scale, round_, clamp) def Lab2XYZ(L, a, b, whitepoint=None, scale=1.0): """ Convert from Lab to XYZ. The input L value needs to be in the nominal range [0.0, 100.0] and other input values scaled accordingly. The output XYZ values are in the nominal range [0.0, scale]. whitepoint can be string (e.g. "D50"), a tuple of XYZ coordinates or color temperature as float or int. Defaults to D50 if not set. Based on formula from http://brucelindbloom.com/Eqn_Lab_to_XYZ.html """ fy = (L + 16) / 116.0 fx = a / 500.0 + fy fz = fy - b / 200.0 if math.pow(fx, 3.0) > LSTAR_E: xr = math.pow(fx, 3.0) else: xr = (116.0 * fx - 16) / LSTAR_K if L > LSTAR_K * LSTAR_E: yr = math.pow((L + 16) / 116.0, 3.0) else: yr = L / LSTAR_K if math.pow(fz, 3.0) > LSTAR_E: zr = math.pow(fz, 3.0) else: zr = (116.0 * fz - 16) / LSTAR_K Xr, Yr, Zr = get_whitepoint(whitepoint, scale) X = xr * Xr Y = yr * Yr Z = zr * Zr return X, Y, Z def Lab2xyY(L, a, b, whitepoint=None, scale=1.0): X, Y, Z = Lab2XYZ(L, a, b, whitepoint, scale) return XYZ2xyY(X, Y, Z, whitepoint) def Luv2RGB(L, u, v, rgb_space=None, scale=1.0, round_=False, clamp=True, whitepoint=None): """ Convert from Luv to RGB """ X, Y, Z = Luv2XYZ(L, u, v, whitepoint) return XYZ2RGB(X, Y, Z, rgb_space, scale, round_, clamp) def u_v_2xy(u, v): """ Convert from u'v' to xy """ x = (9.0 * u) / (6 * u - 16 * v + 12) y = (4 * v) / (6 * u - 16 * v + 12) return x, y def Luv2XYZ(L, u, v, whitepoint=None, scale=1.0): """ Convert from Luv to XYZ """ Xr, Yr, Zr = get_whitepoint(whitepoint) Y = math.pow((L + 16.0) / 116.0, 3) if L > LSTAR_K * LSTAR_E else L / LSTAR_K uo = (4.0 * Xr) / (Xr + 15.0 * Yr + 3.0 * Zr) vo = (9.0 * Yr) / (Xr + 15.0 * Yr + 3.0 * Zr) a = (1.0 / 3.0) * (((52.0 * L) / (u + 13 * L * uo)) -1) b = -5.0 * Y c = -(1.0 / 3.0) d = Y * (((39.0 * L) / (v + 13 * L * vo)) - 5) X = (d - b) / (a - c) Z = X * a + b return tuple([v * scale for v in X, Y, Z]) def RGB2HSV(R, G, B, scale=1.0): RGB_min = min( R, G, B ) RGB_max = max( R, G, B ) delta = RGB_max - RGB_min V = RGB_max if ( delta == 0 ): # Gray H = 0 S = 0 else: S = delta / RGB_max delta_R = (((RGB_max - R) / 6.0) + (delta / 2.0) ) / delta delta_G = (((RGB_max - G) / 6.0) + (delta / 2.0) ) / delta delta_B = (((RGB_max - B) / 6.0) + (delta / 2.0) ) / delta if R == RGB_max: H = delta_B - delta_G elif G == RGB_max: H = (1.0 / 3.0) + delta_R - delta_B elif B == RGB_max: H = (2.0 / 3.0) + delta_G - delta_R if H < 0: H += 1.0 if H > 1: H -= 1.0 return H * scale, S * scale, V * scale def RGB2Lab(R, G, B, rgb_space=None, whitepoint=None, noadapt=False, cat="Bradford"): X, Y, Z = RGB2XYZ(R, G, B, rgb_space, scale=100) if not noadapt: X, Y, Z = adapt(X, Y, Z, rgb_space[1] if rgb_space else "D65", whitepoint, cat) return XYZ2Lab(X, Y, Z, whitepoint=whitepoint) def RGB2XYZ(R, G, B, rgb_space=None, scale=1.0): """ Convert from RGB to XYZ. Use optional RGB colorspace definition, which can be a named colorspace (e.g. "CIE RGB") or must be a tuple in the following format: (gamma, whitepoint, red, green, blue) whitepoint can be a string (e.g. "D50"), a tuple of XYZ coordinates, or a color temperatur in degrees K (float or int). Gamma should be a float. The RGB primaries red, green, blue should be lists or tuples of xyY coordinates (only x and y will be used, so Y can be zero or None). If no colorspace is given, it defaults to sRGB. Based on formula from http://brucelindbloom.com/Eqn_RGB_to_XYZ.html Implementation Notes: 1. The transformation matrix [M] is calculated from the RGB reference primaries as discussed here: http://brucelindbloom.com/Eqn_RGB_XYZ_Matrix.html 2. The gamma values for many common RGB color spaces may be found here: http://brucelindbloom.com/WorkingSpaceInfo.html#Specifications 3. Your input RGB values may need to be scaled before using the above. For example, if your values are in the range [0, 255], you must first divide each by 255.0. 4. The output XYZ values are in the nominal range [0.0, scale]. 5. The XYZ values will be relative to the same reference white as the RGB system. If you want XYZ relative to a different reference white, you must apply a chromatic adaptation transform [http://brucelindbloom.com/Eqn_ChromAdapt.html] to the XYZ color to convert it from the reference white of the RGB system to the desired reference white. 6. Sometimes the more complicated special case of sRGB shown above is replaced by a "simplified" version using a straight gamma function with gamma = 2.2. """ trc, whitepoint, rxyY, gxyY, bxyY, matrix = get_rgb_space(rgb_space) RGB = [R, G, B] is_trc = isinstance(trc, (list, tuple)) for i, v in enumerate(RGB): if is_trc: gamma = trc[i] else: gamma = trc if isinstance(gamma, (list, tuple)): RGB[i] = interp(v, [n / float(len(gamma) - 1) for n in xrange(len(gamma))], gamma) else: RGB[i] = specialpow(v, gamma) XYZ = matrix * RGB return tuple(v * scale for v in XYZ) def RGBsaturation(R, G, B, saturation, rgb_space=None): """ (De)saturate a RGB color in CIE xy and return the RGB and xyY values """ wx, wy, wY = XYZ2xyY(*RGB2XYZ(1, 1, 1, rgb_space=rgb_space)) x, y, Y = XYZ2xyY(*RGB2XYZ(R, G, B, rgb_space=rgb_space)) x, y, Y = wx + (x - wx) * saturation, wy + (y - wy) * saturation, Y return xyY2RGB(x, y, Y, rgb_space=rgb_space), (x, y, Y) def rgb_to_xyz_matrix(rx, ry, gx, gy, bx, by, whitepoint=None, scale=1.0): """ Create and return an RGB to XYZ matrix. """ whitepoint = get_whitepoint(whitepoint, scale) Xr, Yr, Zr = xyY2XYZ(rx, ry, scale) Xg, Yg, Zg = xyY2XYZ(gx, gy, scale) Xb, Yb, Zb = xyY2XYZ(bx, by, scale) Sr, Sg, Sb = Matrix3x3(((Xr, Xg, Xb), (Yr, Yg, Yb), (Zr, Zg, Zb))).inverted() * whitepoint return Matrix3x3(((Sr * Xr, Sg * Xg, Sb * Xb), (Sr * Yr, Sg * Yg, Sb * Yb), (Sr * Zr, Sg * Zg, Sb * Zb))) def get_rgb_space(rgb_space=None, scale=1.0): """ Return gamma, whitepoint, primaries and RGB -> XYZ matrix """ if not rgb_space: rgb_space = "sRGB" if isinstance(rgb_space, basestring): rgb_space = rgb_spaces[rgb_space] cachehash = id(rgb_space), scale cache = get_rgb_space.cache.get(cachehash, None) if cache: return cache gamma = rgb_space[0] or rgb_spaces["sRGB"][0] whitepoint = get_whitepoint(rgb_space[1] or rgb_spaces["sRGB"][1], scale) rx, ry, rY = rgb_space[2] or rgb_spaces["sRGB"][2] gx, gy, gY = rgb_space[3] or rgb_spaces["sRGB"][3] bx, by, bY = rgb_space[4] or rgb_spaces["sRGB"][4] matrix = rgb_to_xyz_matrix(rx, ry, gx, gy, bx, by, whitepoint, scale) rgb_space = gamma, whitepoint, (rx, ry, rY), (gx, gy, gY), (bx, by, bY), matrix get_rgb_space.cache[cachehash] = rgb_space return rgb_space get_rgb_space.cache = {} def get_standard_illuminant(illuminant_name="D50", priority=("ICC", "ASTM E308-01", "Wyszecki & Stiles", None), scale=1.0): """ Return a standard illuminant as XYZ coordinates. """ cachehash = illuminant_name, tuple(priority), scale cache = get_standard_illuminant.cache.get(cachehash, None) if cache: return cache illuminant = None for standard_name in priority: if not standard_name in standard_illuminants: raise ValueError('Unrecognized standard "%s"' % standard_name) illuminant = standard_illuminants.get(standard_name).get(illuminant_name.upper(), None) if illuminant: illuminant = illuminant["X"] * scale, 1.0 * scale, illuminant["Z"] * scale get_standard_illuminant.cache[cachehash] = illuminant return illuminant raise ValueError('Unrecognized illuminant "%s"' % illuminant_name) get_standard_illuminant.cache = {} def get_whitepoint(whitepoint=None, scale=1.0): """ Return a whitepoint as XYZ coordinates """ if isinstance(whitepoint, (list, tuple)): return whitepoint if not whitepoint: whitepoint = "D50" cachehash = whitepoint, scale cache = get_whitepoint.cache.get(cachehash, None) if cache: return cache if isinstance(whitepoint, basestring): whitepoint = get_standard_illuminant(whitepoint) elif isinstance(whitepoint, (float, int)): whitepoint = CIEDCCT2XYZ(whitepoint) if scale > 1.0 and whitepoint[1] == 100: scale = 1.0 if whitepoint[1] * scale > 100: ValueError("Y value out of range after scaling: %s" % (whitepoint[1] * scale)) whitepoint = tuple(v * scale for v in whitepoint) get_whitepoint.cache[cachehash] = whitepoint return whitepoint get_whitepoint.cache = {} def planckianCT2XYZ(T, scale=1.0): """ Convert from planckian temperature to XYZ. T = temperature in Kelvin. """ xyY = planckianCT2xyY(T, scale) if xyY: return xyY2XYZ(*xyY) def planckianCT2xyY(T, scale=1.0): """ Convert from planckian temperature to xyY. T = temperature in Kelvin. Formula from http://en.wikipedia.org/wiki/Planckian_locus """ if 1667 <= T and T <= 4000: x = ( -0.2661239 * (math.pow(10, 9) / math.pow(T, 3)) - 0.2343580 * (math.pow(10, 6) / math.pow(T, 2)) + 0.8776956 * (math.pow(10, 3) / T) + 0.179910) elif 4000 <= T and T <= 25000: x = ( -3.0258469 * (math.pow(10, 9) / math.pow(T, 3)) + 2.1070379 * (math.pow(10, 6) / math.pow(T, 2)) + 0.2226347 * (math.pow(10, 3) / T) + 0.24039) else: return None if 1667 <= T and T <= 2222: y = ( -1.1063814 * math.pow(x, 3) - 1.34811020 * math.pow(x, 2) + 2.18555832 * x - 0.20219683) elif 2222 <= T and T <= 4000: y = ( -0.9549476 * math.pow(x, 3) - 1.37418593 * math.pow(x, 2) + 2.09137015 * x - 0.16748867) elif 4000 <= T and T <= 25000: y = ( 3.0817580 * math.pow(x, 3) - 5.87338670 * math.pow(x, 2) + 3.75112997 * x - 0.37001483) return x, y, scale def xyY2CCT(x, y, Y=1.0): """ Convert from xyY to correlated color temperature. """ return XYZ2CCT(*xyY2XYZ(x, y, Y)) def xyY2Lab(x, y, Y=1.0, whitepoint=None): X, Y, Z = xyY2XYZ(x, y, Y) return XYZ2Lab(X, Y, Z, whitepoint) def xyY2RGB(x, y, Y, rgb_space=None, scale=1.0, round_=False, clamp=True): """ Convert from xyY to RGB """ X, Y, Z = xyY2XYZ(x, y, Y) return XYZ2RGB(X, Y, Z, rgb_space, scale, round_, clamp) def xyY2XYZ(x, y, Y=1.0): """ Convert from xyY to XYZ. Based on formula from http://brucelindbloom.com/Eqn_xyY_to_XYZ.html Implementation Notes: 1. Watch out for the case where y = 0. In that case, X = Y = Z = 0 is returned. 2. The output XYZ values are in the nominal range [0.0, Y[xyY]]. """ if y == 0: return 0, 0, 0 X = (x * Y) / y Z = ((1 - x - y) * Y) / y return X, Y, Z def LERP(a,b,c): """ LERP(a,b,c) = linear interpolation macro. Is 'a' when c == 0.0 and 'b' when c == 1.0 """ return (b - a) * c + a def XYZ2CCT(X, Y, Z): """ Convert from XYZ to correlated color temperature. Derived from ANSI C implementation by Bruce Lindbloom http://brucelindbloom.com/Eqn_XYZ_to_T.html Return: correlated color temperature if successful, else None. Description: This is an implementation of Robertson's method of computing the correlated color temperature of an XYZ color. It can compute correlated color temperatures in the range [1666.7K, infinity]. Reference: "Color Science: Concepts and Methods, Quantitative Data and Formulae", Second Edition, Gunter Wyszecki and W. S. Stiles, John Wiley & Sons, 1982, pp. 227, 228. """ rt = [ # reciprocal temperature (K) DBL_MIN, 10.0e-6, 20.0e-6, 30.0e-6, 40.0e-6, 50.0e-6, 60.0e-6, 70.0e-6, 80.0e-6, 90.0e-6, 100.0e-6, 125.0e-6, 150.0e-6, 175.0e-6, 200.0e-6, 225.0e-6, 250.0e-6, 275.0e-6, 300.0e-6, 325.0e-6, 350.0e-6, 375.0e-6, 400.0e-6, 425.0e-6, 450.0e-6, 475.0e-6, 500.0e-6, 525.0e-6, 550.0e-6, 575.0e-6, 600.0e-6 ] uvt = [ [0.18006, 0.26352, -0.24341], [0.18066, 0.26589, -0.25479], [0.18133, 0.26846, -0.26876], [0.18208, 0.27119, -0.28539], [0.18293, 0.27407, -0.30470], [0.18388, 0.27709, -0.32675], [0.18494, 0.28021, -0.35156], [0.18611, 0.28342, -0.37915], [0.18740, 0.28668, -0.40955], [0.18880, 0.28997, -0.44278], [0.19032, 0.29326, -0.47888], [0.19462, 0.30141, -0.58204], [0.19962, 0.30921, -0.70471], [0.20525, 0.31647, -0.84901], [0.21142, 0.32312, -1.0182], [0.21807, 0.32909, -1.2168], [0.22511, 0.33439, -1.4512], [0.23247, 0.33904, -1.7298], [0.24010, 0.34308, -2.0637], [0.24792, 0.34655, -2.4681], # Note: 0.24792 is a corrected value # for the error found in W&S as 0.24702 [0.25591, 0.34951, -2.9641], [0.26400, 0.35200, -3.5814], [0.27218, 0.35407, -4.3633], [0.28039, 0.35577, -5.3762], [0.28863, 0.35714, -6.7262], [0.29685, 0.35823, -8.5955], [0.30505, 0.35907, -11.324], [0.31320, 0.35968, -15.628], [0.32129, 0.36011, -23.325], [0.32931, 0.36038, -40.770], [0.33724, 0.36051, -116.45] ] if ((X < 1.0e-20 and Y < 1.0e-20 and Z < 1.0e-20) or X + 15.0 * Y + 3.0 * Z == 0): return None # protect against possible divide-by-zero failure us = (4.0 * X) / (X + 15.0 * Y + 3.0 * Z) vs = (6.0 * Y) / (X + 15.0 * Y + 3.0 * Z) dm = 0.0 i = 0 while i < 31: di = (vs - uvt[i][1]) - uvt[i][2] * (us - uvt[i][0]) if i > 0 and ((di < 0.0 and dm >= 0.0) or (di >= 0.0 and dm < 0.0)): break # found lines bounding (us, vs) : i-1 and i dm = di i += 1 if (i == 31): # bad XYZ input, color temp would be less than minimum of 1666.7 # degrees, or too far towards blue return None di = di / math.sqrt(1.0 + uvt[i ][2] * uvt[i ][2]) dm = dm / math.sqrt(1.0 + uvt[i - 1][2] * uvt[i - 1][2]) p = dm / (dm - di) # p = interpolation parameter, 0.0 : i-1, 1.0 : i p = 1.0 / (LERP(rt[i - 1], rt[i], p)) return p def XYZ2Lab(X, Y, Z, whitepoint=None): """ Convert from XYZ to Lab. The input Y value needs to be in the nominal range [0.0, 100.0] and other input values scaled accordingly. The output L value is in the nominal range [0.0, 100.0]. whitepoint can be string (e.g. "D50"), a tuple of XYZ coordinates or color temperature as float or int. Defaults to D50 if not set. Based on formula from http://brucelindbloom.com/Eqn_XYZ_to_Lab.html """ Xr, Yr, Zr = get_whitepoint(whitepoint, 100) xr = X / Xr yr = Y / Yr zr = Z / Zr fx = cbrt(xr) if xr > LSTAR_E else (LSTAR_K * xr + 16) / 116.0 fy = cbrt(yr) if yr > LSTAR_E else (LSTAR_K * yr + 16) / 116.0 fz = cbrt(zr) if zr > LSTAR_E else (LSTAR_K * zr + 16) / 116.0 L = 116 * fy - 16 a = 500 * (fx - fy) b = 200 * (fy - fz) return L, a, b def XYZ2Lu_v_(X, Y, Z, whitepoint=None): """ Convert from XYZ to CIE Lu'v' """ if X + Y + Z == 0: # We can't check for X == Y == Z == 0 because they may actually add up # to 0, thus resulting in ZeroDivisionError later L, u_, v_ = XYZ2Lu_v_(*get_whitepoint(whitepoint)) return 0.0, u_, v_ Xr, Yr, Zr = get_whitepoint(whitepoint, 100) yr = Y / Yr L = 116.0 * cbrt(yr) - 16.0 if yr > LSTAR_E else LSTAR_K * yr u_ = (4.0 * X) / (X + 15.0 * Y + 3.0 * Z) v_ = (9.0 * Y) / (X + 15.0 * Y + 3.0 * Z) return L, u_, v_ def XYZ2Luv(X, Y, Z, whitepoint=None): """ Convert from XYZ to Luv """ if X + Y + Z == 0: # We can't check for X == Y == Z == 0 because they may actually add up # to 0, thus resulting in ZeroDivisionError later L, u, v = XYZ2Luv(*get_whitepoint(whitepoint)) return 0.0, u, v Xr, Yr, Zr = get_whitepoint(whitepoint, 100) yr = Y / Yr L = 116.0 * cbrt(yr) - 16.0 if yr > LSTAR_E else LSTAR_K * yr u_ = (4.0 * X) / (X + 15.0 * Y + 3.0 * Z) v_ = (9.0 * Y) / (X + 15.0 * Y + 3.0 * Z) u_r = (4.0 * Xr) / (Xr + 15.0 * Yr + 3.0 * Zr) v_r = (9.0 * Yr) / (Xr + 15.0 * Yr + 3.0 * Zr) u = 13.0 * L * (u_ - u_r) v = 13.0 * L * (v_ - v_r) return L, u, v def XYZ2RGB(X, Y, Z, rgb_space=None, scale=1.0, round_=False, clamp=True): """ Convert from XYZ to RGB. Use optional RGB colorspace definition, which can be a named colorspace (e.g. "CIE RGB") or must be a tuple in the following format: (gamma, whitepoint, red, green, blue) whitepoint can be a string (e.g. "D50"), a tuple of XYZ coordinates, or a color temperatur in degrees K (float or int). Gamma should be a float. The RGB primaries red, green, blue should be lists or tuples of xyY coordinates (only x and y will be used, so Y can be zero or None). If no colorspace is given, it defaults to sRGB. Based on formula from http://brucelindbloom.com/Eqn_XYZ_to_RGB.html Implementation Notes: 1. The transformation matrix [M] is calculated from the RGB reference primaries as discussed here: http://brucelindbloom.com/Eqn_RGB_XYZ_Matrix.html 2. gamma is the gamma value of the RGB color system used. Many common ones may be found here: http://brucelindbloom.com/WorkingSpaceInfo.html#Specifications 3. The output RGB values are in the nominal range [0.0, scale]. 4. If the input XYZ color is not relative to the same reference white as the RGB system, you must first apply a chromatic adaptation transform [http://brucelindbloom.com/Eqn_ChromAdapt.html] to the XYZ color to convert it from its own reference white to the reference white of the RGB system. 5. Sometimes the more complicated special case of sRGB shown above is replaced by a "simplified" version using a straight gamma function with gamma = 2.2. """ trc, whitepoint, rxyY, gxyY, bxyY, matrix = get_rgb_space(rgb_space) RGB = matrix.inverted() * [X, Y, Z] is_trc = isinstance(trc, (list, tuple)) for i, v in enumerate(RGB): if is_trc: gamma = trc[i] else: gamma = trc if isinstance(gamma, (list, tuple)): RGB[i] = interp(v, gamma, [n / float(len(gamma) - 1) for n in xrange(len(gamma))]) else: RGB[i] = specialpow(v, 1.0 / gamma) if clamp: RGB[i] = min(1.0, max(0.0, RGB[i])) RGB[i] *= scale if round_ is not False: RGB[i] = round(RGB[i], round_) return RGB def XYZ2xyY(X, Y, Z, whitepoint=None): """ Convert from XYZ to xyY. Based on formula from http://brucelindbloom.com/Eqn_XYZ_to_xyY.html Implementation Notes: 1. Watch out for black, where X = Y = Z = 0. In that case, x and y are set to the chromaticity coordinates of the reference whitepoint. 2. The output Y value is in the nominal range [0.0, Y[XYZ]]. """ if X + Y + Z == 0: # We can't check for X == Y == Z == 0 because they may actually add up # to 0, thus resulting in ZeroDivisionError later x, y, Y = XYZ2xyY(*get_whitepoint(whitepoint)) return x, y, 0.0 x = X / (X + Y + Z) y = Y / (X + Y + Z) return x, y, Y def xy_CCT_delta(x, y, daylight=True, method=2000): """ Return CCT and delta to locus """ cct = xyY2CCT(x, y) d = None if cct: locus = None if daylight: # Daylight locus if 4000 <= cct <= 25000: locus = CIEDCCT2XYZ(cct, 100.0) else: # Planckian locus if 1667 <= cct <= 25000: locus = planckianCT2XYZ(cct, 100.0) if locus: L1, a1, b1 = xyY2Lab(x, y, 100.0) L2, a2, b2 = XYZ2Lab(*locus) d = delta(L1, a1, b1, L2, a2, b2, method) return cct, d def dmatrixz(nrl, nrh, ncl, nch): # Adapted from ArgyllCMS numlib/numsup.c #nrl # Row low index #nrh # Row high index #ncl # Col low index #nch # Col high index m = {} if nrh < nrl: # Prevent failure for 0 dimension nrh = nrl if nch < ncl: nch = ncl rows = nrh - nrl + 1 cols = nch - ncl + 1 for i in xrange(rows): m[i + nrl] = {} for j in xrange(cols): m[i][j + ncl] = 0 return m def dvector(nl, nh): # Adapted from ArgyllCMS numlib/numsup.c #nl # Lowest index #nh # Highest index return {} def gam_fit(gf, v): # Adapted from ArgyllCMS xicc/xicc.c """ gamma + input offset function handed to powell() """ gamma = v[0] rv = 0.0 if gamma < 0.0: rv += 100.0 * -gamma gamma = 1e-4 tt = math.pow(gf.roo, 1.0 / gamma) b = tt / (1.0 - tt) # Offset a = math.pow(1.0 - tt, gamma) # Gain tt = a * math.pow(0.5 + b, gamma) tt = tt - gf.thyr rv += tt * tt return rv def linmin(cp, xi, di, ftol, func, fdata): # Adapted from ArgyllCMS numlib/powell.c """ Line bracketing and minimisation routine. Return value at minimum. """ POWELL_GOLD = 1.618034 POWELL_CGOLD = 0.3819660 POWELL_MAXIT = 100 #cp # Start point, and returned value #xi[] # Search vector #di # Dimensionality #ftol # Tolerance to stop on #func # Error function to evaluate #fdata # Opaque data for func() #ax, xx, bx # Search vector multipliers #af, xf, bf # Function values at those points #xt, XT # Trial point XT = {} if di <= 10: xt = XT else: xt = dvector(0, di-1) # Vector for trial point # -------------------------- # First bracket the solution logging.debug("linmin: Bracketing solution") # The line is measured as startpoint + offset * search vector. # (Search isn't symetric, but it seems to depend on cp being # best current solution ?) ax = 0.0 for i in xrange(di): xt[i] = cp[i] + ax * xi[i] af = func(fdata, xt) # xx being vector offset 0.618 xx = 1.0 / POWELL_GOLD for i in xrange(di): xt[i] = cp[i] + xx * xi[i] xf = func(fdata, xt) logging.debug("linmin: Initial points a:%f:%f -> b:%f:%f" % (ax, af, xx, xf)) # Fix it so that we are decreasing from point a -> x if xf > af: tt = ax ax = xx xx = tt tt = af af = xf xf = tt logging.debug("linmin: Ordered Initial points a:%f:%f -> b:%f:%f" % (ax, af, xx, xf)) bx = xx + POWELL_GOLD * (xx-ax) # Guess b beyond a -> x for i in xrange(di): xt[i] = cp[i] + bx * xi[i] bf = func(fdata, xt) logging.debug("linmin: Initial bracket a:%f:%f x:%f:%f b:%f:%f" % (ax, af, xx, xf, bx, bf)) # While not bracketed while xf > bf: logging.debug("linmin: Not bracketed because xf %f > bf %f" % (xf, bf)) logging.debug(" ax = %f, xx = %f, bx = %f" % (ax, xx, bx)) # Compute ux by parabolic interpolation from a, x & b q = (xx - bx) * (xf - af) r = (xx - ax) * (xf - bf) tt = q - r if tt >= 0.0 and tt < 1e-20: # If +ve too small tt = 1e-20 elif tt <= 0.0 and tt > -1e-20: # If -ve too small tt = -1e-20 ux = xx - ((xx - bx) * q - (xx - ax) * r) / (2.0 * tt) ulim = xx + 100.0 * (bx - xx) # Extrapolation limit if (xx - ux) * (ux - bx) > 0.0: # u is between x and b for i in xrange(di): # Evaluate u xt[i] = cp[i] + ux * xi[i] uf = func(fdata, xt) if uf < bf: # Minimum is between x and b ax = xx af = xf xx = ux xf = uf break elif uf > xf: # Minimum is between a and u bx = ux bf = uf break # Parabolic fit didn't work, look further out in direction of b ux = bx + POWELL_GOLD * (bx - xx) elif (bx - ux) * (ux - ulim) > 0.0: # u is between b and limit for i in xrange(di): # Evaluate u xt[i] = cp[i] + ux * xi[i] uf = func(fdata, xt) if uf > bf: # Minimum is between x and u ax = xx af = xf xx = bx xf = bf bx = ux bf = uf break xx = bx xf = bf # Continue looking bx = ux bf = uf ux = bx + POWELL_GOLD * (bx - xx) # Test beyond b elif (ux - ulim) * (ulim - bx) >= 0.0: # u is beyond limit ux = ulim else: # u is to left side of x ? ux = bx + POWELL_GOLD * (bx - xx) # Evaluate u, and move into place at b for i in xrange(di): xt[i] = cp[i] + ux * xi[i] uf = func(fdata, xt) ax = xx af = xf xx = bx xf = bf bx = ux bf = uf logging.debug("linmin: Got bracket a:%f:%f x:%f:%f b:%f:%f" % (ax, af, xx, xf, bx, bf)) # Got bracketed minimum between a -> x -> b # --------------------------------------- # Now use brent minimiser bewteen a and b if True: # a and b bracket solution # x is best function value so far # w is second best function value so far # v is previous second best, or third best # u is most recently tested point #wx, vx, ux # Search vector multipliers #wf vf = 0.0 #uf # Function values at those points de = 0.0 # Distance moved on previous step e = 0.0 # Distance moved on 2nd previous step # Make sure a and b are in ascending order if ax > bx: tt = ax ax = bx bx = tt tt = af af = bf bf = tt wx = vx = xx # Initial values of other center points wf = xf = xf for iter in xrange(1, POWELL_MAXIT + 1): mx = 0.5 * (ax + bx) # m is center of bracket values #if ABSTOL: #tol1 = ftol # Absolute tollerance #else: tol1 = ftol * abs(xx) + 1e-10 tol2 = 2.0 * tol1 logging.debug("linmin: Got bracket a:%f:%f x:%f:%f b:%f:%f" % (ax, af, xx, xf, bx, bf)) # See if we're done if abs(xx - mx) <= (tol2 - 0.5 * (bx - ax)): logging.debug("linmin: We're done because %f <= %f" % (abs(xx - mx), tol2 - 0.5 * (bx - ax))) break if abs(e) > tol1: # Do a trial parabolic fit r = (xx - wx) * (xf-vf) q = (xx - vx) * (xf-wf) p = (xx - vx) * q - (xx-wx) * r q = 2.0 * (q - r) if q > 0.0: p = -p else: q = -q te = e # Save previous e value e = de # Previous steps distance moved logging.debug("linmin: Trial parabolic fit") if (abs(p) >= abs(0.5 * q * te) or p <= q * (ax - xx) or p >= q * (bx - xx)): # Give up on the parabolic fit, and use the golden section search e = ax - xx if xx >= mx else bx - xx # Override previous distance moved */ de = POWELL_CGOLD * e logging.debug("linmin: Moving to golden section search") else: # Use parabolic fit de = p / q # Change in xb ux = xx + de # Trial point according to parabolic fit if (ux - ax) < tol2 or (bx - ux) < tol2: if (mx - xx) > 0.0: # Don't use parabolic, use tol1 de = tol1 # tol1 is +ve else: de = -tol1 logging.debug("linmin: Using parabolic fit") else: # Keep using the golden section search e = ax - xx if xx >= mx else bx - xx # Override previous distance moved de = POWELL_CGOLD * e logging.debug("linmin: Continuing golden section search") if abs(de) >= tol1: # If de moves as much as tol1 would ux = xx + de # use it logging.debug("linmin: ux = %f = xx %f + de %f" % (ux, xx, de)) else: # else move by tol1 in direction de if de > 0.0: ux = xx + tol1 logging.debug("linmin: ux = %f = xx %f + tol1 %f" % (ux, xx, tol1)) else: ux = xx - tol1 logging.debug("linmin: ux = %f = xx %f - tol1 %f" % (ux, xx, tol1)) # Evaluate function for i in xrange(di): xt[i] = cp[i] + ux * xi[i] uf = func(fdata, xt) if uf <= xf: # Found new best solution if ux >= xx: ax = xx af = xf # New lower bracket else: bx = xx bf = xf # New upper bracket vx = wx vf = wf # New previous 2nd best solution wx = xx wf = xf # New 2nd best solution from previous best xx = ux xf = uf # New best solution from latest logging.debug("linmin: found new best solution") else: # Found a worse solution if ux < xx: ax = ux af = uf # New lower bracket else: bx = ux bf = uf # New upper bracket if uf <= wf or wx == xx: # New 2nd best solution, or equal best vx = wx vf = wf # New previous 2nd best solution wx = ux wf = uf # New 2nd best from latest elif uf <= vf or vx == xx or vx == wx: # New 3rd best, or equal 1st & 2nd vx = ux vf = uf # New previous 2nd best from latest logging.debug("linmin: found new worse solution") # !!! should do something if iter > POWELL_MAXIT !!!! # Solution is at xx, xf # Compute solution vector for i in xrange(di): cp[i] += xx * xi[i] return xf def powell(di, cp, s, ftol, maxit, func, fdata, prog=None, pdata=None): # Adapted from ArgyllCMS powell.c """ Standard interface for powell function return True on sucess, False on failure due to excessive iterions Result will be in cp """ DBL_EPSILON = 2.2204460492503131e-016 #di # Dimentionality #cp # Initial starting point #s # Size of initial search area #ftol # Tolerance of error change to stop on #maxit # Maximum iterations allowed #func # Error function to evaluate #fdata # Opaque data needed by function #prog # Optional progress percentage callback #pdata # Opaque data needed by prog() #dmtx # Direction vector #sp # Sarting point before exploring all the directions #xpt # Extrapolated point #svec # Search vector #retv # Returned function value at p #stopth # Current stop threshold */ startdel = -1.0 # Initial change in function value #curdel # Current change in function value pc = 0 # Percentage complete dmtx = dmatrixz(0, di - 1, 0, di - 1) # Zero filled spt = dvector(0, di - 1) xpt = dvector(0, di - 1) svec = dvector(0, di - 1) # Create initial direction matrix by # placing search start on diagonal for i in xrange(di): dmtx[i][i] = s[i] # Save the starting point spt[i] = cp[i] if prog: # Report initial progress prog(pdata, pc) # Initial function evaluation retv = func(fdata, cp) # Iterate untill we converge on a solution, or give up. for iter in xrange(1, maxit): #lretv # Last function return value ibig = 0 # Index of biggest delta del_ = 0.0 # Biggest function value decrease #pretv # Previous function return value pretv = retv # Save return value at top of iteration # Loop over all directions in the set for i in xrange(di): logging.debug("Looping over direction %d" % i) for j in xrange(di): # Extract this direction to make search vector svec[j] = dmtx[j][i] # Minimize in that direction lretv = retv retv = linmin(cp, svec, di, ftol, func, fdata) # Record bigest function decrease, and dimension it occured on if abs(lretv - retv) > del_: del_ = abs(lretv - retv) ibig = i #if ABSTOL: #stopth = ftol # Absolute tollerance #else stopth = ftol * 0.5 * (abs(pretv) + abs(retv) + DBL_EPSILON) curdel = abs(pretv - retv) if startdel < 0.0: startdel = curdel elif curdel > 0 and startdel > 0: tt = (100.0 * math.pow((math.log(curdel) - math.log(startdel)) / (math.log(stopth) - math.log(startdel)), 4.0) + 0.5) if tt > pc and tt < 100: pc = tt if prog: # Report initial progress prog(pdata, pc) # If we have had at least one change of direction and # reached a suitable tollerance, then finish if iter > 1 and curdel <= stopth: logging.debug("Reached stop tollerance because curdel %f <= stopth " "%f" % (curdel, stopth)) break logging.debug("Not stopping because curdel %f > stopth %f" % (curdel, stopth)) for i in xrange(di): svec[i] = cp[i] - spt[i] # Average direction moved after minimization round xpt[i] = cp[i] + svec[i] # Extrapolated point after round of minimization spt[i] = cp[i] # New start point for next round # Function value at extrapolated point lretv = func(fdata, xpt) if lretv < pretv: # If extrapolation is an improvement t1 = pretv - retv - del_ t2 = pretv - lretv t = 2.0 * (pretv -2.0 * retv + lretv) * t1 * t1 - del_ * t2 * t2 if t < 0.0: # Move to the minimum of the new direction retv = linmin(cp, svec, di, ftol, func, fdata) for i in xrange(di): # Save the new direction dmtx[i][ibig] = svec[i] # by replacing best previous if prog: # Report final progress prog(pdata, 100) if iter < maxit: return True logging.debug("powell: returning False due to excessive iterations") return False # Failed due to execessive iterations def xicc_tech_gamma(egamma, off): # Adapted from ArgyllCMS xicc.c """ Given the effective gamma and the output offset Y, return the technical gamma needed for the correct 50% response. """ gf = gam_fits() op = {} sa = {} if off <= 0.0: return egamma gf.thyr = math.pow(0.5, egamma) # Advetised 50% target gf.roo = off op[0] = egamma sa[0] = 0.1 if not powell(1, op, sa, 1e-6, 500, gam_fit, gf): logging.warn("Computing effective gamma and input offset is inaccurate") return op[0] class gam_fits(object): # Adapted from ArgyllCMS xicc/xicc.c def __init__(self, thyr=.2, roo=0): self.thyr = thyr # 50% input target self.roo = roo # 0% input target class BT1886(object): # Adapted from ArgyllCMS xicc/xicc.c """ BT.1886 like transfer function """ def __init__(self, matrix, XYZbp, gamma): """ Setup the bt1886_info for the given target """ self.bwd_matrix = matrix.inverted() self.fwd_matrix = matrix self.gamma = gamma Lab = XYZ2Lab(*XYZbp) self.outL = Lab[0] # For bp blend self.tab = Lab[1:] # a* b* correction needed bkipow = math.pow(XYZbp[1], 1.0 / self.gamma) self.ingo = bkipow / (1.0 - bkipow) # non-linear Y that makes out black point self.outsc = pow(1.0 - bkipow, self.gamma) # Scale to restore 1 -> 1 def apply(self, X, Y, Z): """ Apply BT.1886 black offset and gamma curve to the XYZ out of the input profile. Do this in the colorspace defined by the input profile matrix lookup, so it will be relative XYZ. We assume that BT.1886 does a Rec709 to gamma viewing adjustment, irrespective of the source profile transfer curve. """ logging.debug("bt1886 XYZ in %f %f %f" % (X, Y, Z)) out = self.bwd_matrix * (X, Y, Z) logging.debug("bt1886 RGB in %f %f %f" % (out[0], out[1], out[2])) for j in xrange(3): vv = out[j] # Convert linear light to Rec709 transfer curve if vv < 0.018: vv = 4.5 * vv else: vv = 1.099 * math.pow(vv, 0.45) - 0.099 # Apply input offset & re-scale, and then gamma of 2.4/custom gamma vv = vv + self.ingo if vv > 0.0: vv = self.outsc * math.pow(vv, self.gamma) out[j] = vv out = self.fwd_matrix * out logging.debug("bt1886 RGB bt.1886 %f %f %f" % (out[0], out[1], out[2])) out = list(XYZ2Lab(*[v * 100 for v in out])) logging.debug("bt1886 Lab after Y adj. %f %f %f" % (out[0], out[1], out[2])) # Blend ab to required black point offset self.tab[] as L approaches black. vv = (out[0] - self.outL) / (100.0 - self.outL) # 0 at bp, 1 at wp vv = 1.0 - vv if vv < 0.0: vv = 0.0 elif vv > 1.0: vv = 1.0 vv = math.pow(vv, 40.0) out[1] += vv * self.tab[0] out[2] += vv * self.tab[1] logging.debug("bt1886 Lab after wp adj. %f %f %f" % (out[0], out[1], out[2])) out = Lab2XYZ(*out) logging.debug("bt1886 XYZ out %f %f %f" % (out[0], out[1], out[2])) return out class Matrix3x3(list): """ Simple 3x3 matrix """ def __init__(self, matrix=None): if matrix: self.update(matrix) def update(self, matrix): if len(matrix) != 3: raise ValueError('Invalid number of rows for 3x3 matrix: %i' % len(matrix)) while len(self): self.pop() for row in matrix: if len(row) != 3: raise ValueError('Invalid number of columns for 3x3 matrix: %i' % len(row)) self.append([]) for column in row: self[-1].append(column) def __add__(self, matrix): instance = self.__class__() instance.update([[self[0][0] + matrix[0][0], self[0][1] + matrix[0][1], self[0][2] + matrix[0][2]], [self[1][0] + matrix[1][0], self[1][1] + matrix[1][1], self[1][2] + matrix[1][2]], [self[2][0] + matrix[2][0], self[2][1] + matrix[2][1], self[2][2] + matrix[2][2]]]) return instance def __iadd__(self, matrix): # inplace self.update(self.__add__(matrix)) return self def __imul__(self, matrix): # inplace self.update(self.__mul__(matrix)) return self def __mul__(self, matrix): if not isinstance(matrix[0], (list, tuple)): return [matrix[0] * self[0][0] + matrix[1] * self[0][1] + matrix[2] * self[0][2], matrix[0] * self[1][0] + matrix[1] * self[1][1] + matrix[2] * self[1][2], matrix[0] * self[2][0] + matrix[1] * self[2][1] + matrix[2] * self[2][2]] instance = self.__class__() instance.update([[self[0][0]*matrix[0][0] + self[0][1]*matrix[1][0] + self[0][2]*matrix[2][0], self[0][0]*matrix[0][1] + self[0][1]*matrix[1][1] + self[0][2]*matrix[2][1], self[0][0]*matrix[0][2] + self[0][1]*matrix[1][2] + self[0][2]*matrix[2][2]], [self[1][0]*matrix[0][0] + self[1][1]*matrix[1][0] + self[1][2]*matrix[2][0], self[1][0]*matrix[0][1] + self[1][1]*matrix[1][1] + self[1][2]*matrix[2][1], self[1][0]*matrix[0][2] + self[1][1]*matrix[1][2] + self[1][2]*matrix[2][2]], [self[2][0]*matrix[0][0] + self[2][1]*matrix[1][0] + self[2][2]*matrix[2][0], self[2][0]*matrix[0][1] + self[2][1]*matrix[1][1] + self[2][2]*matrix[2][1], self[2][0]*matrix[0][2] + self[2][1]*matrix[1][2] + self[2][2]*matrix[2][2]]]) return instance def adjoint(self): return self.cofactors().transposed() def cofactors(self): instance = self.__class__() instance.update([[(self[1][1]*self[2][2] - self[1][2]*self[2][1]), -1 * (self[1][0]*self[2][2] - self[1][2]*self[2][0]), (self[1][0]*self[2][1] - self[1][1]*self[2][0])], [-1 * (self[0][1]*self[2][2] - self[0][2]*self[2][1]), (self[0][0]*self[2][2] - self[0][2]*self[2][0]), -1 * (self[0][0]*self[2][1] -self[0][1]*self[2][0])], [(self[0][1]*self[1][2] - self[0][2]*self[1][1]), -1 * (self[0][0]*self[1][2] - self[1][0]*self[0][2]), (self[0][0]*self[1][1] - self[0][1]*self[1][0])]]) return instance def determinant(self): return ((self[0][0]*self[1][1]*self[2][2] + self[1][0]*self[2][1]*self[0][2] + self[0][1]*self[1][2]*self[2][0]) - (self[2][0]*self[1][1]*self[0][2] + self[1][0]*self[0][1]*self[2][2] + self[2][1]*self[1][2]*self[0][0])) def invert(self): # inplace self.update(self.inverted()) def inverted(self): determinant = self.determinant() matrix = self.adjoint() instance = self.__class__() instance.update([[matrix[0][0] / determinant, matrix[0][1] / determinant, matrix[0][2] / determinant], [matrix[1][0] / determinant, matrix[1][1] / determinant, matrix[1][2] / determinant], [matrix[2][0] / determinant, matrix[2][1] / determinant, matrix[2][2] / determinant]]) return instance def rounded(self, digits=3): matrix = self.__class__() for row in self: matrix.append([]) for column in row: matrix[-1].append(round(column, digits)) return matrix def transpose(self): self.update(self.transposed()) def transposed(self): instance = self.__class__() instance.update([[self[0][0], self[1][0], self[2][0]], [self[0][1], self[1][1], self[2][1]], [self[0][2], self[1][2], self[2][2]]]) return instance class NumberTuple(tuple): def __repr__(self): return "(%s)" % ", ".join(str(value) for value in self) def round(self, digits=4): return self.__class__(round(value, digits) for value in self) # Chromatic adaption transform matrices # Bradford, von Kries (= HPE normalized to D65) from http://brucelindbloom.com/Eqn_ChromAdapt.html # CAT02 from http://en.wikipedia.org/wiki/CIECAM02#CAT02 # HPE normalized to illuminant E, CAT97s from http://en.wikipedia.org/wiki/LMS_color_space#CAT97s # CMCCAT97 from 'Performance Of Five Chromatic Adaptation Transforms Using # Large Number Of Color Patches', http://hrcak.srce.hr/file/95370 # CMCCAT2000, Sharp from 'Computational colour science using MATLAB' # ISBN 0470845627, http://books.google.com/books?isbn=0470845627 # Cross-verification of the matrix numbers has been done using various sources, # most notably 'Chromatic Adaptation Performance of Different RGB Sensors' # http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.14.918&rep=rep1&type=pdf cat_matrices = {"Bradford": Matrix3x3([[ 0.89510, 0.26640, -0.16140], [-0.75020, 1.71350, 0.03670], [ 0.03890, -0.06850, 1.02960]]), "CAT02": Matrix3x3([[ 0.7328, 0.4296, -0.1624], [-0.7036, 1.6975, 0.0061], [ 0.0030, 0.0136, 0.9834]]), "CAT97s": Matrix3x3([[ 0.8562, 0.3372, -0.1934], [-0.8360, 1.8327, 0.0033], [ 0.0357, -0.0469, 1.0112]]), "CMCCAT97": Matrix3x3([[ 0.8951, -0.7502, 0.0389], [ 0.2664, 1.7135, 0.0685], [-0.1614, 0.0367, 1.0296]]), "CMCCAT2000": Matrix3x3([[ 0.7982, 0.3389, -0.1371], [-0.5918, 1.5512, 0.0406], [ 0.0008, 0.0239, 0.9753]]), # Hunt-Pointer-Estevez, equal-energy illuminant "HPE normalized to illuminant E": Matrix3x3([[ 0.38971, 0.68898, -0.07868], [-0.22981, 1.18340, 0.04641], [ 0.00000, 0.00000, 1.00000]]), # Süsstrunk et al.15 optimized spectrally sharpened matrix "Sharp": Matrix3x3([[ 1.2694, -0.0988, -0.1706], [-0.8364, 1.8006, 0.0357], [ 0.0297, -0.0315, 1.0018]]), # 'Von Kries' as found on Bruce Lindbloom's site: # Hunt-Pointer-Estevez normalized to D65 # (maybe I should call it that instead of 'Von Kries' # to avoid ambiguity?) "HPE normalized to illuminant D65": Matrix3x3([[ 0.40024, 0.70760, -0.08081], [-0.22630, 1.16532, 0.04570], [ 0.00000, 0.00000, 0.91822]]), "XYZ scaling": Matrix3x3([[1, 0, 0], [0, 1, 0], [0, 0, 1]])} def test(): for i in range(4): if i == 0: wp = "native" elif i == 1: wp = "D50" XYZ = get_standard_illuminant(wp) elif i == 2: wp = "D65" XYZ = get_standard_illuminant(wp) elif i == 3: XYZ = get_standard_illuminant("D65", ("ASTM E308-01", )) wp = " ".join([str(v) for v in XYZ]) print ("RGB and corresponding XYZ (nominal range 0.0 - 1.0) with " "whitepoint %s" % wp) for name in rgb_spaces: spc = rgb_spaces[name] if i == 0: XYZ = CIEDCCT2XYZ(spc[1]) spc = spc[0], XYZ, spc[2], spc[3], spc[4] print "%s 1.0, 1.0, 1.0 = XYZ" % name, \ [str(round(v, 4)) for v in RGB2XYZ(1.0, 1.0, 1.0, spc)] print "%s 1.0, 0.0, 0.0 = XYZ" % name, \ [str(round(v, 4)) for v in RGB2XYZ(1.0, 0.0, 0.0, spc)] print "%s 0.0, 1.0, 0.0 = XYZ" % name, \ [str(round(v, 4)) for v in RGB2XYZ(0.0, 1.0, 0.0, spc)] print "%s 0.0, 0.0, 1.0 = XYZ" % name, \ [str(round(v, 4)) for v in RGB2XYZ(0.0, 0.0, 1.0, spc)] print "" if __name__ == '__main__': test()dispcalGUI-1.7.1.6/dispcalGUI/config.py000644 000765 000000 00000110070 12265441405 017423 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- """ Runtime configuration and user settings parser """ import ConfigParser ConfigParser.DEFAULTSECT = "Default" from decimal import Decimal import locale import math import os import re import sys from time import gmtime, strftime, timezone if sys.platform == "win32": import _winreg from argyll_names import viewconds, intents, video_encodings from defaultpaths import appdata, commonappdata if sys.platform == "win32": from defaultpaths import commonprogramfiles elif sys.platform == "darwin": from defaultpaths import library, library_home, prefs, prefs_home else: from defaultpaths import (xdg_config_dir_default, xdg_config_home, xdg_data_home, xdg_data_home_default, xdg_data_dirs) from defaultpaths import autostart, autostart_home from meta import name as appname, build, lastmod, version from options import ascii, debug, verbose from safe_print import enc, fs_enc, original_codepage from util_io import StringIOu as StringIO from util_os import expanduseru, expandvarsu, getenvu, is_superuser, listdir_re from util_str import create_replace_function, safe_unicode import encodedstdio # Runtime configuration if ascii: enc = "ASCII" exe = unicode(sys.executable, fs_enc) exedir = os.path.dirname(exe) isexe = sys.platform != "darwin" and getattr(sys, "frozen", False) if isexe and os.getenv("_MEIPASS2"): os.environ["_MEIPASS2"] = os.getenv("_MEIPASS2").replace("/", os.path.sep) pyfile = exe if isexe else os.path.join(os.path.dirname(__file__), appname + ".py") pypath = exe if isexe else os.path.abspath(unicode(pyfile, fs_enc)) pyname, pyext = os.path.splitext(os.path.basename(pypath)) isapp = sys.platform == "darwin" and \ exe.split(os.path.sep)[-3:-1] == ["Contents", "MacOS"] and \ os.path.isfile(os.path.join(exedir, pyname)) if isapp: pydir = os.path.normpath(os.path.join(exedir, "..", "Resources")) else: pydir = os.path.dirname(pypath) data_dirs = [pydir] if sys.platform == "win32": if pydir.lower().startswith(exedir.lower()) and pydir != exedir: # We are installed in a subfolder of the executable directory (e.g. # C:\Python26\Lib\site-packages\dispcalGUI) - we nee to add # the executable directory to the data directories so files in # subfolders of the executable directory which are not in # Lib\site-packages\dispcalGUI can be found # (e.g. Scripts\dispcalGUI-apply-profiles) data_dirs += [exedir] btn_width_correction = 20 script_ext = ".cmd" scale_adjustment_factor = 1.0 config_sys = os.path.join(commonappdata[0], appname) confighome = os.path.join(appdata, appname) datahome = os.path.join(appdata, appname) logdir = os.path.join(datahome, "logs") data_dirs += [datahome] data_dirs += [os.path.join(dir_, appname) for dir_ in commonappdata] del dir_ data_dirs += [os.path.join(commonprogramfiles, appname)] exe_ext = ".exe" profile_ext = ".icm" else: btn_width_correction = 10 if sys.platform == "darwin": script_ext = ".command" mac_create_app = True scale_adjustment_factor = 1.0 config_sys = os.path.join(prefs, appname) confighome = os.path.join(prefs_home, appname) datahome = os.path.join(appdata, appname) logdir = os.path.join(expanduseru("~"), "Library", "Logs", appname) data_dirs += [datahome, os.path.join(commonappdata[0], appname)] else: script_ext = ".sh" scale_adjustment_factor = 1.0 config_sys = os.path.join(xdg_config_dir_default, appname) confighome = os.path.join(xdg_config_home, appname) datahome = os.path.join(xdg_data_home, appname) datahome_default = os.path.join(xdg_data_home_default, appname) logdir = os.path.join(datahome, "logs") data_dirs += [datahome] if not datahome_default in data_dirs: data_dirs += [datahome_default] data_dirs += [os.path.join(dir_, appname) for dir_ in xdg_data_dirs] data_dirs += [os.path.join(dir_, "color", "argyll") for dir_ in xdg_data_dirs] del dir_ exe_ext = "" profile_ext = ".icc" storage = os.path.join(datahome, "storage") resfiles = [ # Only essentials "argyll_instruments.json", "lang/en.json", "beep.wav", "camera_shutter.wav", "linear.cal", "test.cal", "ref/ClayRGB1998.gam", "ref/sRGB.gam", "ref/verify.ti1", "xrc/3dlut.xrc", "xrc/extra.xrc", "xrc/gamap.xrc", "xrc/main.xrc", "xrc/mainmenu.xrc" ] bitmaps = {} def getbitmap(name): """ Create (if necessary) and return a named bitmap. name has to be a relative path to a png file, omitting the extension, e.g. 'theme/mybitmap' or 'theme/icons/16x16/myicon', which is searched for in the data directories. If a matching file is not found, a placeholder bitmap is returned. The special name 'empty' will always return a transparent bitmap of the given size, e.g. '16x16/empty' or just 'empty' (size defaults to 16x16 if not given). """ from wxaddons import wx if not name in bitmaps: parts = name.split("/") if parts[-1] == "empty": w = 16 h = 16 if len(parts) > 1: size = parts[-2].split("x") if len(size) == 2: try: w, h = map(int, size) except ValueError: pass bitmaps[name] = wx.EmptyBitmap(w, h, depth=-1) dc = wx.MemoryDC() dc.SelectObject(bitmaps[name]) dc.SetBackground(wx.Brush("black")) dc.Clear() dc.SelectObject(wx.NullBitmap) bitmaps[name].SetMaskColour("black") else: path = None if parts[-1] == appname: path = get_data_path(os.path.join(parts[-2], "apps", parts[-1]) + ".png") if not path: path = get_data_path(os.path.sep.join(parts) + ".png") if path: bitmaps[name] = wx.Bitmap(path) else: w = 32 h = 32 if len(parts) > 1: size = parts[-2].split("x") if len(size) == 2: try: w, h = map(int, size) except ValueError: pass bitmaps[name] = wx.ArtProvider.GetBitmap(wx.ART_MISSING_IMAGE, size=(w, h)) return bitmaps[name] def get_bitmap_as_icon(size, name): """ Like geticon, but return a wx.Icon instance """ from wxaddons import wx icon = wx.EmptyIcon() if sys.platform == "darwin" and wx.VERSION >= (2, 9) and size > 128: # FIXME: wxMac 2.9 doesn't support icon sizes above 128 size = 128 bmp = geticon(size, name) icon.CopyFromBitmap(bmp) return icon def get_argyll_data_dir(): if getcfg("argyll.version") < "1.5.0": argyll_data_dirname = "color" else: argyll_data_dirname = "ArgyllCMS" if sys.platform == "darwin" and getcfg("argyll.version") < "1.5.0": return os.path.join(library if is_superuser() else library_home, argyll_data_dirname) else: return os.path.join(commonappdata[0] if is_superuser() else appdata, argyll_data_dirname) def get_display_name(n=None, include_geometry=False): """ Return name of currently configured display """ if n is None: n = getcfg("display.number") - 1 displays = getcfg("displays").split(os.pathsep) if n >= 0 and n < len(displays): if include_geometry: return displays[n] else: return displays[n].split("@")[0].strip() return "" def get_display_number(display_no): """ Translate from Argyll display index to wx display index """ from wxaddons import wx try: display = getcfg("displays").split(os.pathsep)[display_no] except IndexError: pass else: if display in ("Web @ localhost", "Untethered", "madVR"): return 0 for i in xrange(wx.Display.GetCount()): geometry = "%i, %i, %ix%i" % tuple(wx.Display(i).Geometry) if display.find("@ " + geometry) > -1: if debug: from log import safe_print safe_print("[D] Found display %s at index %i" % (geometry, i)) display_no = i break return display_no def get_display_rects(): """ Return the Argyll enumerated display coordinates and sizes """ from wxaddons import wx display_rects = [] for i, display in enumerate(getcfg("displays").split(os.pathsep)): match = re.search("@ (-?\d+), (-?\d+), (\d+)x(\d+)", display) if match: display_rects.append(wx.Rect(*[int(item) for item in match.groups()])) return display_rects def get_icon_bundle(sizes, name): """ Return a wx.IconBundle with given icon sizes """ from wxaddons import wx iconbundle = wx.IconBundle() for size in sizes: iconbundle.AddIcon(get_bitmap_as_icon(size, name)) return iconbundle def get_instrument_name(): """ Return name of currently configured instrument """ n = getcfg("comport.number") - 1 instrument_names = getcfg("instruments").split(os.pathsep) if n >= 0 and n < len(instrument_names): return instrument_names[n] return "" def geticon(size, name): """ Convenience function for getbitmap('theme/icons//'). """ return getbitmap("theme/icons/%(size)sx%(size)s/%(name)s" % {"size": size, "name": name}) def get_data_path(relpath, rex=None): """ Search data_dirs for relpath and return the path or a file list. If relpath is a file, return the full path, if relpath is a directory, return a list of files in the intersection of searched directories. """ if (not relpath or relpath.endswith(os.path.sep) or (isinstance(os.path.altsep, basestring) and relpath.endswith(os.path.altsep))): return None intersection = [] paths = [] for dir_ in data_dirs: curpath = os.path.join(dir_, relpath) if os.path.exists(curpath): if os.path.isdir(curpath): try: filelist = listdir_re(curpath, rex) except Exception, exception: from log import safe_print safe_print(u"Error - directory '%s' listing failed: %s" % tuple(safe_unicode(s) for s in (curpath, exception))) else: for filename in filelist: if not filename in intersection: intersection += [filename] paths += [os.path.join(curpath, filename)] else: return curpath if paths: paths = [os.pathsep.join(reversed(os.path.split(path))) for path in paths] paths.sort() paths = [os.path.join(*reversed(path.split(os.pathsep))) for path in paths] return None if len(paths) == 0 else paths def runtimeconfig(pyfile): """ Configure remaining runtime options and return runtype. You need to pass in a path to the calling script (e.g. use the __file__ attribute). """ from log import setup_logging setup_logging() if debug or verbose >= 1: from log import safe_print if debug: safe_print("[D] pydir:", pydir) if isapp: runtype = ".app" elif isexe: if debug: safe_print("[D] _MEIPASS2 or pydir:", getenvu("_MEIPASS2", exedir)) if getenvu("_MEIPASS2", exedir) not in data_dirs: data_dirs.insert(1, getenvu("_MEIPASS2", exedir)) runtype = exe_ext else: pydir_parent = os.path.dirname(pydir) if debug: safe_print("[D] dirname(os.path.abspath(sys.argv[0])):", os.path.dirname(os.path.abspath(sys.argv[0]))) safe_print("[D] pydir parent:", pydir_parent) if os.path.dirname(os.path.abspath(sys.argv[0])) == pydir_parent and \ pydir_parent not in data_dirs: # Add the parent directory of the package directory to our list # of data directories if it is the directory containing the # currently run script (e.g. when running from source) data_dirs.insert(1, pydir_parent) runtype = pyext for dir_ in sys.path: if not isinstance(dir_, unicode): dir_ = unicode(dir_, fs_enc) dir_ = os.path.abspath(os.path.join(dir_, appname)) if dir_ not in data_dirs and os.path.isdir(dir_): data_dirs.append(dir_) if debug: safe_print("[D] from sys.path:", dir_) if sys.platform not in ("darwin", "win32"): data_dirs.extend([os.path.join(dir_, "doc", appname + "-" + version) for dir_ in xdg_data_dirs + [xdg_data_home]]) data_dirs.extend([os.path.join(dir_, "doc", "packages", appname) for dir_ in xdg_data_dirs + [xdg_data_home]]) data_dirs.extend([os.path.join(dir_, "doc", appname) for dir_ in xdg_data_dirs + [xdg_data_home]]) data_dirs.extend([os.path.join(dir_, "doc", appname.lower()) # Debian for dir_ in xdg_data_dirs + [xdg_data_home]]) data_dirs.extend([os.path.join(dir_, "icons", "hicolor") for dir_ in xdg_data_dirs + [xdg_data_home]]) if debug: safe_print("[D] Data files search paths:\n[D]", "\n[D] ".join(data_dirs)) defaultmmode = defaults["measurement_mode"] defaultptype = defaults["profile.type"] defaultchart = testchart_defaults.get(defaultptype, testchart_defaults["s"])[None] defaults["testchart.file"] = get_data_path(os.path.join("ti1", defaultchart)) or "" defaults["testchart.file.backup"] = defaults["testchart.file"] defaults["measurement_report.chart"] = get_data_path(os.path.join("ref", "verify.ti1")) or "" return runtype # User settings cfg = ConfigParser.RawConfigParser() cfg.optionxform = str valid_ranges = { "3dlut.bt1886_gamma": [0.000001, 10], "gamma": [0.000001, 10], "trc": [0.000001, 10], "calibration.ambient_viewcond_adjust.lux": [0, sys.maxint], "calibration.black_luminance": [0.000001, 100000], "calibration.black_output_offset": [0, 1], "calibration.black_point_correction": [0, 1], "calibration.black_point_rate": [0.05, 20], "calibration.luminance": [0.000001, 100000], "measurement_report.bt1886_gamma": [0.01, 10], "tc_export_repeat_patch_max": [1, 1000], "tc_export_repeat_patch_min": [1, 1000], "tc_vrml_black_offset": [0, 40], "webserver.portnumber": [1, 65535], "whitepoint.colortemp": [1000, 15000], } valid_values = { "3dlut.bitdepth.input": [8, 10, 12, 14, 16], "3dlut.bitdepth.output": [8, 10, 12, 14, 16], "3dlut.bt1886_gamma_type": ["b", "B"], "3dlut.encoding.input": video_encodings, "3dlut.encoding.output": video_encodings, "3dlut.format": ["3dl", "cube", "eeColor", "madVR", "mga", "spi3d"], "3dlut.rendering_intent": intents, "3dlut.size": [17, 24, 32, 33, 64, 65], "calibration.quality": ["v", "l", "m", "h", "u"], # Measurement modes as supported by Argyll -y parameter # 'l' = 'n' (non-refresh-type display, e.g. LCD) # 'c' = 'r' (refresh-type display, e.g. CRT) # We map 'l' and 'c' to "n" and "r" in # worker.Worker.add_measurement_features if using Argyll >= 1.5 # See http://www.argyllcms.com/doc/instruments.html # for description of per-instrument supported modes "measurement_mode": [None, "B", "F", "L", "R", "a", "b", "c", "e", "f", "g", "l", "m", "n", "o", "p", "r", "x", "1", "2", "3", "4", "5", "6", "7", "8", "9"], "gamap_default_intent": ["a", "r", "p", "s"], "gamap_perceptual_intent": intents, "gamap_saturation_intent": intents, "gamap_src_viewcond": viewconds, "gamap_out_viewcond": ["mt", "mb", "md", "jm", "jd"], "measure.uniformity.show_detail": [0, 1], "measurement_report.bt1886_gamma_type": ["b", "B"], "profile.black_point_compensation": [0, 1], "profile.install_scope": ["l", "u"], "profile.quality": ["l", "m", "h", "u"], "profile.quality.b2a": ["l", "m", "h", "u", "n", None], "profile.type": ["g", "G", "l", "s", "S", "x", "X"], "tc_algo": ["", "t", "r", "R", "q", "Q", "i", "I"], # Q = Argyll >= 1.1.0 "tc_vrml_use_D50": [0, 1], "trc": ["240", "709", "l", "s"], "trc.type": ["g", "G"], "whitepoint.colortemp.locus": ["t", "T"] } defaults = { "3dlut.apply_bt1886_gamma_mapping": 0, "3dlut.bitdepth.input": 10, "3dlut.bitdepth.output": 10, "3dlut.bt1886_gamma": 2.2, "3dlut.bt1886_gamma_type": "b", "3dlut.encoding.input": "n", "3dlut.encoding.input.backup": "n", "3dlut.encoding.output": "n", "3dlut.encoding.output.backup": "n", "3dlut.format": "3dl", "3dlut.input.profile": "", "3dlut.abstract.profile": "", "3dlut.madVR.enable": 1, "3dlut.output.profile": "", "3dlut.output.profile.apply_cal": 1, "3dlut.rendering_intent": "r", "3dlut.use_abstract_profile": 0, "3dlut.size": 17, "allow_skip_sensor_cal": 0, "argyll.debug": 0, "argyll.dir": expanduseru("~"), # directory "argyll.version": "0.0.0", "drift_compensation.blacklevel": 0, "drift_compensation.whitelevel": 0, "calibration.ambient_viewcond_adjust": 0, "calibration.ambient_viewcond_adjust.lux": 500.0, "calibration.black_luminance": 0.000001, "calibration.black_output_offset": 1.0, "calibration.black_output_offset.backup": 1.0, "calibration.black_point_correction": 0.0, "calibration.black_point_correction.auto": 0, "calibration.black_point_correction_choice.show": 1, "calibration.black_point_rate": 4.0, "calibration.black_point_rate.enabled": 0, "calibration.file": None, "calibration.file.previous": None, "calibration.interactive_display_adjustment": 1, "calibration.luminance": 120.0, "calibration.quality": "m", "calibration.update": 0, "calibration.use_video_lut": 1, "calibration.use_video_lut.backup": 1, "colorimeter_correction.testchart": "ccxx.ti1", "colorimeter_correction_matrix_file": "AUTO:", "comport.number": 1, # Note: worker.Worker.enumerate_displays_and_ports() overwrites copyright "copyright": "No copyright. Created with %s %s and Argyll CMS" % (appname, version), "dimensions.measureframe": "0.5,0.5,1.5", "dimensions.measureframe.unzoomed": "0.5,0.5,1.5", "display.number": 1, "display_lut.link": 1, "display_lut.number": 1, "displays": "", "dry_run": 0, "enumerate_ports.auto": 0, "extra_args.collink": "", "extra_args.colprof": "", "extra_args.dispcal": "", "extra_args.dispread": "", "extra_args.spotread": "", "extra_args.targen": "", "gamap_profile": "", "gamap_perceptual": 0, "gamap_perceptual_intent": "la", "gamap_saturation": 0, "gamap_saturation_intent": "s", "gamap_default_intent": "p", "gamma": 2.2, "instruments": "", "log.autoshow": int(not(hasattr(sys.stdout, "isatty") and sys.stdout.isatty())), "log.show": 0, "lang": "en", # The last_[...]_path defaults are set in localization.py "lut_viewer.show": 0, "lut_viewer.show_actual_lut": 0, "measurement_mode": "l", "measurement_mode_unlocked": 1, "measurement_mode.adaptive": 1, "measurement_mode.backup": "l", "measurement_mode.highres": 0, "measurement_mode.projector": 0, "measurement_report.apply_bt1886_gamma_mapping": 0, "measurement_report.bt1886_gamma": 2.2, "measurement_report.bt1886_gamma_type": "b", "measurement_report.chart": "", "measurement_report.chart.fields": "RGB", "measurement_report.devlink_profile": "", "measurement_report.output_profile": "", "measurement_report.whitepoint.simulate": 0, "measurement_report.whitepoint.simulate.relative": 0, "measurement_report.simulation_profile": "", "measurement_report.use_devlink_profile": 0, "measurement_report.use_simulation_profile": 0, "measurement_report.use_simulation_profile_as_output": 0, "measurement.continuous": 0, "measurement.name.expanded": u"", "measurement.play_sound": 1, "measurement.save_path": expanduseru("~"), "measure.darken_background": 0, "measure.darken_background.show_warning": 1, "measure.uniformity.show_detail": 0, "position.x": 50, "position.y": 50, "position.info.x": 50, "position.info.y": 50, "position.lut_viewer.x": 50, "position.lut_viewer.y": 50, "position.lut3dframe.x": 50, "position.lut3dframe.y": 50, "position.profile_info.x": 50, "position.profile_info.y": 50, "position.progress.x": 50, "position.progress.y": 50, "position.reportframe.x": 50, "position.reportframe.y": 50, "position.synthiccframe.x": 50, "position.synthiccframe.y": 50, "position.tcgen.x": 50, "position.tcgen.y": 50, "profile.black_point_compensation": 1, "profile.create_gamut_views": 1, "profile.install_scope": "l" if (sys.platform != "win32" and os.geteuid() == 0) # or # (sys.platform == "win32" and # sys.getwindowsversion() >= (6, )) else "u", # Linux, OSX "profile.license": "Public Domain", "profile.load_on_login": 1, "profile.name": u" ".join([ u"%dns", u"%Y-%m-%d", u"%cb", u"%wp", u"%cB", u"%ck", u"%cg", u"%cq-%pq", u"%pt" ]), "profile.name.expanded": u"", "profile.quality": "h", "profile.quality.b2a": None, "profile.save_path": storage, # directory "profile.type": "s", "profile.update": 0, "profile_loader.error.show_msg": 1, "profile_loader.verify_calibration": 0, "recent_cals": "", "report.pack_js": 1, "settings.changed": 0, "show_advanced_calibration_options": 0, "size.info.w": 512, "size.info.h": 384, "size.lut3dframe.w": 512, "size.lut3dframe.h": 384, "size.profile_info.w": 432, "size.profile_info.split.w": 960, "size.profile_info.h": 524, "size.lut_viewer.w": 512, "size.lut_viewer.h": 580, "size.reportframe.w": 512, "size.reportframe.h": 256, "size.synthiccframe.w": 512, "size.synthiccframe.h": 384, "skip_legacy_serial_ports": 1, "sudo.preserve_environment": 1, "tc_adaption": 0.1, "tc_add_ti3_relative": 1, "tc_algo": "", "tc_angle": 0.3333, "tc_black_patches": 4, "tc_export_repeat_patch_max": 1, "tc_export_repeat_patch_min": 1, "tc_filter": 0, "tc_filter_L": 50, "tc_filter_a": 0, "tc_filter_b": 0, "tc_filter_rad": 255, "tc_fullspread_patches": 0, "tc_gamma": 1.0, "tc_gray_patches": 9, "tc_multi_bcc": 0, "tc_multi_bcc_steps": 0, "tc_multi_steps": 3, "tc_neutral_axis_emphasis": 0.5, "tc_dark_emphasis": 0.0, "tc_precond": 0, "tc_precond_profile": "", "tc.saturation_sweeps": 5, "tc.saturation_sweeps.custom.R": 0.0, "tc.saturation_sweeps.custom.G": 0.0, "tc.saturation_sweeps.custom.B": 0.0, "tc_single_channel_patches": 0, "tc_vrml_black_offset": 40, "tc_vrml_lab": 0, "tc_vrml_device": 1, "tc_vrml_use_D50": 0, "tc_white_patches": 4, "tc.show": 0, "testchart.reference": "", "ti3.check_sanity.auto": 0, "trc": 2.2, "trc.backup": 2.2, "trc.should_use_viewcond_adjust.show_msg": 1, "trc.type": "g", "trc.type.backup": "g", "untethered.measure.auto": 1, "untethered.measure.manual.delay": 0.75, "untethered.max_delta.chroma": 0.5, "untethered.min_delta": 1.5, "untethered.min_delta.lightness": 1.0, "update_check": 1, "use_separate_lut_access": 0, "vrml.compress": 1, "webserver.portnumber": 8080, "whitepoint.colortemp": 5000, "whitepoint.colortemp.locus": "t", "whitepoint.x": 0.345741, "whitepoint.y": 0.358666 } lcode, lenc = locale.getdefaultlocale() if lcode: defaults["lang"] = lcode.split("_")[0].lower() testchart_defaults = { "s": {None: "d3-e4-s0-g9-m3-b3-f0-crossover.ti1"}, # shaper + matrix "l": {None: "d3-e4-s17-g49-m5-b5-f0.ti1"}, # lut "g": {None: "d3-e4-s3-g3-m0-f0.ti1"} # gamma + matrix } def _init_testcharts(): for testcharts in testchart_defaults.values(): for chart in testcharts.values(): resfiles.append(os.path.join("ti1", chart)) testchart_defaults["G"] = testchart_defaults["g"] testchart_defaults["S"] = testchart_defaults["s"] for key in ("X", "x"): testchart_defaults[key] = testchart_defaults["l"] def getcfg(name, fallback=True): """ Get and return an option value from the configuration. If fallback evaluates to True and the option is not set, return its default value. """ if (name in ("profile.save_path", "profile.name.expanded") and is_ccxx_testchart()): name = {"profile.save_path": "measurement.save_path", "profile.name.expanded": "measurement.name.expanded"}[name] setcfg("measurement.name.expanded", "%s & %s" % (get_instrument_name(), get_display_name())) hasdef = name in defaults if hasdef: defval = defaults[name] deftype = type(defval) if cfg.has_option(ConfigParser.DEFAULTSECT, name): try: value = unicode(cfg.get(ConfigParser.DEFAULTSECT, name), "UTF-8") except UnicodeDecodeError: pass else: # Check for invalid types and return default if wrong type if (name != "trc" or value not in valid_values["trc"]) and \ hasdef and deftype in (Decimal, int, float): try: value = deftype(value) except ValueError: value = defval else: valid_range = valid_ranges.get(name) if valid_range: value = min(max(valid_range[0], value), valid_range[1]) elif name in valid_values and value not in valid_values[name]: value = defval elif name.startswith("dimensions.measureframe"): try: value = [max(0, float(n)) for n in value.split(",")] if len(value) != 3: raise ValueError() except ValueError: value = defaults[name] else: value[0] = min(value[0], 1) value[1] = min(value[1], 1) value[2] = min(value[2], 50) value = ",".join([str(n) for n in value]) elif name == "profile.quality" and getcfg("profile.type") in ("g", "G"): # default to high quality for gamma + matrix value = "h" elif name == "trc.type" and getcfg("trc") in valid_values["trc"]: value = "g" elif (value and name.endswith("file") and name != "colorimeter_correction_matrix_file" and not os.path.exists(value)): # colorimeter_correction_matrix_file is special because it's # not (only) a path if debug: print "%s does not exist: %s" % (name, value), if value.split(os.path.sep)[-3:-2] == [appname] and ( value.split(os.path.sep)[-2:-1] == ["presets"] or value.split(os.path.sep)[-2:-1] == ["ref"] or value.split(os.path.sep)[-2:-1] == ["ti1"]): value = os.path.join(*value.split(os.path.sep)[-2:]) value = get_data_path(value) if not value and hasdef: value = defval if debug: print "- falling back to", value elif name in valid_values and value not in valid_values[name]: if debug: print "Invalid config value for %s: %s" % (name, value), if hasdef: value = defval else: value = None if debug: print "- falling back to", value elif name == "copyright": # Make sure dispcalGUI and Argyll version are up-to-date pattern = re.compile("(%s(?:\s*v(?:ersion|\.)?)?\s*)\d+(?:\.\d+)*" % appname, re.I) repl = create_replace_function("\\1%s", version) value = re.sub(pattern, repl, value) pattern = re.compile("(Argyll(?:\s*CMS)?)((?:\s*v(?:ersion|\.)?)?\s*)\d+(?:\.\d+)*", re.I) if defval.split()[-1] != "CMS": repl = create_replace_function("\\1\\2%s", defval.split()[-1]) else: repl = "\\1" value = re.sub(pattern, repl, value) return value if hasdef and fallback: value = defval else: if debug and not hasdef: print "Warning - unknown option:", name value = None return value def hascfg(name, fallback=True): """ Check if an option name exists in the configuration. Returns a boolean. If fallback evaluates to True and the name does not exist, check defaults also. """ if cfg.has_option(ConfigParser.DEFAULTSECT, name): return True elif fallback: return name in defaults return False def get_ccxx_testchart(): """ Get the path to the default chart for CCMX/CCSS creation """ return get_data_path(os.path.join("ti1", defaults["colorimeter_correction.testchart"])) def get_current_profile(include_display_profile=False): """ Get the currently selected profile (if any) """ path = getcfg("calibration.file") if path: import ICCProfile as ICCP try: profile = ICCP.ICCProfile(path) except ICCP.ICCProfileInvalidError, exception: return return profile elif include_display_profile: return get_display_profile() def get_display_profile(display_no=None): if display_no is None: display_no = max(getcfg("display.number") - 1, 0) if get_display_name(display_no) in ("Web", "Untethered", "madVR"): return None import ICCProfile as ICCP try: return ICCP.get_display_profile(display_no) except Exception, exception: from log import _safe_print, log _safe_print("ICCP.get_display_profile(%s):" % display_no, exception, fn=log) def get_total_patches(white_patches=None, black_patches=None, single_channel_patches=None, gray_patches=None, multi_steps=None, multi_bcc_steps=None, fullspread_patches=None): if white_patches is None: white_patches = getcfg("tc_white_patches") if black_patches is None and getcfg("argyll.version") >= "1.6": black_patches = getcfg("tc_black_patches") if single_channel_patches is None: single_channel_patches = getcfg("tc_single_channel_patches") single_channel_patches_total = single_channel_patches * 3 if gray_patches is None: gray_patches = getcfg("tc_gray_patches") if gray_patches == 0 and single_channel_patches > 0 and white_patches > 0: gray_patches = 2 if multi_steps is None: multi_steps = getcfg("tc_multi_steps") if multi_bcc_steps is None and getcfg("argyll.version") >= "1.6": multi_bcc_steps = getcfg("tc_multi_bcc_steps") if fullspread_patches is None: fullspread_patches = getcfg("tc_fullspread_patches") total_patches = 0 if multi_steps > 1: multi_patches = int(math.pow(multi_steps, 3)) if multi_bcc_steps > 1: multi_patches += int(math.pow(multi_bcc_steps - 1, 3)) total_patches += multi_patches white_patches -= 1 # white always in multi channel patches multi_step = 255.0 / (multi_steps - 1) multi_values = [] multi_bcc_values = [] if multi_bcc_steps > 1: multi_bcc_step = multi_step for i in range(multi_bcc_steps): multi_values += [str(multi_bcc_step * i)] for i in range(multi_bcc_steps * 2 - 1): multi_bcc_values += [str(multi_bcc_step / 2.0 * i)] else: for i in range(multi_steps): multi_values += [str(multi_step * i)] if single_channel_patches > 1: single_channel_step = 255.0 / (single_channel_patches - 1) for i in range(single_channel_patches): if str(single_channel_step * i) in multi_values: single_channel_patches_total -= 3 if gray_patches > 1: gray_step = 255.0 / (gray_patches - 1) for i in range(gray_patches): if (str(gray_step * i) in multi_values or str(gray_step * i) in multi_bcc_values): gray_patches -= 1 elif gray_patches > 1: white_patches -= 1 # white always in gray patches single_channel_patches_total -= 3 # black always in gray patches elif single_channel_patches_total: # black always only once in single channel patches single_channel_patches_total -= 2 total_patches += max(0, white_patches) + \ max(0, single_channel_patches_total) + \ max(0, gray_patches) + fullspread_patches if black_patches: if gray_patches > 1 or single_channel_patches_total or multi_steps: black_patches -= 1 # black always in other patches total_patches += black_patches return total_patches def get_verified_path(cfg_item_name, path=None): """ Verify and return dir and filename for a path from the user cfg, or a given path """ defaultPath = path or getcfg(cfg_item_name) defaultDir = expanduseru("~") defaultFile = "" if defaultPath: if os.path.exists(defaultPath): defaultDir, defaultFile = (os.path.dirname(defaultPath), os.path.basename(defaultPath)) elif (defaults.get(cfg_item_name) and os.path.exists(defaults[cfg_item_name])): defaultDir, defaultFile = (os.path.dirname(defaults[cfg_item_name]), os.path.basename(defaults[cfg_item_name])) elif os.path.exists(os.path.dirname(defaultPath)): defaultDir = os.path.dirname(defaultPath) return defaultDir, defaultFile def is_ccxx_testchart(testchart=None): """ Check wether the testchart is the default chart for CCMX/CCSS creation """ testchart = testchart or getcfg("testchart.file") return testchart == get_ccxx_testchart() def is_profile(filename=None, include_display_profile=False): filename = filename or getcfg("calibration.file") if filename: if os.path.exists(filename): import ICCProfile as ICCP try: profile = ICCP.ICCProfile(filename) except ICCP.ICCProfileInvalidError: pass else: return True elif include_display_profile: return bool(get_display_profile()) return False def makecfgdir(which="user", worker=None): if which == "user": if not os.path.exists(confighome): try: os.makedirs(confighome) except Exception, exception: from debughelpers import handle_error handle_error(u"Warning - could not create configuration directory " "'%s': %s" % (confighome, safe_unicode(exception))) return False elif not os.path.exists(config_sys): try: if sys.platform == "win32": os.makedirs(config_sys) else: result = worker.exec_cmd("mkdir", ["-p", config_sys], capture_output=True, low_contrast=False, skip_scripts=True, silent=True, asroot=True) if isinstance(result, Exception): raise result except Exception, exception: from debughelpers import handle_error handle_error(u"Warning - could not create configuration directory " "'%s': %s" % (config_sys, safe_unicode(exception))) return False return True def initcfg(): """ Initialize the configuration. Read in settings if the configuration file exists, else create the settings directory if nonexistent. """ # read pre-v0.2.2b configuration if present if sys.platform == "darwin": oldcfg = os.path.join(expanduseru("~"), "Library", "Preferences", appname + " Preferences") else: oldcfg = os.path.join(expanduseru("~"), "." + appname) makecfgdir() if os.path.exists(confighome) and \ not os.path.exists(os.path.join(confighome, appname + ".ini")): try: if os.path.isfile(oldcfg): oldcfg_file = open(oldcfg, "rb") oldcfg_contents = oldcfg_file.read() oldcfg_file.close() cfg_file = open(os.path.join(confighome, appname + ".ini"), "wb") cfg_file.write("[Default]\n" + oldcfg_contents) cfg_file.close() elif sys.platform == "win32": key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, "Software\\" + appname) numsubkeys, numvalues, mtime = _winreg.QueryInfoKey(key) cfg_file = open(os.path.join(confighome, appname + ".ini"), "wb") cfg_file.write("[Default]\n") for i in range(numvalues): name, value, type_ = _winreg.EnumValue(key, i) if type_ == 1: cfg_file.write((u"%s = %s\n" % (name, value)).encode("UTF-8")) cfg_file.close() except Exception, exception: # WindowsError 2 means registry key does not exist, do not show # warning in that case if sys.platform != "win32" or not hasattr(exception, "errno") or \ exception.errno != 2: from log import safe_print safe_print("Warning - could not process old configuration:", safe_unicode(exception)) # Set a few defaults which have None as possible value and thus cannot # be set in the 'defaults' collection setcfg("gamap_src_viewcond", "mt") setcfg("gamap_out_viewcond", "mt") # Read cfg try: cfg.read([os.path.join(config_sys, appname + ".ini")]) cfg.read([os.path.join(confighome, appname + ".ini")]) # This won't raise an exception if the file does not exist, only if it # can't be parsed except Exception, exception: from log import safe_print safe_print("Warning - could not parse configuration file '%s'" % appname + ".ini") def setcfg(name, value): """ Set an option value in the configuration. """ if value is None: cfg.remove_option(ConfigParser.DEFAULTSECT, name) else: cfg.set(ConfigParser.DEFAULTSECT, name, unicode(value).encode("UTF-8")) def writecfg(which="user", worker=None): """ Write configuration file. which: 'user' or 'system' worker: worker instance if which == 'system' """ if which == "user": # user config - stores everything and overrides system-wide config cfgfilename = os.path.join(confighome, appname + ".ini") try: io = StringIO() cfg.write(io) io.seek(0) lines = io.read().strip("\n").split("\n") # Sorting works as long as config has only one section lines = [lines[0]] + sorted(lines[1:]) cfgfile = open(cfgfilename, "wb") cfgfile.write("\n".join(lines)) cfgfile.close() except Exception, exception: from debughelpers import handle_error handle_error(u"Warning - could not write user configuration file " "'%s': %s" % (cfgfilename, safe_unicode(exception))) return False else: # system-wide config - only stores essentials ie. Argyll directory cfgfilename1 = os.path.join(confighome, appname + ".local.ini") cfgfilename2 = os.path.join(config_sys, appname + ".ini") if sys.platform == "win32": cfgfilename = cfgfilename2 else: cfgfilename = cfgfilename1 try: cfgfile = open(cfgfilename, "wb") cfgfile.write("\n".join(["[Default]", "%s = %s" % ("argyll.dir", getcfg("argyll.dir"))])) cfgfile.close() if sys.platform != "win32": # on Linux and OS X, we write the file to the users's config dir # then 'su mv' it to the system-wide config dir result = worker.exec_cmd("mv", ["-f", cfgfilename1, cfgfilename2], capture_output=True, low_contrast=False, skip_scripts=True, silent=True, asroot=True) if isinstance(result, Exception): raise result except Exception, exception: from debughelpers import handle_error handle_error(u"Warning - could not write system-wide configuration file " "'%s': %s" % (cfgfilename2, safe_unicode(exception))) return False return True _init_testcharts() runtype = runtimeconfig(pyfile) dispcalGUI-1.7.1.6/dispcalGUI/debughelpers.py000644 000765 000000 00000003252 12025152312 020620 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import sys import config from config import fs_enc from log import logbuffer, safe_print from meta import name as appname from util_str import safe_unicode wxEventTypes = {} def getevtobjname(event, window=None): """ Get and return the event object's name. """ try: event_object = event.GetEventObject() if not event_object and window: event_object = window.FindWindowById(event.GetId()) if event_object and hasattr(event_object, "GetName"): return event_object.GetName() except Exception, exception: pass def getevttype(event): """ Get and return the event object's type. """ if not wxEventTypes: from wxaddons import wx try: for name in dir(wx): if name.find("EVT_") == 0: attr = getattr(wx, name) if hasattr(attr, "evtType"): wxEventTypes[attr.evtType[0]] = name except Exception, exception: pass typeId = event.GetEventType() if typeId in wxEventTypes: return wxEventTypes[typeId] def handle_error(error, parent=None, silent=False): """ Log an error string and show an error dialog. """ error = safe_unicode(error) safe_print(error) if not silent: try: from wxaddons import wx if wx.GetApp() is None and parent is None: app = wx.App(redirect=False) if parent: try: parent.IsShownOnScreen() except: # If the parent is still being constructed, we can't use it parent = None dlg = wx.MessageDialog(parent if parent not in (False, None) and parent.IsShownOnScreen() else None, error, appname, wx.OK | wx.ICON_ERROR) dlg.ShowModal() dlg.Destroy() except Exception, exception: safe_print("Warning: handle_error():", safe_unicode(exception)) dispcalGUI-1.7.1.6/dispcalGUI/defaultpaths.py000644 000765 000000 00000012220 12251072570 020636 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys if sys.platform == "win32": try: from win32com.shell.shell import SHGetSpecialFolderPath from win32com.shell.shellcon import (CSIDL_APPDATA, CSIDL_COMMON_APPDATA, CSIDL_COMMON_STARTUP, CSIDL_PROFILE, CSIDL_PROGRAM_FILES_COMMON, CSIDL_STARTUP, CSIDL_SYSTEM) except ImportError: import ctypes (CSIDL_APPDATA, CSIDL_COMMON_APPDATA, CSIDL_COMMON_STARTUP, CSIDL_PROFILE, CSIDL_PROGRAM_FILES_COMMON, CSIDL_STARTUP, CSIDL_SYSTEM) = (26, 35, 24, 40, 43, 7, 37) MAX_PATH = 260 def SHGetSpecialFolderPath(hwndOwner, nFolder, create=0): """ ctypes wrapper around shell32.SHGetSpecialFolderPathW """ buffer = ctypes.create_unicode_buffer(u'\0' * MAX_PATH) ctypes.windll.shell32.SHGetSpecialFolderPathW(0, buffer, nFolder, create) return buffer.value from util_os import expanduseru, expandvarsu, getenvu home = expanduseru("~") if sys.platform == "win32": # Always specify create=1 for SHGetSpecialFolderPath so we don't get an # exception if the folder does not yet exist try: library_home = appdata = SHGetSpecialFolderPath(0, CSIDL_APPDATA, 1) except Exception, exception: raise Exception("FATAL - Could not get/create user application data folder: %s" % exception) # Argyll CMS uses ALLUSERSPROFILE for local system wide app related data # Note: On Windows Vista and later, ALLUSERSPROFILE and COMMON_APPDATA # are actually the same ('C:\ProgramData'), but under Windows XP the former # points to 'C:\Documents and Settings\All Users' while COMMON_APPDATA # points to 'C:\Documents and Settings\All Users\Application Data' allusersprofile = getenvu("ALLUSERSPROFILE") if allusersprofile: commonappdata = [allusersprofile] else: try: commonappdata = [SHGetSpecialFolderPath(0, CSIDL_COMMON_APPDATA, 1)] except Exception, exception: raise Exception("FATAL - Could not get/create common application data folder: %s" % exception) library = commonappdata[0] try: commonprogramfiles = SHGetSpecialFolderPath(0, CSIDL_PROGRAM_FILES_COMMON, 1) except Exception, exception: raise Exception("FATAL - Could not get/create common program files folder: %s" % exception) try: autostart = SHGetSpecialFolderPath(0, CSIDL_COMMON_STARTUP, 1) except Exception, exception: autostart = None try: autostart_home = SHGetSpecialFolderPath(0, CSIDL_STARTUP, 1) except Exception, exception: autostart_home = None try: iccprofiles = [os.path.join(SHGetSpecialFolderPath(0, CSIDL_SYSTEM), "spool", "drivers", "color")] except Exception, exception: raise Exception("FATAL - Could not get system folder: %s" % exception) iccprofiles_home = iccprofiles elif sys.platform == "darwin": library_home = os.path.join(home, "Library") library = os.path.join(os.path.sep, "Library") prefs = os.path.join(os.path.sep, "Library", "Preferences") prefs_home = os.path.join(home, "Library", "Preferences") appdata = os.path.join(home, "Library", "Application Support") commonappdata = [os.path.join(os.path.sep, "Library", "Application Support")] autostart = autostart_home = None iccprofiles = [os.path.join(os.path.sep, "Library", "ColorSync", "Profiles"), os.path.join(os.path.sep, "System", "Library", "ColorSync", "Profiles")] iccprofiles_home = [os.path.join(home, "Library", "ColorSync", "Profiles")] else: xdg_config_home = getenvu("XDG_CONFIG_HOME", expandvarsu("$HOME/.config")) xdg_config_dir_default = "/etc/xdg" xdg_config_dirs = [os.path.normpath(pth) for pth in getenvu("XDG_CONFIG_DIRS", xdg_config_dir_default).split(os.pathsep)] if not xdg_config_dir_default in xdg_config_dirs: xdg_config_dirs += [xdg_config_dir_default] xdg_data_home_default = expandvarsu("$HOME/.local/share") library_home = appdata = xdg_data_home = getenvu("XDG_DATA_HOME", xdg_data_home_default) xdg_data_dirs_default = "/usr/local/share:/usr/share:/var/lib" xdg_data_dirs = [os.path.normpath(pth) for pth in getenvu("XDG_DATA_DIRS", xdg_data_dirs_default).split(os.pathsep)] for dir_ in xdg_data_dirs_default.split(os.pathsep): if not dir_ in xdg_data_dirs: xdg_data_dirs += [dir_] commonappdata = xdg_data_dirs library = commonappdata[0] autostart = None for dir_ in xdg_config_dirs: if os.path.exists(dir_): autostart = os.path.join(dir_, "autostart") break if not autostart: autostart = os.path.join(xdg_config_dir_default, "autostart") autostart_home = os.path.join(xdg_config_home, "autostart") iccprofiles = [] for dir_ in xdg_data_dirs: if os.path.exists(dir_): iccprofiles += [os.path.join(dir_, "color", "icc")] iccprofiles.append("/var/lib/color") iccprofiles_home = [os.path.join(xdg_data_home, "color", "icc"), os.path.join(xdg_data_home, "icc"), expandvarsu("$HOME/.color/icc")] if sys.platform in ("darwin", "win32"): iccprofiles_display = iccprofiles iccprofiles_display = iccprofiles_home else: iccprofiles_display = [os.path.join(dir_, "devices", "display") for dir_ in iccprofiles] iccprofiles_display_home = [os.path.join(dir_, "devices", "display") for dir_ in iccprofiles_home] del dir_ dispcalGUI-1.7.1.6/dispcalGUI/demjson.py000644 000765 000000 00000253436 12025152311 017620 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- # r""" A JSON data encoder and decoder. This Python module implements the JSON (http://json.org/) data encoding format; a subset of ECMAScript (aka JavaScript) for encoding primitive data types (numbers, strings, booleans, lists, and associative arrays) in a language-neutral simple text-based syntax. It can encode or decode between JSON formatted strings and native Python data types. Normally you would use the encode() and decode() functions defined by this module, but if you want more control over the processing you can use the JSON class. This implementation tries to be as completely cormforming to all intricacies of the standards as possible. It can operate in strict mode (which only allows JSON-compliant syntax) or a non-strict mode (which allows much more of the whole ECMAScript permitted syntax). This includes complete support for Unicode strings (including surrogate-pairs for non-BMP characters), and all number formats including negative zero and IEEE 754 non-numbers such a NaN or Infinity. The JSON/ECMAScript to Python type mappings are: ---JSON--- ---Python--- null None undefined undefined (note 1) Boolean (true,false) bool (True or False) Integer int or long (note 2) Float float String str or unicode ( "..." or u"..." ) Array [a, ...] list ( [...] ) Object {a:b, ...} dict ( {...} ) -- Note 1. an 'undefined' object is declared in this module which represents the native Python value for this type when in non-strict mode. -- Note 2. some ECMAScript integers may be up-converted to Python floats, such as 1e+40. Also integer -0 is converted to float -0, so as to preserve the sign (which ECMAScript requires). In addition, when operating in non-strict mode, several IEEE 754 non-numbers are also handled, and are mapped to specific Python objects declared in this module: NaN (not a number) nan (float('nan')) Infinity, +Infinity inf (float('inf')) -Infinity neginf (float('-inf')) When encoding Python objects into JSON, you may use types other than native lists or dictionaries, as long as they support the minimal interfaces required of all sequences or mappings. This means you can use generators and iterators, tuples, UserDict subclasses, etc. To make it easier to produce JSON encoded representations of user defined classes, if the object has a method named json_equivalent(), then it will call that method and attempt to encode the object returned from it instead. It will do this recursively as needed and before any attempt to encode the object using it's default strategies. Note that any json_equivalent() method should return "equivalent" Python objects to be encoded, not an already-encoded JSON-formatted string. There is no such aid provided to decode JSON back into user-defined classes as that would dramatically complicate the interface. When decoding strings with this module it may operate in either strict or non-strict mode. The strict mode only allows syntax which is conforming to RFC 4627 (JSON), while the non-strict allows much more of the permissible ECMAScript syntax. The following are permitted when processing in NON-STRICT mode: * Unicode format control characters are allowed anywhere in the input. * All Unicode line terminator characters are recognized. * All Unicode white space characters are recognized. * The 'undefined' keyword is recognized. * Hexadecimal number literals are recognized (e.g., 0xA6, 0177). * String literals may use either single or double quote marks. * Strings may contain \x (hexadecimal) escape sequences, as well as the \v and \0 escape sequences. * Lists may have omitted (elided) elements, e.g., [,,,,,], with missing elements interpreted as 'undefined' values. * Object properties (dictionary keys) can be of any of the types: string literals, numbers, or identifiers (the later of which are treated as if they are string literals)---as permitted by ECMAScript. JSON only permits strings literals as keys. Concerning non-strict and non-ECMAScript allowances: * Octal numbers: If you allow the 'octal_numbers' behavior (which is never enabled by default), then you can use octal integers and octal character escape sequences (per the ECMAScript standard Annex B.1.2). This behavior is allowed, if enabled, because it was valid JavaScript at one time. * Multi-line string literals: Strings which are more than one line long (contain embedded raw newline characters) are never permitted. This is neither valid JSON nor ECMAScript. Some other JSON implementations may allow this, but this module considers that behavior to be a mistake. References: * JSON (JavaScript Object Notation) * RFC 4627. The application/json Media Type for JavaScript Object Notation (JSON) * ECMA-262 3rd edition (1999) * IEEE 754-1985: Standard for Binary Floating-Point Arithmetic. """ __author__ = "Deron Meranda " __date__ = "2008-03-19" __version__ = "1.3" __credits__ = """Copyright (c) 2006-2008 Deron E. Meranda Licensed under GNU GPL 3.0 or later. See LICENSE.txt included with this software. 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 . """ # ------------------------------ # useful global constants content_type = 'application/json' file_ext = 'json' hexdigits = '0123456789ABCDEFabcdef' octaldigits = '01234567' # ---------------------------------------------------------------------- # Decimal and float types. # # If a JSON number can not be stored in a Python float without loosing # precision and the Python has the decimal type, then we will try to # use decimal instead of float. To make this determination we need to # know the limits of the float type, but Python doesn't have an easy # way to tell what the largest floating-point number it supports. So, # we detemine the precision and scale of the float type by testing it. try: # decimal module was introduced in Python 2.4 import decimal except ImportError: decimal = None def determine_float_precision(): """Returns a tuple (significant_digits, max_exponent) for the float type. """ import math # Just count the digits in pi. The last two decimal digits # may only be partial digits, so discount for them. whole, frac = repr(math.pi).split('.') sigdigits = len(whole) + len(frac) - 2 # This is a simple binary search. We find the largest exponent # that the float() type can handle without going infinite or # raising errors. maxexp = None minv = 0; maxv = 1000 while True: if minv+1 == maxv: maxexp = minv - 1 break elif maxv < minv: maxexp = None break m = (minv + maxv) // 2 try: f = repr(float( '1e+%d' % m )) except ValueError: f = None else: if not f or f[0] < '0' or f[0] > '9': f = None if not f: # infinite maxv = m else: minv = m return sigdigits, maxexp float_sigdigits, float_maxexp = determine_float_precision() # ---------------------------------------------------------------------- # The undefined value. # # ECMAScript has an undefined value (similar to yet distinct from null). # Neither Python or strict JSON have support undefined, but to allow # JavaScript behavior we must simulate it. class _undefined_class(object): """Represents the ECMAScript 'undefined' value.""" __slots__ = [] def __repr__(self): return self.__module__ + '.undefined' def __str__(self): return 'undefined' def __nonzero__(self): return False undefined = _undefined_class() del _undefined_class # ---------------------------------------------------------------------- # Non-Numbers: NaN, Infinity, -Infinity # # ECMAScript has official support for non-number floats, although # strict JSON does not. Python doesn't either. So to support the # full JavaScript behavior we must try to add them into Python, which # is unfortunately a bit of black magic. If our python implementation # happens to be built on top of IEEE 754 we can probably trick python # into using real floats. Otherwise we must simulate it with classes. def _nonnumber_float_constants(): """Try to return the Nan, Infinity, and -Infinity float values. This is unnecessarily complex because there is no standard platform- independent way to do this in Python as the language (opposed to some implementation of it) doesn't discuss non-numbers. We try various strategies from the best to the worst. If this Python interpreter uses the IEEE 754 floating point standard then the returned values will probably be real instances of the 'float' type. Otherwise a custom class object is returned which will attempt to simulate the correct behavior as much as possible. """ try: # First, try (mostly portable) float constructor. Works under # Linux x86 (gcc) and some Unices. nan = float('nan') inf = float('inf') neginf = float('-inf') except ValueError: try: # Try the AIX (PowerPC) float constructors nan = float('NaNQ') inf = float('INF') neginf = float('-INF') except ValueError: try: # Next, try binary unpacking. Should work under # platforms using IEEE 754 floating point. import struct, sys xnan = '7ff8000000000000'.decode('hex') # Quiet NaN xinf = '7ff0000000000000'.decode('hex') xcheck = 'bdc145651592979d'.decode('hex') # -3.14159e-11 # Could use float.__getformat__, but it is a new python feature, # so we use sys.byteorder. if sys.byteorder == 'big': nan = struct.unpack('d', xnan)[0] inf = struct.unpack('d', xinf)[0] check = struct.unpack('d', xcheck)[0] else: nan = struct.unpack('d', xnan[::-1])[0] inf = struct.unpack('d', xinf[::-1])[0] check = struct.unpack('d', xcheck[::-1])[0] neginf = - inf if check != -3.14159e-11: raise ValueError('Unpacking raw IEEE 754 floats does not work') except (ValueError, TypeError): # Punt, make some fake classes to simulate. These are # not perfect though. For instance nan * 1.0 == nan, # as expected, but 1.0 * nan == 0.0, which is wrong. class nan(float): """An approximation of the NaN (not a number) floating point number.""" def __repr__(self): return 'nan' def __str__(self): return 'nan' def __add__(self,x): return self def __radd__(self,x): return self def __sub__(self,x): return self def __rsub__(self,x): return self def __mul__(self,x): return self def __rmul__(self,x): return self def __div__(self,x): return self def __rdiv__(self,x): return self def __divmod__(self,x): return (self,self) def __rdivmod__(self,x): return (self,self) def __mod__(self,x): return self def __rmod__(self,x): return self def __pow__(self,exp): return self def __rpow__(self,exp): return self def __neg__(self): return self def __pos__(self): return self def __abs__(self): return self def __lt__(self,x): return False def __le__(self,x): return False def __eq__(self,x): return False def __neq__(self,x): return True def __ge__(self,x): return False def __gt__(self,x): return False def __complex__(self,*a): raise NotImplementedError('NaN can not be converted to a complex') if decimal: nan = decimal.Decimal('NaN') else: nan = nan() class inf(float): """An approximation of the +Infinity floating point number.""" def __repr__(self): return 'inf' def __str__(self): return 'inf' def __add__(self,x): return self def __radd__(self,x): return self def __sub__(self,x): return self def __rsub__(self,x): return self def __mul__(self,x): if x is neginf or x < 0: return neginf elif x == 0: return nan else: return self def __rmul__(self,x): return self.__mul__(x) def __div__(self,x): if x == 0: raise ZeroDivisionError('float division') elif x < 0: return neginf else: return self def __rdiv__(self,x): if x is inf or x is neginf or x is nan: return nan return 0.0 def __divmod__(self,x): if x == 0: raise ZeroDivisionError('float divmod()') elif x < 0: return (nan,nan) else: return (self,self) def __rdivmod__(self,x): if x is inf or x is neginf or x is nan: return (nan, nan) return (0.0, x) def __mod__(self,x): if x == 0: raise ZeroDivisionError('float modulo') else: return nan def __rmod__(self,x): if x is inf or x is neginf or x is nan: return nan return x def __pow__(self, exp): if exp == 0: return 1.0 else: return self def __rpow__(self, x): if -1 < x < 1: return 0.0 elif x == 1.0: return 1.0 elif x is nan or x is neginf or x < 0: return nan else: return self def __neg__(self): return neginf def __pos__(self): return self def __abs__(self): return self def __lt__(self,x): return False def __le__(self,x): if x is self: return True else: return False def __eq__(self,x): if x is self: return True else: return False def __neq__(self,x): if x is self: return False else: return True def __ge__(self,x): return True def __gt__(self,x): return True def __complex__(self,*a): raise NotImplementedError('Infinity can not be converted to a complex') if decimal: inf = decimal.Decimal('Infinity') else: inf = inf() class neginf(float): """An approximation of the -Infinity floating point number.""" def __repr__(self): return '-inf' def __str__(self): return '-inf' def __add__(self,x): return self def __radd__(self,x): return self def __sub__(self,x): return self def __rsub__(self,x): return self def __mul__(self,x): if x is self or x < 0: return inf elif x == 0: return nan else: return self def __rmul__(self,x): return self.__mul__(self) def __div__(self,x): if x == 0: raise ZeroDivisionError('float division') elif x < 0: return inf else: return self def __rdiv__(self,x): if x is inf or x is neginf or x is nan: return nan return -0.0 def __divmod__(self,x): if x == 0: raise ZeroDivisionError('float divmod()') elif x < 0: return (nan,nan) else: return (self,self) def __rdivmod__(self,x): if x is inf or x is neginf or x is nan: return (nan, nan) return (-0.0, x) def __mod__(self,x): if x == 0: raise ZeroDivisionError('float modulo') else: return nan def __rmod__(self,x): if x is inf or x is neginf or x is nan: return nan return x def __pow__(self,exp): if exp == 0: return 1.0 else: return self def __rpow__(self, x): if x is nan or x is inf or x is inf: return nan return 0.0 def __neg__(self): return inf def __pos__(self): return self def __abs__(self): return inf def __lt__(self,x): return True def __le__(self,x): return True def __eq__(self,x): if x is self: return True else: return False def __neq__(self,x): if x is self: return False else: return True def __ge__(self,x): if x is self: return True else: return False def __gt__(self,x): return False def __complex__(self,*a): raise NotImplementedError('-Infinity can not be converted to a complex') if decimal: neginf = decimal.Decimal('-Infinity') else: neginf = neginf(0) return nan, inf, neginf nan, inf, neginf = _nonnumber_float_constants() del _nonnumber_float_constants # ---------------------------------------------------------------------- # String processing helpers unsafe_string_chars = '"\\' + ''.join([chr(i) for i in range(0x20)]) def skipstringsafe( s, start=0, end=None ): i = start #if end is None: # end = len(s) while i < end and s[i] not in unsafe_string_chars: #c = s[i] #if c in unsafe_string_chars: # break i += 1 return i def skipstringsafe_slow( s, start=0, end=None ): i = start if end is None: end = len(s) while i < end: c = s[i] if c == '"' or c == '\\' or ord(c) <= 0x1f: break i += 1 return i def extend_list_with_sep( orig_seq, extension_seq, sepchar='' ): if not sepchar: orig_seq.extend( extension_seq ) else: for i, x in enumerate(extension_seq): if i > 0: orig_seq.append( sepchar ) orig_seq.append( x ) def extend_and_flatten_list_with_sep( orig_seq, extension_seq, separator='' ): for i, part in enumerate(extension_seq): if i > 0 and separator: orig_seq.append( separator ) orig_seq.extend( part ) # ---------------------------------------------------------------------- # Unicode helpers # # JSON requires that all JSON implementations must support the UTF-32 # encoding (as well as UTF-8 and UTF-16). But earlier versions of # Python did not provide a UTF-32 codec. So we must implement UTF-32 # ourselves in case we need it. def utf32le_encode( obj, errors='strict' ): """Encodes a Unicode string into a UTF-32LE encoded byte string.""" import struct try: import cStringIO as sio except ImportError: import StringIO as sio f = sio.StringIO() write = f.write pack = struct.pack for c in obj: n = ord(c) if 0xD800 <= n <= 0xDFFF: # surrogate codepoints are prohibited by UTF-32 if errors == 'ignore': continue elif errors == 'replace': n = ord('?') else: cname = 'U+%04X'%n raise UnicodeError('UTF-32 can not encode surrogate characters',cname) write( pack('L', n) ) return f.getvalue() def utf32le_decode( obj, errors='strict' ): """Decodes a UTF-32LE byte string into a Unicode string.""" if len(obj) % 4 != 0: raise UnicodeError('UTF-32 decode error, data length not a multiple of 4 bytes') import struct unpack = struct.unpack chars = [] i = 0 for i in range(0, len(obj), 4): seq = obj[i:i+4] n = unpack('L',seq)[0] chars.append( unichr(n) ) return u''.join( chars ) def auto_unicode_decode( s ): """Takes a string and tries to convert it to a Unicode string. This will return a Python unicode string type corresponding to the input string (either str or unicode). The character encoding is guessed by looking for either a Unicode BOM prefix, or by the rules specified by RFC 4627. When in doubt it is assumed the input is encoded in UTF-8 (the default for JSON). """ if isinstance(s, unicode): return s if len(s) < 4: return s.decode('utf8') # not enough bytes, assume default of utf-8 # Look for BOM marker import codecs bom2 = s[:2] bom4 = s[:4] a, b, c, d = map(ord, s[:4]) # values of first four bytes if bom4 == codecs.BOM_UTF32_LE: encoding = 'utf-32le' s = s[4:] elif bom4 == codecs.BOM_UTF32_BE: encoding = 'utf-32be' s = s[4:] elif bom2 == codecs.BOM_UTF16_LE: encoding = 'utf-16le' s = s[2:] elif bom2 == codecs.BOM_UTF16_BE: encoding = 'utf-16be' s = s[2:] # No BOM, so autodetect encoding used by looking at first four bytes # according to RFC 4627 section 3. elif a==0 and b==0 and c==0 and d!=0: # UTF-32BE encoding = 'utf-32be' elif a==0 and b!=0 and c==0 and d!=0: # UTF-16BE encoding = 'utf-16be' elif a!=0 and b==0 and c==0 and d==0: # UTF-32LE encoding = 'utf-32le' elif a!=0 and b==0 and c!=0 and d==0: # UTF-16LE encoding = 'utf-16le' else: #if a!=0 and b!=0 and c!=0 and d!=0: # UTF-8 # JSON spec says default is UTF-8, so always guess it # if we can't guess otherwise encoding = 'utf8' # Make sure the encoding is supported by Python try: cdk = codecs.lookup(encoding) except LookupError: if encoding.startswith('utf-32') \ or encoding.startswith('ucs4') \ or encoding.startswith('ucs-4'): # Python doesn't natively have a UTF-32 codec, but JSON # requires that it be supported. So we must decode these # manually. if encoding.endswith('le'): unis = utf32le_decode(s) else: unis = utf32be_decode(s) else: raise JSONDecodeError('this python has no codec for this character encoding',encoding) else: # Convert to unicode using a standard codec unis = s.decode(encoding) return unis def surrogate_pair_as_unicode( c1, c2 ): """Takes a pair of unicode surrogates and returns the equivalent unicode character. The input pair must be a surrogate pair, with c1 in the range U+D800 to U+DBFF and c2 in the range U+DC00 to U+DFFF. """ n1, n2 = ord(c1), ord(c2) if n1 < 0xD800 or n1 > 0xDBFF or n2 < 0xDC00 or n2 > 0xDFFF: raise JSONDecodeError('illegal Unicode surrogate pair',(c1,c2)) a = n1 - 0xD800 b = n2 - 0xDC00 v = (a << 10) | b v += 0x10000 return unichr(v) def unicode_as_surrogate_pair( c ): """Takes a single unicode character and returns a sequence of surrogate pairs. The output of this function is a tuple consisting of one or two unicode characters, such that if the input character is outside the BMP range then the output is a two-character surrogate pair representing that character. If the input character is inside the BMP then the output tuple will have just a single character...the same one. """ n = ord(c) if n < 0x10000: return (unichr(n),) # in BMP, surrogate pair not required v = n - 0x10000 vh = (v >> 10) & 0x3ff # highest 10 bits vl = v & 0x3ff # lowest 10 bits w1 = 0xD800 | vh w2 = 0xDC00 | vl return (unichr(w1), unichr(w2)) # ---------------------------------------------------------------------- # Type identification def isnumbertype( obj ): """Is the object of a Python number type (excluding complex)?""" return isinstance(obj, (int,long,float)) \ and not isinstance(obj, bool) \ or obj is nan or obj is inf or obj is neginf def isstringtype( obj ): """Is the object of a Python string type?""" if isinstance(obj, basestring): return True # Must also check for some other pseudo-string types import types, UserString return isinstance(obj, types.StringTypes) \ or isinstance(obj, UserString.UserString) \ or isinstance(obj, UserString.MutableString) # ---------------------------------------------------------------------- # Numeric helpers def decode_hex( hexstring ): """Decodes a hexadecimal string into it's integer value.""" # We don't use the builtin 'hex' codec in python since it can # not handle odd numbers of digits, nor raise the same type # of exceptions we want to. n = 0 for c in hexstring: if '0' <= c <= '9': d = ord(c) - ord('0') elif 'a' <= c <= 'f': d = ord(c) - ord('a') + 10 elif 'A' <= c <= 'F': d = ord(c) - ord('A') + 10 else: raise JSONDecodeError('not a hexadecimal number',hexstring) # Could use ((n << 4 ) | d), but python 2.3 issues a FutureWarning. n = (n * 16) + d return n def decode_octal( octalstring ): """Decodes an octal string into it's integer value.""" n = 0 for c in octalstring: if '0' <= c <= '7': d = ord(c) - ord('0') else: raise JSONDecodeError('not an octal number',octalstring) # Could use ((n << 3 ) | d), but python 2.3 issues a FutureWarning. n = (n * 8) + d return n # ---------------------------------------------------------------------- # Exception classes. class JSONError(ValueError): """Our base class for all JSON-related errors. """ def pretty_description(self): err = self.args[0] if len(self.args) > 1: err += ': ' for anum, a in enumerate(self.args[1:]): if anum > 1: err += ', ' astr = repr(a) if len(astr) > 20: astr = astr[:20] + '...' err += astr return err class JSONDecodeError(JSONError): """An exception class raised when a JSON decoding error (syntax error) occurs.""" class JSONEncodeError(JSONError): """An exception class raised when a python object can not be encoded as a JSON string.""" #---------------------------------------------------------------------- # The main JSON encoder/decoder class. class JSON(object): """An encoder/decoder for JSON data streams. Usually you will call the encode() or decode() methods. The other methods are for lower-level processing. Whether the JSON parser runs in strict mode (which enforces exact compliance with the JSON spec) or the more forgiving non-string mode can be affected by setting the 'strict' argument in the object's initialization; or by assigning True or False to the 'strict' property of the object. You can also adjust a finer-grained control over strictness by allowing or preventing specific behaviors. You can get a list of all the available behaviors by accessing the 'behaviors' property. Likewise the allowed_behaviors and prevented_behaviors list which behaviors will be allowed and which will not. Call the allow() or prevent() methods to adjust these. """ _escapes_json = { # character escapes in JSON '"': '"', '/': '/', '\\': '\\', 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', } _escapes_js = { # character escapes in Javascript '"': '"', '\'': '\'', '\\': '\\', 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', 'v': '\v', '0': '\x00' } # Following is a reverse mapping of escape characters, used when we # output JSON. Only those escapes which are always safe (e.g., in JSON) # are here. It won't hurt if we leave questionable ones out. _rev_escapes = {'\n': '\\n', '\t': '\\t', '\b': '\\b', '\r': '\\r', '\f': '\\f', '"': '\\"', '\\': '\\\\'} def __init__(self, strict=False, compactly=True, escape_unicode=False): """Creates a JSON encoder/decoder object. If 'strict' is set to True, then only strictly-conforming JSON output will be produced. Note that this means that some types of values may not be convertable and will result in a JSONEncodeError exception. If 'compactly' is set to True, then the resulting string will have all extraneous white space removed; if False then the string will be "pretty printed" with whitespace and indentation added to make it more readable. If 'escape_unicode' is set to True, then all non-ASCII characters will be represented as a unicode escape sequence; if False then the actual real unicode character will be inserted if possible. The 'escape_unicode' can also be a function, which when called with a single argument of a unicode character will return True if the character should be escaped or False if it should not. If you wish to extend the encoding to ba able to handle additional types, you should subclass this class and override the encode_default() method. """ import sys self._set_strictness(strict) self._encode_compactly = compactly try: # see if we were passed a predicate function b = escape_unicode(u'A') self._encode_unicode_as_escapes = escape_unicode except (ValueError, NameError, TypeError): # Just set to True or False. We could use lambda x:True # to make it more consistent (always a function), but it # will be too slow, so we'll make explicit tests later. self._encode_unicode_as_escapes = bool(escape_unicode) self._sort_dictionary_keys = True # The following is a boolean map of the first 256 characters # which will quickly tell us which of those characters never # need to be escaped. self._asciiencodable = [32 <= c < 128 and not self._rev_escapes.has_key(chr(c)) for c in range(0,255)] def _set_strictness(self, strict): """Changes the strictness behavior. Pass True to be very strict about JSON syntax, or False to be looser. """ self._allow_any_type_at_start = not strict self._allow_all_numeric_signs = not strict self._allow_comments = not strict self._allow_control_char_in_string = not strict self._allow_hex_numbers = not strict self._allow_initial_decimal_point = not strict self._allow_js_string_escapes = not strict self._allow_non_numbers = not strict self._allow_nonescape_characters = not strict # "\z" -> "z" self._allow_nonstring_keys = not strict self._allow_omitted_array_elements = not strict self._allow_single_quoted_strings = not strict self._allow_trailing_comma_in_literal = not strict self._allow_undefined_values = not strict self._allow_unicode_format_control_chars = not strict self._allow_unicode_whitespace = not strict # Always disable this by default self._allow_octal_numbers = False def allow(self, behavior): """Allow the specified behavior (turn off a strictness check). The list of all possible behaviors is available in the behaviors property. You can see which behaviors are currently allowed by accessing the allowed_behaviors property. """ p = '_allow_' + behavior if hasattr(self, p): setattr(self, p, True) else: raise AttributeError('Behavior is not known',behavior) def prevent(self, behavior): """Prevent the specified behavior (turn on a strictness check). The list of all possible behaviors is available in the behaviors property. You can see which behaviors are currently prevented by accessing the prevented_behaviors property. """ p = '_allow_' + behavior if hasattr(self, p): setattr(self, p, False) else: raise AttributeError('Behavior is not known',behavior) def _get_behaviors(self): return sorted([ n[len('_allow_'):] for n in self.__dict__ \ if n.startswith('_allow_')]) behaviors = property(_get_behaviors, doc='List of known behaviors that can be passed to allow() or prevent() methods') def _get_allowed_behaviors(self): return sorted([ n[len('_allow_'):] for n in self.__dict__ \ if n.startswith('_allow_') and getattr(self,n)]) allowed_behaviors = property(_get_allowed_behaviors, doc='List of known behaviors that are currently allowed') def _get_prevented_behaviors(self): return sorted([ n[len('_allow_'):] for n in self.__dict__ \ if n.startswith('_allow_') and not getattr(self,n)]) prevented_behaviors = property(_get_prevented_behaviors, doc='List of known behaviors that are currently prevented') def _is_strict(self): return not self.allowed_behaviors strict = property(_is_strict, _set_strictness, doc='True if adherence to RFC 4627 syntax is strict, or False is more generous ECMAScript syntax is permitted') def isws(self, c): """Determines if the given character is considered as white space. Note that Javscript is much more permissive on what it considers to be whitespace than does JSON. Ref. ECMAScript section 7.2 """ if not self._allow_unicode_whitespace: return c in ' \t\n\r' else: if not isinstance(c,unicode): c = unicode(c) if c in u' \t\n\r\f\v': return True import unicodedata return unicodedata.category(c) == 'Zs' def islineterm(self, c): """Determines if the given character is considered a line terminator. Ref. ECMAScript section 7.3 """ if c == '\r' or c == '\n': return True if c == u'\u2028' or c == u'\u2029': # unicodedata.category(c) in ['Zl', 'Zp'] return True return False def strip_format_control_chars(self, txt): """Filters out all Unicode format control characters from the string. ECMAScript permits any Unicode "format control characters" to appear at any place in the source code. They are to be ignored as if they are not there before any other lexical tokenization occurs. Note that JSON does not allow them. Ref. ECMAScript section 7.1. """ import unicodedata txt2 = filter( lambda c: unicodedata.category(unicode(c)) != 'Cf', txt ) return txt2 def decode_null(self, s, i=0): """Intermediate-level decoder for ECMAScript 'null' keyword. Takes a string and a starting index, and returns a Python None object and the index of the next unparsed character. """ if i < len(s) and s[i:i+4] == 'null': return None, i+4 raise JSONDecodeError('literal is not the JSON "null" keyword', s) def encode_undefined(self): """Produces the ECMAScript 'undefined' keyword.""" return 'undefined' def encode_null(self): """Produces the JSON 'null' keyword.""" return 'null' def decode_boolean(self, s, i=0): """Intermediate-level decode for JSON boolean literals. Takes a string and a starting index, and returns a Python bool (True or False) and the index of the next unparsed character. """ if s[i:i+4] == 'true': return True, i+4 elif s[i:i+5] == 'false': return False, i+5 raise JSONDecodeError('literal value is not a JSON boolean keyword',s) def encode_boolean(self, b): """Encodes the Python boolean into a JSON Boolean literal.""" if bool(b): return 'true' return 'false' def decode_number(self, s, i=0, imax=None): """Intermediate-level decoder for JSON numeric literals. Takes a string and a starting index, and returns a Python suitable numeric type and the index of the next unparsed character. The returned numeric type can be either of a Python int, long, or float. In addition some special non-numbers may also be returned such as nan, inf, and neginf (technically which are Python floats, but have no numeric value.) Ref. ECMAScript section 8.5. """ if imax is None: imax = len(s) # Detect initial sign character(s) if not self._allow_all_numeric_signs: if s[i] == '+' or (s[i] == '-' and i+1 < imax and \ s[i+1] in '+-'): raise JSONDecodeError('numbers in strict JSON may only have a single "-" as a sign prefix',s[i:]) sign = +1 j = i # j will point after the sign prefix while j < imax and s[j] in '+-': if s[j] == '-': sign = sign * -1 j += 1 # Check for ECMAScript symbolic non-numbers if s[j:j+3] == 'NaN': if self._allow_non_numbers: return nan, j+3 else: raise JSONDecodeError('NaN literals are not allowed in strict JSON') elif s[j:j+8] == 'Infinity': if self._allow_non_numbers: if sign < 0: return neginf, j+8 else: return inf, j+8 else: raise JSONDecodeError('Infinity literals are not allowed in strict JSON') elif s[j:j+2] in ('0x','0X'): if self._allow_hex_numbers: k = j+2 while k < imax and s[k] in hexdigits: k += 1 n = sign * decode_hex( s[j+2:k] ) return n, k else: raise JSONDecodeError('hexadecimal literals are not allowed in strict JSON',s[i:]) else: # Decimal (or octal) number, find end of number. # General syntax is: \d+[\.\d+][e[+-]?\d+] k = j # will point to end of digit sequence could_be_octal = ( k+1 < imax and s[k] == '0' ) # first digit is 0 decpt = None # index into number of the decimal point, if any ept = None # index into number of the e|E exponent start, if any esign = '+' # sign of exponent sigdigits = 0 # number of significant digits (approx, counts end zeros) while k < imax and (s[k].isdigit() or s[k] in '.+-eE'): c = s[k] if c not in octaldigits: could_be_octal = False if c == '.': if decpt is not None or ept is not None: break else: decpt = k-j elif c in 'eE': if ept is not None: break else: ept = k-j elif c in '+-': if not ept: break esign = c else: #digit if not ept: sigdigits += 1 k += 1 number = s[j:k] # The entire number as a string #print 'NUMBER IS: ', repr(number), ', sign', sign, ', esign', esign, \ # ', sigdigits', sigdigits, \ # ', decpt', decpt, ', ept', ept # Handle octal integers first as an exception. If octal # is not enabled (the ECMAScipt standard) then just do # nothing and treat the string as a decimal number. if could_be_octal and self._allow_octal_numbers: n = sign * decode_octal( number ) return n, k # A decimal number. Do a quick check on JSON syntax restrictions. if number[0] == '.' and not self._allow_initial_decimal_point: raise JSONDecodeError('numbers in strict JSON must have at least one digit before the decimal point',s[i:]) elif number[0] == '0' and \ len(number) > 1 and number[1].isdigit(): if self._allow_octal_numbers: raise JSONDecodeError('initial zero digit is only allowed for octal integers',s[i:]) else: raise JSONDecodeError('initial zero digit must not be followed by other digits (octal numbers are not permitted)',s[i:]) # Make sure decimal point is followed by a digit if decpt is not None: if decpt+1 >= len(number) or not number[decpt+1].isdigit(): raise JSONDecodeError('decimal point must be followed by at least one digit',s[i:]) # Determine the exponential part if ept is not None: if ept+1 >= len(number): raise JSONDecodeError('exponent in number is truncated',s[i:]) try: exponent = int(number[ept+1:]) except ValueError: raise JSONDecodeError('not a valid exponent in number',s[i:]) ##print 'EXPONENT', exponent else: exponent = 0 # Try to make an int/long first. if decpt is None and exponent >= 0: # An integer if ept: n = int(number[:ept]) else: n = int(number) n *= sign if exponent: n *= 10**exponent if n == 0 and sign < 0: # minus zero, must preserve negative sign so make a float n = -0.0 else: try: if decimal and (abs(exponent) > float_maxexp or sigdigits > float_sigdigits): try: n = decimal.Decimal(number) n = n.normalize() except decimal.Overflow: if sign<0: n = neginf else: n = inf else: n *= sign else: n = float(number) * sign except ValueError: raise JSONDecodeError('not a valid JSON numeric literal', s[i:j]) return n, k def encode_number(self, n): """Encodes a Python numeric type into a JSON numeric literal. The special non-numeric values of float('nan'), float('inf') and float('-inf') are translated into appropriate JSON literals. Note that Python complex types are not handled, as there is no ECMAScript equivalent type. """ if isinstance(n, complex): if n.imag: raise JSONEncodeError('Can not encode a complex number that has a non-zero imaginary part',n) n = n.real if isinstance(n, (int,long)): return str(n) if decimal and isinstance(n, decimal.Decimal): return str(n) global nan, inf, neginf if n is nan: return 'NaN' elif n is inf: return 'Infinity' elif n is neginf: return '-Infinity' elif isinstance(n, float): # Check for non-numbers. # In python nan == inf == -inf, so must use repr() to distinguish reprn = repr(n).lower() if ('inf' in reprn and '-' in reprn) or n == neginf: return '-Infinity' elif 'inf' in reprn or n is inf: return 'Infinity' elif 'nan' in reprn or n is nan: return 'NaN' return repr(n) else: raise TypeError('encode_number expected an integral, float, or decimal number type',type(n)) def decode_string(self, s, i=0, imax=None): """Intermediate-level decoder for JSON string literals. Takes a string and a starting index, and returns a Python string (or unicode string) and the index of the next unparsed character. """ if imax is None: imax = len(s) if imax < i+2 or s[i] not in '"\'': raise JSONDecodeError('string literal must be properly quoted',s[i:]) closer = s[i] if closer == '\'' and not self._allow_single_quoted_strings: raise JSONDecodeError('string literals must use double quotation marks in strict JSON',s[i:]) i += 1 # skip quote if self._allow_js_string_escapes: escapes = self._escapes_js else: escapes = self._escapes_json ccallowed = self._allow_control_char_in_string chunks = [] _append = chunks.append done = False high_surrogate = None while i < imax: c = s[i] # Make sure a high surrogate is immediately followed by a low surrogate if high_surrogate and (i+1 >= imax or s[i:i+2] != '\\u'): raise JSONDecodeError('High unicode surrogate must be followed by a low surrogate',s[i:]) if c == closer: i += 1 # skip end quote done = True break elif c == '\\': # Escaped character i += 1 if i >= imax: raise JSONDecodeError('escape in string literal is incomplete',s[i-1:]) c = s[i] if '0' <= c <= '7' and self._allow_octal_numbers: # Handle octal escape codes first so special \0 doesn't kick in yet. # Follow Annex B.1.2 of ECMAScript standard. if '0' <= c <= '3': maxdigits = 3 else: maxdigits = 2 for k in range(i, i+maxdigits+1): if k >= imax or s[k] not in octaldigits: break n = decode_octal(s[i:k]) if n < 128: _append( chr(n) ) else: _append( unichr(n) ) i = k continue if escapes.has_key(c): _append(escapes[c]) i += 1 elif c == 'u' or c == 'x': i += 1 if c == 'u': digits = 4 else: # c== 'x' if not self._allow_js_string_escapes: raise JSONDecodeError(r'string literals may not use the \x hex-escape in strict JSON',s[i-1:]) digits = 2 if i+digits >= imax: raise JSONDecodeError('numeric character escape sequence is truncated',s[i-1:]) n = decode_hex( s[i:i+digits] ) if high_surrogate: # Decode surrogate pair and clear high surrogate _append( surrogate_pair_as_unicode( high_surrogate, unichr(n) ) ) high_surrogate = None elif n < 128: # ASCII chars always go in as a str _append( chr(n) ) elif 0xd800 <= n <= 0xdbff: # high surrogate if imax < i + digits + 2 or s[i+digits] != '\\' or s[i+digits+1] != 'u': raise JSONDecodeError('High unicode surrogate must be followed by a low surrogate',s[i-2:]) high_surrogate = unichr(n) # remember until we get to the low surrogate elif 0xdc00 <= n <= 0xdfff: # low surrogate raise JSONDecodeError('Low unicode surrogate must be proceeded by a high surrogate',s[i-2:]) else: # Other chars go in as a unicode char _append( unichr(n) ) i += digits else: # Unknown escape sequence if self._allow_nonescape_characters: _append( c ) i += 1 else: raise JSONDecodeError('unsupported escape code in JSON string literal',s[i-1:]) elif ord(c) <= 0x1f: # A control character if self.islineterm(c): raise JSONDecodeError('line terminator characters must be escaped inside string literals',s[i:]) elif ccallowed: _append( c ) i += 1 else: raise JSONDecodeError('control characters must be escaped inside JSON string literals',s[i:]) else: # A normal character; not an escape sequence or end-quote. # Find a whole sequence of "safe" characters so we can append them # all at once rather than one a time, for speed. j = i i += 1 while i < imax and s[i] not in unsafe_string_chars and s[i] != closer: i += 1 _append(s[j:i]) if not done: raise JSONDecodeError('string literal is not terminated with a quotation mark',s) s = ''.join( chunks ) return s, i def encode_string(self, s): """Encodes a Python string into a JSON string literal. """ # Must handle instances of UserString specially in order to be # able to use ord() on it's simulated "characters". import UserString if isinstance(s, (UserString.UserString, UserString.MutableString)): def tochar(c): return c.data else: # Could use "lambda c:c", but that is too slow. So we set to None # and use an explicit if test inside the loop. tochar = None chunks = [] chunks.append('"') revesc = self._rev_escapes asciiencodable = self._asciiencodable encunicode = self._encode_unicode_as_escapes i = 0 imax = len(s) while i < imax: if tochar: c = tochar(s[i]) else: c = s[i] cord = ord(c) if cord < 256 and asciiencodable[cord] and isinstance(encunicode, bool): # Contiguous runs of plain old printable ASCII can be copied # directly to the JSON output without worry (unless the user # has supplied a custom is-encodable function). j = i i += 1 while i < imax: if tochar: c = tochar(s[i]) else: c = s[i] cord = ord(c) if cord < 256 and asciiencodable[cord]: i += 1 else: break chunks.append( unicode(s[j:i]) ) elif revesc.has_key(c): # Has a shortcut escape sequence, like "\n" chunks.append(revesc[c]) i += 1 elif cord <= 0x1F: # Always unicode escape ASCII-control characters chunks.append(r'\u%04x' % cord) i += 1 elif 0xD800 <= cord <= 0xDFFF: # A raw surrogate character! This should never happen # and there's no way to include it in the JSON output. # So all we can do is complain. cname = 'U+%04X' % cord raise JSONEncodeError('can not include or escape a Unicode surrogate character',cname) elif cord <= 0xFFFF: # Other BMP Unicode character if isinstance(encunicode, bool): doesc = encunicode else: doesc = encunicode( c ) if doesc: chunks.append(r'\u%04x' % cord) else: chunks.append( c ) i += 1 else: # ord(c) >= 0x10000 # Non-BMP Unicode if isinstance(encunicode, bool): doesc = encunicode else: doesc = encunicode( c ) if doesc: for surrogate in unicode_as_surrogate_pair(c): chunks.append(r'\u%04x' % ord(surrogate)) else: chunks.append( c ) i += 1 chunks.append('"') return ''.join( chunks ) def skip_comment(self, txt, i=0): """Skips an ECMAScript comment, either // or /* style. The contents of the comment are returned as a string, as well as the index of the character immediately after the comment. """ if i+1 >= len(txt) or txt[i] != '/' or txt[i+1] not in '/*': return None, i if not self._allow_comments: raise JSONDecodeError('comments are not allowed in strict JSON',txt[i:]) multiline = (txt[i+1] == '*') istart = i i += 2 while i < len(txt): if multiline: if txt[i] == '*' and i+1 < len(txt) and txt[i+1] == '/': j = i+2 break elif txt[i] == '/' and i+1 < len(txt) and txt[i+1] == '*': raise JSONDecodeError('multiline /* */ comments may not nest',txt[istart:i+1]) else: if self.islineterm(txt[i]): j = i # line terminator is not part of comment break i += 1 if i >= len(txt): if not multiline: j = len(txt) # // comment terminated by end of file is okay else: raise JSONDecodeError('comment was never terminated',txt[istart:]) return txt[istart:j], j def skipws(self, txt, i=0, imax=None, skip_comments=True): """Skips whitespace. """ if not self._allow_comments and not self._allow_unicode_whitespace: if imax is None: imax = len(txt) while i < imax and txt[i] in ' \r\n\t': i += 1 return i else: return self.skipws_any(txt, i, imax, skip_comments) def skipws_any(self, txt, i=0, imax=None, skip_comments=True): """Skips all whitespace, including comments and unicode whitespace Takes a string and a starting index, and returns the index of the next non-whitespace character. If skip_comments is True and not running in strict JSON mode, then comments will be skipped over just like whitespace. """ if imax is None: imax = len(txt) while i < imax: if txt[i] == '/': cmt, i = self.skip_comment(txt, i) if i < imax and self.isws(txt[i]): i += 1 else: break return i def decode_composite(self, txt, i=0, imax=None): """Intermediate-level JSON decoder for composite literal types (array and object). Takes text and a starting index, and returns either a Python list or dictionary and the index of the next unparsed character. """ if imax is None: imax = len(txt) i = self.skipws(txt, i, imax) starti = i if i >= imax or txt[i] not in '{[': raise JSONDecodeError('composite object must start with "[" or "{"',txt[i:]) if txt[i] == '[': isdict = False closer = ']' obj = [] else: isdict = True closer = '}' obj = {} i += 1 # skip opener i = self.skipws(txt, i, imax) if i < imax and txt[i] == closer: # empty composite i += 1 done = True else: saw_value = False # set to false at beginning and after commas done = False while i < imax: i = self.skipws(txt, i, imax) if i < imax and (txt[i] == ',' or txt[i] == closer): c = txt[i] i += 1 if c == ',': if not saw_value: # no preceeding value, an elided (omitted) element if isdict: raise JSONDecodeError('can not omit elements of an object (dictionary)') if self._allow_omitted_array_elements: if self._allow_undefined_values: obj.append( undefined ) else: obj.append( None ) else: raise JSONDecodeError('strict JSON does not permit omitted array (list) elements',txt[i:]) saw_value = False continue else: # c == closer if not saw_value and not self._allow_trailing_comma_in_literal: if isdict: raise JSONDecodeError('strict JSON does not allow a final comma in an object (dictionary) literal',txt[i-2:]) else: raise JSONDecodeError('strict JSON does not allow a final comma in an array (list) literal',txt[i-2:]) done = True break # Decode the item if isdict and self._allow_nonstring_keys: r = self.decodeobj(txt, i, identifier_as_string=True) else: r = self.decodeobj(txt, i, identifier_as_string=False) if r: if saw_value: # two values without a separating comma raise JSONDecodeError('values must be separated by a comma', txt[i:r[1]]) saw_value = True i = self.skipws(txt, r[1], imax) if isdict: key = r[0] # Ref 11.1.5 if not isstringtype(key): if isnumbertype(key): if not self._allow_nonstring_keys: raise JSONDecodeError('strict JSON only permits string literals as object properties (dictionary keys)',txt[starti:]) else: raise JSONDecodeError('object properties (dictionary keys) must be either string literals or numbers',txt[starti:]) if i >= imax or txt[i] != ':': raise JSONDecodeError('object property (dictionary key) has no value, expected ":"',txt[starti:]) i += 1 i = self.skipws(txt, i, imax) rval = self.decodeobj(txt, i) if rval: i = self.skipws(txt, rval[1], imax) obj[key] = rval[0] else: raise JSONDecodeError('object property (dictionary key) has no value',txt[starti:]) else: # list obj.append( r[0] ) else: # not r if isdict: raise JSONDecodeError('expected a value, or "}"',txt[i:]) elif not self._allow_omitted_array_elements: raise JSONDecodeError('expected a value or "]"',txt[i:]) else: raise JSONDecodeError('expected a value, "," or "]"',txt[i:]) # end while if not done: if isdict: raise JSONDecodeError('object literal (dictionary) is not terminated',txt[starti:]) else: raise JSONDecodeError('array literal (list) is not terminated',txt[starti:]) return obj, i def decode_javascript_identifier(self, name): """Convert a JavaScript identifier into a Python string object. This method can be overriden by a subclass to redefine how JavaScript identifiers are turned into Python objects. By default this just converts them into strings. """ return name def decodeobj(self, txt, i=0, imax=None, identifier_as_string=False, only_object_or_array=False): """Intermediate-level JSON decoder. Takes a string and a starting index, and returns a two-tuple consting of a Python object and the index of the next unparsed character. If there is no value at all (empty string, etc), the None is returned instead of a tuple. """ if imax is None: imax = len(txt) obj = None i = self.skipws(txt, i, imax) if i >= imax: raise JSONDecodeError('Unexpected end of input') c = txt[i] if c == '[' or c == '{': obj, i = self.decode_composite(txt, i, imax) elif only_object_or_array: raise JSONDecodeError('JSON document must start with an object or array type only', txt[i:i+20]) elif c == '"' or c == '\'': obj, i = self.decode_string(txt, i, imax) elif c.isdigit() or c in '.+-': obj, i = self.decode_number(txt, i, imax) elif c.isalpha() or c in'_$': j = i while j < imax and (txt[j].isalnum() or txt[j] in '_$'): j += 1 kw = txt[i:j] if kw == 'null': obj, i = None, j elif kw == 'true': obj, i = True, j elif kw == 'false': obj, i = False, j elif kw == 'undefined': if self._allow_undefined_values: obj, i = undefined, j else: raise JSONDecodeError('strict JSON does not allow undefined elements',txt[i:]) elif kw == 'NaN' or kw == 'Infinity': obj, i = self.decode_number(txt, i) else: if identifier_as_string: obj, i = self.decode_javascript_identifier(kw), j else: raise JSONDecodeError('unknown keyword or identifier',kw) else: raise JSONDecodeError('can not decode value',txt[i:]) return obj, i def decode(self, txt): """Decodes a JSON-endoded string into a Python object.""" if self._allow_unicode_format_control_chars: txt = self.strip_format_control_chars(txt) r = self.decodeobj(txt, 0, only_object_or_array=not self._allow_any_type_at_start) if not r: raise JSONDecodeError('can not decode value',txt) else: obj, i = r i = self.skipws(txt, i) if i < len(txt): raise JSONDecodeError('unexpected or extra text',txt[i:]) return obj def encode(self, obj, nest_level=0): """Encodes the Python object into a JSON string representation. This method will first attempt to encode an object by seeing if it has a json_equivalent() method. If so than it will call that method and then recursively attempt to encode the object resulting from that call. Next it will attempt to determine if the object is a native type or acts like a squence or dictionary. If so it will encode that object directly. Finally, if no other strategy for encoding the object of that type exists, it will call the encode_default() method. That method currently raises an error, but it could be overridden by subclasses to provide a hook for extending the types which can be encoded. """ chunks = [] self.encode_helper(chunks, obj, nest_level) return ''.join( chunks ) def encode_helper(self, chunklist, obj, nest_level): #print 'encode_helper(chunklist=%r, obj=%r, nest_level=%r)'%(chunklist,obj,nest_level) if hasattr(obj, 'json_equivalent'): json = self.encode_equivalent( obj, nest_level=nest_level ) if json is not None: chunklist.append( json ) return if obj is None: chunklist.append( self.encode_null() ) elif obj is undefined: if self._allow_undefined_values: chunklist.append( self.encode_undefined() ) else: raise JSONEncodeError('strict JSON does not permit "undefined" values') elif isinstance(obj, bool): chunklist.append( self.encode_boolean(obj) ) elif isinstance(obj, (int,long,float,complex)) or \ (decimal and isinstance(obj, decimal.Decimal)): chunklist.append( self.encode_number(obj) ) elif isinstance(obj, basestring) or isstringtype(obj): chunklist.append( self.encode_string(obj) ) else: self.encode_composite(chunklist, obj, nest_level) def encode_composite(self, chunklist, obj, nest_level): """Encodes just dictionaries, lists, or sequences. Basically handles any python type for which iter() can create an iterator object. This method is not intended to be called directly. Use the encode() method instead. """ #print 'encode_complex_helper(chunklist=%r, obj=%r, nest_level=%r)'%(chunklist,obj,nest_level) try: # Is it a dictionary or UserDict? Try iterkeys method first. it = obj.iterkeys() except AttributeError: try: # Is it a sequence? Try to make an iterator for it. it = iter(obj) except TypeError: it = None if it is not None: # Does it look like a dictionary? Check for a minimal dict or # UserDict interface. isdict = hasattr(obj, '__getitem__') and hasattr(obj, 'keys') compactly = self._encode_compactly if isdict: chunklist.append('{') if compactly: dictcolon = ':' else: dictcolon = ' : ' else: chunklist.append('[') #print nest_level, 'opening sequence:', repr(chunklist) if not compactly: indent0 = ' ' * nest_level indent = ' ' * (nest_level+1) chunklist.append(' ') sequence_chunks = [] # use this to allow sorting afterwards if dict try: # while not StopIteration numitems = 0 while True: obj2 = it.next() if obj2 is obj: raise JSONEncodeError('trying to encode an infinite sequence',obj) if isdict and not isstringtype(obj2): # Check JSON restrictions on key types if isnumbertype(obj2): if not self._allow_nonstring_keys: raise JSONEncodeError('object properties (dictionary keys) must be strings in strict JSON',obj2) else: raise JSONEncodeError('object properties (dictionary keys) can only be strings or numbers in ECMAScript',obj2) # Encode this item in the sequence and put into item_chunks item_chunks = [] self.encode_helper( item_chunks, obj2, nest_level=nest_level+1 ) if isdict: item_chunks.append(dictcolon) obj3 = obj[obj2] self.encode_helper(item_chunks, obj3, nest_level=nest_level+2) #print nest_level, numitems, 'item:', repr(obj2) #print nest_level, numitems, 'sequence_chunks:', repr(sequence_chunks) #print nest_level, numitems, 'item_chunks:', repr(item_chunks) #extend_list_with_sep(sequence_chunks, item_chunks) sequence_chunks.append(item_chunks) #print nest_level, numitems, 'new sequence_chunks:', repr(sequence_chunks) numitems += 1 except StopIteration: pass if isdict and self._sort_dictionary_keys: sequence_chunks.sort() # Note sorts by JSON repr, not original Python object if compactly: sep = ',' else: sep = ',\n' + indent #print nest_level, 'closing sequence' #print nest_level, 'chunklist:', repr(chunklist) #print nest_level, 'sequence_chunks:', repr(sequence_chunks) extend_and_flatten_list_with_sep( chunklist, sequence_chunks, sep ) #print nest_level, 'new chunklist:', repr(chunklist) if not compactly: if numitems > 1: chunklist.append('\n' + indent0) else: chunklist.append(' ') if isdict: chunklist.append('}') else: chunklist.append(']') else: # Can't create an iterator for the object json2 = self.encode_default( obj, nest_level=nest_level ) chunklist.append( json2 ) def encode_equivalent( self, obj, nest_level=0 ): """This method is used to encode user-defined class objects. The object being encoded should have a json_equivalent() method defined which returns another equivalent object which is easily JSON-encoded. If the object in question has no json_equivalent() method available then None is returned instead of a string so that the encoding will attempt the next strategy. If a caller wishes to disable the calling of json_equivalent() methods, then subclass this class and override this method to just return None. """ if hasattr(obj, 'json_equivalent') \ and callable(getattr(obj,'json_equivalent')): obj2 = obj.json_equivalent() if obj2 is obj: # Try to prevent careless infinite recursion raise JSONEncodeError('object has a json_equivalent() method that returns itself',obj) json2 = self.encode( obj2, nest_level=nest_level ) return json2 else: return None def encode_default( self, obj, nest_level=0 ): """This method is used to encode objects into JSON which are not straightforward. This method is intended to be overridden by subclasses which wish to extend this encoder to handle additional types. """ raise JSONEncodeError('can not encode object into a JSON representation',obj) # ------------------------------ def encode( obj, strict=False, compactly=True, escape_unicode=False, encoding=None ): """Encodes a Python object into a JSON-encoded string. If 'strict' is set to True, then only strictly-conforming JSON output will be produced. Note that this means that some types of values may not be convertable and will result in a JSONEncodeError exception. If 'compactly' is set to True, then the resulting string will have all extraneous white space removed; if False then the string will be "pretty printed" with whitespace and indentation added to make it more readable. If 'escape_unicode' is set to True, then all non-ASCII characters will be represented as a unicode escape sequence; if False then the actual real unicode character will be inserted. If no encoding is specified (encoding=None) then the output will either be a Python string (if entirely ASCII) or a Python unicode string type. However if an encoding name is given then the returned value will be a python string which is the byte sequence encoding the JSON value. As the default/recommended encoding for JSON is UTF-8, you should almost always pass in encoding='utf8'. """ import sys encoder = None # Custom codec encoding function bom = None # Byte order mark to prepend to final output cdk = None # Codec to use if encoding is not None: import codecs try: cdk = codecs.lookup(encoding) except LookupError: cdk = None if cdk: pass elif not cdk: # No built-in codec was found, see if it is something we # can do ourself. encoding = encoding.lower() if encoding.startswith('utf-32') or encoding.startswith('utf32') \ or encoding.startswith('ucs4') \ or encoding.startswith('ucs-4'): # Python doesn't natively have a UTF-32 codec, but JSON # requires that it be supported. So we must decode these # manually. if encoding.endswith('le'): encoder = utf32le_encode elif encoding.endswith('be'): encoder = utf32be_encode else: encoder = utf32be_encode bom = codecs.BOM_UTF32_BE elif encoding.startswith('ucs2') or encoding.startswith('ucs-2'): # Python has no UCS-2, but we can simulate with # UTF-16. We just need to force us to not try to # encode anything past the BMP. encoding = 'utf-16' if not escape_unicode and not callable(escape_unicode): escape_unicode = lambda c: (0xD800 <= ord(c) <= 0xDFFF) or ord(c) >= 0x10000 else: raise JSONEncodeError('this python has no codec for this character encoding',encoding) if not escape_unicode and not callable(escape_unicode): if encoding and encoding.startswith('utf'): # All UTF-x encodings can do the whole Unicode repertoire, so # do nothing special. pass else: # Even though we don't want to escape all unicode chars, # the encoding being used may force us to do so anyway. # We must pass in a function which says which characters # the encoding can handle and which it can't. def in_repertoire( c, encoding_func ): try: x = encoding_func( c, errors='strict' ) except UnicodeError: return False return True if encoder: escape_unicode = lambda c: not in_repertoire(c, encoder) elif cdk: escape_unicode = lambda c: not in_repertoire(c, cdk[0]) else: pass # Let the JSON object deal with it j = JSON( strict=strict, compactly=compactly, escape_unicode=escape_unicode ) unitxt = j.encode( obj ) if encoder: txt = encoder( unitxt ) elif encoding is not None: txt = unitxt.encode( encoding ) else: txt = unitxt if bom: txt = bom + txt return txt def decode( txt, strict=False, encoding=None, **kw ): """Decodes a JSON-encoded string into a Python object. If 'strict' is set to True, then those strings that are not entirely strictly conforming to JSON will result in a JSONDecodeError exception. The input string can be either a python string or a python unicode string. If it is already a unicode string, then it is assumed that no character set decoding is required. However, if you pass in a non-Unicode text string (i.e., a python type 'str') then an attempt will be made to auto-detect and decode the character encoding. This will be successful if the input was encoded in any of UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE), and of course plain ASCII works too. Note though that if you know the character encoding, then you should convert to a unicode string yourself, or pass it the name of the 'encoding' to avoid the guessing made by the auto detection, as with python_object = demjson.decode( input_bytes, encoding='utf8' ) Optional keywords arguments must be of the form allow_xxxx=True/False or prevent_xxxx=True/False where each will allow or prevent the specific behavior, after the evaluation of the 'strict' argument. For example, if strict=True then by also passing 'allow_comments=True' then comments will be allowed. If strict=False then prevent_comments=True will allow everything except comments. """ # Initialize the JSON object j = JSON( strict=strict ) for keyword, value in kw.items(): if keyword.startswith('allow_'): behavior = keyword[6:] allow = bool(value) elif keyword.startswith('prevent_'): behavior = keyword[8:] allow = not bool(value) else: raise ValueError('unknown keyword argument', keyword) if allow: j.allow(behavior) else: j.prevent(behavior) # Convert the input string into unicode if needed. if isinstance(txt,unicode): unitxt = txt else: if encoding is None: unitxt = auto_unicode_decode( txt ) else: cdk = None # codec decoder = None import codecs try: cdk = codecs.lookup(encoding) except LookupError: encoding = encoding.lower() decoder = None if encoding.startswith('utf-32') \ or encoding.startswith('ucs4') \ or encoding.startswith('ucs-4'): # Python doesn't natively have a UTF-32 codec, but JSON # requires that it be supported. So we must decode these # manually. if encoding.endswith('le'): decoder = utf32le_decode elif encoding.endswith('be'): decoder = utf32be_decode else: if txt.startswith( codecs.BOM_UTF32_BE ): decoder = utf32be_decode txt = txt[4:] elif txt.startswith( codecs.BOM_UTF32_LE ): decoder = utf32le_decode txt = txt[4:] else: if encoding.startswith('ucs'): raise JSONDecodeError('UCS-4 encoded string must start with a BOM') decoder = utf32be_decode # Default BE for UTF, per unicode spec elif encoding.startswith('ucs2') or encoding.startswith('ucs-2'): # Python has no UCS-2, but we can simulate with # UTF-16. We just need to force us to not try to # encode anything past the BMP. encoding = 'utf-16' if decoder: unitxt = decoder(txt) elif encoding: unitxt = txt.decode(encoding) else: raise JSONDecodeError('this python has no codec for this character encoding',encoding) # Check that the decoding seems sane. Per RFC 4627 section 3: # "Since the first two characters of a JSON text will # always be ASCII characters [RFC0020], ..." # # This check is probably not necessary, but it allows us to # raise a suitably descriptive error rather than an obscure # syntax error later on. # # Note that the RFC requirements of two ASCII characters seems # to be an incorrect statement as a JSON string literal may # have as it's first character any unicode character. Thus # the first two characters will always be ASCII, unless the # first character is a quotation mark. And in non-strict # mode we can also have a few other characters too. if len(unitxt) > 2: first, second = unitxt[:2] if first in '"\'': pass # second can be anything inside string literal else: if ((ord(first) < 0x20 or ord(first) > 0x7f) or \ (ord(second) < 0x20 or ord(second) > 0x7f)) and \ (not j.isws(first) and not j.isws(second)): # Found non-printable ascii, must check unicode # categories to see if the character is legal. # Only whitespace, line and paragraph separators, # and format control chars are legal here. import unicodedata catfirst = unicodedata.category(unicode(first)) catsecond = unicodedata.category(unicode(second)) if catfirst not in ('Zs','Zl','Zp','Cf') or \ catsecond not in ('Zs','Zl','Zp','Cf'): raise JSONDecodeError('the decoded string is gibberish, is the encoding correct?',encoding) # Now ready to do the actual decoding obj = j.decode( unitxt ) return obj # end file dispcalGUI-1.7.1.6/dispcalGUI/dispcalGUI.py000644 000765 000000 00001326440 12266701714 020160 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- """ dispcalGUI A graphical user interface for the Argyll CMS display calibration utilities Copyright (C) 2008, 2009 Florian Hoech 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 """ from __future__ import with_statement import sys def _early_excepthook(etype, value, tb): import traceback traceback.print_exception(etype, value, tb) try: from util_os import expanduseru logfile = open(os.path.join(expanduseru("~"), "dispcalGUI.error.log"), "w") traceback.print_exception(etype, value, tb, file=logfile) except: pass sys.excepthook = _early_excepthook # Standard modules import ConfigParser ConfigParser.DEFAULTSECT = "Default" import codecs import datetime import decimal Decimal = decimal.Decimal import getpass import glob import httplib import logging import math import os import platform if sys.platform == "darwin": from platform import mac_ver import posix import re import shutil import socket import subprocess as sp import tempfile import threading import traceback import urllib from encodings.aliases import aliases from hashlib import md5 from time import gmtime, sleep, strftime, strptime, time, struct_time from zlib import crc32 # 3rd party modules import demjson if sys.platform == "win32": from ctypes import windll from win32com.shell import shell from win32console import SetConsoleOutputCP import pythoncom import win32api import win32con import jspacker # Config import config from config import (autostart, autostart_home, btn_width_correction, build, script_ext, confighome, datahome, data_dirs, defaults, enc, exe, exe_ext, exedir, fs_enc, getbitmap, geticon, get_bitmap_as_icon, get_ccxx_testchart, get_current_profile, get_display_profile, get_data_path, getcfg, get_verified_path, is_ccxx_testchart, is_profile, original_codepage, initcfg, isapp, isexe, profile_ext, pydir, pyext, pyname, pypath, resfiles, runtype, setcfg, storage, writecfg) # Custom modules import CGATS import ICCProfile as ICCP import ccmx import colord import colormath import localization as lang import pyi_md5pickuphelper import report if sys.platform == "win32": import util_win import wexpect from argyll_cgats import (cal_to_fake_profile, can_update_cal, extract_cal_from_ti3, ti3_to_ti1, vcgt_to_cal, verify_ti1_rgb_xyz) from argyll_instruments import (get_canonical_instrument_name, instruments) from argyll_names import (names as argyll_names, altnames as argyll_altnames, viewconds) from colormath import (CIEDCCT2xyY, planckianCT2xyY, xyY2CCT, XYZ2CCT, XYZ2Lab, XYZ2xyY) from debughelpers import getevtobjname, getevttype, handle_error if sys.platform not in ("darwin", "win32"): from defaultpaths import (iccprofiles_home, iccprofiles_display_home, xdg_config_home, xdg_config_dirs) from edid import pnpidcache, get_manufacturer_name from log import _safe_print, log, logbuffer, safe_print from meta import (author, name as appname, domain, version, VERSION_BASE) from options import debug, test, verbose from ordereddict import OrderedDict from trash import trash, TrashcanUnavailableError from util_decimal import float2dec, stripzeros from util_http import encode_multipart_formdata from util_io import Files, StringIOu as StringIO from util_list import index_fallback_ignorecase, intlist, natsort if sys.platform == "darwin": from util_mac import mac_terminal_do_script from util_os import (expanduseru, getenvu, is_superuser, launch_file, listdir_re, waccess, which) from util_str import (ellipsis, safe_str, safe_unicode, strtr, universal_newlines, wrap) import util_x from worker import (Error, FilteredStream, Info, LineCache, UnloggedInfo, Warn, Worker, check_cal_isfile, check_create_dir, check_file_isfile, check_profile_isfile, check_set_argyll_bin, check_ti3, check_ti3_criteria1, check_ti3_criteria2, get_argyll_util, get_options_from_cal, get_options_from_profile, get_options_from_ti3, make_argyll_compatible_path, parse_argument_string, printcmdline, set_argyll_bin, show_result_dialog) from wxLUT3DFrame import LUT3DFrame try: from wxLUTViewer import LUTFrame except ImportError: LUTFrame = None if sys.platform in ("darwin", "win32") or isexe: from wxMeasureFrame import MeasureFrame from wxProfileInfo import ProfileInfoFrame from wxReportFrame import ReportFrame from wxSynthICCFrame import SynthICCFrame from wxTestchartEditor import TestchartEditor from wxaddons import wx, CustomEvent, CustomGridCellEvent, FileDrop, IsSizer from wxwindows import (AboutDialog, BaseFrame, ConfirmDialog, FileBrowseBitmapButtonWithChoiceHistory, InfoDialog, InvincibleFrame, LogWindow, ProgressDialog, TooltipWindow) try: import wx.lib.agw.floatspin as floatspin except ImportError: import floatspin import xh_floatspin # wxPython from wx import xrc from wx.lib import delayedresult from wx.lib.art import flagart import wx.html import wx.lib.hyperlink def _excepthook(etype, value, tb): safe_print("".join(safe_unicode(s) for s in traceback.format_exception(etype, value, tb))) sys.excepthook = _excepthook if sys.platform == "darwin": FONTSIZE_LARGE = 11 FONTSIZE_MEDIUM = 11 FONTSIZE_SMALL = 10 else: FONTSIZE_LARGE = 10 FONTSIZE_MEDIUM = 8 FONTSIZE_SMALL = 8 def swap_dict_keys_values(mydict): """ Swap dictionary keys and values """ return dict([(v, k) for (k, v) in mydict.iteritems()]) def app_update_check(parent=None, silent=False): """ Check for application update. Show an error dialog if a failure occurs. """ safe_print(lang.getstr("update_check")) resp = http_request(parent, domain, "GET", "/VERSION", failure_msg=lang.getstr("update_check.fail"), silent=silent) if resp is False: return data = resp.read() try: newversion_tuple = tuple(int(n) for n in data.split(".")) except ValueError: safe_print(lang.getstr("update_check.fail.version", domain)) if not silent: wx.CallAfter(InfoDialog, parent, msg=lang.getstr("update_check.fail.version", domain), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error"), log=False) return if newversion_tuple > VERSION_BASE: # Get changelog resp = http_request(parent, domain, "GET", "/README.html", silent=silent) if resp: readme = resp.read() chglog = re.search('
' '.+?

.+?

' '.+?
.+?', readme, re.S) if chglog: chglog = chglog.group().decode("utf-8", "replace") chglog = re.sub('
', "", chglog) chglog = re.sub("<\/?d[l|d]>", "", chglog) chglog = re.sub("<(?:h2|dt)>.+?", "", chglog) chglog = re.sub("

.+?

", "", chglog) chglog = re.sub("(.+?)", "

\\1

", chglog) wx.CallAfter(app_update_confirm, parent, newversion_tuple, chglog) elif not silent: wx.CallAfter(app_uptodate, parent) else: safe_print(lang.getstr("update_check.uptodate", appname)) def app_uptodate(parent=None): """ Show a dialog confirming application is up-to-date """ dlg = InfoDialog(parent, msg=lang.getstr("update_check.uptodate", appname), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), show=False, print_=True) update_check = wx.CheckBox(dlg, -1, lang.getstr("update_check.onstartup")) update_check.SetValue(getcfg("update_check")) dlg.Bind(wx.EVT_CHECKBOX, lambda event: setcfg("update_check", int(event.IsChecked())), id=update_check.GetId()) dlg.sizer3.Add(update_check, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.ShowModalThenDestroy() if parent and getattr(parent, "menuitem_app_auto_update_check", None): parent.menuitem_app_auto_update_check.Check(bool(getcfg("update_check"))) def app_update_confirm(parent=None, newversion_tuple=(0, 0, 0, 0), chglog=None): """ Show a dialog confirming application update, with cancel option """ dlg = ConfirmDialog(parent, msg=lang.getstr("update_check.new_version", ".".join(str(n) for n in newversion_tuple)), ok=lang.getstr("go_to_website"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information"), log=True, print_=True) if chglog: htmlwnd = wx.html.HtmlWindow(dlg, -1, size=(500, 300)) htmlwnd.SetStandardFonts() htmlwnd.SetPage(chglog) dlg.sizer3.Add(htmlwnd, 1, flag=wx.TOP | wx.ALIGN_LEFT | wx.EXPAND, border=12) update_check = wx.CheckBox(dlg, -1, lang.getstr("update_check.onstartup")) update_check.SetValue(getcfg("update_check")) dlg.Bind(wx.EVT_CHECKBOX, lambda event: setcfg("update_check", int(event.IsChecked())), id=update_check.GetId()) dlg.sizer3.Add(update_check, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.Center() if dlg.ShowModal() == wx.ID_OK: launch_file("http://" + domain) dlg.Destroy() if parent and getattr(parent, "menuitem_app_auto_update_check", None): parent.menuitem_app_auto_update_check.Check(bool(getcfg("update_check"))) def colorimeter_correction_web_check_choose(resp, parent=None): """ Let user choose a colorimeter correction and confirm overwrite """ if resp is not False: data = resp.read() if data.strip().startswith("CC"): cgats = CGATS.CGATS(data) else: InfoDialog(parent, msg=lang.getstr("colorimeter_correction.web_check.failure"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) return else: return dlg = ConfirmDialog(parent, msg=lang.getstr("colorimeter_correction.web_check.choose"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information"), nowrap=True) dlg.list_ctrl = wx.ListCtrl(dlg, -1, size=(640, 150), style=wx.LC_REPORT | wx.LC_SINGLE_SEL) dlg.list_ctrl.InsertColumn(0, lang.getstr("type")) dlg.list_ctrl.InsertColumn(1, lang.getstr("description")) dlg.list_ctrl.InsertColumn(2, lang.getstr("display.manufacturer")) dlg.list_ctrl.InsertColumn(3, lang.getstr("display")) dlg.list_ctrl.InsertColumn(4, lang.getstr("instrument")) dlg.list_ctrl.InsertColumn(5, lang.getstr("reference")) dlg.list_ctrl.InsertColumn(6, lang.getstr("created")) dlg.list_ctrl.SetColumnWidth(0, 50) dlg.list_ctrl.SetColumnWidth(1, 250) dlg.list_ctrl.SetColumnWidth(2, 150) dlg.list_ctrl.SetColumnWidth(3, 100) dlg.list_ctrl.SetColumnWidth(4, 75) dlg.list_ctrl.SetColumnWidth(5, 75) dlg.list_ctrl.SetColumnWidth(6, 150) for i in cgats: index = dlg.list_ctrl.InsertStringItem(i, "") dlg.list_ctrl.SetStringItem(index, 0, cgats[i].type.strip()) dlg.list_ctrl.SetStringItem(index, 1, get_canonical_instrument_name(cgats[i].queryv1("DESCRIPTOR") or "")) dlg.list_ctrl.SetStringItem(index, 2, cgats[i].queryv1("MANUFACTURER") or "") dlg.list_ctrl.SetStringItem(index, 3, cgats[i].queryv1("DISPLAY")) dlg.list_ctrl.SetStringItem(index, 4, get_canonical_instrument_name(cgats[i].queryv1("INSTRUMENT") or "")) dlg.list_ctrl.SetStringItem(index, 5, get_canonical_instrument_name(cgats[i].queryv1("REFERENCE") or "")) created = cgats[i].queryv1("CREATED") if created: try: created = strptime(created) except ValueError: datetmp = re.search("\w+ (\w{3}) (\d{2}) (\d{2}(?::[0-5][0-9]){2}) (\d{4})", created) if datetmp: datetmp = "%s-%s-%s %s" % (datetmp.groups()[3], {"Jan": "01", "Feb": "02", "Mar": "03", "Apr": "04", "May": "05", "Jun": "06", "Jul": "07", "Aug": "08", "Sep": "09", "Oct": "10", "Nov": "11", "Dec": "12"}.get(datetmp.groups()[0]), datetmp.groups()[1], datetmp.groups()[2]) try: created = strptime(datetmp, "%Y-%m-%d %H:%M:%S") except ValueError: pass if isinstance(created, struct_time): created = strftime("%Y-%m-%d %H:%M:%S", created) dlg.list_ctrl.SetStringItem(index, 6, created or "") dlg.Bind(wx.EVT_LIST_ITEM_SELECTED, lambda event: dlg.ok.Enable(), dlg.list_ctrl) dlg.Bind(wx.EVT_LIST_ITEM_DESELECTED, lambda event: dlg.ok.Disable(), dlg.list_ctrl) dlg.Bind(wx.EVT_LIST_ITEM_ACTIVATED, lambda event: dlg.EndModal(wx.ID_OK), dlg.list_ctrl) dlg.sizer3.Add(dlg.list_ctrl, 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) if len(cgats) > 1: # We got several matches dlg.ok.Disable() else: item = dlg.list_ctrl.GetItem(0) dlg.list_ctrl.SetItemState(item.GetId(), wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.Center() result = dlg.ShowModal() index = dlg.list_ctrl.GetNextItem(-1, wx.LIST_NEXT_ALL, wx.LIST_STATE_SELECTED) dlg.Destroy() if result != wx.ID_OK: return False # Important: Do not use parsed CGATS, order of keywords may be # different than raw data so MD5 will be different cgats = re.sub("\n(CCMX|CCSS)( *\n)", "\n<>\n\\1\\2", data).split("\n<>\n") colorimeter_correction_check_overwrite(parent, cgats[index]) def colorimeter_correction_check_overwrite(parent=None, cgats=None): """ Check if a colorimeter correction file will be overwritten and present a dialog to confirm or cancel the operation. Write the file. """ result = check_create_dir(config.get_argyll_data_dir()) if isinstance(result, Exception): show_result_dialog(result, parent) return descriptor = re.search('\nDESCRIPTOR\s+"(.+?)"\n', cgats) if descriptor: descriptor = descriptor.groups()[0] description = safe_unicode(descriptor or lang.getstr("unnamed"), "UTF-8") name = re.sub(r"[\\/:*?\"<>|]+", "_", make_argyll_compatible_path(description))[:255] path = os.path.join(config.get_argyll_data_dir(), "%s.%s" % (name, cgats[:7].strip().lower())) if os.path.isfile(path): dlg = ConfirmDialog(parent, msg=lang.getstr("dialog.confirm_overwrite", path), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return False cgatsfile = open(path, 'wb') cgatsfile.write(cgats) cgatsfile.close() if getcfg("colorimeter_correction_matrix_file").split(":")[0] != "AUTO": setcfg("colorimeter_correction_matrix_file", ":" + path) parent.update_colorimeter_correction_matrix_ctrl_items(True) return True def upload_colorimeter_correction(parent=None, params=None): """ Upload colorimeter correction to online database """ path = "/colorimetercorrections/index.php" failure_msg = lang.getstr("colorimeter_correction.upload.failure") # Check for duplicate resp = http_request(parent, domain, "GET", path, # Remove CREATED date for calculating hash {"get": True, "hash": md5(re.sub('\nCREATED\s+".+?"\n', "\n\n", safe_str(params['cgats'], "UTF-8")).strip()).hexdigest()}, silent=True) if resp and resp.read().strip().startswith("CC"): wx.CallAfter(InfoDialog, parent, msg=lang.getstr("colorimeter_correction.upload.exists"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) return else: # Upload params['put'] = True resp = http_request(parent, domain, "POST", path, params, failure_msg=failure_msg) if resp is not False: if resp.status == 201: wx.CallAfter(InfoDialog, parent, msg=lang.getstr("colorimeter_correction.upload.success"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) else: wx.CallAfter(InfoDialog, parent, msg="\n\n".join([failure_msg, resp.read().strip()]), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) def http_request(parent=None, domain=None, request_type="GET", path="", params=None, files=None, headers=None, charset="UTF-8", failure_msg="", silent=False): """ HTTP request wrapper """ if params is None: params = {} if files: content_type, params = encode_multipart_formdata(params.iteritems(), files) else: for key in params: params[key] = safe_str(params[key], charset) params = urllib.urlencode(params) if headers is None: headers = {"User-Agent": "%s/%s" % (appname, version)} if request_type == "GET": path += '?' + params params = None else: if files: headers.update({"Content-Type": content_type, "Content-Length": str(len(params))}) else: headers.update({"Content-Type": "application/x-www-form-urlencoded", "Accept": "text/plain"}) conn = httplib.HTTPConnection(domain) try: conn.request(request_type, path, params, headers) resp = conn.getresponse() except (socket.error, httplib.HTTPException), exception: msg = " ".join([failure_msg, lang.getstr("connection.fail", " ".join([str(arg) for arg in exception.args]))]).strip() safe_print(msg) if not silent: wx.CallAfter(InfoDialog, parent, msg=msg, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error"), log=False) return False if resp.status >= 400: msg = " ".join([failure_msg, lang.getstr("connection.fail.http", " ".join([str(resp.status), resp.reason, resp.read()]))]).strip() safe_print(msg) if not silent: wx.CallAfter(InfoDialog, parent, msg=msg, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error"), log=False) return False return resp class ExtraArgsFrame(BaseFrame): """ Extra commandline arguments window. """ def __init__(self, parent): self.res = xrc.XmlResource(get_data_path(os.path.join("xrc", "extra.xrc"))) pre = wx.PreFrame() self.res.LoadOnFrame(pre, parent, "extra_args") self.PostCreate(pre) self.Bind(wx.EVT_CLOSE, self.OnClose, self) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.set_child_ctrls_as_attrs(self) # Bind event handlers self.Bind(wx.EVT_TEXT, self.extra_args_handler, id=self.extra_args_dispcal_ctrl.GetId()) self.Bind(wx.EVT_TEXT, self.extra_args_handler, id=self.extra_args_dispread_ctrl.GetId()) self.Bind(wx.EVT_TEXT, self.extra_args_handler, id=self.extra_args_spotread_ctrl.GetId()) self.Bind(wx.EVT_TEXT, self.extra_args_handler, id=self.extra_args_colprof_ctrl.GetId()) self.Bind(wx.EVT_TEXT, self.extra_args_handler, id=self.extra_args_collink_ctrl.GetId()) self.Bind(wx.EVT_TEXT, self.extra_args_handler, id=self.extra_args_targen_ctrl.GetId()) self.setup_language() self.update_controls() self.update_layout() def OnClose(self, event): self.Hide() def extra_args_handler(self, event): mapping = {self.extra_args_dispcal_ctrl.GetId(): "extra_args.dispcal", self.extra_args_dispread_ctrl.GetId(): "extra_args.dispread", self.extra_args_spotread_ctrl.GetId(): "extra_args.spotread", self.extra_args_colprof_ctrl.GetId(): "extra_args.colprof", self.extra_args_collink_ctrl.GetId(): "extra_args.collink", self.extra_args_targen_ctrl.GetId(): "extra_args.targen"} pref = mapping.get(event.GetId()) if pref: setcfg(pref, self.FindWindowById(event.GetId()).Value) def update_controls(self): self.extra_args_dispcal_ctrl.ChangeValue(getcfg("extra_args.dispcal")) self.extra_args_dispread_ctrl.ChangeValue(getcfg("extra_args.dispread")) self.extra_args_spotread_ctrl.ChangeValue(getcfg("extra_args.spotread")) self.extra_args_colprof_ctrl.ChangeValue(getcfg("extra_args.colprof")) self.extra_args_collink_ctrl.ChangeValue(getcfg("extra_args.collink")) self.extra_args_targen_ctrl.ChangeValue(getcfg("extra_args.targen")) class GamapFrame(BaseFrame): """ Gamut mapping options window. """ def __init__(self, parent): self.res = xrc.XmlResource(get_data_path(os.path.join("xrc", "gamap.xrc"))) pre = wx.PreFrame() self.res.LoadOnFrame(pre, parent, "gamapframe") self.PostCreate(pre) self.Bind(wx.EVT_CLOSE, self.OnClose, self) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.panel = self.FindWindowByName("panel") self.set_child_ctrls_as_attrs(self) # Bind event handlers self.Bind(wx.EVT_CHECKBOX, self.gamap_perceptual_cb_handler, id=self.gamap_perceptual_cb.GetId()) self.Bind(wx.EVT_CHOICE, self.gamap_perceptual_intent_handler, id=self.gamap_perceptual_intent_ctrl.GetId()) self.Bind(wx.EVT_CHECKBOX, self.gamap_saturation_cb_handler, id=self.gamap_saturation_cb.GetId()) self.Bind(wx.EVT_CHOICE, self.gamap_saturation_intent_handler, id=self.gamap_saturation_intent_ctrl.GetId()) self.Bind(wx.EVT_CHOICE, self.gamap_src_viewcond_handler, id=self.gamap_src_viewcond_ctrl.GetId()) self.Bind(wx.EVT_CHOICE, self.gamap_out_viewcond_handler, id=self.gamap_out_viewcond_ctrl.GetId()) self.Bind(wx.EVT_CHOICE, self.gamap_default_intent_handler, id=self.gamap_default_intent_ctrl.GetId()) self.viewconds_ab = OrderedDict() self.viewconds_ba = {} self.viewconds_out_ab = OrderedDict() self.intents_ab = OrderedDict() self.intents_ba = OrderedDict() self.default_intent_ab = {} self.default_intent_ba = {} for i, ri in enumerate(config.valid_values["gamap_default_intent"]): self.default_intent_ab[i] = ri self.default_intent_ba[ri] = i self.setup_language() self.update_controls() self.update_layout() def OnClose(self, event): self.Hide() def gamap_profile_handler(self, event=None): v = self.gamap_profile.GetPath() p = bool(v) and os.path.exists(v) if p: try: profile = ICCP.ICCProfile(v) except (IOError, ICCP.ICCProfileInvalidError), exception: p = False InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + v, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.gamap_profile.SetPath("") v = None else: if event: # pre-select suitable viewing condition if profile.profileClass == "prtr": self.gamap_src_viewcond_ctrl.SetStringSelection( lang.getstr("gamap.viewconds.pp")) else: self.gamap_src_viewcond_ctrl.SetStringSelection( lang.getstr("gamap.viewconds.mt")) self.gamap_src_viewcond_handler() self.gamap_perceptual_cb.Enable() self.gamap_perceptual_intent_ctrl.Enable(self.gamap_perceptual_cb.GetValue()) self.gamap_saturation_cb.Enable() self.gamap_saturation_intent_ctrl.Enable(self.gamap_saturation_cb.GetValue()) c = self.gamap_perceptual_cb.GetValue() or \ self.gamap_saturation_cb.GetValue() self.gamap_profile.Enable(c) self.gamap_src_viewcond_ctrl.Enable(p and c) self.gamap_out_viewcond_ctrl.Enable(p and c) self.gamap_default_intent_ctrl.Enable(p and c) if v != getcfg("gamap_profile") and self.Parent and \ hasattr(self.Parent, "profile_settings_changed"): self.Parent.profile_settings_changed() setcfg("gamap_profile", v or None) def gamap_perceptual_cb_handler(self, event=None): v = self.gamap_perceptual_cb.GetValue() if not v: self.gamap_saturation_cb.SetValue(False) self.gamap_saturation_cb_handler() if int(v) != getcfg("gamap_perceptual") and self.Parent and \ hasattr(self.Parent, "profile_settings_changed"): self.Parent.profile_settings_changed() setcfg("gamap_perceptual", int(v)) self.gamap_profile_handler() def gamap_perceptual_intent_handler(self, event=None): v = self.intents_ba[self.gamap_perceptual_intent_ctrl.GetStringSelection()] if v != getcfg("gamap_perceptual_intent") and self.Parent and \ hasattr(self.Parent, "profile_settings_changed"): self.Parent.profile_settings_changed() setcfg("gamap_perceptual_intent", v) def gamap_saturation_cb_handler(self, event=None): v = self.gamap_saturation_cb.GetValue() if v: self.gamap_perceptual_cb.SetValue(True) self.gamap_perceptual_cb_handler() if int(v) != getcfg("gamap_saturation") and self.Parent and \ hasattr(self.Parent, "profile_settings_changed"): self.Parent.profile_settings_changed() setcfg("gamap_saturation", int(v)) self.gamap_profile_handler() def gamap_saturation_intent_handler(self, event=None): v = self.intents_ba[self.gamap_saturation_intent_ctrl.GetStringSelection()] if v != getcfg("gamap_saturation_intent") and self.Parent and \ hasattr(self.Parent, "profile_settings_changed"): self.Parent.profile_settings_changed() setcfg("gamap_saturation_intent", v) def gamap_src_viewcond_handler(self, event=None): v = self.viewconds_ba[self.gamap_src_viewcond_ctrl.GetStringSelection()] if v != getcfg("gamap_src_viewcond") and self.Parent and \ hasattr(self.Parent, "profile_settings_changed"): self.Parent.profile_settings_changed() setcfg("gamap_src_viewcond", v) def gamap_out_viewcond_handler(self, event=None): v = self.viewconds_ba[self.gamap_out_viewcond_ctrl.GetStringSelection()] if v != getcfg("gamap_out_viewcond") and self.Parent and \ hasattr(self.Parent, "profile_settings_changed"): self.Parent.profile_settings_changed() setcfg("gamap_out_viewcond", v) def gamap_default_intent_handler(self, event=None): v = self.gamap_default_intent_ctrl.GetSelection() if (self.default_intent_ab[v] != getcfg("gamap_default_intent") and self.Parent and hasattr(self.Parent, "profile_settings_changed")): self.Parent.profile_settings_changed() setcfg("gamap_default_intent", self.default_intent_ab[v]) def setup_language(self): """ Substitute translated strings for menus, controls, labels and tooltips. """ BaseFrame.setup_language(self) # Create the profile picker ctrl dynamically to get translated strings origpickerctrl = self.FindWindowByName("gamap_profile") hsizer = origpickerctrl.GetContainingSizer() self.gamap_profile = FileBrowseBitmapButtonWithChoiceHistory( self.panel, -1, toolTip=lang.getstr("gamap.profile"), dialogTitle=lang.getstr("gamap.profile"), fileMask=lang.getstr("filetype.icc") + "|*.icc;*.icm", changeCallback=self.gamap_profile_handler, history=get_data_path("ref", "\.(icm|icc)$"), name="gamap_profile") self.gamap_profile.SetMaxFontSize(11) hsizer.Replace(origpickerctrl, self.gamap_profile) origpickerctrl.Destroy() intents = ["a", "aa", "aw", "la", "ms", "p", "r", "s"] if (self.Parent and hasattr(self.Parent, "worker") and self.Parent.worker.argyll_version >= [1, 3, 3]): intents.append("pa") for v in sorted(intents): lstr = lang.getstr("gamap.intents.%s" % v) self.intents_ab[v] = lstr self.intents_ba[lstr] = v self.gamap_perceptual_intent_ctrl.SetItems( self.intents_ab.values()) self.gamap_saturation_intent_ctrl.SetItems( self.intents_ab.values()) self.viewconds_ab[None] = lang.getstr("default") self.viewconds_ba[lang.getstr("default")] = None for v in viewconds: lstr = lang.getstr("gamap.viewconds.%s" % v) self.viewconds_ab[v] = lstr self.viewconds_ba[lstr] = v if v not in ("pp", "pe", "pcd", "ob", "cx"): self.viewconds_out_ab[v] = lstr self.gamap_src_viewcond_ctrl.SetItems( self.viewconds_ab.values()) self.gamap_out_viewcond_ctrl.SetItems( [lang.getstr("default")] + self.viewconds_out_ab.values()) self.gamap_default_intent_ctrl.SetItems([lang.getstr("gamap.intents." + v) for v in config.valid_values["gamap_default_intent"]]) def update_controls(self): """ Update controls with values from the configuration """ self.gamap_profile.SetPath(getcfg("gamap_profile")) self.gamap_perceptual_cb.SetValue(getcfg("gamap_perceptual")) self.gamap_perceptual_intent_ctrl.SetStringSelection( self.intents_ab.get(getcfg("gamap_perceptual_intent"), self.intents_ab.get(defaults["gamap_perceptual_intent"]))) self.gamap_saturation_cb.SetValue(getcfg("gamap_saturation")) self.gamap_saturation_intent_ctrl.SetStringSelection( self.intents_ab.get(getcfg("gamap_saturation_intent"), self.intents_ab.get(defaults["gamap_saturation_intent"]))) self.gamap_src_viewcond_ctrl.SetStringSelection( self.viewconds_ab.get(getcfg("gamap_src_viewcond", False), self.viewconds_ab.get(defaults.get("gamap_src_viewcond")))) self.gamap_out_viewcond_ctrl.SetStringSelection( self.viewconds_ab.get(getcfg("gamap_out_viewcond"), self.viewconds_ab.get(defaults.get("gamap_out_viewcond")))) self.gamap_default_intent_ctrl.SetSelection(self.default_intent_ba[getcfg("gamap_default_intent")]) self.gamap_profile_handler() class MainFrame(BaseFrame): """ Display calibrator main application window. """ def __init__(self): # Startup messages if verbose >= 1: safe_print(lang.getstr("startup")) if sys.platform != "darwin": if not autostart: safe_print(lang.getstr("warning.autostart_system")) if not autostart_home: safe_print(lang.getstr("warning.autostart_user")) # Check for required resource files and get pre-canned testcharts self.dist_testcharts = [] self.dist_testchart_names = [] missing = [] for filename in resfiles: path, ext = (get_data_path(os.path.sep.join(filename.split("/"))), os.path.splitext(filename)[1]) if (not path or not os.path.isfile(path)): missing += [filename] elif ext.lower() == ".ti1": self.dist_testcharts += [path] self.dist_testchart_names += [os.path.basename(path)] wx.GetApp().progress_dlg.Pulse() if missing: handle_error(lang.getstr("resources.notfound.warning") + "\n" + "\n".join(missing), False) for filename in missing: if filename.lower().endswith(".xrc"): handle_error(lang.getstr("resources.notfound.error") + "\n" + filename, False) wx.GetApp().progress_dlg.Pulse() wx.GetApp().progress_dlg.Pulse() # Create main worker instance wx.GetApp().progress_dlg.Pulse() self.worker = Worker(None) wx.GetApp().progress_dlg.Pulse() self.worker.enumerate_displays_and_ports(enumerate_ports=getcfg("enumerate_ports.auto")) wx.GetApp().progress_dlg.Pulse() # Initialize GUI if verbose >= 1: safe_print(lang.getstr("initializing_gui")) wx.GetApp().progress_dlg.Pulse(lang.getstr("initializing_gui")) wx.GetApp().progress_dlg.stop_timer() self.res = xrc.XmlResource(get_data_path(os.path.join("xrc", "main.xrc"))) self.res.InsertHandler(xh_floatspin.FloatSpinCtrlXmlHandler()) pre = wx.PreFrame() self.res.LoadOnFrame(pre, None, "mainframe") self.PostCreate(pre) self.worker.owner = self self.init_frame() self.init_defaults() self.init_infoframe() if sys.platform in ("darwin", "win32") or isexe: self.init_measureframe() self.init_menus() self.init_controls() self.show_advanced_calibration_options_handler() self.setup_language() self.update_displays(update_ccmx_items=False) BaseFrame.update_layout(self) # Add the header bitmap after layout so it won't stretch the window # further than necessary self.headerbitmap = self.panel.FindWindowByName("headerbitmap") self.headerbitmap.SetBitmap(getbitmap("theme/header")) self.calpanel.SetScrollRate(2, 2) self.update_comports() self.update_controls(update_ccmx_items=False) self.SetSaneGeometry(int(getcfg("position.x")), int(getcfg("position.y"))) self.Bind(wx.EVT_MOVE, self.OnMove, self) if verbose >= 1: safe_print(lang.getstr("success")) # Check for and load default calibration if len(self.worker.displays): if getcfg("calibration.file"): # Load LUT curves from last used .cal file self.load_cal(silent=True) else: # Load LUT curves from current display profile (if any, and # if it contains curves) self.load_display_profile_cal(None) self.init_timers() if verbose >= 1: safe_print(lang.getstr("ready")) self.log() if sys.platform == "win32" and wx.VERSION >= (2, 9): wx.GetApp().progress_dlg.Destroy() wx.GetApp().progress_dlg = None else: wx.GetApp().progress_dlg.Hide() # Check for updates if configured if getcfg("update_check"): self.app_update_check_handler(None, silent=True) def log(self): """ Put log buffer contents into the log window. """ # We do this after all initialization because the log.log() function # expects the window to be fully created and accessible via # wx.GetApp().frame.infoframe logbuffer.seek(0) self.infoframe.Log("".join(line.decode("UTF-8", "replace") for line in logbuffer).strip()) def init_defaults(self): """ Initialize GUI-specific defaults. """ defaults.update({ "position.info.x": self.GetDisplay().ClientArea[0] + 20, "position.info.y": self.GetDisplay().ClientArea[1] + 40, "position.lut_viewer.x": self.GetDisplay().ClientArea[0] + 30, "position.lut_viewer.y": self.GetDisplay().ClientArea[1] + 50, "position.progress.x": self.GetDisplay().ClientArea[0] + 20, "position.progress.y": self.GetDisplay().ClientArea[1] + 40, "position.x": self.GetDisplay().ClientArea[0] + 10, "position.y": self.GetDisplay().ClientArea[1] + 30 }) self.recent_cals = getcfg("recent_cals").split(os.pathsep) if not "" in self.recent_cals: self.recent_cals = [""] + self.recent_cals self.presets = [] presets = get_data_path("presets", ".*\.(?:icc|icm)$") if isinstance(presets, list): self.presets = natsort(presets) self.presets.reverse() for preset in self.presets: if not preset in self.recent_cals: self.recent_cals.insert(1, preset) self.static_labels = [] self.updatingctrls = False # Left side - internal enumeration, right side - commmandline self.whitepoint_colortemp_loci_ab = { 0: "t", 1: "T" } # Left side - commmandline, right side - internal enumeration self.whitepoint_colortemp_loci_ba = { "t": 0, "T": 1 } # Left side - commmandline, right side - internal enumeration self.quality_ab = { 1: "v", 2: "l", 3: "m", 4: "h", 5: "u" } self.quality_b2a_ab = { 0: "n", 1: "l", 2: "m", 3: "h", 4: "u" } # Left side - commmandline, right side - internal enumeration self.quality_ba = swap_dict_keys_values(self.quality_ab) self.testchart_defaults = config.testchart_defaults self.testcharts = [] self.testchart_names = [] # Left side - commmandline, right side - .cal file self.trc_ab = { "l": "L_STAR", "709": "REC709", "s": "sRGB", "240": "SMPTE240M" } # Left side - .cal file, right side - commmandline self.trc_ba = swap_dict_keys_values(self.trc_ab) # Left side - internal enumeration, right side - commmandline self.trc_types_ab = { 0: "g", 1: "G" } # Left side - commmandline, right side - internal enumeration self.trc_types_ba = swap_dict_keys_values(self.trc_types_ab) self.trc_presets = [ "1.8", "2.0", "2.2", "2.4" ] self.whitepoint_presets = [ "5000", "5500", "6000", "6500" ] def init_frame(self): """ Initialize the main window and its event handlers. Controls are initialized in a separate step (see init_controls). """ # UGLY HACK: This 'safe_print' call fixes a GTK assertion and # segfault under Arch Linux when setting the window title safe_print("") self.SetTitle("%s %s" % (appname, version)) self.SetMaxSize((-1, -1)) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.Bind(wx.EVT_CLOSE, self.OnClose, self) self.Bind(wx.EVT_SHOW, self.OnShow, self) self.Bind(wx.EVT_SIZE, self.OnResize, self) self.droptarget = FileDrop() self.droptarget.drophandlers = { ".cal": self.cal_drop_handler, ".icc": self.cal_drop_handler, ".icm": self.cal_drop_handler, ".ti1": self.ti1_drop_handler, ".ti3": self.ti3_drop_handler } self.droptarget.unsupported_handler = self.drop_unsupported_handler # Main panel self.panel = self.FindWindowByName("panel") self.panel.SetDropTarget(self.droptarget) # Header # Its width also determines the initial min width of the main window # after SetSizeHints and Layout self.header = self.FindWindowByName("header") self.header.SetScrollRate(0, 0) # Calibration settings panel self.calpanel = self.FindWindowByName("calpanel") self.profile_info = {} def init_timers(self): """ Setup the timers for display/instrument detection and profile name. """ self.plugplay_timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.plugplay_timer_handler, self.plugplay_timer) self.update_profile_name_timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.update_profile_name, self.update_profile_name_timer) def OnMove(self, event=None): # When moving, check if we are on another screen and resize if needed. if self.IsShownOnScreen() and not self.IsMaximized() and not \ self.IsIconized(): x, y = self.GetScreenPosition() setcfg("position.x", x) setcfg("position.y", y) display_client_rect = self.GetDisplay().ClientArea if hasattr(self, "calpanel") and (not hasattr(self, "display_client_rect") or self.display_client_rect != display_client_rect): # We just moved to this workspace size = self.GetSize() if sys.platform not in ("darwin", "win32"): # Linux safety_margin = 45 else: safety_margin = 20 vsize = self.calpanel.GetVirtualSize() fullheight = size[1] - self.calpanel.GetSize()[1] + vsize[1] maxheight = None if size[1] > display_client_rect[3] - safety_margin: # Our full height is too tall for that workspace, adjust vsize = self.calpanel.GetSize() maxheight = vsize[1] - (size[1] - display_client_rect[3] + safety_margin) elif not hasattr(self, "display_client_rect"): # Our full height fits on that workspace maxheight = vsize[1] self.display_client_rect = display_client_rect if maxheight: newheight = size[1] - self.calpanel.GetSize()[1] + maxheight if debug: safe_print("[D] Calibration settings virtual height:", vsize[1]) safe_print("[D] Calibration settings height after adjust:", maxheight) safe_print("[D] Main window height after adjust:", newheight) wx.CallAfter(self.frame_fit, fullheight, vsize[1], maxheight, newheight) if event: event.Skip() def frame_fit(self, fullheight, virtualheight, height, newheight): """ Fit the main window to a new size. Used internally by OnMove to make sure the window fits into available (usable, not covered by e.g. taskbars) screen space. """ self.Bind(wx.EVT_IDLE, self.frame_enableresize_handler) size = self.GetSize() self.Freeze() self.SetMinSize((self.GetMinSize()[0], 0)) self.SetMaxSize((size[0], fullheight)) self.calpanel.SetMaxSize((-1, virtualheight)) self.calpanel.SetMinSize((-1, 64)) self.calpanel.SetMaxSize((-1, height)) self.calpanel.SetSize((-1, height)) if debug: safe_print("[D] Main window sizer min height after adjust:", self.GetSizer().GetMinSize()[1]) safe_print("[D] Main window sizer height after adjust:", self.GetSizer().GetSize()[1]) self.SetMinSize((min(self.GetDisplay().ClientArea[2], self.GetMinSize()[0]), newheight)) # We add a margin on the right side for the vertical scrollbar size = (min(self.GetDisplay().ClientArea[2], max(self.GetMinSize()[0], self.calpanel.GetSizer().GetMinSize()[0] + 34)), newheight) self.SetMaxSize(size) self.SetSize(size) self.Thaw() wx.CallLater(100, self.calpanel.SetMaxSize, (-1, -1)) def frame_enableresize_handler(self, event=None): """ Enable resizing after fitting the main window to a new size. Used internally by frame_fit. """ # frame_fit sets a static max size and min size = size, so after # that operation we can no longer resize the window. This is fixed # here by setting another min size and no max size. # The CallLater logic implemented in frame_fit and here is rather # arcane, but needed to circumvent the issue where the size set by # frame_fit is immediately scrapped under certain circumstances # (related to the selected window manager under Linux, for example). wx.CallLater(100, self.SetMinSize, (min(self.GetDisplay().ClientArea[2], self.GetMinSize()[0]), self.GetSize()[1] - self.calpanel.GetSize()[1] + 64)) wx.CallLater(150, self.SetMaxSize, (-1, -1)) self.Unbind(wx.EVT_IDLE) if event: event.Skip() def OnResize(self, event): # Hide the header bitmap on small screens self.header.GetContainingSizer().Show( self.header, self.Size[1] > 480) event.Skip() def cal_drop_handler(self, path): """ Drag'n'drop handler for .cal files. Settings and calibration are loaded from dropped files. """ if not self.worker.is_working(): self.load_cal_handler(None, path) def ti1_drop_handler(self, path): """ Drag'n'drop handler for .ti1 files. Dropped files are added to the testchart chooser and selected. """ if not self.worker.is_working(): self.testchart_btn_handler(None, path) def ti3_drop_handler(self, path): """ Drag'n'drop handler for .ti3 files. Dropped files are used to create an ICC profile. """ if not self.worker.is_working(): self.create_profile_handler(None, path) def drop_unsupported_handler(self): """ Drag'n'drop handler for unsupported files. Shows an error message. """ if not self.worker.is_working(): files = self.droptarget._filenames InfoDialog(self, msg=lang.getstr("error.file_type_unsupported") + "\n\n" + "\n".join(files), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) def init_gamapframe(self): """ Create & initialize the gamut mapping options window and its controls. """ self.gamapframe = GamapFrame(self) def init_infoframe(self, show=None): """ Create & initialize the info (log) window and its controls. """ self.infoframe = LogWindow(self) self.infoframe.Bind(wx.EVT_CLOSE, self.infoframe_close_handler, self.infoframe) self.infoframe.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) if show: self.infoframe.Show() def init_lut3dframe(self): """ Create & initialize the 3D LUT creation window and its controls. """ self.lut3dframe = LUT3DFrame(self) def init_reportframe(self): """ Create & initialize the measurement report creation window and its controls. """ self.reportframe = ReportFrame(self) self.reportframe.measure_btn.Bind(wx.EVT_BUTTON, self.measurement_report_handler) def init_synthiccframe(self): """ Create & initialize the 3D LUT creation window and its controls. """ self.synthiccframe = SynthICCFrame(self) def infoframe_close_handler(self, event): self.infoframe_toggle_handler(event) def setup_language(self): """ Substitute translated strings for menus, controls, labels and tooltips. """ # Set language specific defaults lang.update_defaults() # Translate controls and labels BaseFrame.setup_language(self) settings = [lang.getstr("settings.new")] for cal in self.recent_cals[1:]: lstr = lang.getstr(os.path.basename(cal)) if cal == getcfg("calibration.file") and getcfg("settings.changed"): lstr = "* " + lstr settings += [lstr] self.calibration_file_ctrl.SetItems(settings) self.whitepoint_ctrl.SetItems([lang.getstr("as_measured"), lang.getstr("whitepoint.colortemp"), lang.getstr("whitepoint.xy")]) self.whitepoint_colortemp_loci = [ lang.getstr("whitepoint.colortemp.locus.daylight"), lang.getstr("whitepoint.colortemp.locus.blackbody") ] self.whitepoint_colortemp_locus_ctrl.SetItems( self.whitepoint_colortemp_loci) self.luminance_ctrl.SetItems([lang.getstr("as_measured"), lang.getstr("custom")]) self.black_luminance_ctrl.SetItems([lang.getstr("as_measured"), lang.getstr("custom")]) self.trc_ctrl.SetItems([lang.getstr("trc.gamma"), lang.getstr("trc.lstar"), lang.getstr("trc.rec709"), lang.getstr("trc.rec1886"), lang.getstr("trc.smpte240m"), lang.getstr("trc.srgb")]) self.trc_types = [ lang.getstr("trc.type.relative"), lang.getstr("trc.type.absolute") ] self.trc_type_ctrl.SetItems(self.trc_types) self.update_profile_type_ctrl() self.default_testchart_names = [] for testcharts in self.testchart_defaults.values(): for chart in testcharts.values(): chart = lang.getstr(chart) if not chart in self.default_testchart_names: self.default_testchart_names += [chart] self.profile_name_info_btn.SetToolTipString( wrap(self.profile_name_info(), 72)) def update_profile_type_ctrl(self): """ Populate the profile type control with available choices depending on Argyll version. """ self.profile_types = [ lang.getstr("profile.type.lut.lab"), lang.getstr("profile.type.shaper_matrix"), lang.getstr("profile.type.single_shaper_matrix"), lang.getstr("profile.type.gamma_matrix"), lang.getstr("profile.type.single_gamma_matrix") ] self.profile_types_ab = {} profile_types_index = 0 if self.worker.argyll_version[0:3] > [1, 1, 0] or ( self.worker.argyll_version[0:3] == [1, 1, 0] and not "Beta" in self.worker.argyll_version_string and not "RC1" in self.worker.argyll_version_string and not "RC2" in self.worker.argyll_version_string and not "RC3" in self.worker.argyll_version_string): # Argyll 1.1.0_RC3 had a bug when using -aX # which was fixed in 1.1.0_RC4 self.profile_types.insert(profile_types_index, lang.getstr("profile.type.lut_matrix.xyz")) self.profile_types_ab[profile_types_index] = "X" # XYZ LUT + accurate matrix profile_types_index += 1 if self.worker.argyll_version[0:3] > [1, 1, 0] or ( self.worker.argyll_version[0:3] == [1, 1, 0] and not "Beta" in self.worker.argyll_version_string and not "RC1" in self.worker.argyll_version_string and not "RC2" in self.worker.argyll_version_string): # Windows wants matrix tags in XYZ LUT profiles, # which is satisfied with Argyll >= 1.1.0_RC3 self.profile_types.insert(profile_types_index, lang.getstr("profile.type.lut_rg_swapped_matrix.xyz")) self.profile_types_ab[profile_types_index] = "x" # XYZ LUT + dummy matrix (R <-> G swapped) profile_types_index += 1 elif sys.platform != "win32": self.profile_types.insert(profile_types_index, lang.getstr("profile.type.lut.xyz")) self.profile_types_ab[profile_types_index] = "x" # XYZ LUT profile_types_index += 1 self.profile_type_ctrl.SetItems(self.profile_types) self.profile_types_ab[profile_types_index] = "l" self.profile_types_ab[profile_types_index + 1] = "s" self.profile_types_ab[profile_types_index + 2] = "S" self.profile_types_ab[profile_types_index + 3] = "g" self.profile_types_ab[profile_types_index + 4] = "G" self.profile_types_ba = swap_dict_keys_values(self.profile_types_ab) def init_measureframe(self): """ Create & initialize the measurement window and its controls. """ self.measureframe = MeasureFrame(self, -1) def init_menus(self): """ Initialize the menus and menuitem event handlers. """ res = xrc.XmlResource(get_data_path(os.path.join("xrc", "mainmenu.xrc"))) self.menubar = res.LoadMenuBar("menu") file_ = self.menubar.GetMenu(self.menubar.FindMenu("menu.file")) menuitem = file_.FindItemById(file_.FindItem("calibration.load")) self.Bind(wx.EVT_MENU, self.load_cal_handler, menuitem) menuitem = file_.FindItemById(file_.FindItem("testchart.set")) self.Bind(wx.EVT_MENU, self.testchart_btn_handler, menuitem) menuitem = file_.FindItemById(file_.FindItem("testchart.edit")) self.Bind(wx.EVT_MENU, self.create_testchart_btn_handler, menuitem) menuitem = file_.FindItemById(file_.FindItem("profile.set_save_path")) self.Bind(wx.EVT_MENU, self.profile_save_path_btn_handler, menuitem) self.menuitem_profile_info = file_.FindItemById(file_.FindItem("profile.info")) self.Bind(wx.EVT_MENU, self.profile_info_handler, self.menuitem_profile_info) if sys.platform != "darwin": file_.AppendSeparator() self.menuitem_prefs = file_.Append( -1, "&" + "menuitem.set_argyll_bin") self.Bind(wx.EVT_MENU, self.set_argyll_bin_handler, self.menuitem_prefs) if sys.platform != "darwin": file_.AppendSeparator() self.menuitem_quit = file_.Append(-1, "&menuitem.quit\tCtrl+Q") self.Bind(wx.EVT_MENU, self.OnClose, self.menuitem_quit) options = self.menubar.GetMenu(self.menubar.FindMenu("menu.options")) self.menuitem_measure_testchart = options.FindItemById( options.FindItem("measure.testchart")) self.Bind(wx.EVT_MENU, self.measure_handler, self.menuitem_measure_testchart) self.menuitem_create_profile = options.FindItemById( options.FindItem("create_profile")) self.Bind(wx.EVT_MENU, self.create_profile_handler, self.menuitem_create_profile) self.menuitem_create_profile_from_edid = options.FindItemById( options.FindItem("create_profile_from_edid")) self.Bind(wx.EVT_MENU, self.create_profile_from_edid, self.menuitem_create_profile_from_edid) self.menuitem_install_display_profile = options.FindItemById( options.FindItem("install_display_profile")) self.Bind(wx.EVT_MENU, self.select_install_profile_handler, self.menuitem_install_display_profile) self.menuitem_profile_share = options.FindItemById( options.FindItem("profile.share")) self.Bind(wx.EVT_MENU, self.profile_share_handler, self.menuitem_profile_share) self.menuitem_load_lut_from_cal_or_profile = options.FindItemById( options.FindItem("calibration.load_from_cal_or_profile")) self.Bind(wx.EVT_MENU, self.load_profile_cal_handler, self.menuitem_load_lut_from_cal_or_profile) self.menuitem_load_lut_from_display_profile = options.FindItemById( options.FindItem("calibration.load_from_display_profile")) self.Bind(wx.EVT_MENU, self.load_display_profile_cal, self.menuitem_load_lut_from_display_profile) self.menuitem_lut_reset = options.FindItemById( options.FindItem("calibration.reset")) self.Bind(wx.EVT_MENU, self.reset_cal, self.menuitem_lut_reset) menuitem = options.FindItemById( options.FindItem("detect_displays_and_ports")) self.Bind(wx.EVT_MENU, self.check_update_controls, menuitem) self.menuitem_auto_enumerate_ports = options.FindItemById( options.FindItem("enumerate_ports.auto")) self.Bind(wx.EVT_MENU, self.auto_enumerate_ports_handler, self.menuitem_auto_enumerate_ports) self.menuitem_use_separate_lut_access = options.FindItemById( options.FindItem("use_separate_lut_access")) self.Bind(wx.EVT_MENU, self.use_separate_lut_access_handler, self.menuitem_use_separate_lut_access) self.menuitem_do_not_use_video_lut = options.FindItemById( options.FindItem("calibration.do_not_use_video_lut")) self.Bind(wx.EVT_MENU, self.do_not_use_video_lut_handler, self.menuitem_do_not_use_video_lut) self.menuitem_allow_skip_sensor_cal = options.FindItemById( options.FindItem("allow_skip_sensor_cal")) self.Bind(wx.EVT_MENU, self.allow_skip_sensor_cal_handler, self.menuitem_allow_skip_sensor_cal) self.menuitem_show_advanced_calibration_options = options.FindItemById( options.FindItem("show_advanced_calibration_options")) self.Bind(wx.EVT_MENU, self.show_advanced_calibration_options_handler, self.menuitem_show_advanced_calibration_options) menuitem = options.FindItemById(options.FindItem("extra_args")) self.Bind(wx.EVT_MENU, self.extra_args_handler, menuitem) self.menuitem_enable_argyll_debug = options.FindItemById( options.FindItem("enable_argyll_debug")) self.Bind(wx.EVT_MENU, self.enable_argyll_debug_handler, self.menuitem_enable_argyll_debug) self.menuitem_enable_dry_run = options.FindItemById( options.FindItem("dry_run")) self.Bind(wx.EVT_MENU, self.enable_dry_run_handler, self.menuitem_enable_dry_run) menuitem = options.FindItemById(options.FindItem("restore_defaults")) self.Bind(wx.EVT_MENU, self.restore_defaults_handler, menuitem) tools = self.menubar.GetMenu(self.menubar.FindMenu("menu.tools")) self.menuitem_report_uncalibrated = tools.FindItemById( tools.FindItem("report.uncalibrated")) self.Bind(wx.EVT_MENU, self.report_uncalibrated_handler, self.menuitem_report_uncalibrated) self.menuitem_report_calibrated = tools.FindItemById( tools.FindItem("report.calibrated")) self.Bind(wx.EVT_MENU, self.report_calibrated_handler, self.menuitem_report_calibrated) self.menuitem_calibration_verify = tools.FindItemById( tools.FindItem("calibration.verify")) self.Bind(wx.EVT_MENU, self.verify_calibration_handler, self.menuitem_calibration_verify) self.menuitem_measurement_report = tools.FindItemById( tools.FindItem("measurement_report")) self.Bind(wx.EVT_MENU, self.measurement_report_create_handler, self.menuitem_measurement_report) menuitem = tools.FindItemById( tools.FindItem("measurement_report.update")) self.Bind(wx.EVT_MENU, self.update_measurement_report, menuitem) self.menuitem_measure_uniformity = tools.FindItemById( tools.FindItem("report.uniformity")) self.Bind(wx.EVT_MENU, self.measure_uniformity_handler, self.menuitem_measure_uniformity) self.menuitem_measurement_file_check = tools.FindItemById( tools.FindItem("measurement_file.check_sanity")) self.Bind(wx.EVT_MENU, self.measurement_file_check_handler, self.menuitem_measurement_file_check) self.menuitem_measurement_file_check_auto = tools.FindItemById( tools.FindItem("measurement_file.check_sanity.auto")) self.Bind(wx.EVT_MENU, self.measurement_file_check_auto_handler, self.menuitem_measurement_file_check_auto) self.menuitem_import_colorimeter_correction = tools.FindItemById( tools.FindItem("colorimeter_correction.import")) self.Bind(wx.EVT_MENU, self.import_colorimeter_correction_handler, self.menuitem_import_colorimeter_correction) self.menuitem_create_colorimeter_correction = tools.FindItemById( tools.FindItem("colorimeter_correction.create")) self.Bind(wx.EVT_MENU, self.create_colorimeter_correction_handler, self.menuitem_create_colorimeter_correction) self.menuitem_upload_colorimeter_correction = tools.FindItemById( tools.FindItem("colorimeter_correction.upload")) self.Bind(wx.EVT_MENU, self.upload_colorimeter_correction_handler, self.menuitem_upload_colorimeter_correction) self.menuitem_synthicc_create = tools.FindItemById( tools.FindItem("synthicc.create")) self.Bind(wx.EVT_MENU, self.synthicc_create_handler, self.menuitem_synthicc_create) self.menuitem_lut3d_create = tools.FindItemById( tools.FindItem("3dlut.create")) self.Bind(wx.EVT_MENU, self.lut3d_create_handler, self.menuitem_lut3d_create) self.menuitem_enable_spyder2 = tools.FindItemById( tools.FindItem("enable_spyder2")) self.Bind(wx.EVT_MENU, self.enable_spyder2_handler, self.menuitem_enable_spyder2) self.menuitem_show_lut = tools.FindItemById( tools.FindItem("calibration.show_lut")) self.Bind(wx.EVT_MENU, self.init_lut_viewer, self.menuitem_show_lut) self.menuitem_show_log = tools.FindItemById(tools.FindItem("infoframe.toggle")) self.Bind(wx.EVT_MENU, self.infoframe_toggle_handler, self.menuitem_show_log) self.menuitem_log_autoshow = tools.FindItemById( tools.FindItem("log.autoshow")) self.Bind(wx.EVT_MENU, self.infoframe_autoshow_handler, self.menuitem_log_autoshow) languages = self.menubar.GetMenu(self.menubar.FindMenu("menu.language")) llist = [(lang.ldict[lcode].get("!language", ""), lcode) for lcode in lang.ldict] llist.sort() for lstr, lcode in llist: menuitem = languages.Append(-1, "&" + lstr, kind=wx.ITEM_RADIO) if (lcode.upper().replace("EN", "US") in flagart.catalog): menuitem.SetBitmap( flagart.catalog[lcode.upper().replace("EN", "US")].getBitmap()) if lang.getcode() == lcode: menuitem.Check() font = menuitem.Font font.SetWeight(wx.BOLD) menuitem.SetFont(font) # Map numerical event id to language string lang.ldict[lcode].menuitem_id = menuitem.GetId() self.Bind(wx.EVT_MENU, self.set_language_handler, menuitem) help = self.menubar.GetMenu(self.menubar.FindMenu("menu.help")) self.menuitem_about = help.FindItemById(help.FindItem("menu.about")) self.Bind(wx.EVT_MENU, self.aboutdialog_handler, self.menuitem_about) self.menuitem_readme = help.FindItemById(help.FindItem("readme")) self.menuitem_readme.Enable(isinstance(get_data_path("README.html"), basestring)) self.Bind(wx.EVT_MENU, self.readme_handler, self.menuitem_readme) self.menuitem_license = help.FindItemById(help.FindItem("license")) self.menuitem_license.Enable(isinstance(get_data_path("LICENSE.txt"), basestring) or os.path.isfile("/usr/share/common-licenses/GPL-3")) self.Bind(wx.EVT_MENU, self.license_handler, self.menuitem_license) menuitem = help.FindItemById(help.FindItem("help_support")) self.Bind(wx.EVT_MENU, self.help_support_handler, menuitem) menuitem = help.FindItemById(help.FindItem("bug_report")) self.Bind(wx.EVT_MENU, self.bug_report_handler, menuitem) self.menuitem_app_auto_update_check = help.FindItemById( help.FindItem("update_check.onstartup")) self.Bind(wx.EVT_MENU, self.app_auto_update_check_handler, self.menuitem_app_auto_update_check) menuitem = help.FindItemById(help.FindItem("update_check")) self.Bind(wx.EVT_MENU, self.app_update_check_handler, menuitem) if sys.platform == "darwin": wx.GetApp().SetMacAboutMenuItemId(self.menuitem_about.GetId()) wx.GetApp().SetMacPreferencesMenuItemId(self.menuitem_prefs.GetId()) wx.GetApp().SetMacExitMenuItemId(self.menuitem_quit.GetId()) wx.GetApp().SetMacHelpMenuTitleName(lang.getstr("menu.help")) def update_menus(self): """ Enable/disable menu items based on available Argyll functionality. """ self.menuitem_measure_testchart.Enable(bool(self.worker.displays) and bool(self.worker.instruments)) self.menuitem_create_profile.Enable(bool(self.worker.displays)) edid = self.worker.get_display_edid() self.menuitem_create_profile_from_edid.Enable(bool(self.worker.displays and edid and edid.get("monitor_name", edid.get("ascii", edid["product_id"])) and edid["red_x"] and edid["red_y"] and edid["green_x"] and edid["green_y"] and edid["blue_x"] and edid["blue_y"])) self.menuitem_install_display_profile.Enable(bool(self.worker.displays) and not config.get_display_name() in ("Web", "Untethered", "madVR")) self.menuitem_load_lut_from_cal_or_profile.Enable( bool(self.worker.displays) and not config.get_display_name() in ("Web", "Untethered")) self.menuitem_load_lut_from_display_profile.Enable( bool(self.worker.displays) and not config.get_display_name() in ("Web", "Untethered")) self.menuitem_auto_enumerate_ports.Check(bool(getcfg("enumerate_ports.auto"))) self.menuitem_auto_enumerate_ports.Enable(self.worker.argyll_version > [0, 0, 0]) has_separate_lut_access = self.worker.has_separate_lut_access() self.menuitem_use_separate_lut_access.Check(has_separate_lut_access or bool(getcfg("use_separate_lut_access"))) self.menuitem_use_separate_lut_access.Enable(not has_separate_lut_access) has_lut_access = self.worker.has_lut_access() do_not_use_video_lut = (self.worker.argyll_version >= [1, 3, 3] and (not has_lut_access or not getcfg("calibration.use_video_lut"))) self.menuitem_do_not_use_video_lut.Check(do_not_use_video_lut) self.menuitem_do_not_use_video_lut.Enable(self.worker.argyll_version >= [1, 3, 3] and has_lut_access) self.menuitem_allow_skip_sensor_cal.Check(bool(getcfg("allow_skip_sensor_cal"))) self.menuitem_enable_argyll_debug.Check(bool(getcfg("argyll.debug"))) self.menuitem_enable_dry_run.Check(bool(getcfg("dry_run"))) spyd2en = get_argyll_util("spyd2en") spyder2_firmware_exists = self.worker.spyder2_firmware_exists() self.menuitem_enable_spyder2.Enable(bool(spyd2en)) self.menuitem_enable_spyder2.Check(bool(spyd2en) and spyder2_firmware_exists) self.menuitem_show_lut.Enable(bool(LUTFrame)) self.menuitem_show_lut.Check(bool(getcfg("lut_viewer.show"))) if hasattr(self, "lut_viewer"): self.lut_viewer.update_controls() self.menuitem_lut_reset.Enable(bool(self.worker.displays) and not config.get_display_name() in ("Web", "Untethered")) self.menuitem_report_calibrated.Enable(bool(self.worker.displays) and bool(self.worker.instruments) and config.get_display_name() != "Untethered") self.menuitem_report_uncalibrated.Enable(bool(self.worker.displays) and bool(self.worker.instruments) and config.get_display_name() != "Untethered") self.menuitem_calibration_verify.Enable(bool(self.worker.displays) and bool(self.worker.instruments) and config.get_display_name() != "Untethered") self.menuitem_measurement_report.Enable(bool(self.worker.displays) and bool(self.worker.instruments)) self.menuitem_measure_uniformity.Enable(bool(self.worker.displays) and bool(self.worker.instruments)) self.menuitem_measurement_file_check_auto.Check(bool(getcfg("ti3.check_sanity.auto"))) self.menuitem_create_colorimeter_correction.Enable(bool(get_argyll_util("ccxxmake"))) self.menuitem_lut3d_create.Enable(bool(get_argyll_util("icclu"))) self.menuitem_show_log.Check(bool(getcfg("log.show"))) self.menuitem_log_autoshow.Enable(not bool(getcfg("log.show"))) self.menuitem_log_autoshow.Check(bool(getcfg("log.autoshow"))) self.menuitem_app_auto_update_check.Check(bool(getcfg("update_check"))) def init_controls(self): """ Initialize the main window controls and their event handlers. """ self.set_child_ctrls_as_attrs(self) # Settings file controls # ====================== # Settings file dropdown self.Bind(wx.EVT_CHOICE, self.calibration_file_ctrl_handler, id=self.calibration_file_ctrl.GetId()) self.Bind(wx.EVT_BUTTON, self.load_cal_handler, id=self.calibration_file_btn.GetId()) self.delete_calibration_btn.SetBitmapDisabled(geticon(16, "empty")) self.Bind(wx.EVT_BUTTON, self.delete_calibration_handler, id=self.delete_calibration_btn.GetId()) self.install_profile_btn.SetBitmapDisabled(geticon(16, "empty")) self.Bind(wx.EVT_BUTTON, self.install_profile_handler, id=self.install_profile_btn.GetId()) self.profile_info_btn.SetBitmapDisabled(geticon(16, "empty")) self.Bind(wx.EVT_BUTTON, self.profile_info_handler, id=self.profile_info_btn.GetId()) # Update calibration checkbox self.Bind(wx.EVT_CHECKBOX, self.calibration_update_ctrl_handler, id=self.calibration_update_cb.GetId()) # Display self.Bind(wx.EVT_CHOICE, self.display_ctrl_handler, id=self.display_ctrl.GetId()) self.Bind(wx.EVT_CHOICE, self.display_lut_ctrl_handler, id=self.display_lut_ctrl.GetId()) self.Bind(wx.EVT_BUTTON, self.display_lut_link_ctrl_handler, id=self.display_lut_link_ctrl.GetId()) # Instrument self.Bind(wx.EVT_CHOICE, self.comport_ctrl_handler, id=self.comport_ctrl.GetId()) self.Bind(wx.EVT_CHOICE, self.measurement_mode_ctrl_handler, id=self.measurement_mode_ctrl.GetId()) self.detect_displays_and_ports_btn.SetBitmapDisabled(getbitmap("32x16/empty")) self.Bind(wx.EVT_BUTTON, self.check_update_controls, id=self.detect_displays_and_ports_btn.GetId()) # Colorimeter correction matrix self.Bind(wx.EVT_CHOICE, self.colorimeter_correction_matrix_ctrl_handler, id=self.colorimeter_correction_matrix_ctrl.GetId()) self.Bind(wx.EVT_BUTTON, self.colorimeter_correction_matrix_ctrl_handler, id=self.colorimeter_correction_matrix_btn.GetId()) self.Bind(wx.EVT_BUTTON, self.colorimeter_correction_web_handler, id=self.colorimeter_correction_web_btn.GetId()) # Calibration settings # ==================== # Whitepoint self.Bind(wx.EVT_CHOICE, self.whitepoint_ctrl_handler, id=self.whitepoint_ctrl.GetId()) self.Bind(wx.EVT_COMBOBOX, self.whitepoint_ctrl_handler, id=self.whitepoint_colortemp_textctrl.GetId()) self.whitepoint_colortemp_textctrl.SetItems(self.whitepoint_presets) self.whitepoint_colortemp_textctrl.Bind( wx.EVT_KILL_FOCUS, self.whitepoint_ctrl_handler) self.Bind(wx.EVT_CHOICE, self.whitepoint_colortemp_locus_ctrl_handler, id=self.whitepoint_colortemp_locus_ctrl.GetId()) self.whitepoint_x_textctrl.Bind(wx.EVT_KILL_FOCUS, self.whitepoint_ctrl_handler) self.whitepoint_y_textctrl.Bind(wx.EVT_KILL_FOCUS, self.whitepoint_ctrl_handler) self.Bind(wx.EVT_BUTTON, self.ambient_measure_handler, id=self.whitepoint_measure_btn.GetId()) # White luminance self.Bind(wx.EVT_CHOICE, self.luminance_ctrl_handler, id=self.luminance_ctrl.GetId()) self.luminance_textctrl.Bind(wx.EVT_KILL_FOCUS, self.luminance_ctrl_handler) self.Bind(wx.EVT_CHECKBOX, self.whitelevel_drift_compensation_handler, id=self.whitelevel_drift_compensation.GetId()) # Black luminance self.Bind(wx.EVT_CHOICE, self.black_luminance_ctrl_handler, id=self.black_luminance_ctrl.GetId()) self.black_luminance_textctrl.Bind(wx.EVT_KILL_FOCUS, self.black_luminance_ctrl_handler) self.Bind(wx.EVT_CHECKBOX, self.blacklevel_drift_compensation_handler, id=self.blacklevel_drift_compensation.GetId()) # Tonal response curve (TRC) self.Bind(wx.EVT_CHOICE, self.trc_ctrl_handler, id=self.trc_ctrl.GetId()) self.trc_textctrl.SetItems(self.trc_presets) self.trc_textctrl.SetValue(str(defaults["gamma"])) self.Bind(wx.EVT_COMBOBOX, self.trc_ctrl_handler, id=self.trc_textctrl.GetId()) self.trc_textctrl.Bind(wx.EVT_KILL_FOCUS, self.trc_ctrl_handler) self.Bind(wx.EVT_CHOICE, self.trc_type_ctrl_handler, id=self.trc_type_ctrl.GetId()) # Viewing condition adjustment for ambient in Lux self.Bind(wx.EVT_CHECKBOX, self.ambient_viewcond_adjust_ctrl_handler, id=self.ambient_viewcond_adjust_cb.GetId()) self.ambient_viewcond_adjust_textctrl.Bind( wx.EVT_KILL_FOCUS, self.ambient_viewcond_adjust_ctrl_handler) self.ambient_viewcond_adjust_info.SetCursor(wx.StockCursor(wx.CURSOR_QUESTION_ARROW)) self.Bind(wx.EVT_BUTTON, self.ambient_measure_handler, id=self.ambient_measure_btn.GetId()) # Black level output offset self.Bind(wx.EVT_SLIDER, self.black_output_offset_ctrl_handler, id=self.black_output_offset_ctrl.GetId()) self.Bind(wx.EVT_TEXT, self.black_output_offset_ctrl_handler, id=self.black_output_offset_intctrl.GetId()) # Black point hue correction self.Bind(wx.EVT_CHECKBOX, self.black_point_correction_auto_handler, id=self.black_point_correction_auto_cb.GetId()) self.Bind(wx.EVT_SLIDER, self.black_point_correction_ctrl_handler, id=self.black_point_correction_ctrl.GetId()) self.Bind(wx.EVT_TEXT, self.black_point_correction_ctrl_handler, id=self.black_point_correction_intctrl.GetId()) # Black point correction rate self.Bind(wx.EVT_SLIDER, self.black_point_rate_ctrl_handler, id=self.black_point_rate_ctrl.GetId()) self.Bind(floatspin.EVT_FLOATSPIN, self.black_point_rate_ctrl_handler, id=self.black_point_rate_floatctrl.GetId()) # Calibration quality self.Bind(wx.EVT_SLIDER, self.calibration_quality_ctrl_handler, id=self.calibration_quality_ctrl.GetId()) # Interactive display adjustment self.Bind(wx.EVT_CHECKBOX, self.interactive_display_adjustment_ctrl_handler, id=self.interactive_display_adjustment_cb.GetId()) # Profiling settings # ================== # Testchart file self.Bind(wx.EVT_CHOICE, self.testchart_ctrl_handler, id=self.testchart_ctrl.GetId()) self.testchart_btn.SetBitmapDisabled(geticon(16, "empty")) self.Bind(wx.EVT_BUTTON, self.testchart_btn_handler, id=self.testchart_btn.GetId()) self.create_testchart_btn.SetBitmapDisabled(geticon(16, "empty")) self.Bind(wx.EVT_BUTTON, self.create_testchart_btn_handler, id=self.create_testchart_btn.GetId()) # Profile quality self.Bind(wx.EVT_SLIDER, self.profile_quality_ctrl_handler, id=self.profile_quality_ctrl.GetId()) self.Bind(wx.EVT_CHECKBOX, self.profile_quality_b2a_ctrl_handler, id=self.low_quality_b2a_cb.GetId()) # Profile type self.Bind(wx.EVT_CHOICE, self.profile_type_ctrl_handler, id=self.profile_type_ctrl.GetId()) # Advanced (gamut mapping) self.Bind(wx.EVT_BUTTON, self.gamap_btn_handler, id=self.gamap_btn.GetId()) # Black point compensation self.Bind(wx.EVT_CHECKBOX, self.black_point_compensation_ctrl_handler, id=self.black_point_compensation_cb.GetId()) # Profile name self.Bind(wx.EVT_TEXT, self.profile_name_ctrl_handler, id=self.profile_name_textctrl.GetId()) self.profile_name_info_btn.SetCursor(wx.StockCursor(wx.CURSOR_QUESTION_ARROW)) self.profile_save_path_btn.SetBitmapDisabled(geticon(16, "empty")) self.Bind(wx.EVT_BUTTON, self.profile_save_path_btn_handler, id=self.profile_save_path_btn.GetId()) # Main buttons # ============ self.Bind(wx.EVT_BUTTON, self.calibrate_btn_handler, id=self.calibrate_btn.GetId()) self.Bind(wx.EVT_BUTTON, self.calibrate_and_profile_btn_handler, id=self.calibrate_and_profile_btn.GetId()) self.Bind(wx.EVT_BUTTON, self.profile_btn_handler, id=self.profile_btn.GetId()) def set_language_handler(self, event): """ Set a new language globally and on-the-fly. """ for lcode in lang.ldict: if lang.ldict[lcode].menuitem_id == event.GetId(): # Get the previously marked menu item menuitem = self.menubar.FindItemById( lang.ldict[lang.getcode()].menuitem_id) if hasattr(self, "tcframe"): if not self.tcframe.tc_close_handler(): # Do not change language, mark previous menu item menuitem.Check() return self.tcframe.Destroy() del self.tcframe # Set the previously marked menu item's font weight to normal font = menuitem.Font font.SetWeight(wx.NORMAL) menuitem.SetFont(font) # Set the currently marked menu item's font weight to bold menuitem = self.menubar.FindItemById(lang.ldict[lcode].menuitem_id) font = menuitem.Font font.SetWeight(wx.BOLD) menuitem.SetFont(font) setcfg("lang", lcode) writecfg() self.panel.Freeze() self.setup_language() if hasattr(self, "gamapframe"): self.gamapframe.panel.Freeze() self.gamapframe.setup_language() self.gamapframe.update_layout() self.gamapframe.panel.Thaw() if getattr(self, "lut3dframe", None): self.lut3dframe.panel.Freeze() self.lut3dframe.setup_language() self.lut3dframe.update_controls() self.lut3dframe.update_layout() self.lut3dframe.panel.Thaw() if getattr(self, "reportframe", None): self.reportframe.panel.Freeze() self.reportframe.setup_language() self.reportframe.update_controls() self.reportframe.update_layout() self.reportframe.panel.Thaw() if getattr(self, "synthiccframe", None): self.synthiccframe.panel.Freeze() self.synthiccframe.setup_language() self.synthiccframe.update_controls() self.synthiccframe.update_layout() self.synthiccframe.panel.Thaw() self.update_measurement_modes() self.update_controls() self.update_displays() self.set_testcharts() self.update_layout() self.panel.Thaw() if hasattr(self, "aboutdialog"): self.aboutdialog.Destroy() del self.aboutdialog self.infoframe.Destroy() self.init_infoframe(show=getcfg("log.show")) self.log() if sys.platform in ("darwin", "win32") or isexe: self.measureframe.Destroy() self.init_measureframe() if hasattr(self, "lut_viewer"): self.lut_viewer.Destroy() del self.lut_viewer if getcfg("lut_viewer.show"): self.init_lut_viewer(show=True) if hasattr(self, "profile_name_tooltip_window"): self.profile_name_tooltip_window.Destroy() del self.profile_name_tooltip_window self.Raise() break def update_layout(self): """ Update main window layout. """ self.calpanel.Layout() self.panel.Layout() def restore_defaults_handler(self, event=None, include=(), exclude=()): if event: dlg = ConfirmDialog(self, msg=lang.getstr("app.confirm_restore_defaults"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=getbitmap( "theme/icons/32x32/dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return skip = [ "3dlut.apply_bt1886_gamma_mapping", "3dlut.bitdepth.input", "3dlut.bitdepth.output", "3dlut.bt1886_gamma", "3dlut.bt1886_gamma_type", "3dlut.encoding.input", "3dlut.encoding.input.backup", "3dlut.encoding.output", "3dlut.encoding.output.backup", "3dlut.format", "3dlut.input.profile", "3dlut.abstract.profile", "3dlut.output.profile", "3dlut.output.profile.apply_cal", "3dlut.rendering_intent", "3dlut.use_abstract_profile", "3dlut.size", "allow_skip_sensor_cal", "argyll.dir", "argyll.version", "calibration.black_output_offset.backup", "calibration.black_point_rate.enabled", "calibration.file.previous", "calibration.update", "calibration.use_video_lut.backup", "colorimeter_correction_matrix_file", "comport.number", "copyright", "display.number", "display_lut.link", "display_lut.number", "displays", "dry_run", "enumerate_ports.auto", "gamma", "instruments", "lang", "last_3dlut_path", "last_cal_path", "last_cal_or_icc_path", "last_filedialog_path", "last_icc_path", "last_ti1_path", "last_ti3_path", "last_vrml_path", "log.autoshow", "log.show", "lut_viewer.show", "lut_viewer.show_actual_lut", "measurement_mode", "measurement_mode.backup", "measurement_mode.projector", "measurement.name.expanded", "measurement.play_sound", "measurement.save_path", "profile.install_scope", "profile.license", "profile.load_on_login", "profile.name", "profile.name.expanded", "profile.save_path", "profile_loader.error.show_msg", "profile_loader.verify_calibration", "profile.update", "position.x", "position.y", "position.info.x", "position.info.y", "position.lut_viewer.x", "position.lut_viewer.y", "position.lut3dframe.x", "position.lut3dframe.y", "position.synthiccframe.x", "position.synthiccframe.y", "position.profile_info.x", "position.profile_info.y", "position.progress.x", "position.progress.y", "position.reportframe.x", "position.reportframe.y", "position.tcgen.x", "position.tcgen.y", "recent_cals", "report.pack_js", "settings.changed", "show_advanced_calibration_options", "skip_legacy_serial_ports", "sudo.preserve_environment", "tc_precond_profile", "tc_vrml_lab", "tc_vrml_device", "tc.show", "testchart.file.backup", "trc.backup", "trc.type.backup", "untethered.measure.auto", "update_check" ] override = { "calibration.black_luminance": None, "calibration.file": None, "calibration.luminance": None, "gamap_src_viewcond": "mt", "gamap_out_viewcond": "mt", "trc": defaults["gamma"], "whitepoint.colortemp": None, "whitepoint.x": None, "whitepoint.y": None } for name in defaults: if name not in skip and name not in override: if (len(include) == 0 or False in [name.find(item) != 0 for item in include]) and \ (len(exclude) == 0 or not (False in [name.find(item) != 0 for item in exclude])): if verbose >= 3: safe_print("Restoring %s to %s" % (name, defaults[name])) setcfg(name, defaults[name]) for name in override: if (len(include) == 0 or False in [name.find(item) != 0 for item in include]) and \ (len(exclude) == 0 or not (False in [name.find(item) != 0 for item in exclude])): setcfg(name, override[name]) if event: writecfg() self.update_displays() self.update_controls() self.update_menus() if hasattr(self, "extra_args"): self.extra_args.update_controls() if hasattr(self, "gamapframe"): self.gamapframe.update_controls() if hasattr(self, "tcframe"): self.tcframe.tc_update_controls() def cal_changed(self, setchanged=True): """ Called internally when calibration settings controls are changed. Exceptions are the calibration quality and interactive display adjustment controls, which do not cause a 'calibration changed' event. """ if not self.updatingctrls and self.IsShownOnScreen(): # update_controls which is called from cal_changed might cause a # another cal_changed call, in which case we can skip it if debug: safe_print("[D] cal_changed") if setchanged: setcfg("settings.changed", 1) self.worker.options_dispcal = [] if getcfg("calibration.file"): setcfg("calibration.file", None) # Load LUT curves from current display profile (if any, and if # it contains curves) self.load_display_profile_cal(None) self.calibration_file_ctrl.SetStringSelection( lang.getstr("settings.new")) self.calibration_file_ctrl.SetToolTip(None) self.delete_calibration_btn.Disable() self.install_profile_btn.Disable() do_update_controls = self.calibration_update_cb.GetValue() self.calibration_update_cb.SetValue(False) setcfg("calibration.update", 0) self.calibration_update_cb.Disable() setcfg("profile.update", 0) if do_update_controls: self.update_controls() self.settings_discard_changes(keep_changed_state=True) def update_displays(self, update_ccmx_items=False): """ Update the display selector controls. """ if debug: safe_print("[D] update_displays") self.calpanel.Freeze() self.displays = [] for item in self.worker.displays: self.displays += [item.replace("[PRIMARY]", lang.getstr("display.primary"))] self.displays[-1] = lang.getstr(self.displays[-1]) self.display_ctrl.SetItems(self.displays) self.display_ctrl.Enable(len(self.worker.displays) > 1) display_lut_sizer = self.display_ctrl.GetContainingSizer() display_sizer = self.display_lut_link_ctrl.GetContainingSizer() comport_sizer = self.comport_ctrl.GetContainingSizer() use_lut_ctrl = self.worker.has_separate_lut_access() or \ bool(getcfg("use_separate_lut_access")) menubar = self.GetMenuBar() options = menubar.GetMenu(menubar.FindMenu(lang.getstr("menu.options"))) menuitem = options.FindItemById( options.FindItem(lang.getstr("use_separate_lut_access"))) menuitem.Check(use_lut_ctrl) if use_lut_ctrl: self.display_lut_ctrl.Clear() for i, disp in enumerate(self.displays): if self.worker.lut_access[i]: self.display_lut_ctrl.Append(disp) comport_sizer.SetCols(1) comport_sizer.SetRows(2) else: comport_sizer.SetCols(2) comport_sizer.SetRows(1) setcfg("display_lut.link", 1) display_lut_sizer.Show(self.display_label, use_lut_ctrl) display_lut_sizer.Show(self.display_lut_label, use_lut_ctrl) display_lut_sizer.Show(self.display_lut_ctrl, use_lut_ctrl) display_sizer.Show(self.display_lut_link_ctrl, use_lut_ctrl) self.get_set_display(update_ccmx_items) self.calpanel.Layout() self.calpanel.Thaw() self.update_scrollbars() def update_scrollbars(self): self.Freeze() self.calpanel.SetVirtualSize(self.calpanel.GetBestVirtualSize()) self.Thaw() def update_comports(self): """ Update the comport selector control. """ self.comport_ctrl.Freeze() self.comport_ctrl.SetItems(self.worker.instruments) if self.worker.instruments: self.comport_ctrl.SetSelection( min(max(0, len(self.worker.instruments) - 1), max(0, int(getcfg("comport.number")) - 1))) self.comport_ctrl.Enable(len(self.worker.instruments) > 1) self.comport_ctrl.Thaw() self.comport_ctrl_handler() def update_measurement_mode(self): """ Update the measurement mode control. """ measurement_mode = getcfg("measurement_mode") instrument_features = self.worker.get_instrument_features() if instrument_features.get("adaptive_mode") and ( self.worker.argyll_version[0:3] > [1, 1, 0] or ( self.worker.argyll_version[0:3] == [1, 1, 0] and not "Beta" in self.worker.argyll_version_string and not "RC1" in self.worker.argyll_version_string and not "RC2" in self.worker.argyll_version_string)) and \ getcfg("measurement_mode.adaptive"): measurement_mode += "V" if instrument_features.get("highres_mode") and \ getcfg("measurement_mode.highres"): measurement_mode += "H" self.measurement_mode_ctrl.SetSelection( min(self.measurement_modes_ba[self.get_instrument_type()].get( measurement_mode, 1), len(self.measurement_mode_ctrl.GetItems()) - 1)) def update_measurement_modes(self): """ Populate the measurement mode control. """ instrument_name = self.worker.get_instrument_name() instrument_type = self.get_instrument_type() measurement_mode = getcfg("measurement_mode") #if self.get_instrument_type() == "spect": #measurement_mode = strtr(measurement_mode, {"c": "", "l": ""}) if instrument_name != "DTP92": measurement_modes = dict({instrument_type: [lang.getstr("measurement_mode.refresh"), lang.getstr("measurement_mode.lcd")]}) measurement_modes_ab = dict({instrument_type: ["c", "l"]}) else: measurement_modes = dict({instrument_type: [lang.getstr("measurement_mode.refresh")]}) measurement_modes_ab = dict({instrument_type: ["c"]}) if instrument_name == "Spyder4" and self.worker.spyder4_cal_exists(): # Argyll CMS 1.3.6 # See http://www.argyllcms.com/doc/instruments.html#spyd4 # for description of supported modes measurement_modes[instrument_type].extend([lang.getstr("measurement_mode.lcd.ccfl"), lang.getstr("measurement_mode.lcd.wide_gamut.ccfl"), lang.getstr("measurement_mode.lcd.white_led"), lang.getstr("measurement_mode.lcd.wide_gamut.rgb_led"), lang.getstr("measurement_mode.lcd.ccfl.2")]) if self.worker.argyll_version >= [1, 5, 0]: measurement_modes_ab[instrument_type].extend(["f", "L", "e", "B", "x"]) else: measurement_modes_ab[instrument_type].extend(["3", "4", "5", "6", "7"]) elif instrument_name == "ColorHug": # Argyll CMS 1.3.6, spectro/colorhug.c, colorhug_disptypesel # Note: projector mode (-yp) is not the same as ColorMunki # projector mode! (-p) measurement_modes[instrument_type].extend([lang.getstr("projector"), lang.getstr("measurement_mode.lcd.white_led"), lang.getstr("measurement_mode.factory"), lang.getstr("measurement_mode.raw")]) measurement_modes_ab[instrument_type].extend(["p", "e", "F", "R"]) elif (instrument_name == "DTP94" and self.worker.argyll_version >= [1, 5, 0]): # Argyll CMS 1.5.x introduces new measurement mode measurement_modes[instrument_type].extend([lang.getstr("measurement_mode.generic")]) measurement_modes_ab[instrument_type].append("g") elif instrument_name == "ColorMunki Smile": # Only supported in Argyll CMS 1.5.x and newer measurement_modes[instrument_type] = [lang.getstr("measurement_mode.lcd.ccfl"), lang.getstr("measurement_mode.lcd.white_led")] measurement_modes_ab[instrument_type] = ["f", "e"] elif (instrument_name == "Colorimtre HCFR" and self.worker.argyll_version >= [1, 5, 0]): # Argyll CMS 1.5.x introduces new measurement mode measurement_modes[instrument_type].extend([lang.getstr("measurement_mode.raw")]) measurement_modes_ab[instrument_type].append("R") instrument_features = self.worker.get_instrument_features() if instrument_features.get("projector_mode") and \ self.worker.argyll_version >= [1, 1, 0]: # Projector mode introduced in Argyll 1.1.0 Beta measurement_modes[instrument_type] += [lang.getstr("projector")] measurement_modes_ab[instrument_type] += ["p"] if instrument_features.get("adaptive_mode") and ( self.worker.argyll_version[0:3] > [1, 1, 0] or ( self.worker.argyll_version[0:3] == [1, 1, 0] and not "Beta" in self.worker.argyll_version_string and not "RC1" in self.worker.argyll_version_string and not "RC2" in self.worker.argyll_version_string)): # Adaptive mode introduced in Argyll 1.1.0 RC3 for key in iter(measurement_modes): instrument_modes = list(measurement_modes[key]) for i, mode in reversed(zip(xrange(0, len(instrument_modes)), instrument_modes)): if mode == lang.getstr("default"): mode = lang.getstr("measurement_mode.adaptive") else: mode = "%s %s" % (mode, lang.getstr("measurement_mode.adaptive")) measurement_modes[key].insert(i + 1, mode) modesig = measurement_modes_ab[key][i] measurement_modes_ab[key].insert(i + 1, (modesig or "") + "V") if getcfg("measurement_mode.adaptive"): measurement_mode += "V" if instrument_features.get("highres_mode"): for key in iter(measurement_modes): instrument_modes = list(measurement_modes[key]) for i, mode in reversed(zip(xrange(0, len(instrument_modes)), instrument_modes)): if mode == lang.getstr("default"): mode = lang.getstr("measurement_mode.highres") else: mode = "%s %s" % (mode, lang.getstr("measurement_mode.highres")) measurement_modes[key].insert(i + 1, mode) modesig = measurement_modes_ab[key][i] measurement_modes_ab[key].insert(i + 1, (modesig or "") + "H") if getcfg("measurement_mode.highres"): measurement_mode += "H" self.measurement_modes_ab = dict(zip(measurement_modes_ab.keys(), [dict(zip(range(len(measurement_modes_ab[key])), measurement_modes_ab[key])) for key in measurement_modes_ab])) self.measurement_modes_ba = dict(zip(measurement_modes_ab.keys(), [swap_dict_keys_values(self.measurement_modes_ab[key]) for key in measurement_modes_ab])) self.measurement_mode_ctrl.Freeze() self.measurement_mode_ctrl.SetItems(measurement_modes[instrument_type]) self.measurement_mode_ctrl.SetSelection( min(self.measurement_modes_ba[instrument_type].get(measurement_mode, 1), len(measurement_modes[instrument_type]) - 1)) setcfg("measurement_mode", (self.get_measurement_mode() or "l")[0]) self.measurement_mode_ctrl.Enable( bool(self.worker.instruments) and len(measurement_modes[instrument_type]) > 1 and bool(getcfg("measurement_mode_unlocked"))) self.measurement_mode_ctrl.Thaw() def update_colorimeter_correction_matrix_ctrl(self): """ Show or hide the colorimeter correction matrix controls """ self.calpanel.Freeze() instrument_features = self.worker.get_instrument_features() show_control = (self.worker.instrument_can_use_ccxx() and not is_ccxx_testchart()) self.colorimeter_correction_matrix_ctrl.GetContainingSizer().Show( self.colorimeter_correction_matrix_ctrl, show_control) self.colorimeter_correction_matrix_label.GetContainingSizer().Show( self.colorimeter_correction_matrix_label, show_control) self.colorimeter_correction_matrix_btn.GetContainingSizer().Show( self.colorimeter_correction_matrix_btn, show_control) self.colorimeter_correction_web_btn.GetContainingSizer().Show( self.colorimeter_correction_web_btn, show_control) self.calpanel.Layout() self.calpanel.Thaw() self.update_scrollbars() def delete_colorimeter_correction_matrix_ctrl_item(self, path): if path in self.ccmx_cached_paths: self.ccmx_cached_paths.remove(path) if path in self.ccmx_cached_descriptors: del self.ccmx_cached_descriptors[path] if path in self.ccmx_instruments: del self.ccmx_instruments[path] delete = False for key, value in self.ccmx_mapping.iteritems(): if value == path: delete = True break if delete: del self.ccmx_mapping[key] def update_colorimeter_correction_matrix_ctrl_items(self, force=False, warn_on_mismatch=False): """ Show the currently selected correction matrix and list all files in ccmx directories below force If True, reads the ccmx directory again, otherwise uses a previously cached result if available """ items = [lang.getstr("colorimeter_correction.file.none"), lang.getstr("auto")] self.ccmx_item_paths = [] index = 0 ccmx = getcfg("colorimeter_correction_matrix_file").split(":", 1) if len(ccmx) > 1 and not os.path.isfile(ccmx[1]): ccmx = ccmx[:1] if force or not getattr(self, "ccmx_cached_paths", None): ccmx_paths = [] ccss_paths = [] if sys.platform != "darwin": for commonappdata in config.commonappdata: ccmx_paths += glob.glob(os.path.join(commonappdata, "color", "*.ccmx")) ccmx_paths += glob.glob(os.path.join(commonappdata, "ArgyllCMS", "*.ccmx")) ccss_paths += glob.glob(os.path.join(commonappdata, "color", "*.ccss")) ccss_paths += glob.glob(os.path.join(commonappdata, "ArgyllCMS", "*.ccss")) ccmx_paths += glob.glob(os.path.join(config.appdata, "color", "*.ccmx")) ccss_paths += glob.glob(os.path.join(config.appdata, "color", "*.ccss")) else: ccmx_paths += glob.glob(os.path.join(config.library, "color", "*.ccmx")) ccmx_paths += glob.glob(os.path.join(config.library, "ArgyllCMS", "*.ccmx")) ccmx_paths += glob.glob(os.path.join(config.library_home, "color", "*.ccmx")) ccss_paths += glob.glob(os.path.join(config.library, "color", "*.ccss")) ccss_paths += glob.glob(os.path.join(config.library, "ArgyllCMS", "*.ccss")) ccss_paths += glob.glob(os.path.join(config.library_home, "color", "*.ccss")) ccmx_paths += glob.glob(os.path.join(config.appdata, "ArgyllCMS", "*.ccmx")) ccss_paths += glob.glob(os.path.join(config.appdata, "ArgyllCMS", "*.ccss")) ccmx_paths.sort(key=os.path.basename) ccss_paths.sort(key=os.path.basename) self.ccmx_cached_paths = ccmx_paths + ccss_paths self.ccmx_cached_descriptors = OrderedDict() self.ccmx_instruments = {} self.ccmx_mapping = {} types = {"ccss": lang.getstr("spectral").replace(":", ""), "ccmx": lang.getstr("matrix").replace(":", "")} for i, path in enumerate(self.ccmx_cached_paths): if self.ccmx_cached_descriptors.get(path): desc = self.ccmx_cached_descriptors[path] elif os.path.isfile(path): try: cgats = CGATS.CGATS(path) except CGATS.CGATSError, exception: safe_print("%s:" % path, exception) continue desc = safe_unicode(cgats.get_descriptor(), "UTF-8") # If the description is not the same as the 'sane' # filename, add the filename after the description # (max 31 chars) # See also colorimeter_correction_check_overwite, the # way the filename is processed must be the same if (re.sub(r"[\\/:*?\"<>|]+", "_", make_argyll_compatible_path(desc)) != os.path.splitext(os.path.basename(path))[0]): desc = "%s <%s>" % (ellipsis(desc, 66, "m"), ellipsis(os.path.basename(path), 31, "m")) else: desc = ellipsis(desc, 100, "m") self.ccmx_cached_descriptors[path] = desc self.ccmx_instruments[path] = get_canonical_instrument_name( str(cgats.queryv1("INSTRUMENT") or "").replace("eye-one display", "i1 Display")) key = "%s\0%s" % (self.ccmx_instruments[path], str(cgats.queryv1("DISPLAY") or "")) if (not self.ccmx_mapping.get(key) or (len(ccmx) > 1 and path == ccmx[1])): # Prefer the selected CCMX self.ccmx_mapping[key] = path else: continue if (self.worker.get_instrument_name().lower().replace(" ", "") in self.ccmx_instruments.get(path, "").lower().replace(" ", "") or (path.lower().endswith(".ccss") and self.worker.instrument_supports_ccss())): # Only add the correction to the list if it matches the # currently selected instrument or if it is a CCSS if len(ccmx) > 1 and ccmx[0] != "AUTO" and ccmx[1] == path: index = len(items) items.append("%s: %s" % (types.get(os.path.splitext(path)[1].lower()[1:]), desc)) self.ccmx_item_paths.append(path) if (len(ccmx) > 1 and ccmx[1] and ccmx[1] not in self.ccmx_cached_paths and (not ccmx[1].lower().endswith(".ccss") or self.worker.instrument_supports_ccss())): self.ccmx_cached_paths.insert(0, ccmx[1]) desc = self.ccmx_cached_descriptors.get(ccmx[1]) if not desc and os.path.isfile(ccmx[1]): try: cgats = CGATS.CGATS(ccmx[1]) except CGATS.CGATSError, exception: safe_print("%s:" % ccmx[1], exception) else: desc = safe_unicode(cgats.get_descriptor(), "UTF-8") # If the description is not the same as the 'sane' # filename, add the filename after the description # (max 31 chars) # See also colorimeter_correction_check_overwite, the # way the filename is processed must be the same if (re.sub(r"[\\/:*?\"<>|]+", "_", make_argyll_compatible_path(desc)) != os.path.splitext(os.path.basename(ccmx[1]))[0]): desc = "%s <%s>" % (ellipsis(desc, 66, "m"), ellipsis(os.path.basename(ccmx[1]), 31, "m")) else: desc = ellipsis(desc, 100, "m") self.ccmx_cached_descriptors[ccmx[1]] = desc self.ccmx_instruments[ccmx[1]] = get_canonical_instrument_name( str(cgats.queryv1("INSTRUMENT") or "").replace("eye-one display", "i1 Display")) key = "%s\0%s" % (self.ccmx_instruments[ccmx[1]], str(cgats.queryv1("DISPLAY") or "")) self.ccmx_mapping[key] = ccmx[1] if (desc and (self.worker.get_instrument_name().lower().replace(" ", "") in self.ccmx_instruments.get(ccmx[1], "").lower().replace(" ", "") or ccmx[1].lower().endswith(".ccss"))): # Only add the correction to the list if it matches the # currently selected instrument or if it is a CCSS items.insert(2, "%s: %s" % (types.get(os.path.splitext(ccmx[1])[1].lower()[1:]), desc)) self.ccmx_item_paths.insert(0, ccmx[1]) if ccmx[0] != "AUTO": index = 2 if ccmx[0] == "AUTO": if len(ccmx) < 2: ccmx.append("") display_name = self.worker.get_display_name(False, True) if self.worker.instrument_supports_ccss(): # Prefer CCSS ccmx[1] = self.ccmx_mapping.get("\0%s" % display_name, "") if not self.worker.instrument_supports_ccss() or not ccmx[1]: ccmx[1] = self.ccmx_mapping.get("%s\0%s" % (self.worker.get_instrument_name(), display_name), "") if (self.worker.instrument_can_use_ccxx() and len(ccmx) > 1 and ccmx[1] and ccmx[1] not in self.ccmx_item_paths): # CCMX does not match the currently selected instrument, # don't use ccmx = [""] if warn_on_mismatch: show_result_dialog(Warn(lang.getstr("colorimeter_correction.instrument_mismatch")), self) elif ccmx[0] == "AUTO": index = 1 if ccmx[1]: items[1] += " (%s: %s)" % (types.get(os.path.splitext(ccmx[1])[1].lower()[1:]), self.ccmx_cached_descriptors[ccmx[1]]) else: items[1] += " (%s)" % lang.getstr("colorimeter_correction.file.none") setcfg("colorimeter_correction_matrix_file", ":".join(ccmx)) self.colorimeter_correction_matrix_ctrl.SetItems(items) self.colorimeter_correction_matrix_ctrl.SetSelection(index) setcfg("measurement_mode_unlocked", 1) if self.worker.instrument_can_use_ccxx() and len(ccmx) > 1 and ccmx[1]: tooltip = ccmx[1] try: cgats = CGATS.CGATS(ccmx[1]) except CGATS.CGATSError, exception: safe_print("%s:" % ccmx[1], exception) else: base_id = cgats.queryv1("DISPLAY_TYPE_BASE_ID") refresh = cgats.queryv1("DISPLAY_TYPE_REFRESH") mode = None if base_id: # Set measurement mode according to base ID if self.worker.get_instrument_name() == "ColorHug": mode = {1: "R", 2: "F"}.get(base_id) elif self.worker.get_instrument_name() == "ColorMunki Smile": mode = {1: "f"}.get(base_id) elif self.worker.get_instrument_name() == "Colorimtre HCFR": mode = {1: "R"}.get(base_id) else: mode = {1: "l", 2: "c", 3: "g"}.get(base_id) elif refresh == "NO": mode = "l" elif refresh == "YES": mode = "c" if mode: setcfg("measurement_mode", mode) setcfg("measurement_mode_unlocked", 0) self.update_measurement_mode() else: tooltip = "" self.update_main_controls() self.colorimeter_correction_matrix_ctrl.SetToolTipString(tooltip) def update_main_controls(self): """ Enable/disable the calibrate and profile buttons based on available Argyll functionality. """ self.panel.Freeze() update_cal = self.calibration_update_cb.GetValue() self.measurement_mode_ctrl.Enable( not update_cal and bool(self.worker.instruments) and len(self.measurement_mode_ctrl.GetItems()) > 1 and bool(getcfg("measurement_mode_unlocked"))) update_profile = self.calibration_update_cb.GetValue() and is_profile() enable_profile = not update_profile and not is_ccxx_testchart() self.whitepoint_measure_btn.Enable(bool(self.worker.instruments) and not update_cal) self.ambient_measure_btn.Enable(bool(self.worker.instruments) and not update_cal) self.calibrate_btn.Enable(not is_ccxx_testchart() and bool(self.worker.displays) and True in self.worker.lut_access and bool(self.worker.instruments) and config.get_display_name() != "Untethered") self.calibrate_and_profile_btn.Enable(enable_profile and bool(self.worker.displays) and True in self.worker.lut_access and bool(self.worker.instruments) and config.get_display_name() != "Untethered") self.profile_btn.Enable(enable_profile and not update_cal and bool(self.worker.displays) and bool(self.worker.instruments)) self.panel.Thaw() def update_calibration_file_ctrl(self, silent=False): """ Update items shown in the calibration file control and set a tooltip with the path of the currently selected file """ cal = getcfg("calibration.file") if cal: result = check_file_isfile(cal, silent=silent) if isinstance(result, Exception) and not silent: show_result_dialog(result, self) else: result = False if not isinstance(result, Exception) and result: filename, ext = os.path.splitext(cal) if not cal in self.recent_cals: self.recent_cals.append(cal) recent_cals = [] for recent_cal in self.recent_cals: if recent_cal not in self.presets: recent_cals += [recent_cal] setcfg("recent_cals", os.pathsep.join(recent_cals)) self.calibration_file_ctrl.Append( lang.getstr(os.path.basename(cal))) # The case-sensitive index could fail because of # case insensitive file systems, e.g. if the # stored filename string is # "C:\Users\Name\AppData\dispcalGUI\storage\MyFile" # but the actual filename is # "C:\Users\Name\AppData\dispcalGUI\storage\myfile" # (maybe because the user renamed the file) idx = index_fallback_ignorecase(self.recent_cals, cal) self.calibration_file_ctrl.SetSelection(idx) self.calibration_file_ctrl.SetToolTipString(cal) if ext.lower() in (".icc", ".icm"): profile_path = cal else: profile_path = filename + profile_ext profile_exists = os.path.exists(profile_path) else: filename = None if cal in self.recent_cals: # The case-sensitive index could fail because of # case insensitive file systems, e.g. if the # stored filename string is # "C:\Users\Name\AppData\dispcalGUI\storage\MyFile" # but the actual filename is # "C:\Users\Name\AppData\dispcalGUI\storage\myfile" # (maybe because the user renamed the file) idx = index_fallback_ignorecase(self.recent_cals, cal) self.recent_cals.remove(cal) self.calibration_file_ctrl.Delete(idx) cal = None self.calibration_file_ctrl.SetStringSelection( lang.getstr("settings.new")) self.calibration_file_ctrl.SetToolTip(None) setcfg("calibration.file", None) setcfg("calibration.update", 0) profile_path = None profile_exists = False return cal, filename, profile_path, profile_exists def update_controls(self, update_profile_name=True, update_ccmx_items=True, silent=False): """ Update all controls based on configuration and available Argyll functionality. """ self.updatingctrls = True self.panel.Freeze() (cal, filename, profile_path, profile_exists) = self.update_calibration_file_ctrl(silent) self.delete_calibration_btn.Enable(bool(cal) and cal not in self.presets) self.install_profile_btn.Enable(profile_exists and profile_path == cal and cal not in self.presets) is_profile_ = is_profile(include_display_profile=True) self.profile_info_btn.Enable(is_profile_) enable_update = (bool(cal) and os.path.exists(filename + ".cal") and can_update_cal(filename + ".cal")) if not enable_update: setcfg("calibration.update", 0) self.calibration_update_cb.Enable(enable_update) self.calibration_update_cb.SetValue( bool(getcfg("calibration.update"))) update_cal = self.calibration_update_cb.GetValue() if not update_cal or not profile_exists: setcfg("profile.update", "0") update_profile = self.calibration_update_cb.GetValue() and profile_exists enable_profile = not(update_profile) if update_ccmx_items: self.update_colorimeter_correction_matrix_ctrl_items() self.whitepoint_ctrl.Enable(not update_cal) self.whitepoint_colortemp_textctrl.Enable(not update_cal) self.whitepoint_colortemp_locus_ctrl.Enable(not update_cal) self.whitepoint_x_textctrl.Enable(not update_cal) self.whitepoint_y_textctrl.Enable(not update_cal) self.whitepoint_measure_btn.Enable(not update_cal) self.luminance_ctrl.Enable(not update_cal) self.luminance_textctrl.Enable(not update_cal) self.black_luminance_ctrl.Enable(not update_cal) self.black_luminance_textctrl.Enable(not update_cal) self.trc_ctrl.Enable(not update_cal) self.trc_textctrl.Enable(not update_cal) self.trc_type_ctrl.Enable(not update_cal) self.ambient_viewcond_adjust_cb.Enable(not update_cal) self.ambient_viewcond_adjust_info.Enable(not update_cal) self.black_output_offset_ctrl.Enable(not update_cal) self.black_output_offset_intctrl.Enable(not update_cal) self.black_point_correction_auto_cb.Enable(not update_cal) self.black_point_correction_ctrl.Enable(not update_cal) self.black_point_correction_intctrl.Enable(not update_cal) self.black_point_correction_auto_handler() self.update_black_point_rate_ctrl() self.update_drift_compensation_ctrls() self.interactive_display_adjustment_cb.Enable(not update_cal) self.testchart_btn.Enable(enable_profile) self.create_testchart_btn.Enable(enable_profile) self.profile_type_ctrl.Enable(enable_profile) self.update_measurement_mode() self.whitepoint_colortemp_textctrl.SetValue( str(stripzeros(getcfg("whitepoint.colortemp")))) self.whitepoint_colortemp_locus_ctrl.SetSelection( self.whitepoint_colortemp_loci_ba.get( getcfg("whitepoint.colortemp.locus"), self.whitepoint_colortemp_loci_ba.get( defaults["whitepoint.colortemp.locus"]))) if getcfg("whitepoint.colortemp", False): self.whitepoint_ctrl.SetSelection(1) elif getcfg("whitepoint.x", False) and getcfg("whitepoint.y", False): self.whitepoint_x_textctrl.ChangeValue(str(getcfg("whitepoint.x"))) self.whitepoint_y_textctrl.ChangeValue(str(getcfg("whitepoint.y"))) self.whitepoint_ctrl.SetSelection(2) else: self.whitepoint_ctrl.SetSelection(0) self.whitepoint_ctrl_handler( CustomEvent(wx.EVT_CHOICE.evtType[0], self.whitepoint_ctrl), False) if getcfg("calibration.luminance", False): self.luminance_ctrl.SetSelection(1) else: self.luminance_ctrl.SetSelection(0) self.luminance_textctrl.ChangeValue( str(getcfg("calibration.luminance"))) self.luminance_textctrl.Show(bool(getcfg("calibration.luminance", False))) self.luminance_textctrl_label.Show(bool(getcfg("calibration.luminance", False))) self.whitelevel_drift_compensation.SetValue( bool(getcfg("drift_compensation.whitelevel"))) if getcfg("calibration.black_luminance", False): self.black_luminance_ctrl.SetSelection(1) else: self.black_luminance_ctrl.SetSelection(0) self.black_luminance_textctrl.ChangeValue( "%.6f" % getcfg("calibration.black_luminance")) self.black_luminance_textctrl.Show( not update_cal and bool(getcfg("calibration.black_luminance", False))) self.black_luminance_textctrl_label.Show( not update_cal and bool(getcfg("calibration.black_luminance", False))) self.blacklevel_drift_compensation.SetValue( bool(getcfg("drift_compensation.blacklevel"))) trc = getcfg("trc") bt1886 = (trc == 2.4 and getcfg("trc.type") == "G" and getcfg("calibration.black_output_offset") == 0) if trc in ("l", "709", "240", "s"): self.trc_textctrl.Hide() self.trc_type_ctrl.SetSelection(0) self.trc_type_ctrl.Hide() if trc == "l": self.trc_ctrl.SetSelection(1) elif trc == "709": self.trc_ctrl.SetSelection(2) elif trc == "240": self.trc_ctrl.SetSelection(4) elif trc == "s": self.trc_ctrl.SetSelection(5) elif bt1886: self.trc_ctrl.SetSelection(3) self.trc_textctrl.SetValue(str(trc)) self.trc_textctrl.Hide() self.trc_type_ctrl.SetSelection(1) self.trc_type_ctrl.Hide() elif trc: self.trc_ctrl.SetSelection(0) self.trc_textctrl.SetValue(str(trc)) self.trc_textctrl.Show() self.trc_textctrl.Enable(not update_cal) self.trc_type_ctrl.SetSelection( self.trc_types_ba.get(getcfg("trc.type"), self.trc_types_ba.get(defaults["trc.type"]))) self.trc_type_ctrl.Show(getcfg("show_advanced_calibration_options")) self.trc_type_ctrl.Enable(not update_cal) self.ambient_viewcond_adjust_cb.SetValue( bool(int(getcfg("calibration.ambient_viewcond_adjust")))) self.ambient_viewcond_adjust_textctrl.ChangeValue( str(getcfg("calibration.ambient_viewcond_adjust.lux"))) self.ambient_viewcond_adjust_textctrl.Enable( not update_cal and bool(int(getcfg("calibration.ambient_viewcond_adjust")))) self.profile_type_ctrl.SetSelection( self.profile_types_ba.get(getcfg("profile.type"), self.profile_types_ba.get(defaults["profile.type"]))) self.update_black_output_offset_ctrl() self.black_point_correction_ctrl.SetValue( int(Decimal(str(getcfg("calibration.black_point_correction"))) * 100)) self.black_point_correction_intctrl.SetValue( int(Decimal(str(getcfg("calibration.black_point_correction"))) * 100)) self.black_point_rate_ctrl.SetValue( int(Decimal(str(getcfg("calibration.black_point_rate"))) * 100)) self.black_point_rate_floatctrl.SetValue( getcfg("calibration.black_point_rate")) q = self.quality_ba.get(getcfg("calibration.quality"), self.quality_ba.get( defaults["calibration.quality"])) self.calibration_quality_ctrl.SetValue(q) self.set_calibration_quality_label(self.quality_ab[q]) self.interactive_display_adjustment_cb.SetValue(not update_cal and bool(int(getcfg("calibration.interactive_display_adjustment")))) self.black_point_compensation_cb.Enable(not update_cal) self.black_point_compensation_cb.SetValue( bool(int(getcfg("profile.black_point_compensation")))) self.testchart_ctrl.Enable(enable_profile) if self.set_default_testchart() is None: self.set_testchart() simple_gamma_model = self.get_profile_type() in ("g", "G") if simple_gamma_model: q = 3 else: q = self.quality_ba.get(getcfg("profile.quality"), self.quality_ba.get( defaults["profile.quality"])) - 1 self.profile_quality_ctrl.SetValue(q) if q == 1: self.profile_quality_info.SetLabel( lang.getstr("calibration.quality.low")) elif q == 2: self.profile_quality_info.SetLabel( lang.getstr("calibration.quality.medium")) elif q == 3: self.profile_quality_info.SetLabel( lang.getstr("calibration.quality.high")) elif q == 4: self.profile_quality_info.SetLabel( lang.getstr("calibration.quality.ultra")) self.profile_quality_ctrl.Enable(enable_profile and not simple_gamma_model) enable_gamap = self.get_profile_type() in ("l", "x", "X") self.gamap_btn.Enable(enable_profile and enable_gamap) self.low_quality_b2a_cb.SetValue(enable_gamap and getcfg("profile.quality.b2a") == "l") self.low_quality_b2a_cb.Enable(enable_gamap) if hasattr(self, "gamapframe"): self.gamapframe.update_controls() if getattr(self, "lut3dframe", None): self.lut3dframe.set_profile("output") if getattr(self, "reportframe", None): self.reportframe.set_profile("output") if update_profile_name: self.profile_name_textctrl.ChangeValue(getcfg("profile.name")) self.update_profile_name() self.update_main_controls() self.panel.Thaw() self.updatingctrls = False def update_black_output_offset_ctrl(self): self.black_output_offset_ctrl.SetValue( int(Decimal(str(getcfg("calibration.black_output_offset"))) * 100)) self.black_output_offset_intctrl.SetValue( int(Decimal(str(getcfg("calibration.black_output_offset"))) * 100)) def update_black_point_rate_ctrl(self): self.calpanel.Freeze() enable = not(self.calibration_update_cb.GetValue()) show = (bool(getcfg("show_advanced_calibration_options")) and defaults["calibration.black_point_rate.enabled"]) self.black_point_rate_label.GetContainingSizer().Show( self.black_point_rate_label, show) self.black_point_rate_ctrl.GetContainingSizer().Show( self.black_point_rate_ctrl, show) self.black_point_rate_ctrl.Enable( enable and getcfg("calibration.black_point_correction") < 1 and defaults["calibration.black_point_rate.enabled"]) self.black_point_rate_floatctrl.GetContainingSizer().Show( self.black_point_rate_floatctrl, show) self.black_point_rate_floatctrl.Enable( enable and getcfg("calibration.black_point_correction") < 1 and defaults["calibration.black_point_rate.enabled"]) self.calpanel.Layout() self.calpanel.Thaw() def update_drift_compensation_ctrls(self): self.calpanel.Freeze() self.blacklevel_drift_compensation.GetContainingSizer().Show( self.blacklevel_drift_compensation, self.worker.argyll_version >= [1, 3, 0]) self.whitelevel_drift_compensation.GetContainingSizer().Show( self.whitelevel_drift_compensation, self.worker.argyll_version >= [1, 3, 0]) self.calpanel.Layout() self.calpanel.Thaw() def blacklevel_drift_compensation_handler(self, event): setcfg("drift_compensation.blacklevel", int(self.blacklevel_drift_compensation.GetValue())) def whitelevel_drift_compensation_handler(self, event): setcfg("drift_compensation.whitelevel", int(self.whitelevel_drift_compensation.GetValue())) def calibration_update_ctrl_handler(self, event): if debug: safe_print("[D] calibration_update_ctrl_handler called for ID %s " "%s event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) setcfg("calibration.update", int(self.calibration_update_cb.GetValue())) setcfg("profile.update", int(self.calibration_update_cb.GetValue() and is_profile())) self.update_controls() def enable_spyder2_handler(self, event): self.update_menus() if check_set_argyll_bin(): cmd, args = get_argyll_util("spyd2en"), ["-v"] if sys.platform in ("darwin", "win32"): # Look for Spyder.lib/CVSpyder.dll ourself because spyd2en will # only try some fixed paths if sys.platform == "darwin": wildcard = os.path.join(os.path.sep, "Applications", "Spyder2*", "Spyder2*.app", "Contents", "MacOSClassic", "Spyder.lib") else: wildcard = os.path.join(getenvu("PROGRAMFILES", ""), "ColorVision", "Spyder2*", "CVSpyder.dll") safe_print(u"Looking for install at '%s'" % wildcard) for path in glob.glob(wildcard): args += [path] break result = self.worker.exec_cmd(cmd, args, capture_output=True, skip_scripts=True, silent=False, asroot=self.worker.argyll_version < [1, 2, 0] or (sys.platform == "darwin" and mac_ver()[0] >= '10.6'), title=lang.getstr("enable_spyder2")) if not isinstance(result, Exception) and result: InfoDialog(self, msg=lang.getstr("enable_spyder2_success"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), log=False) self.update_menus() else: if isinstance(result, Exception): show_result_dialog(result, self) if getcfg("dry_run"): return # prompt for installer executable dlg = ConfirmDialog(self, msg=lang.getstr("locate_spyder2_setup"), ok=lang.getstr("continue"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information")) result = dlg.ShowModal() if result != wx.ID_OK: return defaultDir, defaultFile = expanduseru("~"), "" dlg = wx.FileDialog(self, lang.getstr("file.select"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.any") + "|*", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() path = dlg.GetPath() dlg.Destroy() if result == wx.ID_OK: if not os.path.exists(path): InfoDialog(self, msg=lang.getstr("file.missing", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return cmd, args = get_argyll_util("spyd2en"), ["-v", path] result = self.worker.exec_cmd(cmd, args, capture_output=True, skip_scripts=True, silent=False, asroot=self.worker.argyll_version < [1, 2, 0] or (sys.platform == "darwin" and mac_ver()[0] >= '10.6'), title=lang.getstr("enable_spyder2")) if not isinstance(result, Exception) and result: InfoDialog(self, msg=lang.getstr("enable_spyder2_success"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), log=False) self.update_menus() else: if isinstance(result, Exception): show_result_dialog(result, self) InfoDialog(self, msg=lang.getstr("enable_spyder2_failure"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error"), log=False) def extra_args_handler(self, event): if not hasattr(self, "extra_args"): self.extra_args = ExtraArgsFrame(self) self.extra_args.Center() if self.extra_args.IsShownOnScreen(): self.extra_args.Raise() else: self.extra_args.Show() def use_separate_lut_access_handler(self, event): setcfg("use_separate_lut_access", int(self.menuitem_use_separate_lut_access.IsChecked())) self.update_displays() def do_not_use_video_lut_handler(self, event): do_not_use_video_lut = self.menuitem_do_not_use_video_lut.IsChecked() display_name = config.get_display_name() recommended = {"madVR": True}.get(display_name, False) if do_not_use_video_lut != recommended: dlg = ConfirmDialog(self, msg=lang.getstr("calibration.do_not_use_video_lut.warning"), ok=lang.getstr("yes"), cancel=lang.getstr("no"), bitmap=geticon(32, "dialog-warning"), log=False) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: self.menuitem_do_not_use_video_lut.Check(recommended) return setcfg("calibration.use_video_lut", int(not do_not_use_video_lut)) if display_name != "madVR": setcfg("calibration.use_video_lut.backup", None) def allow_skip_sensor_cal_handler(self, event): setcfg("allow_skip_sensor_cal", int(self.menuitem_allow_skip_sensor_cal.IsChecked())) def enable_argyll_debug_handler(self, event): if not getcfg("argyll.debug"): dlg = ConfirmDialog(self, msg=lang.getstr("argyll.debug.warning1"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning"), log=False) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: self.menuitem_enable_argyll_debug.Check(False) return InfoDialog(self, msg=lang.getstr("argyll.debug.warning2"), bitmap=geticon(32, "dialog-warning"), log=False) setcfg("argyll.debug", int(self.menuitem_enable_argyll_debug.IsChecked())) def enable_dry_run_handler(self, event): setcfg("dry_run", int(self.menuitem_enable_dry_run.IsChecked())) def enable_menus(self, enable=True): for menu, label in self.menubar.GetMenus(): for item in menu.GetMenuItems(): item.Enable(enable) if enable: self.update_menus() def lut3d_create_handler(self, event): """ Assign and initialize the 3DLUT creation window """ if not getattr(self, "lut3dframe", None): self.init_lut3dframe() if self.lut3dframe.IsShownOnScreen(): self.lut3dframe.Raise() else: self.lut3dframe.Show(not self.lut3dframe.IsShownOnScreen()) def profile_quality_warning_handler(self, event): q = self.get_profile_quality() if q == "u": InfoDialog(self, msg=lang.getstr("quality.ultra.warning"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-warning"), log=False) def profile_quality_b2a_ctrl_handler(self, event): if self.low_quality_b2a_cb.GetValue(): v = "l" else: v = None if v != getcfg("profile.quality.b2a"): self.profile_settings_changed() setcfg("profile.quality.b2a", v) def profile_quality_ctrl_handler(self, event): if debug: safe_print("[D] profile_quality_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) oldq = getcfg("profile.quality") q = self.get_profile_quality() if q == oldq: return if q == "l": self.profile_quality_info.SetLabel( lang.getstr("calibration.quality.low")) elif q == "m": self.profile_quality_info.SetLabel(lang.getstr( "calibration.quality.medium")) elif q == "h": self.profile_quality_info.SetLabel(lang.getstr( "calibration.quality.high")) elif q == "u": self.profile_quality_info.SetLabel(lang.getstr( "calibration.quality.ultra")) self.profile_settings_changed() setcfg("profile.quality", q) self.update_profile_name() self.set_default_testchart(False, force=True) wx.CallAfter(self.check_testchart_patches_amount) def calibration_file_ctrl_handler(self, event): if debug: safe_print("[D] calibration_file_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) sel = self.calibration_file_ctrl.GetSelection() if sel > 0: self.load_cal_handler(None, path=self.recent_cals[sel]) else: self.cal_changed(setchanged=False) if getattr(self, "lut3dframe", None): self.lut3dframe.set_profile("output") if getattr(self, "reportframe", None): self.reportframe.set_profile("output") def settings_discard_changes(self, sel=None, keep_changed_state=False): """ Update the calibration file control and remove the leading asterisk (*) from items """ if sel is None: sel = self.calibration_file_ctrl.GetSelection() if not keep_changed_state: setcfg("settings.changed", 0) items = self.calibration_file_ctrl.GetItems() changed = False for j, item in enumerate(items): #if j != sel and item[0] == "*": if item[0] == "*": items[j] = item[2:] changed = True if changed: self.calibration_file_ctrl.Freeze() self.calibration_file_ctrl.SetItems(items) self.calibration_file_ctrl.SetSelection(sel) self.calibration_file_ctrl.Thaw() def settings_confirm_discard(self): """ Show a dialog for user to confirm or cancel discarding changed settings """ sel = self.calibration_file_ctrl.GetSelection() cal = getcfg("calibration.file") or "" if not cal in self.recent_cals: self.recent_cals.append(cal) # The case-sensitive index could fail because of # case insensitive file systems, e.g. if the # stored filename string is # "C:\Users\Name\AppData\dispcalGUI\storage\MyFile" # but the actual filename is # "C:\Users\Name\AppData\dispcalGUI\storage\myfile" # (maybe because the user renamed the file) idx = index_fallback_ignorecase(self.recent_cals, cal) self.calibration_file_ctrl.SetSelection(idx) dlg = ConfirmDialog(self, msg=lang.getstr("warning.discard_changes"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return False self.settings_discard_changes(sel) return True def calibration_quality_ctrl_handler(self, event): if debug: safe_print("[D] calibration_quality_ctrl_handler called for ID %s " "%s event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) q = self.get_calibration_quality() self.set_calibration_quality_label(q) if q != getcfg("calibration.quality"): self.profile_settings_changed() setcfg("calibration.quality", q) self.update_profile_name() def set_calibration_quality_label(self, q): if q == "v": self.calibration_quality_info.SetLabel( lang.getstr("calibration.speed.veryhigh")) elif q == "l": self.calibration_quality_info.SetLabel( lang.getstr("calibration.speed.high")) elif q == "m": self.calibration_quality_info.SetLabel( lang.getstr("calibration.speed.medium")) elif q == "h": self.calibration_quality_info.SetLabel( lang.getstr("calibration.speed.low")) elif q == "u": self.calibration_quality_info.SetLabel( lang.getstr("calibration.speed.verylow")) def interactive_display_adjustment_ctrl_handler(self, event): if debug: safe_print("[D] interactive_display_adjustment_ctrl_handler called " "for ID %s %s event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) v = int(self.interactive_display_adjustment_cb.GetValue()) if v != getcfg("calibration.interactive_display_adjustment"): self.profile_settings_changed() setcfg("calibration.interactive_display_adjustment", v) def black_point_compensation_ctrl_handler(self, event): v = int(self.black_point_compensation_cb.GetValue()) if v != getcfg("profile.black_point_compensation"): self.profile_settings_changed() setcfg("profile.black_point_compensation", v) def black_point_correction_auto_handler(self, event=None): if event: auto = self.black_point_correction_auto_cb.GetValue() setcfg("calibration.black_point_correction.auto", int(auto)) self.cal_changed() else: auto = getcfg("calibration.black_point_correction.auto") self.black_point_correction_auto_cb.SetValue(bool(auto)) show = bool(getcfg("show_advanced_calibration_options")) and not auto self.calpanel.Freeze() self.black_point_correction_ctrl.Show(show) self.black_point_correction_intctrl.Show(show) self.black_point_correction_intctrl_label.Show(show) self.calpanel.Layout() self.calpanel.Refresh() self.calpanel.Thaw() def black_point_correction_ctrl_handler(self, event): if debug: safe_print("[D] black_point_correction_ctrl_handler called for ID " "%s %s event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) if event.GetId() == self.black_point_correction_intctrl.GetId(): self.black_point_correction_ctrl.SetValue( self.black_point_correction_intctrl.GetValue()) else: self.black_point_correction_intctrl.SetValue( self.black_point_correction_ctrl.GetValue()) v = self.get_black_point_correction() if float(v) != getcfg("calibration.black_point_correction"): self.cal_changed() setcfg("calibration.black_point_correction", v) self.black_point_rate_ctrl.Enable( getcfg("calibration.black_point_correction") < 1 and defaults["calibration.black_point_rate.enabled"]) self.black_point_rate_floatctrl.Enable( getcfg("calibration.black_point_correction") < 1 and defaults["calibration.black_point_rate.enabled"]) self.update_profile_name() def black_point_rate_ctrl_handler(self, event): if debug: safe_print("[D] black_point_rate_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) if event.GetId() == self.black_point_rate_floatctrl.GetId(): self.black_point_rate_ctrl.SetValue( int(round(self.black_point_rate_floatctrl.GetValue() * 100))) else: self.black_point_rate_floatctrl.SetValue( self.black_point_rate_ctrl.GetValue() / 100.0) v = self.get_black_point_rate() if v != str(getcfg("calibration.black_point_rate")): self.cal_changed() setcfg("calibration.black_point_rate", v) self.update_profile_name() def black_output_offset_ctrl_handler(self, event): if debug: safe_print("[D] black_output_offset_ctrl_handler called for ID %s " "%s event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) if event.GetId() == self.black_output_offset_intctrl.GetId(): self.black_output_offset_ctrl.SetValue( self.black_output_offset_intctrl.GetValue()) else: self.black_output_offset_intctrl.SetValue( self.black_output_offset_ctrl.GetValue()) v = self.get_black_output_offset() if float(v) > 0 and self.trc_ctrl.GetSelection() == 3: self.restore_trc_backup() if getcfg("calibration.black_output_offset.backup", False): setcfg("calibration.black_output_offset.backup", None) self.calpanel.Freeze() self.trc_ctrl.SetSelection(0) self.trc_textctrl.Show() self.trc_type_ctrl.Show(getcfg("show_advanced_calibration_options")) self.calpanel.Layout() self.calpanel.Refresh() self.calpanel.Thaw() if float(v) != getcfg("calibration.black_output_offset"): self.cal_changed() setcfg("calibration.black_output_offset", v) self.update_profile_name() def ambient_measure_handler(self, event): """ Start measuring ambient illumination """ if not check_set_argyll_bin(): return # Minimum Windows version: XP or Server 2003 if sys.platform == "win32" and sys.getwindowsversion() < (5, 1): show_result_dialog(Error(lang.getstr("windows.version.unsupported"))) return safe_print("-" * 80) safe_print(lang.getstr("ambient.measure")) self.stop_timers() self.worker.interactive = False self.worker.start(self.ambient_measure_consumer, self.ambient_measure_producer, ckwargs={"event_id": event.GetId()}, progress_title=lang.getstr("ambient.measure"), interactive_frame="ambient") def ambient_measure_producer(self): """ Process spotread output for ambient readings """ cmd = get_argyll_util("spotread") args = ["-v", "-a", "-x"] if getcfg("extra_args.spotread").strip(): args += parse_argument_string(getcfg("extra_args.spotread")) self.worker.add_measurement_features(args, False) return self.worker.exec_cmd(cmd, args, capture_output=True, skip_scripts=True) def ambient_measure_consumer(self, result=None, event_id=None): self.start_timers() if not result or isinstance(result, Exception): if getattr(self.worker, "subprocess", None): self.worker.quit_terminate_cmd() if isinstance(result, Exception): show_result_dialog(result, self) return safe_print(lang.getstr("success")) result = re.sub("[^\t\n\r\x20-\x7f]", "", "".join(self.worker.output)).strip() if not result: wx.Bell() return if getcfg("whitepoint.colortemp.locus") == "T": K = re.search("Planckian temperature += (\d+(?:\.\d+)?)K", result, re.I) else: K = re.search("Daylight temperature += (\d+(?:\.\d+)?)K", result, re.I) lux = re.search("Ambient = (\d+(?:\.\d+)) Lux", result, re.I) set_whitepoint = event_id == self.whitepoint_measure_btn.GetId() set_ambient = event_id == self.ambient_measure_btn.GetId() if set_whitepoint and not set_ambient and bool(getcfg("show_advanced_calibration_options")): dlg = ConfirmDialog(self, msg=lang.getstr("ambient.set"), ok=lang.getstr("yes"), cancel=lang.getstr("no"), bitmap=geticon(32, "dialog-question")) set_ambient = dlg.ShowModal() == wx.ID_OK dlg.Destroy() if set_ambient and not set_whitepoint: dlg = ConfirmDialog(self, msg=lang.getstr("whitepoint.set"), ok=lang.getstr("yes"), cancel=lang.getstr("no"), bitmap=geticon(32, "dialog-question")) set_whitepoint = dlg.ShowModal() == wx.ID_OK dlg.Destroy() if set_whitepoint: if K and len(K.groups()) == 1: self.whitepoint_colortemp_textctrl.SetValue(K.groups()[0]) Yxy = re.search("Yxy: (\d+(?:\.\d+)) (\d+(?:\.\d+)) (\d+(?:\.\d+))", result) if Yxy and len(Yxy.groups()) == 3: Y, x, y = Yxy.groups() self.whitepoint_x_textctrl.SetValue(x) self.whitepoint_y_textctrl.SetValue(y) if not getcfg("whitepoint.colortemp", False): self.whitepoint_ctrl.SetSelection(2) self.whitepoint_ctrl_handler( CustomEvent(wx.EVT_CHOICE.evtType[0], self.whitepoint_ctrl)) if set_ambient: if lux and len(lux.groups()) == 1: self.ambient_viewcond_adjust_textctrl.SetValue(lux.groups()[0]) self.ambient_viewcond_adjust_cb.SetValue(True) self.ambient_viewcond_adjust_ctrl_handler( CustomEvent(wx.EVT_CHECKBOX.evtType[0], self.ambient_viewcond_adjust_cb)) def ambient_viewcond_adjust_ctrl_handler(self, event): if event.GetId() == self.ambient_viewcond_adjust_textctrl.GetId() and \ (not self.ambient_viewcond_adjust_cb.GetValue() or str(float(getcfg("calibration.ambient_viewcond_adjust.lux"))) == self.ambient_viewcond_adjust_textctrl.GetValue()): event.Skip() return if debug: safe_print("[D] ambient_viewcond_adjust_ctrl_handler called for ID " "%s %s event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) if event.GetId() == self.ambient_viewcond_adjust_textctrl.GetId(): if self.ambient_viewcond_adjust_textctrl.GetValue(): self.ambient_viewcond_adjust_cb.SetValue(True) else: self.ambient_viewcond_adjust_cb.SetValue(False) if self.ambient_viewcond_adjust_cb.GetValue(): self.ambient_viewcond_adjust_textctrl.Enable() value = self.ambient_viewcond_adjust_textctrl.GetValue() if value: try: v = float(value.replace(",", ".")) if v < 0.000001 or v > sys.maxint: raise ValueError() self.ambient_viewcond_adjust_textctrl.ChangeValue(str(v)) except ValueError: wx.Bell() self.ambient_viewcond_adjust_textctrl.ChangeValue( str(getcfg("calibration.ambient_viewcond_adjust.lux"))) if event.GetId() == self.ambient_viewcond_adjust_cb.GetId(): self.ambient_viewcond_adjust_textctrl.SetFocus() self.ambient_viewcond_adjust_textctrl.SelectAll() else: self.ambient_viewcond_adjust_textctrl.Disable() v1 = int(self.ambient_viewcond_adjust_cb.GetValue()) v2 = self.ambient_viewcond_adjust_textctrl.GetValue() if v1 != getcfg("calibration.ambient_viewcond_adjust") or \ v2 != str(getcfg("calibration.ambient_viewcond_adjust.lux", False)): self.cal_changed() setcfg("calibration.ambient_viewcond_adjust", v1) setcfg("calibration.ambient_viewcond_adjust.lux", v2) self.update_profile_name() if event.GetEventType() == wx.EVT_KILL_FOCUS.evtType[0]: event.Skip() def ambient_viewcond_adjust_info_handler(self, event): InfoDialog(self, msg=lang.getstr("calibration.ambient_viewcond_adjust.info"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), log=False) def black_luminance_ctrl_handler(self, event): if event.GetId() == self.black_luminance_textctrl.GetId() and ( self.black_luminance_ctrl.GetSelection() != 1 or str(float(getcfg("calibration.black_luminance"))) == self.black_luminance_textctrl.GetValue()): event.Skip() return if debug: safe_print("[D] black_luminance_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) self.calpanel.Freeze() if self.black_luminance_ctrl.GetSelection() == 1: # cd/m2 self.black_luminance_textctrl.Show() self.black_luminance_textctrl_label.Show() try: v = float(self.black_luminance_textctrl.GetValue().replace(",", ".")) if v < 0.000001 or v > 100000: raise ValueError() self.black_luminance_textctrl.ChangeValue("%.6f" % v) except ValueError: wx.Bell() self.black_luminance_textctrl.ChangeValue( "%.6f" % getcfg("calibration.black_luminance")) if (event.GetId() == self.black_luminance_ctrl.GetId() and self.black_luminance_ctrl.GetSelection() == 1): self.black_luminance_textctrl.SetFocus() self.black_luminance_textctrl.SelectAll() else: self.black_luminance_textctrl.Hide() self.black_luminance_textctrl_label.Hide() self.calpanel.Layout() self.calpanel.Refresh() self.calpanel.Thaw() v = self.get_black_luminance() if v != str(getcfg("calibration.black_luminance", False)): self.cal_changed() setcfg("calibration.black_luminance", v) self.update_profile_name() if event.GetEventType() == wx.EVT_KILL_FOCUS.evtType[0]: event.Skip() def luminance_ctrl_handler(self, event): if event.GetId() == self.luminance_textctrl.GetId() and ( self.luminance_ctrl.GetSelection() != 1 or str(float(getcfg("calibration.luminance"))) == self.luminance_textctrl.GetValue()): event.Skip() return if debug: safe_print("[D] luminance_ctrl_handler called for ID %s %s event " "type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) self.calpanel.Freeze() if self.luminance_ctrl.GetSelection() == 1: # cd/m2 self.luminance_textctrl.Show() self.luminance_textctrl_label.Show() try: v = float(self.luminance_textctrl.GetValue().replace(",", ".")) if v < 0.000001 or v > 100000: raise ValueError() self.luminance_textctrl.ChangeValue(str(v)) except ValueError: wx.Bell() self.luminance_textctrl.ChangeValue( str(getcfg("calibration.luminance"))) if (event.GetId() == self.luminance_ctrl.GetId() and self.luminance_ctrl.GetSelection() == 1): self.luminance_textctrl.SetFocus() self.luminance_textctrl.SelectAll() else: self.luminance_textctrl.Hide() self.luminance_textctrl_label.Hide() self.calpanel.Layout() self.calpanel.Refresh() self.calpanel.Thaw() v = self.get_luminance() if v != str(getcfg("calibration.luminance", False)): self.cal_changed() setcfg("calibration.luminance", v) self.update_profile_name() if event.GetEventType() == wx.EVT_KILL_FOCUS.evtType[0]: event.Skip() def whitepoint_colortemp_locus_ctrl_handler(self, event): if debug: safe_print("[D] whitepoint_colortemp_locus_ctrl_handler called for " "ID %s %s event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) v = self.get_whitepoint_locus() if v != getcfg("whitepoint.colortemp.locus"): setcfg("whitepoint.colortemp.locus", v) self.whitepoint_ctrl_handler( CustomEvent(wx.EVT_CHOICE.evtType[0], self.whitepoint_ctrl), False) self.cal_changed() self.update_profile_name() def whitepoint_ctrl_handler(self, event, cal_changed=True): if event.GetId() == self.whitepoint_colortemp_textctrl.GetId() and ( self.whitepoint_ctrl.GetSelection() != 1 or str(int(getcfg("whitepoint.colortemp"))) == self.whitepoint_colortemp_textctrl.GetValue()): event.Skip() return if event.GetId() == self.whitepoint_x_textctrl.GetId() and ( self.whitepoint_ctrl.GetSelection() != 2 or str(float(getcfg("whitepoint.x"))) == self.whitepoint_x_textctrl.GetValue()): event.Skip() return if event.GetId() == self.whitepoint_y_textctrl.GetId() and ( self.whitepoint_ctrl.GetSelection() != 2 or str(float(getcfg("whitepoint.y"))) == self.whitepoint_y_textctrl.GetValue()): event.Skip() return if debug: safe_print("[D] whitepoint_ctrl_handler called for ID %s %s event " "type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) self.calpanel.Freeze() if self.whitepoint_ctrl.GetSelection() == 2: # x,y chromaticity coordinates self.whitepoint_colortemp_locus_label.Hide() self.whitepoint_colortemp_locus_ctrl.Hide() self.whitepoint_colortemp_textctrl.Hide() self.whitepoint_colortemp_label.Hide() self.whitepoint_x_textctrl.Show() self.whitepoint_x_label.Show() self.whitepoint_y_textctrl.Show() self.whitepoint_y_label.Show() try: v = float(self.whitepoint_x_textctrl.GetValue().replace(",", ".")) if v < 0 or v > 1: raise ValueError() self.whitepoint_x_textctrl.ChangeValue(str(v)) except ValueError: wx.Bell() self.whitepoint_x_textctrl.ChangeValue( str(getcfg("whitepoint.x"))) try: v = float(self.whitepoint_y_textctrl.GetValue().replace(",", ".")) if v < 0 or v > 1: raise ValueError() self.whitepoint_y_textctrl.ChangeValue(str(v)) except ValueError: wx.Bell() self.whitepoint_y_textctrl.ChangeValue( str(getcfg("whitepoint.y"))) x = self.whitepoint_x_textctrl.GetValue().replace(",", ".") y = self.whitepoint_y_textctrl.GetValue().replace(",", ".") k = xyY2CCT(float(x), float(y), 1.0) if k: self.whitepoint_colortemp_textctrl.SetValue( str(stripzeros(math.ceil(k)))) else: self.whitepoint_colortemp_textctrl.SetValue("") if cal_changed: if not getcfg("whitepoint.colortemp") and \ float(x) == getcfg("whitepoint.x") and \ float(y) == getcfg("whitepoint.y"): cal_changed = False setcfg("whitepoint.colortemp", None) setcfg("whitepoint.x", x) setcfg("whitepoint.y", y) if (event.GetId() == self.whitepoint_ctrl.GetId() and self.whitepoint_ctrl.GetSelection() == 2 and not self.updatingctrls): self.whitepoint_x_textctrl.SetFocus() self.whitepoint_x_textctrl.SelectAll() elif self.whitepoint_ctrl.GetSelection() == 1: self.whitepoint_colortemp_locus_label.Show() self.whitepoint_colortemp_locus_ctrl.Show() self.whitepoint_colortemp_textctrl.Show() self.whitepoint_colortemp_label.Show() self.whitepoint_x_textctrl.Hide() self.whitepoint_x_label.Hide() self.whitepoint_y_textctrl.Hide() self.whitepoint_y_label.Hide() try: v = float( self.whitepoint_colortemp_textctrl.GetValue().replace( ",", ".")) if v < 1000 or v > 15000: raise ValueError() self.whitepoint_colortemp_textctrl.SetValue(str(stripzeros(v))) except ValueError: wx.Bell() self.whitepoint_colortemp_textctrl.SetValue( str(stripzeros(getcfg("whitepoint.colortemp")))) if cal_changed: v = float(self.whitepoint_colortemp_textctrl.GetValue()) if getcfg("whitepoint.colortemp") == v and not \ getcfg("whitepoint.x") and not getcfg("whitepoint.y"): cal_changed = False setcfg("whitepoint.colortemp", int(v)) setcfg("whitepoint.x", None) setcfg("whitepoint.y", None) if (event.GetId() == self.whitepoint_ctrl.GetId() and self.whitepoint_ctrl.GetSelection() == 1 and not self.updatingctrls): self.whitepoint_colortemp_textctrl.SetFocus() self.whitepoint_colortemp_textctrl.SelectAll() else: self.whitepoint_colortemp_locus_label.Show() self.whitepoint_colortemp_locus_ctrl.Show() self.whitepoint_colortemp_textctrl.Hide() self.whitepoint_colortemp_label.Hide() self.whitepoint_x_textctrl.Hide() self.whitepoint_x_label.Hide() self.whitepoint_y_textctrl.Hide() self.whitepoint_y_label.Hide() if not getcfg("whitepoint.colortemp") and \ not getcfg("whitepoint.x") and not getcfg("whitepoint.y"): cal_changed = False setcfg("whitepoint.colortemp", None) self.whitepoint_colortemp_textctrl.SetValue( str(stripzeros(getcfg("whitepoint.colortemp")))) setcfg("whitepoint.x", None) setcfg("whitepoint.y", None) self.whitepoint_measure_btn.Show(self.whitepoint_ctrl.GetSelection() > 0) self.calpanel.Layout() self.calpanel.Refresh() self.calpanel.Thaw() if self.whitepoint_ctrl.GetSelection() != 2: if getcfg("whitepoint.colortemp.locus") == "T": # Planckian locus xyY = planckianCT2xyY(getcfg("whitepoint.colortemp")) else: # Daylight locus xyY = CIEDCCT2xyY(getcfg("whitepoint.colortemp")) if xyY: self.whitepoint_x_textctrl.ChangeValue( str(stripzeros(round(xyY[0], 6)))) self.whitepoint_y_textctrl.ChangeValue( str(stripzeros(round(xyY[1], 6)))) else: self.whitepoint_x_textctrl.ChangeValue("") self.whitepoint_y_textctrl.ChangeValue("") if cal_changed and not self.updatingctrls: self.cal_changed() self.update_profile_name() if event.GetEventType() == wx.EVT_KILL_FOCUS.evtType[0]: event.Skip() def trc_type_ctrl_handler(self, event): if debug: safe_print("[D] trc_type_ctrl_handler called for ID %s %s event " "type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) v = self.get_trc_type() if v != getcfg("trc.type"): self.cal_changed() setcfg("trc.type", v) self.update_profile_name() def trc_ctrl_handler(self, event, cal_changed=True): if event.GetId() == self.trc_textctrl.GetId() and ( self.trc_ctrl.GetSelection() != 0 or stripzeros(getcfg("trc")) == stripzeros(self.trc_textctrl.GetValue())): event.Skip() return if debug: safe_print("[D] trc_ctrl_handler called for ID %s %s event type %s " "%s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) self.calpanel.Freeze() if self.trc_ctrl.GetSelection() == 3: # BT.1886 setcfg("trc.backup", self.trc_textctrl.GetValue().replace(",", ".")) self.trc_textctrl.SetValue("2.4") setcfg("trc.type.backup", getcfg("trc.type")) setcfg("trc.type", "G") self.trc_type_ctrl.SetSelection(1) setcfg("calibration.black_output_offset.backup", getcfg("calibration.black_output_offset")) setcfg("calibration.black_output_offset", 0) self.black_output_offset_ctrl.SetValue(0) self.black_output_offset_intctrl.SetValue(0) elif event.GetId() == self.trc_ctrl.GetId(): self.restore_trc_backup() if getcfg("calibration.black_output_offset.backup", False): setcfg("calibration.black_output_offset", getcfg("calibration.black_output_offset.backup")) setcfg("calibration.black_output_offset.backup", None) self.update_black_output_offset_ctrl() if self.trc_ctrl.GetSelection() == 0: self.trc_textctrl.Show() self.trc_type_ctrl.Show(getcfg("show_advanced_calibration_options")) try: v = float(self.trc_textctrl.GetValue().replace(",", ".")) if v == 0 or v > 10: raise ValueError() if str(v) != self.trc_textctrl.GetValue(): self.trc_textctrl.SetValue(str(v)) except ValueError: wx.Bell() self.trc_textctrl.SetValue(str(getcfg("trc"))) if event.GetId() == self.trc_ctrl.GetId(): self.trc_textctrl.SetFocus() self.trc_textctrl.SelectAll() else: self.trc_textctrl.Hide() self.trc_type_ctrl.Hide() self.calpanel.Layout() self.calpanel.Refresh() self.calpanel.Thaw() trc = self.get_trc() if cal_changed: if trc != str(getcfg("trc")): self.cal_changed() setcfg("trc", trc) if cal_changed: self.update_profile_name() if event.GetEventType() == wx.EVT_KILL_FOCUS.evtType[0]: event.Skip() if (trc in ("240", "709", "s") and not (bool(int(getcfg("calibration.ambient_viewcond_adjust"))) and getcfg("calibration.ambient_viewcond_adjust.lux")) and getcfg("trc.should_use_viewcond_adjust.show_msg") and getcfg("show_advanced_calibration_options")): dlg = InfoDialog(self, msg=lang.getstr("trc.should_use_viewcond_adjust"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), show=False, log=False) chk = wx.CheckBox(dlg, -1, lang.getstr("dialog.do_not_show_again")) dlg.Bind(wx.EVT_CHECKBOX, self.should_use_viewcond_adjust_handler, id=chk.GetId()) dlg.sizer3.Add(chk, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.ShowModalThenDestroy() def restore_trc_backup(self): if getcfg("trc.backup", False): setcfg("trc", getcfg("trc.backup")) setcfg("trc.backup", None) self.trc_textctrl.SetValue(str(getcfg("trc"))) if getcfg("trc.type.backup", False): setcfg("trc.type", getcfg("trc.type.backup")) setcfg("trc.type.backup", None) self.trc_type_ctrl.SetSelection( self.trc_types_ba.get(getcfg("trc.type"), self.trc_types_ba.get(defaults["trc.type"]))) def should_use_viewcond_adjust_handler(self, event): setcfg("trc.should_use_viewcond_adjust.show_msg", int(not event.GetEventObject().GetValue())) def check_overwrite(self, ext=""): filename = getcfg("profile.name.expanded") + ext dst_file = os.path.join(getcfg("profile.save_path"), getcfg("profile.name.expanded"), filename) if os.path.exists(dst_file): dlg = ConfirmDialog(self, msg=lang.getstr("warning.already_exists", filename), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return False return True def measure_uniformity_handler(self, event): """ Start measuring display device uniformity """ self.HideAll() self.worker.interactive = True self.worker.start(self.measure_uniformity_consumer, self.measure_uniformity_producer, resume=False, continue_next=False, interactive_frame="uniformity") def measure_uniformity_producer(self): cmd, args = get_argyll_util("spotread"), ["-v", "-e", "-T"] if cmd: self.worker.add_measurement_features(args, display=False) return self.worker.exec_cmd(cmd, args, skip_scripts=True) else: wx.CallAfter(show_result_dialog, Error(lang.getstr("argyll.util.not_found", "spotread")), self) def measure_uniformity_consumer(self, result): self.Show() if isinstance(result, Exception): show_result_dialog(result, self) if getcfg("dry_run"): return for i, line in enumerate(self.worker.output): if line.startswith("spotread: Error"): show_result_dialog(Error(line.strip()), self) elif line.startswith("spotread: Warning"): show_result_dialog(Warn(line.strip()), self) def profile_share_get_meta_error(self, profile): """ Check for required metadata in profile to allow sharing. The treshold for average delta E 1976 is 1.0 """ if ("meta" in profile.tags and isinstance(profile.tags.meta, ICCP.DictType)): try: avg_dE76 = float(profile.tags.meta.getvalue("ACCURACY_dE76_avg")) except (TypeError, ValueError): return lang.getstr("profile.share.meta_missing") else: threshold = 1.0 if avg_dE76 and avg_dE76 > threshold: return lang.getstr("profile.share.avg_dE_too_high", ("%.2f" % avg_dE76, "%.2f" % threshold)) else: # Check for EDID metadata metadata = profile.tags.meta if (not "EDID_model_id" in metadata or (not "EDID_model" in metadata and metadata["EDID_model_id"] == "0") or not "EDID_mnft_id" in metadata or not "EDID_mnft" in metadata or not "EDID_manufacturer" in metadata or metadata["EDID_manufacturer"] == metadata["EDID_mnft"] or not "OPENICC_automatic_generated" in metadata): return lang.getstr("profile.share.meta_missing") else: return lang.getstr("profile.share.meta_missing") def profile_share_handler(self, event): """ Share ICC profile via http://icc.opensuse.org """ # Select profile profile = self.select_profile() if not profile: return # Check meta and profcheck data error = self.profile_share_get_meta_error(profile) if error: InfoDialog(getattr(self, "modaldlg", self), msg=error, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return # Get options from profile options_dispcal, options_colprof = get_options_from_profile(profile) gamma = None for option in options_dispcal: if option.startswith("g") or option.startswith("G"): option = option[1:] gamma = {"240": "SMPTE 240M", "709": "Rec. 709", "l": "L*", "s": "sRGB"}.get(option, "Gamma %s" % option) metadata = profile.tags.meta # Model will be shown in overview on http://icc.opensuse.org model = metadata.getvalue("EDID_model", profile.getDeviceModelDescription() or metadata["EDID_model_id"], None) description = model date = metadata.getvalue("EDID_date", "", None).split("-T") if len(date) == 2: year = int(date[0]) week = int(date[1]) date = datetime.date(int(year), 1, 1) + datetime.timedelta(weeks=week) description += " '" + strftime("%y", date.timetuple()) if "vcgt" in profile.tags: if profile.tags.vcgt.is_linear(): vcgt = "linear VCGT" else: vcgt = "VCGT" else: vcgt = "no VCGT" if vcgt: description += ", " + vcgt whitepoint = "%iK" % round(XYZ2CCT(*profile.tags.wtpt.values())) description += ", " + whitepoint description += u", %i cd/m²" % profile.tags.lumi.Y if gamma: description += ", " + gamma instrument = metadata.getvalue("MEASUREMENT_device") if instrument: for instrument_name in instruments: if instrument_name.lower() == instrument: instrument = instrument_name break description += ", " + instrument description += ", " + strftime("%Y-%m-%d", profile.dateTime.timetuple()) dlg = ConfirmDialog( getattr(self, "modaldlg", self), msg=lang.getstr("profile.share.enter_info"), ok=lang.getstr("upload"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information"), alt=lang.getstr("save"), wrap=100) # Description field dlg.sizer3.Add(wx.StaticText(dlg, -1, lang.getstr("description")), 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.description_txt_ctrl = wx.TextCtrl(dlg, -1, description) dlg.sizer3.Add(dlg.description_txt_ctrl, 1, flag=wx.TOP | wx.ALIGN_LEFT | wx.EXPAND, border=4) # Display properties boxsizer = wx.StaticBoxSizer(wx.StaticBox(dlg, -1, lang.getstr("display.properties")), wx.VERTICAL) dlg.sizer3.Add(boxsizer, 1, flag=wx.TOP | wx.EXPAND, border=12) box_gridsizer = wx.FlexGridSizer(0, 1) boxsizer.Add(box_gridsizer, 1, flag=wx.ALL, border=4) # Display panel surface type, connection gridsizer = wx.FlexGridSizer(0, 4, 4, 8) box_gridsizer.Add(gridsizer, 1, wx.ALIGN_LEFT) # Panel surface type gridsizer.Add(wx.StaticText(dlg, -1, lang.getstr("panel.surface")), 1, flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL) paneltypes = ["glossy", "matte"] dlg.panel_ctrl = wx.Choice(dlg, -1, choices=[""] + [lang.getstr(panel) for panel in paneltypes]) panel_surface = metadata.getvalue("SCREEN_surface", "") try: index = dlg.panel_ctrl.GetItems().index(lang.getstr(panel_surface)) except ValueError: index = 0 dlg.panel_ctrl.SetSelection(index) gridsizer.Add(dlg.panel_ctrl, 1, flag=wx.RIGHT | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, border=8) # Connection type gridsizer.Add(wx.StaticText(dlg, -1, lang.getstr("display.connection.type")), 1, flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL) connections = ["dvi", "displayport", "hdmi", "internal", "vga"] dlg.connection_ctrl = wx.Choice(dlg, -1, choices=[lang.getstr(contype) for contype in connections]) connection_type = metadata.getvalue("CONNECTION_type", "dvi") try: index = dlg.connection_ctrl.GetItems().index(lang.getstr(connection_type)) except ValueError: index = 0 dlg.connection_ctrl.SetSelection(index) gridsizer.Add(dlg.connection_ctrl, 1, flag=wx.RIGHT | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, border=8) display_settings_tabs = wx.Notebook(dlg, -1) # Column layout display_settings = ((# 1st tab lang.getstr("osd") + ": " + lang.getstr("settings.basic"), # Tab title 2, # Number of columns (# 1st (left) column (("preset", 100), ("brightness", 50), ("contrast", 50), ("trc.gamma", 50), ("blacklevel", 50), ("hue", 50)), # 2nd (right) column (("", 0), ("whitepoint.colortemp", 75), ("whitepoint", 50), ("saturation", 50)))), (# 2nd tab lang.getstr("osd") + ": " + lang.getstr("settings.additional"), # Tab title 3, # Number of columns (# 1st (left) column (("hue", 50), ), # 2nd (middle) column (("offset", 50), ), # 3rd (right) column (("saturation", 50), )))) display_settings_ctrls = [] for tab_num, settings in enumerate(display_settings): panel = wx.Panel(display_settings_tabs, -1) panel.SetSizer(wx.BoxSizer(wx.VERTICAL)) gridsizer = wx.FlexGridSizer(0, settings[1] * 2, 4, 12) panel.GetSizer().Add(gridsizer, 1, wx.ALL | wx.EXPAND, border=8) display_settings_tabs.AddPage(panel, settings[0]) ctrls = [] for column in settings[2]: for name, width in column: if name in ("whitepoint", ): components = ("red", "green", "blue") elif tab_num == 1 and name in ("hue", "offset", "saturation"): components = ("red", "green", "blue", "cyan", "magenta", "yellow") else: components = ("", ) nameprefix = name for component in components: if component: name = nameprefix + " " + component if name: ctrl = wx.TextCtrl(panel, -1, metadata.getvalue("OSD_settings_%s" % re.sub("[ .]", "_", name), ""), size=(width, -1), name=name) else: ctrl = (0, 0) ctrls.append(ctrl) display_settings_ctrls.append(ctrl) # Add the controls to the sizer rows = int(math.ceil(len(ctrls) / float(settings[1]))) for row_num in range(rows): for column_num in range(settings[1]): ctrl_index = row_num + column_num * rows if ctrl_index < len(ctrls): if isinstance(ctrls[ctrl_index], wx.Window): label = ctrls[ctrl_index].Name if (" " in label): label = label.split(" ") for i, part in enumerate(label): label[i] = lang.getstr(part) label = " ".join(label) else: label = lang.getstr(label) text = wx.StaticText(panel, -1, label) else: text = (0, 0) gridsizer.Add(text, 1, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT) gridsizer.Add(ctrls[ctrl_index], 1, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.RIGHT, border=4) box_gridsizer.Add(display_settings_tabs, 1, flag=wx.TOP | wx.ALIGN_LEFT, border=8) # License field ##dlg.sizer3.Add(wx.StaticText(dlg, -1, lang.getstr("license")), 1, ##flag=wx.TOP | wx.ALIGN_LEFT, border=12) ##dlg.license_ctrl = wx.Choice(dlg, -1, ##choices=["http://www.color.org/registry/icc_license_2011.txt", ##"http://www.gzip.org/zlib/zlib_license.html"]) ##dlg.license_ctrl.SetSelection(0) ##sizer4 = wx.BoxSizer(wx.HORIZONTAL) ##dlg.sizer3.Add(sizer4, 1, ##flag=wx.TOP | wx.ALIGN_LEFT, border=4) ##sizer4.Add(dlg.license_ctrl, 1, ##flag=wx.RIGHT | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, ##border=8) # License link button ##dlg.license_link_ctrl = wx.BitmapButton(dlg, -1, ##geticon(16, "dialog-information"), ##style=wx.NO_BORDER) ##dlg.license_link_ctrl.SetToolTipString(lang.getstr("license")) ##dlg.Bind(wx.EVT_BUTTON, ##lambda event: launch_file(dlg.license_ctrl.GetValue()), ##dlg.license_link_ctrl) ##sizer4.Add(dlg.license_link_ctrl, flag=wx.ALIGN_LEFT | ##wx.ALIGN_CENTER_VERTICAL) # Link to ICC Profile Taxi service dlg.sizer3.Add(wx.lib.hyperlink.HyperLinkCtrl(dlg, -1, label="icc.opensuse.org", URL="http://icc.opensuse.org"), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.TOP, border=12) dlg.description_txt_ctrl.SetFocus() dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.Center() result = dlg.ShowModal() if result == wx.ID_CANCEL: return # Get meta prefix prefixes = (metadata.getvalue("prefix", "", None) or "CONNECTION_").split(",") if not "CONNECTION_" in prefixes: prefixes.append("CONNECTION_") # Update meta panel = dlg.panel_ctrl.GetSelection() if panel > 0: metadata["SCREEN_surface"] = paneltypes[panel - 1] if not "SCREEN_" in prefixes: prefixes.append("SCREEN_") # Update meta metadata["CONNECTION_type"] = connections[dlg.connection_ctrl.GetSelection()] for ctrl in display_settings_ctrls: if isinstance(ctrl, wx.TextCtrl) and ctrl.GetValue().strip(): metadata["OSD_settings_%s" % re.sub("[ .]", "_", ctrl.Name)] = ctrl.GetValue().strip() if not "OSD_" in prefixes: prefixes.append("OSD_") # Set meta prefix metadata["prefix"] = ",".join(prefixes) # Calculate profile ID profile.calculateID() # Save profile profile.write() if result != wx.ID_OK: return # Get profile data data = profile.data # Add metadata which should not be reflected in profile metadata["model"] = model metadata["vcgt"] = int("vcgt" in profile.tags) # Upload params = {"description": dlg.description_txt_ctrl.GetValue(), ##"licence": dlg.license_ctrl.GetValue()} "licence": "http://www.color.org/registry/icc_license_2011.txt"} files = [("metadata", "metadata.json", '{"org":{"freedesktop":{"openicc":{"device":{"monitor":[%s]}}}}}' % metadata.to_json()), ("profile", "profile.icc", data)] self.worker.interactive = False self.worker.start(self.profile_share_consumer, http_request, ckwargs={}, wkwargs={"domain": "dispcalgui.hoech.net" if test else "icc.opensuse.org", "request_type": "POST", "path": "/print_r_post.php" if test else "/upload", "params": params, "files": files}, progress_msg=lang.getstr("profile.share"), stop_timers=False) def profile_share_consumer(self, result, parent=None): """ This function receives the response from the profile upload """ if result is not False: safe_print(safe_unicode(result.read().strip(), "UTF-8")) parent = parent or getattr(self, "modaldlg", self) dlg = InfoDialog(parent, msg=lang.getstr("profile.share.success"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), show=False) # Link to ICC Profile Taxi service dlg.sizer3.Add(wx.lib.hyperlink.HyperLinkCtrl(dlg, -1, label="icc.opensuse.org", URL="http://icc.opensuse.org"), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.TOP, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.ok.SetDefault() dlg.ShowModalThenDestroy(parent) def install_profile_handler(self, event=None, profile_path=None): """ Install a profile. Show an error dialog if the profile is invalid or unsupported (only 'mntr' RGB profiles are allowed) """ if not check_set_argyll_bin(): return if profile_path is None: profile_path = getcfg("calibration.file") if profile_path: result = check_file_isfile(profile_path) if isinstance(result, Exception): show_result_dialog(result, self) else: result = False if not isinstance(result, Exception) and result: try: profile = ICCP.ICCProfile(profile_path) except (IOError, ICCP.ICCProfileInvalidError), exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + profile_path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return if profile.profileClass != "mntr" or \ profile.colorSpace != "RGB": InfoDialog(self, msg=lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace)) + "\n" + profile_path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return setcfg("calibration.file.previous", None) self.profile_finish( True, profile_path=profile_path, skip_scripts=True, allow_show_log=False) def select_install_profile_handler(self, event): """ Show a dialog for user to select a profile for installation """ defaultDir, defaultFile = get_verified_path("last_icc_path") dlg = wx.FileDialog(self, lang.getstr("install_display_profile"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.icc") + "|*.icc;*.icm", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() path = dlg.GetPath() dlg.Destroy() if result == wx.ID_OK: setcfg("last_icc_path", path) setcfg("last_cal_or_icc_path", path) self.install_profile_handler(profile_path=path) def load_profile_cal_handler(self, event): """ Show a dialog for user to select a profile to load calibration (vcgt) from. """ if not check_set_argyll_bin(): return defaultDir, defaultFile = get_verified_path("last_cal_or_icc_path") dlg = wx.FileDialog(self, lang.getstr("calibration.load_from_cal_or_profile"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.cal_icc") + "|*.cal;*.icc;*.icm", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() path = dlg.GetPath() dlg.Destroy() if result == wx.ID_OK: if not os.path.exists(path): InfoDialog(self, msg=lang.getstr("file.missing", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return setcfg("last_cal_or_icc_path", path) if verbose >= 1: safe_print(lang.getstr("calibration.loading")) safe_print(path) if os.path.splitext(path)[1].lower() in (".icc", ".icm"): try: profile = ICCP.ICCProfile(path) except (IOError, ICCP.ICCProfileInvalidError), exception: if verbose >= 1: safe_print(lang.getstr("failure")) InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return setcfg("last_icc_path", path) if self.install_cal(capture_output=True, profile_path=path, skip_scripts=True, silent=not getcfg("dry_run"), title=lang.getstr("calibration.load_from_profile")) is True: self.lut_viewer_load_lut(profile=profile) if verbose >= 1: safe_print(lang.getstr("success")) elif not getcfg("dry_run"): if verbose >= 1: safe_print(lang.getstr("failure")) InfoDialog(self, msg=lang.getstr("calibration.load_error") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) else: setcfg("last_cal_path", path) if self.install_cal(capture_output=True, cal=path, skip_scripts=True, silent=not getcfg("dry_run"), title=lang.getstr("calibration.load_from_cal")) is True: self.lut_viewer_load_lut(profile=cal_to_fake_profile(path)) if verbose >= 1: safe_print(lang.getstr("success")) elif not getcfg("dry_run"): if verbose >= 1: safe_print(lang.getstr("failure")) def preview_handler(self, event=None, preview=False): """ Preview profile calibration (vcgt). Toggle between profile curves and previous calibration curves. """ if preview or self.preview.GetValue(): cal = self.cal else: cal = getcfg("calibration.file.previous") if self.cal == cal: cal = False elif not cal: cal = True if cal is False: # linear profile = None else: if cal is True: # display profile profile = get_display_profile() if not profile: cal = False elif cal.lower().endswith(".icc") or \ cal.lower().endswith(".icm"): profile = ICCP.ICCProfile(cal) else: profile = cal_to_fake_profile(cal) if profile: if verbose >= 1: safe_print(lang.getstr("calibration.loading")) if profile.fileName: safe_print(profile.fileName) else: if verbose >= 1: safe_print(lang.getstr("calibration.resetting")) if self.install_cal(capture_output=True, cal=cal, skip_scripts=True, silent=True, title=lang.getstr("calibration.load_from_cal_or_profile")) is True: self.lut_viewer_load_lut(profile=profile) if verbose >= 1: safe_print(lang.getstr("success")) else: if verbose >= 1: safe_print(lang.getstr("failure")) def profile_load_on_login_handler(self, event=None): setcfg("profile.load_on_login", int(self.profile_load_on_login.GetValue())) if sys.platform == "win32" and sys.getwindowsversion() >= (6, 1): self.profile_load_on_login.Enable(is_superuser() or not util_win.calibration_management_isenabled()) self.profile_load_by_os.Enable(is_superuser() and self.profile_load_on_login.GetValue()) if (not self.profile_load_on_login.GetValue() and self.profile_load_by_os.GetValue() and is_superuser()): self.profile_load_by_os.SetValue(False) self.profile_load_by_os_handler() def profile_load_by_os_handler(self, event=None): if is_superuser(): # Enable calibration management under Windows 7 try: util_win.enable_calibration_management(self.profile_load_by_os.GetValue()) except Exception, exception: safe_print("util_win.enable_calibration_management(True): %s" % safe_unicode(exception)) def install_cal(self, capture_output=False, cal=None, profile_path=None, skip_scripts=False, silent=False, title=appname): """ 'Install' (load) a calibration from a calibration file or profile """ if config.get_display_name() in ("Web", "Untethered", "madVR"): return True # Install using dispwin cmd, args = self.worker.prepare_dispwin(cal, profile_path, False) if not isinstance(cmd, Exception): result = self.worker.exec_cmd(cmd, args, capture_output, low_contrast=False, skip_scripts=skip_scripts, silent=silent, title=title) else: result = cmd if not isinstance(result, Exception) and result: if not silent: if cal is False: InfoDialog(self, msg=lang.getstr("calibration.reset_success"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), log=False) else: InfoDialog(self, msg=lang.getstr("calibration.load_success"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), log=False) elif not silent: if isinstance(result, Exception) and getcfg("dry_run"): show_result_dialog(result, self) return if cal is False: InfoDialog(self, msg=lang.getstr("calibration.reset_error"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error"), log=False) else: InfoDialog(self, msg=lang.getstr("calibration.load_error"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error"), log=False) return result def update_measurement_report(self, event=None): """ Show file dialog to select a HTML measurement report for updating. Update the selected report and show it afterwards. """ defaultDir, defaultFile = get_verified_path("last_filedialog_path") dlg = wx.FileDialog(self, lang.getstr("measurement_report.update"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.html") + "|*.html;*.htm", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: path = dlg.GetPath() setcfg("last_filedialog_path", path) dlg.Destroy() if result != wx.ID_OK: return try: report.update(path, pack=getcfg("report.pack_js")) except (IOError, OSError), exception: show_result_dialog(exception) else: # show report wx.CallAfter(launch_file, path) def verify_calibration_handler(self, event): if check_set_argyll_bin(): self.setup_measurement(self.verify_calibration) def verify_calibration(self): safe_print("-" * 80) progress_msg = lang.getstr("calibration.verify") safe_print(progress_msg) self.worker.interactive = False self.worker.start(self.result_consumer, self.worker.verify_calibration, progress_msg=progress_msg, pauseable=True) def select_profile(self, parent=None, check_profile_class=True, msg=None): """ Selects the currently configured profile or display profile. Falls back to user choice via FileDialog if both not set. """ if not parent: parent = self if not msg: msg = lang.getstr("profile.choose") profile = get_current_profile(include_display_profile=True) if not profile: defaultDir, defaultFile = get_verified_path("last_icc_path") dlg = wx.FileDialog(parent, msg, defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.icc") + "|*.icc;*.icm", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: path = dlg.GetPath() setcfg("last_icc_path", path) setcfg("last_cal_or_icc_path", path) dlg.Destroy() if result != wx.ID_OK: return try: profile = ICCP.ICCProfile(path) except ICCP.ICCProfileInvalidError, exception: InfoDialog(parent, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return if check_profile_class and (profile.profileClass != "mntr" or profile.colorSpace != "RGB"): InfoDialog(parent, msg=lang.getstr("profile.unsupported", profile.profileClass, profile.colorSpace) + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return return profile def measurement_report_create_handler(self, event): """ Assign and initialize the report creation window """ if not getattr(self, "reportframe", None): self.init_reportframe() if self.reportframe.IsShownOnScreen(): self.reportframe.Raise() else: self.reportframe.Show(not self.reportframe.IsShownOnScreen()) def measurement_report_handler(self, event): if not check_set_argyll_bin(): return sim_ti3 = None sim_gray = None # select measurement data (ti1 or ti3) chart = getcfg("measurement_report.chart") try: chart = CGATS.CGATS(chart, True) except CGATS.CGATSError, exception: show_result_dialog(exception, self.reportframe) return fields = getcfg("measurement_report.chart.fields") # profile(s) paths = [] use_sim = getcfg("measurement_report.use_simulation_profile") use_sim_as_output = getcfg("measurement_report.use_simulation_profile_as_output") use_devlink = getcfg("measurement_report.use_devlink_profile") #if not use_sim or not use_sim_as_output: paths.append(getcfg("measurement_report.output_profile")) if use_sim: if use_sim_as_output and use_devlink: paths.append(getcfg("measurement_report.devlink_profile")) paths.append(getcfg("measurement_report.simulation_profile")) sim_profile = None devlink = None oprof = None for i, path in enumerate(paths): try: profile = ICCP.ICCProfile(path) except ICCP.ICCProfileInvalidError, exception: InfoDialog(self.reportframe, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return if i == 0: oprof = profile elif i in (1, 2) and use_sim: if use_sim_as_output and profile.colorSpace == "RGB": if i == 1 and use_devlink: devlink = profile else: if profile.colorSpace != "RGB": devlink = None sim_profile = profile profile = oprof colormanaged = (use_sim and use_sim_as_output and not sim_profile and config.get_display_name() == "madVR" and getcfg("3dlut.madVR.enable")) if debug: for n, p in {"profile": profile, "devlink": devlink, "sim_profile": sim_profile, "oprof": oprof}.iteritems(): if p: safe_print(n, p.getDescription()) if use_sim: if sim_profile: mprof = sim_profile else: mprof = profile apply_bt1886 = (use_sim and getcfg("measurement_report.apply_bt1886_gamma_mapping") and mprof.colorSpace == "RGB" and isinstance(mprof.tags.get("rXYZ"), ICCP.XYZType) and isinstance(mprof.tags.get("gXYZ"), ICCP.XYZType) and isinstance(mprof.tags.get("bXYZ"), ICCP.XYZType)) bt1886 = None if apply_bt1886: # TRC BT.1886-like if "bkpt" in oprof.tags: XYZbp = oprof.tags.bkpt.pcs.values() else: XYZbp = (0, 0, 0) gamma = getcfg("measurement_report.bt1886_gamma") if getcfg("measurement_report.bt1886_gamma_type") == "b": # Convert effective to technical gamma gamma = colormath.xicc_tech_gamma(gamma, XYZbp[1]) rXYZ = mprof.tags.rXYZ.values() gXYZ = mprof.tags.gXYZ.values() bXYZ = mprof.tags.bXYZ.values() mtx = colormath.Matrix3x3([[rXYZ[0], gXYZ[0], bXYZ[0]], [rXYZ[1], gXYZ[1], bXYZ[1]], [rXYZ[2], gXYZ[2], bXYZ[2]]]) bt1886 = colormath.BT1886(mtx, XYZbp, gamma) if sim_profile: sim_intent = ("a" if getcfg("measurement_report.whitepoint.simulate") else "r") void, sim_ti3, sim_gray = self.worker.chart_lookup(chart, sim_profile, check_missing_fields=True, intent=sim_intent, bt1886=bt1886) # NOTE: we ignore the ti1 and gray patches here # only the ti3 is valuable at this point if not sim_ti3: return intent = ("r" if sim_intent == "r" or getcfg("measurement_report.whitepoint.simulate.relative") else "a") bt1886 = None else: sim_intent = None intent = "r" if fields in ("LAB", "XYZ"): if getcfg("measurement_report.whitepoint.simulate"): sim_intent = "a" if not getcfg("measurement_report.whitepoint.simulate.relative"): intent = "a" else: chart.fix_device_values_scaling() chart.adapt(cat=profile.guess_cat() or "Bradford") # lookup test patches ti1, ti3_ref, gray = self.worker.chart_lookup(sim_ti3 or chart, profile, bool(sim_ti3) or fields in ("LAB", "XYZ"), fields=None if bool(sim_ti3) else fields, intent=intent, bt1886=bt1886) if not ti3_ref: return if not gray and sim_gray: gray = sim_gray if devlink: void, ti1, void = self.worker.chart_lookup(chart, devlink, check_missing_fields=True) if not ti1: return # let the user choose a location for the result defaultFile = u"Measurement Report %s — %s — %s" % (version, re.sub(r"[\\/:*?\"<>|]+", "_", self.display_ctrl.GetStringSelection().replace(" " + lang.getstr("display.primary"), "")), strftime("%Y-%m-%d %H-%M.html")) defaultDir = get_verified_path(None, os.path.join(getcfg("profile.save_path"), defaultFile))[0] dlg = wx.FileDialog(self.reportframe, lang.getstr("save_as"), defaultDir, defaultFile, wildcard=lang.getstr("filetype.html") + "|*.html;*.htm", style=wx.SAVE | wx.FD_OVERWRITE_PROMPT) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: path = dlg.GetPath() if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self.reportframe) return save_path = os.path.splitext(path)[0] + ".html" setcfg("last_filedialog_path", save_path) dlg.Destroy() if result != wx.ID_OK: return # check if file(s) already exist if os.path.exists(save_path): dlg = ConfirmDialog( self.reportframe, msg=lang.getstr("dialog.confirm_overwrite", save_path), ok=lang.getstr("overwrite"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return # setup for measurement self.setup_measurement(self.measurement_report, ti1, profile, sim_profile, intent, sim_intent, devlink, ti3_ref, sim_ti3, save_path, chart, gray, apply_bt1886, colormanaged) def measurement_report(self, ti1, profile, sim_profile, intent, sim_intent, devlink, ti3_ref, sim_ti3, save_path, chart, gray, apply_bt1886, colormanaged): safe_print("-" * 80) progress_msg = lang.getstr("measurement_report") safe_print(progress_msg) # setup temp dir temp = self.worker.create_tempdir() if isinstance(temp, Exception): show_result_dialog(temp, self.reportframe) return # filenames name, ext = os.path.splitext(os.path.basename(save_path)) ti1_path = os.path.join(temp, name + ".ti1") profile_path = os.path.join(temp, name + ".icc") # write ti1 to temp dir try: ti1_file = open(ti1_path, "w") except (IOError, OSError), exception: InfoDialog(self.reportframe, msg=lang.getstr("error.file.create", ti1_path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.worker.wrapup(False) return ti1_file.write(str(ti1)) ti1_file.close() # write profile to temp dir profile.write(profile_path) # extract calibration from profile cal_path = None if "vcgt" in profile.tags: try: cgats = vcgt_to_cal(profile) except (CGATS.CGATSInvalidError, CGATS.CGATSInvalidOperationError, CGATS.CGATSKeyError, CGATS.CGATSTypeError, CGATS.CGATSValueError), exception: wx.CallAfter(show_result_dialog, Error(lang.getstr("cal_extraction_failed")), self.reportframe) self.Show() return cal_path = os.path.join(temp, name + ".cal") cgats.write(cal_path) else: # Use linear calibration cal_path = get_data_path("linear.cal") # start readings self.worker.dispread_after_dispcal = False self.worker.interactive = config.get_display_name() == "Untethered" self.worker.start(self.measurement_report_consumer, self.worker.measure_ti1, cargs=(os.path.splitext(ti1_path)[0] + ".ti3", profile, sim_profile, intent, sim_intent, devlink, ti3_ref, sim_ti3, save_path, chart, gray, apply_bt1886), wargs=(ti1_path, cal_path, colormanaged), progress_msg=progress_msg, pauseable=True) def measurement_report_consumer(self, result, ti3_path, profile, sim_profile, intent, sim_intent, devlink, ti3_ref, sim_ti3, save_path, chart, gray, apply_bt1886): if not isinstance(result, Exception) and result: # get item 0 of the ti3 to strip the CAL part from the measured data ti3_measured = CGATS.CGATS(ti3_path)[0] safe_print(lang.getstr("success")) result = self.measurement_file_check_confirm(ti3_measured) # cleanup self.worker.wrapup(False) self.Show() if isinstance(result, Exception) or not result: if isinstance(result, Exception): wx.CallAfter(show_result_dialog, result, self.reportframe) return # Account for additional white patches white_rgb = {'RGB_R': 100, 'RGB_G': 100, 'RGB_B': 100} white_measured = ti3_measured.queryi(white_rgb) white_ref = ti3_ref.queryi(white_rgb) offset = max(len(white_measured) - len(white_ref), 0) # If patches were removed from the measured TI3, we need to remove them # from reference and simulation TI3 if isinstance(result, tuple): ref_removed = [] sim_removed = [] for item in reversed(result[0]): key = item.key - offset ref_removed.insert(0, ti3_ref.DATA.pop(key)) if sim_ti3: sim_removed.insert(0, sim_ti3.DATA.pop(key)) for item in ref_removed: safe_print("Removed patch #%i from reference TI3: %s" % (item.key, item)) for item in sim_removed: safe_print("Removed patch #%i from simulation TI3: %s" % (item.key, item)) # Update offset white_ref = ti3_ref.queryi(white_rgb) offset = max(len(white_measured) - len(white_ref), 0) # Determine if we should use planckian locus for assumed target wp # Detection will only work for profiles created by dispcalGUI planckian = False if (profile.tags.get("CIED", "") or profile.tags.get("targ", ""))[0:4] == "CTI3": options_dispcal = get_options_from_profile(profile)[0] for option in options_dispcal: if option.startswith("T"): planckian = True break # calculate amount of calibration grayscale tone values cal_entrycount = 256 if "vcgt" in profile.tags and isinstance(profile.tags.vcgt, ICCP.VideoCardGammaType): rgb = [[], [], []] vcgt = profile.tags.vcgt if "data" in vcgt: # table cal_entrycount = vcgt['entryCount'] for i in range(0, cal_entrycount): for j in range(0, 3): rgb[j] += [float(vcgt['data'][j][i]) / (math.pow(256, vcgt['entrySize']) - 1) * 255] else: # formula step = 100.0 / 255.0 for i in range(0, cal_entrycount): # float2dec(v) fixes miniscule deviations in the calculated gamma for j, name in enumerate(("red", "green", "blue")): vmin = float2dec(vcgt[name + "Min"] * 255) v = float2dec(math.pow(step * i / 100.0, vcgt[name + "Gamma"])) vmax = float2dec(vcgt[name + "Max"] * 255) rgb[j] += [float2dec(vmin + v * (vmax - vmin), 8)] cal_rgblevels = [len(set(round(n) for n in channel)) for channel in rgb] else: # Assume linear with all steps cal_rgblevels = [256, 256, 256] if not chart.filename.lower().endswith(".ti1") or sim_ti3: # make the device values match for i in ti3_ref.DATA: for color in ("RGB_R", "RGB_G", "RGB_B"): if sim_ti3 and sim_ti3.DATA[i].get(color) is not None: ti3_ref.DATA[i][color] = sim_ti3.DATA[i][color] else: ti3_ref.DATA[i][color] = ti3_measured.DATA[i + offset][color] cat = "Bradford" # create a 'joined' ti3 from ref ti3, with XYZ values from measured ti3 # this makes sure CMYK data in the original ref will be present in # the newly joined ti3 ti3_joined = CGATS.CGATS(str(ti3_ref))[0] ti3_joined.LUMINANCE_XYZ_CDM2 = ti3_measured.LUMINANCE_XYZ_CDM2 # add XYZ to DATA_FORMAT if not yet present labels_xyz = ("XYZ_X", "XYZ_Y", "XYZ_Z") if not "XYZ_X" in ti3_joined.DATA_FORMAT.values() and \ not "XYZ_Y" in ti3_joined.DATA_FORMAT.values() and \ not "XYZ_Z" in ti3_joined.DATA_FORMAT.values(): ti3_joined.DATA_FORMAT.add_data(labels_xyz) # set XYZ in joined ti3 to XYZ of measurements for i in ti3_joined.DATA: for color in labels_xyz: ti3_joined.DATA[i][color] = ti3_measured.DATA[i + offset][color] wtpt_profile_norm = tuple(n * 100 for n in profile.tags.wtpt.values()) if "chad" in profile.tags: # undo chromatic adaption of profile whitepoint WX, WY, WZ = profile.tags.chad.inverted() * wtpt_profile_norm wtpt_profile_norm = tuple((n / WY) * 100.0 for n in (WX, WY, WZ)) # guess chromatic adaption transform (Bradford, CAT02...) cat = profile.guess_cat() or cat if "lumi" in profile.tags and isinstance(profile.tags.lumi, ICCP.XYZType): # calculate unscaled whitepoint scale = profile.tags.lumi.Y / 100.0 wtpt_profile = tuple(n * scale for n in wtpt_profile_norm) else: wtpt_profile = wtpt_profile_norm if sim_profile: wtpt_sim_profile_norm = tuple(n * 100 for n in sim_profile.tags.wtpt.values()) if "chad" in sim_profile.tags: # undo chromatic adaption of profile whitepoint WX, WY, WZ = sim_profile.tags.chad.inverted() * wtpt_sim_profile_norm wtpt_sim_profile_norm = tuple((n / WY) * 100.0 for n in (WX, WY, WZ)) wtpt_measured = tuple(float(n) for n in ti3_joined.LUMINANCE_XYZ_CDM2.split()) # normalize so that Y = 100 wtpt_measured_norm = tuple((n / wtpt_measured[1]) * 100 for n in wtpt_measured) if intent != "a" and sim_intent != "a": white = ti3_joined.queryi(white_rgb) for i in white: white[i].update({'XYZ_X': wtpt_measured_norm[0], 'XYZ_Y': wtpt_measured_norm[1], 'XYZ_Z': wtpt_measured_norm[2]}) black = ti3_joined.queryi1({'RGB_R': 0, 'RGB_G': 0, 'RGB_B': 0}) if black: bkpt_measured_norm = black["XYZ_X"], black["XYZ_Y"], black["XYZ_Z"] bkpt_measured = tuple(wtpt_measured[1] / 100 * n for n in bkpt_measured_norm) else: bkpt_measured_norm = None bkpt_measured = None # set Lab values labels_Lab = ("LAB_L", "LAB_A", "LAB_B") for data in (ti3_ref, ti3_joined): if "XYZ_X" in data.DATA_FORMAT.values() and \ "XYZ_Y" in data.DATA_FORMAT.values() and \ "XYZ_Z" in data.DATA_FORMAT.values(): if not "LAB_L" in data.DATA_FORMAT.values() and \ not "LAB_A" in data.DATA_FORMAT.values() and \ not "LAB_B" in data.DATA_FORMAT.values(): # add Lab fields to DATA_FORMAT if not present data.DATA_FORMAT.add_data(labels_Lab) has_Lab = False else: has_Lab = True if data is ti3_joined or not has_Lab: for i in data.DATA: X, Y, Z = [data.DATA[i][color] for color in labels_xyz] if data is ti3_joined: # we need to adapt the measured values to D50 #print X, Y, Z, '->', X, Y, Z = colormath.adapt(X, Y, Z, wtpt_measured_norm, cat=cat) #print X, Y, Z Lab = XYZ2Lab(X, Y, Z) for j, color in enumerate(labels_Lab): data.DATA[i][color] = Lab[j] if data is ti3_ref and sim_intent == "a" and intent == "a": for i in data.DATA: # we need to adapt the reference values to D50 L, a, b = [data.DATA[i][color] for color in labels_Lab] X, Y, Z = colormath.Lab2XYZ(L, a, b, scale=100) #print X, Y, Z, '->', X, Y, Z = colormath.adapt(X, Y, Z, wtpt_profile_norm, cat=cat) #print X, Y, Z Lab = XYZ2Lab(X, Y, Z) for j, color in enumerate(labels_Lab): data.DATA[i][color] = Lab[j] # gather data for report instrument = self.comport_ctrl.GetStringSelection() measurement_mode = self.get_measurement_mode() mode = [] if measurement_mode: if "c" in measurement_mode: mode += [lang.getstr("measurement_mode.refresh")] elif "l" in measurement_mode: mode += [lang.getstr("measurement_mode.lcd")] if "p" in measurement_mode: mode += [lang.getstr("projector")] if "V" in measurement_mode: mode += [lang.getstr("measurement_mode.adaptive")] if "H" in measurement_mode: mode += [lang.getstr("measurement_mode.highres")] if mode: instrument += " (%s)" % "/".join(mode) ccmx = "None" if self.worker.instrument_can_use_ccxx(): ccmx = getcfg("colorimeter_correction_matrix_file").split(":", 1) if len(ccmx) > 1 and ccmx[1]: ccmxpath = ccmx[1] ccmx = os.path.basename(ccmx[1]) try: cgats = CGATS.CGATS(ccmxpath) except CGATS.CGATSError, exception: safe_print("%s:" % ccmxpath, exception) else: desc = safe_unicode(cgats.get_descriptor(), "UTF-8") # If the description is not the same as the 'sane' # filename, add the filename after the description # (max 31 chars) # See also colorimeter_correction_check_overwite, the # way the filename is processed must be the same if (re.sub(r"[\\/:*?\"<>|]+", "_", make_argyll_compatible_path(desc)) != os.path.splitext(ccmx)[0]): ccmx = "%s &lt;%s&gt;" % (desc, ellipsis(ccmx, 31, "m")) else: ccmx = "None" use_sim = getcfg("measurement_report.use_simulation_profile") use_sim_as_output = getcfg("measurement_report.use_simulation_profile_as_output") if not sim_profile and use_sim and use_sim_as_output: sim_profile = profile placeholders2data = {"${PLANCKIAN}": 'checked="checked"' if planckian else "", "${DISPLAY}": self.display_ctrl.GetStringSelection().replace(" " + lang.getstr("display.primary"), ""), "${INSTRUMENT}": instrument, "${CORRECTION_MATRIX}": ccmx, "${BLACKPOINT}": "%f %f %f" % (bkpt_measured if bkpt_measured else (-1, ) * 3), "${WHITEPOINT}": "%f %f %f" % wtpt_measured, "${WHITEPOINT_NORMALIZED}": "%f %f %f" % wtpt_measured_norm, "${PROFILE}": profile.getDescription(), "${PROFILE_WHITEPOINT}": "%f %f %f" % wtpt_profile, "${PROFILE_WHITEPOINT_NORMALIZED}": "%f %f %f" % wtpt_profile_norm, "${SIMULATION_PROFILE}": sim_profile.getDescription() if sim_profile else '', "${BT_1886_GAMMA}": str(getcfg("measurement_report.bt1886_gamma") if apply_bt1886 else 'null'), "${BT_1886_GAMMA_TYPE}": str(getcfg("measurement_report.bt1886_gamma_type") if apply_bt1886 else ''), "${WHITEPOINT_SIMULATION}": str(sim_intent == "a").lower(), "${WHITEPOINT_SIMULATION_RELATIVE}": str(sim_intent == "a" and intent == "r").lower(), "${DEVICELINK_PROFILE}": devlink.getDescription() if devlink else '', "${TESTCHART}": os.path.basename(chart.filename), "${ADAPTION}": str(cat), "${DATETIME}": strftime("%Y-%m-%d %H:%M:%S"), "${REF}": str(ti3_ref).decode(enc, "replace").replace('"', """), "${MEASURED}": str(ti3_joined).decode(enc, "replace").replace('"', """), "${CAL_ENTRYCOUNT}": str(cal_entrycount), "${CAL_RGBLEVELS}": repr(cal_rgblevels), "${GRAYSCALE}": repr(gray) if gray else 'null', "${REPORT_VERSION}": version} # create report try: report.create(save_path, placeholders2data, getcfg("report.pack_js")) except (IOError, OSError), exception: show_result_dialog(exception) else: # show report wx.CallAfter(launch_file, save_path) def load_cal(self, cal=None, silent=False): """ Load a calibration from a .cal file or ICC profile. Defaults to currently configured file if cal parameter is not given. """ if not cal: cal = getcfg("calibration.file") if cal: if check_set_argyll_bin(): if verbose >= 1: safe_print(lang.getstr("calibration.loading")) safe_print(cal) if self.install_cal(capture_output=True, cal=cal, skip_scripts=True, silent=silent, title=lang.getstr("calibration.load_from_cal_or_profile")) is True: self.lut_viewer_load_lut(profile=ICCP.ICCProfile(cal) if cal.lower().endswith(".icc") or cal.lower().endswith(".icm") else cal_to_fake_profile(cal)) if verbose >= 1 and silent: safe_print(lang.getstr("success")) return True if verbose >= 1: safe_print(lang.getstr("failure")) return False def reset_cal(self, event=None): """ Reset video card gamma table to linear """ if check_set_argyll_bin(): if verbose >= 1: safe_print(lang.getstr("calibration.resetting")) if self.install_cal(capture_output=True, cal=False, skip_scripts=True, silent=not (getcfg("dry_run") and event), title=lang.getstr("calibration.reset")) is True: profile = ICCP.ICCProfile() profile._data = "\0" * 128 profile._tags.desc = ICCP.TextDescriptionType("", "desc") profile._tags.vcgt = ICCP.VideoCardGammaTableType("", "vcgt") profile._tags.vcgt.update({ "channels": 3, "entryCount": 256, "entrySize": 1, "data": [range(0, 256), range(0, 256), range(0, 256)] }) profile.size = len(profile.data) profile.is_loaded = True self.lut_viewer_load_lut(profile=profile) if verbose >= 1: safe_print(lang.getstr("success")) return True if verbose >= 1 and not getcfg("dry_run"): safe_print(lang.getstr("failure")) return False def load_display_profile_cal(self, event=None): """ Load calibration (vcgt) from current display profile """ profile = get_display_profile() if check_set_argyll_bin(): if verbose >= 1: safe_print( lang.getstr("calibration.loading_from_display_profile")) if profile and profile.fileName: safe_print(profile.fileName) if self.install_cal(capture_output=True, cal=True, skip_scripts=True, silent=not (getcfg("dry_run") and event), title=lang.getstr("calibration.load_from_display_profile")) is True: self.lut_viewer_load_lut(profile=profile) if verbose >= 1: safe_print(lang.getstr("success")) return True if verbose >= 1 and not getcfg("dry_run"): safe_print(lang.getstr("failure")) return False def report_calibrated_handler(self, event): """ Report on calibrated display and exit """ self.setup_measurement(self.report) def report_uncalibrated_handler(self, event): """ Report on uncalibrated display and exit """ self.setup_measurement(self.report, False) def report(self, report_calibrated=True): if check_set_argyll_bin(): safe_print("-" * 80) if report_calibrated: progress_msg = lang.getstr("report.calibrated") else: progress_msg = lang.getstr("report.uncalibrated") safe_print(progress_msg) self.worker.interactive = False self.worker.start(self.result_consumer, self.worker.report, wkwargs={"report_calibrated": report_calibrated}, progress_msg=progress_msg, pauseable=True) def result_consumer(self, result): """ Generic result consumer. Shows the info window on success if enabled in the configuration or an info/warn/error dialog if result was an exception. """ if isinstance(result, Exception) and result: wx.CallAfter(show_result_dialog, result, self) elif getcfg("log.autoshow"): wx.CallAfter(self.infoframe_toggle_handler, show=True) self.worker.wrapup(False) self.Show() def calibrate_btn_handler(self, event): if sys.platform == "darwin" or debug: self.focus_handler(event) if not getcfg("profile.update") and (not getcfg("calibration.update") or is_profile()): update_profile = getcfg("calibration.update") and is_profile() if update_profile: msg = lang.getstr("calibration.update_profile_choice") ok = lang.getstr("profile.update") else: msg = lang.getstr("calibration.create_fast_matrix_shaper_choice") ok = lang.getstr("calibration.create_fast_matrix_shaper") dlg = ConfirmDialog(self, msg=msg, ok=ok, alt=lang.getstr("button.calibrate"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-question")) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_CANCEL: return if update_profile and result == wx.ID_OK: setcfg("profile.update", 1) else: result = None self.worker.dispcal_create_fast_matrix_shaper = result == wx.ID_OK self.update_profile_name_timer.Stop() if check_set_argyll_bin() and self.check_overwrite(".cal") and \ ((not getcfg("profile.update") and not self.worker.dispcal_create_fast_matrix_shaper) or self.check_overwrite(profile_ext)): self.setup_measurement(self.just_calibrate) else: self.update_profile_name_timer.Start(1000) def just_calibrate(self): """ Just calibrate, optionally creating a fast matrix shaper profile """ safe_print("-" * 80) safe_print(lang.getstr("button.calibrate")) if getcfg("calibration.interactive_display_adjustment") and \ not getcfg("calibration.update"): # Interactive adjustment, do not show progress dialog self.worker.interactive = True else: # No interactive adjustment, show progress dialog self.worker.interactive = False self.worker.start_calibration(self.just_calibrate_finish, remove=True, progress_msg=lang.getstr("calibration")) def just_calibrate_finish(self, result): start_timers = True if not isinstance(result, Exception) and result: wx.CallAfter(self.update_calibration_file_ctrl) if getcfg("log.autoshow"): wx.CallAfter(self.infoframe_toggle_handler, show=True) if getcfg("profile.update") or \ self.worker.dispcal_create_fast_matrix_shaper: start_timers = False wx.CallAfter(self.profile_finish, True, success_msg=lang.getstr("calibration.complete")) else: wx.CallAfter(self.load_cal, silent=True) wx.CallAfter(InfoDialog, self, msg=lang.getstr("calibration.complete"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) else: if isinstance(result, Exception): wx.CallAfter(show_result_dialog, result, self) if not getcfg("dry_run"): wx.CallAfter(InfoDialog, self, msg=lang.getstr("calibration.incomplete"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.Show(start_timers=start_timers) def setup_measurement(self, pending_function, *pending_function_args, **pending_function_kwargs): writecfg() if pending_function_kwargs.get("wrapup", True): self.worker.wrapup(False) if "wrapup" in pending_function_kwargs: del pending_function_kwargs["wrapup"] self.HideAll() self.set_pending_function(pending_function, *pending_function_args, **pending_function_kwargs) if (config.get_display_name() in ("Web", "Untethered", "madVR") or getcfg("dry_run")): self.call_pending_function() elif sys.platform in ("darwin", "win32") or isexe: self.measureframe.Show() else: wx.CallAfter(self.measureframe_subprocess) def measureframe_subprocess(self): args = u'"%s" -c "%s"' % (exe, "import sys;" "sys.path.insert(0, %r);" "import wxMeasureFrame;" "wxMeasureFrame.main();" "sys.exit(wxMeasureFrame.MeasureFrame.exitcode)" % pydir) if wx.Display.GetCount() == 1 and len(self.worker.display_rects) > 1: # Separate X screens, TwinView or similar display = wx.Display(0) geometry = display.Geometry union = wx.Rect() xy = [] for rect in self.worker.display_rects: if rect[:2] in xy or rect[2:] == geometry[2:]: # Overlapping x y coordinates or screen filling whole # reported geometry, so assume separate X screens union = None break xy.append(rect[:2]) union = union.Union(rect) if union == geometry: # Assume TwinView or similar where Argyll enumerates 1+n # displays but wx only 'sees' one that is the union of them pass else: # Assume separate X screens try: x_hostname, x_display, x_screen = util_x.get_display() except ValueError, exception: InfoDialog(self, msg=safe_unicode(exception), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.Show(start_timers=True) return args = "DISPLAY=%s:%s.%s %s" % (x_hostname, x_display, getcfg("display.number") - 1, args) returncode = -1 try: p = sp.Popen(args.encode(fs_enc), shell=True, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) except Exception, exception: stderr = safe_str(exception) else: stdout, stderr = p.communicate() returncode = p.returncode config.initcfg() self.get_set_display() if returncode != 255: self.Show(start_timers=True) self.restore_measurement_mode() self.restore_testchart() if stderr and stderr.strip(): InfoDialog(self, msg=safe_unicode(stderr.strip()), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error"), print_=True) else: self.call_pending_function() def get_set_display(self, update_ccmx_items=False): """ Get the currently configured display number, and set the display device selection """ if debug: safe_print("[D] get_set_display") if self.worker.displays: self.display_ctrl.SetSelection( min(max(0, len(self.worker.displays) - 1), max(0, getcfg("display.number") - 1))) self.display_ctrl_handler( CustomEvent(wx.EVT_CHOICE.evtType[0], self.display_ctrl), load_lut=False, update_ccmx_items=update_ccmx_items) def set_pending_function(self, pending_function, *pending_function_args, **pending_function_kwargs): self.pending_function = pending_function self.pending_function_args = pending_function_args self.pending_function_kwargs = pending_function_kwargs def call_pending_function(self): # Needed for proper display updates under GNOME writecfg() if sys.platform in ("darwin", "win32") or isexe: self.measureframe.Hide() if debug: safe_print("[D] Calling pending function with args:", self.pending_function_args) wx.CallLater(100, self.pending_function, *self.pending_function_args, **self.pending_function_kwargs) def calibrate_and_profile_btn_handler(self, event): """ Setup calibration and characterization measurements """ if sys.platform == "darwin" or debug: self.focus_handler(event) self.update_profile_name_timer.Stop() if check_set_argyll_bin() and self.check_overwrite(".cal") and \ self.check_overwrite(".ti3") and self.check_overwrite(profile_ext): self.setup_measurement(self.calibrate_and_profile) else: self.update_profile_name_timer.Start(1000) def calibrate_and_profile(self): """ Start calibration measurements """ safe_print("-" * 80) safe_print(lang.getstr("button.calibrate_and_profile").replace("&&", "&")) self.worker.dispcal_create_fast_matrix_shaper = False self.worker.dispread_after_dispcal = True if getcfg("calibration.interactive_display_adjustment") and \ not getcfg("calibration.update"): # Interactive adjustment, do not show progress dialog self.worker.interactive = True else: # No interactive adjustment, show progress dialog self.worker.interactive = False self.worker.start_calibration(self.calibrate_finish, progress_msg=lang.getstr("calibration"), continue_next=True) def calibrate_finish(self, result): """ Start characterization measurements """ self.worker.interactive = False if not isinstance(result, Exception) and result: wx.CallAfter(self.update_calibration_file_ctrl) self.worker.start_measurement(self.calibrate_and_profile_finish, apply_calibration=True, progress_msg=lang.getstr("measuring.characterization"), resume=True, continue_next=True) else: if isinstance(result, Exception): wx.CallAfter(show_result_dialog, result, self) if not getcfg("dry_run"): wx.CallAfter(InfoDialog, self, msg=lang.getstr("calibration.incomplete"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.Show() def calibrate_and_profile_finish(self, result): """ Build profile from characterization measurements """ start_timers = True if not isinstance(result, Exception) and result: result = self.check_copy_ti3() if not isinstance(result, Exception) and result: start_timers = False wx.CallAfter(self.start_profile_worker, lang.getstr("calibration_profiling.complete"), resume=True) else: if isinstance(result, Exception): wx.CallAfter(show_result_dialog, result, self) if not getcfg("dry_run"): wx.CallAfter(InfoDialog, self, msg=lang.getstr("profiling.incomplete"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.Show(start_timers=start_timers) def check_copy_ti3(self): result = self.measurement_file_check_confirm(parent=getattr(self.worker, "progress_wnd", self)) if isinstance(result, tuple): result = self.worker.wrapup(copy=True, remove=False, ext_filter=[".ti3"]) if isinstance(result, Exception) or not result: self.worker.stop_progress() return result def start_profile_worker(self, success_msg, resume=False): self.worker.interactive = False self.worker.start(self.profile_finish, self.worker.create_profile, ckwargs={"success_msg": success_msg, "failure_msg": lang.getstr( "profiling.incomplete")}, wkwargs={"tags": True}, progress_msg=lang.getstr("create_profile"), resume=resume) def gamap_btn_handler(self, event): if not hasattr(self, "gamapframe"): self.init_gamapframe() if self.gamapframe.IsShownOnScreen(): self.gamapframe.Raise() else: self.gamapframe.Center() self.gamapframe.SetPosition((-1, self.GetPosition()[1] + self.GetSize()[1] - self.gamapframe.GetSize()[1] - 100)) self.gamapframe.Show(not self.gamapframe.IsShownOnScreen()) def current_cal_choice(self): """ Prompt user to either keep or clear the current calibration, with option to embed or not embed Return None if the current calibration should be embedded Return False if no calibration should be embedded Return filename if a .cal file should be used Return wx.ID_CANCEL if whole operation should be cancelled """ if config.get_display_name() == "Untethered": return False cal = getcfg("calibration.file") if cal: filename, ext = os.path.splitext(cal) if ext.lower() in (".icc", ".icm"): self.worker.options_dispcal = [] try: profile = ICCP.ICCProfile(cal) except (IOError, ICCP.ICCProfileInvalidError), exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.update_profile_name_timer.Start(1000) return wx.ID_CANCEL else: # get dispcal options if present self.worker.options_dispcal = [ "-" + arg for arg in get_options_from_profile(profile)[0]] if os.path.isfile(filename + ".cal"): cal = filename + ".cal" else: cal = None if (self.worker.argyll_version < [1, 1, 0] or not self.worker.has_lut_access()): # If Argyll < 1.1, we cannot save the current VideoLUT to use it. # For web, there is no point in using the current VideoLUT as it # may not be from the display we render on (and we cannot save it # to begin with as there is no VideoLUT access). # So an existing .cal file or no calibration are the only options. can_use_current_cal = False else: can_use_current_cal = True if cal: msgstr = "dialog.cal_info" icon = "information" elif can_use_current_cal: msgstr = "dialog.current_cal_warning" icon = "warning" else: msgstr = "dialog.linear_cal_info" icon = "information" dlg = ConfirmDialog(self, msg=lang.getstr(msgstr, os.path.basename(cal) if cal else None), ok=lang.getstr("continue"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-%s" % icon)) border = 12 if can_use_current_cal or cal: dlg.reset_cal_ctrl = wx.CheckBox(dlg, -1, lang.getstr("calibration.use_linear_instead")) dlg.sizer3.Add(dlg.reset_cal_ctrl, flag=wx.TOP | wx.ALIGN_LEFT, border=border) border = 4 dlg.embed_cal_ctrl = wx.CheckBox(dlg, -1, lang.getstr("calibration.embed")) def embed_cal_ctrl_handler(event): embed_cal = dlg.embed_cal_ctrl.GetValue() dlg.reset_cal_ctrl.Enable(embed_cal) if not embed_cal: dlg.reset_cal_ctrl.SetValue(True) if can_use_current_cal or cal: dlg.embed_cal_ctrl.Bind(wx.EVT_CHECKBOX, embed_cal_ctrl_handler) dlg.embed_cal_ctrl.SetValue(bool(can_use_current_cal or cal)) dlg.sizer3.Add(dlg.embed_cal_ctrl, flag=wx.TOP | wx.ALIGN_LEFT, border=border) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() result = dlg.ShowModal() if can_use_current_cal or cal: reset_cal = dlg.reset_cal_ctrl.GetValue() embed_cal = dlg.embed_cal_ctrl.GetValue() dlg.Destroy() if result == wx.ID_CANCEL: self.update_profile_name_timer.Start(1000) return wx.ID_CANCEL if not embed_cal: if can_use_current_cal and reset_cal: self.reset_cal() return False elif not (can_use_current_cal or cal) or reset_cal: return get_data_path("linear.cal") elif cal: return cal def restore_measurement_mode(self): if getcfg("measurement_mode.backup", False): setcfg("measurement_mode", getcfg("measurement_mode.backup")) setcfg("measurement_mode.backup", None) self.update_measurement_mode() def restore_testchart(self): if getcfg("testchart.file.backup", False): self.set_testchart(getcfg("testchart.file.backup")) setcfg("testchart.file.backup", None) def measure_handler(self, event=None): if is_ccxx_testchart(): # Allow different location to store measurements path = None defaultPath = os.path.join(*get_verified_path("measurement.save_path")) dlg = wx.DirDialog(self, lang.getstr("measurement.set_save_path"), defaultPath=defaultPath) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return setcfg("measurement.save_path", path) else: self.restore_measurement_mode() self.restore_testchart() return self.update_profile_name_timer.Stop() if check_set_argyll_bin() and self.check_overwrite(".ti3"): if is_ccxx_testchart(): # Reset calibration before measuring CCXX testchart self.reset_cal() apply_calibration = False else: apply_calibration = self.current_cal_choice() if apply_calibration != wx.ID_CANCEL: self.setup_measurement(self.just_measure, apply_calibration) else: self.restore_measurement_mode() self.restore_testchart() self.update_profile_name_timer.Start(1000) def profile_btn_handler(self, event): """ Setup characterization measurements """ if sys.platform == "darwin" or debug: self.focus_handler(event) self.update_profile_name_timer.Stop() if check_set_argyll_bin() and self.check_overwrite(".ti3") and \ self.check_overwrite(profile_ext): apply_calibration = self.current_cal_choice() if apply_calibration != wx.ID_CANCEL: self.setup_measurement(self.just_profile, apply_calibration) else: self.update_profile_name_timer.Start(1000) def just_measure(self, apply_calibration): safe_print("-" * 80) safe_print(lang.getstr("measure")) self.worker.dispread_after_dispcal = False self.worker.interactive = config.get_display_name() == "Untethered" setcfg("calibration.file.previous", None) self.worker.start_measurement(self.just_measure_finish, apply_calibration, progress_msg=lang.getstr("measuring.characterization"), continue_next=False) def just_measure_finish(self, result): if not isinstance(result, Exception) and result: result = self.check_copy_ti3() self.worker.wrapup(copy=False, remove=True) if isinstance(result, Exception) or not result: if isinstance(result, Exception): wx.CallAfter(show_result_dialog, result, self) elif is_ccxx_testchart(): try: cgats = CGATS.CGATS(os.path.join(getcfg("measurement.save_path"), getcfg("measurement.name.expanded"), getcfg("measurement.name.expanded")) + ".ti3") except Exception, exception: wx.CallAfter(show_result_dialog, exception, self) else: if cgats.queryv1("INSTRUMENT_TYPE_SPECTRAL") == "YES": setcfg("last_reference_ti3_path", cgats.filename) else: setcfg("last_colorimeter_ti3_path", cgats.filename) wx.CallAfter(self.create_colorimeter_correction_handler) else: wx.CallAfter(self.just_measure_show_result, os.path.join(getcfg("profile.save_path"), getcfg("profile.name.expanded"), getcfg("profile.name.expanded") + ".ti3")) self.Show(start_timers=True) if is_ccxx_testchart(): # Restore calibration after measuring CCXX testcahrt self.load_cal(silent=True) or self.load_display_profile_cal() self.restore_measurement_mode() self.restore_testchart() def just_measure_show_result(self, path): dlg = ConfirmDialog(self, msg=lang.getstr("measurements.complete"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-question")) if dlg.ShowModal() == wx.ID_OK: launch_file(os.path.dirname(path)) dlg.Destroy() def just_profile(self, apply_calibration): """ Start characterization measurements """ safe_print("-" * 80) safe_print(lang.getstr("button.profile")) self.worker.dispread_after_dispcal = False self.worker.interactive = config.get_display_name() == "Untethered" setcfg("calibration.file.previous", None) self.worker.start_measurement(self.just_profile_finish, apply_calibration, progress_msg=lang.getstr("measuring.characterization"), continue_next=config.get_display_name() != "Untethered") def just_profile_finish(self, result): """ Build profile from characterization measurements """ start_timers = True if not isinstance(result, Exception) and result: result = self.check_copy_ti3() if not isinstance(result, Exception) and result: start_timers = False wx.CallAfter(self.start_profile_worker, lang.getstr("profiling.complete"), resume=True) else: if isinstance(result, Exception): wx.CallAfter(show_result_dialog, result, self) if not getcfg("dry_run"): wx.CallAfter(InfoDialog, self, msg=lang.getstr("profiling.incomplete"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.Show(start_timers=start_timers) def profile_finish(self, result, profile_path=None, success_msg="", failure_msg="", preview=True, skip_scripts=False, allow_show_log=True): if not isinstance(result, Exception) and result: if getcfg("log.autoshow") and allow_show_log: self.infoframe_toggle_handler(show=True) if not getcfg("calibration.file.previous"): setcfg("calibration.file.previous", getcfg("calibration.file")) if profile_path: profile_save_path = os.path.splitext(profile_path)[0] else: profile_save_path = os.path.join( getcfg("profile.save_path"), getcfg("profile.name.expanded"), getcfg("profile.name.expanded")) profile_path = profile_save_path + profile_ext if not success_msg: success_msg = lang.getstr("dialog.install_profile", (os.path.basename(profile_path), self.display_ctrl.GetStringSelection())) self.cal = profile_path profile = None filename, ext = os.path.splitext(profile_path) extra = [] has_cal = False try: profile = ICCP.ICCProfile(profile_path) except (IOError, ICCP.ICCProfileInvalidError), exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + profile_path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.start_timers(True) setcfg("calibration.file.previous", None) return else: has_cal = "vcgt" in profile.tags if profile.profileClass != "mntr" or \ profile.colorSpace != "RGB": InfoDialog(self, msg=lang.getstr("profiling.complete"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) self.start_timers(True) setcfg("calibration.file.previous", None) return if getcfg("calibration.file") != profile_path: (options_dispcal, options_colprof) = get_options_from_profile(profile) if options_dispcal or options_colprof: cal = profile_save_path + ".cal" sel = self.calibration_file_ctrl.GetSelection() if options_dispcal and self.recent_cals[sel] == cal: self.recent_cals.remove(cal) self.calibration_file_ctrl.Delete(sel) if getcfg("settings.changed"): self.settings_discard_changes() if options_dispcal and options_colprof: self.load_cal_handler(None, path=profile_path, update_profile_name=False, silent=True, load_vcgt=False) else: setcfg("calibration.file", profile_path) self.update_controls(update_profile_name=False) if "meta" in profile.tags: for key in ("avg", "max", "rms"): try: dE = float(profile.tags.meta.getvalue("ACCURACY_dE76_%s" % key)) except (TypeError, ValueError): pass else: lstr = lang.getstr("profile.self_check") + ":" if not lstr in extra: extra.append(lstr) extra.append(u" %s %.2f" % (lang.getstr("profile.self_check.%s" % key), dE)) if extra: extra.append("") extra.append("") for key, name in (("srgb", "sRGB"), ("adobe-rgb", "Adobe RGB")): try: gamut_coverage = float(profile.tags.meta.getvalue("GAMUT_coverage(%s)" % key)) except (TypeError, ValueError): gamut_coverage = None if gamut_coverage: if not lang.getstr("gamut.coverage") + ":" in extra: if extra: extra.append("") extra.append(lang.getstr("gamut.coverage") + ":") extra.append(" %.1f%% %s" % (gamut_coverage * 100, name)) try: gamut_volume = float(profile.tags.meta.getvalue("GAMUT_volume")) except (TypeError, ValueError): gamut_volume = None if gamut_volume: gamut_volumes = {"srgb": ICCP.GAMUT_VOLUME_SRGB, "adobe-rgb": ICCP.GAMUT_VOLUME_ADOBERGB} for key, name in (("srgb", "sRGB"), ("adobe-rgb", "Adobe RGB")): if not lang.getstr("gamut.volume") + ":" in extra: if extra: extra.append("") extra.append(lang.getstr("gamut.volume") + ":") extra.append(" %.1f%% %s" % (gamut_volume * ICCP.GAMUT_VOLUME_SRGB / gamut_volumes[key] * 100, name)) if extra: extra = ",".join(extra).replace(":,", ":").replace(",,", "\n") success_msg = "\n\n".join([success_msg, extra]) # Always load calibration curves self.load_cal(cal=profile_path, silent=True) # Check profile metadata share_profile = None if not self.profile_share_get_meta_error(profile): share_profile = lang.getstr("profile.share") dlg = ConfirmDialog(self, msg=success_msg, title=lang.getstr("profile.install"), ok=lang.getstr("profile.install"), cancel=lang.getstr("profile.do_not_install"), bitmap=geticon(32, "dialog-information"), alt=share_profile, style=wx.CAPTION | wx.CLOSE_BOX | wx.FRAME_FLOAT_ON_PARENT) if share_profile: # Show share profile button dlg.Unbind(wx.EVT_BUTTON, dlg.alt) dlg.Bind(wx.EVT_BUTTON, self.profile_share_handler, id=dlg.alt.GetId()) if preview and has_cal: # Show calibration preview checkbox self.preview = wx.CheckBox(dlg, -1, lang.getstr("calibration.preview")) self.preview.SetValue(True) dlg.Bind(wx.EVT_CHECKBOX, self.preview_handler, id=self.preview.GetId()) dlg.sizer3.Add(self.preview, flag=wx.TOP | wx.ALIGN_LEFT, border=12) if LUTFrame and not ProfileInfoFrame: # Disabled, use profile information window instead self.show_lut = wx.CheckBox(dlg, -1, lang.getstr( "calibration.show_lut")) dlg.Bind(wx.EVT_CHECKBOX, self.show_lut_handler, id=self.show_lut.GetId()) dlg.sizer3.Add(self.show_lut, flag=wx.TOP | wx.ALIGN_LEFT, border=4) self.show_lut.SetValue(bool(getcfg("lut_viewer.show"))) if not getattr(self, "lut_viewer", None): self.init_lut_viewer(profile=profile, show=getcfg("lut_viewer.show")) if ext not in (".icc", ".icm") or \ getcfg("calibration.file") != profile_path: self.preview_handler(preview=True) else: dlg.sizer3.Add((0, 8)) self.show_profile_info = wx.CheckBox(dlg, -1, lang.getstr("profile.info.show")) dlg.Bind(wx.EVT_CHECKBOX, self.profile_info_handler, id=self.show_profile_info.GetId()) dlg.sizer3.Add(self.show_profile_info, flag=wx.TOP | wx.ALIGN_LEFT, border=4) if profile.ID == "\0" * 16: id = profile.calculateID(False) else: id = profile.ID if id in self.profile_info: self.show_profile_info.SetValue( self.profile_info[id].IsShownOnScreen()) if sys.platform != "darwin" or test: self.profile_load_on_login = wx.CheckBox(dlg, -1, lang.getstr("profile.load_on_login")) self.profile_load_on_login.SetValue( bool(getcfg("profile.load_on_login") or (sys.platform == "win32" and sys.getwindowsversion() >= (6, 1) and util_win.calibration_management_isenabled()))) dlg.Bind(wx.EVT_CHECKBOX, self.profile_load_on_login_handler, id=self.profile_load_on_login.GetId()) dlg.sizer3.Add(self.profile_load_on_login, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer3.Add((1, 4)) if sys.platform == "win32" and sys.getwindowsversion() >= (6, 1): self.profile_load_by_os = wx.CheckBox(dlg, -1, lang.getstr("profile.load_on_login.handled_by_os")) self.profile_load_by_os.SetValue( bool(util_win.calibration_management_isenabled())) dlg.Bind(wx.EVT_CHECKBOX, self.profile_load_by_os_handler, id=self.profile_load_by_os.GetId()) dlg.sizer3.Add(self.profile_load_by_os, flag=wx.LEFT | wx.ALIGN_LEFT, border=16) dlg.sizer3.Add((1, 4)) self.profile_load_on_login_handler() if ((sys.platform == "darwin" or (sys.platform != "win32" and self.worker.argyll_version >= [1, 1, 0])) and (os.geteuid() == 0 or which("sudo"))) or \ (sys.platform == "win32" and sys.getwindowsversion() >= (6, ) and self.worker.argyll_version > [1, 1, 1] and is_superuser()) or test: # Linux, OSX or Vista and later # NOTE: System install scope is currently not implemented # correctly in dispwin 1.1.0, but a patch is trivial and # should be in the next version # 2010-06-18: Do not offer system install in dispcalGUI when # installing via GCM or oyranos FIXME: oyranos-monitor can't # be run via sudo self.install_profile_user = wx.RadioButton( dlg, -1, lang.getstr("profile.install_user"), style=wx.RB_GROUP) self.install_profile_user.SetValue( getcfg("profile.install_scope") == "u") dlg.Bind(wx.EVT_RADIOBUTTON, self.install_profile_scope_handler, id=self.install_profile_user.GetId()) dlg.sizer3.Add(self.install_profile_user, flag=wx.TOP | wx.ALIGN_LEFT, border=8) self.install_profile_systemwide = wx.RadioButton( dlg, -1, lang.getstr("profile.install_local_system")) self.install_profile_systemwide.SetValue( getcfg("profile.install_scope") == "l") dlg.Bind(wx.EVT_RADIOBUTTON, self.install_profile_scope_handler, id=self.install_profile_systemwide.GetId()) dlg.sizer3.Add(self.install_profile_systemwide, flag=wx.TOP | wx.ALIGN_LEFT, border=4) if sys.platform == "darwin" and \ os.path.isdir("/Network/Library/ColorSync/Profiles"): self.install_profile_network = wx.RadioButton( dlg, -1, lang.getstr("profile.install_network")) self.install_profile_network.SetValue( getcfg("profile.install_scope") == "n") dlg.Bind(wx.EVT_RADIOBUTTON, self.install_profile_scope_handler, id=self.install_profile_network.GetId()) dlg.sizer3.Add(self.install_profile_network, flag=wx.TOP | wx.ALIGN_LEFT, border=4) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.ok.SetDefault() self.Disable() dlg.profile = profile dlg.profile_path = profile_path dlg.skip_scripts = skip_scripts dlg.preview = preview dlg.OnCloseIntercept = self.profile_finish_close_handler self.modaldlg = dlg if sys.platform == "darwin": # FRAME_FLOAT_ON_PARENT does not work on Mac, # make sure we stay under our dialog self.Bind(wx.EVT_ACTIVATE, self.modaldlg_raise_handler) wx.CallAfter(dlg.Show) else: if isinstance(result, Exception): show_result_dialog(result, self) if getcfg("dry_run"): return InfoDialog(self, msg=failure_msg, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) if sys.platform == "darwin": # For some reason, the call to enable_menus() in Show() # sometimes isn't enough under Mac OS X (e.g. after calibrate & # profile) self.enable_menus() self.start_timers(True) setcfg("calibration.file.previous", None) def profile_finish_close_handler(self, event): if event.GetEventObject() == self.modaldlg: result = wx.ID_CANCEL else: result = event.GetId() if result == wx.ID_OK: if config.get_display_name() in ("Web", "Untethered", "madVR"): show_result_dialog(Info(lang.getstr("profile.install.virtual.unsupported")), parent=self.modaldlg) else: safe_print("-" * 80) safe_print(lang.getstr("profile.install")) result = self.worker.install_profile(profile_path=self.modaldlg.profile_path, skip_scripts=self.modaldlg.skip_scripts) if isinstance(result, Exception): show_result_dialog(result, parent=self.modaldlg) elif self.modaldlg.preview: if getcfg("calibration.file"): # Load LUT curves from last used .cal file self.load_cal(silent=True) else: # Load LUT curves from current display profile (if any, # and if it contains curves) self.load_display_profile_cal(None) self.Enable() if sys.platform == "darwin": # FRAME_FLOAT_ON_PARENT does not work on Mac, # unbind automatic lowering self.Unbind(wx.EVT_ACTIVATE, handler=self.modaldlg_raise_handler) self.Raise() self.modaldlg.Destroy() # The C part of modaldlg will not be gone instantly, so we must # dereference it before we can delete the python attribute self.modaldlg = None del self.modaldlg if sys.platform == "darwin": # For some reason, the call to enable_menus() in Show() # sometimes isn't enough under Mac OS X (e.g. after calibrate & # profile) self.enable_menus() self.start_timers(True) setcfg("calibration.file.previous", None) def profile_info_close_handler(self, event): if getattr(self, "show_profile_info", None): # If the profile install dialog is shown, just hide info window self.profile_info[event.GetEventObject().profileID].Hide() self.show_profile_info.SetValue(False) else: # Remove the frame from the hash table self.profile_info.pop(event.GetEventObject().profileID) # Closes the window event.Skip() def profile_info_handler(self, event): if event.GetEventObject() == getattr(self, "show_profile_info", None): # Use the profile that was requested to be installed profile = self.modaldlg.profile else: profile = self.select_profile(check_profile_class=False) if not profile: return if profile.ID == "\0" * 16: id = profile.calculateID(False) else: id = profile.ID show = (not getattr(self, "show_profile_info", None) or self.show_profile_info.GetValue()) if show: if not id in self.profile_info: # Create profile info window and store in hash table self.profile_info[id] = ProfileInfoFrame(None, -1) self.profile_info[id].Unbind(wx.EVT_CLOSE) self.profile_info[id].Bind(wx.EVT_CLOSE, self.profile_info_close_handler) if (not self.profile_info[id].profile or self.profile_info[id].profile.calculateID(False) != id): # Load profile if info window has no profile or ID is different self.profile_info[id].profileID = id self.profile_info[id].LoadProfile(profile) if self.profile_info.get(id): self.profile_info[id].Show(show) if show: self.profile_info[id].Raise() def modaldlg_raise_handler(self, event): """ Prevent modal dialog from being lowered (keep on top) """ self.modaldlg.Raise() def init_lut_viewer(self, event=None, profile=None, show=None): if debug: safe_print("[D] init_lut_viewer", profile.getDescription() if profile else None, "show:", show) if LUTFrame: if not getattr(self, "lut_viewer", None): self.lut_viewer = LUTFrame(None, -1) self.lut_viewer.client.worker = self.worker self.lut_viewer.Bind(wx.EVT_CLOSE, self.lut_viewer_close_handler, self.lut_viewer) if not profile and not hasattr(self, "current_cal"): path = getcfg("calibration.file") if path: name, ext = os.path.splitext(path) if ext.lower() in (".icc", ".icm"): try: profile = ICCP.ICCProfile(path) except (IOError, ICCP.ICCProfileInvalidError), \ exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return else: profile = cal_to_fake_profile(path) else: profile = get_display_profile() or False if show is None: show = not self.lut_viewer.IsShownOnScreen() if debug: safe_print("[D] init_lut_viewer (2)", profile.getDescription() if profile else None, "show:", show) self.show_lut_handler(profile=profile, show=show) def lut_viewer_load_lut(self, event=None, profile=None, force_draw=False): if debug: safe_print("[D] lut_viewer_load_lut", profile.getDescription() if profile else None, "force_draw:", force_draw) if LUTFrame: self.current_cal = profile if getattr(self, "lut_viewer", None) and \ (self.lut_viewer.IsShownOnScreen() or force_draw): self.lut_viewer.load_lut(profile) def show_lut_handler(self, event=None, profile=None, show=None): if debug: safe_print("[D] show_lut_handler", profile.getDescription() if profile else None, "show:", show) if show is None: show = bool((hasattr(self, "show_lut") and self.show_lut and self.show_lut.GetValue()) or (not hasattr(self, "show_lut") or not self.show_lut)) setcfg("lut_viewer.show", int(show)) if not profile and hasattr(self, "current_cal"): profile = self.current_cal if show: self.lut_viewer_load_lut(event, profile, force_draw=True) if getattr(self, "lut_viewer", None): self.menuitem_show_lut.Check(show) self.lut_viewer.Show(show) if show: self.lut_viewer.Raise() def lut_viewer_close_handler(self, event=None): setcfg("lut_viewer.show", 0) self.lut_viewer.Hide() self.menuitem_show_lut.Check(False) if hasattr(self, "show_lut") and self.show_lut: self.show_lut.SetValue(self.lut_viewer.IsShownOnScreen()) def show_advanced_calibration_options_handler(self, event=None): """ Show or hide advanced calibration settings """ show_advanced_calibration_options = bool(getcfg("show_advanced_calibration_options")) if event: show_advanced_calibration_options = not show_advanced_calibration_options setcfg("show_advanced_calibration_options", int(show_advanced_calibration_options)) self.calpanel.Freeze() self.menuitem_show_advanced_calibration_options.Check(show_advanced_calibration_options) for ctrl in (#self.black_luminance_label, #self.black_luminance_ctrl, #self.black_luminance_textctrl, #self.black_luminance_textctrl_label, #self.blacklevel_drift_compensation, self.trc_type_ctrl, self.ambient_viewcond_adjust_cb, self.ambient_viewcond_adjust_textctrl, self.ambient_viewcond_adjust_textctrl_label, self.ambient_viewcond_adjust_info, self.ambient_measure_btn, self.black_output_offset_label, self.black_output_offset_ctrl, self.black_output_offset_intctrl, self.black_output_offset_intctrl_label, self.black_point_correction_label, self.black_point_correction_auto_cb, self.black_point_rate_label, self.black_point_rate_ctrl, self.black_point_rate_floatctrl): if (ctrl is not self.trc_type_ctrl or self.trc_ctrl.GetSelection() == 0): ctrl.GetContainingSizer().Show(ctrl, show_advanced_calibration_options) self.black_point_correction_auto_handler() self.calpanel.Layout() self.calpanel.Refresh() self.calpanel.Thaw() self.update_scrollbars() def install_profile_scope_handler(self, event): if self.install_profile_systemwide.GetValue(): setcfg("profile.install_scope", "l") elif sys.platform == "darwin" and \ os.path.isdir("/Network/Library/ColorSync/Profiles") and \ self.install_profile_network.GetValue(): setcfg("profile.install_scope", "n") elif self.install_profile_user.GetValue(): setcfg("profile.install_scope", "u") def start_timers(self, wrapup=False): if wrapup: self.worker.wrapup(False) if not self.plugplay_timer.IsRunning(): self.plugplay_timer.Start(10000) if not self.update_profile_name_timer.IsRunning(): self.update_profile_name_timer.Start(1000) def stop_timers(self): self.plugplay_timer.Stop() self.update_profile_name_timer.Stop() def synthicc_create_handler(self, event): """ Assign and initialize the synthetic ICC creation window """ if not getattr(self, "synthiccframe", None): self.init_synthiccframe() if self.synthiccframe.IsShownOnScreen(): self.synthiccframe.Raise() else: self.synthiccframe.Show(not self.synthiccframe.IsShownOnScreen()) def colorimeter_correction_matrix_ctrl_handler(self, event): measurement_mode = getcfg("measurement_mode") if event.GetId() == self.colorimeter_correction_matrix_ctrl.GetId(): path = None ccmx = getcfg("colorimeter_correction_matrix_file").split(":", 1) if self.colorimeter_correction_matrix_ctrl.GetSelection() == 0: # Off ccmx = ["", ""] elif self.colorimeter_correction_matrix_ctrl.GetSelection() == 1: # Auto ccmx = ["AUTO", ""] else: path = self.ccmx_item_paths[ self.colorimeter_correction_matrix_ctrl.GetSelection() - 2] ccmx = ["", path] setcfg("colorimeter_correction_matrix_file", ":".join(ccmx)) self.update_colorimeter_correction_matrix_ctrl_items() else: path = None ccmx = getcfg("colorimeter_correction_matrix_file").split(":", 1) defaultDir, defaultFile = get_verified_path(None, ccmx.pop()) dlg = wx.FileDialog(self, lang.getstr("colorimeter_correction_matrix_file.choose"), defaultDir=defaultDir if defaultFile else config.get_argyll_data_dir(), defaultFile=defaultFile, wildcard=lang.getstr("filetype.ccmx") + "|*.ccmx;*.ccss", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if (getcfg("colorimeter_correction_matrix_file").split(":")[0] != "AUTO" or path not in self.ccmx_cached_paths): setcfg("colorimeter_correction_matrix_file", ":" + path) self.update_colorimeter_correction_matrix_ctrl_items(warn_on_mismatch=True) if measurement_mode != getcfg("measurement_mode"): # Check if black point correction should be turned on self.measurement_mode_ctrl_handler() def colorimeter_correction_web_handler(self, event): """ Check the web for cccmx or ccss files """ if self.worker.instrument_supports_ccss(): filetype = 'ccss,ccmx' else: filetype = 'ccmx' params = {'get': True, 'type': filetype, 'display': self.worker.get_display_name(False, True) or "Unknown", 'instrument': self.worker.get_instrument_name() or "Unknown"} self.worker.interactive = False self.worker.start(colorimeter_correction_web_check_choose, http_request, ckwargs={"parent": self}, wargs=(self, domain, "GET", "/colorimetercorrections/index.php", params), progress_msg=lang.getstr("colorimeter_correction.web_check"), stop_timers=False) def create_colorimeter_correction_handler(self, event=None): """ Create a CCSS or CCMX file from one or more .ti3 files Atleast one of the ti3 files must be a measured with a spectrometer. """ dlg = ConfirmDialog(self, msg=lang.getstr("colorimeter_correction.create.info"), ok=lang.getstr("colorimeter_correction.create"), cancel=lang.getstr("cancel"), alt=lang.getstr("measure.testchart"), bitmap=geticon(32, "dialog-information")) dlg.alt.Enable(bool(self.worker.displays) and bool(self.worker.instruments)) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_CANCEL: return elif result != wx.ID_OK: if not is_ccxx_testchart(): setcfg("testchart.file.backup", getcfg("testchart.file")) self.set_testchart(get_ccxx_testchart()) self.measure_handler() return ccxx = CGATS.CGATS(get_ccxx_testchart()) cgats_list = [] reference_ti3 = None colorimeter_ti3 = None spectral = False for n in (0, 1): path = None if reference_ti3: defaultDir, defaultFile = get_verified_path("last_colorimeter_ti3_path") msg = lang.getstr("measurement_file.choose.colorimeter") else: defaultDir, defaultFile = get_verified_path("last_reference_ti3_path") msg = lang.getstr("measurement_file.choose.reference") dlg = wx.FileDialog(self, msg, defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.ti3") + "|*.ti3;*.icm;*.icc", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: try: if os.path.splitext(path.lower())[1] in (".icm", ".icc"): profile = ICCP.ICCProfile(path) cgats = self.worker.ti1_lookup_to_ti3(ccxx, profile, pcs="x", intent="a")[1] cgats.add_keyword("DATA_SOURCE", profile.tags.get("meta", {}).get("DATA_source", {}).get("value", "").upper() or "Unknown") if cgats.DATA_SOURCE == "EDID": instrument = "EDID" else: targ = profile.tags.get("CIED", profile.tags.get("targ", "")) instrument = None if targ[0:4] == "CTI3": targ = CGATS.CGATS(targ) instrument = targ.queryv1("TARGET_INSTRUMENT") if not instrument: instrument = profile.tags.get("meta", {}).get("MEASUREMENT_device", {}).get("value", "Unknown") cgats.add_keyword("TARGET_INSTRUMENT", instrument) spectral = "YES" if instruments.get(get_canonical_instrument_name(cgats.TARGET_INSTRUMENT), {}).get("spectral", False) else "NO" cgats.add_keyword("INSTRUMENT_TYPE_SPECTRAL", spectral) cgats.ARGYLL_COLPROF_ARGS = CGATS.CGATS() cgats.ARGYLL_COLPROF_ARGS.key = "ARGYLL_COLPROF_ARGS" cgats.ARGYLL_COLPROF_ARGS.parent = cgats cgats.ARGYLL_COLPROF_ARGS.root = cgats cgats.ARGYLL_COLPROF_ARGS.type = "SECTION" display = profile.tags.get("meta", {}).get("EDID_model", {}).get("value", "").encode("UTF-7") manufacturer = profile.tags.get("meta", {}).get("EDID_manufacturer", {}).get("value", "").encode("UTF-7") cgats.ARGYLL_COLPROF_ARGS.add_data('-M "%s" -A "%s"' % (display, manufacturer)) cgats = CGATS.CGATS(str(cgats)) else: cgats = CGATS.CGATS(path) if not cgats.queryv1("DATA"): raise CGATS.CGATSError("Missing DATA") except Exception, exception: safe_print(exception) InfoDialog(self, msg=lang.getstr("error.measurement.file_invalid", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return else: cgats_list.append(cgats) # Check if measurement contains spectral values # Check if instrument type is spectral if (cgats.queryv1("SPECTRAL_BANDS") or cgats.queryv1("DATA_SOURCE") == "EDID"): if reference_ti3: # We already have a reference ti3 reference_ti3 = None break reference_ti3 = cgats setcfg("last_reference_ti3_path", path) if cgats.queryv1("SPECTRAL_BANDS"): spectral = True # Ask if user wants to create CCSS dlg = ConfirmDialog(self, msg=lang.getstr("create_ccss_or_ccmx"), ok=lang.getstr("CCSS"), cancel=lang.getstr("cancel"), alt=lang.getstr("CCMX"), bitmap=geticon(32, "dialog-information")) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: break elif result == wx.ID_CANCEL: return elif cgats.queryv1("INSTRUMENT_TYPE_SPECTRAL") == "YES": if reference_ti3: # We already have a reference ti3 reference_ti3 = None break reference_ti3 = cgats setcfg("last_reference_ti3_path", path) elif cgats.queryv1("INSTRUMENT_TYPE_SPECTRAL") == "NO": if colorimeter_ti3: # We already have a colorimeter ti3 colorimeter_ti3 = None break colorimeter_ti3 = cgats setcfg("last_colorimeter_ti3_path", path) else: # User canceled dialog return # Check if atleast one file has been measured with a reference if not reference_ti3: InfoDialog(self, msg=lang.getstr("error.measurement.one_reference"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return if len(cgats_list) == 2: if not colorimeter_ti3: # If 2 files, check if atleast one file has NOT been measured # with a spectro (CCMX creation) InfoDialog(self, msg=lang.getstr("error.measurement.one_colorimeter"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return # Use only the device combinations from CCXX testchart reference_new = CGATS.CGATS("BEGIN_DATA\nEND_DATA") reference_new.DATA_FORMAT = reference_ti3.queryv1("DATA_FORMAT") colorimeter_new = CGATS.CGATS("BEGIN_DATA\nEND_DATA") colorimeter_new.DATA_FORMAT = colorimeter_ti3.queryv1("DATA_FORMAT") data_reference = reference_ti3.queryv1("DATA") data_colorimeter = colorimeter_ti3.queryv1("DATA") required = ccxx.queryv(("RGB_R", "RGB_G", "RGB_B")) devicecombination2name = {"RGB_R=100 RGB_G=100 RGB_B=100": "white", "RGB_R=100 RGB_G=0 RGB_B=0": "red", "RGB_R=0 RGB_G=100 RGB_B=0": "green", "RGB_R=0 RGB_G=0 RGB_B=100": "blue"} for i, values in required.iteritems(): patch = OrderedDict([("RGB_R", values[0]), ("RGB_G", values[1]), ("RGB_B", values[2])]) devicecombination = " ".join(["=".join([key, "%i" % value]) for key, value in patch.iteritems()]) name = devicecombination2name.get(devicecombination, devicecombination) item = data_reference.queryi1(patch) if item: reference_new.DATA.add_data(item) else: show_result_dialog(lang.getstr("error.testchart.missing_fields", (os.path.basename(reference_ti3.filename), lang.getstr(name)))) return item = data_colorimeter.queryi1(patch) if item: colorimeter_new.DATA.add_data(item) else: show_result_dialog(lang.getstr("error.testchart.missing_fields", (os.path.basename(colorimeter_ti3.filename), lang.getstr(name)))) return reference_ti3.queryi1("DATA").DATA = reference_new.DATA colorimeter_ti3.queryi1("DATA").DATA = colorimeter_new.DATA # If the reference comes from EDID, normalize luminance to Y=100 if reference_ti3.queryv1("DATA_SOURCE") == "EDID": white = colorimeter_ti3.queryi1("DATA").queryi1({"RGB_R": 100, "RGB_G": 100, "RGB_B": 100}) white = " ".join([str(v) for v in (white["XYZ_X"], white["XYZ_Y"], white["XYZ_Z"])]) colorimeter_ti3.queryi1("DATA").LUMINANCE_XYZ_CDM2 = white # Add display base ID if not colorimeter_ti3.queryv1("DISPLAY_TYPE_BASE_ID"): # c, l (most colorimeters) # R (ColorHug and Colorimétre HCFR) # F (ColorHug) # f (ColorMunki Smile) # g (DTP94) colorimeter_ti3[0].add_keyword("DISPLAY_TYPE_BASE_ID", {"c": 2, "l": 1, "R": 1, "F": 2, "f": 1, "g": 3}.get(getcfg("measurement_mode"), 1)) elif not spectral: # If 1 file, check if it contains spectral values (CCSS creation) InfoDialog(self, msg=lang.getstr("error.measurement.missing_spectral"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return else: description = self.worker.get_display_name(True) # Add display type for cgats in cgats_list: if not cgats.queryv1("DISPLAY_TYPE_REFRESH"): cgats[0].add_keyword("DISPLAY_TYPE_REFRESH", {"c": "YES", "l": "NO"}.get(getcfg("measurement_mode"), "NO")) options_dispcal, options_colprof = get_options_from_ti3(reference_ti3) display = None manufacturer = None manufacturer_display = None for option in options_colprof: if option.startswith("M"): display = option[1:].strip(' "') elif option.startswith("A"): manufacturer = option[1:].strip(' "') if manufacturer and display: manufacturer_display = " ".join([colord.quirk_manufacturer(manufacturer), display]) elif display: manufacturer_display = display if len(cgats_list) == 2: instrument = colorimeter_ti3.queryv1("TARGET_INSTRUMENT") if instrument: instrument = safe_unicode(instrument, "UTF-8") description = "%s & %s" % (instrument or self.worker.get_instrument_name(), manufacturer_display or self.worker.get_display_name(True)) target_instrument = reference_ti3.queryv1("TARGET_INSTRUMENT") if target_instrument: description = "%s (%s)" % (description, target_instrument) args = [] # Allow use to alter description, display and instrument dlg = ConfirmDialog( self, msg=lang.getstr("colorimeter_correction.create.details"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-question")) dlg.sizer3.Add(wx.StaticText(dlg, -1, lang.getstr("description")), 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.description_txt_ctrl = wx.TextCtrl(dlg, -1, description, size=(400, -1)) dlg.sizer3.Add(dlg.description_txt_ctrl, 1, flag=wx.TOP | wx.ALIGN_LEFT, border=4) if not display: dlg.sizer3.Add(wx.StaticText(dlg, -1, lang.getstr("display")), 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.display_txt_ctrl = wx.TextCtrl(dlg, -1, self.worker.get_display_name(True, True), size=(400, -1)) dlg.sizer3.Add(dlg.display_txt_ctrl, 1, flag=wx.TOP | wx.ALIGN_LEFT, border=4) if not manufacturer: dlg.sizer3.Add(wx.StaticText(dlg, -1, lang.getstr("display.manufacturer")), 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.manufacturer_txt_ctrl = wx.TextCtrl(dlg, -1, self.worker.get_display_edid().get("manufacturer", ""), size=(400, -1)) dlg.sizer3.Add(dlg.manufacturer_txt_ctrl, 1, flag=wx.TOP | wx.ALIGN_LEFT, border=4) dlg.sizer4 = wx.FlexGridSizer(2, 3, 0, 8) dlg.sizer4.AddGrowableCol(0, 1) dlg.sizer4.AddGrowableCol(1, 1) dlg.sizer4.AddGrowableCol(2, 1) dlg.sizer3.Add(dlg.sizer4, 1, flag=wx.EXPAND) dlg.sizer4.Add(wx.StaticText(dlg, -1, lang.getstr("display.tech")), 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer4.Add(wx.StaticText(dlg, -1, lang.getstr("backlight")), 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer4.Add(wx.StaticText(dlg, -1, lang.getstr("panel.type")), 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) # Display technology dlg.display_tech_ctrl = wx.Choice(dlg, -1, choices=["LCD", "CRT", "Plasma", "Projector"]) dlg.display_tech_ctrl.SetSelection(0) dlg.sizer4.Add(dlg.display_tech_ctrl, flag=wx.TOP | wx.ALIGN_LEFT | wx.EXPAND, border=4) def display_tech_handler(event): tech = dlg.display_tech_ctrl.GetStringSelection() illumination = dlg.illumination_ctrl.GetStringSelection() separate_illumination = ("LCD", "DLP", "LCoS") dlg.illumination_ctrl.Enable(tech in separate_illumination) if tech in ("DLP", "LCoS") and illumination == "CCFL": dlg.illumination_ctrl.SetStringSelection("UHP") dlg.panel_type_ctrl.Enable(tech == "LCD") dlg.Bind(wx.EVT_CHOICE, display_tech_handler, id=dlg.display_tech_ctrl.GetId()) # Display illumination/backlight dlg.illumination_ctrl = wx.Choice(dlg, -1, choices=["CCFL", "White LED", "RGB LED"]) dlg.illumination_ctrl.SetSelection(0) dlg.sizer4.Add(dlg.illumination_ctrl, flag=wx.TOP | wx.ALIGN_LEFT | wx.EXPAND, border=4) # Panel type dlg.panel_type_ctrl = wx.Choice(dlg, -1, choices=["IPS", "Wide Gamut IPS", "PVA", "Wide Gamut PVA", "TN"]) dlg.panel_type_ctrl.SetSelection(1) dlg.sizer4.Add(dlg.panel_type_ctrl, flag=wx.TOP | wx.ALIGN_LEFT | wx.EXPAND, border=4) dlg.description_txt_ctrl.SetFocus() dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.Center() result = dlg.ShowModal() args += ["-E", safe_str(dlg.description_txt_ctrl.GetValue().strip(), "UTF-8")] if not display: display = dlg.display_txt_ctrl.GetValue() args += ["-I", safe_str(display.strip(), "UTF-8")] tech = [] for ctrl in (dlg.display_tech_ctrl, dlg.illumination_ctrl, dlg.panel_type_ctrl): if ctrl.IsEnabled() and ctrl.GetStringSelection(): tech.append(ctrl.GetStringSelection()) if reference_ti3 and not colorimeter_ti3: args += ["-T", safe_str(" ".join(tech), "UTF-8")] if result != wx.ID_OK: return # Prepare our files cwd = self.worker.create_tempdir() ti3_tmp_names = [] if reference_ti3: reference_ti3.write(os.path.join(cwd, 'reference.ti3')) ti3_tmp_names.append('reference.ti3') if colorimeter_ti3: # Create CCMX colorimeter_ti3.write(os.path.join(cwd, 'colorimeter.ti3')) ti3_tmp_names.append('colorimeter.ti3') name = "correction" ext = ".ccmx" else: # Create CCSS args.append("-S") name = "calibration" ext = ".ccss" args.append("-f") args.append(",".join(ti3_tmp_names)) args.append(name + ext) result = self.worker.create_ccxx(args, cwd) source = os.path.join(self.worker.tempdir, name + ext) if isinstance(result, Exception): show_result_dialog(result, self) elif result and os.path.isfile(source): # Important: Do not use parsed CGATS, order of keywords may be # different than raw data so MD5 will be different try: cgatsfile = open(source, "rb") except Exception, exception: show_result_dialog(exception, self) self.worker.wrapup(False) return cgats = universal_newlines(cgatsfile.read()) cgatsfile.close() if (reference_ti3[0].get("TARGET_INSTRUMENT") and not re.search('\nREFERENCE\s+".+?"\n', cgats)): # By default, CCSS files don't contain reference instrument cgats = re.sub('(\nKEYWORD\s+"DISPLAY"\n)', '\nKEYWORD "REFERENCE"\nREFERENCE "%s"\\1' % reference_ti3[0].get("TARGET_INSTRUMENT"), cgats) if not re.search('\nTECHNOLOGY\s+".+?"\n', cgats): # By default, CCMX files don't contain technology string cgats = re.sub('(\nKEYWORD\s+"DISPLAY"\n)', '\nKEYWORD "TECHNOLOGY"\nTECHNOLOGY "%s"\\1' % safe_str(" ".join(tech), "UTF-8"), cgats) manufacturer_id = None if not manufacturer: manufacturer = dlg.manufacturer_txt_ctrl.GetValue() if manufacturer: if not pnpidcache: # Populate pnpidcache get_manufacturer_name("???") manufacturers = dict([name, id] for id, name in pnpidcache.iteritems()) manufacturer_id = manufacturers.get(manufacturer) if manufacturer_id and not re.search('\nMANUFACTURER_ID\s+".+?"\n', cgats): # By default, CCMX/CCSS files don't contain manufacturer ID cgats = re.sub('(\nKEYWORD\s+"DISPLAY"\n)', '\nKEYWORD "MANUFACTURER_ID"\nMANUFACTURER_ID "%s"\\1' % safe_str(manufacturer_id, "UTF-8"), cgats) if manufacturer and not re.search('\nMANUFACTURER\s+".+?"\n', cgats): # By default, CCMX/CCSS files don't contain manufacturer cgats = re.sub('(\nKEYWORD\s+"DISPLAY"\n)', '\nKEYWORD "MANUFACTURER"\nMANUFACTURER "%s"\\1' % safe_str(manufacturer, "UTF-8"), cgats) result = check_create_dir(config.get_argyll_data_dir()) if isinstance(result, Exception): show_result_dialog(result, self) return if (colorimeter_correction_check_overwrite(self, cgats)): self.upload_colorimeter_correction(cgats) elif result is not None: InfoDialog(self, msg=lang.getstr("colorimeter_correction.create.failure") + "\n" + "\n".join(self.worker.errors), ok=lang.getstr("cancel"), bitmap=geticon(32, "dialog-error")) self.worker.wrapup(False) def upload_colorimeter_correction(self, cgats): """ Ask the user if he wants to upload a colorimeter correction to the online database. Upload the file. """ dlg = ConfirmDialog(self, msg=lang.getstr("colorimeter_correction.upload.confirm"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information")) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: params = {"cgats": cgats} # Upload correction self.worker.interactive = False self.worker.start(lambda result: result, upload_colorimeter_correction, wargs=(self, params), progress_msg=lang.getstr("colorimeter_correction.upload"), stop_timers=False) def upload_colorimeter_correction_handler(self, event): """ Let user choose a ccss/ccmx file to upload """ path = None defaultDir, defaultFile = get_verified_path("last_filedialog_path") dlg = wx.FileDialog(self, lang.getstr("colorimeter_correction_matrix_file.choose"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.ccmx") + "|*.ccmx;*.ccss", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: setcfg("last_filedialog_path", path) # Important: Do not use parsed CGATS, order of keywords may be # different than raw data so MD5 will be different cgatsfile = open(path, "rb") cgats = cgatsfile.read() cgatsfile.close() originator = re.search('\nORIGINATOR\s+"Argyll', cgats) if not originator: InfoDialog(self, msg=lang.getstr("colorimeter_correction.upload.deny"), ok=lang.getstr("cancel"), bitmap=geticon(32, "dialog-error")) else: self.upload_colorimeter_correction(cgats) def comport_ctrl_handler(self, event=None): if debug and event: safe_print("[D] comport_ctrl_handler called for ID %s %s event " "type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) if self.comport_ctrl.GetSelection() > -1: setcfg("comport.number", self.comport_ctrl.GetSelection() + 1) self.update_measurement_modes() self.update_colorimeter_correction_matrix_ctrl() self.update_colorimeter_correction_matrix_ctrl_items() def import_colorimeter_correction_handler(self, event): """ Convert correction matrices from other profiling softwares to Argyll's CCMX or CCSS format (or to spyd4cal.bin in case of the Spyder4) Currently supported: iColor Display (native import to CCMX), i1 Profiler (import to CCSS via Argyll CMS 1.3.4) Spyder4 (import to spyd4cal.bin via Argyll CMS 1.3.6) """ dlg = ConfirmDialog(self, title=lang.getstr("colorimeter_correction.import"), msg=lang.getstr("colorimeter_correction.import.auto_manual"), ok=lang.getstr("auto"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-question"), alt=lang.getstr("file.select")) choice = dlg.ShowModal() if choice == wx.ID_CANCEL: return result = None i1d3 = False i1d3ccss = get_argyll_util("i1d3ccss") if i1d3ccss and choice == wx.ID_OK: # Automatically import X-Rite .edr files result = self.worker.import_edr() if not isinstance(result, Exception): i1d3 = result spyd4 = False spyd4en = get_argyll_util("spyd4en") if spyd4en and choice == wx.ID_OK: # Automatically import Spyder4 calibrations result = self.worker.import_spyd4cal() if not isinstance(result, Exception): spyd4 = result # Import iColorDisplay device corrections or let the user choose defaultDir = "" defaultFile = "" path = None # Look for iColorDisplay if sys.platform == "win32": defaultDir = os.path.join(getenvu("PROGRAMFILES", ""), "Quato", "iColorDisplay") elif sys.platform == "darwin": paths = glob.glob(os.path.join(os.path.sep, "Applications", "iColorDisplay*.app")) paths += glob.glob(os.path.join(os.path.sep, "Volumes", "iColorDisplay*", "iColorDisplay*.app")) if paths: defaultDir = paths[-1] if defaultDir and os.path.isdir(defaultDir): # iColorDisplay found defaultFile = "DeviceCorrections.txt" elif i1d3ccss and not i1d3: # Look for *.edr files if sys.platform == "win32": defaultDir = os.path.join(getenvu("PROGRAMFILES", ""), "X-Rite", "Devices", "i1d3", "Calibrations") elif sys.platform == "darwin": paths = glob.glob(os.path.join(os.path.sep, "Library", "Application Support", "X-Rite", "Devices", "i1d3xrdevice", "Contents", "Resources", "Calibrations")) paths += glob.glob(os.path.join(os.path.sep, "Volumes", "i1Profiler")) paths += glob.glob(os.path.join(os.path.sep, "Volumes", "ColorMunki Display")) if paths: defaultDir = paths[-1] elif spyd4en and not spyd4: # Look for dccmtr.dll if sys.platform == "win32": paths = glob.glob(os.path.join(getenvu("PROGRAMFILES", ""), "Datacolor", "Spyder4*", "dccmtr.dll")) elif sys.platform == "darwin": # Look for setup.exe on CD-ROM paths = glob.glob(os.path.join(os.path.sep, "Volumes", "Datacolor", "Data", "setup.exe")) paths += glob.glob(os.path.join(os.path.sep, "Volumes", "Datacolor_ISO", "Data", "setup.exe")) if paths: defaultDir, defaultFile = os.path.split(paths[-1]) if defaultDir and os.path.isdir(defaultDir): if choice == wx.ID_OK: path = os.path.join(defaultDir, defaultFile) if (not path or not os.path.isfile(path)) and not (i1d3 or spyd4): dlg = wx.FileDialog(self, lang.getstr("colorimeter_correction.import.choose"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.any") + "|*.edr;*.exe;*.txt", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() icd = False if path and os.path.exists(path): type = None if path.lower().endswith(".txt"): type = ".txt" else: icolordisplay = "icolordisplay" in os.path.basename(path).lower() if path.lower().endswith(".dmg"): if icolordisplay: # TODO: We have a iColorDisplay disk image, # try mounting it pass elif i1d3ccss and path.lower().endswith(".edr"): type = "xrite" elif path.lower().endswith(".exe"): if icolordisplay: # TODO: We have a iColorDisplay installer, # try opening it as lzma archive pass elif i1d3ccss and ("colormunki" in os.path.basename(path).lower() or "i1profiler" in os.path.basename(path).lower()): # Assume X-Rite installer type = "xrite" elif spyd4en and "spyder4" in os.path.basename(path).lower(): # Assume Spyder4 type = "spyder4" if type == ".txt": if not getcfg("dry_run"): # Assume iColorDisplay DeviceCorrections.txt ccmx_dir = config.get_argyll_data_dir() if not os.path.exists(ccmx_dir): result = check_create_dir(ccmx_dir) if isinstance(result, Exception): show_result_dialog(result, self) return safe_print(lang.getstr("colorimeter_correction.import")) safe_print(path) try: ccmx.convert_devicecorrections_to_ccmx(path, ccmx_dir) except (OSError, UnicodeDecodeError, demjson.JSONDecodeError), exception: result = Error(lang.getstr("file.invalid")) else: result = icd = True elif type == "xrite": # Import .edr result = i1d3 = self.worker.import_edr([path]) elif type == "spyder4": # Import spyd4cal.bin result = spyd4 = self.worker.import_spyd4cal([path]) else: result = Error(lang.getstr("error.file_type_unsupported")) if isinstance(result, Exception): show_result_dialog(result, self) elif result: if spyd4en: self.update_measurement_modes() self.update_colorimeter_correction_matrix_ctrl_items(True) imported = [] if i1d3: imported.append("i1 Profiler/ColorMunki Display") if spyd4: imported.append("Spyder4") if icd: imported.append("iColor Display") InfoDialog(self, msg=lang.getstr("colorimeter_correction.import.success", "\n".join(imported)), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) elif result is not None: InfoDialog(self, msg=lang.getstr("colorimeter_correction.import.failure"), ok=lang.getstr("cancel"), bitmap=geticon(32, "dialog-error")) def display_ctrl_handler(self, event, load_lut=True, update_ccmx_items=True): if debug: safe_print("[D] display_ctrl_handler called for ID %s %s event " "type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) display_no = self.display_ctrl.GetSelection() profile = None if display_no > -1: setcfg("display.number", display_no + 1) if load_lut: profile = get_display_profile(display_no) self.profile_info_btn.Enable(bool(profile)) if self.display_lut_link_ctrl.IsShown(): self.display_lut_link_ctrl_handler(CustomEvent( wx.EVT_BUTTON.evtType[0], self.display_lut_link_ctrl), bool(int(getcfg("display_lut.link")))) if load_lut: if debug: safe_print("[D] display_ctrl_handler -> lut_viewer_load_lut", profile.getDescription() if profile else None) self.lut_viewer_load_lut(profile=profile) if debug: safe_print("[D] display_ctrl_handler -> lut_viewer_load_lut END") if config.get_display_name() == "madVR": if getcfg("calibration.use_video_lut.backup", False) is None: setcfg("calibration.use_video_lut.backup", getcfg("calibration.use_video_lut")) setcfg("calibration.use_video_lut", 0) elif getcfg("calibration.use_video_lut.backup", False): setcfg("calibration.use_video_lut", getcfg("calibration.use_video_lut.backup")) setcfg("calibration.use_video_lut.backup", None) if self.IsShownOnScreen(): self.update_menus() if (update_ccmx_items and getcfg("colorimeter_correction_matrix_file").split(":")[0] == "AUTO"): self.update_colorimeter_correction_matrix_ctrl_items() self.update_main_controls() if getattr(self, "reportframe", None): self.reportframe.update_main_controls() def display_lut_ctrl_handler(self, event): if debug: safe_print("[D] display_lut_ctrl_handler called for ID %s %s event " "type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) try: i = self.displays.index(self.display_lut_ctrl.GetStringSelection()) except ValueError: i = min(0, self.display_ctrl.GetSelection()) setcfg("display_lut.number", i + 1) def display_lut_link_ctrl_handler(self, event, link=None): if debug: safe_print("[D] display_lut_link_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) bitmap_link = geticon(16, "stock_lock") bitmap_unlink = geticon(16, "stock_lock-open") if link is None: link = not bool(int(getcfg("display_lut.link"))) link = (not len(self.worker.displays) or (link and self.worker.lut_access[max(min(len(self.worker.displays), getcfg("display.number")), 0) - 1])) lut_no = -1 if link: self.display_lut_link_ctrl.SetBitmapLabel(bitmap_link) try: lut_no = self.display_lut_ctrl.Items.index(self.display_ctrl.GetStringSelection()) except ValueError: pass else: self.display_lut_link_ctrl.SetBitmapLabel(bitmap_unlink) if lut_no < 0: try: lut_no = self.display_lut_ctrl.Items.index(self.display_ctrl.Items[getcfg("display_lut.number") - 1]) except (IndexError, ValueError): lut_no = min(0, self.display_ctrl.GetSelection()) self.display_lut_ctrl.SetSelection(lut_no) self.display_lut_ctrl.Enable(not link and self.display_lut_ctrl.GetCount() > 1) setcfg("display_lut.link", int(link)) try: i = self.displays.index(self.display_lut_ctrl.Items[lut_no]) except (IndexError, ValueError): i = min(0, self.display_ctrl.GetSelection()) setcfg("display_lut.number", i + 1) def measurement_mode_ctrl_handler(self, event=None): if debug: safe_print("[D] measurement_mode_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) v = self.get_measurement_mode() if v and "p" in v and self.worker.argyll_version < [1, 1, 0]: self.measurement_mode_ctrl.SetSelection( self.measurement_modes_ba[self.get_instrument_type()].get( defaults["measurement_mode"], 1)) v = None InfoDialog(self, msg=lang.getstr("projector_mode_unavailable"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) if v and "V" in v and self.worker.argyll_version < [1, 1, 0] or ( self.worker.argyll_version[0:3] == [1, 1, 0] and ( "Beta" in self.worker.argyll_version_string or "RC1" in self.worker.argyll_version_string or "RC2" in self.worker.argyll_version_string)): # adaptive emissive mode was added in RC3 self.measurement_mode_ctrl.SetSelection( self.measurement_modes_ba[self.get_instrument_type()].get( defaults["measurement_mode"], 1)) v = None InfoDialog(self, msg=lang.getstr("adaptive_mode_unavailable"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) cal_changed = v != getcfg("measurement_mode") and \ getcfg("calibration.file") not in self.presets if cal_changed: self.cal_changed() setcfg("measurement_mode", (strtr(v, {"V": "", "H": ""}) if v else None) or None) instrument_features = self.worker.get_instrument_features() if instrument_features.get("adaptive_mode"): setcfg("measurement_mode.adaptive", 1 if v and "V" in v else 0) if instrument_features.get("highres_mode"): setcfg("measurement_mode.highres", 1 if v and "H" in v else 0) if v and self.worker.get_instrument_name() == "ColorHug" and "p" in v: # ColorHug projector mode is just a correction matrix # Avoid setting ColorMunki projector mode v = v.replace("p", "") # ColorMunki projector mode is an actual special sensor dial position setcfg("measurement_mode.projector", 1 if v and "p" in v else None) self.update_colorimeter_correction_matrix_ctrl() if (v and (((not "c" in v or "p" in v) and float(self.get_black_point_correction()) > 0) or ("c" in v and float(self.get_black_point_correction()) == 0)) and getcfg("calibration.black_point_correction_choice.show") and not getcfg("calibration.black_point_correction.auto")): if "c" in v: ok = lang.getstr("calibration.turn_on_black_point_correction") else: ok = lang.getstr("calibration.turn_off_black_point_correction") title = "calibration.black_point_correction_choice_dialogtitle" msg = "calibration.black_point_correction_choice" cancel = "calibration.keep_black_point_correction" dlg = ConfirmDialog(self, title=lang.getstr(title), msg=lang.getstr(msg), ok=ok, cancel=lang.getstr(cancel), bitmap=geticon(32, "dialog-question")) chk = wx.CheckBox(dlg, -1, lang.getstr("dialog.do_not_show_again")) dlg.Bind(wx.EVT_CHECKBOX, self.black_point_correction_choice_dialog_handler, id=chk.GetId()) dlg.sizer3.Add(chk, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: if "c" in v: bkpt_corr = 1.0 else: bkpt_corr = 0.0 if not cal_changed and \ bkpt_corr != getcfg("calibration.black_point_correction"): self.cal_changed() setcfg("calibration.black_point_correction", bkpt_corr) self.update_controls(update_profile_name=False) self.update_profile_name() def black_point_correction_choice_dialog_handler(self, event): setcfg("calibration.black_point_correction_choice.show", int(not event.GetEventObject().GetValue())) def profile_type_ctrl_handler(self, event): if debug: safe_print("[D] profile_type_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) v = self.get_profile_type() lut_type = v in ("l", "x", "X") self.gamap_btn.Enable(lut_type) self.low_quality_b2a_cb.SetValue(lut_type and getcfg("profile.quality.b2a") == "l") self.low_quality_b2a_cb.Enable(lut_type) self.profile_quality_ctrl.Enable(v not in ("g", "G")) if v in ("g", "G"): self.profile_quality_ctrl.SetValue(3) self.profile_quality_info.SetLabel( lang.getstr("calibration.quality.high")) if v != getcfg("profile.type"): self.profile_settings_changed() setcfg("profile.type", v) self.update_profile_name() self.set_default_testchart(force=True) self.check_testchart_patches_amount def check_testchart_patches_amount(self): """ Check if the selected testchart has at least the recommended amount of patches. Give user the choice to use the recommended amount if patch count is lower. """ recommended = {"G": 9, "g": 11, "l": 238, "lh": 124, "S": 36, "s": 36, "X": 238, "Xh": 124, "x": 238, "xh": 124} # lower quality actually needs *higher* patchcount while high quality # can get away with fewer patches and still improved result recommended = recommended.get(self.get_profile_type() + self.get_profile_quality(), recommended[self.get_profile_type()]) patches = int(self.testchart_patches_amount.GetLabel()) if recommended > patches and not is_ccxx_testchart(): self.profile_quality_ctrl.Disable() dlg = ConfirmDialog( self, msg=lang.getstr("profile.testchart_recommendation"), ok=lang.getstr("OK"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-question")) result = dlg.ShowModal() self.profile_quality_ctrl.Enable(not getcfg("profile.update") and self.get_profile_type() not in ("g", "G")) dlg.Destroy() if result == wx.ID_OK: testchart = self.testchart_defaults[self.get_profile_type()].get( self.get_profile_quality(), self.testchart_defaults[self.get_profile_type()][None]) self.set_testchart(get_data_path(os.path.join("ti1", testchart))) def measurement_file_check_auto_handler(self, event): if not getcfg("ti3.check_sanity.auto"): dlg = ConfirmDialog(self, msg=lang.getstr("measurement_file.check_sanity.auto.warning"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning"), log=False) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: self.menuitem_measurement_file_check_auto.Check(False) return setcfg("ti3.check_sanity.auto", int(self.menuitem_measurement_file_check_auto.IsChecked())) def measurement_file_check_handler(self, event): # select measurement data (ti3 or profile) path = None defaultDir, defaultFile = get_verified_path("last_ti3_path") dlg = wx.FileDialog(self, lang.getstr("measurement_file.choose"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.icc_ti3") + "|*.icc;*.icm;*.ti3", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if not os.path.exists(path): show_result_dialog(Error(lang.getstr("file.missing", path)), self) return tags = OrderedDict() # Get filename and extension of file filename, ext = os.path.splitext(path) if ext.lower() != ".ti3": try: profile = ICCP.ICCProfile(path) except (IOError, ICCP.ICCProfileInvalidError), exception: show_result_dialog(Error(lang.getstr("profile.invalid") + "\n" + path), self) return if (profile.tags.get("CIED", "") or profile.tags.get("targ", ""))[0:4] != "CTI3": show_result_dialog(Error(lang.getstr("profile.no_embedded_ti3") + "\n" + path), self) return ti3 = StringIO(profile.tags.get("CIED", "") or profile.tags.get("targ", "")) else: profile = None try: ti3 = open(path, "rU") except Exception, exception: show_result_dialog(Error(lang.getstr("error.file.open", path)), self) return setcfg("last_ti3_path", path) ti3 = CGATS.CGATS(ti3) if self.measurement_file_check_confirm(ti3, True): if ti3.modified: if profile: # Regenerate the profile? dlg = ConfirmDialog(self, msg=lang.getstr("profile.confirm_regeneration"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information")) dlg.Center() result = dlg.ShowModal() if result == wx.ID_OK: self.worker.wrapup(False) tmp_working_dir = self.worker.create_tempdir() if isinstance(tmp_working_dir, Exception): show_result_dialog(tmp_working_dir, self) return profile.tags.targ = ICCP.TextType("text\0\0\0\0" + str(ti3) + "\0", "targ") profile.tags.DevD = profile.tags.CIED = profile.tags.targ tmp_path = os.path.join(tmp_working_dir, os.path.basename(path)) profile.write(tmp_path) self.create_profile_handler(None, tmp_path, True) else: dlg = wx.FileDialog(self, lang.getstr("save_as"), os.path.dirname(path), os.path.basename(path), wildcard=lang.getstr("filetype.ti3") + "|*.ti3", style=wx.SAVE | wx.FD_OVERWRITE_PROMPT) dlg.Center(wx.BOTH) result = dlg.ShowModal() path = dlg.GetPath() dlg.Destroy() if result == wx.ID_OK: if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return ti3.write(path) else: show_result_dialog(UnloggedInfo(lang.getstr("errors.none_found")), self) def measurement_file_check_confirm(self, ti3=None, force=False, parent=None): if not getcfg("ti3.check_sanity.auto") and not force: return True if not ti3: profile_save_path = self.worker.tempdir if profile_save_path and os.path.isdir(profile_save_path): profile_name = getcfg("profile.name.expanded") ti3 = os.path.join(profile_save_path, make_argyll_compatible_path(profile_name) + ".ti3") if not os.path.isfile(ti3): ti3 = None if not ti3: # Let the caller handle missing files return True if not isinstance(ti3, CGATS.CGATS): ti3 = CGATS.CGATS(ti3) try: ti3_1 = verify_ti1_rgb_xyz(ti3) except CGATS.CGATSError, exception: show_result_dialog(exception, self) return False suspicious = check_ti3(ti3_1) if not suspicious: return True self.Show(start_timers=False) dlg = MeasurementFileCheckSanityDialog(parent or self, ti3_1, suspicious, force) result = dlg.ShowModal() if result == wx.ID_OK: indexes = [] for index in xrange(dlg.grid.GetNumberRows()): if dlg.grid.GetCellValue(index, 0) == "": indexes.insert(0, index) data = ti3_1.queryv1("DATA") removed = [] for index in indexes: removed.insert(0, data.pop(dlg.suspicious_items[index])) for item in removed: safe_print("Removed patch #%i from TI3: %s" % (item.key, item)) for index, (RGB, XYZ) in dlg.mods.iteritems(): if index not in indexes: item = dlg.suspicious_items[index] oldRGB = [] for i, label in enumerate("RGB"): oldRGB.append(item["RGB_%s" % label]) if RGB != oldRGB: for i, label in enumerate("RGB"): item["RGB_%s" % label] = RGB[i] safe_print(u"Updated patch #%s in TI3: RGB %.4f %.4f %.4f \u2192 %.4f %.4f %.4f" % tuple([item.SAMPLE_ID] + oldRGB + RGB)) oldXYZ = [] for i, label in enumerate("XYZ"): oldXYZ.append(item["XYZ_%s" % label]) if XYZ != oldXYZ: for i, label in enumerate("XYZ"): item["XYZ_%s" % label] = XYZ[i] safe_print(u"Updated patch #%s in TI3: XYZ %.4f %.4f %.4f \u2192 %.4f %.4f %.4f" % tuple([item.SAMPLE_ID] + oldXYZ + XYZ)) dlg.Destroy() if result == wx.ID_CANCEL: return False elif result == wx.ID_OK: if ti3.modified: if ti3.filename and os.path.exists(ti3.filename) and not force: ti3.write() safe_print("Written updated TI3 to", ti3.filename) return removed, ti3 return True def profile_name_ctrl_handler(self, event): if debug: safe_print("[D] profile_name_ctrl_handler called for ID %s %s " "event type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) oldval = self.profile_name_textctrl.GetValue() if not self.check_profile_name() or len(oldval) > 255: wx.Bell() x = self.profile_name_textctrl.GetInsertionPoint() if oldval == "": newval = defaults.get("profile.name", "") else: newval = re.sub(r"[\\/:*?\"<>|]+", "", oldval)[:255] self.profile_name_textctrl.ChangeValue(newval) self.profile_name_textctrl.SetInsertionPoint(x - (len(oldval) - len(newval))) self.update_profile_name() def create_profile_name_btn_handler(self, event): self.update_profile_name() def profile_save_path_btn_handler(self, event): defaultPath = os.path.join(*get_verified_path("profile.save_path")) profile_name = getcfg("profile.name.expanded") dlg = wx.DirDialog(self, lang.getstr("dialog.set_profile_save_path", profile_name), defaultPath=defaultPath) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() profile_save_dir = os.path.join(path, profile_name) if not os.path.isdir(profile_save_dir): try: os.makedirs(profile_save_dir) except: pass if not waccess(os.path.join(profile_save_dir, profile_name), os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return try: os.rmdir(profile_save_dir) except: pass setcfg("profile.save_path", path) self.update_profile_name() dlg.Destroy() def profile_name_info_btn_handler(self, event): if not hasattr(self, "profile_name_tooltip_window"): self.profile_name_tooltip_window = TooltipWindow( self, msg=self.profile_name_info(), title=lang.getstr("profile.name"), bitmap=geticon(32, "dialog-information")) else: self.profile_name_tooltip_window.Show() self.profile_name_tooltip_window.Raise() def profile_name_info(self): info = ["%nn " + lang.getstr("computer.name"), "%dn " + lang.getstr("display"), "%dns " + lang.getstr("display_short"), "%dnw " + lang.getstr("display") + " (" + lang.getstr("windows_only") + ")", "%dnws " + lang.getstr("display_short") + " (" + lang.getstr("windows_only") + ")", "%ds " + lang.getstr("edid.serial") + " (" + lang.getstr("if_available") + ")", "%crc32 " + lang.getstr("edid.crc32") + " (" + lang.getstr("if_available") + ")", "%in " + lang.getstr("instrument"), "%im " + lang.getstr("measurement_mode"), "%wp " + lang.getstr("whitepoint"), "%cb " + lang.getstr("calibration.luminance"), "%cB " + lang.getstr("calibration.black_luminance"), "%cg " + lang.getstr("trc"), "%ca " + lang.getstr("calibration.ambient_viewcond_adjust"), "%cf " + lang.getstr("calibration.black_output_offset"), "%ck " + lang.getstr("calibration.black_point_correction")] if defaults["calibration.black_point_rate.enabled"]: info.append("%cA " + lang.getstr("calibration.black_point_rate")) info += ["%cq " + lang.getstr("calibration.speed"), "%pq " + lang.getstr("profile.quality"), "%pt " + lang.getstr("profile.type"), "%tpa " + lang.getstr("testchart.info")] return lang.getstr("profile.name.placeholders") + "\n\n" + \ "\n".join(info) def create_profile_handler(self, event, path=None, skip_ti3_check=False): """ Create profile from existing measurements """ if not check_set_argyll_bin(): return if path is None: selectedpaths = [] # select measurement data (ti3 or profile) defaultDir, defaultFile = get_verified_path("last_ti3_path") dlg = wx.FileDialog(self, lang.getstr("create_profile"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.icc_ti3") + "|*.icc;*.icm;*.ti3", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: selectedpaths = dlg.GetPaths() dlg.Destroy() elif path: selectedpaths = [path] collected_ti3s = [] for path in selectedpaths: if not os.path.exists(path): InfoDialog(self, msg=lang.getstr("file.missing", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return tags = OrderedDict() # Get filename and extension of source file source_filename, source_ext = os.path.splitext(path) if source_ext.lower() != ".ti3": try: profile = ICCP.ICCProfile(path) except (IOError, ICCP.ICCProfileInvalidError), exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return if (profile.tags.get("CIED", "") or profile.tags.get("targ", ""))[0:4] != "CTI3": InfoDialog(self, msg=lang.getstr("profile.no_embedded_ti3") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return ti3 = StringIO(profile.tags.get("CIED", "") or profile.tags.get("targ", "")) # Preserve custom tags for tagname in ("mmod", "meta"): if tagname in profile.tags: tags[tagname] = profile.tags[tagname] else: try: ti3 = open(path, "rU") except Exception, exception: InfoDialog(self, msg=lang.getstr("error.file.open", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return ti3_lines = [line.strip() for line in ti3] ti3.close() if not "CAL" in ti3_lines: dlg = ConfirmDialog(self, msg=lang.getstr("dialog.ti3_no_cal_info"), ok=lang.getstr("continue"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return collected_ti3s.append((path, ti3_lines)) if collected_ti3s: if len(collected_ti3s) > 1: source_filename = os.path.splitext(defaults["last_ti3_path"])[0] source_ext = ".ti3" path = collected_ti3s[0][0] is_tmp = False tmp_working_dir = self.worker.tempdir if tmp_working_dir: if sys.platform == "win32": if path.lower().startswith(tmp_working_dir.lower()): is_tmp = True elif path.startswith(tmp_working_dir): is_tmp = True if is_tmp: defaultDir, defaultFile = get_verified_path("last_ti3_path") else: defaultDir, defaultFile = os.path.split(path) setcfg("last_ti3_path", path) # let the user choose a location for the profile dlg = wx.FileDialog(self, lang.getstr("save_as"), defaultDir, os.path.basename(source_filename) + profile_ext, wildcard=lang.getstr("filetype.icc") + "|*" + profile_ext, style=wx.SAVE | wx.FD_OVERWRITE_PROMPT) dlg.Center(wx.BOTH) result = dlg.ShowModal() profile_save_path = os.path.split(dlg.GetPath()) profile_save_path = os.path.join(profile_save_path[0], make_argyll_compatible_path(profile_save_path[1])) dlg.Destroy() if result == wx.ID_OK: if not waccess(profile_save_path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", profile_save_path)), self) return filename, ext = os.path.splitext(profile_save_path) if ext.lower() not in (".icc", ".icm"): profile_save_path += profile_ext if os.path.exists(profile_save_path): dlg = ConfirmDialog( self, msg=lang.getstr("dialog.confirm_overwrite", (profile_save_path)), ok=lang.getstr("overwrite"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return setcfg("last_cal_or_icc_path", profile_save_path) setcfg("last_icc_path", profile_save_path) # get filename and extension of target file profile_name = os.path.basename( os.path.splitext(profile_save_path)[0]) # create temporary working dir tmp_working_dir = self.worker.create_tempdir() if isinstance(tmp_working_dir, Exception): self.worker.wrapup(False) show_result_dialog(tmp_working_dir, self) return # Copy ti3 to temp dir ti3_tmp_path = os.path.join(tmp_working_dir, make_argyll_compatible_path(profile_name + ".ti3")) if len(collected_ti3s) > 1: # Collect files for averaging collected_paths = [] for ti3_path, ti3_lines in collected_ti3s: collected_path = os.path.join(tmp_working_dir, os.path.basename(ti3_path)) with open(collected_path, "w") as ti3_file: ti3_file.write("\n".join(ti3_lines)) collected_paths.append(collected_path) # Average the TI3 files args = ["-v"] + collected_paths + [ti3_tmp_path] cmd = get_argyll_util("average") result = self.worker.exec_cmd(cmd, args, capture_output=True, skip_scripts=True) for collected_path in collected_paths: os.remove(collected_path) if isinstance(result, Exception) or not result: self.worker.wrapup(False) show_result_dialog(result or Error("\n".join(self.worker.errors)), self) return path = ti3_tmp_path self.worker.options_dispcal = [] self.worker.options_targen = [] display_name = None display_manufacturer = None try: if source_ext.lower() == ".ti3": if path != ti3_tmp_path: shutil.copyfile(path, ti3_tmp_path) else: # Binary mode because we want to avoid automatic # newlines conversion ti3 = open(ti3_tmp_path, "wb") ti3.write(profile.tags.get("CIED", "") or profile.tags.get("targ", "")) ti3.close() # Get dispcal options if present self.worker.options_dispcal = [ "-" + arg for arg in get_options_from_profile(profile)[0]] if "dmdd" in profile.tags: display_name = profile.getDeviceModelDescription() if "dmnd" in profile.tags: display_manufacturer = profile.getDeviceManufacturerDescription() if is_tmp and path != ti3_tmp_path: profile.close() os.remove(path) ti3 = CGATS.CGATS(ti3_tmp_path) if ti3.queryv1("COLOR_REP") and \ ti3.queryv1("COLOR_REP")[:3] == "RGB": self.worker.options_targen = ["-d3"] except Exception, exception: handle_error(u"Error - temporary .ti3 file could not be " u"created: " + safe_unicode(exception), parent=self) self.worker.wrapup(False) return setcfg("calibration.file.previous", None) safe_print("-" * 80) if (not skip_ti3_check and not self.measurement_file_check_confirm(ti3)): self.worker.wrapup(False) return # Run colprof self.worker.interactive = False self.worker.start( self.profile_finish, self.worker.create_profile, ckwargs={ "profile_path": profile_save_path, "failure_msg": lang.getstr( "error.profile.file_not_created")}, wkwargs={"dst_path": profile_save_path, "display_name": display_name, "display_manufacturer": display_manufacturer, "tags": tags}, progress_msg=lang.getstr("create_profile")) def create_profile_from_edid(self, event): edid = self.worker.get_display_edid() defaultFile = edid.get("monitor_name", edid.get("ascii", str(edid["product_id"]))) + profile_ext defaultDir = get_verified_path(None, os.path.join(getcfg("profile.save_path"), defaultFile))[0] # let the user choose a location for the profile dlg = wx.FileDialog(self, lang.getstr("save_as"), defaultDir, defaultFile, wildcard=lang.getstr("filetype.icc") + "|*" + profile_ext, style=wx.SAVE | wx.FD_OVERWRITE_PROMPT) dlg.Center(wx.BOTH) result = dlg.ShowModal() profile_save_path = os.path.split(dlg.GetPath()) profile_save_path = os.path.join(profile_save_path[0], make_argyll_compatible_path(profile_save_path[1])) dlg.Destroy() if result == wx.ID_OK: if not waccess(profile_save_path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", profile_save_path)), self) return profile = ICCP.ICCProfile.from_edid(edid) try: profile.write(profile_save_path) except Exception, exception: InfoDialog(self, msg=safe_unicode(exception), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) else: if getcfg("profile.create_gamut_views"): safe_print("-" * 80) safe_print(lang.getstr("gamut.view.create")) self.worker.interactive = False self.worker.start(self.create_profile_from_edid_finish, self.worker.calculate_gamut, cargs=(profile, ), wargs=(profile_save_path, ), progress_msg=lang.getstr("gamut.view.create"), resume=False) else: self.create_profile_from_edid_finish(True, profile) def create_profile_from_edid_finish(self, result, profile): if isinstance(result, Exception): show_result_dialog(result, self) elif result: if isinstance(result, tuple): profile.set_gamut_metadata(result[0], result[1]) prefixes = profile.tags.meta.getvalue("prefix", "", None).split(",") # Set license profile.tags.meta["License"] = getcfg("profile.license") # Set device ID device_id = self.worker.get_device_id(quirk=True) if device_id: profile.tags.meta["MAPPING_device_id"] = device_id prefixes.append("MAPPING_") profile.tags.meta["prefix"] = ",".join(prefixes) profile.calculateID() safe_print("-" * 80) try: profile.write() except Exception, exception: show_result_dialog(exception, self) return self.profile_finish(True, profile.fileName) def create_profile_name(self): """ Replace placeholders in profile name with values from configuration """ profile_name = self.profile_name_textctrl.GetValue() # Computername if "%nn" in profile_name: profile_name = profile_name.replace("%nn", safe_unicode(platform.node()) or "\0") # Windows display name (EnumDisplayDevices / DeviceString) if "%dnws" in profile_name: display_win32_short = self.worker.get_display_name_short(False, False) profile_name = profile_name.replace("%dnws", display_win32_short or "\0") if "%dnw" in profile_name: display_win32 = self.worker.get_display_name(True, False) profile_name = profile_name.replace("%dnw", display_win32 or "\0") # EDID if "%ds" in profile_name or "%crc32" in profile_name: edid = self.worker.get_display_edid() # Serial if "%ds" in profile_name: serial = edid.get("serial_ascii", hex(edid.get("serial_32", 0))[2:]) if serial and serial not in ("0", "1010101", "fffffff"): profile_name = profile_name.replace("%ds", serial) else: profile_name = profile_name.replace("%ds", "\0") # CRC32 if "%crc32" in profile_name: if edid.get("edid"): profile_name = profile_name.replace("%crc32", "%X" % (crc32(edid["edid"]) & 0xFFFFFFFF)) else: profile_name = profile_name.replace("%crc32", "\0") # Display name if "%dns" in profile_name: display_short = self.worker.get_display_name_short(False, True) profile_name = profile_name.replace("%dns", display_short or "\0") if "%dn" in profile_name: display = self.worker.get_display_name(True, True) profile_name = profile_name.replace("%dn", display or "\0") # Instrument name if "%in" in profile_name: instrument = self.comport_ctrl.GetStringSelection() profile_name = profile_name.replace("%in", instrument or "\0") # Measurement mode if "%im" in profile_name: mode = "" measurement_mode = self.get_measurement_mode() if measurement_mode: if "c" in measurement_mode: mode += lang.getstr("measurement_mode.refresh") elif "l" in measurement_mode: mode += lang.getstr("measurement_mode.lcd") if "p" in measurement_mode: if mode: mode += "-" mode += lang.getstr("projector") if "V" in measurement_mode: if mode: mode += "-" mode += lang.getstr("measurement_mode.adaptive") if "H" in measurement_mode: if mode: mode += "-" mode += lang.getstr("measurement_mode.highres") else: mode += lang.getstr("default") profile_name = profile_name.replace("%im", mode) # Whitepoint if "%wp" in profile_name: whitepoint = self.get_whitepoint() whitepoint_locus = self.get_whitepoint_locus() if isinstance(whitepoint, str): if whitepoint.find(",") < 0: if whitepoint_locus == "t": whitepoint = "D" + whitepoint else: whitepoint += "K" else: whitepoint = "x ".join(whitepoint.split(",")) + "y" profile_name = profile_name.replace("%wp", whitepoint or "\0") # Luminance if "%cb" in profile_name: luminance = self.get_luminance() profile_name = profile_name.replace("%cb", "\0" if luminance is None else luminance + u"cdm²") # Black luminance if "%cB" in profile_name: black_luminance = self.get_black_luminance() profile_name = profile_name.replace("%cB", "\0" if black_luminance is None else black_luminance + u"cdm²") # TRC / black output offset if "%cg" in profile_name or "%cf" in profile_name: black_output_offset = self.get_black_output_offset() # TRC if "%cg" in profile_name: trc = self.get_trc() trc_type = self.get_trc_type() bt1886 = (trc == "2.4" and trc_type == "G" and black_output_offset == "0") if bt1886: trc = "Rec. 1886" elif trc not in ("l", "709", "s", "240"): if trc_type == "G": trc += " (%s)" % lang.getstr("trc.type.absolute").lower() else: trc = strtr(trc, {"l": "L", "709": "Rec. 709", "s": "sRGB", "240": "SMPTE240M"}) profile_name = profile_name.replace("%cg", trc) # Ambient adjustment if "%ca" in profile_name: ambient = self.get_ambient() profile_name = profile_name.replace("%ca", "\0" if ambient is None else ambient + "lx") # Black output offset if "%cf" in profile_name: f = int(float(black_output_offset) * 100) profile_name = profile_name.replace("%cf", "%i%%" % f) # Black point correction / rate if "%ck" in profile_name or "%cA" in profile_name: black_point_correction = self.get_black_point_correction() # Black point correction if "%ck" in profile_name: k = int(float(black_point_correction) * 100) profile_name = profile_name.replace("%ck", (str(k) + "% " if k > 0 and k < 100 else "") + (lang.getstr("neutral") if k > 0 else "\0").lower()) # Black point rate if "%cA" in profile_name: black_point_rate = self.get_black_point_rate() if black_point_rate and float(black_point_correction) < 1: profile_name = profile_name.replace("%cA", black_point_rate) else: profile_name = profile_name.replace("%cA", "\0") # Calibration / profile quality if "%cq" in profile_name or "%pq" in profile_name: calibration_quality = self.get_calibration_quality() profile_quality = getcfg("profile.quality") aspects = { "c": calibration_quality, "p": profile_quality } msgs = { "u": "VS", "h": "S", "m": "M", "l": "F", "v": "VF" } quality = {} if "%cq" in profile_name: quality["c"] = msgs[aspects["c"]] if "%pq" in profile_name: quality["p"] = msgs[aspects["p"]] if len(quality) == 2 and quality["c"] == quality["p"]: profile_name = re.sub("%cq\W*%pq", quality["c"], profile_name) for q in quality: profile_name = profile_name.replace("%%%sq" % q, quality[q]) # Profile type if "%pt" in profile_name: profile_type = { "G": "1xGamma+MTX", "g": "3xGamma+MTX", "l": "LabLUT", "S": "1xCurve+MTX", "s": "3xCurve+MTX", "X": "XYZLUT+MTX", "x": "XYZLUT" }.get(self.get_profile_type()) profile_name = profile_name.replace("%pt", profile_type or "\0") # Amount of test patches if "%tpa" in profile_name: profile_name = profile_name.replace("%tpa", self.testchart_patches_amount.GetLabel()) # Date / time directives = ( "a", "A", "b", "B", "d", "H", "I", "j", "m", "M", "p", "S", "U", "w", "W", "y", "Y" ) for directive in directives: if "%%%s" % directive in profile_name: try: profile_name = profile_name.replace("%%%s" % directive, strftime("%%%s" % directive)) except UnicodeDecodeError: pass # All whitespace to space profile_name = re.sub("\s", " ", profile_name) # Get rid of inserted NULL bytes # Try to keep spacing intact if "\0" in profile_name: profile_name = re.sub("^(\0[_\- ]?)+|([_\- ]?\0)+$", "", profile_name) # Surrounded by underscores while "_\0" in profile_name or "\0_" in profile_name: while re.search("_\0+_", profile_name): profile_name = re.sub("_\0+_", "_", profile_name) profile_name = re.sub("_\0+", "_", profile_name) profile_name = re.sub("\0+_", "_", profile_name) # Surrounded by dashes while "-\0" in profile_name or "\0-" in profile_name: while re.search("-\0+-", profile_name): profile_name = re.sub("-\0+-", "-", profile_name) profile_name = re.sub("-\0+", "-", profile_name) profile_name = re.sub("\0+-", "-", profile_name) # Surrounded by whitespace while " \0" in profile_name or "\0 " in profile_name: while re.search(" \0+ ", profile_name): profile_name = re.sub(" \0+ ", " ", profile_name) profile_name = re.sub(" \0+", " ", profile_name) profile_name = re.sub("\0+ ", " ", profile_name) profile_name = re.sub("\0+", "", profile_name) # Get rid of characters considered invalid for filenames and shorten # to a length of max 255 chars return re.sub(r"[\\/:*?\"<>|]+", "_", profile_name)[:255] def update_profile_name(self, event=None): profile_name = self.create_profile_name() if not self.check_profile_name(profile_name): self.profile_name_textctrl.ChangeValue(getcfg("profile.name")) profile_name = self.create_profile_name() if not self.check_profile_name(profile_name): self.profile_name_textctrl.ChangeValue( defaults.get("profile.name", "")) profile_name = self.create_profile_name() profile_name = make_argyll_compatible_path(profile_name) if profile_name != self.profile_name.GetLabel(): setcfg("profile.name", self.profile_name_textctrl.GetValue()) self.profile_name.SetToolTipString(profile_name) self.profile_name.SetLabel(profile_name.replace("&", "&&")) setcfg("profile.name.expanded", profile_name) def check_profile_name(self, profile_name=None): if re.match(re.compile(r"^[^\\/:*?\"<>|]+$"), profile_name if profile_name is not None else self.create_profile_name()): return True else: return False def get_ambient(self): if self.ambient_viewcond_adjust_cb.GetValue(): return str(stripzeros( self.ambient_viewcond_adjust_textctrl.GetValue().replace(",", "."))) return None def get_instrument_type(self): # Return the instrument type, "color" (colorimeter) or "spect" # (spectrometer) spect = self.worker.get_instrument_features().get("spectral", False) return "spect" if spect else "color" def get_measurement_mode(self): """ Return the measurement mode as string. Examples Argyll options -V -H (adaptive highres mode) Returned string 'VH' Argyll option -yl Returned string 'l' Argyll options -p -H (projector highres mode) Returned string 'pH' """ return self.measurement_modes_ab.get(self.get_instrument_type(), {}).get( self.measurement_mode_ctrl.GetSelection()) def get_profile_type(self): return self.profile_types_ab.get(self.profile_type_ctrl.GetSelection(), getcfg("profile.type")) def get_whitepoint(self): if self.whitepoint_ctrl.GetSelection() == 0: # Native return None elif self.whitepoint_ctrl.GetSelection() == 1: # Color temperature in kelvin return str(stripzeros( self.whitepoint_colortemp_textctrl.GetValue().replace(",", "."))) elif self.whitepoint_ctrl.GetSelection() == 2: x = self.whitepoint_x_textctrl.GetValue().replace(",", ".") try: x = round(float(x), 6) except ValueError: pass y = self.whitepoint_y_textctrl.GetValue().replace(",", ".") try: y = round(float(y), 6) except ValueError: pass return str(stripzeros(x)) + "," + str(stripzeros(y)) def get_whitepoint_locus(self): n = self.whitepoint_colortemp_locus_ctrl.GetSelection() if not n in self.whitepoint_colortemp_loci_ab: n = 0 return str(self.whitepoint_colortemp_loci_ab[n]) def get_luminance(self): if self.luminance_ctrl.GetSelection() == 0: return None else: return str(stripzeros( self.luminance_textctrl.GetValue().replace(",", "."))) def get_black_luminance(self): if self.black_luminance_ctrl.GetSelection() == 0: return None else: return str(stripzeros( self.black_luminance_textctrl.GetValue().replace(",", "."))) def get_black_output_offset(self): return str(Decimal(self.black_output_offset_ctrl.GetValue()) / 100) def get_black_point_correction(self): return str(Decimal(self.black_point_correction_ctrl.GetValue()) / 100) def get_black_point_rate(self): if defaults["calibration.black_point_rate.enabled"]: return str(self.black_point_rate_floatctrl.GetValue()) else: return None def get_trc_type(self): if ((self.trc_type_ctrl.GetSelection() == 1 and self.trc_ctrl.GetSelection() == 0) or self.trc_ctrl.GetSelection() == 3): return "G" else: return "g" def get_trc(self): if self.trc_ctrl.GetSelection() == 0: return str(stripzeros(self.trc_textctrl.GetValue().replace(",", "."))) elif self.trc_ctrl.GetSelection() == 1: return "l" elif self.trc_ctrl.GetSelection() == 2: return "709" elif self.trc_ctrl.GetSelection() == 3: # BT.1886 return "2.4" elif self.trc_ctrl.GetSelection() == 4: return "240" elif self.trc_ctrl.GetSelection() == 5: return "s" else: raise ValueError("Invalid TRC selection") def get_calibration_quality(self): return self.quality_ab[self.calibration_quality_ctrl.GetValue()] def get_profile_quality(self): return self.quality_ab[self.profile_quality_ctrl.GetValue() + 1] def profile_settings_changed(self): cal = getcfg("calibration.file") if cal: filename, ext = os.path.splitext(cal) if ext.lower() in (".icc", ".icm"): if not os.path.exists(filename + ".cal") and \ not cal in self.presets: self.cal_changed() return if not self.updatingctrls: setcfg("settings.changed", 1) if self.calibration_file_ctrl.GetStringSelection()[0] != "*": sel = self.calibration_file_ctrl.GetSelection() if sel > 0: items = self.calibration_file_ctrl.GetItems() items[sel] = "* " + items[sel] self.calibration_file_ctrl.Freeze() self.calibration_file_ctrl.SetItems(items) self.calibration_file_ctrl.SetSelection(sel) self.calibration_file_ctrl.Thaw() def testchart_ctrl_handler(self, event): if debug: safe_print("[D] testchart_ctrl_handler called for ID %s %s event " "type %s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) self.set_testchart(self.testcharts[self.testchart_ctrl.GetSelection()]) wx.CallAfter(self.check_testchart_patches_amount) def testchart_btn_handler(self, event, path=None): if path is None: defaultDir, defaultFile = get_verified_path("testchart.file") dlg = wx.FileDialog(self, lang.getstr("dialog.set_testchart"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.icc_ti1_ti3") + "|*.icc;*.icm;*.ti1;*.ti3", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if not os.path.exists(path): InfoDialog(self, msg=lang.getstr("file.missing", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return filename, ext = os.path.splitext(path) if ext.lower() in (".icc", ".icm"): try: profile = ICCP.ICCProfile(path) except (IOError, ICCP.ICCProfileInvalidError), exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return ti3_lines = [line.strip() for line in StringIO(profile.tags.get("CIED", "") or profile.tags.get("targ", ""))] if not "CTI3" in ti3_lines: InfoDialog(self, msg=lang.getstr("profile.no_embedded_ti3") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return self.set_testchart(path) writecfg() self.profile_settings_changed() def create_testchart_btn_handler(self, event): if not hasattr(self, "tcframe"): self.init_tcframe() elif not hasattr(self.tcframe, "ti1") or \ getcfg("testchart.file") != self.tcframe.ti1.filename: self.tcframe.tc_load_cfg_from_ti1() setcfg("tc.show", 1) self.tcframe.Show() self.tcframe.Raise() return def init_tcframe(self): self.tcframe = TestchartEditor(self) def set_default_testchart(self, alert=True, force=False): path = getcfg("testchart.file") if os.path.basename(path) in self.dist_testchart_names: path = self.dist_testcharts[ self.dist_testchart_names.index(os.path.basename(path))] if debug: safe_print("[D] set_default_testchart testchart.file:", path) setcfg("testchart.file", path) if force or (lang.getstr(os.path.basename(path)) in [""] + self.default_testchart_names) or not os.path.isfile(path): if (not force and lang.getstr(os.path.basename(path)) in [""] + self.default_testchart_names): ti1 = os.path.basename(path) else: ti1 = self.testchart_defaults[self.get_profile_type()].get( self.get_profile_quality(), self.testchart_defaults[self.get_profile_type()][None]) path = get_data_path(os.path.join("ti1", ti1)) if not path or not os.path.isfile(path): if alert: InfoDialog(self, msg=lang.getstr("error.testchart.missing", ti1), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) elif verbose >= 1: safe_print(lang.getstr("error.testchart.missing", ti1)) return False else: self.set_testchart(path) return True return None def set_testcharts(self, path=None): idx = self.testchart_ctrl.GetSelection() self.testchart_ctrl.Freeze() self.testchart_ctrl.SetItems(self.get_testchart_names(path)) self.testchart_ctrl.SetSelection(idx) self.testchart_ctrl.Thaw() def set_testchart(self, path=None): if path is None: path = getcfg("testchart.file") result = check_file_isfile(path) if isinstance(result, Exception): show_result_dialog(result, self) self.set_default_testchart(force=True) return filename, ext = os.path.splitext(path) try: if ext.lower() in (".ti1", ".ti3"): if ext.lower() == ".ti3": ti1 = CGATS.CGATS(ti3_to_ti1(open(path, "rU"))) else: ti1 = CGATS.CGATS(path) else: # icc or icm profile profile = ICCP.ICCProfile(path) ti1 = CGATS.CGATS(ti3_to_ti1(profile.tags.get("CIED", "") or profile.tags.get("targ", ""))) try: ti1_1 = verify_ti1_rgb_xyz(ti1) except CGATS.CGATSError, exception: msg = {CGATS.CGATSKeyError: lang.getstr("error.testchart.missing_fields", (path, "RGB_R, RGB_G, RGB_B, " " XYZ_X, XYZ_Y, XYZ_Z"))}.get(exception.__class__, lang.getstr("error.testchart.invalid", path) + "\n" + lang.getstr(safe_str(exception))) InfoDialog(self, msg=msg, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.set_default_testchart(force=True) return if path != getcfg("calibration.file"): self.profile_settings_changed() if debug: safe_print("[D] set_testchart testchart.file:", path) setcfg("testchart.file", path) if path not in self.testcharts: self.set_testcharts(path) # The case-sensitive index could fail because of # case insensitive file systems, e.g. if the # stored filename string is # "C:\Users\Name\AppData\dispcalGUI\storage\MyFile" # but the actual filename is # "C:\Users\Name\AppData\dispcalGUI\storage\myfile" # (maybe because the user renamed the file) idx = index_fallback_ignorecase(self.testcharts, path) self.testchart_ctrl.SetSelection(idx) self.testchart_ctrl.SetToolTipString(path) if ti1.queryv1("COLOR_REP") and \ ti1.queryv1("COLOR_REP")[:3] == "RGB": self.worker.options_targen = ["-d3"] if self.testchart_ctrl.IsEnabled(): self.testchart_patches_amount.SetLabel( str(ti1.queryv1("NUMBER_OF_SETS"))) else: self.testchart_patches_amount.SetLabel("") except Exception, exception: error = traceback.format_exc() if debug else exception InfoDialog(self, msg=lang.getstr("error.testchart.read", path) + "\n\n" + safe_unicode(error), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) self.set_default_testchart(force=True) else: if hasattr(self, "tcframe") and \ self.tcframe.IsShownOnScreen() and \ (not hasattr(self.tcframe, "ti1") or getcfg("testchart.file") != self.tcframe.ti1.filename): self.tcframe.tc_load_cfg_from_ti1() if is_ccxx_testchart(): measurement_mode = None if (self.worker.get_instrument_name() == "ColorHug" and getcfg("measurement_mode") not in ("F", "R")): # Automatically set factory measurement mode if not already # factory or raw measurement mode measurement_mode = "F" elif (self.worker.get_instrument_name() == "ColorMunki Smile" and getcfg("measurement_mode") != "f"): # Automatically set LCD measurement mode if not already # LCD CCFL measurement mode measurement_mode = "f" elif (self.worker.get_instrument_name() == "Colorimtre HCFR" and getcfg("measurement_mode") != "R"): # Automatically set raw measurement mode if not already # raw measurement mode measurement_mode = "R" elif (self.worker.get_instrument_name() == "Spyder4" and getcfg("measurement_mode") not in ("l", "c")): # Automatically set LCD measurement mode if not already # LCD or refresh measurement mode measurement_mode = "l" if measurement_mode: setcfg("measurement_mode.backup", getcfg("measurement_mode")) setcfg("measurement_mode", measurement_mode) self.update_measurement_mode() else: self.restore_measurement_mode() self.update_colorimeter_correction_matrix_ctrl() if not self.updatingctrls: self.update_main_controls() def get_testchart_names(self, path=None): testchart_names = [] self.testcharts = [] if path is None: path = getcfg("testchart.file") if os.path.exists(path): testchart_dir = os.path.dirname(path) try: testcharts = listdir_re(testchart_dir, "\.(?:icc|icm|ti1|ti3)$") except Exception, exception: safe_print(u"Error - directory '%s' listing failed: %s" % tuple(safe_unicode(s) for s in (testchart_dir, exception))) else: for testchart_name in testcharts: if testchart_name not in testchart_names: testchart_names += [testchart_name] self.testcharts += [os.pathsep.join((testchart_name, testchart_dir))] default_testcharts = get_data_path("ti1", "\.(?:icc|icm|ti1|ti3)$") if isinstance(default_testcharts, list): for testchart in default_testcharts: testchart_dir = os.path.dirname(testchart) testchart_name = os.path.basename(testchart) if testchart_name not in testchart_names: testchart_names += [testchart_name] self.testcharts += [os.pathsep.join((testchart_name, testchart_dir))] self.testcharts = natsort(self.testcharts) self.testchart_names = [] i = 0 for chart in self.testcharts: chart = chart.split(os.pathsep) chart.reverse() self.testcharts[i] = os.path.join(*chart) self.testchart_names += [lang.getstr(chart[-1])] i += 1 return self.testchart_names def set_argyll_bin_handler(self, event): """ Set Argyll CMS binary executables directory """ if set_argyll_bin(): self.check_update_controls() or self.update_menus() if len(self.worker.displays): if getcfg("calibration.file"): # Load LUT curves from last used .cal file self.load_cal(silent=True) else: # Load LUT curves from current display profile (if any, # and if it contains curves) self.load_display_profile_cal(None) def check_update_controls(self, event=None, silent=False): """ Update controls and menuitems when changes in displays or instruments are detected. Return True if update was needed and carried out, False otherwise. """ argyll_bin_dir = self.worker.argyll_bin_dir argyll_version = list(self.worker.argyll_version) displays = list(self.worker.displays) comports = list(self.worker.instruments) if event: # Explicitly called from menu enumerate_ports = True else: # Use configured value enumerate_ports = getcfg("enumerate_ports.auto") if False: self.thread = delayedresult.startWorker(self.check_update_controls_consumer, self.worker.enumerate_displays_and_ports, cargs=(argyll_bin_dir, argyll_version, displays, comports), wargs=(silent, ), wkwargs={"enumerate_ports": enumerate_ports}) else: self.worker.enumerate_displays_and_ports(silent, enumerate_ports=enumerate_ports) return self.check_update_controls_consumer(True, argyll_bin_dir, argyll_version, displays, comports) def check_update_controls_consumer(self, result, argyll_bin_dir, argyll_version, displays, comports): if argyll_bin_dir != self.worker.argyll_bin_dir or \ argyll_version != self.worker.argyll_version: self.update_measurement_modes() if comports == self.worker.instruments: self.update_colorimeter_correction_matrix_ctrl() self.update_black_point_rate_ctrl() self.update_drift_compensation_ctrls() self.update_profile_type_ctrl() self.profile_type_ctrl.SetSelection( self.profile_types_ba.get(getcfg("profile.type"), self.profile_types_ba.get(defaults["profile.type"]))) if hasattr(self, "aboutdialog"): if self.aboutdialog.IsShownOnScreen(): self.aboutdialog_handler(None) if hasattr(self, "gamapframe"): visible = self.gamapframe.IsShownOnScreen() self.gamapframe.Close() self.gamapframe.Destroy() del self.gamapframe if visible: self.gamap_btn_handler(None) if getattr(self, "lut3dframe", None): visible = self.lut3dframe.IsShownOnScreen() self.lut3dframe.Close() self.lut3dframe.Destroy() del self.lut3dframe if visible: self.lut3d_create_handler(None) if getattr(self, "reportframe", None): visible = self.reportframe.IsShownOnScreen() self.reportframe.Close() self.reportframe.Destroy() del self.reportframe if visible: self.measurement_report_create_handler(None) if hasattr(self, "tcframe"): visible = self.tcframe.IsShownOnScreen() self.tcframe.tc_close_handler() self.tcframe.Destroy() del self.tcframe if visible: self.create_testchart_btn_handler(None) if displays != self.worker.displays: self.update_displays(update_ccmx_items=True) if verbose >= 1: safe_print(lang.getstr("display_detected")) if comports != self.worker.instruments: self.update_comports() if verbose >= 1: safe_print(lang.getstr("comport_detected")) if displays != self.worker.displays or \ comports != self.worker.instruments: if self.IsShownOnScreen(): self.update_menus() self.update_main_controls() return True return False def plugplay_timer_handler(self, event): if debug >= 9: safe_print("[D] plugplay_timer_handler") if (getcfg("enumerate_ports.auto") and not self.worker.is_working() and (not hasattr(self, "tcframe") or not self.tcframe.worker.is_working())): self.check_update_controls(silent=True) def load_cal_handler(self, event, path=None, update_profile_name=True, silent=False, load_vcgt=True): """ Load settings and calibration """ if not check_set_argyll_bin(): return if path is None: defaultDir, defaultFile = get_verified_path("last_cal_or_icc_path") dlg = wx.FileDialog(self, lang.getstr("dialog.load_cal"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.cal_icc") + "|*.cal;*.icc;*.icm", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if getcfg("settings.changed") and not self.settings_confirm_discard(): return if not os.path.exists(path): sel = self.calibration_file_ctrl.GetSelection() if len(self.recent_cals) > sel and \ self.recent_cals[sel] == path: self.recent_cals.remove(self.recent_cals[sel]) recent_cals = [] for recent_cal in self.recent_cals: if recent_cal not in self.presets: recent_cals += [recent_cal] setcfg("recent_cals", os.pathsep.join(recent_cals)) self.calibration_file_ctrl.Delete(sel) cal = getcfg("calibration.file") or "" if not cal in self.recent_cals: self.recent_cals.append(cal) # The case-sensitive index could fail because of # case insensitive file systems, e.g. if the # stored filename string is # "C:\Users\Name\AppData\dispcalGUI\storage\MyFile" # but the actual filename is # "C:\Users\Name\AppData\dispcalGUI\storage\myfile" # (maybe because the user renamed the file) idx = index_fallback_ignorecase(self.recent_cals, cal) self.calibration_file_ctrl.SetSelection(idx) InfoDialog(self, msg=lang.getstr("file.missing", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return filename, ext = os.path.splitext(path) if ext.lower() in (".icc", ".icm"): try: profile = ICCP.ICCProfile(path) except (IOError, ICCP.ICCProfileInvalidError), exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return if profile.profileClass != "mntr" or \ profile.colorSpace != "RGB": InfoDialog(self, msg=lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace)) + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return cal = StringIO(profile.tags.get("CIED", "") or profile.tags.get("targ", "")) else: try: cal = open(path, "rU") except Exception, exception: InfoDialog(self, msg=lang.getstr("error.file.open", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return ti3_lines = [line.strip() for line in cal] cal.close() setcfg("last_cal_or_icc_path", path) update_ccmx_items = True if ext.lower() in (".icc", ".icm"): setcfg("last_icc_path", path) (options_dispcal, options_colprof) = get_options_from_profile(profile) # Get and set the display # First try to find the correct display by comparing # the model (if present) display_name = profile.getDeviceModelDescription() # Second try to find the correct display by comparing # the EDID hash (if present) edid_md5 = profile.tags.get("meta", {}).get("EDID_md5", {}).get("value") if display_name or edid_md5: display_name_indexes = [] edid_md5_indexes = [] for i, edid in enumerate(self.worker.display_edid): if display_name in (edid.get("monitor_name", False), self.worker.display_names[i]): display_name_indexes.append(i) if edid_md5 == edid.get("monitor_name", False): edid_md5_indexes.append(i) if len(display_name_indexes) == 1: display_index = display_name_indexes[0] safe_print("Found display device matching model " "description at index #%i" % display_index) elif len(edid_md5_indexes) == 1: display_index = edid_md5_indexes[0] safe_print("Found display device matching EDID MD5 " "at index #%i" % display_index) else: # We got several matches. As we can't be sure which # is the right one, do nothing. display_index = None if display_index is not None: # Found it setcfg("display.number", display_index + 1) self.get_set_display() # Get and set the instrument instrument_id = profile.tags.get("meta", {}).get("MEASUREMENT_device", {}).get("value") if instrument_id: for i, instrument in enumerate(self.worker.instruments): if instrument.lower() == instrument_id: # Found it setcfg("comport.number", i + 1) self.update_comports() # No need to update ccmx items in update_controls, # as comport_ctrl_handler took care of it update_ccmx_items = False break else: try: (options_dispcal, options_colprof) = get_options_from_cal(path) except CGATS.CGATSError, exception: InfoDialog(self, msg=lang.getstr("calibration.file.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return if options_dispcal or options_colprof: if debug: safe_print("[D] options_dispcal:", options_dispcal) if debug: safe_print("[D] options_colprof:", options_colprof) ccxxsetting = getcfg("colorimeter_correction_matrix_file").split(":", 1)[0] ccmx = None # Parse options if options_dispcal: # Restore defaults self.restore_defaults_handler( include=("calibration", "drift_compensation", "measure.darken_background", "trc", "whitepoint"), exclude=("calibration.black_point_correction_choice.show", "calibration.update", "calibration.use_video_lut", "measure.darken_background.show_warning", "trc.should_use_viewcond_adjust.show_msg")) self.worker.options_dispcal = ["-" + arg for arg in options_dispcal] for o in options_dispcal: if o[0] == "d" and o[1:] in ("web", "madvr"): # Special case web and madvr so it can be used in # preset templates which are TI3 files for i, display_name in enumerate(self.worker.display_names): if (display_name.lower() == o[1:] and getcfg("display.number") != i + 1): # Found it setcfg("display.number", i + 1) self.get_set_display() break continue if o[0] == "m": setcfg("calibration.interactive_display_adjustment", 0) continue ##if o[0] == "o": ##setcfg("profile.update", 1) ##continue ##if o[0] == "u": ##setcfg("calibration.update", 1) ##continue if o[0] == "q": setcfg("calibration.quality", o[1]) continue if o[0] == "y": setcfg("measurement_mode", o[1]) continue if o[0] in ("t", "T"): setcfg("whitepoint.colortemp.locus", o[0]) if o[1:]: setcfg("whitepoint.colortemp", int(float(o[1:]))) setcfg("whitepoint.x", None) setcfg("whitepoint.y", None) continue if o[0] == "w": o = o[1:].split(",") setcfg("whitepoint.colortemp", None) setcfg("whitepoint.x", o[0]) setcfg("whitepoint.y", o[1]) continue if o[0] == "b": setcfg("calibration.luminance", o[1:]) continue if o[0] in ("g", "G"): setcfg("trc.type", o[0]) setcfg("trc", o[1:]) continue if o[0] == "f": setcfg("calibration.black_output_offset", o[1:]) continue if o[0] == "a": setcfg("calibration.ambient_viewcond_adjust", 1) setcfg("calibration.ambient_viewcond_adjust.lux", o[1:]) continue if o[0] == "k": setcfg("calibration.black_point_correction.auto", int(stripzeros(o[1:]) < 0)) if stripzeros(o[1:]) >= 0: setcfg("calibration.black_point_correction", o[1:]) continue if o[0] == "A": setcfg("calibration.black_point_rate", o[1:]) continue if o[0] == "B": setcfg("calibration.black_luminance", o[1:]) continue if o[0] in ("p", "P") and len(o[1:]) >= 5: setcfg("dimensions.measureframe", o[1:]) setcfg("dimensions.measureframe.unzoomed", o[1:]) continue if o[0] == "V": setcfg("measurement_mode.adaptive", 1) continue if o[0:2] == "YA": setcfg("measurement_mode.adaptive", 0) continue if o[0] == "H": setcfg("measurement_mode.highres", 1) continue if o[0] == "p" and len(o[1:]) == 0: setcfg("measurement_mode.projector", 1) continue if o[0] == "F": setcfg("measure.darken_background", 1) continue if o[0] == "X": o = o.split(None, 1) ccmx = o[-1][1:-1] if not os.path.isabs(ccmx): ccmx = os.path.join(os.path.dirname(path), ccmx) # Need to update ccmx items again even if # comport_ctrl_handler already did update_ccmx_items = True continue if o[0] == "I": if "b" in o[1:]: setcfg("drift_compensation.blacklevel", 1) if "w" in o[1:]: setcfg("drift_compensation.whitelevel", 1) continue if not ccmx: ccxx = (glob.glob(os.path.join(os.path.dirname(path), "*.ccmx")) or glob.glob(os.path.join(os.path.dirname(path), "*.ccss"))) if ccxx and len(ccxx) == 1: ccmx = ccxx[0] update_ccmx_items = True if ccmx: setcfg("colorimeter_correction_matrix_file", "%s:%s" % (ccxxsetting, ccmx)) if options_colprof: # restore defaults self.restore_defaults_handler( include=("profile", "gamap_"), exclude=("profile.update", "profile.name", "gamap_default_intent")) for o in options_colprof: if o[0] == "q": setcfg("profile.quality", o[1]) continue if o[0] == "b": setcfg("profile.quality.b2a", o[1] or "l") continue if o[0] == "a": setcfg("profile.type", o[1]) continue if o[0] in ("s", "S"): o = o.split(None, 1) setcfg("gamap_profile", o[-1][1:-1]) setcfg("gamap_perceptual", 1) if o[0] == "S": setcfg("gamap_saturation", 1) continue if o[0] == "c": setcfg("gamap_src_viewcond", o[1:]) continue if o[0] == "d": setcfg("gamap_out_viewcond", o[1:]) continue if o[0] == "t": setcfg("gamap_perceptual_intent", o[1:]) continue if o[0] == "T": setcfg("gamap_saturation_intent", o[1:]) continue setcfg("calibration.file", path) if "CTI3" in ti3_lines: if debug: safe_print("[D] load_cal_handler testchart.file:", path) setcfg("testchart.file", path) if 'USE_BLACK_POINT_COMPENSATION "YES"' in ti3_lines: setcfg("profile.black_point_compensation", 1) elif 'USE_BLACK_POINT_COMPENSATION "NO"' in ti3_lines: setcfg("profile.black_point_compensation", 0) self.update_controls( update_profile_name=update_profile_name, update_ccmx_items=update_ccmx_items) writecfg() if ext.lower() in (".icc", ".icm"): if load_vcgt: # load calibration into lut self.load_cal(cal=path, silent=True) if options_dispcal and options_colprof: return elif options_dispcal: msg = lang.getstr("settings_loaded.cal_and_lut") else: msg = lang.getstr("settings_loaded.profile_and_lut") elif options_dispcal and options_colprof: msg = lang.getstr("settings_loaded.cal_and_profile") elif options_dispcal: if not load_vcgt: msg = lang.getstr("settings_loaded.cal") else: # load calibration into lut self.load_cal(cal=path, silent=True) msg = lang.getstr("settings_loaded.cal_and_lut") else: msg = lang.getstr("settings_loaded.profile") if not silent: InfoDialog(self, msg=msg + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) return elif ext.lower() in (".icc", ".icm"): sel = self.calibration_file_ctrl.GetSelection() if len(self.recent_cals) > sel and self.recent_cals[sel] == path: self.recent_cals.remove(self.recent_cals[sel]) self.calibration_file_ctrl.Delete(sel) cal = getcfg("calibration.file") or "" if not cal in self.recent_cals: self.recent_cals.append(cal) # The case-sensitive index could fail because of # case insensitive file systems, e.g. if the # stored filename string is # "C:\Users\Name\AppData\dispcalGUI\storage\MyFile" # but the actual filename is # "C:\Users\Name\AppData\dispcalGUI\storage\myfile" # (maybe because the user renamed the file) idx = index_fallback_ignorecase(self.recent_cals, cal) self.calibration_file_ctrl.SetSelection(idx) if load_vcgt: # load calibration into lut self.load_cal(cal=path, silent=True) if not silent: InfoDialog(self, msg=lang.getstr("no_settings") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return # Old .cal file without ARGYLL_DISPCAL_ARGS section setcfg("last_cal_path", path) # Restore defaults self.restore_defaults_handler( include=("calibration", "profile.update", "trc", "whitepoint"), exclude=("calibration.black_point_correction_choice.show", "calibration.update", "trc.should_use_viewcond_adjust.show_msg")) self.worker.options_dispcal = [] settings = [] for line in ti3_lines: line = line.strip().split(" ", 1) if len(line) > 1: value = line[1][1:-1] # strip quotes if line[0] == "DEVICE_CLASS": if value != "DISPLAY": InfoDialog(self, msg=lang.getstr( "calibration.file.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return elif line[0] == "DEVICE_TYPE": measurement_mode = value.lower()[0] if measurement_mode in ("c", "l"): setcfg("measurement_mode", measurement_mode) self.worker.options_dispcal += ["-y" + measurement_mode] elif line[0] == "NATIVE_TARGET_WHITE": setcfg("whitepoint.colortemp", None) setcfg("whitepoint.x", None) setcfg("whitepoint.y", None) settings += [lang.getstr("whitepoint")] elif line[0] == "TARGET_WHITE_XYZ": XYZ = value.split() i = 0 try: for component in XYZ: # Normalize to 0.0 - 1.0 XYZ[i] = float(component) / 100 i += 1 except ValueError, exception: continue x, y, Y = XYZ2xyY(XYZ[0], XYZ[1], XYZ[2]) k = XYZ2CCT(XYZ[0], XYZ[1], XYZ[2]) if not lang.getstr("whitepoint") in settings: setcfg("whitepoint.colortemp", None) setcfg("whitepoint.x", stripzeros(round(x, 6))) setcfg("whitepoint.y", stripzeros(round(y, 6))) self.worker.options_dispcal += [ "-w%s,%s" % (getcfg("whitepoint.x"), getcfg("whitepoint.y"))] settings += [lang.getstr("whitepoint")] setcfg("calibration.luminance", stripzeros(round(Y * 100, 3))) self.worker.options_dispcal += [ "-b%s" % getcfg("calibration.luminance")] settings += [lang.getstr("calibration.luminance")] elif line[0] == "TARGET_GAMMA": setcfg("trc", None) if value in ("L_STAR", "REC709", "SMPTE240M", "sRGB"): setcfg("trc.type", "g") if value == "L_STAR": setcfg("trc", "l") elif value == "REC709": setcfg("trc", "709") elif value == "SMPTE240M": setcfg("trc", "240") elif value == "sRGB": setcfg("trc", "s") else: try: value = stripzeros(value) if float(value) < 0: setcfg("trc.type", "G") value = abs(value) else: setcfg("trc.type", "g") setcfg("trc", value) except ValueError: continue self.worker.options_dispcal += [ "-" + getcfg("trc.type") + str(getcfg("trc"))] settings += [lang.getstr("trc")] elif line[0] == "DEGREE_OF_BLACK_OUTPUT_OFFSET": setcfg("calibration.black_output_offset", stripzeros(value)) self.worker.options_dispcal += [ "-f%s" % getcfg("calibration.black_output_offset")] settings += [ lang.getstr("calibration.black_output_offset")] elif line[0] == "BLACK_POINT_CORRECTION": setcfg("calibration.black_point_correction.auto", int(stripzeros(value) < 0)) if stripzeros(value) >= 0: setcfg("calibration.black_point_correction", stripzeros(value)) self.worker.options_dispcal += [ "-k%s" % getcfg("calibration.black_point_correction")] settings += [ lang.getstr("calibration.black_point_correction")] elif line[0] == "TARGET_BLACK_BRIGHTNESS": setcfg("calibration.black_luminance", stripzeros(value)) self.worker.options_dispcal += [ "-B%s" % getcfg("calibration.black_luminance")] settings += [lang.getstr("calibration.black_luminance")] elif line[0] == "QUALITY": setcfg("calibration.quality", value.lower()[0]) self.worker.options_dispcal += [ "-q" + getcfg("calibration.quality")] settings += [lang.getstr("calibration.quality")] setcfg("calibration.file", path) self.update_controls(update_profile_name=update_profile_name) if "CTI3" in ti3_lines: if debug: safe_print("[D] load_cal_handler testchart.file:", path) setcfg("testchart.file", path) writecfg() if load_vcgt: # load calibration into lut self.load_cal(silent=True) if len(settings) == 0: msg = lang.getstr("no_settings") else: msg = lang.getstr("settings_loaded", ", ".join(settings)) if not silent: InfoDialog(self, msg=msg + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information")) def delete_calibration_handler(self, event): cal = getcfg("calibration.file") if cal and os.path.exists(cal): caldir = os.path.dirname(cal) try: dircontents = os.listdir(caldir) except Exception, exception: InfoDialog(self, msg=safe_unicode(exception), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return self.related_files = {} for entry in dircontents: fn, ext = os.path.splitext(entry) if ext.lower() in (".app", script_ext): fn, ext = os.path.splitext(fn) if (fn.startswith(os.path.splitext(os.path.basename(cal))[0]) or ext.lower() in (".ccss", ".ccmx")): self.related_files[entry] = True self.dlg = dlg = ConfirmDialog( self, msg=lang.getstr("dialog.confirm_delete"), ok=lang.getstr("delete"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) if self.related_files: dlg.sizer3.Add((0, 8)) for related_file in self.related_files: dlg.sizer3.Add((0, 4)) chk = wx.CheckBox(dlg, -1, related_file) chk.SetValue(self.related_files[related_file]) dlg.Bind(wx.EVT_CHECKBOX, self.delete_calibration_related_handler, id=chk.GetId()) dlg.sizer3.Add(chk, flag=wx.ALIGN_LEFT, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.Center() result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: delete_related_files = [] if self.related_files: for related_file in self.related_files: if self.related_files[related_file]: delete_related_files += [ os.path.join(os.path.dirname(cal), related_file)] if sys.platform == "darwin": trashcan = lang.getstr("trashcan.mac") elif sys.platform == "win32": trashcan = lang.getstr("trashcan.windows") else: trashcan = lang.getstr("trashcan.linux") try: if (sys.platform == "darwin" and len(delete_related_files) + 1 == len(dircontents) and ".DS_Store" in dircontents) or \ len(delete_related_files) == len(dircontents): # Delete whole folder deleted = trash([os.path.dirname(cal)]) else: deleted = trash(delete_related_files) orphan_related_files = filter(lambda related_file: os.path.exists(related_file), delete_related_files) if orphan_related_files: InfoDialog(self, msg=lang.getstr("error.deletion", trashcan) + "\n\n" + "\n".join(os.path.basename(related_file) for related_file in orphan_related_files), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) except TrashcanUnavailableError, exception: InfoDialog(self, msg=lang.getstr("error.trashcan_unavailable", trashcan), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) except Exception, exception: InfoDialog(self, msg=lang.getstr("error.deletion", trashcan) + "\n\n" + safe_unicode(exception), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) # The case-sensitive index could fail because of # case insensitive file systems, e.g. if the # stored filename string is # "C:\Users\Name\AppData\dispcalGUI\storage\MyFile" # but the actual filename is # "C:\Users\Name\AppData\dispcalGUI\storage\myfile" # (maybe because the user renamed the file) idx = index_fallback_ignorecase(self.recent_cals, cal) self.recent_cals.remove(cal) self.calibration_file_ctrl.Delete(idx) setcfg("calibration.file", None) setcfg("settings.changed", 1) recent_cals = [] for recent_cal in self.recent_cals: if recent_cal not in self.presets: recent_cals += [recent_cal] setcfg("recent_cals", os.pathsep.join(recent_cals)) update_colorimeter_correction_matrix_ctrl_items = False update_testcharts = False for path in delete_related_files: if path not in orphan_related_files: if (os.path.splitext(path)[1].lower() in (".ccss", ".ccmx")): self.delete_colorimeter_correction_matrix_ctrl_item(path) update_colorimeter_correction_matrix_ctrl_items = True elif path in self.testcharts: update_testcharts = True if update_testcharts: self.set_testcharts() self.update_controls(False, update_colorimeter_correction_matrix_ctrl_items) self.load_display_profile_cal() def delete_calibration_related_handler(self, event): chk = self.dlg.FindWindowById(event.GetId()) self.related_files[chk.GetLabel()]=chk.GetValue() def aboutdialog_handler(self, event): if hasattr(self, "aboutdialog"): self.aboutdialog.Destroy() self.aboutdialog = AboutDialog(self, -1, lang.getstr("menu.about"), size=(100, 100)) items = [] items += [wx.StaticBitmap(self.aboutdialog, -1, getbitmap("theme/header-about"))] items += [wx.StaticText(self.aboutdialog, -1, "")] items += [wx.StaticText(self.aboutdialog, -1, u"%s © %s" % (appname, author))] items += [wx.StaticText(self.aboutdialog, -1, u"%s %s" % (version, build))] items += [wx.lib.hyperlink.HyperLinkCtrl( self.aboutdialog, -1, label=domain, URL="http://%s" % domain)] items += [wx.StaticText(self.aboutdialog, -1, "")] items += [wx.StaticText( self.aboutdialog, -1, u"Argyll CMS © Graeme Gill")] items += [wx.StaticText( self.aboutdialog, -1, u"%s" % self.worker.argyll_version_string)] items += [wx.lib.hyperlink.HyperLinkCtrl( self.aboutdialog, -1, label="ArgyllCMS.com", URL="http://www.argyllcms.com")] items += [wx.StaticText(self.aboutdialog, -1, "")] items += [wx.StaticText(self.aboutdialog, -1, u"%s:" % lang.getstr("translations"))] lauthors = {} for lcode in lang.ldict: lauthor = lang.ldict[lcode].get("!author", "") language = lang.ldict[lcode].get("!language", "") if lauthor and language: if not lauthors.get(lauthor): lauthors[lauthor] = [] lauthors[lauthor] += [language] lauthors = [(lauthors[lauthor], lauthor) for lauthor in lauthors] lauthors.sort() for langs, lauthor in lauthors: items += [wx.StaticText(self.aboutdialog, -1, "%s - %s" % (", ".join(langs), lauthor))] items += [wx.StaticText(self.aboutdialog, -1, "")] match = re.match("([^(]+)\s*(\([^(]+\))?\s*(\[[^[]+\])?", sys.version) if match: pyver_long = match.groups() else: pyver_long = [sys.version] items += [wx.StaticText(self.aboutdialog, -1, "Python " + pyver_long[0].strip())] if len(pyver_long) > 1: for part in pyver_long[1:]: if part: items += [wx.StaticText(self.aboutdialog, -1, part)] items += [wx.lib.hyperlink.HyperLinkCtrl( self.aboutdialog, -1, label="python.org", URL="http://www.python.org")] items += [wx.StaticText(self.aboutdialog, -1, "")] items += [wx.StaticText(self.aboutdialog, -1, "wxPython " + wx.version())] items += [wx.lib.hyperlink.HyperLinkCtrl( self.aboutdialog, -1, label="wxPython.org", URL="http://www.wxpython.org")] items += [wx.StaticText(self.aboutdialog, -1, "")] self.aboutdialog.add_items(items) self.aboutdialog.Layout() self.aboutdialog.Center() self.aboutdialog.Show() def readme_handler(self, event): readme = get_data_path("README.html") if readme: launch_file(readme) def license_handler(self, event): license = get_data_path("LICENSE.txt") if not license: # Debian license = "/usr/share/common-licenses/GPL-3" if license and os.path.isfile(license): launch_file(license) def help_support_handler(self, event): launch_file("http://%s/#help" % domain) def bug_report_handler(self, event): launch_file("http://%s/#reportbug" % domain) def app_update_check_handler(self, event, silent=False): if not hasattr(self, "app_update_check") or \ not self.app_update_check.isAlive(): self.app_update_check = threading.Thread(target=app_update_check, args=(self, silent)) self.app_update_check.start() def app_auto_update_check_handler(self, event): setcfg("update_check", int(self.menuitem_app_auto_update_check.IsChecked())) def auto_enumerate_ports_handler(self, event): setcfg("enumerate_ports.auto", int(self.menuitem_auto_enumerate_ports.IsChecked())) def infoframe_toggle_handler(self, event=None, show=None): if show is None: show = not self.infoframe.IsShownOnScreen() setcfg("log.show", int(show)) self.infoframe.Show(show) self.menuitem_show_log.Check(show) self.menuitem_log_autoshow.Enable(not show) def infoframe_autoshow_handler(self, event): setcfg("log.autoshow", int(self.menuitem_log_autoshow.IsChecked())) def HideAll(self): self.stop_timers() if hasattr(self, "gamapframe"): self.gamapframe.Hide() if hasattr(self, "aboutdialog"): self.aboutdialog.Hide() if hasattr(self, "extra_args"): self.extra_args.Hide() self.infoframe.Hide() if hasattr(self, "tcframe"): self.tcframe.Hide() if getattr(self, "lut_viewer", None) and \ self.lut_viewer.IsShownOnScreen(): self.lut_viewer.Hide() if getattr(self, "lut3dframe", None): self.lut3dframe.Hide() if getattr(self, "reportframe", None): self.reportframe.Hide() if getattr(self, "synthiccframe", None): self.synthiccframe.Hide() for profile_info in self.profile_info.values(): profile_info.Close() self.Hide() self.enable_menus(False) def Show(self, show=True, start_timers=True): if not self.IsShownOnScreen(): if hasattr(self, "tcframe"): self.tcframe.Show(getcfg("tc.show")) self.infoframe.Show(getcfg("log.show")) if LUTFrame and getcfg("lut_viewer.show"): self.init_lut_viewer(show=True) for profile_info in reversed(self.profile_info.values()): profile_info.Show() if start_timers: self.start_timers() self.enable_menus() wx.Frame.Show(self, show) self.Raise() if not wx.GetApp().IsActive(): self.RequestUserAttention() def OnShow(self, event): self.SetFocus() def OnClose(self, event=None): if sys.platform == "darwin" or debug: self.focus_handler(event) if not hasattr(self, "tcframe") or self.tcframe.tc_close_handler(): writecfg() if getattr(self, "thread", None) and self.thread.isAlive(): self.Disable() if debug: safe_print("Waiting for child thread to exit...") self.thread.join() self.HideAll() if self.worker.tempdir and os.path.isdir(self.worker.tempdir): self.worker.wrapup(False) wx.GetApp().ExitMainLoop() class MainApp(wx.App): def OnInit(self): if sys.platform == "darwin" and not isapp: self.SetAppName("Python") else: self.SetAppName(appname) ##wx_lang = getattr(wx, "LANGUAGE_" + lang.getstr("!language_name"), ##wx.LANGUAGE_ENGLISH) ##self.locale = wx.Locale(wx_lang) ##if debug: ##safe_print("[D]", lang.getstr("!language_name"), wx_lang, ##self.locale.GetLocale()) self.progress_dlg = ProgressDialog(msg=lang.getstr("startup"), handler=self.startup_progress_handler, style=wx.PD_SMOOTH & ~wx.PD_CAN_ABORT, pos=(getcfg("position.x") + 50, getcfg("position.y") + 50)) self.progress_dlg.MakeModal(False) self.frame = MainFrame() self.SetTopWindow(self.frame) self.frame.Show() return True def startup_progress_handler(self, event): self.progress_dlg.Pulse() class MeasurementFileCheckSanityDialog(ConfirmDialog): def __init__(self, parent, ti3, suspicious, force=False): ConfirmDialog.__init__(self, parent, title=os.path.basename(ti3.filename) if ti3.filename else appname, ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), alt=lang.getstr("invert_selection"), bitmap=geticon(32, "dialog-warning"), wrap=120) msg_col1 = lang.getstr("warning.suspicious_delta_e") msg_col2 = lang.getstr("warning.suspicious_delta_e.info") margin = 12 dlg = self dlg.sizer3.Remove(dlg.message) dlg.message.Destroy() dlg.sizer4 = wx.BoxSizer(wx.HORIZONTAL) dlg.sizer3.Add(dlg.sizer4) dlg.message_col1 = wx.StaticText(dlg, -1, msg_col1) dlg.message_col1.Wrap(470) dlg.sizer4.Add(dlg.message_col1, flag=wx.RIGHT, border = 20) dlg.message_col2 = wx.StaticText(dlg, -1, msg_col2) dlg.message_col2.Wrap(470) dlg.sizer4.Add(dlg.message_col2, flag=wx.LEFT, border = 20) dlg.Unbind(wx.EVT_BUTTON, dlg.alt) dlg.Bind(wx.EVT_BUTTON, dlg.invert_selection_handler, id=dlg.alt.GetId()) dlg.select_all_btn = wx.Button(dlg, -1, lang.getstr("deselect_all")) dlg.select_all_btn.SetInitialSize((dlg.select_all_btn.GetSize()[0] + btn_width_correction, -1)) dlg.sizer2.Insert(2, (margin, margin)) dlg.sizer2.Insert(2, dlg.select_all_btn) dlg.Bind(wx.EVT_BUTTON, dlg.select_all_handler, id=dlg.select_all_btn.GetId()) dlg.ti3 = ti3 dlg.suspicious = suspicious dlg.mods = {} dlg.force = force dlg.grid = wx.grid.Grid(dlg, -1, size=(981, 240), style=wx.BORDER_SIMPLE) grid = dlg.grid grid.CreateGrid(0, 15) grid.SetColLabelSize(50) grid.SetRowLabelSize(60) attr = wx.grid.GridCellAttr() attr.SetReadOnly(True) for i in xrange(grid.GetNumberCols()): if i in (4, 5) or i > 8: grid.SetColAttr(i, attr) if i == 0: size = 22 elif i in (4, 5): size = 20 elif i > 8: size = 80 else: size = 60 grid.SetColSize(i, size) for i, label in enumerate(["", "R %", "G %", "B %", "", "", "X", "Y", "Z", u"\u0394E*00\nXYZ A/B", u"0.5 \u0394E*00\nRGB A/B", u"\u0394E*00\nRGB-XYZ", u"\u0394L*00\nRGB-XYZ", u"\u0394C*00\nRGB-XYZ", u"\u0394H*00\nRGB-XYZ"]): grid.SetColLabelValue(i, label) attr = wx.grid.GridCellAttr() attr.SetEditor(wx.grid.GridCellBoolEditor()) attr.SetRenderer(wx.grid.GridCellBoolRenderer()) grid.SetColAttr(0, attr) font = wx.Font(FONTSIZE_MEDIUM, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) grid.SetDefaultCellFont(font) grid.SetDefaultRowSize(20) grid.EnableDragColSize() grid.EnableGridLines(True) black = ti3.queryi1({"RGB_R": 0, "RGB_G": 0, "RGB_B": 0}) if black: black = black["XYZ_X"], black["XYZ_Y"], black["XYZ_Z"] dlg.black = black white = ti3.queryi1({"RGB_R": 100, "RGB_G": 100, "RGB_B": 100}) if white: white = white["XYZ_X"], white["XYZ_Y"], white["XYZ_Z"] dlg.white = white dlg.suspicious_items = [] for i, (prev, item, delta, sRGB_delta, prev_delta_to_sRGB, delta_to_sRGB) in enumerate(suspicious): for cur in (prev, item): if cur and cur not in dlg.suspicious_items: dlg.suspicious_items.append(cur) grid.AppendRows(1) row = grid.GetNumberRows() - 1 grid.SetRowLabelValue(row, "%d" % cur.SAMPLE_ID) RGB = [] for k, label in enumerate("RGB"): value = cur["RGB_%s" % label] grid.SetCellValue(row, 1 + k, "%.4f" % value) RGB.append(value) XYZ = [] for k, label in enumerate("XYZ"): value = cur["XYZ_%s" % label] grid.SetCellValue(row, 6 + k, "%.4f" % value) XYZ.append(value) if cur is prev: dlg.update_row(row, RGB, XYZ, None, None, prev_delta_to_sRGB) else: dlg.update_row(row, RGB, XYZ, delta, sRGB_delta, delta_to_sRGB) grid.Bind(wx.EVT_KEY_DOWN, dlg.key_handler) grid.Bind(wx.grid.EVT_GRID_CELL_CHANGE, dlg.cell_change_handler) grid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, dlg.cell_click_handler) grid.Bind(wx.grid.EVT_GRID_SELECT_CELL, dlg.cell_select_handler) grid.Bind(wx.grid.EVT_GRID_EDITOR_CREATED, dlg.editor_created_handler) dlg.sizer3.Add(grid, 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() # This workaround is needed to update cell colours grid.SelectAll() grid.ClearSelection() dlg.Center() def cell_change_handler(self, event): dlg = self grid = dlg.grid if event.Col == 0: self.check_select_status() else: try: value = float(grid.GetCellValue(event.Row, event.Col).replace(",", ".")) except ValueError: wx.Bell() item = dlg.suspicious_items[event.Row] label = "_RGB__XYZ"[event.Col] if event.Col < 6: label = "RGB_%s" % label else: label = "XYZ_%s" % label grid.SetCellValue(event.Row, event.Col, "%.4f" % item[label]) else: if event.Col < 4: value = max(min(value, 100), 0) grid.SetCellValue(event.Row, event.Col, str(value)) RGB = [] for i in (1, 2, 3): RGB.append(float(grid.GetCellValue(event.Row, i))) XYZ = [] for i in (6, 7, 8): XYZ.append(float(grid.GetCellValue(event.Row, i))) dlg.mods[event.Row] = (RGB, XYZ) # Update row (sRGBLab, Lab, delta_to_sRGB, criteria1, debuginfo) = check_ti3_criteria1(RGB, XYZ, dlg.black, dlg.white, print_debuginfo=True) if grid.GetCellValue(event.Row, 9): prev = dlg.suspicious_items[event.Row - 1] prev_RGB = prev["RGB_R"], prev["RGB_G"], prev["RGB_B"] prev_XYZ = prev["XYZ_X"], prev["XYZ_Y"], prev["XYZ_Z"] (prev_sRGBLab, prev_Lab, prev_delta_to_sRGB, prev_criteria1, prev_debuginfo) = check_ti3_criteria1(prev_RGB, prev_XYZ, dlg.black, dlg.white, print_debuginfo=False) (delta, sRGB_delta, criteria2) = check_ti3_criteria2(prev_Lab, Lab, prev_sRGBLab, sRGBLab, prev_RGB, RGB) else: delta, sRGB_delta = (None, ) * 2 dlg.update_row(event.Row, RGB, XYZ, delta, sRGB_delta, delta_to_sRGB) # This workaround is needed to update cell colours cells = grid.GetSelectedCells() grid.SelectAll() grid.ClearSelection() if cells: grid.SelectBlock(cells[0][0], cells[0][1], cells[-1][0], cells[-1][0]) def cell_click_handler(self, event): if event.Col == 0: wx.CallLater(100, self.toggle_cb) event.Skip() def cell_select_handler(self, event): dlg = self if event.Col == 0: wx.CallAfter(dlg.grid.EnableCellEditControl) event.Skip() def check_enable_ok(self): dlg = self for index in xrange(dlg.grid.GetNumberRows()): if dlg.grid.GetCellValue(index, 0) == "": dlg.ok.Enable() return dlg.ok.Enable(not dlg.force) def check_select_status(self, has_false_values=None, has_true_values=None): dlg = self if None in (has_false_values, has_true_values): for index in xrange(dlg.grid.GetNumberRows()): if dlg.grid.GetCellValue(index, 0) == "": has_false_values = True else: has_true_values = True if has_false_values: dlg.ok.Enable() else: dlg.ok.Enable(not self.force) if has_true_values: dlg.select_all_btn.SetLabel(lang.getstr("deselect_all")) else: dlg.select_all_btn.SetLabel(lang.getstr("select_all")) def editor_created_handler(self, event): dlg = self if event.Col == 0: dlg.grid.cb = event.Control dlg.grid.cb.WindowStyle |= wx.WANTS_CHARS dlg.grid.cb.Bind(wx.EVT_KEY_DOWN, dlg.key_handler) event.Skip() def invert_selection_handler(self, event): dlg = self has_false_values = False has_true_values = False for index in xrange(dlg.grid.GetNumberRows()): if dlg.grid.GetCellValue(index, 0) == "1": value = "" has_false_values = True else: value = "1" has_true_values = True dlg.grid.SetCellValue(index, 0, value) self.check_select_status(has_false_values, has_true_values) def key_handler(self, event): dlg = self if event.KeyCode == wx.WXK_UP: if dlg.grid.GridCursorRow > 0: dlg.grid.DisableCellEditControl() dlg.grid.MoveCursorUp(False) elif event.KeyCode == wx.WXK_DOWN: if dlg.grid.GridCursorRow < dlg.grid.NumberRows -1: dlg.grid.DisableCellEditControl() dlg.grid.MoveCursorDown(False) elif event.KeyCode == wx.WXK_LEFT: if dlg.grid.GridCursorCol > 0: dlg.grid.DisableCellEditControl() dlg.grid.MoveCursorLeft(False) elif event.KeyCode == wx.WXK_RIGHT: if dlg.grid.GridCursorCol < dlg.grid.NumberCols - 1: dlg.grid.DisableCellEditControl() dlg.grid.MoveCursorRight(False) elif event.KeyCode == wx.WXK_SPACE: if dlg.grid.GridCursorRow == 0: wx.CallLater(100, dlg.toggle_cb) else: if event.ControlDown() or event.CmdDown(): keycode = event.KeyCode # CTRL (Linux/Mac/Windows) / CMD (Mac) if keycode == 65: # A dlg.grid.SelectAll() return elif keycode in (67, 88): # C / X clip = [] cells = dlg.grid.GetSelection() i = -1 start_col = dlg.grid.GetNumberCols() for cell in cells: row = cell[0] col = cell[1] if i < row: clip += [[]] i = row if col < start_col: start_col = col while len(clip[-1]) - 1 < col: clip[-1] += [""] clip[-1][col] = dlg.grid.GetCellValue(row, col) # Skip first col with the checkbox if start_col == 0: start_col = 1 for i, row in enumerate(clip): clip[i] = "\t".join(row[start_col:]) clipdata = wx.TextDataObject() clipdata.SetText("\n".join(clip)) wx.TheClipboard.Open() wx.TheClipboard.SetData(clipdata) wx.TheClipboard.Close() return elif keycode == 86: # V do = wx.TextDataObject() wx.TheClipboard.Open() success = wx.TheClipboard.GetData(do) wx.TheClipboard.Close() if success: txt = StringIO(do.GetText()) lines = txt.readlines() txt.close() for i, line in enumerate(lines): lines[i] = re.sub("\s+", "\t", line).split("\t") # translate from selected cells into a grid with None values for not selected cells grid = [] cells = dlg.grid.GetSelection() i = -1 for cell in cells: row = cell[0] col = cell[1] # Skip read-only cells if (dlg.grid.IsReadOnly(row, col) or not dlg.grid.GetColLabelValue(col)): continue if i < row: grid += [[]] i = row grid[-1].append(cell) # 'paste' values from clipboard for i, row in enumerate(grid): for j, cell in enumerate(row): if (cell != None and len(lines) > i and len(lines[i]) > j): dlg.grid.SetCellValue(cell[0], cell[1], lines[i][j]) dlg.cell_change_handler(CustomGridCellEvent(wx.grid.EVT_GRID_CELL_CHANGE.evtType[0], dlg.grid, cell[0], cell[1])) return event.Skip() def mark_cell(self, row, col, ok=False): grid = self.grid font = wx.Font(FONTSIZE_MEDIUM, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL if ok else wx.FONTWEIGHT_BOLD) grid.SetCellFont(row, col, font) grid.SetCellTextColour(row, col, grid.GetDefaultCellTextColour() if ok else wx.Colour(204, 0, 0)) def select_all_handler(self, event): dlg = self if dlg.select_all_btn.GetLabel() == lang.getstr("select_all"): value = "1" else: value = "" for index in xrange(dlg.grid.GetNumberRows()): dlg.grid.SetCellValue(index, 0, value) self.check_select_status(not value, value) def toggle_cb(self): dlg = self if hasattr(dlg.grid, "cb"): # Click on the cell border does not cause the editor to be # created dlg.grid.cb.Value = not dlg.grid.cb.Value wx.CallLater(100, dlg.grid.DisableCellEditControl) def update_row(self, row, RGB, XYZ, delta, sRGB_delta, delta_to_sRGB): dlg = self grid = dlg.grid RGB255 = [int(round(float(str(v * 2.55)))) for v in RGB] dlg.grid.SetCellBackgroundColour(row, 4, wx.Colour(*RGB255)) if dlg.white: XYZ = colormath.adapt(XYZ[0], XYZ[1], XYZ[2], dlg.white, "D65") RGB255 = [int(round(float(str(v)))) for v in colormath.XYZ2RGB(XYZ[0] / 100.0, XYZ[1] / 100.0, XYZ[2] / 100.0, scale=255)] dlg.grid.SetCellBackgroundColour(row, 5, wx.Colour(*RGB255)) grid.SetCellValue(row, 0, "1" if (not delta or (delta["E_ok"] and delta["L_ok"])) and delta_to_sRGB["ok"] else "") for col in xrange(3): dlg.mark_cell(row, 6 + col, (not delta or (delta["E_ok"] and (delta["L_ok"] or col != 1))) and delta_to_sRGB["ok"]) if delta: grid.SetCellValue(row, 9, "%.2f" % delta["E"]) dlg.mark_cell(row, 9, delta["E_ok"]) if sRGB_delta: grid.SetCellValue(row, 10, "%.2f" % sRGB_delta["E"]) for col, ELCH in enumerate("ELCH"): grid.SetCellValue(row, 11 + col, "%.2f" % delta_to_sRGB[ELCH]) dlg.mark_cell(row, 11 + col, delta_to_sRGB["%s_ok" % ELCH]) def main(): log("=" * 80) if verbose >= 1: safe_print(appname + runtype, version, build) if sys.platform == "darwin": safe_print("Mac OS X %s %s" % (mac_ver()[0], mac_ver()[-1])) else: if sys.platform == "win32": # http://msdn.microsoft.com/en-us/library/windows/desktop/ms724832%28v=vs.85%29.aspx ver2name = {(5, 0): "2000", (5, 1): "XP", (5, 2): "XP 64-Bit/Server 2003/Server 2003 R2", (6, 0): "Vista/Server 2008", (6, 1): "7/Server 2008 R2", (6, 2): "8/Server 2012"} dist = ver2name.get(sys.getwindowsversion()[:2], "N/A") else: dist = "%s %s %s" % getattr(platform, "linux_distribution", platform.dist)() safe_print("%s %s (%s)" % (platform.system(), platform.version(), dist)) safe_print("Python " + sys.version) safe_print("wxPython " + wx.version()) try: # Force to run inside tty with the --terminal option if "--terminal" in sys.argv[1:]: terminals_opts = { "Terminal": "-x", "gnome-terminal": "-x", "konsole": "-e", "xterm": "-e" } terminals = terminals_opts.keys() if isapp: me = os.path.join(exedir, pyname) cmd = u'"%s"' % me cwd = None elif isexe: me = exe if sys.platform == "win32": cmd = u'"%s"' % win32api.GetShortPathName(exe) else: cmd = u'"%s"' % exe cwd = None else: me = pypath if os.path.basename(exe) == "pythonw" + exe_ext: python = os.path.join(os.path.dirname(exe), "python" + exe_ext) if sys.platform == "win32": cmd = u'"%s" "%s"' % tuple( [win32api.GetShortPathName(path) for path in (python, pypath)]) cwd = win32api.GetShortPathName(pydir) else: cmd = u'"%s" "%s"' % (python, pypath) cwd = pydir.encode(fs_enc) safe_print("Re-launching instance in terminal") if sys.platform == "win32": cmd = u'start "%s" /WAIT %s' % (appname, cmd) if debug: safe_print("[D]", cmd) retcode = sp.call(cmd.encode(fs_enc), shell=True, cwd=cwd) elif sys.platform == "darwin": if debug: safe_print("[D]", cmd) retcode, output, errors = mac_terminal_do_script(cmd) else: stdout = tempfile.SpooledTemporaryFile() retcode = None for terminal in terminals: if which(terminal): if debug: safe_print("[D] %s %s %s" % (terminal, terminals_opts[terminal], cmd)) stdout.write('%s %s %s' % (terminal, terminals_opts[terminal], cmd.encode(fs_enc))) retcode = sp.call( [terminal, terminals_opts[terminal]] + cmd.encode(fs_enc).strip('"').split('" "'), stdout=stdout, stderr=sp.STDOUT, cwd=cwd) stdout.write('\n\n') break stdout.seek(0) if retcode != 0: app = wx.App(redirect=False) if sys.platform == "win32": msg = (u'Even though %s is a GUI application, it needs to ' 'be run from a command prompt. An attempt to ' 'automatically launch a command prompt failed.' % me) elif sys.platform == "darwin": msg = (u'Even though %s is a GUI application, it needs to ' 'be run from Terminal. An attempt to automatically ' 'launch Terminal failed.' % me) else: if retcode is None: msg = (u'Even though %s is a GUI application, it needs ' 'to be run from a terminal. An attempt to ' 'automatically launch a terminal failed, ' 'because none of those known seem to be ' 'installed (%s).' % (me, ", ".join(terminals))) else: msg = (u'Even though %s is a GUI application, it needs ' 'to be run from a terminal. An attempt to ' 'automatically launch a terminal failed:\n\n%s' % (me, unicode(stdout.read(), enc, "replace"))) handle_error(msg) else: if sys.platform == "darwin" and ("--admin" not in sys.argv[1:] and 80 not in posix.getgroups()): # GID 80 is the admin group on Mac OS X # Argyll dispwin/dispcal need admin (not root) privileges if isapp: cmd = os.path.join(exedir, pyname) else: cmd = u"'%s' '%s'" % (exe, pypath) sp.Popen(['osascript', '-e', 'do shell script "%s --admin" with administrator privileges' % cmd.encode(fs_enc)]) sys.exit(0) # Create main data dir if it does not exist if not os.path.exists(datahome): try: os.makedirs(datahome) except Exception, exception: handle_error("Warning - could not create directory '%s'" % datahome) if sys.platform not in ("darwin", "win32"): # Linux: Try and fix v0.2.1b calibration loader, because # calibrationloader.sh is no longer present in v0.2.2b+ desktopfile_name = appname + "-Calibration-Loader-Display-" if autostart_home and os.path.exists(autostart_home): try: autostarts = os.listdir(autostart_home) except Exception, exception: safe_print(u"Warning - directory '%s' listing failed: " u"%s" % tuple(safe_unicode(s) for s in (autostarts, exception))) for filename in autostarts: if filename.startswith(desktopfile_name): try: desktopfile_path = os.path.join(autostart_home, filename) cfg = ConfigParser.SafeConfigParser() cfg.optionxform = str cfg.read([desktopfile_path]) exec_ = cfg.get("Desktop Entry", "Exec") if exec_.find("calibrationloader.sh") > -1: cfg.set( "Desktop Entry", "Exec", re.sub('"[^"]*calibrationloader.sh"\s*', '', exec_, 1)) cfgio = StringIO() cfg.write(cfgio) desktopfile = open(desktopfile_path, "w") cfgio.seek(0) desktopfile.write("".join(["=".join(line.split(" = ", 1)) for line in cfgio])) desktopfile.close() except Exception, exception: safe_print("Warning - could not process old " "calibration loader:", safe_unicode(exception)) # Initialize & run initcfg() lang.init() app = MainApp(redirect=False) # Don't redirect stdin/stdout app.MainLoop() except Exception, exception: handle_error(u"Fatal error: " + safe_unicode(traceback.format_exc())) try: logger = logging.getLogger(appname) for handler in logger.handlers: logger.removeHandler(handler) logging.shutdown() except Exception, exception: pass if __name__ == "__main__": main() dispcalGUI-1.7.1.6/dispcalGUI/edid.py000644 000765 000000 00000026754 12224371766 017111 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from hashlib import md5 import codecs import math import os import string import struct import sys if sys.platform == "win32": wmi_connection = None if sys.getwindowsversion() >= (6, ): # Use WMI for Vista/Win7 try: import wmi except: pass else: wmi_connection = wmi.WMI(namespace="WMI") else: # Use registry as fallback for Win2k/XP/2003 import _winreg import pywintypes import win32api elif sys.platform != "darwin": try: import xrandr except ImportError: xrandr = None else: import binascii import re import subprocess as sp import config from log import log, safe_print from util_str import make_ascii_printable if sys.platform == "win32": import util_win HEADER = (0, 8) MANUFACTURER_ID = (8, 10) PRODUCT_ID = (10, 12) SERIAL_32 = (12, 16) WEEK_OF_MANUFACTURE = 16 YEAR_OF_MANUFACTURE = 17 EDID_VERSION = 18 EDID_REVISION = 19 MAX_H_SIZE_CM = 21 MAX_V_SIZE_CM = 22 GAMMA = 23 FEATURES = 24 LO_RG_XY = 25 LO_BW_XY = 26 HI_R_X = 27 HI_R_Y = 28 HI_G_X = 29 HI_G_Y = 30 HI_B_X = 31 HI_B_Y = 32 HI_W_X = 33 HI_W_Y = 34 BLOCKS = ((54, 72), (72, 90), (90, 108), (108, 126)) BLOCK_TYPE = 3 BLOCK_CONTENTS = (5, 18) BLOCK_TYPE_SERIAL_ASCII = "\xff" BLOCK_TYPE_ASCII = "\xfe" BLOCK_TYPE_MONITOR_NAME = "\xfc" BLOCK_TYPE_COLOR_POINT = "\xfb" BLOCK_TYPE_COLOR_MANAGEMENT_DATA = "\xf9" EXTENSION_FLAG = 126 CHECKSUM = 127 BLOCK_DI_EXT = "\x40" TRC = (81, 127) pnpidcache = {} def combine_hi_8lo(hi, lo): return hi << 8 | lo def get_edid(display_no=0, display_name=None): """ Get and parse EDID. Return dict. On Mac OS X, you need to specify a display name. On all other platforms, you need to specify a display number (zero-based). """ edid = None if sys.platform == "win32": # The ordering will work as long as Argyll continues using # EnumDisplayMonitors monitors = util_win.get_real_display_devices_info() moninfo = monitors[display_no] device = util_win.get_active_display_device(moninfo["Device"]) if not device: return {} id = device.DeviceID.split("\\")[1] if wmi_connection: # Use WMI for Vista/Win7 # http://msdn.microsoft.com/en-us/library/Aa392707 try: msmonitors = wmi_connection.WmiMonitorDescriptorMethods() except Exception, exception: raise WMIError(exception) for msmonitor in msmonitors: if msmonitor.InstanceName.split("\\")[1] == id: try: edid = msmonitor.WmiGetMonitorRawEEdidV1Block(0) except: # No EDID entry pass else: edid = "".join(chr(i) for i in edid[0]) break elif sys.getwindowsversion() < (6, ): # Use registry as fallback for Win2k/XP/2003 # http://msdn.microsoft.com/en-us/library/ff546173%28VS.85%29.aspx # "The Enum tree is reserved for use by operating system components, # and its layout is subject to change. (...) Drivers and Windows # applications must not access the Enum tree directly." # But do we care? Probably not, as older Windows' API isn't likely # gonna change. driver = "\\".join(device.DeviceID.split("\\")[-2:]) subkey = "\\".join(["SYSTEM", "CurrentControlSet", "Enum", "DISPLAY", id]) try: key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, subkey) except WindowsError: # Registry error safe_print("Windows registry error: Key", "\\".join(["HKEY_LOCAL_MACHINE", subkey]), "does not exist.") return {} numsubkeys, numvalues, mtime = _winreg.QueryInfoKey(key) for i in range(numsubkeys): hkname = _winreg.EnumKey(key, i) hk = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "\\".join([subkey, hkname])) try: test = _winreg.QueryValueEx(hk, "Driver")[0] except WindowsError: # No Driver entry continue if test == driver: # Found our display device try: devparms = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "\\".join([subkey, hkname, "Device Parameters"])) except WindowsError: # No Device Parameters (registry error?) safe_print("Windows registry error: Key", "\\".join(["HKEY_LOCAL_MACHINE", subkey, hkname, "Device Parameters"]), "does not exist.") continue try: edid = _winreg.QueryValueEx(devparms, "EDID")[0] except WindowsError: # No EDID entry pass elif sys.platform == "darwin": # Get EDID via ioreg p = sp.Popen(["ioreg", "-c", "IODisplay", "-S", "-w0"], stdout=sp.PIPE) stdout, stderr = p.communicate() if stdout: for edid in [binascii.unhexlify(edid_hex) for edid_hex in re.findall('"IODisplayEDID"\s*=\s*<([0-9A-Fa-f]*)>', stdout)]: if edid and len(edid) >= 128: parsed_edid = parse_edid(edid) if parsed_edid.get("monitor_name", parsed_edid.get("ascii")) == display_name: # On Mac OS X, you need to specify a display name # because the order is unknown return parsed_edid return {} elif xrandr: # Check XrandR output properties edid = None for key in ("EDID", "EDID_DATA"): try: edid = xrandr.get_output_property(display_no, key, xrandr.XA_INTEGER) except ValueError: pass else: break if not edid: # Check X11 atoms for key in ("XFree86_DDC_EDID1_RAWDATA", "XFree86_DDC_EDID2_RAWDATA"): if display_no > 0: key += "_%s" % display_no try: edid = xrandr.get_atom(key) except ValueError: pass else: break if edid: edid = "".join(chr(i) for i in edid) if edid and len(edid) >= 128: return parse_edid(edid) return {} def parse_manufacturer_id(block): """ Parse the manufacturer id and return decoded string. The range is always ASCII charcode 64 to 95. """ h = combine_hi_8lo(ord(block[0]), ord(block[1])) manufacturer_id = [] for shift in (10, 5, 0): manufacturer_id.append(chr(((h >> shift) & 0x1f) + ord('A') - 1)) return "".join(manufacturer_id).strip() def get_manufacturer_name(manufacturer_id): """ Try and get a nice descriptive string for our manufacturer id. This uses pnp.ids which will be looked for in several places. If it can't find the file, it simply returns the manufacturer id. Examples: SAM -> Samsung Electric Company NEC -> NEC Corporation pnp.ids can be created from Excel data available from Microsoft: http://www.microsoft.com/whdc/system/pnppwr/pnp/pnpid.mspx """ if not pnpidcache: paths = ["/usr/share/hwdata/pnp.ids", # hwdata, e.g. Red Hat "/usr/share/misc/pnp.ids", # pnputils, e.g. Debian "/usr/share/libgnome-desktop/pnp.ids"] # fallback gnome-desktop if sys.platform in ("darwin", "win32"): paths.append(os.path.join(config.pydir, "pnp.ids")) # fallback for path in paths: if os.path.isfile(path): try: pnp_ids = codecs.open(path, "r", "UTF-8", "replace") except IOError: pass else: try: for line in pnp_ids: try: # Strip leading/trailing whitespace # (non-breaking spaces too) id, name = line.strip(string.whitespace + u"\u00a0").split(None, 1) except ValueError: continue pnpidcache[id] = name except OSError: pass pnp_ids.close() return pnpidcache.get(manufacturer_id, manufacturer_id) def edid_get_bit(value, bit): return (value & (1 << bit)) >> bit def edid_get_bits(value, begin, end): mask = (1 << (end - begin + 1)) - 1 return (value >> begin) & mask def edid_decode_fraction(high, low): result = 0.0 high = (high << 2) | low for i in xrange(0, 10): result += edid_get_bit(high, i) * math.pow(2, i - 10) return result def parse_edid(edid): """ Parse raw EDID data (binary string) and return dict. """ hash = md5(edid).hexdigest() header = edid[HEADER[0]:HEADER[1]] manufacturer_id = parse_manufacturer_id(edid[MANUFACTURER_ID[0]:MANUFACTURER_ID[1]]) manufacturer = get_manufacturer_name(manufacturer_id) product_id = struct.unpack(" i / 5: white_x = edid_decode_fraction(ord(edid[i + 2]), edid_get_bits(ord(edid[i + 1]), 2, 3)) result["white_x_" + str(ord(block[i]))] = white_x if not result.get("white_x"): result["white_x"] = white_x white_y = edid_decode_fraction(ord(edid[i + 3]), edid_get_bits(ord(edid[i + 1]), 0, 1)) result["white_y_" + str(ord(block[i]))] = white_y if not result.get("white_y"): result["white_y"] = white_y if block[i + 4] != "\xff": gamma = ord(block[i + 4]) / 100.0 + 1 result["gamma_" + str(ord(block[i]))] = gamma if not result.get("gamma"): result["gamma"] = gamma elif block[BLOCK_TYPE] == BLOCK_TYPE_COLOR_MANAGEMENT_DATA: # TODO: Implement? How could it be used? result["color_management_data"] = block[BLOCK_CONTENTS[0]:BLOCK_CONTENTS[1]] result["ext_flag"] = ord(edid[EXTENSION_FLAG]) result["checksum"] = ord(edid[CHECKSUM]) result["checksum_valid"] = sum(ord(char) for char in edid) % 256 == 0 if len(edid) > 128 and result["ext_flag"] > 0: # Parse extension blocks block = edid[128:] while block: if block[0] == BLOCK_DI_EXT: if block[TRC[0]] != "\0": # TODO: Implement pass block = block[128:] return result class WMIError(Exception): pass dispcalGUI-1.7.1.6/dispcalGUI/embeddedimage.py000644 000765 000000 00000004652 12025152312 020710 0ustar00svpwheel000000 000000 #---------------------------------------------------------------------- # Name: wx.lib.embeddedimage # Purpose: Defines a class used for embedding PNG images in Python # code. The primary method of using this module is via # the code generator in wx.tools.img2py. # # Author: Anthony Tuininga # # Created: 26-Nov-2007 # RCS-ID: $Id: embeddedimage.py 59672 2009-03-20 20:59:42Z RD $ # Copyright: (c) 2007 by Anthony Tuininga # Licence: wxWindows license #---------------------------------------------------------------------- import base64 import cStringIO import wx try: b64decode = base64.b64decode except AttributeError: b64decode = base64.decodestring class PyEmbeddedImage(object): """ PyEmbeddedImage is primarily intended to be used by code generated by img2py as a means of embedding image data in a python module so the image can be used at runtime without needing to access the image from an image file. This makes distributing icons and such that an application uses simpler since tools like py2exe will automatically bundle modules that are imported, and the application doesn't have to worry about how to locate the image files on the user's filesystem. The class can also be used for image data that may be acquired from some other source at runtime, such as over the network or from a database. In this case pass False for isBase64 (unless the data actually is base64 encoded.) Any image type that wx.ImageFromStream can handle should be okay. """ def __init__(self, data, isBase64=True): self.data = data self.isBase64 = isBase64 def GetBitmap(self): return wx.BitmapFromImage(self.GetImage()) def GetData(self): if self.isBase64: data = b64decode(self.data) return data def GetIcon(self): icon = wx.EmptyIcon() icon.CopyFromBitmap(self.GetBitmap()) return icon def GetImage(self): stream = cStringIO.StringIO(self.GetData()) return wx.ImageFromStream(stream) # added for backwards compatibility getBitmap = GetBitmap getData = GetData getIcon = GetIcon getImage = GetImage # define properties, for convenience Bitmap = property(GetBitmap) Icon = property(GetIcon) Image = property(GetImage) dispcalGUI-1.7.1.6/dispcalGUI/encodedstdio.py000644 000765 000000 00000012446 12266411534 020633 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import codecs import locale import os import sys from encoding import get_encoding _codecs = {} _stdio = {} def codec_register_alias(alias, name): """ Register an alias for encoding 'name' """ _codecs[alias] = codecs.CodecInfo(name=alias, encode=codecs.getencoder(name), decode=codecs.getdecoder(name), incrementalencoder=codecs.getincrementalencoder(name), incrementaldecoder=codecs.getincrementaldecoder(name), streamwriter=codecs.getwriter(name), streamreader=codecs.getreader(name)) def conditional_decode(text, encoding='UTF-8', errors='strict'): """ Decode text if not unicode """ if not isinstance(text, unicode): text = text.decode(encoding, errors) return text def conditional_encode(text, encoding='UTF-8', errors='strict'): """ Encode text if unicode """ if isinstance(text, unicode): text = text.encode(encoding, errors) return text def encodestdio(encodings=None, errors=None): """ After this function is called, Unicode strings written to stdout/stderr are automatically encoded and strings read from stdin automatically decoded with the given encodings and error handling. encodings and errors can be a dict with mappings for stdin/stdout/stderr, e.g. encodings={'stdin': 'UTF-8', 'stdout': 'UTF-8', 'stderr': 'UTF-8'} or errors={'stdin': 'strict', 'stdout': 'replace', 'stderr': 'replace'} In the case of errors, stdin uses a default 'strict' error handling and stdout/stderr both use 'replace'. """ if not encodings: encodings = {'stdin': None, 'stdout': None, 'stderr': None} if not errors: errors = {'stdin': 'strict', 'stdout': 'replace', 'stderr': 'replace'} for stream_name in set(encodings.keys() + errors.keys()): stream = getattr(sys, stream_name) encoding = encodings.get(stream_name) if not encoding: encoding = get_encoding(stream) error_handling = errors.get(stream_name, 'strict') if isinstance(stream, EncodedStream): stream.encoding = encoding stream.errors = error_handling else: setattr(sys, stream_name, EncodedStream(stream, encoding, error_handling)) def read(stream, size=-1): """ Read from stream. Uses os.read() if stream is a tty, stream.read() otherwise. """ if stream.isatty(): data = os.read(stream.fileno(), size) else: data = stream.read(size) return data def write(stream, data): """ Write to stream. Uses os.write() if stream is a tty, stream.write() otherwise. """ if stream.isatty(): os.write(stream.fileno(), data) else: stream.write(data) class EncodedStream(object): """ Unicode strings written to an EncodedStream are automatically encoded and strings read from it automtically decoded with the given encoding and error handling. Uses os.read() and os.write() for proper handling of unicode codepages for stdout/stderr under Windows """ def __init__(self, stream, encoding='UTF-8', errors='strict'): self.stream = stream self.encoding = encoding self.errors = errors def __getattr__(self, name): return getattr(self.stream, name) def __iter__(self): return iter(self.readlines()) def __setattr__(self, name, value): if name == 'softspace': setattr(self.stream, name, value) else: object.__setattr__(self, name, value) def next(self): return self.readline() def read(self, size=-1): return conditional_decode(read(self.stream, size), self.encoding, self.errors) def readline(self, size=-1): return conditional_decode(self.stream.readline(size), self.encoding, self.errors) def readlines(self, size=-1): return [conditional_decode(line, self.encoding, self.errors) for line in self.stream.readlines(size)] def xreadlines(self): return self def write(self, text): write(self.stream, conditional_encode(text, self.encoding, self.errors)) def writelines(self, lines): for line in lines: self.write(line) # Store references to original stdin/stdout/stderr for _stream_name in ('stdin', 'stdout', 'stderr'): _stream = getattr(sys, _stream_name) if isinstance(_stream, EncodedStream): _stdio[_stream_name] = _stream.stream else: _stdio[_stream_name] = _stream # Register codec aliases for codepages 65000 and 65001 codec_register_alias('65000', 'utf_7') codec_register_alias('65001', 'utf_8') codec_register_alias('cp65000', 'utf_7') codec_register_alias('cp65001', 'utf_8') codecs.register(lambda alias: _codecs.get(alias)) if __name__ == '__main__': test = u'test \u00e4\u00f6\u00fc\ufffe test' try: print test except (LookupError, IOError, UnicodeError), exception: print 'could not print %r:' % test, exception print 'wrapping stdout/stderr via encodestdio()' encodestdio() print test print 'exiting normally' dispcalGUI-1.7.1.6/dispcalGUI/encoding.py000644 000765 000000 00000002251 12025152312 017733 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from encodings.aliases import aliases import locale import sys if sys.stdout.isatty(): if sys.platform == "win32": try: from win32console import GetConsoleCP, GetConsoleOutputCP except ImportError: pass def get_encoding(stream): """ Return stream encoding. """ enc = None if stream in (sys.stdin, sys.stdout, sys.stderr): if sys.platform == "darwin": # There is no way to determine it reliably under OS X 10.4? return "UTF-8" elif sys.platform == "win32": if sys.version_info >= (2, 6): # Windows/Python 2.6+: If a locale is set, the actual encoding # of stdio changes, but the encoding attribute isn't updated enc = locale.getlocale()[1] if not enc: try: if stream is (sys.stdin): enc = aliases.get(str(GetConsoleCP())) else: enc = aliases.get(str(GetConsoleOutputCP())) except: pass enc = enc or getattr(stream, "encoding", None) or \ locale.getpreferredencoding() or sys.getdefaultencoding() return enc def get_encodings(): """ Return console encoding, filesystem encoding. """ enc = get_encoding(sys.stdout) fs_enc = sys.getfilesystemencoding() or enc return enc, fs_enc dispcalGUI-1.7.1.6/dispcalGUI/floatspin.py000644 000765 000000 00000150577 12025152311 020162 0ustar00svpwheel000000 000000 # --------------------------------------------------------------------------- # # FLOATSPIN Control wxPython IMPLEMENTATION # Python Code By: # # Andrea Gavana, @ 16 Nov 2005 # Latest Revision: 14 Apr 2010, 12.00 GMT # # # TODO List/Caveats # # 1. Ay Idea? # # For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please # Write To Me At: # # andrea.gavana@gmail.com # gavana@kpo.kz # # Or, Obviously, To The wxPython Mailing List!!! # # # End Of Comments # --------------------------------------------------------------------------- # """ FloatSpin implements a floating point `wx.SpinCtrl`. Description =========== FloatSpin implements a floating point `wx.Spinctrl`. It is built using a custom `wx.PyControl`, composed by a `wx.TextCtrl` and a `wx.SpinButton`. In order to correctly handle floating points numbers without rounding errors or non-exact floating point representations, FloatSpin uses the great L{FixedPoint} class from Tim Peters. What you can do: - Set the number of representative digits for your floating point numbers; - Set the floating point format (``%f``, ``%F``, ``%e``, ``%E``, ``%g``, ``%G``); - Set the increment of every ``EVT_FLOATSPIN`` event; - Set minimum, maximum values for FloatSpin as well as its range; - Change font and colour for the underline `wx.TextCtrl`. Events ====== FloatSpin catches 3 different types of events: 1) Spin events: events generated by spinning up/down the spinbutton; 2) Char events: playing with up/down arrows of the keyboard increase/decrease the value of FloatSpin; 3) Mouse wheel event: using the wheel will change the value of FloatSpin. In addition, there are some other functionalities: It remembers the initial value as a default value, call L{SetToDefaultValue}, or press ``Esc`` to return to it ``Shift`` + arrow = 2 * increment (or ``Shift`` + mouse wheel) ``Ctrl`` + arrow = 10 * increment (or ``Ctrl`` + mouse wheel) ``Alt`` + arrow = 100 * increment (or ``Alt`` + mouse wheel) Combinations of ``Shift``, ``Ctrl``, ``Alt`` increment the FloatSpin value by the product of the factors; ``PgUp`` & ``PgDn`` = 10 * increment * the product of the ``Shift``, ``Ctrl``, ``Alt`` factors; ``Space`` sets the control's value to it's last valid state. Window Styles ============= This class supports the following window styles: =============== =========== ================================================== Window Styles Hex Value Description =============== =========== ================================================== ``FS_READONLY`` 0x1 Sets `FloatSpin` as read-only control. ``FS_LEFT`` 0x2 Horizontally align the underlying `wx.TextCtrl` on the left. ``FS_CENTRE`` 0x4 Horizontally align the underlying `wx.TextCtrl` on center. ``FS_RIGHT`` 0x8 Horizontally align the underlying `wx.TextCtrl` on the right. =============== =========== ================================================== Events Processing ================= This class processes the following events: ================= ================================================== Event Name Description ================= ================================================== ``EVT_FLOATSPIN`` Emitted when the user changes the value of `FloatSpin`, either with the mouse or with the keyboard. ================= ================================================== License And Version =================== FloatSpin control is distributed under the wxPython license. Latest revision: Andrea Gavana @ 14 Apr 2010, 12.00 GMT Version 0.9 Backward Incompatibilities ========================== Modifications to allow `min_val` or `max_val` to be ``None`` done by: James Bigler sci institute, university of utah march 14, 2007 :note: Note that the changes I made will break backward compatibility, because I changed the contructor's parameters from `min`/`max` to `min_val`/`max_val` to be consistent with the other functions and to eliminate any potential confusion with the built in `min` and `max` functions. You specify open ranges like this (you can equally do this in the constructor): [1, ] => SetRange(min_val=1, max_val=None) [ ,0] => SetRange(min_val=None, max_val=0) or no range: [ , ] => SetRange(min_val=None, max_val=None) """ #---------------------------------------------------------------------- # Beginning Of FLOATSPIN wxPython Code #---------------------------------------------------------------------- import wx import locale from math import ceil, floor # Set The Styles For The Underline wx.TextCtrl FS_READONLY = 1 """ Sets `FloatSpin` as read-only control. """ FS_LEFT = 2 """ Horizontally align the underlying `wx.TextCtrl` on the left. """ FS_CENTRE = 4 """ Horizontally align the underlying `wx.TextCtrl` on center. """ FS_RIGHT = 8 """ Horizontally align the underlying `wx.TextCtrl` on the right. """ # Define The FloatSpin Event wxEVT_FLOATSPIN = wx.NewEventType() #-----------------------------------# # FloatSpinEvent #-----------------------------------# EVT_FLOATSPIN = wx.PyEventBinder(wxEVT_FLOATSPIN, 1) """ Emitted when the user changes the value of `FloatSpin`, either with the mouse or""" \ """ with the keyboard. """ # ---------------------------------------------------------------------------- # # Class FloatSpinEvent # ---------------------------------------------------------------------------- # class FloatSpinEvent(wx.PyCommandEvent): """ This event will be sent when a ``EVT_FLOATSPIN`` event is mapped in the parent. """ def __init__(self, eventType, eventId=1, nSel=-1, nOldSel=-1): """ Default class constructor. :param `eventType`: the event type; :param `eventId`: the event identifier; :param `nSel`: the current selection; :param `nOldSel`: the old selection. """ wx.PyCommandEvent.__init__(self, eventType, eventId) self._eventType = eventType def SetPosition(self, pos): """ Sets event position. :param `pos`: an integer specyfing the event position. """ self._position = pos def GetPosition(self): """ Returns event position. """ return self._position #---------------------------------------------------------------------------- # FloatTextCtrl #---------------------------------------------------------------------------- class FloatTextCtrl(wx.TextCtrl): """ A class which holds a `wx.TextCtrl`, one of the two building blocks of L{FloatSpin}. """ def __init__(self, parent, id=wx.ID_ANY, value="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.TE_NOHIDESEL | wx.TE_PROCESS_ENTER, validator=wx.DefaultValidator, name=wx.TextCtrlNameStr): """ Default class constructor. Used internally. Do not call directly this class in your code! :param `parent`: the L{FloatTextCtrl} parent; :param `id`: an identifier for the control: a value of -1 is taken to mean a default; :param `value`: default text value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the window style; :param `validator`: the window validator; :param `name`: the window name. """ wx.TextCtrl.__init__(self, parent, id, value, pos, size, style, validator, name) self._parent = parent self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy) self.Bind(wx.EVT_CHAR, self.OnChar) self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus) def OnDestroy(self, event): """ Handles the ``wx.EVT_WINDOW_DESTROY`` event for L{FloatTextCtrl}. :param `event`: a `wx.WindowDestroyEvent` event to be processed. :note: This method tries to correctly handle the control destruction under MSW. """ if self._parent: self._parent._textctrl = None self._parent = None def OnChar(self, event): """ Handles the ``wx.EVT_CHAR`` event for L{FloatTextCtrl}. :param `event`: a `wx.KeyEvent` event to be processed. """ if self._parent: self._parent.OnChar(event) def OnKillFocus(self, event): """ Handles the ``wx.EVT_KILL_FOCUS`` event for L{FloatTextCtrl}. :param `event`: a `wx.FocusEvent` event to be processed. :note: This method synchronizes the `wx.SpinButton` and the `wx.TextCtrl` when focus is lost. """ if self._parent: self._parent.SyncSpinToText(True) event.Skip() #---------------------------------------------------------------------------- # # FloatSpin # This Is The Main Class Implementation # ---------------------------------------------------------------------------- # class FloatSpin(wx.PyControl): """ FloatSpin implements a floating point `wx.Spinctrl`. It is built using a custom `wx.PyControl`, composed by a `wx.TextCtrl` and a `wx.SpinButton`. In order to correctly handle floating points numbers without rounding errors or non-exact floating point representations, FloatSpin uses the great L{FixedPoint} class from Tim Peters. """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(95,-1), style=0, value=0.0, min_val=None, max_val=None, increment=1.0, digits=-1, agwStyle=FS_LEFT, name="FloatSpin"): """ Default class constructor. :param `parent`: the L{FloatSpin} parent; :param `id`: an identifier for the control: a value of -1 is taken to mean a default; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the window style; :param `value`: is the current value for L{FloatSpin}; :param `min_val`: the minimum value, ignored if ``None``; :param `max_val`: the maximum value, ignored if ``None``; :param `increment`: the increment for every L{FloatSpinEvent} event; :param `digits`: number of representative digits for your floating point numbers; :param `agwStyle`: one of the following bits: =============== =========== ================================================== Window Styles Hex Value Description =============== =========== ================================================== ``FS_READONLY`` 0x1 Sets `FloatSpin` as read-only control. ``FS_LEFT`` 0x2 Horizontally align the underlying `wx.TextCtrl` on the left. ``FS_CENTRE`` 0x4 Horizontally align the underlying `wx.TextCtrl` on center. ``FS_RIGHT`` 0x8 Horizontally align the underlying `wx.TextCtrl` on the right. =============== =========== ================================================== :param `name`: the window name. """ wx.PyControl.__init__(self, parent, id, pos, size, style|wx.NO_BORDER| wx.NO_FULL_REPAINT_ON_RESIZE | wx.CLIP_CHILDREN, wx.DefaultValidator, name) # Don't call SetRange here, because it will try to modify # self._value whose value doesn't exist yet. self.SetRangeDontClampValue(min_val, max_val) self._value = self.ClampValue(FixedPoint(str(value), 20)) self._defaultvalue = self._value self._increment = FixedPoint(str(increment), 20) self._spinmodifier = FixedPoint(str(1.0), 20) self._digits = digits self._snapticks = False self._spinbutton = None self._textctrl = None self._spinctrl_bestsize = wx.Size(-999, -999) # start Philip Semanchuk addition # The textbox & spin button are drawn slightly differently # depending on the platform. The difference is most pronounced # under OS X. if "__WXMAC__" in wx.PlatformInfo: self._gap = 8 self._spin_top = 3 self._text_left = 4 self._text_top = 4 elif "__WXMSW__" in wx.PlatformInfo: self._gap = 1 self._spin_top = 0 self._text_left = 0 self._text_top = 0 else: # GTK self._gap = -1 self._spin_top = 0 self._text_left = 0 self._text_top = 0 # end Philip Semanchuk addition self.SetLabel(name) # start Philip Semanchuk change # Set the background color to match that of the parent. wxMac supports # transparency, and that gives the best results on that platform. # Other platforms ignore wx.ALPHA_TRANSPARENT. colour = parent.GetBackgroundColour() colour.Set(colour.Red(), colour.Green(), colour.Blue(), wx.ALPHA_TRANSPARENT) self.SetBackgroundColour(colour) # end Philip Semanchuk change self.SetForegroundColour(parent.GetForegroundColour()) width = size[0] height = size[1] best_size = self.DoGetBestSize() if width == -1: width = best_size.GetWidth() if height == -1: height = best_size.GetHeight() self._validkeycode = [43, 45, 46, 69, 101, 127, 314] self._validkeycode.extend(range(48, 58)) self._validkeycode.extend([wx.WXK_RETURN, wx.WXK_TAB, wx.WXK_BACK, wx.WXK_LEFT, wx.WXK_RIGHT]) self._spinbutton = wx.SpinButton(self, wx.ID_ANY, wx.DefaultPosition, size=(-1, height), style=wx.SP_ARROW_KEYS | wx.SP_VERTICAL | wx.SP_WRAP) txtstyle = wx.TE_NOHIDESEL | wx.TE_PROCESS_ENTER if agwStyle & FS_RIGHT: txtstyle = txtstyle | wx.TE_RIGHT elif agwStyle & FS_CENTRE: txtstyle = txtstyle | wx.TE_CENTER if agwStyle & FS_READONLY: txtstyle = txtstyle | wx.TE_READONLY self._textctrl = FloatTextCtrl(self, wx.ID_ANY, str(self._value), wx.DefaultPosition, (width-self._spinbutton.GetSize().GetWidth(), height), txtstyle) # start Philip Semanchuk addition # Setting the textctrl's size in the ctor also sets its min size. # But the textctrl is entirely controlled by the parent floatspin # control and should accept whatever size its parent dictates, so # here we tell it to forget its min size. self._textctrl.SetMinSize(wx.DefaultSize) # Setting the spin buttons's size in the ctor also sets its min size. # Under OS X that results in a rendering artifact because spin buttons # are a little shorter than textboxes. # Setting the min size to the default allows OS X to draw the spin # button correctly. However, Windows takes the call to SetMinSize() # as a cue to size the spin button considerably taller than the # textbox, so we avoid that call under Windows. # The call to SetMinSize() isn't necessary under GTK, nor does it # do any harm. if "__WXMAC__" in wx.PlatformInfo: self._spinbutton.SetMinSize(wx.DefaultSize) # end Philip Semanchuk addition self._mainsizer = wx.BoxSizer(wx.HORIZONTAL) self._mainsizer.Add(self._textctrl, 0) self._mainsizer.Add(self._spinbutton, 0) self.SetSizer(self._mainsizer) self._mainsizer.Layout() self.SetFormat() self.SetDigits(digits) # set the value here without generating an event decimal = locale.localeconv()["decimal_point"] strs = ("%100." + str(self._digits) + self._textformat[1])%self._value strs = strs.replace(".", decimal) strs = strs.strip() strs = self.ReplaceDoubleZero(strs) self._textctrl.SetValue(strs) if not (agwStyle & FS_READONLY): self.Bind(wx.EVT_SPIN_UP, self.OnSpinUp) self.Bind(wx.EVT_SPIN_DOWN, self.OnSpinDown) self._spinbutton.Bind(wx.EVT_LEFT_DOWN, self.OnSpinMouseDown) self._textctrl.Bind(wx.EVT_TEXT_ENTER, self.OnTextEnter) self.Bind(wx.EVT_SET_FOCUS, self.OnFocus) self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus) self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel) self.Bind(wx.EVT_SIZE, self.OnSize) # start Philip Semanchuk move self.SetBestSize((width, height)) # end Philip Semanchuk move def OnDestroy(self, event): """ Handles the ``wx.EVT_WINDOW_DESTROY`` event for L{FloatSpin}. :param `event`: a `wx.WindowDestroyEvent` event to be processed. :note: This method tries to correctly handle the control destruction under MSW. """ # Null This Since MSW Sends KILL_FOCUS On Deletion if self._textctrl: self._textctrl._parent = None self._textctrl.Destroy() self._textctrl = None self._spinbutton.Destroy() self._spinbutton = None def DoGetBestSize(self): """ Gets the size which best suits the window: for a control, it would be the minimal size which doesn't truncate the control, for a panel - the same size as it would have after a call to `Fit()`. :note: Overridden from `wx.PyControl`. """ if self._spinctrl_bestsize.x == -999: spin = wx.SpinCtrl(self, -1) self._spinctrl_bestsize = spin.GetBestSize() # oops something went wrong, set to reasonable value if self._spinctrl_bestsize.GetWidth() < 20: self._spinctrl_bestsize.SetWidth(95) if self._spinctrl_bestsize.GetHeight() < 10: self._spinctrl_bestsize.SetHeight(22) spin.Destroy() return self._spinctrl_bestsize def DoSendEvent(self): """ Send the event to the parent. """ event = wx.CommandEvent(wx.wxEVT_COMMAND_SPINCTRL_UPDATED, self.GetId()) event.SetEventObject(self) event.SetInt(int(self._value + 0.5)) if self._textctrl: event.SetString(self._textctrl.GetValue()) self.GetEventHandler().ProcessEvent(event) eventOut = FloatSpinEvent(wxEVT_FLOATSPIN, self.GetId()) eventOut.SetPosition(int(self._value + 0.5)) eventOut.SetEventObject(self) self.GetEventHandler().ProcessEvent(eventOut) def OnSpinMouseDown(self, event): """ Handles the ``wx.EVT_LEFT_DOWN`` event for L{FloatSpin}. :param `event`: a `wx.MouseEvent` event to be processed. :note: This method works on the underlying `wx.SpinButton`. """ modifier = FixedPoint(str(1.0), 20) if event.ShiftDown(): modifier = modifier*2.0 if event.ControlDown(): modifier = modifier*10.0 if event.AltDown(): modifier = modifier*100.0 self._spinmodifier = modifier event.Skip() def OnSpinUp(self, event): """ Handles the ``wx.EVT_SPIN_UP`` event for L{FloatSpin}. :param `event`: a `wx.SpinEvent` event to be processed. """ if self._textctrl and self._textctrl.IsModified(): self.SyncSpinToText(False) if self.InRange(self._value + self._increment*self._spinmodifier): self._value = self._value + self._increment*self._spinmodifier self.SetValue(self._value) self.DoSendEvent() def OnSpinDown(self, event): """ Handles the ``wx.EVT_SPIN_DOWN`` event for L{FloatSpin}. :param `event`: a `wx.SpinEvent` event to be processed. """ if self._textctrl and self._textctrl.IsModified(): self.SyncSpinToText(False) if self.InRange(self._value - self._increment*self._spinmodifier): self._value = self._value - self._increment*self._spinmodifier self.SetValue(self._value) self.DoSendEvent() def OnTextEnter(self, event): """ Handles the ``wx.EVT_TEXT_ENTER`` event for L{FloatSpin}. :param `event`: a `wx.KeyEvent` event to be processed. :note: This method works on the underlying `wx.TextCtrl`. """ self.SyncSpinToText(True) event.Skip() def OnChar(self, event): """ Handles the ``wx.EVT_CHAR`` event for L{FloatSpin}. :param `event`: a `wx.KeyEvent` event to be processed. :note: This method works on the underlying `wx.TextCtrl`. """ modifier = FixedPoint(str(1.0), 20) if event.ShiftDown(): modifier = modifier*2.0 if event.ControlDown(): modifier = modifier*10.0 if event.AltDown(): modifier = modifier*100.0 keycode = event.GetKeyCode() if keycode == wx.WXK_UP: if self._textctrl and self._textctrl.IsModified(): self.SyncSpinToText(False) self.SetValue(self._value + self._increment*modifier) self.DoSendEvent() elif keycode == wx.WXK_DOWN: if self._textctrl and self._textctrl.IsModified(): self.SyncSpinToText(False) self.SetValue(self._value - self._increment*modifier) self.DoSendEvent() elif keycode == wx.WXK_PRIOR: if self._textctrl and self._textctrl.IsModified(): self.SyncSpinToText(False) self.SetValue(self._value + 10.0*self._increment*modifier) self.DoSendEvent() elif keycode == wx.WXK_NEXT: if self._textctrl and self._textctrl.IsModified(): self.SyncSpinToText(False) self.SetValue(self._value - 10.0*self._increment*modifier) self.DoSendEvent() elif keycode == wx.WXK_SPACE: self.SetValue(self._value) event.Skip(False) elif keycode == wx.WXK_ESCAPE: self.SetToDefaultValue() self.DoSendEvent() elif keycode == wx.WXK_TAB: new_event = wx.NavigationKeyEvent() new_event.SetEventObject(self.GetParent()) new_event.SetDirection(not event.ShiftDown()) # CTRL-TAB changes the (parent) window, i.e. switch notebook page new_event.SetWindowChange(event.ControlDown()) new_event.SetCurrentFocus(self) self.GetParent().GetEventHandler().ProcessEvent(new_event) else: if keycode not in self._validkeycode: return event.Skip() def OnMouseWheel(self, event): """ Handles the ``wx.EVT_MOUSEWHEEL`` event for L{FloatSpin}. :param `event`: a `wx.MouseEvent` event to be processed. """ modifier = FixedPoint(str(1.0), 20) if event.ShiftDown(): modifier = modifier*2.0 if event.ControlDown(): modifier = modifier*10.0 if event.AltDown(): modifier = modifier*100.0 if self._textctrl and self._textctrl.IsModified(): self.SyncSpinToText(False) if event.GetWheelRotation() > 0: self.SetValue(self._value + self._increment*modifier) self.DoSendEvent() else: self.SetValue(self._value - self._increment*modifier) self.DoSendEvent() def OnSize(self, event): """ Handles the ``wx.EVT_SIZE`` event for L{FloatSpin}. :param `event`: a `wx.SizeEvent` event to be processed. :note: This method resizes the text control and reposition the spin button when resized. """ # start Philip Semanchuk addition event_width = event.GetSize().width self._textctrl.SetPosition((self._text_left, self._text_top)) text_width, text_height = self._textctrl.GetSizeTuple() spin_width, _ = self._spinbutton.GetSizeTuple() text_width = event_width - (spin_width + self._gap + self._text_left) self._textctrl.SetSize(wx.Size(text_width, text_height)) # The spin button is always snug against the right edge of the # control. self._spinbutton.SetPosition((event_width - spin_width, self._spin_top)) event.Skip() # end Philip Semanchuk addition def ReplaceDoubleZero(self, strs): """ Replaces the (somewhat) python ugly '+e000' with +e00. :param `strs`: a string (possibly) containing a '+e00o' substring. """ if self._textformat not in ["%g", "%e", "%E", "%G"]: return strs if strs.find("e+00") >= 0: strs = strs.replace("e+00", "e+0") elif strs.find("e-00") >= 0: strs = strs.replace("e-00", "e-0") elif strs.find("E+00") >= 0: strs = strs.replace("E+00", "E+0") elif strs.find("E-00") >= 0: strs = strs.replace("E-00", "E-0") return strs def SetValue(self, value): """ Sets the L{FloatSpin} value. :param `value`: the new value. """ if not self._textctrl or not self.InRange(value): return if self._snapticks and self._increment != 0.0: finite, snap_value = self.IsFinite(value) if not finite: # FIXME What To Do About A Failure? if (snap_value - floor(snap_value) < ceil(snap_value) - snap_value): value = self._defaultvalue + floor(snap_value)*self._increment else: value = self._defaultvalue + ceil(snap_value)*self._increment decimal = locale.localeconv()["decimal_point"] strs = ("%100." + str(self._digits) + self._textformat[1])%value strs = strs.replace(".", decimal) strs = strs.strip() strs = self.ReplaceDoubleZero(strs) if value != self._value or strs != self._textctrl.GetValue(): self._textctrl.SetValue(strs) self._textctrl.DiscardEdits() self._value = value def GetValue(self): """ Returns the L{FloatSpin} value. """ return float(self._value) def SetRangeDontClampValue(self, min_val, max_val): """ Sets the allowed range. :param `min_val`: the minimum value for L{FloatSpin}. If it is ``None`` it is ignored; :param `max_val`: the maximum value for L{FloatSpin}. If it is ``None`` it is ignored. :note: This method doesn't modify the current value. """ if (min_val != None): self._min = FixedPoint(str(min_val), 20) else: self._min = None if (max_val != None): self._max = FixedPoint(str(max_val), 20) else: self._max = None def SetRange(self, min_val, max_val): """ Sets the allowed range. :param `min_val`: the minimum value for L{FloatSpin}. If it is ``None`` it is ignored; :param `max_val`: the maximum value for L{FloatSpin}. If it is ``None`` it is ignored. :note: This method doesn't modify the current value. :note: You specify open ranges like this (you can equally do this in the constructor):: SetRange(min_val=1, max_val=None) SetRange(min_val=None, max_val=0) or no range:: SetRange(min_val=None, max_val=None) """ self.SetRangeDontClampValue(min_val, max_val) value = self.ClampValue(self._value) if (value != self._value): self.SetValue(value) def ClampValue(self, var): """ Clamps `var` between `_min` and `_max` depending if the range has been specified. :param `var`: the value to be clamped. :return: A clamped copy of `var`. """ if (self._min != None): if (var < self._min): var = self._min return var if (self._max != None): if (var > self._max): var = self._max return var def SetIncrement(self, increment): """ Sets the increment for every ``EVT_FLOATSPIN`` event. :param `increment`: a floating point number specifying the L{FloatSpin} increment. """ if increment < 1./10.0**self._digits: raise Exception("\nERROR: Increment Should Be Greater Or Equal To 1/(10**digits).") self._increment = FixedPoint(str(increment), 20) self.SetValue(self._value) def GetIncrement(self): """ Returns the increment for every ``EVT_FLOATSPIN`` event. """ return self._increment def SetDigits(self, digits=-1): """ Sets the number of digits to show. :param `digits`: the number of digits to show. If `digits` < 0, L{FloatSpin} tries to calculate the best number of digits based on input values passed in the constructor. """ if digits < 0: incr = str(self._increment) if incr.find(".") < 0: digits = 0 else: digits = len(incr[incr.find(".")+1:]) self._digits = digits self.SetValue(self._value) def GetDigits(self): """ Returns the number of digits shown. """ return self._digits def SetFormat(self, fmt="%f"): """ Set the string format to use. :param `fmt`: the new string format to use. One of the following strings: ====== ================================= Format Description ====== ================================= 'e' Floating point exponential format (lowercase) 'E' Floating point exponential format (uppercase) 'f' Floating point decimal format 'F' Floating point decimal format 'g' Floating point format. Uses lowercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise 'G' Floating point format. Uses uppercase exponential format if exponent is less than -4 or not less than precision, decimal format otherwise ====== ================================= """ if fmt not in ["%f", "%g", "%e", "%E", "%F", "%G"]: raise Exception('\nERROR: Bad Float Number Format: ' + repr(fmt) + '. It Should Be ' \ 'One Of "%f", "%g", "%e", "%E", "%F", "%G"') self._textformat = fmt if self._digits < 0: self.SetDigits() self.SetValue(self._value) def GetFormat(self): """ Returns the string format in use. :see: L{SetFormat} for a list of valid string formats. """ return self._textformat def SetDefaultValue(self, defaultvalue): """ Sets the L{FloatSpin} default value. :param `defaultvalue`: a floating point value representing the new default value for L{FloatSpin}. """ if self.InRange(defaultvalue): self._defaultvalue = FixedPoint(str(defaultvalue), 20) def GetDefaultValue(self): """ Returns the L{FloatSpin} default value. """ return self._defaultvalue def IsDefaultValue(self): """ Returns whether the current value is the default value or not. """ return self._value == self._defaultvalue def SetToDefaultValue(self): """ Sets L{FloatSpin} value to its default value. """ self.SetValue(self._defaultvalue) def SetSnapToTicks(self, forceticks=True): """ Force the value to always be divisible by the increment. Initially ``False``. :param `forceticks`: ``True`` to force the snap to ticks option, ``False`` otherwise. :note: This uses the default value as the basis, you will get strange results for very large differences between the current value and default value when the increment is very small. """ if self._snapticks != forceticks: self._snapticks = forceticks self.SetValue(self._value) def GetSnapToTicks(self): """ Returns whether the snap to ticks option is active or not. """ return self._snapticks def OnFocus(self, event): """ Handles the ``wx.EVT_SET_FOCUS`` event for L{FloatSpin}. :param `event`: a `wx.FocusEvent` event to be processed. """ if self._textctrl: self._textctrl.SetFocus() event.Skip() def OnKillFocus(self, event): """ Handles the ``wx.EVT_KILL_FOCUS`` event for L{FloatSpin}. :param `event`: a `wx.FocusEvent` event to be processed. """ self.SyncSpinToText(True) event.Skip() def SyncSpinToText(self, send_event=True, force_valid=True): """ Synchronize the underlying `wx.TextCtrl` with `wx.SpinButton`. :param `send_event`: ``True`` to send a ``EVT_FLOATSPIN`` event, ``False`` otherwise; :param `force_valid`: ``True`` to force a valid value (i.e. inside the provided range), ``False`` otherwise. """ if not self._textctrl: return curr = self._textctrl.GetValue() curr = curr.strip() if curr: try: curro = float(curr) curr = FixedPoint(curr, 20) except: self.SetValue(self._value) return if force_valid or not self.HasRange() or self.InRange(curr): if force_valid and self.HasRange(): curr = self.ClampValue(curr) if self._value != curr: self.SetValue(curr) if send_event: self.DoSendEvent() elif force_valid: # textctrl is out of sync, discard and reset self.SetValue(self.GetValue()) def SetFont(self, font=None): """ Sets the underlying `wx.TextCtrl` font. :param `font`: a valid instance of `wx.Font`. """ if font is None: font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) if not self._textctrl: return False return self._textctrl.SetFont(font) def GetFont(self): """ Returns the underlying `wx.TextCtrl` font. """ if not self._textctrl: return self.GetFont() return self._textctrl.GetFont() def GetMin(self): """ Returns the minimum value for L{FloatSpin}. It can be a number or ``None`` if no minimum is present. """ return self._min def GetMax(self): """ Returns the maximum value for L{FloatSpin}. It can be a number or ``None`` if no minimum is present. """ return self._max def HasRange(self): """ Returns whether L{FloatSpin} range has been set or not. """ return (self._min != None) or (self._max != None) def InRange(self, value): """ Returns whether a value is inside L{FloatSpin} range. :param `value`: the value to test. """ if (not self.HasRange()): return True if (self._min != None): if (value < self._min): return False if (self._max != None): if (value > self._max): return False return True def GetTextCtrl(self): """ Returns the underlying `wx.TextCtrl`. """ return self._textctrl def IsFinite(self, value): """ Tries to determine if a value is finite or infinite/nan. :param `value`: the value to test. """ try: snap_value = (value - self._defaultvalue)/self._increment finite = True except: finite = False snap_value = None return finite, snap_value # Class FixedPoint, version 0.0.4. # Released to the public domain 28-Mar-2001, # by Tim Peters (tim.one@home.com). # Provided as-is; use at your own risk; no warranty; no promises; enjoy! # 28-Mar-01 ver 0.0,4 # Use repr() instead of str() inside __str__, because str(long) changed # since this was first written (used to produce trailing "L", doesn't # now). # # 09-May-99 ver 0,0,3 # Repaired __sub__(FixedPoint, string); was blowing up. # Much more careful conversion of float (now best possible). # Implemented exact % and divmod. # # 14-Oct-98 ver 0,0,2 # Added int, long, frac. Beefed up docs. Removed DECIMAL_POINT # and MINUS_SIGN globals to discourage bloating this class instead # of writing formatting wrapper classes (or subclasses) # # 11-Oct-98 ver 0,0,1 # posted to c.l.py __version__ = 0, 0, 4 # The default value for the number of decimal digits carried after the # decimal point. This only has effect at compile-time. DEFAULT_PRECISION = 2 class FixedPoint(object): """ FixedPoint objects support decimal arithmetic with a fixed number of digits (called the object's precision) after the decimal point. The number of digits before the decimal point is variable & unbounded. The precision is user-settable on a per-object basis when a FixedPoint is constructed, and may vary across FixedPoint objects. The precision may also be changed after construction via `FixedPoint.set_precision(p)`. Note that if the precision of a FixedPoint is reduced via L{FixedPoint.set_precision}, information may be lost to rounding. Example:: >>> x = FixedPoint("5.55") # precision defaults to 2 >>> print x 5.55 >>> x.set_precision(1) # round to one fraction digit >>> print x 5.6 >>> print FixedPoint("5.55", 1) # same thing setting to 1 in constructor 5.6 >>> repr(x) # returns constructor string that reproduces object exactly "FixedPoint('5.6', 1)" >>> When L{FixedPoint} objects of different precision are combined via + - * /, the result is computed to the larger of the inputs' precisions, which also becomes the precision of the resulting L{FixedPoint} object. Example:: >>> print FixedPoint("3.42") + FixedPoint("100.005", 3) 103.425 >>> When a L{FixedPoint} is combined with other numeric types (ints, floats, strings representing a number) via + - * /, then similarly the computation is carried out using -- and the result inherits -- the L{FixedPoint}'s precision. Example:: >>> print FixedPoint(1) / 7 0.14 >>> print FixedPoint(1, 30) / 7 0.142857142857142857142857142857 >>> The string produced by `str(x)` (implictly invoked by `print`) always contains at least one digit before the decimal point, followed by a decimal point, followed by exactly `x.get_precision()` digits. If `x` is negative, `str(x)[0] == "-"`. The L{FixedPoint} constructor can be passed an int, long, string, float, L{FixedPoint}, or any object convertible to a float via `float()` or to a long via `long()`. Passing a precision is optional; if specified, the precision must be a non-negative int. There is no inherent limit on the size of the precision, but if very very large you'll probably run out of memory. Note that conversion of floats to L{FixedPoint} can be surprising, and should be avoided whenever possible. Conversion from string is exact (up to final rounding to the requested precision), so is greatly preferred. Example:: >>> print FixedPoint(1.1e30) 1099999999999999993725589651456.00 >>> print FixedPoint("1.1e30") 1100000000000000000000000000000.00 >>> """ # the exact value is self.n / 10**self.p; # self.n is a long; self.p is an int def __init__(self, value=0, precision=DEFAULT_PRECISION): """ Default class constructor. :param `value`: the initial value; :param `precision`: must be an int >= 0, and defaults to ``DEFAULT_PRECISION``. """ self.n = self.p = 0 self.set_precision(precision) p = self.p if isinstance(value, type("42.3e5")): n, exp = _string2exact(value) # exact value is n*10**exp = n*10**(exp+p)/10**p effective_exp = exp + p if effective_exp > 0: n = n * _tento(effective_exp) elif effective_exp < 0: n = _roundquotient(n, _tento(-effective_exp)) self.n = n return if isinstance(value, type(42)) or isinstance(value, type(42L)): self.n = long(value) * _tento(p) return if isinstance(value, FixedPoint): temp = value.copy() temp.set_precision(p) self.n, self.p = temp.n, temp.p return if isinstance(value, type(42.0)): # XXX ignoring infinities and NaNs and overflows for now import math f, e = math.frexp(abs(value)) assert f == 0 or 0.5 <= f < 1.0 # |value| = f * 2**e exactly # Suck up CHUNK bits at a time; 28 is enough so that we suck # up all bits in 2 iterations for all known binary double- # precision formats, and small enough to fit in an int. CHUNK = 28 top = 0L # invariant: |value| = (top + f) * 2**e exactly while f: f = math.ldexp(f, CHUNK) digit = int(f) assert digit >> CHUNK == 0 top = (top << CHUNK) | digit f = f - digit assert 0.0 <= f < 1.0 e = e - CHUNK # now |value| = top * 2**e exactly # want n such that n / 10**p = top * 2**e, or # n = top * 10**p * 2**e top = top * _tento(p) if e >= 0: n = top << e else: n = _roundquotient(top, 1L << -e) if value < 0: n = -n self.n = n return if isinstance(value, type(42-42j)): raise TypeError("can't convert complex to FixedPoint: " + `value`) # can we coerce to a float? yes = 1 try: asfloat = float(value) except: yes = 0 if yes: self.__init__(asfloat, p) return # similarly for long yes = 1 try: aslong = long(value) except: yes = 0 if yes: self.__init__(aslong, p) return raise TypeError("can't convert to FixedPoint: " + `value`) def get_precision(self): """ Return the precision of this L{FixedPoint}. :note: The precision is the number of decimal digits carried after the decimal point, and is an int >= 0. """ return self.p def set_precision(self, precision=DEFAULT_PRECISION): """ Change the precision carried by this L{FixedPoint} to `precision`. :param `precision`: must be an int >= 0, and defaults to ``DEFAULT_PRECISION``. :note: If `precision` is less than this FixedPoint's current precision, information may be lost to rounding. """ try: p = int(precision) except: raise TypeError("precision not convertable to int: " + `precision`) if p < 0: raise ValueError("precision must be >= 0: " + `precision`) if p > self.p: self.n = self.n * _tento(p - self.p) elif p < self.p: self.n = _roundquotient(self.n, _tento(self.p - p)) self.p = p def __str__(self): n, p = self.n, self.p i, f = divmod(abs(n), _tento(p)) if p: frac = repr(f)[:-1] frac = "0" * (p - len(frac)) + frac else: frac = "" return "-"[:n<0] + \ repr(i)[:-1] + \ "." + frac def __repr__(self): return "FixedPoint" + `(str(self), self.p)` def copy(self): """ Create a copy of the current L{FixedPoint}. """ return _mkFP(self.n, self.p) __copy__ = __deepcopy__ = copy def __cmp__(self, other): if (other == None): return 1 xn, yn, p = _norm(self, other) return cmp(xn, yn) def __hash__(self): # caution! == values must have equal hashes, and a FixedPoint # is essentially a rational in unnormalized form. There's # really no choice here but to normalize it, so hash is # potentially expensive. n, p = self.__reduce() # Obscurity: if the value is an exact integer, p will be 0 now, # so the hash expression reduces to hash(n). So FixedPoints # that happen to be exact integers hash to the same things as # their int or long equivalents. This is Good. But if a # FixedPoint happens to have a value exactly representable as # a float, their hashes may differ. This is a teensy bit Bad. return hash(n) ^ hash(p) def __nonzero__(self): return self.n != 0 def __neg__(self): return _mkFP(-self.n, self.p) def __abs__(self): if self.n >= 0: return self.copy() else: return -self def __add__(self, other): n1, n2, p = _norm(self, other) # n1/10**p + n2/10**p = (n1+n2)/10**p return _mkFP(n1 + n2, p) __radd__ = __add__ def __sub__(self, other): if not isinstance(other, FixedPoint): other = FixedPoint(other, self.p) return self.__add__(-other) def __rsub__(self, other): return (-self) + other def __mul__(self, other): n1, n2, p = _norm(self, other) # n1/10**p * n2/10**p = (n1*n2/10**p)/10**p return _mkFP(_roundquotient(n1 * n2, _tento(p)), p) __rmul__ = __mul__ def __div__(self, other): n1, n2, p = _norm(self, other) if n2 == 0: raise ZeroDivisionError("FixedPoint division") if n2 < 0: n1, n2 = -n1, -n2 # n1/10**p / (n2/10**p) = n1/n2 = (n1*10**p/n2)/10**p return _mkFP(_roundquotient(n1 * _tento(p), n2), p) def __rdiv__(self, other): n1, n2, p = _norm(self, other) return _mkFP(n2, p) / self def __divmod__(self, other): n1, n2, p = _norm(self, other) if n2 == 0: raise ZeroDivisionError("FixedPoint modulo") # floor((n1/10**p)/(n2*10**p)) = floor(n1/n2) q = n1 / n2 # n1/10**p - q * n2/10**p = (n1 - q * n2)/10**p return q, _mkFP(n1 - q * n2, p) def __rdivmod__(self, other): n1, n2, p = _norm(self, other) return divmod(_mkFP(n2, p), self) def __mod__(self, other): return self.__divmod__(other)[1] def __rmod__(self, other): n1, n2, p = _norm(self, other) return _mkFP(n2, p).__mod__(self) # caution! float can lose precision def __float__(self): n, p = self.__reduce() return float(n) / float(_tento(p)) # XXX should this round instead? # XXX note e.g. long(-1.9) == -1L and long(1.9) == 1L in Python # XXX note that __int__ inherits whatever __long__ does, # XXX and .frac() is affected too def __long__(self): answer = abs(self.n) / _tento(self.p) if self.n < 0: answer = -answer return answer def __int__(self): return int(self.__long__()) def frac(self): """ Returns fractional portion as a L{FixedPoint}. :note: In L{FixedPoint}, this equality holds true:: x = x.frac() + long(x) """ return self - long(self) # return n, p s.t. self == n/10**p and n % 10 != 0 def __reduce(self): n, p = self.n, self.p if n == 0: p = 0 while p and n % 10 == 0: p = p - 1 n = n / 10 return n, p # return 10L**n def _tento(n, cache={}): try: return cache[n] except KeyError: answer = cache[n] = 10L ** n return answer # return xn, yn, p s.t. # p = max(x.p, y.p) # x = xn / 10**p # y = yn / 10**p # # x must be FixedPoint to begin with; if y is not FixedPoint, # it inherits its precision from x. # # Note that this is called a lot, so default-arg tricks are helpful. def _norm(x, y, isinstance=isinstance, FixedPoint=FixedPoint, _tento=_tento): assert isinstance(x, FixedPoint) if not isinstance(y, FixedPoint): y = FixedPoint(y, x.p) xn, yn = x.n, y.n xp, yp = x.p, y.p if xp > yp: yn = yn * _tento(xp - yp) p = xp elif xp < yp: xn = xn * _tento(yp - xp) p = yp else: p = xp # same as yp return xn, yn, p def _mkFP(n, p, FixedPoint=FixedPoint): f = FixedPoint() f.n = n f.p = p return f # divide x by y, rounding to int via nearest-even # y must be > 0 # XXX which rounding modes are useful? def _roundquotient(x, y): assert y > 0 n, leftover = divmod(x, y) c = cmp(leftover << 1, y) # c < 0 <-> leftover < y/2, etc if c > 0 or (c == 0 and (n & 1) == 1): n = n + 1 return n # crud for parsing strings import re # There's an optional sign at the start, and an optional exponent # at the end. The exponent has an optional sign and at least one # digit. In between, must have either at least one digit followed # by an optional fraction, or a decimal point followed by at least # one digit. Yuck. _parser = re.compile(r""" \s* (?P[-+])? ( (?P\d+) (\. (?P\d*))? | \. (?P\d+) ) ([eE](?P[-+]? \d+))? \s* $ """, re.VERBOSE).match del re # return n, p s.t. float string value == n * 10**p exactly def _string2exact(s): m = _parser(s) if m is None: raise ValueError("can't parse as number: " + `s`) exp = m.group('exp') if exp is None: exp = 0 else: exp = int(exp) intpart = m.group('int') if intpart is None: intpart = "0" fracpart = m.group('onlyfrac') else: fracpart = m.group('frac') if fracpart is None or fracpart == "": fracpart = "0" assert intpart assert fracpart i, f = long(intpart), long(fracpart) nfrac = len(fracpart) i = i * _tento(nfrac) + f exp = exp - nfrac if m.group('sign') == "-": i = -i return i, exp dispcalGUI-1.7.1.6/dispcalGUI/gtypes.py000644 000765 000000 00000000557 12025152312 017467 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from ctypes import Structure, c_char_p, c_int, c_uint class gchar_p(c_char_p): # represents "[const] gchar*" pass class gint(c_int): pass class guint(c_uint): pass class guint32(c_uint): pass class GQuark(guint32): pass class GError(Structure): _fields_ = [("domain", GQuark), ("code", gint), ("message", gchar_p)] dispcalGUI-1.7.1.6/dispcalGUI/ICCProfile.py000644 000765 000000 00000306214 12266411534 020105 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from hashlib import md5 import binascii import datetime import locale import math import os import re import struct import sys from itertools import izip, imap from time import localtime, mktime, strftime from UserString import UserString if sys.platform == "win32": import _winreg else: import subprocess as sp if sys.platform == "darwin": from platform import mac_ver if sys.platform == "win32": try: import pywintypes import win32api ## import win32gui except ImportError: pass import colord import colormath import edid from colormath import NumberTuple from defaultpaths import iccprofiles, iccprofiles_home from encoding import get_encodings from ordereddict import OrderedDict try: from log import safe_print except ImportError: from safe_print import safe_print from util_decimal import float2dec from util_list import intlist from util_str import hexunescape, safe_unicode if sys.platform not in ("darwin", "win32"): from edid import get_edid from util_x import get_display try: import xrandr except ImportError: xrandr = None elif sys.platform == "win32": import util_win elif sys.platform == "darwin": from util_mac import osascript GAMUT_VOLUME_SRGB = 833675.435316 # rel. col. GAMUT_VOLUME_ADOBERGB = 1209986.014983 # rel. col. debug = "-d" in sys.argv[1:] or "--debug" in sys.argv[1:] fs_enc = get_encodings()[1] cmms = {"argl": "Argyll CMS", "ADBE": "Adobe", "ACMS": "Agfa", "Agfa": "Agfa", "APPL": "Apple", "appl": "Apple", "CCMS": "ColorGear", "UCCM": "ColorGear Lite", "DL&C": "Digital Light & Color", "EFI ": "EFI", "FF ": "Fuji Film", "HCMM": "Harlequin RIP", "LgoS": "LogoSync", "HDM ": "Heidelberg", "Lino": "Linotype", "lino": "Linotype", "lcms": "Little CMS", "KCMS": "Kodak", "MCML": "Konica Minolta", "MSFT": "Microsoft", "SIGN": "Mutoh", "RGMS": "DeviceLink", "SICC": "SampleICC", "32BT": "the imaging factory", "WTG ": "Ware to Go", "zc00": "Zoran"} encodings = { "mac": { 141: "africaans", 36: "albanian", 85: "amharic", 12: "arabic", 51: "armenian", 68: "assamese", 134: "aymara", 49: "azerbaijani-cyrllic", 50: "azerbaijani-arabic", 129: "basque", 67: "bengali", 137: "dzongkha", 142: "breton", 44: "bulgarian", 77: "burmese", 46: "byelorussian", 78: "khmer", 130: "catalan", 92: "chewa", 33: "simpchinese", 19: "tradchinese", 18: "croatian", 38: "czech", 7: "danish", 4: "dutch", 0: "roman", 94: "esperanto", 27: "estonian", 30: "faeroese", 31: "farsi", 13: "finnish", 34: "flemish", 1: "french", 140: "galician", 144: "scottishgaelic", 145: "manxgaelic", 52: "georgian", 2: "german", 14: "greek-monotonic", 148: "greek-polytonic", 133: "guarani", 69: "gujarati", 10: "hebrew", 21: "hindi", 26: "hungarian", 15: "icelandic", 81: "indonesian", 143: "inuktitut", 35: "irishgaelic", 146: "irishgaelic-dotsabove", 3: "italian", 11: "japanese", 138: "javaneserom", 73: "kannada", 61: "kashmiri", 48: "kazakh", 90: "kiryarwanda", 54: "kirghiz", 91: "rundi", 23: "korean", 60: "kurdish", 79: "lao", 131: "latin", 28: "latvian", 24: "lithuanian", 43: "macedonian", 93: "malagasy", 83: "malayroman-latin", 84: "malayroman-arabic", 72: "malayalam", 16: "maltese", 66: "marathi", 53: "moldavian", 57: "mongolian", 58: "mongolian-cyrillic", 64: "nepali", 9: "norwegian", 71: "oriya", 87: "oromo", 59: "pashto", 25: "polish", 8: "portuguese", 70: "punjabi", 132: "quechua", 37: "romanian", 32: "russian", 29: "sami", 65: "sanskrit", 42: "serbian", 62: "sindhi", 76: "sinhalese", 39: "slovak", 40: "slovenian", 88: "somali", 6: "spanish", 139: "sundaneserom", 89: "swahili", 5: "swedish", 82: "tagalog", 55: "tajiki", 74: "tamil", 135: "tatar", 75: "telugu", 22: "thai", 63: "tibetan", 86: "tigrinya", 147: "tongan", 17: "turkish", 56: "turkmen", 136: "uighur", 45: "ukrainian", 20: "urdu", 47: "uzbek", 80: "vietnamese", 128: "welsh", 41: "yiddish" } } colorants = { 0: { "description": "unknown", "channels": () }, 1: { "description": "ITU-R BT.709", "channels": ((0.64, 0.33), (0.3, 0.6), (0.15, 0.06)) }, 2: { "description": "SMPTE RP145-1994", "channels": ((0.63, 0.34), (0.31, 0.595), (0.155, 0.07)) }, 3: { "description": "EBU Tech.3213-E", "channels": ((0.64, 0.33), (0.29, 0.6), (0.15, 0.06)) }, 4: { "description": "P22", "channels": ((0.625, 0.34), (0.28, 0.605), (0.155, 0.07)) } } geometry = { 0: "unknown", 1: "0/45 or 45/0", 2: "0/d or d/0" } illuminants = { 0: "unknown", 1: "D50", 2: "D65", 3: "D93", 4: "F2", 5: "D55", 6: "A", 7: "E", 8: "F8" } observers = { 0: "unknown", 1: "CIE 1931", 2: "CIE 1964" } manufacturers = {"ADBE": "Adobe Systems Incorporated", "APPL": "Apple Computer, Inc.", "agfa": "Agfa Graphics N.V.", "argl": "Argyll CMS", "bICC": "basICColor GmbH", "DL&C": "Digital Light & Color", "EPSO": "Seiko Epson Corporation", "HDM ": "Heidelberger Druckmaschinen AG", "HP ": "Hewlett-Packard", "KODA": "Kodak", "lcms": "Little CMS", "MONS": "Monaco Systems Inc.", "MSFT": "Microsoft Corporation", "qato": "QUATOGRAPHIC Technology GmbH", "XRIT": "X-Rite"} platform = {"APPL": "Apple", "MSFT": "Microsoft", "SGI ": "Silicon Graphics", "SUNW": "Sun Microsystems"} profileclass = {"scnr": "Input device profile", "mntr": "Display device profile", "prtr": "Output device profile", "link": "DeviceLink profile", "spac": "Color space Conversion profile", "abst": "Abstract profile", "nmcl": "Named colour profile"} tags = {"A2B0": "Device to PCS: Intent 0", "A2B1": "Device to PCS: Intent 1", "A2B2": "Device to PCS: Intent 2", "B2A0": "PCS to device: Intent 0", "B2A1": "PCS to device: Intent 1", "B2A2": "PCS to device: Intent 2", "CIED": "Characterization measurement values", # Non-standard "DevD": "Characterization device values", # Non-standard "bkpt": "Media black point", "bTRC": "Blue tone response curve", "bXYZ": "Blue matrix column", "chad": "Chromatic adaptation matrix", "clro": "Colorant order", "cprt": "Copyright", "desc": "Description", "dmnd": "Device manufacturer name", "dmdd": "Device model name", "gamt": "Out of gamut tag", "gTRC": "Green tone response curve", "gXYZ": "Green matrix column", "kTRC": "Gray tone response curve", "lumi": "Luminance", "meas": "Measurement type", "mmod": "Make and model", "rTRC": "Red tone response curve", "rXYZ": "Red matrix column", "targ": "Characterization target", "tech": "Technology", "vcgt": "Video card gamma table", "view": "Viewing conditions", "vued": "Viewing conditions description", "wtpt": "Media white point"} tech = {"fscn": "Film scanner", "dcam": "Digital camera", "rscn": "Reflective scanner", "ijet": "Ink jet printer", "twax": "Thermal wax printer", "epho": "Electrophotographic printer", "esta": "Electrostatic printer", "dsub": "Dye sublimation printer", "rpho": "Photographic paper printer", "fprn": "Film writer", "vidm": "Video monitor", "vidc": "Video camera", "pjtv": "Projection television", "CRT ": "Cathode ray tube display", "PMD ": "Passive matrix display", "AMD ": "Active matrix display", "KPCD": "Photo CD", "imgs": "Photo imagesetter", "grav": "Gravure", "offs": "Offset lithography", "silk": "Silkscreen", "flex": "Flexography"} def Property(func): return property(**func()) def _colord_get_display_profile(display_no=0): try: edid = get_edid(display_no) except (TypeError, ValueError): return None if edid: device_id = colord.device_id_from_edid(edid, quirk=True) if device_id: try: profile_path = colord.get_default_profile(device_id) except colord.CDError: # Try unmodified vendor name device_id = colord.device_id_from_edid(edid, quirk=False) profile_path = colord.get_default_profile(device_id) if profile_path: return ICCProfile(profile_path) return None def _winreg_get_display_profile(monkey, current_user=False): filename = None try: if current_user and sys.getwindowsversion() >= (6, ): # Vista / Windows 7 ONLY # User has to place a check in 'use my settings for this device' # in the color management control panel at least once to cause # this key to be created, otherwise it won't exist subkey = "\\".join(["Software", "Microsoft", "Windows NT", "CurrentVersion", "ICM", "ProfileAssociations", "Display"] + monkey) key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER, subkey) else: subkey = "\\".join(["SYSTEM", "CurrentControlSet", "Control", "Class"] + monkey) key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, subkey) numsubkeys, numvalues, mtime = _winreg.QueryInfoKey(key) for i in range(numvalues): name, value, type_ = _winreg.EnumValue(key, i) if name == "ICMProfile": if type_ == _winreg.REG_BINARY: # Win2k/XP # convert to list of strings value = value.decode('utf-16').split("\0") elif type_ == _winreg.REG_MULTI_SZ: # Vista / Windows 7 # nothing to be done, _winreg returns a list of strings pass if isinstance(value, list): while "" in value: value.remove("") while value: # last existing file in the list is active if os.path.isfile(os.path.join(iccprofiles[0], value[-1])): filename = value[-1] break value = value[:-1] else: if os.path.isfile(os.path.join(iccprofiles[0], value)): filename = value elif name == "UsePerUserProfiles" and not value: filename = None break except WindowsError, exception: if exception.args[0] == 2: # Key does not exist pass else: raise except Exception, exception: raise if not filename and not current_user: # fall back to sRGB filename = os.path.join(iccprofiles[0], "sRGB Color Space Profile.icm") if filename: return ICCProfile(filename) return None def _xrandr_get_display_profile(display_no=0, x_hostname="", x_display=0, x_screen=0): try: property = xrandr.get_output_property(display_no, "_ICC_PROFILE", xrandr.XA_CARDINAL, x_hostname, x_display, x_screen) except ValueError: return None if property: return ICCProfile("".join(chr(i) for i in property)) return None def _x11_get_display_profile(display_no=0, x_hostname="", x_display=0, x_screen=0): try: atom = xrandr.get_atom("_ICC_PROFILE" + ("" if display_no == 0 else "_%s" % display_no), xrandr.XA_CARDINAL, x_hostname, x_display, x_screen) except ValueError: return None if atom: return ICCProfile("".join(chr(i) for i in atom)) return None def get_display_profile(display_no=0, x_hostname="", x_display=0, x_screen=0): """ Return ICC Profile for display n or None """ profile = None if sys.platform == "win32": if not "win32api" in sys.modules: ## or not "win32gui" in sys.modules: raise ImportError("pywin32 not available") # The ordering will work as long as Argyll continues using # EnumDisplayMonitors monitors = util_win.get_real_display_devices_info() moninfo = monitors[display_no] # via GetICMProfile - not dynamic, will not reflect runtime changes ## dc = win32gui.CreateDC("DISPLAY", moninfo["Device"], None) ## filename = win32api.GetICMProfile(dc) ## win32gui.ReleaseDC(None, dc) # via win32api & registry device = util_win.get_active_display_device(moninfo["Device"]) if device: monkey = device.DeviceKey.split("\\")[-2:] # pun totally intended # current user profile = _winreg_get_display_profile(monkey, True) if not profile: # system profile = _winreg_get_display_profile(monkey) elif "--admin" not in sys.argv[1:] or mac_ver()[0] >= "10.6": # We set --admin on Mac OS X when using osascript to run as admin # under a standard account. In this case any attempt to access the # display profile with AppleScript will time out with # ColorSyncScripting, so we skip it if sys.platform == "darwin": if intlist(mac_ver()[0].split(".")) >= [10, 6]: options = ["Image Events"] else: options = ["ColorSyncScripting"] else: options = ["_ICC_PROFILE"] display = get_display() if not x_hostname: x_hostname = display[0] if not x_display: x_display = display[1] if not x_screen: x_screen = display[2] for option in options: if sys.platform == "darwin": # applescript: one-based index applescript = ['tell app "%s"' % option, 'set displayProfile to location of display profile of display %i' % (display_no + 1), 'return POSIX path of displayProfile', 'end tell'] retcode, output, errors = osascript(applescript) if not errors.strip() and output.strip(): profile = ICCProfile(output.strip("\n").decode(fs_enc)) else: # Linux # Try colord if colord.Colord: try: profile = _colord_get_display_profile(display_no) except colord.CDError, exception: safe_print(exception) if profile: return profile # Try XrandR if xrandr and option == "_ICC_PROFILE": if debug: safe_print("Using XrandR") profile = _xrandr_get_display_profile(display_no, x_hostname, x_display, x_screen) if profile: return profile if debug: safe_print("Couldn't get _ICC_PROFILE XrandR output property") safe_print("Using X11") # Try X11 profile = _x11_get_display_profile(display_no, x_hostname, x_display, x_screen) if profile: return profile if debug: safe_print("Couldn't get _ICC_PROFILE X atom") # Read up to 8 MB of any X properties if debug: safe_print("Using xprop") atom = "%s%s" % (option, "" if display_no == 0 else "_%s" % display_no) tgt_proc = sp.Popen(["xprop", "-display", "%s:%s.%s" % (x_hostname, x_display, x_screen), "-len", "8388608", "-root", "-notype", atom], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) stdout, stderr = [data.strip("\n") for data in tgt_proc.communicate()] if stdout: if sys.platform == "darwin": filename = unicode(stdout, "UTF-8") profile = ICCProfile(filename) else: raw = [item.strip() for item in stdout.split("=")] if raw[0] == atom and len(raw) == 2: bin = "".join([chr(int(part)) for part in raw[1].split(", ")]) profile = ICCProfile(bin) elif stderr and tgt_proc.wait() != 0: raise IOError(stderr) if profile: break return profile def hexrepr(bytestring, mapping=None): hexrepr = "0x%s" % binascii.hexlify(bytestring).upper() ascii = safe_unicode(re.sub("[^\x20-\x7e]", "", bytestring)).encode("ASCII", "replace") if ascii == bytestring: hexrepr += " '%s'" % ascii if mapping: value = mapping.get(ascii) if value: hexrepr += " " + value return hexrepr def dateTimeNumber(binaryString): """ Byte Offset Content Encoded as... 0..1 number of the year (actual year, e.g. 1994) uInt16Number 2..3 number of the month (1-12) uInt16Number 4..5 number of the day of the month (1-31) uInt16Number 6..7 number of hours (0-23) uInt16Number 8..9 number of minutes (0-59) uInt16Number 10..11 number of seconds (0-59) uInt16Number """ Y, m, d, H, M, S = [uInt16Number(chunk) for chunk in (binaryString[:2], binaryString[2:4], binaryString[4:6], binaryString[6:8], binaryString[8:10], binaryString[10:12])] return datetime.datetime(*(Y, m, d, H, M, S)) def dateTimeNumber_tohex(dt): data = [uInt16Number_tohex(n) for n in dt.timetuple()[:6]] return "".join(data) def s15Fixed16Number(binaryString): return struct.unpack(">i", binaryString)[0] / 65536.0 def s15Fixed16Number_tohex(num): return struct.pack(">i", num * 65536) def u16Fixed16Number(binaryString): return struct.unpack(">I", binaryString)[0] / 65536.0 def u16Fixed16Number_tohex(num): return struct.pack(">I", int(num * 65536) & 0xFFFFFFFF) def u8Fixed8Number(binaryString): return struct.unpack(">H", binaryString)[0] / 256.0 def u8Fixed8Number_tohex(num): return struct.pack(">H", int(num * 256)) def uInt16Number(binaryString): return struct.unpack(">H", binaryString)[0] def uInt16Number_tohex(num): return struct.pack(">H", num) def uInt32Number(binaryString): return struct.unpack(">I", binaryString)[0] def uInt32Number_tohex(num): return struct.pack(">I", num) def uInt64Number(binaryString): return struct.unpack(">Q", binaryString)[0] def uInt64Number_tohex(num): return struct.pack(">Q", num) def uInt8Number(binaryString): return struct.unpack(">H", "\0" + binaryString)[0] def uInt8Number_tohex(num): return struct.pack(">H", num)[1] def videoCardGamma(tagData, tagSignature): reserved = uInt32Number(tagData[4:8]) tagType = uInt32Number(tagData[8:12]) if tagType == 0: # table return VideoCardGammaTableType(tagData, tagSignature) elif tagType == 1: # formula return VideoCardGammaFormulaType(tagData, tagSignature) class CRInterpolation(object): """ Catmull-Rom interpolation. Curve passes through the points exactly, with neighbouring points influencing curvature. points[] should be at least 3 points long. """ def __init__(self, points): self.points = points def __call__(self, pos): lbound = int(math.floor(pos) - 1) ubound = int(math.ceil(pos) + 1) t = pos % 1.0 if abs((lbound + 1) - pos) < 0.0001: # sitting on a datapoint, so just return that return self.points[lbound + 1] if lbound < 0: p = self.points[:ubound + 1] # extend to the left linearly while len(p) < 4: p.insert(0, p[0] - (p[1] - p[0])) else: p = self.points[lbound:ubound + 1] # extend to the right linearly while len(p) < 4: p.append(p[-1] - (p[-2] - p[-1])) t2 = t * t return 0.5 * ((2 * p[1]) + (-p[0] + p[2]) * t + ((2 * p[0]) - (5 * p[1]) + (4 * p[2]) - p[3]) * t2 + (-p[0] + (3 * p[1]) - (3 * p[2]) + p[3]) * (t2 * t)) class ADict(dict): """ Convenience class for dictionary key access via attributes. Instead of writing aodict[key], you can also write aodict.key """ def __init__(self, *args, **kwargs): dict.__init__(self, *args, **kwargs) def __getattr__(self, name): if name in self: return self[name] else: return self.__getattribute__(name) def __setattr__(self, name, value): self[name] = value class AODict(ADict, OrderedDict): def __init__(self, *args, **kwargs): OrderedDict.__init__(self, *args, **kwargs) def __setattr__(self, name, value): if name == "_keys": object.__setattr__(self, name, value) else: self[name] = value class ICCProfileTag(object): def __init__(self, tagData, tagSignature): self.tagData = tagData self.tagSignature = tagSignature def __setattr__(self, name, value): if not isinstance(self, dict) or name in ("_keys", "tagData", "tagSignature"): object.__setattr__(self, name, value) else: self[name] = value def __repr__(self): """ t.__repr__() <==> repr(t) """ if isinstance(self, OrderedDict): return OrderedDict.__repr__(self) elif isinstance(self, dict): return dict.__repr__(self) elif isinstance(self, UserString): return UserString.__repr__(self) elif isinstance(self, list): return list.__repr__(self) else: if not self: return "%s.%s()" % (self.__class__.__module__, self.__class__.__name__) return "%s.%s(%r)" % (self.__class__.__module__, self.__class__.__name__, self.tagData) class Text(ICCProfileTag, UserString, str): def __init__(self, seq): UserString.__init__(self, seq) def __unicode__(self): return unicode(self.data, fs_enc, errors="replace") class Colorant(object): def __init__(self, binaryString="\0" * 4): self._type = uInt32Number(binaryString) self._channels = [] def __getitem__(self, key): return self.__getattribute__(key) def __iter__(self): return iter(self.keys()) def __repr__(self): items = [] for key, value in (("type", self.type), ("description", self.description)): items.append("%s: %s" % (repr(key), repr(value))) channels = [] for xy in self.channels: channels.append("[%s]" % ", ".join([str(v) for v in xy])) items.append("'channels': [%s]" % ", ".join(channels)) return "{%s}" % ", ".join(items) def __setitem__(self, key, value): object.__setattr__(self, key, value) @Property def channels(): def fget(self): if not self._channels and self._type and self._type in colorants: return [list(xy) for xy in colorants[self._type]["channels"]] return self._channels def fset(self, channels): self._channels = channels return locals() @Property def description(): def fget(self): return colorants.get(self._type, colorants[0])["description"] def fset(self, value): pass return locals() def get(self, key, default=None): return getattr(self, key, default) def items(self): return zip(self.keys(), self.values()) def iteritems(self): return izip(self.keys(), self.itervalues()) iterkeys = __iter__ def itervalues(self): return imap(self.get, self.keys()) def keys(self): return ["type", "description", "channels"] def round(self, digits=4): colorant = self.__class__() colorant.type = self.type for xy in self.channels: colorant._channels.append([round(value, digits) for value in xy]) return colorant @Property def type(): def fget(self): return self._type def fset(self, value): if value and value != self._type and value in colorants: self._channels = [] self._type = value return locals() def update(self, *args, **kwargs): if len(args) > 1: raise TypeError("update expected at most 1 arguments, got %i" % len(args)) for iterable in args + tuple(kwargs.items()): if hasattr(iterable, "iteritems"): self.update(iterable.iteritems()) elif hasattr(iterable, "keys"): for key in iterable.keys(): self[key] = iterable[key] else: for key, val in iterable: self[key] = val def values(self): return map(self.get, self.keys()) class Geometry(ADict): def __init__(self, binaryString): self.type = uInt32Number(binaryString) self.description = geometry[self.type] class Illuminant(ADict): def __init__(self, binaryString): self.type = uInt32Number(binaryString) self.description = illuminants[self.type] class Observer(ADict): def __init__(self, binaryString): self.type = uInt32Number(binaryString) self.description = observers[self.type] class ChromaticityType(ICCProfileTag, Colorant): def __init__(self, tagData=None, tagSignature=None): ICCProfileTag.__init__(self, tagData, tagSignature) if not tagData: Colorant.__init__(self, uInt32Number_tohex(1)) return deviceChannelsCount = uInt16Number(tagData[8:10]) Colorant.__init__(self, uInt32Number_tohex(uInt16Number(tagData[10:12]))) channels = tagData[12:] for count in xrange(deviceChannelsCount): self._channels.append([u16Fixed16Number(channels[:4]), u16Fixed16Number(channels[4:8])]) channels = channels[8:] __repr__ = Colorant.__repr__ @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): tagData = ["chrm", "\0" * 4, uInt16Number_tohex(len(self.channels))] tagData.append(uInt16Number_tohex(self.type)) for channel in self.channels: for xy in channel: tagData.append(u16Fixed16Number_tohex(xy)) return "".join(tagData) def fset(self, tagData): pass return locals() class ColorantTableType(ICCProfileTag, AODict): def __init__(self, tagData=None, tagSignature=None, pcs=None): ICCProfileTag.__init__(self, tagData, tagSignature) AODict.__init__(self) if not tagData: return colorantCount = uInt32Number(tagData[8:12]) data = tagData[12:] for count in xrange(colorantCount): pcsvalues = [uInt16Number(data[32:34]), uInt16Number(data[34:36]), uInt16Number(data[36:38])] for i, pcsvalue in enumerate(pcsvalues): if pcs in ("Lab", "RGB", "CMYK", "YCbr"): keys = ["L", "a", "b"] if i == 0: # L* range 0..100 pcsvalues[i] = pcsvalue / 65535.0 * 100 else: # a, b range -128..127 pcsvalues[i] = -128 + (pcsvalue / 65535.0 * 255) elif pcs == "XYZ": # X, Y, Z range 0..200 keys = ["X", "Y", "Z"] pcsvalues[i] = pcsvalue / 65535.0 * 200 else: safe_print("Warning: Non-standard profile connection " "space '%s'" % pcs) return self[data[:32].rstrip("\0")] = AODict(zip(keys, pcsvalues)) data = data[38:] class CurveType(ICCProfileTag, list): def __init__(self, tagData=None, tagSignature=None): ICCProfileTag.__init__(self, tagData, tagSignature) self._transfer_function = {} if not tagData: return curveEntriesCount = uInt32Number(tagData[8:12]) curveEntries = tagData[12:] if curveEntriesCount == 1: # Gamma self.append(u8Fixed8Number(curveEntries[:2])) elif curveEntriesCount: # Curve for count in xrange(curveEntriesCount): self.append(uInt16Number(curveEntries[:2])) curveEntries = curveEntries[2:] else: # Identity self.append(1.0) def __delitem__(self, y): list.__delitem__(self, y) self._transfer_function = {} def __delslice__(self, i, j): list.__delslice__(self, i, j) self._transfer_function = {} def __iadd__(self, y): list.__iadd__(self, y) self._transfer_function = {} def __imul__(self, y): list.__imul__(self, y) self._transfer_function = {} def __setitem__(self, i, y): list.__setitem__(self, i, y) self._transfer_function = {} def __setslice__(self, i, j, y): list.__setslice__(self, i, j, y) self._transfer_function = {} def append(self, object): list.append(self, object) self._transfer_function = {} def extend(self, iterable): list.extend(self, iterable) self._transfer_function = {} def get_gamma(self, use_vmin_vmax=False, average=True, least_squares=False, slice=(0.01, 0.99)): """ Return average or least squares gamma or a list of gamma values """ if len(self) <= 1: if len(self): values = self else: # Identity values = [1.0] if average or least_squares: return values[0] return [values[0]] else: start = slice[0] * 100 end = slice[1] * 100 values = [] for i, y in enumerate(self): n = colormath.XYZ2Lab(0, y / 65535.0 * 100, 0)[0] if n >= start and n <= end: values.append((i / (len(self) - 1.0) * 65535.0, y)) vmin = 0 vmax = 65535.0 if use_vmin_vmax: if len(self) > 2: vmin = self[0] vmax = self[-1] return colormath.get_gamma(values, 65535.0, vmin, vmax, average, least_squares) def get_transfer_function(self, best=True, slice=(0.05, 0.95)): """ Return transfer function name, exponent and match percentage """ if len(self) == 1: # Gamma return ("Gamma %.2f" % self[0], self[0]), 1.0 if not len(self): # Identity return ("Gamma 1.0", 1.0), 1.0 transfer_function = self._transfer_function.get((best, slice)) if transfer_function: return transfer_function trc = CurveType() match = {} vmin = self[0] vmax = self[-1] gamma = colormath.get_gamma([((len(self) / 2 - 1) / (len(self) - 1.0) * 65535.0, self[len(self) / 2 - 1])], 65535.0, vmin, vmax) for name, exp in (("Rec. 709", -709), ("SMPTE 240M", -240), ("L*", -3.0), ("sRGB", -2.4), ("Gamma %.2f" % gamma, gamma)): trc.set_trc(exp, len(self), vmin, vmax) if self == trc: match[(name, exp)] = 1.0 else: match[(name, exp)] = 0.0 count = 0 start = slice[0] * len(self) end = slice[1] * len(self) for i, n in enumerate(self): ##n = colormath.XYZ2Lab(0, n / 65535.0 * 100, 0)[0] if i >= start and i <= end: n = colormath.get_gamma([(i / (len(self) - 1.0) * 65535.0, n)], 65535.0, vmin, vmax, False) if n: n = n[0] ##n2 = colormath.XYZ2Lab(0, trc[i] / 65535.0 * 100, 0)[0] n2 = colormath.get_gamma([(i / (len(self) - 1.0) * 65535.0, trc[i])], 65535.0, vmin, vmax, False) if n2 and n2[0]: n2 = n2[0] match[(name, exp)] += 1 - (max(n, n2) - min(n, n2)) / n2 count += 1 if count: match[(name, exp)] /= count if not best: self._transfer_function[(best, slice)] = match return match match, (name, exp) = sorted(zip(match.values(), match.keys()))[-1] self._transfer_function[(best, slice)] = (name, exp), match return (name, exp), match def insert(self, object): list.insert(self, object) self._transfer_function = {} def pop(self, index): list.pop(self, index) self._transfer_function = {} def remove(self, value): list.remove(self, value) self._transfer_function = {} def reverse(self): list.reverse(self) self._transfer_function = {} def set_trc(self, power=2.2, size=None, vmin=0, vmax=65535): """ Set the response to a certain function. Positive power, or -2.4 = sRGB, -3.0 = L*, -240 = SMPTE 240M, -601 = Rec. 601, -709 = Rec. 709 (Rec. 601 and 709 transfer functions are identical) """ if not size: size = len(self) or 1024 if size == 1: if power >= 0.0: self[:] = [power] return else: size = 1024 self[:] = [] for i in xrange(0, size): self.append(int(round(vmin + colormath.specialpow(float(i) / (size - 1), power) * (vmax - vmin)))) def sort(self, cmp=None, key=None, reverse=False): list.sort(self, cmp, key, reverse) self._transfer_function = {} @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): if len(self) == 1 and self[0] == 1.0: # Identity curveEntriesCount = 0 else: curveEntriesCount = len(self) tagData = ["curv", "\0" * 4, uInt32Number_tohex(curveEntriesCount)] if curveEntriesCount == 1: # Gamma tagData.append(u8Fixed8Number_tohex(self[0])) elif curveEntriesCount: # Curve for curveEntry in self: tagData.append(uInt16Number_tohex(curveEntry)) return "".join(tagData) def fset(self, tagData): pass return locals() class DateTimeType(ICCProfileTag, datetime.datetime): def __new__(cls, tagData, tagSignature): dt = dateTimeNumber(tagData[8:20]) return datetime.datetime.__new__(cls, dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second) class DictList(list): def __getitem__(self, key): for item in self: if item[0] == key: return item raise KeyError(key) def __setitem__(self, key, value): if not isinstance(value, DictListItem): self.append(DictListItem((key, value))) class DictListItem(list): def __iadd__(self, value): self[-1] += value return self class DictType(ICCProfileTag, AODict): """ ICC dictType Tag Implements all features of 'Dictionary Type and Metadata TAG Definition' (ICC spec revision 2010-02-25), including shared data (the latter will only be effective for mutable types, ie. MultiLocalizedUnicodeType) Examples: tag[key] Returns the (non-localized) value tag.getname(key, locale='en_US') Returns the localized name if present tag.getvalue(key, locale='en_US') Returns the localized value if present tag[key] = value Sets the (non-localized) value """ def __init__(self, tagData=None, tagSignature=None): ICCProfileTag.__init__(self, tagData, tagSignature) AODict.__init__(self) if not tagData: return numrecords = uInt32Number(tagData[8:12]) recordlen = uInt32Number(tagData[12:16]) if recordlen not in (16, 24, 32): safe_print("Error (non-critical): '%s' invalid record length " "(expected 16, 24 or 32, got %s)" % (tagData[:4], recordlen)) return elements = {} for n in range(0, numrecords): record = tagData[16 + n * recordlen:16 + (n + 1) * recordlen] if len(record) < recordlen: safe_print("Error (non-critical): '%s' record %s too short " "(expected %s bytes, got %s bytes)" % (tagData[:4], n, recordlen, len(record))) break for key, offsetpos in (("name", 0), ("value", 8), ("display_name", 16), ("display_value", 24)): if (offsetpos in (0, 8) or recordlen == offsetpos + 8 or recordlen == offsetpos + 16): # Required: # Bytes 0..3, 4..7: Name offset and size # Bytes 8..11, 12..15: Value offset and size # Optional: # Bytes 16..23, 24..23: Display name offset and size # Bytes 24..27, 28..31: Display value offset and size offset = uInt32Number(record[offsetpos:offsetpos + 4]) size = uInt32Number(record[offsetpos + 4:offsetpos + 8]) if offset > 0: if (offset, size) in elements: # Use existing element if same offset and size # This will really only make a difference for # mutable types ie. MultiLocalizedUnicodeType data = elements[(offset, size)] else: data = tagData[offset:offset + size] try: if key.startswith("display_"): data = MultiLocalizedUnicodeType(data, "mluc") else: data = data.decode("UTF-16-BE", "replace").rstrip("\0") except Exception, exception: safe_print("Error (non-critical): could not " "decode '%s', offset %s, length %s" % (tagData[:4], offset, size)) # Remember element by offset and size elements[(offset, size)] = data if key == "name": name = data self[name] = "" else: self.get(name)[key] = data def __getitem__(self, name): return self.get(name).value def __setitem__(self, name, value): AODict.__setitem__(self, name, ADict(value=value)) @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): numrecords = len(self) recordlen = 16 keys = ("name", "value") for value in self.itervalues(): if "display_value" in value: recordlen = 32 break elif "display_name" in value: recordlen = 24 if recordlen > 16: keys += ("display_name", ) if recordlen > 24: keys += ("display_value", ) tagData = ["dict", "\0" * 4, uInt32Number_tohex(numrecords), uInt32Number_tohex(recordlen)] storage_offset = 16 + numrecords * recordlen storage = [] elements = [] offsets = [] for item in self.iteritems(): for key in keys: if key == "name": element = item[0] else: element = item[1].get(key) if element is None: offset = 0 size = 0 else: if element in elements: # Use existing offset and size if same element offset, size = offsets[elements.index(element)] else: offset = storage_offset + len("".join(storage)) if isinstance(element, MultiLocalizedUnicodeType): data = element.tagData else: data = unicode(element).encode("UTF-16-BE") size = len(data) if isinstance(element, MultiLocalizedUnicodeType): # Remember element, offset and size elements.append(element) offsets.append((offset, size)) # Pad all data with binary zeros so it lies on # 4-byte boundaries padding = int(math.ceil(size / 4.0)) * 4 - size data += "\0" * padding storage.append(data) tagData.append(uInt32Number_tohex(offset)) tagData.append(uInt32Number_tohex(size)) tagData.extend(storage) return "".join(tagData) def fset(self, tagData): pass return locals() def getname(self, name, default=None, locale="en_US"): """ Convenience function to get (localized) names """ item = self.get(name, default) if item is default: return default if locale and "display_name" in item: return item.display_name.get_localized_string(*locale.split("_")) else: return name def getvalue(self, name, default=None, locale="en_US"): """ Convenience function to get (localized) values """ item = self.get(name, default) if item is default: return default if locale and "display_value" in item: return item.display_value.get_localized_string(*locale.split("_")) else: return item.value def setitem(self, name, value, display_name=None, display_value=None): """ Convenience function to set items display_name and display_value (if given) should be dict types with country -> language -> string mappings, e.g.: {"en": {"US": u"localized string"}, "de": {"DE": u"localized string", "CH": u"localized string"}} """ self[name] = value item = self.get(name) if display_name: item.display_name = MultiLocalizedUnicodeType() item.display_name.update(display_name) if display_value: item.display_value = MultiLocalizedUnicodeType() item.display_value.update(display_value) def to_json(self, encoding="UTF-8", errors="replace", locale="en_US"): """ Return a JSON representation Display names/values are used if present. """ json = [] for name in self: value = self.getvalue(name, None, locale) name = self.getname(name, None, locale) #try: #value = str(int(value)) #except ValueError: #try: #value = str(float(value)) #except ValueError: value = '"%s"' % repr(unicode(value))[2:-1].replace('"', '\\"') json.append('"%s": %s' % tuple([re.sub(r"\\x([0-9a-f]{2})", "\\u00\\1", item) for item in [repr(unicode(name))[2:-1], value]])) return "{%s}" % ",\n".join(json) class MakeAndModelType(ICCProfileTag, ADict): def __init__(self, tagData, tagSignature): ICCProfileTag.__init__(self, tagData, tagSignature) self.update({"manufacturer": tagData[10:12], "model": tagData[14:16]}) class MeasurementType(ICCProfileTag, ADict): def __init__(self, tagData, tagSignature): ICCProfileTag.__init__(self, tagData, tagSignature) self.update({ "observer": Observer(tagData[8:12]), "backing": XYZNumber(tagData[12:24]), "geometry": Geometry(tagData[24:28]), "flare": u16Fixed16Number(tagData[28:32]), "illuminantType": Illuminant(tagData[32:36]) }) class MultiLocalizedUnicodeType(ICCProfileTag, AODict): # ICC v4 def __init__(self, tagData=None, tagSignature=None): ICCProfileTag.__init__(self, tagData, tagSignature) AODict.__init__(self) if not tagData: return recordsCount = uInt32Number(tagData[8:12]) recordSize = uInt32Number(tagData[12:16]) # 12 records = tagData[16:16 + recordSize * recordsCount] for count in xrange(recordsCount): record = records[:recordSize] recordLanguageCode = record[:2] recordCountryCode = record[2:4] recordLength = uInt32Number(record[4:8]) recordOffset = uInt32Number(record[8:12]) self.add_localized_string(recordLanguageCode, recordCountryCode, unicode(tagData[recordOffset:recordOffset + recordLength], "utf-16-be", "replace")) records = records[recordSize:] def __str__(self): return unicode(self).encode(sys.getdefaultencoding()) def __unicode__(self): """ Return tag as string. """ # TODO: Needs some work re locales # (currently if en-UK or en-US is not found, simply the first entry # is returned) if "en" in self: for countryCode in ("UK", "US"): if countryCode in self["en"]: return self["en"][countryCode] elif len(self): return self.values()[0].values()[0] else: return u"" def add_localized_string(self, languagecode, countrycode, localized_string): """ Convenience function for adding localized strings """ if languagecode not in self: self[languagecode] = AODict() self[languagecode][countrycode] = localized_string def get_localized_string(self, languagecode="en", countrycode="US"): """ Convenience function for retrieving localized strings Falls back to first locale available if the requested one isn't """ try: return self[languagecode][countrycode] except KeyError: return unicode(self) @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): tagData = ["mluc", "\0" * 4] recordsCount = 0 for languageCode in self: for countryCode in self[languageCode]: recordsCount += 1 tagData.append(uInt32Number_tohex(recordsCount)) recordSize = 12 tagData.append(uInt32Number_tohex(recordSize)) storage_offset = 16 + recordSize * recordsCount storage = [] offsets = [] for languageCode in self: for countryCode in self[languageCode]: tagData.append(languageCode + countryCode) data = self[languageCode][countryCode].encode("UTF-16-BE") if data in storage: offset, recordLength = offsets[storage.index(data)] else: recordLength = len(data) offset = len("".join(storage)) offsets.append((offset, recordLength)) storage.append(data) tagData.append(uInt32Number_tohex(recordLength)) tagData.append(uInt32Number_tohex(storage_offset + offset)) tagData.append("".join(storage)) return "".join(tagData) def fset(self, tagData): pass return locals() class s15Fixed16ArrayType(ICCProfileTag, list): def __init__(self, tagData=None, tagSignature=None): ICCProfileTag.__init__(self, tagData, tagSignature) if tagData: data = tagData[8:] while data: self.append(s15Fixed16Number(data[0:4])) data = data[4:] @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): tagData = ["sf32", "\0" * 4] for value in self: tagData.append(s15Fixed16Number_tohex(value)) return "".join(tagData) def fset(self, tagData): pass return locals() def SignatureType(tagData, tagSignature): tag = Text(tagData[8:12].rstrip("\0")) tag.tagData = tagData tag.tagSignature = tagSignature return tag class TextDescriptionType(ICCProfileTag, ADict): # ICC v2 def __init__(self, tagData=None, tagSignature=None): ICCProfileTag.__init__(self, tagData, tagSignature) self.ASCII = "" if not tagData: return ASCIIDescriptionLength = uInt32Number(tagData[8:12]) if ASCIIDescriptionLength: ASCIIDescription = tagData[12:12 + ASCIIDescriptionLength].strip("\0\n\r ") if ASCIIDescription: self.ASCII = ASCIIDescription unicodeOffset = 12 + ASCIIDescriptionLength self.unicodeLanguageCode = uInt32Number( tagData[unicodeOffset:unicodeOffset + 4]) unicodeDescriptionLength = uInt32Number(tagData[unicodeOffset + 4:unicodeOffset + 8]) if unicodeDescriptionLength: if unicodeOffset + 8 + unicodeDescriptionLength * 2 > len(tagData): # Damn you MS. The Unicode character count should be the number of # double-byte characters (including trailing unicode NUL), not the # number of bytes as in the profiles created by Vista and later safe_print("Warning (non-critical): '%s' Unicode part end points " "past the tag data, assuming number of bytes instead " "of number of characters for length" % tagData[:4]) unicodeDescriptionLength /= 2 if tagData[unicodeOffset + 8 + unicodeDescriptionLength:unicodeOffset + 8 + unicodeDescriptionLength + 2] == "\0\0": safe_print("Warning (non-critical): '%s' Unicode part " "seems to be a single-byte string (double-byte " "string expected)" % tagData[:4]) charBytes = 1 # fix for fubar'd desc else: charBytes = 2 unicodeDescription = tagData[unicodeOffset + 8:unicodeOffset + 8 + (unicodeDescriptionLength) * charBytes] try: if charBytes == 1: unicodeDescription = unicode(unicodeDescription, errors="replace") else: if unicodeDescription[:2] == "\xfe\xff": # UTF-16 Big Endian if debug: safe_print("UTF-16 Big endian") unicodeDescription = unicodeDescription[2:] if len(unicodeDescription.split(" ")) == \ unicodeDescriptionLength - 1: safe_print("Warning (non-critical): '%s' " "Unicode part starts with UTF-16 big " "endian BOM, but actual contents seem " "to be UTF-16 little endian" % tagData[:4]) # fix fubar'd desc unicodeDescription = unicode( "\0".join(unicodeDescription.split(" ")), "utf-16-le", errors="replace") else: unicodeDescription = unicode(unicodeDescription, "utf-16-be", errors="replace") elif unicodeDescription[:2] == "\xff\xfe": # UTF-16 Little Endian if debug: safe_print("UTF-16 Little endian") unicodeDescription = unicodeDescription[2:] if unicodeDescription[0] == "\0": safe_print("Warning (non-critical): '%s' " "Unicode part starts with UTF-16 " "little endian BOM, but actual " "contents seem to be UTF-16 big " "endian" % tagData[:4]) # fix fubar'd desc unicodeDescription = unicode(unicodeDescription, "utf-16-be", errors="replace") else: unicodeDescription = unicode(unicodeDescription, "utf-16-le", errors="replace") else: if debug: safe_print("ASSUMED UTF-16 Big Endian") unicodeDescription = unicode(unicodeDescription, "utf-16-be", errors="replace") unicodeDescription = unicodeDescription.strip("\0\n\r ") if unicodeDescription: if unicodeDescription.find("\0") < 0: self.Unicode = unicodeDescription else: safe_print("Error (non-critical): could not decode " "'%s' Unicode part - null byte(s) " "encountered" % tagData[:4]) except UnicodeDecodeError: safe_print("UnicodeDecodeError (non-critical): could not " "decode '%s' Unicode part" % tagData[:4]) else: charBytes = 1 macOffset = unicodeOffset + 8 + unicodeDescriptionLength * charBytes macOffsetBackup = macOffset if tagData[macOffset:macOffset + 5] == "\0\0\0\0\0": macOffset += 5 # fix for fubar'd desc self.macScriptCode = 0 if len(tagData) > macOffset + 2: self.macScriptCode = uInt16Number(tagData[macOffset:macOffset + 2]) macDescriptionLength = ord(tagData[macOffset + 2]) if macDescriptionLength: if macOffsetBackup < macOffset: safe_print("Warning (non-critical): '%s' Macintosh " "part offset points to null bytes" % tagData[:4]) try: macDescription = unicode(tagData[macOffset + 3:macOffset + 3 + macDescriptionLength], "mac-" + encodings["mac"][self.macScriptCode], errors="replace").strip("\0\n\r ") if macDescription: self.Macintosh = macDescription except UnicodeDecodeError: safe_print("UnicodeDecodeError (non-critical): could not " "decode '%s' Macintosh part" % tagData[:4]) @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): tagData = ["desc", "\0" * 4, uInt32Number_tohex(len(self.ASCII) + 1), # count of ASCII chars + 1 safe_unicode(self.ASCII).encode("ASCII", "replace") + "\0", # ASCII desc, \0 terminated uInt32Number_tohex(self.get("unicodeLanguageCode", 0))] if "Unicode" in self: tagData.extend([uInt32Number_tohex(len(self.Unicode) + 2), # count of Unicode chars + 2 (UTF-16-BE BOM + trailing UTF-16 NUL, 1 char = 2 byte) "\xfe\xff" + self.Unicode.encode("utf-16-be", "replace") + "\0\0"]) # Unicode desc, \0\0 terminated else: tagData.append(uInt32Number_tohex(0)) # Unicode desc length = 0 tagData.append(uInt16Number_tohex(self.get("macScriptCode", 0))) if "Macintosh" in self: macDescription = self.Macintosh[:66] tagData.extend([uInt8Number_tohex(len(macDescription) + 1), # count of Macintosh chars + 1 macDescription.encode("mac-" + encodings["mac"][self.get("macScriptCode", 0)], "replace") + ("\0" * (67 - len(macDescription)))]) else: tagData.extend(["\0", # Mac desc length = 0 "\0" * 67]) return "".join(tagData) def fset(self, tagData): pass return locals() def __str__(self): return unicode(self).encode(sys.getdefaultencoding()) def __unicode__(self): if not "Unicode" in self and len(safe_unicode(self.ASCII)) < 67: # Do not use Macintosh description if ASCII length >= 67 localizedTypes = ("Macintosh", "ASCII") else: localizedTypes = ("Unicode", "ASCII") for localizedType in localizedTypes: if localizedType in self: value = self[localizedType] if not isinstance(value, unicode): # Even ASCII description may contain non-ASCII chars, so # assume system encoding and convert to unicode, replacing # unknown chars value = safe_unicode(value) return value def TextType(tagData, tagSignature): tag = Text(tagData[8:].rstrip("\0")) tag.tagData = tagData tag.tagSignature = tagSignature return tag class VideoCardGammaType(ICCProfileTag, ADict): # Private tag # http://developer.apple.com/documentation/GraphicsImaging/Reference/ColorSync_Manager/Reference/reference.html#//apple_ref/doc/uid/TP30000259-CH3g-C001473 def __init__(self, tagData, tagSignature): ICCProfileTag.__init__(self, tagData, tagSignature) def is_linear(self, r=True, g=True, b=True): r_points, g_points, b_points, linear_points = self.get_values() if ((r and g and b and r_points == g_points == b_points) or (r and g and r_points == g_points) or not (g or b)): points = r_points elif ((r and b and r_points == b_points) or (g and b and g_points == b_points) or not (r or g)): points = b_points elif g: points = g_points return points == linear_points def get_unique_values(self, r=True, g=True, b=True): r_points, g_points, b_points, linear_points = self.get_values() r_unique = set(round(y) for x, y in r_points) g_unique = set(round(y) for x, y in g_points) b_unique = set(round(y) for x, y in b_points) return r_unique, g_unique, b_unique def get_values(self, r=True, g=True, b=True): r_points = [] g_points = [] b_points = [] linear_points = [] vcgt = self if "data" in vcgt: # table data = list(vcgt['data']) while len(data) < 3: data.append(data[0]) irange = range(0, vcgt['entryCount']) for i in irange: j = i * (255.0 / (vcgt['entryCount'] - 1)) linear_points += [[j, j]] if r: n = float(data[0][i]) / (math.pow(256, vcgt['entrySize']) - 1) * 255 r_points += [[j, n]] if g: n = float(data[1][i]) / (math.pow(256, vcgt['entrySize']) - 1) * 255 g_points += [[j, n]] if b: n = float(data[2][i]) / (math.pow(256, vcgt['entrySize']) - 1) * 255 b_points += [[j, n]] else: # formula irange = range(0, 256) step = 100.0 / 255.0 for i in irange: # float2dec(v) fixes miniscule deviations in the calculated gamma linear_points += [[i, (i)]] if r: vmin = float2dec(vcgt["redMin"] * 255) v = float2dec(math.pow(step * i / 100.0, vcgt["redGamma"])) vmax = float2dec(vcgt["redMax"] * 255) r_points += [[i, float2dec(vmin + v * (vmax - vmin), 8)]] if g: vmin = float2dec(vcgt["greenMin"] * 255) v = float2dec(math.pow(step * i / 100.0, vcgt["greenGamma"])) vmax = float2dec(vcgt["greenMax"] * 255) g_points += [[i, float2dec(vmin + v * (vmax - vmin), 8)]] if b: vmin = float2dec(vcgt["blueMin"] * 255) v = float2dec(math.pow(step * i / 100.0, vcgt["blueGamma"])) vmax = float2dec(vcgt["blueMax"] * 255) b_points += [[i, float2dec(vmin + v * (vmax - vmin), 8)]] return r_points, g_points, b_points, linear_points def printNormalizedValues(self, amount=None, digits=12): """ Normalizes and prints all values in the vcgt (range of 0.0...1.0). For a 256-entry table with linear values from 0 to 65535: # REF C1 C2 C3 001 0.000000000000 0.000000000000 0.000000000000 0.000000000000 002 0.003921568627 0.003921568627 0.003921568627 0.003921568627 003 0.007843137255 0.007843137255 0.007843137255 0.007843137255 ... You can also specify the amount of values to print (where a value lesser than the entry count will leave out intermediate values) and the number of digits. """ if amount is None: if hasattr(self, 'entryCount'): amount = self.entryCount else: amount = 256 # common value values = self.getNormalizedValues(amount) entryCount = len(values) channels = len(values[0]) header = ['REF'] for k in xrange(channels): header.append('C' + str(k + 1)) header = [title.ljust(digits + 2) for title in header] safe_print("#".ljust(len(str(amount)) + 1) + " ".join(header)) for i, value in enumerate(values): formatted_values = [str(round(channel, digits)).ljust(digits + 2, '0') for channel in value] safe_print(str(i + 1).rjust(len(str(amount)), '0'), str(round(i / float(entryCount - 1), digits)).ljust(digits + 2, '0'), " ".join(formatted_values)) class VideoCardGammaFormulaType(VideoCardGammaType): def __init__(self, tagData, tagSignature): VideoCardGammaType.__init__(self, tagData, tagSignature) data = tagData[12:] self.update({ "redGamma": u16Fixed16Number(data[0:4]), "redMin": u16Fixed16Number(data[4:8]), "redMax": u16Fixed16Number(data[8:12]), "greenGamma": u16Fixed16Number(data[12:16]), "greenMin": u16Fixed16Number(data[16:20]), "greenMax": u16Fixed16Number(data[20:24]), "blueGamma": u16Fixed16Number(data[24:28]), "blueMin": u16Fixed16Number(data[28:32]), "blueMax": u16Fixed16Number(data[32:36]) }) def getNormalizedValues(self, amount=None): if amount is None: amount = 256 # common value step = 1.0 / float(amount - 1) rgb = AODict([("red", []), ("green", []), ("blue", [])]) for i in xrange(0, amount): for key in rgb: rgb[key] += [float(self[key + "Min"]) + math.pow(step * i / 1.0, float(self[key + "Gamma"])) * float(self[key + "Max"] - self[key + "Min"])] return zip(*rgb.values()) def getTableType(self, entryCount=256, entrySize=2): """ Return gamma as table type. """ maxValue = math.pow(256, entrySize) - 1 tagData = [self.tagData[:8], uInt32Number_tohex(0), # type 0 = table uInt16Number_tohex(3), # channels uInt16Number_tohex(entryCount), uInt16Number_tohex(entrySize)] int2hex = { 1: uInt8Number_tohex, 2: uInt16Number_tohex, 4: uInt32Number_tohex, 8: uInt64Number_tohex } for key in ("red", "green", "blue"): for i in xrange(0, entryCount): vmin = float(self[key + "Min"]) vmax = float(self[key + "Max"]) gamma = float(self[key + "Gamma"]) v = (vmin + math.pow(1.0 / (entryCount - 1) * i, gamma) * float(vmax - vmin)) tagData.append(int2hex[entrySize](round(v * maxValue))) return VideoCardGammaTableType("".join(tagData), self.tagSignature) class VideoCardGammaTableType(VideoCardGammaType): def __init__(self, tagData, tagSignature): VideoCardGammaType.__init__(self, tagData, tagSignature) if not tagData: self.update({"channels": 0, "entryCount": 0, "entrySize": 0, "data": []}) return data = tagData[12:] channels = uInt16Number(data[0:2]) entryCount = uInt16Number(data[2:4]) entrySize = uInt16Number(data[4:6]) self.update({ "channels": channels, "entryCount": entryCount, "entrySize": entrySize, "data": [] }) hex2int = { 1: uInt8Number, 2: uInt16Number, 4: uInt32Number, 8: uInt64Number } i = 0 while i < channels: self.data.append([]) j = 0 while j < entryCount: index = 6 + i * entryCount * entrySize + j * entrySize self.data[i].append(hex2int[entrySize](data[index:index + entrySize])) j = j + 1 i = i + 1 def getNormalizedValues(self, amount=None): if amount is None: amount = self.entryCount values = zip(*[[entry / 65535.0 for entry in channel] for channel in self.data]) if amount <= self.entryCount: step = self.entryCount / float(amount - 1) all = values values = [] for i, value in enumerate(all): if i == 0 or (i + 1) % step < 1 or i + 1 == self.entryCount: values += [value] return values def getFormulaType(self): """ Return formula representing gamma value at 50% input. """ maxValue = math.pow(256, self.entrySize) - 1 tagData = [self.tagData[:8], uInt32Number_tohex(1)] # type 1 = formula data = list(self.data) while len(data) < 3: data.append(data[0]) for channel in data: l = (len(channel) - 1) / 2.0 floor = float(channel[int(math.floor(l))]) ceil = float(channel[int(math.ceil(l))]) vmin = channel[0] / maxValue vmax = channel[-1] / maxValue v = (vmin + ((floor + ceil) / 2.0) * (vmax - vmin)) / maxValue gamma = (math.log(v) / math.log(.5)) print vmin, gamma, vmax tagData.append(u16Fixed16Number_tohex(gamma)) tagData.append(u16Fixed16Number_tohex(vmin)) tagData.append(u16Fixed16Number_tohex(vmax)) return VideoCardGammaFormulaType("".join(tagData), self.tagSignature) def resize(self, length=128): data = [[], [], []] for i, channel in enumerate(self.data): for j in xrange(0, length): j *= (len(channel) - 1) / float(length - 1) if int(j) != j: floor = channel[int(math.floor(j))] ceil = channel[min(int(math.ceil(j)), len(channel) - 1)] interpolated = xrange(floor, ceil + 1) fraction = j - int(j) index = int(round(fraction * (ceil - floor))) v = interpolated[index] else: v = channel[int(j)] data[i].append(v) self.data = data self.entryCount = len(data[0]) def resized(self, length=128): resized = self.__class__(self.tagData, self.tagSignature) resized.resize(length) return resized def smooth_cr(self, length=64): """ Smooth video LUT curves (Catmull-Rom). """ resized = self.resized(length) for i in xrange(0, len(self.data)): step = float(length - 1) / (len(self.data[i]) - 1) interpolation = CRInterpolation(resized.data[i]) for j in xrange(0, len(self.data[i])): self.data[i][j] = int(round(interpolation(j * step))) def smooth_avg(self, passes=1, window=None): """ Smooth video LUT curves (moving average). passses Number of passes window Tuple or list containing weighting factors. Its length determines the size of the window to use. Defaults to (1.0, 1.0, 1.0) """ if not window or len(window) < 3 or len(window) % 2 != 1: window = (1.0, 1.0, 1.0) for x in xrange(0, passes): data = [[], [], []] for i, channel in enumerate(self.data): for j, v in enumerate(channel): tmpwindow = window while j > 0 and j < len(channel) - 1 and len(tmpwindow) >= 3: tl = (len(tmpwindow) - 1) / 2 # print j, tl, tmpwindow if tl > 0 and j - tl >= 0 and j + tl <= len(channel) - 1: windowslice = channel[j - tl:j + tl + 1] windowsize = 0 for k, weight in enumerate(tmpwindow): windowsize += float(weight) * windowslice[k] v = int(round(windowsize / sum(tmpwindow))) break else: tmpwindow = tmpwindow[1:-1] data[i].append(v) self.data = data self.entryCount = len(data[0]) @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): tagData = ["vcgt", "\0" * 4, uInt32Number_tohex(0), # type 0 = table uInt16Number_tohex(len(self.data)), # channels uInt16Number_tohex(self.entryCount), uInt16Number_tohex(self.entrySize)] int2hex = { 1: uInt8Number_tohex, 2: uInt16Number_tohex, 4: uInt32Number_tohex, 8: uInt64Number_tohex } for channel in self.data: for i in xrange(0, self.entryCount): tagData.append(int2hex[self.entrySize](channel[i])) return "".join(tagData) def fset(self, tagData): pass return locals() class ViewingConditionsType(ICCProfileTag, ADict): def __init__(self, tagData, tagSignature): ICCProfileTag.__init__(self, tagData, tagSignature) self.update({ "illuminant": XYZNumber(tagData[8:20]), "surround": XYZNumber(tagData[20:32]), "illuminantType": Illuminant(tagData[32:36]) }) class XYZNumber(AODict): """ Byte Offset Content Encoded as... 0..3 CIE X s15Fixed16Number 4..7 CIE Y s15Fixed16Number 8..11 CIE Z s15Fixed16Number """ def __init__(self, binaryString="\0" * 12): AODict.__init__(self) self.X, self.Y, self.Z = [s15Fixed16Number(chunk) for chunk in (binaryString[:4], binaryString[4:8], binaryString[8:12])] def __repr__(self): XYZ = [] for key, value in self.iteritems(): XYZ.append("(%s, %s)" % (repr(key), str(value))) return "%s.%s([%s])" % (self.__class__.__module__, self.__class__.__name__, ", ".join(XYZ)) def adapt(self, whitepoint_source=None, whitepoint_destination=None, cat="Bradford"): XYZ = self.__class__() XYZ.X, XYZ.Y, XYZ.Z = colormath.adapt(self.X, self.Y, self.Z, whitepoint_source, whitepoint_destination, cat) return XYZ def round(self, digits=4): XYZ = self.__class__() for key in self: XYZ[key] = round(self[key], digits) return XYZ def tohex(self): data = [s15Fixed16Number_tohex(n) for n in self.values()] return "".join(data) @property def hex(self): return self.tohex() @property def Lab(self): return colormath.XYZ2Lab(*[v * 100 for v in self.values()]) @property def xyY(self): return NumberTuple(colormath.XYZ2xyY(self.X, self.Y, self.Z)) class XYZType(ICCProfileTag, XYZNumber): def __init__(self, tagData="\0" * 20, tagSignature=None, profile=None): ICCProfileTag.__init__(self, tagData, tagSignature) XYZNumber.__init__(self, tagData[8:20]) self.profile = profile __repr__ = XYZNumber.__repr__ def __setattr__(self, name, value): if name in ("_keys", "profile", "tagData", "tagSignature"): object.__setattr__(self, name, value) else: self[name] = value def adapt(self, whitepoint_source=None, whitepoint_destination=None, cat="Bradford"): XYZ = self.__class__(profile=self.profile) XYZ.X, XYZ.Y, XYZ.Z = colormath.adapt(self.X, self.Y, self.Z, whitepoint_source, whitepoint_destination, cat) return XYZ @property def ir(self): """ Get illuminant-relative values """ pcs_illuminant = self.profile.illuminant.values() if "chad" in self.profile.tags and self.profile.creator != "appl": # Apple profiles have a bug where they contain a 'chad' tag, # but the media white is not under PCS illuminant if self is self.profile.tags.wtpt: XYZ = self.__class__(profile=self.profile) XYZ.X, XYZ.Y, XYZ.Z = self.values() else: # Go from XYZ mediawhite-relative under PCS illuminant to XYZ under PCS illuminant XYZ = self.adapt(pcs_illuminant, self.profile.tags.wtpt.values(), cat="XYZ scaling") # Go from XYZ under PCS illuminant to XYZ illuminant-relative XYZ.X, XYZ.Y, XYZ.Z = self.profile.tags.chad.inverted() * XYZ.values() return XYZ else: if self in (self.profile.tags.wtpt, self.profile.tags.get("bkpt")): # For profiles without 'chad' tag, the white/black point should # already be illuminant-relative return self elif "chad" in self.profile.tags: XYZ = self.__class__(profile=self.profile) # Go from XYZ under PCS illuminant to XYZ illuminant-relative XYZ.X, XYZ.Y, XYZ.Z = self.profile.tags.chad.inverted() * self.values() return XYZ else: # Go from XYZ under PCS illuminant to XYZ illuminant-relative return self.adapt(pcs_illuminant, self.profile.tags.wtpt.values()) @property def pcs(self): """ Get PCS-relative values """ if (self in (self.profile.tags.wtpt, self.profile.tags.get("bkpt")) and (not "chad" in self.profile.tags or self.profile.creator == "appl")): # Apple profiles have a bug where they contain a 'chad' tag, # but the media white is not under PCS illuminant if "chad" in self.profile.tags: XYZ = self.__class__(profile=self.profile) XYZ.X, XYZ.Y, XYZ.Z = self.profile.tags.chad * self.values() return XYZ pcs_illuminant = self.profile.illuminant.values() return self.adapt(self.profile.tags.wtpt.values(), pcs_illuminant) else: # Values should already be under PCS illuminant return self @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): tagData = ["XYZ ", "\0" * 4] tagData += [self.tohex()] return "".join(tagData) def fset(self, tagData): pass return locals() @property def xyY(self): if self is self.profile.tags.get("bkpt"): ref = self.profile.tags.bkpt else: ref = self.profile.tags.wtpt return NumberTuple(colormath.XYZ2xyY(self.X, self.Y, self.Z, (ref.X, 1.0, ref.Z))) class chromaticAdaptionTag(colormath.Matrix3x3, s15Fixed16ArrayType): def __init__(self, tagData=None, tagSignature=None): ICCProfileTag.__init__(self, tagData, tagSignature) if tagData: data = tagData[8:] if data: matrix = [] while data: if len(matrix) == 0 or len(matrix[-1]) == 3: matrix.append([]) matrix[-1].append(s15Fixed16Number(data[0:4])) data = data[4:] self.update(matrix) @Property def tagData(): doc = """ Return raw tag data. """ def fget(self): tagData = ["sf32", "\0" * 4] for row in self: for column in row: tagData.append(s15Fixed16Number_tohex(column)) return "".join(tagData) def fset(self, tagData): pass return locals() tagSignature2Tag = { "chad": chromaticAdaptionTag } typeSignature2Type = { "chrm": ChromaticityType, "clrt": ColorantTableType, "curv": CurveType, "desc": TextDescriptionType, # ICC v2 "dict": DictType, # ICC v2 + v4 "dtim": DateTimeType, "meas": MeasurementType, "mluc": MultiLocalizedUnicodeType, # ICC v4 "mmod": MakeAndModelType, # Apple private tag "sf32": s15Fixed16ArrayType, "sig ": SignatureType, "text": TextType, "vcgt": videoCardGamma, "view": ViewingConditionsType, "XYZ ": XYZType } class ICCProfileInvalidError(IOError): pass class ICCProfile: """ Returns a new ICCProfile object. Optionally initialized with a string containing binary profile data or a filename, or a file-like object. Also if the 'load' keyword argument is False (default True), only the header will be read initially and loading of the tags will be deferred to when they are accessed the first time. """ def __init__(self, profile=None, load=True): self.ID = "\0" * 16 self._data = "" self._file = None self._tags = AODict() self.fileName = None self.is_loaded = False self.size = 0 if profile: data = None if type(profile) in (str, unicode): if profile.find("\0") < 0: # filename if (not os.path.isfile(profile) and not os.path.sep in profile and (not isinstance(os.path.altsep, basestring) or not os.path.altsep in profile)): for path in iccprofiles_home + filter(lambda x: x not in iccprofiles_home, iccprofiles): if os.path.isdir(path): for path, dirs, files in os.walk(path): path = os.path.join(path, profile) if os.path.isfile(path): profile = path break if os.path.isfile(path): break profile = open(profile, "rb") else: # binary string data = profile self.is_loaded = True if not data: # file object self._file = profile self.fileName = self._file.name self._file.seek(0) data = self._file.read(128) self.close() if not data or len(data) < 128: raise ICCProfileInvalidError("Not enough data") if data[36:40] != "acsp": raise ICCProfileInvalidError("Profile signature mismatch - " "expected 'acsp', found '" + data[36:40] + "'") header = data[:128] self.size = uInt32Number(header[0:4]) self.preferredCMM = header[4:8] minorrev_bugfixrev = binascii.hexlify(header[8:12][1]) self.version = float(str(ord(header[8:12][0])) + "." + str(int("0x0" + minorrev_bugfixrev[0], 16)) + str(int("0x0" + minorrev_bugfixrev[1], 16))) self.profileClass = header[12:16] self.colorSpace = header[16:20].strip() self.connectionColorSpace = header[20:24].strip() try: self.dateTime = dateTimeNumber(header[24:36]) except ValueError: raise ICCProfileInvalidError("Profile creation date/time invalid") self.platform = header[40:44] flags = uInt32Number(header[44:48]) self.embedded = flags & 1 != 0 self.independent = flags & 2 == 0 deviceAttributes = uInt64Number(header[56:64]) self.device = { "manufacturer": header[48:52], "model": header[52:56], "attributes": { "reflective": deviceAttributes & 1 == 0, "glossy": deviceAttributes & 2 == 0, "positive": deviceAttributes & 4 == 0, "color": deviceAttributes & 8 == 0 } } self.intent = uInt32Number(header[64:68]) self.illuminant = XYZNumber(header[68:80]) self.creator = header[80:84] if header[84:100] != "\0" * 16: self.ID = header[84:100] self._data = data[:self.size] if load: self.tags else: # Default to RGB display device profile self.preferredCMM = "" self.version = 2.4 self.profileClass = "mntr" self.colorSpace = "RGB" self.connectionColorSpace = "XYZ" self.dateTime = datetime.datetime.now() self.platform = "" self.embedded = False self.independent = True self.device = { "manufacturer": "", "model": "", "attributes": { "reflective": True, "glossy": True, "positive": True, "color": True } } self.intent = 0 self.illuminant = XYZNumber("\0\0\xf6\xd6\0\x01\0\0\0\0\xd3-") # D50 self.creator = "" def __del__(self): self.close() @property def data(self): """ Get raw binary profile data. This will re-assemble the various profile parts (header, tag table and data) on-the-fly. """ # Assemble tag table and tag data tagCount = len(self.tags) tagTable = [] tagTableSize = tagCount * 12 tagsData = [] tagsDataOffset = [] tagDataOffset = 128 + 4 + tagTableSize for tagSignature in self.tags: tagData = self.tags[tagSignature].tagData tagDataSize = len(tagData) # Pad all data with binary zeros so it lies on 4-byte boundaries padding = int(math.ceil(tagDataSize / 4.0)) * 4 - tagDataSize tagData += "\0" * padding tagTable.append(tagSignature) if tagData in tagsData: tagTable.append(uInt32Number_tohex(tagsDataOffset[tagsData.index(tagData)])) else: tagTable.append(uInt32Number_tohex(tagDataOffset)) tagTable.append(uInt32Number_tohex(tagDataSize)) if not tagData in tagsData: tagsData.append(tagData) tagsDataOffset.append(tagDataOffset) tagDataOffset += tagDataSize + padding header = self.header(tagTableSize, len("".join(tagsData))) data = "".join([header, uInt32Number_tohex(tagCount), "".join(tagTable), "".join(tagsData)]) return data def header(self, tagTableSize, tagDataSize): "Profile Header" # Profile size: 128 bytes header + 4 bytes tag count + tag table + data header = [uInt32Number_tohex(128 + 4 + tagTableSize + tagDataSize), self.preferredCMM[:4].ljust(4, " ") if self.preferredCMM else "\0" * 4, # Next three lines are ICC version chr(int(str(self.version).split(".")[0])), binascii.unhexlify(("%.2f" % self.version).split(".")[1]), "\0" * 2, self.profileClass[:4].ljust(4, " "), self.colorSpace[:4].ljust(4, " "), self.connectionColorSpace[:4].ljust(4, " "), dateTimeNumber_tohex(self.dateTime), "acsp", self.platform[:4].ljust(4, " ") if self.platform else "\0" * 4,] flags = 0 if self.embedded: flags += 1 if not self.independent: flags += 2 header += [uInt32Number_tohex(flags), self.device["manufacturer"][:4].rjust(4, "\0") if self.device["manufacturer"] else "\0" * 4, self.device["model"][:4].rjust(4, "\0") if self.device["model"] else "\0" * 4] deviceAttributes = 0 for name, bit in {"reflective": 1, "glossy": 2, "positive": 4, "color": 8}.iteritems(): if not self.device["attributes"][name]: deviceAttributes += bit header += [uInt64Number_tohex(deviceAttributes), uInt32Number_tohex(self.intent), self.illuminant.tohex(), self.creator[:4].ljust(4, " ") if self.creator else "\0" * 4, self.ID[:16].ljust(16, "\0"), self._data[100:128] if len(self._data[100:128]) == 28 else "\0" * 28] return "".join(header) @property def tags(self): "Profile Tag Table" if not self._tags: self.load() if self._data and len(self._data) > 131: # tag table and tagged element data tagCount = uInt32Number(self._data[128:132]) if debug: print "tagCount:", tagCount tagTable = self._data[132:132 + tagCount * 12] discard_len = 0 tags = {} while tagTable: tag = tagTable[:12] if len(tag) < 12: raise ICCProfileInvalidError("Tag table is truncated") tagSignature = tag[:4] if debug: print "tagSignature:", tagSignature tagDataOffset = uInt32Number(tag[4:8]) if debug: print " tagDataOffset:", tagDataOffset tagDataSize = uInt32Number(tag[8:12]) if debug: print " tagDataSize:", tagDataSize if tagSignature in self._tags: safe_print("Error (non-critical): Tag '%s' already " "encountered. Skipping..." % tagSignature) else: if (tagDataOffset, tagDataSize) in tags: if debug: print " tagDataOffset and tagDataSize indicate shared tag" self._tags[tagSignature] = tags[(tagDataOffset, tagDataSize)] else: start = tagDataOffset - discard_len if debug: print " tagData start:", start end = tagDataOffset - discard_len + tagDataSize if debug: print " tagData end:", end tagData = self._data[start:end] if len(tagData) < tagDataSize: raise ICCProfileInvalidError("Tag data for tag %r (offet %i, size %i) is truncated" % (tagSignature, tagDataOffset, tagDataSize)) typeSignature = tagData[:4] if len(typeSignature) < 4: raise ICCProfileInvalidError("Tag type signature for tag %r (offet %i, size %i) is truncated" % (tagSignature, tagDataOffset, tagDataSize)) if debug: print " typeSignature:", typeSignature try: if tagSignature in tagSignature2Tag: tag = tagSignature2Tag[tagSignature](tagData, tagSignature) elif typeSignature in typeSignature2Type: args = tagData, tagSignature if typeSignature == "clrt": args += (self.connectionColorSpace, ) elif typeSignature == "XYZ ": args += (self, ) tag = typeSignature2Type[typeSignature](*args) else: tag = ICCProfileTag(tagData, tagSignature) except Exception, exception: raise ICCProfileInvalidError("Couldn't parse tag %r (type %r, offet %i, size %i): %r" % (tagSignature, typeSignature, tagDataOffset, tagDataSize, exception)) self._tags[tagSignature] = tags[(tagDataOffset, tagDataSize)] = tag tagTable = tagTable[12:] self._data = self._data[:128] return self._tags def calculateID(self, setID=True): """ Calculates, sets, and returns the profile's ID (checksum). Calling this function always recalculates the checksum on-the-fly, in contrast to just accessing the ID property. The entire profile, based on the size field in the header, is used to calculate the ID after the values in the Profile Flags field (bytes 44 to 47), Rendering Intent field (bytes 64 to 67) and Profile ID field (bytes 84 to 99) in the profile header have been temporarily replaced with zeros. """ data = self.data[:44] + "\0\0\0\0" + self.data[48:64] + "\0\0\0\0" + \ self.data[68:84] + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + \ self.data[100:] ID = md5(data).digest() if setID: self.ID = ID return ID def close(self): """ Closes the associated file object (if any). """ if self._file and not self._file.closed: self._file.close() @staticmethod def from_edid(edid, iccv4=False, cat="Bradford"): """ Create an ICC Profile from EDID data and return it You may override the gamma from EDID by setting it to a list of curve values. """ description = edid.get("monitor_name", edid.get("ascii", str(edid["product_id"] or edid["hash"]))) manufacturer = edid.get("manufacturer", "") manufacturer_id = edid["edid"][8:10] model_name = description model_id = edid["edid"][10:12] copyright = "Created from EDID" # Get chromaticities of primaries xy = {} for color in ("red", "green", "blue", "white"): x, y = edid.get(color + "_x", 0.0), edid.get(color + "_y", 0.0) xy[color[0] + "x"] = x xy[color[0] + "y"] = y gamma = edid.get("gamma", 2.2) profile = ICCProfile.from_chromaticities(xy["rx"], xy["ry"], xy["gx"], xy["gy"], xy["bx"], xy["by"], xy["wx"], xy["wy"], gamma, description, copyright, manufacturer, model_name, manufacturer_id, model_id, iccv4, cat) profile.set_edid_metadata(edid) spec_prefixes = "DATA_,OPENICC_" prefixes = (profile.tags.meta.getvalue("prefix", "", None) or spec_prefixes).split(",") for prefix in spec_prefixes.split(","): if not prefix in prefixes: prefixes.append(prefix) profile.tags.meta["prefix"] = ",".join(prefixes) profile.tags.meta["OPENICC_automatic_generated"] = "1" profile.tags.meta["DATA_source"] = "edid" profile.calculateID() return profile @staticmethod def from_chromaticities(rx, ry, gx, gy, bx, by, wx, wy, gamma, description, copyright, manufacturer=None, model_name=None, manufacturer_id="\0\0", model_id="\0\0", iccv4=False, cat="Bradford"): """ Create an ICC Profile from chromaticities and return it """ wXYZ = colormath.xyY2XYZ(wx, wy, 1.0) # Calculate RGB to XYZ matrix from chromaticities and white mtx = colormath.rgb_to_xyz_matrix(rx, ry, gx, gy, bx, by, wXYZ) rgb = {"r": (1.0, 0.0, 0.0), "g": (0.0, 1.0, 0.0), "b": (0.0, 0.0, 1.0)} XYZ = {} for color in "rgb": # Calculate XYZ for primaries XYZ[color] = mtx * rgb[color] profile = ICCProfile.from_XYZ(XYZ["r"], XYZ["g"], XYZ["b"], wXYZ, gamma, description, copyright, manufacturer, model_name, manufacturer_id, model_id, iccv4, cat) return profile @staticmethod def from_XYZ(rXYZ, gXYZ, bXYZ, wXYZ, gamma, description, copyright, manufacturer=None, model_name=None, manufacturer_id="\0\0", model_id="\0\0", iccv4=False, cat="Bradford"): """ Create an ICC Profile from XYZ values and return it """ profile = ICCProfile() if iccv4: profile.version = 4.2 profile.setDescription(description) profile.setCopyright(copyright) if manufacturer: profile.setDeviceManufacturerDescription(manufacturer) if model_name: profile.setDeviceModelDescription(model_name) profile.device["manufacturer"] = "\0\0" + manufacturer_id[1] + manufacturer_id[0] profile.device["model"] = "\0\0" + model_id[1] + model_id[0] # Add Apple-specific 'mmod' tag (TODO: need full spec) if manufacturer_id != "\0\0" or model_id != "\0\0": mmod = ("mmod" + ("\x00" * 6) + manufacturer_id + ("\x00" * 2) + model_id[1] + model_id[0] + ("\x00" * 4) + ("\x00" * 20)) profile.tags.mmod = ICCProfileTag(mmod, "mmod") profile.tags.wtpt = XYZType(profile=profile) D50 = colormath.get_whitepoint("D50") if iccv4: # Set wtpt to D50 and store actual white -> D50 transform in chad (profile.tags.wtpt.X, profile.tags.wtpt.Y, profile.tags.wtpt.Z) = D50 profile.tags.chad = chromaticAdaptionTag() matrix = colormath.wp_adaption_matrix(wXYZ, D50, cat) profile.tags.chad.update(matrix) else: # Store actual white in wtpt (profile.tags.wtpt.X, profile.tags.wtpt.Y, profile.tags.wtpt.Z) = wXYZ profile.tags.chrm = ChromaticityType() profile.tags.chrm.type = 0 for color in "rgb": X, Y, Z = locals()[color + "XYZ"] # Get chromaticity of primary x, y = colormath.XYZ2xyY(X, Y, Z)[:2] profile.tags.chrm.channels.append((x, y)) # Write XYZ and TRC tags (don't forget to adapt to D50) tagname = color + "XYZ" profile.tags[tagname] = XYZType(profile=profile) (profile.tags[tagname].X, profile.tags[tagname].Y, profile.tags[tagname].Z) = colormath.adapt(X, Y, Z, wXYZ, D50, cat) tagname = color + "TRC" profile.tags[tagname] = CurveType() if isinstance(gamma, (list, tuple)): profile.tags[tagname].extend(gamma) else: profile.tags[tagname].set_trc(gamma, 1) profile.calculateID() return profile def set_localizable_desc(self, tagname, description, languagecode="en", countrycode="US"): # Handle ICCv2 <> v4 differences and encoding if self.version < 4: self.tags[tagname] = TextDescriptionType() if isinstance(description, unicode): asciidesc = description.encode("ASCII", "asciize") else: asciidesc = description self.tags[tagname].ASCII = asciidesc if asciidesc != description: self.tags[tagname].Unicode = description else: self.set_localizable_text(self, tagname, description, languagecode, countrycode) def set_localizable_text(self, tagname, text, languagecode="en", countrycode="US"): # Handle ICCv2 <> v4 differences and encoding if self.version < 4: if isinstance(text, unicode): text = text.encode("ASCII", "asciize") self.tags[tagname] = TextType("text\0\0\0\0%s\0" % text, tagname) else: self.tags[tagname] = MultiLocalizedUnicodeType() self.tags[tagname].add_localized_string(languagecode, countrycode, text) def setCopyright(self, copyright, languagecode="en", countrycode="US"): self.set_localizable_text("cprt", copyright, languagecode, countrycode) def setDescription(self, description, languagecode="en", countrycode="US"): self.set_localizable_desc("desc", description, languagecode, countrycode) def setDeviceManufacturerDescription(self, description, languagecode="en", countrycode="US"): self.set_localizable_desc("dmnd", description, languagecode, countrycode) def setDeviceModelDescription(self, description, languagecode="en", countrycode="US"): self.set_localizable_desc("dmdd", description, languagecode, countrycode) def getCopyright(self): """ Return profile copyright. """ return unicode(self.tags.get("cprt", "")) def getDescription(self): """ Return profile description. """ return unicode(self.tags.get("desc", "")) def getDeviceManufacturerDescription(self): """ Return device manufacturer description. """ return unicode(self.tags.get("dmnd", "")) def getDeviceModelDescription(self): """ Return device model description. """ return unicode(self.tags.get("dmdd", "")) def getViewingConditionsDescription(self): """ Return viewing conditions description. """ return unicode(self.tags.get("vued", "")) def guess_cat(self): illuminant = self.illuminant.values() if "chad" in self.tags: return colormath.guess_cat(self.tags.chad, self.tags.chad.inverted() * illuminant, illuminant) def isSame(self, profile, force_calculation=False): """ Compare the ID of profiles. Returns a boolean indicating if the profiles have the same ID. profile can be a ICCProfile instance, a binary string containing profile data, a filename or a file object. """ if not isinstance(profile, self.__class__): profile = self.__class__(profile) if force_calculation or self.ID == "\0" * 16: id1 = self.calculateID(False) else: id1 = self.ID if force_calculation or profile.ID == "\0" * 16: id2 = profile.calculateID(False) else: id2 = profile.ID return id1 == id2 def load(self): """ Loads the profile from the file object. Normally, you don't need to call this method, since the ICCProfile class automatically loads the profile when necessary (load does nothing if the profile was passed in as a binary string). """ if not self.is_loaded and self._file: if self._file.closed: self._file = open(self._file.name, "rb") self._file.seek(len(self._data)) self._data += self._file.read(self.size - len(self._data)) self._file.close() self.is_loaded = True def print_info(self): safe_print("=" * 80) safe_print("ICC profile information") safe_print("-" * 80) safe_print("File name:", os.path.basename(self.fileName or "")) for label, value in self.get_info(): if not value: safe_print(label) else: safe_print(label + ":", value) def get_info(self): info = DictList() info["Size"] = "%i Bytes (%.2f KiB)" % (self.size, self.size / 1024.0) info["Preferred CMM"] = hexrepr(self.preferredCMM, cmms) info["ICC version"] = "%s" % self.version info["Profile class"] = profileclass.get(self.profileClass, self.profileClass) info["Color model"] = self.colorSpace info["Profile connection space (PCS)"] = self.connectionColorSpace info["Created"] = strftime("%Y-%m-%d %H:%M:%S", self.dateTime.timetuple()) info["Platform"] = platform.get(self.platform, hexrepr(self.platform)) info["Is embedded"] = {True: "Yes"}.get(self.embedded, "No") info["Can be used independently"] = {True: "Yes"}.get(self.independent, "No") info["Device"] = "" info[" Manufacturer"] = "0x%s" % binascii.hexlify(self.device["manufacturer"]).upper() if (self.device["manufacturer"][0:2] == "\0\0" and self.device["manufacturer"][2:4] != "\0\0"): mnft_id = self.device["manufacturer"][3] + self.device["manufacturer"][2] mnft_id = edid.parse_manufacturer_id(mnft_id) manufacturer = edid.get_manufacturer_name(mnft_id) else: manufacturer = safe_unicode(re.sub("[^\x20-\x7e]", "", self.device["manufacturer"])).encode("ASCII", "replace") if manufacturer != self.device["manufacturer"]: manufacturer = None else: manufacturer = "'%s'" % manufacturer if manufacturer is not None: info[" Manufacturer"] += " %s" % manufacturer info[" Model"] = hexrepr(self.device["model"]) info[" Attributes"] = "\n".join([{True: "Reflective"}.get(self.device["attributes"]["reflective"], "Transparency"), {True: "Glossy"}.get(self.device["attributes"]["glossy"], "Matte"), {True: "Positive"}.get(self.device["attributes"]["positive"], "Negative"), {True: "Color"}.get(self.device["attributes"]["color"], "Black & white")]) info["Default rendering intent"] = {0: "Perceptual", 1: "Media-relative colorimetric", 2: "Saturation", 3: "ICC-absolute colorimetric"}.get(self.intent, "Unknown") info["PCS illuminant XYZ"] = " ".join([" ".join(["%6.2f" % (v * 100) for v in self.illuminant.values()]), "(xy %s," % " ".join("%6.4f" % v for v in self.illuminant.xyY[:2]), "CCT %iK)" % (colormath.XYZ2CCT(*self.illuminant.values()) or 0)]) info["Creator"] = hexrepr(self.creator, manufacturers) info["Checksum"] = "0x%s" % binascii.hexlify(self.ID).upper() calcID = self.calculateID(False) if self.ID != "\0" * 16: info[" Checksum OK"] = {True: "Yes"}.get(self.ID == calcID, "No") if self.ID != calcID: info[" Calculated checksum"] = "0x%s" % binascii.hexlify(calcID).upper() for sig, tag in self.tags.iteritems(): name = tags.get(sig, "'%s'" % sig) if isinstance(tag, chromaticAdaptionTag): for i, row in enumerate(tag): if i > 0: name = " " info[name] = " ".join("%6.4f" % v for v in row) info["Chromatic adaptation transform"] = self.guess_cat() or "Unknown" elif isinstance(tag, ChromaticityType): info["Chromaticity (illuminant-relative)"] = "" for i, channel in enumerate(tag.channels): if self.colorSpace.endswith("CLR"): colorant_name = "" else: colorant_name = "(%s) " % self.colorSpace[i:i + 1] info[" Channel %i %sxy" % (i + 1, colorant_name)] = " ".join( "%6.4f" % v for v in channel) elif isinstance(tag, ColorantTableType): info["Colorants (PCS-relative)"] = "" maxlen = max(map(len, tag.keys())) for colorant_name, colorant in tag.iteritems(): values = colorant.values() if "".join(colorant.keys()) == "Lab": values = colormath.Lab2XYZ(*values) else: values = [v / 100.0 for v in values] XYZxy = [" ".join("%6.2f" % v for v in colorant.values())] if values != [0, 0, 0]: XYZxy += ["(xy %s)" % " ".join("%6.4f" % v for v in colormath.XYZ2xyY(*values)[:2])] info[" %s %s" % (colorant_name, "".join(colorant.keys()))] = " ".join(XYZxy) elif isinstance(tag, CurveType): if len(tag) == 1: info[name] = "Gamma %3.2f" % tag[0] elif len(tag): info[name] = "" info[" Number of entries"] = "%i" % len(tag) #info[" Average gamma"] = "%3.2f" % tag.get_gamma() transfer_function = tag.get_transfer_function(slice=(0, 1.0)) if round(transfer_function[1], 2) == 1.0: value = u"%s" % ( transfer_function[0][0]) else: transfer_function = tag.get_transfer_function(slice=(0.00, 1.00)) if transfer_function[1] >= .95: value = u"≈ %s (Δ %.2f%%)" % ( transfer_function[0][0], 100 - transfer_function[1] * 100) else: value = "Unknown" info[" Transfer function"] = value info[" Minimum Y"] = "%6.4f" % (tag[0] / 65535.0 * 100) info[" Maximum Y"] = "%6.2f" % (tag[-1] / 65535.0 * 100) elif isinstance(tag, DictType): if sig == "meta": name = "Metadata" else: name = "Generic name-value data" info[name] = "" for key in tag: key = tag.getname(key) value = tag.getvalue(key) if key == "prefix": value = "\n".join(value.split(",")) info[" %s" % key] = value elif isinstance(tag, MakeAndModelType): info[name] = "" info[" Manufacturer"] = "0x%s %s" % ( binascii.hexlify(tag.manufacturer).upper(), edid.get_manufacturer_name(edid.parse_manufacturer_id(tag.manufacturer))) info[" Model"] = "0x%s" % binascii.hexlify(tag.model).upper() elif isinstance(tag, MeasurementType): info[name] = "" info[" Observer"] = tag.observer.description info[" Backing XYZ"] = " ".join("%6.2f" % v for v in tag.backing.values()) info[" Geometry"] = tag.geometry.description info[" Flare"] = "%.2f%%" % (tag.flare * 100) info[" Illuminant"] = tag.illuminantType.description elif isinstance(tag, MultiLocalizedUnicodeType): info[name] = "" for language, countries in tag.iteritems(): for country, value in countries.iteritems(): if country.strip("\0 "): country = "/" + country info[" %s%s" % (language, country)] = value elif isinstance(tag, Text): if sig == "cprt": info[name] = unicode(tag) elif sig == "tech": info[name] = tech.get(tag, "Unknown") elif tag.find("\n") > -1 or tag.find("\r") > -1: info[name] = "[%i Bytes]" % len(tag) else: info[name] = (unicode(tag)[:60 - len(name)] + ("...[%i more Bytes]" % (len(tag) - (60 - len(name))) if len(tag) > 60 - len(name) else "")) elif isinstance(tag, TextDescriptionType): if not tag.get("Unicode") and not tag.get("Macintosh"): info["%s (ASCII)" % name] = safe_unicode(tag.ASCII) else: info[name] = "" info[" ASCII"] = safe_unicode(tag.ASCII) if tag.get("Unicode"): info[" Unicode"] = tag.Unicode if tag.get("Macintosh"): info[" Macintosh"] = tag.Macintosh elif isinstance(tag, VideoCardGammaFormulaType): info[name] = "" #linear = tag.is_linear() #info[" Is linear"] = {0: "No", 1: "Yes"}[linear] for key in ("red", "green", "blue"): info[" %s gamma" % key.capitalize()] = "%.2f" % tag[key + "Gamma"] info[" %s minimum" % key.capitalize()] = "%.2f" % tag[key + "Min"] info[" %s maximum" % key.capitalize()] = "%.2f" % tag[key + "Max"] elif isinstance(tag, VideoCardGammaTableType): info[name] = "" info[" Bitdepth"] = "%i" % (tag.entrySize * 8) info[" Channels"] = "%i" % tag.channels info[" Number of entries per channel"] = "%i" % tag.entryCount r_points, g_points, b_points, linear_points = tag.get_values() points = r_points, g_points, b_points #if r_points == g_points == b_points == linear_points: #info[" Is linear" % i] = {True: "Yes"}.get(points[i] == linear_points, "No") #else: if True: unique = tag.get_unique_values() for i, channel in enumerate(tag.data): scale = math.pow(2, tag.entrySize * 8) - 1 vmin = 0 vmax = scale info[" Channel %i gamma at 50%% input" % (i + 1)] = "%.2f" % colormath.get_gamma([((len(channel) / 2 - 1) / (len(channel) - 1.0) * scale, channel[len(channel) / 2 - 1])], scale, vmin, vmax, False, False)[0] vmin = channel[0] vmax = channel[-1] info[" Channel %i minimum" % (i + 1)] = "%6.4f%%" % (vmin / scale * 100) info[" Channel %i maximum" % (i + 1)] = "%6.2f%%" % (vmax / scale * 100) info[" Channel %i unique values" % (i + 1)] = "%i @ 8 Bit" % len(unique[i]) info[" Channel %i is linear" % (i + 1)] = {True: "Yes"}.get(points[i] == linear_points, "No") elif isinstance(tag, ViewingConditionsType): info[name] = "" info[" Illuminant"] = tag.illuminantType.description info[" Illuminant XYZ"] = "%s (xy %s)" % ( " ".join("%6.2f" % v for v in tag.illuminant.values()), " ".join("%6.4f" % v for v in tag.illuminant.xyY[:2])) XYZxy = [" ".join("%6.2f" % v for v in tag.surround.values())] if tag.surround.values() != [0, 0, 0]: XYZxy += ["(xy %s)" % " ".join("%6.4f" % v for v in tag.surround.xyY[:2])] info[" Surround XYZ"] = " ".join(XYZxy) elif isinstance(tag, XYZType): if sig == "lumi": info[name] = u"%.2f cd/m²" % self.tags.lumi.Y elif sig in ("bkpt", "wtpt"): format = {"bkpt": "%6.4f", "wtpt": "%6.2f"}[sig] info[name] = "" if self.profileClass == "mntr" and sig == "wtpt": info[" Is illuminant"] = "Yes" if self.profileClass == "mntr" or "chad" in self.tags: label = "Illuminant-relative" else: label = "PCS-relative" #if (self.connectionColorSpace == "Lab" and #self.profileClass == "prtr"): if self.profileClass == "prtr": color = [" ".join([format % v for v in tag.ir.Lab])] info[" %s Lab" % label] = " ".join(color) else: color = [" ".join(format % (v * 100) for v in tag.ir.values())] if tag.ir.values() != [0, 0, 0]: xy = " ".join("%6.4f" % v for v in tag.ir.xyY[:2]) color += ["(xy %s)" % xy] cct, delta = colormath.xy_CCT_delta(*tag.ir.xyY[:2]) else: cct = None info[" %s XYZ" % label] = " ".join(color) if cct: info[" %s CCT" % label] = "%iK" % cct if delta: info[u" ΔE 2000 to daylight locus"] = "%.2f" % delta["E"] kwargs = {"daylight": False} cct, delta = colormath.xy_CCT_delta(*tag.ir.xyY[:2], **kwargs) if delta: info[u" ΔE 2000 to blackbody locus"] = "%.2f" % delta["E"] if "chad" in self.tags: color = [" ".join(format % (v * 100) for v in tag.pcs.values())] if tag.pcs.values() != [0, 0, 0]: xy = " ".join("%6.4f" % v for v in tag.pcs.xyY[:2]) color += ["(xy %s)" % xy] info[" PCS-relative XYZ"] = " ".join(color) cct, delta = colormath.xy_CCT_delta(*tag.pcs.xyY[:2]) if cct: info[" PCS-relative CCT"] = "%iK" % cct #if delta: #info[u" ΔE 2000 to daylight locus"] = "%.2f" % delta["E"] #kwargs = {"daylight": False} #cct, delta = colormath.xy_CCT_delta(*tag.pcs.xyY[:2], **kwargs) #if delta: #info[u" ΔE 2000 to blackbody locus"] = "%.2f" % delta["E"] else: info[name] = "" info[" Illuminant-relative XYZ"] = " ".join( [" ".join("%6.2f" % (v * 100) for v in tag.ir.values()), "(xy %s)" % " ".join("%6.4f" % v for v in tag.ir.xyY[:2])]) info[" PCS-relative XYZ"] = " ".join( [" ".join("%6.2f" % (v * 100) for v in tag.values()), "(xy %s)" % " ".join("%6.4f" % v for v in tag.xyY[:2])]) elif isinstance(tag, ICCProfileTag): info[name] = "[%i Bytes]" % len(tag.tagData) return info def get_rgb_space(self): tags = self.tags if not "wtpt" in tags: return False rgb_space = [[], tags.wtpt.ir.values()] for component in ("r", "g", "b"): if (not "%sXYZ" % component in tags or not "%sTRC" % component in tags or not isinstance(tags["%sTRC" % component], CurveType)): return False rgb_space.append(tags["%sXYZ" % component].ir.xyY) if len(tags["%sTRC" % component]) > 1: rgb_space[0].append([v / 65535.0 for v in tags["%sTRC" % component]]) else: rgb_space[0].append(tags["%sTRC" % component][0]) return rgb_space def read(self, profile): """ Read profile from binary string, filename or file object. Same as self.__init__(profile) """ self.__init__(profile) def set_edid_metadata(self, edid): """ Sets metadata from EDID Key names follow the ICC meta Tag for Monitor Profiles specification http://www.oyranos.org/wiki/index.php?title=ICC_meta_Tag_for_Monitor_Profiles_0.1 and the GNOME Color Manager metadata specification http://gitorious.org/colord/master/blobs/master/doc/metadata-spec.txt """ if not "meta" in self.tags: self.tags.meta = DictType() spec_prefixes = "EDID_" prefixes = (self.tags.meta.getvalue("prefix", "", None) or spec_prefixes).split(",") for prefix in spec_prefixes.split(","): if not prefix in prefixes: prefixes.append(prefix) # OpenICC keys (some shared with GCM) self.tags.meta.update((("prefix", ",".join(prefixes)), ("EDID_mnft", edid["manufacturer_id"]), ("EDID_manufacturer", colord.quirk_manufacturer(edid["manufacturer"])), ("EDID_mnft_id", struct.unpack(">H", edid["edid"][8:10])[0]), ("EDID_model_id", edid["product_id"]), ("EDID_date", "%0.4i-T%i" % (edid["year_of_manufacture"], edid["week_of_manufacture"])), ("EDID_red_x", edid["red_x"]), ("EDID_red_y", edid["red_y"]), ("EDID_green_x", edid["green_x"]), ("EDID_green_y", edid["green_y"]), ("EDID_blue_x", edid["blue_x"]), ("EDID_blue_y", edid["blue_y"]), ("EDID_white_x", edid["white_x"]), ("EDID_white_y", edid["white_y"]))) if "gamma" in edid: self.tags.meta["EDID_gamma"] = edid["gamma"] monitor_name = edid.get("monitor_name", edid.get("ascii")) if monitor_name: self.tags.meta["EDID_model"] = monitor_name if edid.get("serial_ascii"): self.tags.meta["EDID_serial"] = edid["serial_ascii"] # GCM keys self.tags.meta["EDID_md5"] = edid["hash"] def set_gamut_metadata(self, gamut_volume=None, gamut_coverage=None): """ Sets gamut volume and coverage metadata keys """ if gamut_volume or gamut_coverage: if not "meta" in self.tags: self.tags.meta = DictType() # Update meta prefix prefixes = (self.tags.meta.getvalue("prefix", "", None) or "GAMUT_").split(",") if not "GAMUT_" in prefixes: prefixes.append("GAMUT_") self.tags.meta["prefix"] = ",".join(prefixes) if gamut_volume: # Set gamut size self.tags.meta["GAMUT_volume"] = gamut_volume if gamut_coverage: # Set gamut coverage for key, factor in gamut_coverage.iteritems(): self.tags.meta["GAMUT_coverage(%s)" % key] = factor def write(self, stream_or_filename=None): """ Write profile to stream. This will re-assemble the various profile parts (header, tag table and data) on-the-fly. """ if not stream_or_filename: if self._file: if not self._file.closed: self.close() stream_or_filename = self.fileName if isinstance(stream_or_filename, basestring): stream = open(stream_or_filename, "wb") if not self.fileName: self.fileName = stream_or_filename else: stream = stream_or_filename stream.write(self.data) if isinstance(stream_or_filename, basestring): stream.close() dispcalGUI-1.7.1.6/dispcalGUI/jsondict.py000644 000765 000000 00000007646 12025152312 017777 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import codecs import os import demjson from config import get_data_path from debughelpers import handle_error from util_str import safe_unicode class JSONDict(dict): """ JSON dictionary with key -> value mappings. The actual mappings are loaded from the source JSON file when they are accessed. """ def __init__(self, path=None, encoding="UTF-8", errors="strict"): dict.__init__(self) self._isloaded = False self.path = path self.encoding = encoding self.errors = errors def __cmp__(self, other): self.load() return dict.__cmp__(self, other) def __contains__(self, key): self.load() return dict.__contains__(self, key) def __delitem__(self, key): self.load() dict.__delitem__(self, key) def __delslice__(self, i, j): self.load() dict.__delslice__(self, i, j) def __eq__(self, other): self.load() return dict.__eq__(self, other) def __ge__(self, other): self.load() return dict.__ge__(self, other) def __getitem__(self, name): self.load() return dict.__getitem__(self, name) def __getslice__(self, i, j): self.load() return dict.__getslice__(self, i, j) def __gt__(self, other): self.load() return dict.__gt__(self, other) def __iter__(self): self.load() return dict.__iter__(self) def __le__(self, other): self.load() return dict.__le__(self, other) def __len__(self): self.load() return dict.__len__(self) def __lt__(self, other): self.load() return dict.__lt__(self, other) def __ne__(self, other): self.load() return dict.__ne__(self, other) def __repr__(self): self.load() return dict.__repr__(self) def __setitem__(self, name, value): self.load() dict.__setitem__(self, name, value) def __sizeof__(self): self.load() return dict.__sizeof__(self) def clear(self): if not self._isloaded: self._isloaded = True dict.clear(self) def copy(self): self.load() return dict.copy(self) def get(self, name, fallback=None): self.load() return dict.get(self, name, fallback) def has_key(self, name): self.load() return dict.has_key(self, name) def items(self): self.load() return dict.items(self) def iteritems(self): self.load() return dict.iteritems(self) def iterkeys(self): self.load() return dict.iterkeys(self) def itervalues(self): self.load() return dict.itervalues(self) def keys(self): self.load() return dict.keys(self) def load(self, path=None, encoding=None, errors=None): if not self._isloaded and (path or self.path): self._isloaded = True if not path: path = self.path if path and not os.path.isabs(path): path = get_data_path(path) if path and os.path.isfile(path): self.path = path if encoding: self.encoding = encoding if errors: self.errors = errors else: handle_error(u"Warning - JSON file '%s' not found" % safe_unicode(path)) return try: jsonfile = codecs.open(path, "rU", self.encoding, self.errors) try: dict.update(self, demjson.decode(jsonfile.read())) except (UnicodeDecodeError, demjson.JSONDecodeError), exception: handle_error( u"Warning - JSON file '%s': %s" % tuple(safe_unicode(s) for s in (path, safe_unicode(exception).capitalize() if isinstance(exception, demjson.JSONDecodeError) else exception))) except Exception, exception: handle_error(u"Warning - JSON file '%s': %s" % tuple(safe_unicode(s) for s in (path, exception))) else: jsonfile.close() def pop(self, key, *args): self.load() return dict.pop(self, key, *args) def popitem(self, name, value): self.load() return dict.popitem(self, name, value) def setdefault(self, name, value=None): self.load() return dict.setdefault(self, name, value) def update(self, other): self.load() dict.update(self, other) def values(self): self.load() return dict.values(self) dispcalGUI-1.7.1.6/dispcalGUI/jspacker.py000644 000765 000000 00000054267 12266411534 020000 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- ## ParseMaster, version 1.0 (pre-release) (2005/05/12) x6 ## Copyright 2005, Dean Edwards ## Web: http://dean.edwards.name/ ## ## This software is licensed under the CC-GNU LGPL ## Web: http://creativecommons.org/licenses/LGPL/2.1/ ## ## Ported to Python by Florian Schulze import os, re, sys # a multi-pattern parser class Pattern: def __init__(self, expression, replacement, length): self.expression = expression self.replacement = replacement self.length = length def __str__(self): return "(" + self.expression + ")" class Patterns(list): def __str__(self): return '|'.join([str(e) for e in self]) class ParseMaster: # constants EXPRESSION = 0 REPLACEMENT = 1 LENGTH = 2 GROUPS = re.compile(r"""\(""", re.M)#g SUB_REPLACE = re.compile(r"""\$\d""", re.M) INDEXED = re.compile(r"""^\$\d+$""", re.M) TRIM = re.compile(r"""(['"])\1\+(.*)\+\1\1$""", re.M) ESCAPE = re.compile(r"""\\.""", re.M)#g #QUOTE = re.compile(r"""'""", re.M) DELETED = re.compile("""\x01[^\x01]*\x01""", re.M)#g def __init__(self): # private self._patterns = Patterns() # patterns stored by index self._escaped = [] self.ignoreCase = False self.escapeChar = None def DELETE(self, match, offset): return "\x01" + match.group(offset) + "\x01" def _repl(self, a, o, r, i): while (i): m = a.group(o+i-1) if m is None: s = "" else: s = m r = r.replace("$" + str(i), s) i = i - 1 r = ParseMaster.TRIM.sub("$1", r) return r # public def add(self, expression="^$", replacement=None): if replacement is None: replacement = self.DELETE # count the number of sub-expressions # - add one because each pattern is itself a sub-expression length = len(ParseMaster.GROUPS.findall(self._internalEscape(str(expression)))) + 1 # does the pattern deal with sub-expressions? if (isinstance(replacement, str) and ParseMaster.SUB_REPLACE.match(replacement)): # a simple lookup? (e.g. "$2") if (ParseMaster.INDEXED.match(replacement)): # store the index (used for fast retrieval of matched strings) replacement = int(replacement[1:]) - 1 else: # a complicated lookup (e.g. "Hello $2 $1") # build a function to do the lookup i = length r = replacement replacement = lambda a,o: self._repl(a,o,r,i) # pass the modified arguments self._patterns.append(Pattern(expression, replacement, length)) # execute the global replacement def execute(self, string): if self.ignoreCase: r = re.compile(str(self._patterns), re.I | re.M) else: r = re.compile(str(self._patterns), re.M) string = self._escape(string, self.escapeChar) string = r.sub(self._replacement, string) string = self._unescape(string, self.escapeChar) string = ParseMaster.DELETED.sub("", string) return string # clear the patterns collections so that this object may be re-used def reset(self): self._patterns = Patterns() # this is the global replace function (it's quite complicated) def _replacement(self, match): i = 1 # loop through the patterns for pattern in self._patterns: if match.group(i) is not None: replacement = pattern.replacement if callable(replacement): return replacement(match, i) elif isinstance(replacement, (int, long)): return match.group(replacement+i) else: return replacement else: i = i+pattern.length # encode escaped characters def _escape(self, string, escapeChar=None): def repl(match): char = match.group(1) self._escaped.append(char) return escapeChar if escapeChar is None: return string r = re.compile("\\"+escapeChar+"(.)", re.M) result = r.sub(repl, string) return result # decode escaped characters def _unescape(self, string, escapeChar=None): def repl(match): try: #result = eval("'"+escapeChar + self._escaped.pop(0)+"'") result = escapeChar + self._escaped.pop(0) return result except IndexError: return escapeChar if escapeChar is None: return string r = re.compile("\\"+escapeChar, re.M) result = r.sub(repl, string) return result def _internalEscape(self, string): return ParseMaster.ESCAPE.sub("", string) ## packer, version 2.0 (2005/04/20) ## Copyright 2004-2005, Dean Edwards ## License: http://creativecommons.org/licenses/LGPL/2.1/ ## Ported to Python by Florian Schulze ## http://dean.edwards.name/packer/ class JavaScriptPacker: def __init__(self): pass def basicCompression(self, script): return self.getCompressionParseMaster(False, script) def specialCompression(self, script): return self.getCompressionParseMaster(True, script) def getCompressionParseMaster(self, specialChars, script): IGNORE = "$1" parser = ParseMaster() parser.escapeChar = '\\' # protect strings parser.add(r"""'[^'\n\r]*'""", IGNORE) parser.add(r'"[^"\n\r]*"', IGNORE) # remove comments parser.add(r"""//[^\n\r]*[\n\r]""") parser.add(r"""/\*[^*]*\*+([^/][^*]*\*+)*/""") # protect regular expressions parser.add(r"""\s+(\/[^\/\n\r\*][^\/\n\r]*\/g?i?)""", "$2") parser.add(r"""[^\w\$\/'"*)\?:]\/[^\/\n\r\*][^\/\n\r]*\/g?i?""", IGNORE) # remove: ;;; doSomething(); if specialChars: parser.add(""";;;[^\n\r]+[\n\r]""") # remove redundant semi-colons parser.add(r"""\(;;\)""", "$2") # protect for (;;) loops parser.add(r""";+\s*([};])""", "$2") # apply the above script = parser.execute(script) # remove white-space parser.add(r"""(\b|\$)\s+(\b|\$)""", "$2 $3") parser.add(r"""([+\-])\s+([+\-])""", "$2 $3") parser.add(r"""\s+""", "") return parser.execute(script) def getEncoder(self, ascii): mapping = {} base = ord('0') mapping.update(dict([(i, chr(i+base)) for i in range(10)])) base = ord('a') mapping.update(dict([(i+10, chr(i+base)) for i in range(26)])) base = ord('A') mapping.update(dict([(i+36, chr(i+base)) for i in range(26)])) base = 161 mapping.update(dict([(i+62, chr(i+base)) for i in range(95)])) # zero encoding # characters: 0123456789 def encode10(charCode): return str(charCode) # inherent base36 support # characters: 0123456789abcdefghijklmnopqrstuvwxyz def encode36(charCode): l = [] remainder = charCode while 1: result, remainder = divmod(remainder, 36) l.append(mapping[remainder]) if not result: break remainder = result l.reverse() return "".join(l) # hitch a ride on base36 and add the upper case alpha characters # characters: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ def encode62(charCode): l = [] remainder = charCode while 1: result, remainder = divmod(remainder, 62) l.append(mapping[remainder]) if not result: break remainder = result l.reverse() return "".join(l) # use high-ascii values def encode95(charCode): l = [] remainder = charCode while 1: result, remainder = divmod(remainder, 95) l.append(mapping[remainder+62]) if not result: break remainder = result l.reverse() return "".join(l) if ascii <= 10: return encode10 elif ascii <= 36: return encode36 elif ascii <= 62: return encode62 return encode95 def escape(self, script): script = script.replace("\\","\\\\") script = script.replace("'","\\'") script = script.replace('\n','\\n') #return re.sub(r"""([\\'](?!\n))""", "\\$1", script) return script def escape95(self, script): result = [] for x in script: if x>'\xa1': x = "\\x%0x" % ord(x) result.append(x) return "".join(result) def encodeKeywords(self, script, encoding, fastDecode): # escape high-ascii values already in the script (i.e. in strings) if (encoding > 62): script = self.escape95(script) # create the parser parser = ParseMaster() encode = self.getEncoder(encoding) # for high-ascii, don't encode single character low-ascii if encoding > 62: regexp = r"""\w\w+""" else: regexp = r"""\w+""" # build the word list keywords = self.analyze(script, regexp, encode) encoded = keywords['encoded'] # encode def repl(match, offset): return encoded.get(match.group(offset), "") parser.add(regexp, repl) # if encoded, wrap the script in a decoding function script = parser.execute(script) script = self.bootStrap(script, keywords, encoding, fastDecode) return script def analyze(self, script, regexp, encode): # analyse # retreive all words in the script regexp = re.compile(regexp, re.M) all = regexp.findall(script) sorted = [] # list of words sorted by frequency encoded = {} # dictionary of word->encoding protected = {} # instances of "protected" words if all: unsorted = [] _protected = {} values = {} count = {} all.reverse() for word in all: word = "$"+word if word not in count: count[word] = 0 j = len(unsorted) unsorted.append(word) # make a dictionary of all of the protected words in this script # these are words that might be mistaken for encoding values[j] = encode(j) _protected["$"+values[j]] = j count[word] = count[word] + 1 # prepare to sort the word list, first we must protect # words that are also used as codes. we assign them a code # equivalent to the word itself. # e.g. if "do" falls within our encoding range # then we store keywords["do"] = "do"; # this avoids problems when decoding sorted = [None] * len(unsorted) for word in unsorted: if word in _protected and isinstance(_protected[word], int): sorted[_protected[word]] = word[1:] protected[_protected[word]] = True count[word] = 0 unsorted.sort(lambda a,b: count[b]-count[a]) j = 0 for i in range(len(sorted)): if sorted[i] is None: sorted[i] = unsorted[j][1:] j = j + 1 encoded[sorted[i]] = values[i] return {'sorted': sorted, 'encoded': encoded, 'protected': protected} def encodePrivate(self, charCode): return "_"+str(charCode) def encodeSpecialChars(self, script): parser = ParseMaster() # replace: $name -> n, $$name -> $$na def repl(match, offset): #print offset, match.groups() length = len(match.group(offset + 2)) start = length - max(length - len(match.group(offset + 3)), 0) return match.group(offset + 1)[start:start+length] + match.group(offset + 4) parser.add(r"""((\$+)([a-zA-Z\$_]+))(\d*)""", repl) # replace: _name -> _0, double-underscore (__name) is ignored regexp = r"""\b_[A-Za-z\d]\w*""" # build the word list keywords = self.analyze(script, regexp, self.encodePrivate) # quick ref encoded = keywords['encoded'] def repl(match, offset): return encoded.get(match.group(offset), "") parser.add(regexp, repl) return parser.execute(script) # build the boot function used for loading and decoding def bootStrap(self, packed, keywords, encoding, fastDecode): ENCODE = re.compile(r"""\$encode\(\$count\)""") # $packed: the packed script #packed = self.escape(packed) #packed = [packed[x*10000:(x+1)*10000] for x in range((len(packed)/10000)+1)] #packed = "'" + "'+\n'".join(packed) + "'\n" packed = "'" + self.escape(packed) + "'" # $count: number of words contained in the script count = len(keywords['sorted']) # $ascii: base for encoding ascii = min(count, encoding) or 1 # $keywords: list of words contained in the script for i in keywords['protected']: keywords['sorted'][i] = "" # convert from a string to an array keywords = "'" + "|".join(keywords['sorted']) + "'.split('|')" encoding_functions = { 10: """ function($charCode) { return $charCode; }""", 36: """ function($charCode) { return $charCode.toString(36); }""", 62: """ function($charCode) { return ($charCode < _encoding ? "" : arguments.callee(parseInt($charCode / _encoding))) + (($charCode = $charCode % _encoding) > 35 ? String.fromCharCode($charCode + 29) : $charCode.toString(36)); }""", 95: """ function($charCode) { return ($charCode < _encoding ? "" : arguments.callee($charCode / _encoding)) + String.fromCharCode($charCode % _encoding + 161); }""" } # $encode: encoding function (used for decoding the script) encode = encoding_functions[encoding] encode = encode.replace('_encoding',"$ascii") encode = encode.replace('arguments.callee', "$encode") if ascii > 10: inline = "$count.toString($ascii)" else: inline = "$count" # $decode: code snippet to speed up decoding if fastDecode: # create the decoder decode = r"""// does the browser support String.replace where the // replacement value is a function? if (!''.replace(/^/, String)) { // decode all the values we need while ($count--) { $decode[$encode($count)] = $keywords[$count] || $encode($count); } // global replacement function $keywords = [function($encoded){return $decode[$encoded]}]; // generic match $encode = function(){return'\\w+'}; // reset the loop counter - we are now doing a global replace $count = 1; }""" if encoding > 62: decode = decode.replace('\\\\w', "[\\xa1-\\xff]") else: # perform the encoding inline for lower ascii values if ascii < 36: decode = ENCODE.sub(inline, decode) # special case: when $count==0 there ar no keywords. i want to keep # the basic shape of the unpacking funcion so i'll frig the code... if not count: raise NotImplemented #) $decode = $decode.replace(/(\$count)\s*=\s*1/, "$1=0"); # boot function unpack = r"""function($packed, $ascii, $count, $keywords, $encode, $decode) { while ($count--) { if ($keywords[$count]) { $packed = $packed.replace(new RegExp("\\b" + $encode($count) + "\\b", "g"), $keywords[$count]); } } return $packed; }""" if fastDecode: # insert the decoder #unpack = re.sub(r"""\{""", "{" + decode + ";", unpack) unpack = unpack.replace('{', "{" + decode + ";", 1) if encoding > 62: # high-ascii # get rid of the word-boundaries for regexp matches unpack = re.sub(r"""'\\\\b'\s*\+|\+\s*'\\\\b'""", "", unpack) if ascii > 36 or encoding > 62 or fastDecode: # insert the encode function #unpack = re.sub(r"""\{""", "{$encode=" + encode + ";", unpack) unpack = unpack.replace('{', "{$encode=" + encode + ";", 1) else: # perform the encoding inline unpack = ENCODE.sub(inline, unpack) # pack the boot function too unpack = self.pack(unpack, 0, False, True) # arguments params = [packed, str(ascii), str(count), keywords] if fastDecode: # insert placeholders for the decoder params.extend(['0', "{}"]) # the whole thing return "eval(" + unpack + "(" + ",".join(params) + "))\n"; def pack(self, script, encoding=0, fastDecode=False, specialChars=False, compaction=True): script = script+"\n" self._encoding = encoding self._fastDecode = fastDecode if specialChars: script = self.specialCompression(script) script = self.encodeSpecialChars(script) else: if compaction: script = self.basicCompression(script) if encoding: script = self.encodeKeywords(script, encoding, fastDecode) return script def run(): p = JavaScriptPacker() script = open(sys.argv[1]).read() result = p.pack(script, encoding=62, fastDecode=True, compaction=True) open(sys.argv[1] + 'pack', 'w').write(result) def run1(): test_scripts = [] test_scripts.append(("""// ----------------------------------------------------------------------- // public interface // ----------------------------------------------------------------------- cssQuery.toString = function() { return "function cssQuery() {\n [version " + version + "]\n}"; };""", 0, False, False, """cssQuery.toString=function(){return"function cssQuery() {\n [version "+version+"]\n}"};""")) test_scripts.append(("""function test(_localvar) { var $name = 'foo'; var $$dummy = 2; return $name + $$dummy; }""", 0, False, True, """function test(_0){var n='foo';var du=2;return n+du}""")) test_scripts.append(("""function _test($localvar) { var $name = 1; var _dummy = 2; var __foo = 3; return $name + _dummy + $localvar + __foo; }""", 0, False, True, """function _1(l){var n=1;var _0=2;var __foo=3;return n+_0+l+__foo}""")) test_scripts.append(("""function _test($localvar) { var $name = 1; var _dummy = 2; var __foo = 3; return $name + _dummy + $localvar + __foo; } function _bar(_ocalvar) { var $name = 1; var _dummy = 2; var __foo = 3; return $name + _dummy + $localvar + __foo; }""", 0, False, True, """function _3(l){var n=1;var _0=2;var __foo=3;return n+_0+l+__foo}function _2(_1){var n=1;var _0=2;var __foo=3;return n+_0+l+__foo}""")) test_scripts.append(("cssQuery1.js", 0, False, False, "cssQuery1-p1.js")) test_scripts.append(("cssQuery.js", 0, False, False, "cssQuery-p1.js")) test_scripts.append(("pack.js", 0, False, False, "pack-p1.js")) test_scripts.append(("cssQuery.js", 0, False, True, "cssQuery-p2.js")) # the following ones are different, because javascript might use an # unstable sort algorithm while python uses an stable sort algorithm test_scripts.append(("pack.js", 0, False, True, "pack-p2.js")) test_scripts.append(("test.js", 0, False, True, """function _4(l){var n=1;var _0=2;var __foo=3;return n+_0+l+__foo}function _3(_1){var n=1;var _2=2;var __foo=3;return n+_2+l+__foo}""")) test_scripts.append(("test.js", 10, False, False, """eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp("\\b"+e(c)+"\\b","g"),k[c])}}return p}('8 13($6){0 $4=1;0 7=2;0 5=3;9 $4+7+$6+5}8 11(12){0 $4=1;0 10=2;0 5=3;9 $4+10+$6+5}',10,14,'var||||name|__foo|localvar|_dummy|function|return|_2|_bar|_ocalvar|_test'.split('|'))) """)) test_scripts.append(("test.js", 62, False, False, """eval(function(p,a,c,k,e,d){while(c--){if(k[c]){p=p.replace(new RegExp("\\b"+e(c)+"\\b","g"),k[c])}}return p}('8 d($6){0 $4=1;0 7=2;0 5=3;9 $4+7+$6+5}8 b(c){0 $4=1;0 a=2;0 5=3;9 $4+a+$6+5}',14,14,'var||||name|__foo|localvar|_dummy|function|return|_2|_bar|_ocalvar|_test'.split('|'))) """)) test_scripts.append(("test.js", 95, False, False, "test-p4.js")) test_scripts.append(("cssQuery.js", 0, False, True, "cssQuery-p3.js")) test_scripts.append(("cssQuery.js", 62, False, True, "cssQuery-p4.js")) import difflib p = JavaScriptPacker() for script, encoding, fastDecode, specialChars, expected in test_scripts: if os.path.exists(script): _script = open(script).read() else: _script = script if os.path.exists(expected): _expected = open(expected).read() else: _expected = expected print script[:20], encoding, fastDecode, specialChars, expected[:20] print "="*40 result = p.pack(_script, encoding, fastDecode, specialChars) print len(result), len(_script) if (result != _expected): print "ERROR!!!!!!!!!!!!!!!!" print _expected print result #print list(difflib.unified_diff(result, _expected)) if __name__=='__main__': run() dispcalGUI-1.7.1.6/dispcalGUI/lang/000755 000765 000000 00000000000 12266723170 016531 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/lib/000755 000765 000000 00000000000 12266723170 016356 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/lib32/000755 000765 000000 00000000000 12266723170 016523 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/lib64/000755 000765 000000 00000000000 12266723170 016530 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/linear.cal000644 000765 000000 00000023304 12224371766 017551 0ustar00svpwheel000000 000000 CAL DESCRIPTOR "Argyll Device Calibration Curves" ORIGINATOR "Argyll synthcal" CREATED "Sun Oct 06 00:13:42 2013" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 3.92157e-003 3.92157e-003 3.92157e-003 3.92157e-003 7.84314e-003 7.84314e-003 7.84314e-003 7.84314e-003 0.0117647 0.0117647 0.0117647 0.0117647 0.0156863 0.0156863 0.0156863 0.0156863 0.0196078 0.0196078 0.0196078 0.0196078 0.0235294 0.0235294 0.0235294 0.0235294 0.0274510 0.0274510 0.0274510 0.0274510 0.0313725 0.0313725 0.0313725 0.0313725 0.0352941 0.0352941 0.0352941 0.0352941 0.0392157 0.0392157 0.0392157 0.0392157 0.0431373 0.0431373 0.0431373 0.0431373 0.0470588 0.0470588 0.0470588 0.0470588 0.0509804 0.0509804 0.0509804 0.0509804 0.0549020 0.0549020 0.0549020 0.0549020 0.0588235 0.0588235 0.0588235 0.0588235 0.0627451 0.0627451 0.0627451 0.0627451 0.0666667 0.0666667 0.0666667 0.0666667 0.0705882 0.0705882 0.0705882 0.0705882 0.0745098 0.0745098 0.0745098 0.0745098 0.0784314 0.0784314 0.0784314 0.0784314 0.0823529 0.0823529 0.0823529 0.0823529 0.0862745 0.0862745 0.0862745 0.0862745 0.0901961 0.0901961 0.0901961 0.0901961 0.0941176 0.0941176 0.0941176 0.0941176 0.0980392 0.0980392 0.0980392 0.0980392 0.101961 0.101961 0.101961 0.101961 0.105882 0.105882 0.105882 0.105882 0.109804 0.109804 0.109804 0.109804 0.113725 0.113725 0.113725 0.113725 0.117647 0.117647 0.117647 0.117647 0.121569 0.121569 0.121569 0.121569 0.125490 0.125490 0.125490 0.125490 0.129412 0.129412 0.129412 0.129412 0.133333 0.133333 0.133333 0.133333 0.137255 0.137255 0.137255 0.137255 0.141176 0.141176 0.141176 0.141176 0.145098 0.145098 0.145098 0.145098 0.149020 0.149020 0.149020 0.149020 0.152941 0.152941 0.152941 0.152941 0.156863 0.156863 0.156863 0.156863 0.160784 0.160784 0.160784 0.160784 0.164706 0.164706 0.164706 0.164706 0.168627 0.168627 0.168627 0.168627 0.172549 0.172549 0.172549 0.172549 0.176471 0.176471 0.176471 0.176471 0.180392 0.180392 0.180392 0.180392 0.184314 0.184314 0.184314 0.184314 0.188235 0.188235 0.188235 0.188235 0.192157 0.192157 0.192157 0.192157 0.196078 0.196078 0.196078 0.196078 0.200000 0.200000 0.200000 0.200000 0.203922 0.203922 0.203922 0.203922 0.207843 0.207843 0.207843 0.207843 0.211765 0.211765 0.211765 0.211765 0.215686 0.215686 0.215686 0.215686 0.219608 0.219608 0.219608 0.219608 0.223529 0.223529 0.223529 0.223529 0.227451 0.227451 0.227451 0.227451 0.231373 0.231373 0.231373 0.231373 0.235294 0.235294 0.235294 0.235294 0.239216 0.239216 0.239216 0.239216 0.243137 0.243137 0.243137 0.243137 0.247059 0.247059 0.247059 0.247059 0.250980 0.250980 0.250980 0.250980 0.254902 0.254902 0.254902 0.254902 0.258824 0.258824 0.258824 0.258824 0.262745 0.262745 0.262745 0.262745 0.266667 0.266667 0.266667 0.266667 0.270588 0.270588 0.270588 0.270588 0.274510 0.274510 0.274510 0.274510 0.278431 0.278431 0.278431 0.278431 0.282353 0.282353 0.282353 0.282353 0.286275 0.286275 0.286275 0.286275 0.290196 0.290196 0.290196 0.290196 0.294118 0.294118 0.294118 0.294118 0.298039 0.298039 0.298039 0.298039 0.301961 0.301961 0.301961 0.301961 0.305882 0.305882 0.305882 0.305882 0.309804 0.309804 0.309804 0.309804 0.313725 0.313725 0.313725 0.313725 0.317647 0.317647 0.317647 0.317647 0.321569 0.321569 0.321569 0.321569 0.325490 0.325490 0.325490 0.325490 0.329412 0.329412 0.329412 0.329412 0.333333 0.333333 0.333333 0.333333 0.337255 0.337255 0.337255 0.337255 0.341176 0.341176 0.341176 0.341176 0.345098 0.345098 0.345098 0.345098 0.349020 0.349020 0.349020 0.349020 0.352941 0.352941 0.352941 0.352941 0.356863 0.356863 0.356863 0.356863 0.360784 0.360784 0.360784 0.360784 0.364706 0.364706 0.364706 0.364706 0.368627 0.368627 0.368627 0.368627 0.372549 0.372549 0.372549 0.372549 0.376471 0.376471 0.376471 0.376471 0.380392 0.380392 0.380392 0.380392 0.384314 0.384314 0.384314 0.384314 0.388235 0.388235 0.388235 0.388235 0.392157 0.392157 0.392157 0.392157 0.396078 0.396078 0.396078 0.396078 0.400000 0.400000 0.400000 0.400000 0.403922 0.403922 0.403922 0.403922 0.407843 0.407843 0.407843 0.407843 0.411765 0.411765 0.411765 0.411765 0.415686 0.415686 0.415686 0.415686 0.419608 0.419608 0.419608 0.419608 0.423529 0.423529 0.423529 0.423529 0.427451 0.427451 0.427451 0.427451 0.431373 0.431373 0.431373 0.431373 0.435294 0.435294 0.435294 0.435294 0.439216 0.439216 0.439216 0.439216 0.443137 0.443137 0.443137 0.443137 0.447059 0.447059 0.447059 0.447059 0.450980 0.450980 0.450980 0.450980 0.454902 0.454902 0.454902 0.454902 0.458824 0.458824 0.458824 0.458824 0.462745 0.462745 0.462745 0.462745 0.466667 0.466667 0.466667 0.466667 0.470588 0.470588 0.470588 0.470588 0.474510 0.474510 0.474510 0.474510 0.478431 0.478431 0.478431 0.478431 0.482353 0.482353 0.482353 0.482353 0.486275 0.486275 0.486275 0.486275 0.490196 0.490196 0.490196 0.490196 0.494118 0.494118 0.494118 0.494118 0.498039 0.498039 0.498039 0.498039 0.501961 0.501961 0.501961 0.501961 0.505882 0.505882 0.505882 0.505882 0.509804 0.509804 0.509804 0.509804 0.513725 0.513725 0.513725 0.513725 0.517647 0.517647 0.517647 0.517647 0.521569 0.521569 0.521569 0.521569 0.525490 0.525490 0.525490 0.525490 0.529412 0.529412 0.529412 0.529412 0.533333 0.533333 0.533333 0.533333 0.537255 0.537255 0.537255 0.537255 0.541176 0.541176 0.541176 0.541176 0.545098 0.545098 0.545098 0.545098 0.549020 0.549020 0.549020 0.549020 0.552941 0.552941 0.552941 0.552941 0.556863 0.556863 0.556863 0.556863 0.560784 0.560784 0.560784 0.560784 0.564706 0.564706 0.564706 0.564706 0.568627 0.568627 0.568627 0.568627 0.572549 0.572549 0.572549 0.572549 0.576471 0.576471 0.576471 0.576471 0.580392 0.580392 0.580392 0.580392 0.584314 0.584314 0.584314 0.584314 0.588235 0.588235 0.588235 0.588235 0.592157 0.592157 0.592157 0.592157 0.596078 0.596078 0.596078 0.596078 0.600000 0.600000 0.600000 0.600000 0.603922 0.603922 0.603922 0.603922 0.607843 0.607843 0.607843 0.607843 0.611765 0.611765 0.611765 0.611765 0.615686 0.615686 0.615686 0.615686 0.619608 0.619608 0.619608 0.619608 0.623529 0.623529 0.623529 0.623529 0.627451 0.627451 0.627451 0.627451 0.631373 0.631373 0.631373 0.631373 0.635294 0.635294 0.635294 0.635294 0.639216 0.639216 0.639216 0.639216 0.643137 0.643137 0.643137 0.643137 0.647059 0.647059 0.647059 0.647059 0.650980 0.650980 0.650980 0.650980 0.654902 0.654902 0.654902 0.654902 0.658824 0.658824 0.658824 0.658824 0.662745 0.662745 0.662745 0.662745 0.666667 0.666667 0.666667 0.666667 0.670588 0.670588 0.670588 0.670588 0.674510 0.674510 0.674510 0.674510 0.678431 0.678431 0.678431 0.678431 0.682353 0.682353 0.682353 0.682353 0.686275 0.686275 0.686275 0.686275 0.690196 0.690196 0.690196 0.690196 0.694118 0.694118 0.694118 0.694118 0.698039 0.698039 0.698039 0.698039 0.701961 0.701961 0.701961 0.701961 0.705882 0.705882 0.705882 0.705882 0.709804 0.709804 0.709804 0.709804 0.713725 0.713725 0.713725 0.713725 0.717647 0.717647 0.717647 0.717647 0.721569 0.721569 0.721569 0.721569 0.725490 0.725490 0.725490 0.725490 0.729412 0.729412 0.729412 0.729412 0.733333 0.733333 0.733333 0.733333 0.737255 0.737255 0.737255 0.737255 0.741176 0.741176 0.741176 0.741176 0.745098 0.745098 0.745098 0.745098 0.749020 0.749020 0.749020 0.749020 0.752941 0.752941 0.752941 0.752941 0.756863 0.756863 0.756863 0.756863 0.760784 0.760784 0.760784 0.760784 0.764706 0.764706 0.764706 0.764706 0.768627 0.768627 0.768627 0.768627 0.772549 0.772549 0.772549 0.772549 0.776471 0.776471 0.776471 0.776471 0.780392 0.780392 0.780392 0.780392 0.784314 0.784314 0.784314 0.784314 0.788235 0.788235 0.788235 0.788235 0.792157 0.792157 0.792157 0.792157 0.796078 0.796078 0.796078 0.796078 0.800000 0.800000 0.800000 0.800000 0.803922 0.803922 0.803922 0.803922 0.807843 0.807843 0.807843 0.807843 0.811765 0.811765 0.811765 0.811765 0.815686 0.815686 0.815686 0.815686 0.819608 0.819608 0.819608 0.819608 0.823529 0.823529 0.823529 0.823529 0.827451 0.827451 0.827451 0.827451 0.831373 0.831373 0.831373 0.831373 0.835294 0.835294 0.835294 0.835294 0.839216 0.839216 0.839216 0.839216 0.843137 0.843137 0.843137 0.843137 0.847059 0.847059 0.847059 0.847059 0.850980 0.850980 0.850980 0.850980 0.854902 0.854902 0.854902 0.854902 0.858824 0.858824 0.858824 0.858824 0.862745 0.862745 0.862745 0.862745 0.866667 0.866667 0.866667 0.866667 0.870588 0.870588 0.870588 0.870588 0.874510 0.874510 0.874510 0.874510 0.878431 0.878431 0.878431 0.878431 0.882353 0.882353 0.882353 0.882353 0.886275 0.886275 0.886275 0.886275 0.890196 0.890196 0.890196 0.890196 0.894118 0.894118 0.894118 0.894118 0.898039 0.898039 0.898039 0.898039 0.901961 0.901961 0.901961 0.901961 0.905882 0.905882 0.905882 0.905882 0.909804 0.909804 0.909804 0.909804 0.913725 0.913725 0.913725 0.913725 0.917647 0.917647 0.917647 0.917647 0.921569 0.921569 0.921569 0.921569 0.925490 0.925490 0.925490 0.925490 0.929412 0.929412 0.929412 0.929412 0.933333 0.933333 0.933333 0.933333 0.937255 0.937255 0.937255 0.937255 0.941176 0.941176 0.941176 0.941176 0.945098 0.945098 0.945098 0.945098 0.949020 0.949020 0.949020 0.949020 0.952941 0.952941 0.952941 0.952941 0.956863 0.956863 0.956863 0.956863 0.960784 0.960784 0.960784 0.960784 0.964706 0.964706 0.964706 0.964706 0.968627 0.968627 0.968627 0.968627 0.972549 0.972549 0.972549 0.972549 0.976471 0.976471 0.976471 0.976471 0.980392 0.980392 0.980392 0.980392 0.984314 0.984314 0.984314 0.984314 0.988235 0.988235 0.988235 0.988235 0.992157 0.992157 0.992157 0.992157 0.996078 0.996078 0.996078 0.996078 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/localization.py000644 000765 000000 00000006335 12231523252 020650 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import __builtin__ import locale import os import demjson from config import data_dirs, defaults, getcfg, storage from debughelpers import handle_error from jsondict import JSONDict from log import safe_print from util_os import expanduseru from util_str import safe_unicode def init(set_wx_locale=False): """ Populate translation dict with found language strings and set locale. If set_wx_locale is True, set locale also for wxPython. """ langdirs = [] for dir_ in data_dirs: langdirs += [os.path.join(dir_, "lang")] for langdir in langdirs: if os.path.exists(langdir) and os.path.isdir(langdir): try: langfiles = os.listdir(langdir) except Exception, exception: safe_print(u"Warning - directory '%s' listing failed: %s" % tuple(safe_unicode(s) for s in (langdir, exception))) else: for filename in langfiles: name, ext = os.path.splitext(filename) if ext.lower() == ".json" and name.lower() not in ldict: path = os.path.join(langdir, filename) ldict[name.lower()] = JSONDict(path) if len(ldict) == 0: handle_error("Warning: No language files found. The following " "places have been searched:\n%s" % "\n".join(langdirs)) def update_defaults(): defaults.update({ "last_3dlut_path": os.path.join(expanduseru("~"), getstr("unnamed")), "last_cal_path": os.path.join(storage, getstr("unnamed")), "last_cal_or_icc_path": os.path.join(storage, getstr("unnamed")), "last_colorimeter_ti3_path": os.path.join(expanduseru("~"), getstr("unnamed")), "last_testchart_export_path": os.path.join(expanduseru("~"), getstr("unnamed")), "last_filedialog_path": os.path.join(expanduseru("~"), getstr("unnamed")), "last_icc_path": os.path.join(storage, getstr("unnamed")), "last_reference_ti3_path": os.path.join(expanduseru("~"), getstr("unnamed")), "last_ti1_path": os.path.join(storage, getstr("unnamed")), "last_ti3_path": os.path.join(storage, getstr("unnamed")), "last_vrml_path": os.path.join(storage, getstr("unnamed")) }) def getcode(): """ Get language code from config """ lcode = getcfg("lang") if not lcode in ldict: # fall back to default lcode = defaults["lang"] if not lcode in ldict: # fall back to english lcode = "en" return lcode def getstr(id_str, strvars=None, lcode=None): """ Get a translated string from the dictionary """ if not lcode: lcode = getcode() if not lcode in ldict or not id_str in ldict[lcode]: # fall back to english lcode = "en" if lcode in ldict and id_str in ldict[lcode]: lstr = ldict[lcode][id_str] if strvars is not None: if type(strvars) not in (list, tuple): strvars = (strvars, ) if lstr.count("%s") == len(strvars): lstr %= tuple(safe_unicode(s) for s in strvars) return lstr else: return id_str def gettext(text): if not catalog and defaults["lang"] in ldict: for id_str in ldict[defaults["lang"]]: lstr = ldict[defaults["lang"]][id_str] catalog[lstr] = {} catalog[lstr].id_str = id_str lcode = getcode() if catalog and text in catalog and not lcode in catalog[text]: catalog[text][lcode] = ldict[lcode].get(catalog[text].id_str, text) return catalog.get(text, {}).get(lcode, text) ldict = {} catalog = {} dispcalGUI-1.7.1.6/dispcalGUI/log.py000644 000765 000000 00000015105 12251072570 016740 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from codecs import EncodedFile from hashlib import md5 import logging import logging.handlers import os import re import sys from time import localtime, strftime, time from config import isapp, logdir from meta import name as appname from safe_print import SafePrinter, safe_print as _safe_print from util_io import StringIOu as StringIO from util_str import safe_str, safe_unicode, universal_newlines import config logging.raiseExceptions = 0 logbuffer = EncodedFile(StringIO(), "UTF-8", errors="replace") class DummyLogger(): def critical(self, msg, *args, **kwargs): pass def debug(self, msg, *args, **kwargs): pass def error(self, msg, *args, **kwargs): pass def exception(self, msg, *args, **kwargs): pass def info(self, msg, *args, **kwargs): pass def log(self, level, msg, *args, **kwargs): pass def warning(self, msg, *args, **kwargs): pass class Log(): def __call__(self, msg, fn=None): """ Log a message. Optionally use function 'fn' instead of logging.info. """ if fn is None and logging.getLogger(appname).handlers: fn = logging.getLogger(appname).info if fn: for line in universal_newlines(msg).split("\n"): fn(line) if "wx" in sys.modules: from wxaddons import wx if wx.GetApp() is not None and \ hasattr(wx.GetApp(), "frame") and \ hasattr(wx.GetApp().frame, "infoframe"): wx.CallAfter(wx.GetApp().frame.infoframe.Log, msg) def flush(self): pass def write(self, msg): self(msg.rstrip()) log = Log() class LogFile(): def __init__(self, filename, logdir=logdir): self._logger = get_file_logger(md5(safe_str(filename, "UTF-8")).hexdigest(), logdir=logdir, filename=filename) def close(self): for handler in reversed(self._logger.handlers): handler.close() self._logger.removeHandler(handler) def flush(self): for handler in self._logger.handlers: handler.flush() def write(self, msg): for line in universal_newlines(msg.rstrip()).split("\n"): self._logger.info(line) class SafeLogger(SafePrinter): """ Print and log safely, avoiding any UnicodeDe-/EncodingErrors on strings and converting all other objects to safe string representations. """ def __init__(self, log=True, print_=hasattr(sys.stdout, "isatty") and sys.stdout.isatty() and not isapp): SafePrinter.__init__(self) self.log = log self.print_ = print_ def write(self, *args, **kwargs): if kwargs.get("print_", self.print_): _safe_print(*args, **kwargs) if kwargs.get("log", self.log): kwargs.update(fn=log, encoding=None) _safe_print(*args, **kwargs) safe_log = SafeLogger(print_=False) safe_print = SafeLogger() def get_file_logger(name, level=logging.DEBUG, when="midnight", backupCount=0, logdir=logdir, filename=None): logger = logging.getLogger(name) logger.propagate = 0 logger.setLevel(level) if not filename: filename = name logfile = os.path.join(logdir, filename + ".log") for handler in logger.handlers: if (isinstance(handler, logging.handlers.TimedRotatingFileHandler) and handler.baseFilename == os.path.abspath(logfile)): return logger if not os.path.exists(logdir): try: os.makedirs(logdir) except Exception, exception: safe_print(u"Warning - log directory '%s' could not be created: %s" % tuple(safe_unicode(s) for s in (logdir, exception))) elif os.path.exists(logfile): try: logstat = os.stat(logfile) except Exception, exception: safe_print(u"Warning - os.stat('%s') failed: %s" % tuple(safe_unicode(s) for s in (logfile, exception))) else: # rollover needed? try: mtime = localtime(logstat.st_mtime) except ValueError, exception: # This can happen on Windows because localtime() is buggy on # that platform. See: # http://stackoverflow.com/questions/4434629/zipfile-module-in-python-runtime-problems # http://bugs.python.org/issue1760357 # To overcome this problem, we ignore the real modification # date and force a rollover mtime = localtime(time() - 60 * 60 * 24) if localtime()[:3] > mtime[:3]: # do rollover logbackup = logfile + strftime(".%Y-%m-%d", mtime) if os.path.exists(logbackup): try: os.remove(logbackup) except Exception, exception: safe_print(u"Warning - logfile backup '%s' could not " u"be removed during rollover: %s" % tuple(safe_unicode(s) for s in (logbackup, exception))) try: os.rename(logfile, logbackup) except Exception, exception: safe_print(u"Warning - logfile '%s' could not be renamed " u"to '%s' during rollover: %s" % tuple(safe_unicode(s) for s in (logfile, os.path.basename(logbackup), exception))) # Adapted from Python 2.6's # logging.handlers.TimedRotatingFileHandler.getFilesToDelete extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}$") baseName = os.path.basename(logfile) try: fileNames = os.listdir(logdir) except Exception, exception: safe_print(u"Warning - log directory '%s' listing failed " u"during rollover: %s" % tuple(safe_unicode(s) for s in (logdir, exception))) else: result = [] prefix = baseName + "." plen = len(prefix) for fileName in fileNames: if fileName[:plen] == prefix: suffix = fileName[plen:] if extMatch.match(suffix): result.append(os.path.join(logdir, fileName)) result.sort() if len(result) > backupCount: for logbackup in result[:len(result) - backupCount]: try: os.remove(logbackup) except Exception, exception: safe_print(u"Warning - logfile backup '%s' " u"could not be removed during " u"rollover: %s" % tuple(safe_unicode(s) for s in (logbackup, exception))) if os.path.exists(logdir): try: filehandler = logging.handlers.TimedRotatingFileHandler(logfile, when=when, backupCount=backupCount) fileformatter = logging.Formatter("%(asctime)s %(message)s") filehandler.setFormatter(fileformatter) logger.addHandler(filehandler) except Exception, exception: safe_print(u"Warning - logging to file '%s' not possible: %s" % tuple(safe_unicode(s) for s in (logfile, exception))) return logger def setup_logging(): """ Setup the logging facility. """ logger = get_file_logger(appname, logging.DEBUG, "midnight", 5) streamhandler = logging.StreamHandler(logbuffer) streamformatter = logging.Formatter("%(message)s") streamhandler.setFormatter(streamformatter) logger.addHandler(streamhandler) dispcalGUI-1.7.1.6/dispcalGUI/main.py000644 000765 000000 00000000131 12266411534 017077 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from dispcalGUI import main if __name__ == "__main__": main() dispcalGUI-1.7.1.6/dispcalGUI/meta.py000644 000765 000000 00000003334 12025152312 017076 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- """ Meta information """ import sys try: from __version__ import (BUILD_DATE as build, LASTMOD as lastmod, VERSION, VERSION_BASE, VERSION_STRING) except ImportError: build = lastmod = "0000-00-00T00:00:00.0Z" VERSION = VERSION_BASE = (0, 0, 0, 0) VERSION_STRING = ".".join(str(n) for n in VERSION) if sys.version_info[:2] < (3, ): author = "Florian Höch".decode("utf8") else: author = "Florian Höch" author_ascii = "Florian Hoech" author_email = "dispcalGUI@hoech.net" description = ("A graphical front-end for display calibration and profiling " "using Argyll CMS") longdesc = "\n".join(["Calibrates and characterizes display devices using a hardware sensor,", "driven by the open source color management system Argyll CMS.", "Supports multi-display setups and a variety of available settings like ", "customizable whitepoint, luminance, black level, tone response curve ", "as well as the creation of matrix and look-up-table ICC profiles with ", "optional gamut mapping. Calibrations and profiles can be verified ", "through measurements, and profiles can be installed to make them ", "available to color management aware applications.", "Profile installation can utilize Argyll CMS, Oyranos and/or GNOME ", "Color Manager if available, for flexible integration."]) domain = "dispcalGUI.hoech.net" name = "dispcalGUI" py_maxversion = (2, 7) py_minversion = (2, 5) version = VERSION_STRING version_lin = VERSION_STRING # Linux version_mac = VERSION_STRING # Mac OS X version_win = VERSION_STRING # Windows version_src = VERSION_STRING version_tuple = VERSION # only ints allowed and must be exactly 4 values wx_minversion = (2, 8, 6) dispcalGUI-1.7.1.6/dispcalGUI/oldnumeric.py000644 000765 000000 00000002271 12241576567 020336 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- """ Compatibility module for wxenhancedplot This is NOT a complete replacement for oldnumeric The oldnumeric module will be dropped in Numpy 1.9 """ from numpy import (add, arange, argmin, array, ceil, compress, concatenate, cos, fabs, floor, log10, maximum, minimum, pi, power, repeat, sin, sometrue, sqrt, transpose, zeros) typecodes = {'Integer':'bhil', 'Float':'fd'} def _get_precisions(typecodes): lst = [] for t in typecodes: lst.append( (zeros( (1,), t ).itemsize*8, t) ) return lst def _fill_table(typecodes, table={}): for key, value in typecodes.items(): table[key] = _get_precisions(value) return table _code_table = _fill_table(typecodes) class PrecisionError(Exception): pass def _lookup(table, key, required_bits): lst = table[key] for bits, typecode in lst: if bits >= required_bits: return typecode raise PrecisionError, key+" of "+str(required_bits)+" bits not available on this system" try: Int32 = _lookup(_code_table, 'Integer', 32) except(PrecisionError): pass try: Float64 = _lookup(_code_table, 'Float', 64) except(PrecisionError): pass Float = 'd' dispcalGUI-1.7.1.6/dispcalGUI/options.py000644 000765 000000 00000002176 12025152312 017646 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- """ Parse commandline options. """ import sys # use only ascii? ascii = "--ascii" in sys.argv[1:] # debug level (default: 0 = off) if "-d2" in sys.argv[1:] or "--debug=2" in sys.argv[1:]: debug = 2 elif "-d1" in sys.argv[1:] or "--debug=1" in sys.argv[1:] or \ "-d" in sys.argv[1:] or "--debug" in sys.argv[1:]: debug = 1 else: debug = 0 # >= 1 prints debug messages # use alternate patch preview in the testchart editor? tc_use_alternate_preview = "-ap" in sys.argv[1:] or "--alternate-preview" in \ sys.argv[1:] # test some features even if they are not available test = "-t" in sys.argv[1:] or "--test" in sys.argv[1:] test_require_sensor_cal = "-s" in sys.argv[1:] or "--test_require_sensor_cal" in sys.argv[1:] # verbosity level (default: 1) if "-v4" in sys.argv[1:] or "--verbose=4" in sys.argv[1:]: verbose = 4 elif "-v3" in sys.argv[1:] or "--verbose=3" in sys.argv[1:]: verbose = 3 elif "-v2" in sys.argv[1:] or "--verbose=2" in sys.argv[1:]: verbose = 2 elif "-v0" in sys.argv[1:] or "--verbose=0" in sys.argv[1:]: verbose = 0 # off else: verbose = 1 # >= 1 prints some status information dispcalGUI-1.7.1.6/dispcalGUI/ordereddict.py000644 000765 000000 00000015571 12025152312 020446 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from itertools import izip, imap def is_nan(obj): """ Return boolean indicating if obj is considered not a number. """ try: obj + 1 except TypeError: return True return False class OrderedDict(dict): """ Simple ordered dictionary. Compatible with Python 3's OrderedDict, though performance is inferior as the approach is different (but should be more memory efficient), and implements several sequence methods (__delslice__, __getslice__, __setslice__, index, insert, reverse, sort). """ missing = object() def __init__(self, *args, **kwargs): self._keys = [] if args or kwargs: self.update(*args, **kwargs) def __delitem__(self, key): dict.__delitem__(self, key) self._keys.remove(key) def __delslice__(self, i, j): """ Delete a range of keys. """ for key in iter(self._keys[i:j]): del self[key] def __eq__(self, other): """ od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive while comparison to a regular mapping is order-insensitive. """ if isinstance(other, OrderedDict): return len(self) == len(other) and \ all(p == q for p, q in zip(self.items(), other.items())) return dict.__eq__(self, other) def __getslice__(self, i, j): """ Get a range of keys. Return a new OrderedDict. """ keys = self._keys[i:j] return self.__class__(zip(keys, map(self.get, keys))) def __iter__(self): return iter(self._keys) def __ne__(self, other): return not self == other def __reduce__(self): 'Return state information for pickling' items = [[k, self[k]] for k in self] tmp = self._keys del self._keys inst_dict = vars(self).copy() self._keys = tmp if inst_dict: return (self.__class__, (items,), inst_dict) return self.__class__, (items,) def __repr__(self): """ od.__repr__() <==> repr(od) """ if not self: return "%s.%s()" % (self.__class__.__module__, self.__class__.__name__) return "%s.%s(%r)" % (self.__class__.__module__, self.__class__.__name__, self.items()) def __reversed__(self): """ od.__reversed__() -- return a reverse iterator over the keys """ return reversed(self._keys) def __setitem__(self, key, value): if not key in self._keys: self._keys.append(key) dict.__setitem__(self, key, value) def __setslice__(self, i, j, iterable): """ Set a range of keys. """ for key in iter(self._keys[i:j]): dict.__delitem__(self, key) self._keys[i:j] = self.__class__(iterable).keys() self.update(iterable) def clear(self): dict.clear(self) del self._keys[:] def copy(self): return self.__class__(self) def delslice(self, key1, key2): """ Like __delslice__, but takes keys instead of numerical key positions. """ if key1: if key2: del self[self.index(key1):self.index(key2)] else: del self[self.index(key1):] elif key2: del self[:self.index(key2)] else: self.clear() @classmethod def fromkeys(cls, iterable, value=None): """ Return new dict with keys from S and values equal to v. v defaults to None. """ d = cls() for key in iterable: d[key] = value return d def getslice(self, key1, key2): """ Like __getslice__, but takes keys instead of numerical key positions. """ if key1: if key2: return self[self.index(key1):self.index(key2)] else: return self[self.index(key1):] elif key2: return self[:self.index(key2)] else: return self.copy() def index(self, key, start=0, stop=missing): """ Return numerical position of key. Raise KeyError if the key is not present. """ if start != 0 or stop is not OrderedDict.missing: if stop is not OrderedDict.missing: iterable = self._keys[start:stop] else: iterable = self._keys[start:] else: iterable = self._keys if not key in iterable: raise KeyError(key) return self._keys.index(key) def insert(self, i, key, value): """ Insert key before index and assign value to self[key]. If the key is already present, it is overwritten. """ if key in self: del self[key] self._keys.insert(i, key) dict.__setitem__(self, key, value) def items(self): return zip(self._keys, self.values()) def iteritems(self): return izip(self._keys, self.itervalues()) iterkeys = __iter__ def itervalues(self): return imap(self.get, self._keys) def key(self, value, start=0, stop=missing): """ Return key of first value. Raise ValueError if the value is not present. """ if start != 0 or stop is not OrderedDict.missing: if stop is not OrderedDict.missing: iterable = self[start:stop] else: iterable = self[start:] else: iterable = self for item in iterable.iteritems(): if item[1] == value: return item[0] raise ValueError(value) def keys(self): return self._keys[:] def pop(self, key, *args): if key in self: self._keys.remove(key) return dict.pop(self, key, *args) def popitem(self, last=True): """ od.popitem() -> (k, v), return and remove a (key, value) pair. Pairs are returned in LIFO order if last is true or FIFO order if false. """ if last: key = self._keys[-1] else: key = self._keys[0] return key, self.pop(key) def rename(self, key, name): """ Rename a key in-place. """ i = self.index(key) value = self.pop(key) self.insert(i, name, value) def reverse(self): """ Reverse keys in-place. """ self._keys.reverse() def setdefault(self, key, value=None): if not key in self: self[key] = value return self[key] def setslice(self, key1, key2, iterable): """ Like __setslice__, but takes keys instead of numerical key positions. """ if key1: if key2: self[self.index(key1):self.index(key2)] = iterable else: self[self.index(key1):] = iterable elif key2: self[:self.index(key2)] = iterable else: self[:] = iterable def sort(self, *args, **kwargs): """ Sort keys in-place. """ self._keys.sort(*args, **kwargs) def update(self, *args, **kwargs): if len(args) > 1: raise TypeError("update expected at most 1 arguments, got %i" % len(args)) for iterable in args + tuple(kwargs.items()): if hasattr(iterable, "iteritems"): self.update(iterable.iteritems()) elif hasattr(iterable, "keys"): for key in iterable.keys(): self[key] = iterable[key] else: for key, val in iterable: self[key] = val def values(self): return map(self.get, self._keys) __init__.__doc__ = dict.__init__.__doc__ __delitem__.__doc__ = dict.__delitem__.__doc__ __iter__.__doc__ = dict.__iter__.__doc__ __setitem__.__doc__ = dict.__setitem__.__doc__ clear.__doc__ = dict.clear.__doc__ copy.__doc__ = dict.copy.__doc__ items.__doc__ = dict.items.__doc__ iteritems.__doc__ = dict.iteritems.__doc__ itervalues.__doc__ = dict.itervalues.__doc__ keys.__doc__ = dict.keys.__doc__ pop.__doc__ = dict.pop.__doc__ setdefault.__doc__ = dict.setdefault.__doc__ update.__doc__ = dict.update.__doc__ values.__doc__ = dict.values.__doc__ dispcalGUI-1.7.1.6/dispcalGUI/pnp.ids000644 000765 000000 00000153417 12224371766 017125 0ustar00svpwheel000000 000000 AAA Avolites Ltd AAE Anatek Electronics Inc. AAT Ann Arbor Technologies ABA ABBAHOME INC. ABC AboCom System Inc ABD Allen Bradley Company ABE Alcatel Bell ABO D-Link Systems Inc ABT Anchor Bay Technologies, Inc. ABV Advanced Research Technology ACA Ariel Corporation ACB Aculab Ltd ACC Accton Technology Corporation ACD AWETA BV ACE Actek Engineering Pty Ltd ACG A&R Cambridge Ltd ACH Archtek Telecom Corporation ACI Ancor Communications Inc ACK Acksys ACL Apricot Computers ACM Acroloop Motion Control Systems Inc ACO Allion Computer Inc. ACP Aspen Tech Inc ACR Acer Technologies ACS Altos Computer Systems ACT Applied Creative Technology ACU Acculogic ACV ActivCard S.A ADA Addi-Data GmbH ADB Aldebbaron ADC Acnhor Datacomm ADD Advanced Peripheral Devices Inc ADE Arithmos, Inc. ADH Aerodata Holdings Ltd ADI ADI Systems Inc ADK Adtek System Science Company Ltd ADL ASTRA Security Products Ltd ADM Ad Lib MultiMedia Inc ADN Analog & Digital Devices Tel. Inc ADP Adaptec Inc ADR Nasa Ames Research Center ADS Analog Devices Inc ADT Adtek ADT Aved Display Technologies ADV Advanced Micro Devices Inc ADX Adax Inc AEC Antex Electronics Corporation AED Advanced Electronic Designs, Inc. AEI Actiontec Electric Inc AEJ Alpha Electronics Company AEM ASEM S.p.A. AEN Avencall AEP Aetas Peripheral International AET Aethra Telecomunicazioni S.r.l. AFA Alfa Inc AGC Beijing Aerospace Golden Card Electronic Engineering Co.,Ltd. AGI Artish Graphics Inc AGL Argolis AGM Advan Int'l Corporation AGT Agilent Technologies AHC Advantech Co., Ltd. AIC Arnos Insturments & Computer Systems AIE Altmann Industrieelektronik AII Amptron International Inc. AIL Altos India Ltd AIM AIMS Lab Inc AIR Advanced Integ. Research Inc AIS Alien Internet Services AIW Aiwa Company Ltd AIX ALTINEX, INC. AJA AJA Video Systems, Inc. AKB Akebia Ltd AKE AKAMI Electric Co.,Ltd AKI AKIA Corporation AKL AMiT Ltd AKM Asahi Kasei Microsystems Company Ltd AKP Atom Komplex Prylad AKY Askey Computer Corporation ALA Alacron Inc ALC Altec Corporation ALD In4S Inc ALG Realtek Semiconductor Corp. ALH AL Systems ALI Acer Labs ALJ Altec Lansing ALK Acrolink Inc ALL Alliance Semiconductor Corporation ALM Acutec Ltd. ALN Alana Technologies ALO Algolith Inc. ALP Alps Electric Company Ltd ALR Advanced Logic ALS Avance Logic Inc ALS Texas Advanced optoelectronics Solutions, Inc ALT Altra ALV AlphaView LCD ALX ALEXON Co.,Ltd. AMA Asia Microelectronic Development Inc AMB Ambient Technologies, Inc. AMC Attachmate Corporation AMD Amdek Corporation AMI American Megatrends Inc AML Anderson Multimedia Communications (HK) Limited AMN Amimon LTD. AMO Amino Technologies PLC and Amino Communications Limited AMP AMP Inc AMS ARMSTEL, Inc. AMT AMT International Industry AMX AMX LLC ANA Anakron ANC Ancot AND Adtran Inc ANI Anigma Inc ANK Anko Electronic Company Ltd ANL Analogix Semiconductor, Inc ANO Anorad Corporation ANP Andrew Network Production ANR ANR Ltd ANS Ansel Communication Company ANT Ace CAD Enterprise Company Ltd ANX Acer Netxus Inc AOA AOpen Inc. AOE Advanced Optics Electronics, Inc. AOL America OnLine AOT Alcatel APC American Power Conversion APD AppliAdata APE Alpine Electronics, Inc. APG Horner Electric Inc API A Plus Info Corporation APL Aplicom Oy APM Applied Memory Tech APN Appian Tech Inc APP Apple Computer Inc APR Aprilia s.p.a. APS Autologic Inc APT Audio Processing Technology Ltd APV A+V Link APX AP Designs Ltd ARC Alta Research Corporation ARE ICET S.p.A. ARG Argus Electronics Co., LTD ARI Argosy Research Inc ARK Ark Logic Inc ARL Arlotto Comnet Inc ARM Arima ARO Poso International B.V. ARS Arescom Inc ART Corion Industrial Corporation ASC Ascom Strategic Technology Unit ASD USC Information Sciences Institute ASE AseV Display Labs ASI Ahead Systems ASK Ask A/S ASL AccuScene Corporation Ltd ASM ASEM S.p.A. ASN Asante Tech Inc ASP ASP Microelectronics Ltd AST AST Research Inc ASU Asuscom Network Inc ASX AudioScience ASY Rockwell Collins / Airshow Systems ATA Allied Telesyn International (Asia) Pte Ltd ATC Ably-Tech Corporation ATD Alpha Telecom Inc ATE Innovate Ltd ATH Athena Informatica S.R.L. ATI Allied Telesis KK ATK Allied Telesyn Int'l ATL Arcus Technology Ltd ATM ATM Ltd ATN Athena Smartcard Solutions Ltd. ATO ASTRO DESIGN, INC. ATP Alpha-Top Corporation ATT AT&T ATV Office Depot, Inc. ATX Athenix Corporation AUI Alps Electric Inc AUO AU Optronics AUR Aureal Semiconductor AUT Autotime Corporation AVA Avaya Communication AVC Auravision Corporation AVD Avid Electronics Corporation AVE Add Value Enterpises (Asia) Pte Ltd AVI Nippon Avionics Co.,Ltd AVL Avalue Technology Inc. AVM AVM GmbH AVN Advance Computer Corporation AVO Avocent Corporation AVR AVer Information Inc. AVT Avtek (Electronics) Pty Ltd AVV SBS Technologies (Canada), Inc. (was Avvida Systems, Inc.) AVX A/Vaux Electronics AVX AVerMedia Technologies, Inc. AWC Access Works Comm Inc AWL Aironet Wireless Communications, Inc AWS Wave Systems AXB Adrienne Electronics Corporation AXC AXIOMTEK CO., LTD. AXE D-Link Systems Inc AXI American Magnetics AXL Axel AXO Axonic Labs LLC AXP American Express AXT Axtend Technologies Inc AXX Axxon Computer Corporation AXY AXYZ Automation Services, Inc AYD Aydin Displays AYR Airlib, Inc AZM AZ Middelheim - Radiotherapy AZT Aztech Systems Ltd BAC Biometric Access Corporation BAN Banyan BBB an-najah university BBH B&Bh BBL Brain Boxes Limited BCC Beaver Computer Corporaton BCD Barco GmbH BCM Broadcom BCQ Deutsche Telekom Berkom GmbH BCS Booria CAD/CAM systems BDO Brahler ICS BDR Blonder Tongue Labs, Inc. BDS Barco Display Systems BEC Elektro Beckhoff GmbH BEI Beckworth Enterprises Inc BEK Beko Elektronik A.S. BEL Beltronic Industrieelektronik GmbH BEO Baug & Olufsen BFE B.F. Engineering Corporation BGB Barco Graphics N.V BGT Budzetron Inc BHZ BitHeadz, Inc. BIC Big Island Communications BII Boeckeler Instruments Inc BIL Billion Electric Company Ltd BIO BioLink Technologies International, Inc. BIT Bit 3 Computer BLI Busicom BLN BioLink Technologies BLP Bloomberg L.P. BMD Blackmagic Design BMI Benson Medical Instruments Company BML BIOMED Lab BMS BIOMEDISYS BNE Bull AB BNK Banksia Tech Pty Ltd BNO Bang & Olufsen BNS Boulder Nonlinear Systems BOB Rainy Orchard BOE BOE BOI NINGBO BOIGLE DIGITAL TECHNOLOGY CO.,LTD BOS BOS BPD Micro Solutions, Inc. BPU Best Power BRA Braemac Pty Ltd BRC BARC BRG Bridge Information Co., Ltd BRI Boca Research Inc BRM Braemar Inc BRO BROTHER INDUSTRIES,LTD. BSE Bose Corporation BSL Biomedical Systems Laboratory BSN BRIGHTSIGN, LLC BST BodySound Technologies, Inc. BTC Bit 3 Computer BTE Brilliant Technology BTF Bitfield Oy BTI BusTech Inc BTO BioTao Ltd BUF Yasuhiko Shirai Melco Inc BUG B.U.G., Inc. BUJ ATI Tech Inc BUL Bull BUR Bernecker & Rainer Ind-Eletronik GmbH BUS BusTek BUT 21ST CENTURY ENTERTAINMENT BWK Bitworks Inc. BXE Buxco Electronics BYD byd:sign corporation CAA Castles Automation Co., Ltd CAC CA & F Elettronica CAG CalComp CAI Canon Inc. CAL Acon CAM Cambridge Audio CAN Canopus Company Ltd CAN Carrera Computer Inc CAN CORNEA CAR Cardinal Company Ltd CAS CASIO COMPUTER CO.,LTD CAT Consultancy in Advanced Technology CAV Cavium Networks, Inc CBI ComputerBoards Inc CBR Cebra Tech A/S CBT Cabletime Ltd CBX Cybex Computer Products Corporation CCC C-Cube Microsystems CCI Cache CCJ CONTEC CO.,LTD. CCL CCL/ITRI CCP Capetronic USA Inc CDC Core Dynamics Corporation CDD Convergent Data Devices CDE Colin.de CDG Christie Digital Systems Inc CDI Concept Development Inc CDK Cray Communications CDN Codenoll Technical Corporation CDP CalComp CDS Computer Diagnostic Systems CDT IBM Corporation CDV Convergent Design Inc. CEA Consumer Electronics Association CEC Chicony Electronics Company Ltd CED Cambridge Electronic Design Ltd CEF Cefar Digital Vision CEI Crestron Electronics, Inc. CEM MEC Electronics GmbH CEN Centurion Technologies P/L CEP C-DAC CER Ceronix CET TEC CORPORATION CFG Atlantis CGA Chunghwa Picture Tubes, LTD CGS Chyron Corp CGT congatec AG CHA Chase Research PLC CHC Chic Technology Corp. CHD ChangHong Electric Co.,Ltd CHE Acer Inc CHG Sichuan Changhong Electric CO, LTD. CHI Chrontel Inc CHL Chloride-R&D CHM CHIC TECHNOLOGY CORP. CHO Sichuang Changhong Corporation CHP CH Products CHS Agentur Chairos CHT Chunghwa Picture Tubes,LTD. CHY Cherry GmbH CIC Comm. Intelligence Corporation CII Cromack Industries Inc CIL Citicom Infotech Private Limited CIN Citron GmbH CIP Ciprico Inc CIR Cirrus Logic Inc CIS Cisco Systems Inc CIT Citifax Limited CKC The Concept Keyboard Company Ltd CKJ Carina System Co., Ltd. CLA Clarion Company Ltd CLD COMMAT L.t.d. CLE Classe Audio CLG CoreLogic CLI Cirrus Logic Inc CLM CrystaLake Multimedia CLO Clone Computers CLT automated computer control systems CLV Clevo Company CLX CardLogix CMC CMC Ltd CMD Colorado MicroDisplay, Inc. CMG Chenming Mold Ind. Corp. CMI C-Media Electronics CMM Comtime GmbH CMN Chimei Innolux Corporation CMO Chi Mei Optoelectronics corp. CMR Cambridge Research Systems Ltd CMS CompuMaster Srl CMX Comex Electronics AB CNB American Power Conversion CNC Alvedon Computers Ltd CNE Cine-tal CNI Connect Int'l A/S CNN Canon Inc CNT COINT Multimedia Systems COB COBY Electronics Co., Ltd COD CODAN Pty. Ltd. COI Codec Inc. COL Rockwell Collins, Inc. COM Comtrol Corporation CON Contec Company Ltd COO coolux GmbH COR Corollary Inc COS CoStar Corporation COT Core Technology Inc COW Polycow Productions COX Comrex CPC Ciprico Inc CPD CompuAdd CPI Computer Peripherals Inc CPL Compal Electronics Inc CPM Capella Microsystems Inc. CPQ Compaq Computer Company CPT cPATH CPX Powermatic Data Systems CRC CONRAC GmbH CRD Cardinal Technical Inc CRE Creative Labs Inc CRI Crio Inc. CRL Creative Logic CRN Cornerstone Imaging CRO Extraordinary Technologies PTY Limited CRQ Cirque Corporation CRS Crescendo Communication Inc CRV Cerevo Inc. CRX Cyrix Corporation CSB Transtex SA CSC Crystal Semiconductor CSD Cresta Systems Inc CSE Concept Solutions & Engineering CSI Cabletron System Inc CSM Cosmic Engineering Inc. CSO California Institute of Technology CSS CSS Laboratories CST CSTI Inc CTA CoSystems Inc CTC CTC Communication Development Company Ltd CTE Chunghwa Telecom Co., Ltd. CTL Creative Technology Ltd CTM Computerm Corporation CTN Computone Products CTP Computer Technology Corporation CTS Comtec Systems Co., Ltd. CTX Creatix Polymedia GmbH CUB Cubix Corporation CUK Calibre UK Ltd CVA Covia Inc. CVI Colorado Video, Inc. CVS Clarity Visual Systems CWR Connectware Inc CXT Conexant Systems CYB CyberVision CYC Cylink Corporation CYD Cyclades Corporation CYL Cyberlabs CYT Cytechinfo Inc CYV Cyviz AS CYW Cyberware CYX Cyrix Corporation CZE Carl Zeiss AG DAC Digital Acoustics Corporation DAE Digatron Industrie Elektronik GmbH DAI DAIS SET Ltd. DAK Daktronics DAL Digital Audio Labs Inc DAN Danelec Marine A/S DAS DAVIS AS DAT Datel Inc DAU Daou Tech Inc DAV Davicom Semiconductor Inc DAW DA2 Technologies Inc DAX Data Apex Ltd DBD Diebold Inc. DBI DigiBoard Inc DBK Databook Inc DBL Doble Engineering Company DBN DB Networks Inc DCA Digital Communications Association DCC Dale Computer Corporation DCD Datacast LLC DCE dSPACE GmbH DCI Concepts Inc DCL Dynamic Controls Ltd DCM DCM Data Products DCO Dialogue Technology Corporation DCR Decros Ltd DCS Diamond Computer Systems Inc DCT Dancall Telecom A/S DCV Datatronics Technology Inc DDA DA2 Technologies Corporation DDD Danka Data Devices DDE Datasat Digital Entertainment DDI Data Display AG DDS Barco, n.v. DDT Datadesk Technologies Inc DDV Delta Information Systems, Inc DEC Digital Equipment Corporation DEI Deico Electronics DEL Dell Inc. DEN Densitron Computers Ltd DEX idex displays DFI DFI DFK SharkTec A/S DFT DEI Holdings dba Definitive Technology DGA Digiital Arts Inc DGC Data General Corporation DGI DIGI International DGK DugoTech Co., LTD DGP Digicorp European sales S.A. DGS Diagsoft Inc DGT Dearborn Group Technology DGT The Dearborn Group DHP DH Print DHQ Quadram DHT Projectavision Inc DIA Diadem DIG Digicom S.p.A. DII Dataq Instruments Inc DIM dPict Imaging, Inc. DIN Daintelecom Co., Ltd DIS Diseda S.A. DIT Dragon Information Technology DJE Capstone Visual Product Development DJP Maygay Machines, Ltd DKY Datakey Inc DLB Dolby Laboratories Inc. DLC Diamond Lane Comm. Corporation DLG Digital-Logic GmbH DLK D-Link Systems Inc DLL Dell Inc DLT Digitelec Informatique Park Cadera DMB Digicom Systems Inc DMC Dune Microsystems Corporation DMM Dimond Multimedia Systems Inc DMP D&M Holdings Inc, Professional Business Company DMS DOME imaging systems DMT Distributed Management Task Force, Inc. (DMTF) DMV NDS Ltd DNA DNA Enterprises, Inc. DNG Apache Micro Peripherals Inc DNI Deterministic Networks Inc. DNT Dr. Neuhous Telekommunikation GmbH DNV DiCon DOL Dolman Technologies Group Inc DOM Dome Imaging Systems DON DENON, Ltd. DOT Dotronic Mikroelektronik GmbH DPA DigiTalk Pro AV DPC Delta Electronics Inc DPI DocuPoint DPL Digital Projection Limited DPM ADPM Synthesis sas DPS Digital Processing Systems DPT DPT DPX DpiX, Inc. DQB Datacube Inc DRB Dr. Bott KG DRC Data Ray Corp. DRD DIGITAL REFLECTION INC. DRI Data Race Inc DRS DRS Defense Solutions, LLC DSD DS Multimedia Pte Ltd DSI Digitan Systems Inc DSM DSM Digital Services GmbH DSP Domain Technology Inc DTA DELTATEC DTC DTC Tech Corporation DTE Dimension Technologies, Inc. DTI Diversified Technology, Inc. DTK Dynax Electronics (HK) Ltd DTL e-Net Inc DTN Datang Telephone Co DTO Deutsche Thomson OHG DTT Design & Test Technology, Inc. DTX Data Translation DUA Dosch & Amand GmbH & Company KG DUN NCR Corporation DVD Dictaphone Corporation DVL Devolo AG DVS Digital Video System DVT Data Video DWE Daewoo Electronics Company Ltd DXC Digipronix Control Systems DXD DECIMATOR DESIGN PTY LTD DXL Dextera Labs Inc DXP Data Expert Corporation DXS Signet DYC Dycam Inc DYM Dymo-CoStar Corporation DYN Askey Computer Corporation DYX Dynax Electronics (HK) Ltd EAS Evans and Sutherland Computer EBH Data Price Informatica EBT HUALONG TECHNOLOGY CO., LTD ECA Electro Cam Corp. ECC ESSential Comm. Corporation ECI Enciris Technologies ECK Eugene Chukhlomin Sole Proprietorship, d.b.a. ECL Excel Company Ltd ECM E-Cmos Tech Corporation ECO Echo Speech Corporation ECP Elecom Company Ltd ECS Elitegroup Computer Systems Company Ltd ECT Enciris Technologies EDC e.Digital Corporation EDG Electronic-Design GmbH EDI Edimax Tech. Company Ltd EDM EDMI EDT Emerging Display Technologies Corp EEE ET&T Technology Company Ltd EEH EEH Datalink GmbH EEP E.E.P.D. GmbH EES EE Solutions, Inc. EGA Elgato Systems LLC EGD EIZO GmbH Display Technologies EGL Eagle Technology EGN Egenera, Inc. EGO Ergo Electronics EHJ Epson Research EHN Enhansoft EIC Eicon Technology Corporation EKA MagTek Inc. EKC Eastman Kodak Company EKS EKSEN YAZILIM ELA ELAD srl ELC Electro Scientific Ind ELE Elecom Company Ltd ELG Elmeg GmbH Kommunikationstechnik ELI Edsun Laboratories ELL Electrosonic Ltd ELM Elmic Systems Inc ELO Elo TouchSystems Inc ELO Tyco Electronics ELS ELSA GmbH ELT Element Labs, Inc. ELX Elonex PLC EMB Embedded computing inc ltd EMC eMicro Corporation EME EMiNE TECHNOLOGY COMPANY, LTD. EMG EMG Consultants Inc EMI Ex Machina Inc EMK Emcore Corporation EMO ELMO COMPANY, LIMITED EMU Emulex Corporation ENC Eizo Nanao Corporation END ENIDAN Technologies Ltd ENE ENE Technology Inc. ENI Efficient Networks ENS Ensoniq Corporation ENT Enterprise Comm. & Computing Inc EPC Empac EPH Epiphan Systems Inc. EPI Envision Peripherals, Inc EPN EPiCON Inc. EPS KEPS EQP Equipe Electronics Ltd. EQX Equinox Systems Inc ERG Ergo System ERI Ericsson Mobile Communications AB ERN Ericsson, Inc. ERP Euraplan GmbH ERT Escort Insturments Corporation ESA Elbit Systems of America ESC Eden Sistemas de Computacao S/A ESD Ensemble Designs, Inc ESG ELCON Systemtechnik GmbH ESI Extended Systems, Inc. ESK ES&S ESL Esterline Technologies ESN eSATURNUS ESS ESS Technology Inc EST Embedded Solution Technology ESY E-Systems Inc ETC Everton Technology Company Ltd ETD ELAN MICROELECTRONICS CORPORATION ETH Etherboot Project ETI Eclipse Tech Inc ETK eTEK Labs Inc. ETL Evertz Microsystems Ltd. ETS Electronic Trade Solutions Ltd ETT E-Tech Inc EUT Ericsson Mobile Networks B.V. EVE Advanced Micro Peripherals Ltd EVI eviateg GmbH EVX Everex EXA Exabyte EXC Excession Audio EXI Exide Electronics EXN RGB Systems, Inc. dba Extron Electronics EXP Data Export Corporation EXT Exatech Computadores & Servicos Ltda EXX Exxact GmbH EXY Exterity Ltd EYE eyevis GmbH EZE EzE Technologies EZP Storm Technology FAR Farallon Computing FBI Interface Corporation FCB Furukawa Electric Company Ltd FCG First International Computer Ltd FCS Focus Enhancements, Inc. FDC Future Domain FDT Fujitsu Display Technologies Corp. FEC FURUNO ELECTRIC CO., LTD. FEL Fellowes & Questec FEN Fen Systems Ltd. FER Ferranti Int'L FFC FUJIFILM Corporation FFI Fairfield Industries FGD Lisa Draexlmaier GmbH FGL Fujitsu General Limited. FHL FHLP FIC Formosa Industrial Computing Inc FIL Forefront Int'l Ltd FIN Finecom Co., Ltd. FIR Chaplet Systems Inc FIS FLY-IT Simulators FIT Feature Integration Technology Inc. FJC Fujitsu Takamisawa Component Limited FJS Fujitsu Spain FJT F.J. Tieman BV FLE ADTI Media, Inc FLI Faroudja Laboratories FLY Butterfly Communications FMA Fast Multimedia AG FMC Ford Microelectronics Inc FMI Fellowes, Inc. FMI Fujitsu Microelect Inc FML Fujitsu Microelect Ltd FMZ Formoza-Altair FNC Fanuc LTD FNI Funai Electric Co., Ltd. FOA FOR-A Company Limited FOS Foss Tecator FOX HON HAI PRECISON IND.CO.,LTD. FPE Fujitsu Peripherals Ltd FPS Deltec Corporation FPX Cirel Systemes FRC Force Computers FRD Freedom Scientific BLV FRE Forvus Research Inc FRI Fibernet Research Inc FRO FARO Technologies FRS South Mountain Technologies, LTD FSC Future Systems Consulting KK FSI Fore Systems Inc FST Modesto PC Inc FTC Futuretouch Corporation FTE Frontline Test Equipment Inc. FTG FTG Data Systems FTI FastPoint Technologies, Inc. FTL FUJITSU TEN LIMITED FTN Fountain Technologies Inc FTR Mediasonic FTW MindTribe Product Engineering, Inc. FUJ Fujitsu Ltd FUN sisel muhendislik FUS Fujitsu Siemens Computers GmbH FVC First Virtual Corporation FVX C-C-C Group Plc FWA Attero Tech, LLC FWR Flat Connections Inc FXX Fuji Xerox FZC Founder Group Shenzhen Co. FZI FZI Forschungszentrum Informatik GAG Gage Applied Sciences Inc GAL Galil Motion Control GAU Gaudi Co., Ltd. GCC GCC Technologies Inc GCI Gateway Comm. Inc GCS Grey Cell Systems Ltd GDC General Datacom GDI G. Diehl ISDN GmbH GDS GDS GDT Vortex Computersysteme GmbH GED General Dynamics C4 Systems GEF GE Fanuc Embedded Systems GEH GE Intelligent Platforms - Huntsville GEM Gem Plus GEN Genesys ATE Inc GEO GEO Sense GER GERMANEERS GmbH GES GES Singapore Pte Ltd GET Getac Technology Corporation GFM GFMesstechnik GmbH GFN Gefen Inc. GGL Google Inc. GIC General Inst. Corporation GIM Guillemont International GIP GI Provision Ltd GIS AT&T Global Info Solutions GJN Grand Junction Networks GLD Goldmund - Digital Audio SA GLE AD electronics GLM Genesys Logic GLS Gadget Labs LLC GMK GMK Electronic Design GmbH GML General Information Systems GMM GMM Research Inc GMN GEMINI 2000 Ltd GMX GMX Inc GND Gennum Corporation GNN GN Nettest Inc GNZ Gunze Ltd GRA Graphica Computer GRE GOLD RAIN ENTERPRISES CORP. GRH Granch Ltd GRM Garmin International GRV Advanced Gravis GRY Robert Gray Company GSB NIPPONDENCHI CO,.LTD GSC General Standards Corporation GSM Goldstar Company Ltd GST Graphic SystemTechnology GSY Grossenbacher Systeme AG GTC Graphtec Corporation GTI Goldtouch GTK G-Tech Corporation GTM Garnet System Company Ltd GTS Geotest Marvin Test Systems Inc GTT General Touch Technology Co., Ltd. GUD Guntermann & Drunck GmbH GUZ Guzik Technical Enterprises GVC GVC Corporation GVL Global Village Communication GWI GW Instruments GWY Gateway 2000 GZE GUNZE Limited HAE Haider electronics HAI Haivision Systems Inc. HAL Halberthal HAN Hanchang System Corporation HAR Harris Corporation HAY Hayes Microcomputer Products Inc HCA DAT HCE Hitachi Consumer Electronics Co., Ltd HCL HCL America Inc HCM HCL Peripherals HCP Hitachi Computer Products Inc HCW Hauppauge Computer Works Inc HDC HardCom Elektronik & Datateknik HDI HD-INFO d.o.o. HDV Holografika kft. HEC Hisense Electric Co., Ltd. HEC Hitachi Engineering Company Ltd HEL Hitachi Micro Systems Europe Ltd HER Ascom Business Systems HET HETEC Datensysteme GmbH HHC HIRAKAWA HEWTECH CORP. HHI Fraunhofer Heinrich-Hertz-Institute HIB Hibino Corporation HIC Hitachi Information Technology Co., Ltd. HIK Hikom Co., Ltd. HIL Hilevel Technology HIQ Kaohsiung Opto Electronics Americas, Inc. HIT Hitachi America Ltd HJI Harris & Jeffries Inc HKA HONKO MFG. CO., LTD. HKG Josef Heim KG HMC Hualon Microelectric Corporation HMK hmk Daten-System-Technik BmbH HMX HUMAX Co., Ltd. HNS Hughes Network Systems HOB HOB Electronic GmbH HOE Hosiden Corporation HOL Holoeye Photonics AG HON Sonitronix HPA Zytor Communications HPC Hewlett Packard Co. HPD Hewlett Packard HPI Headplay, Inc. HPK HAMAMATSU PHOTONICS K.K. HPQ HP HPR H.P.R. Electronics GmbH HRC Hercules HRE Qingdao Haier Electronics Co., Ltd. HRI Hall Research HRL Herolab GmbH HRS Harris Semiconductor HRT HERCULES HSC Hagiwara Sys-Com Company Ltd HSD HannStar Display Corp HSM AT&T Microelectronics HSP HannStar Display Corp HTC Hitachi Ltd HTI Hampshire Company, Inc. HTK Holtek Microelectronics Inc HTX Hitex Systementwicklung GmbH HUB GAI-Tronics, A Hubbell Company HUM IMP Electronics Ltd. HWA Harris Canada Inc HWC DBA Hans Wedemeyer HWD Highwater Designs Ltd HWP Hewlett Packard HXM Hexium Ltd. HYC Hypercope Gmbh Aachen HYD Hydis Technologies.Co.,LTD HYO HYC CO., LTD. HYP Hyphen Ltd HYR Hypertec Pty Ltd HYT Heng Yu Technology (HK) Limited HYV Hynix Semiconductor IAF Institut f r angewandte Funksystemtechnik GmbH IAI Integration Associates, Inc. IAT IAT Germany GmbH IBC Integrated Business Systems IBI INBINE.CO.LTD IBM IBM Brasil IBM IBM France IBP IBP Instruments GmbH IBR IBR GmbH ICA ICA Inc ICC BICC Data Networks Ltd ICD ICD Inc ICE IC Ensemble ICI Infotek Communication Inc ICM Intracom SA ICN Sanyo Icon ICO Intel Corp ICP ICP Electronics, Inc./iEi Technology Corp. ICS Integrated Circuit Systems ICV Inside Contactless ICX ICCC A/S IDC International Datacasting Corporation IDE IDE Associates IDK IDK Corporation IDN Idneo Technologies IDO IDEO Product Development IDP Integrated Device Technology, Inc. IDS Interdigital Sistemas de Informacao IDT International Display Technology IDX IDEXX Labs IEC Interlace Engineering Corporation IEE IEE IEI Interlink Electronics IFS In Focus Systems Inc IFT Informtech IFX Infineon Technologies AG IFZ Infinite Z IGC Intergate Pty Ltd IGM IGM Communi IHE InHand Electronics IIC ISIC Innoscan Industrial Computers A/S III Intelligent Instrumentation IIN IINFRA Co., Ltd IKS Ikos Systems Inc ILC Image Logic Corporation ILS Innotech Corporation IMA Imagraph IMB ART s.r.l. IMC IMC Networks IMD ImasDe Canarias S.A. IME Imagraph IMG IMAGENICS Co., Ltd. IMI International Microsystems Inc IMM Immersion Corporation IMN Impossible Production IMP Impinj IMP Impression Products Incorporated IMT Inmax Technology Corporation INC Home Row Inc IND ILC INE Inventec Electronics (M) Sdn. Bhd. INF Inframetrics Inc ING Integraph Corporation INI Initio Corporation INK Indtek Co., Ltd. INL InnoLux Display Corporation INM InnoMedia Inc INN Innovent Systems, Inc. INO Innolab Pte Ltd INP Interphase Corporation INS Ines GmbH INT Interphase Corporation inu Inovatec S.p.A. INV Inviso, Inc. INX Communications Supply Corporation (A division of WESCO) INZ Best Buy IOA CRE Technology Corporation IOD I-O Data Device Inc IOM Iomega ION Inside Out Networks IOS i-O Display System IOT I/OTech Inc IPC IPC Corporation IPD Industrial Products Design, Inc. IPI Intelligent Platform Management Interface (IPMI) forum (Intel, HP, NEC, Dell) IPM IPM Industria Politecnica Meridionale SpA IPN Performance Technologies IPP IP Power Technologies GmbH IPR Ithaca Peripherals IPS IPS, Inc. (Intellectual Property Solutions, Inc.) IPT International Power Technologies IPW IPWireless, Inc IQI IneoQuest Technologies, Inc IQT IMAGEQUEST Co., Ltd IRD IRdata ISA Symbol Technologies ISC Id3 Semiconductors ISG Insignia Solutions Inc ISI Interface Solutions ISL Isolation Systems ISM Image Stream Medical ISP IntreSource Systems Pte Ltd ISR INSIS Co., LTD. ISS ISS Inc IST Intersolve Technologies ISY International Integrated Systems,Inc.(IISI) ITA Itausa Export North America ITC Intercom Inc ITD Internet Technology Corporation ITE Integrated Tech Express Inc ITK ITK Telekommunikation AG ITL Inter-Tel ITM ITM inc. ITN The NTI Group ITP IT-PRO Consulting und Systemhaus GmbH ITR Infotronic America, Inc. ITS IDTECH ITT I&T Telecom. ITX integrated Technology Express Inc IUC ICSL IVI Intervoice Inc IVM Iiyama North America IVS Intevac Photonics Inc. IWR Icuiti Corporation IWX Intelliworxx, Inc. IXD Intertex Data AB JAC Astec Inc JAE Japan Aviation Electronics Industry, Limited JAS Janz Automationssysteme AG JAT Jaton Corporation JAZ Carrera Computer Inc JCE Jace Tech Inc JDL Japan Digital Laboratory Co.,Ltd. JEN N-Vision JET JET POWER TECHNOLOGY CO., LTD. JFX Jones Futurex Inc JGD University College JIC Jaeik Information & Communication Co., Ltd. JKC JVC KENWOOD Corporation JMT Micro Technical Company Ltd JPC JPC Technology Limited JPW Wallis Hamilton Industries JQE CNet Technical Inc JSD JS DigiTech, Inc JSI Jupiter Systems, Inc. JSK SANKEN ELECTRIC CO., LTD JTS JS Motorsports JTY jetway security micro,inc JUK Janich & Klass Computertechnik GmbH JUP Jupiter Systems JVC JVC JWD Video International Inc. JWL Jewell Instruments, LLC JWS JWSpencer & Co. JWY Jetway Information Co., Ltd KAR Karna KBI Kidboard Inc KBL Kobil Systems GmbH KCD Chunichi Denshi Co.,LTD. KCL Keycorp Ltd KDE KDE KDK Kodiak Tech KDM Korea Data Systems Co., Ltd. KDS KDS USA KDT KDDI Technology Corporation KEC Kyushu Electronics Systems Inc KEM Kontron Embedded Modules GmbH KES Kesa Corporation KEY Key Tech Inc KFC SCD Tech KFE Komatsu Forest KFX Kofax Image Products KGL KEISOKU GIKEN Co.,Ltd. KIS KiSS Technology A/S KMC Mitsumi Company Ltd KME KIMIN Electronics Co., Ltd. KML Kensington Microware Ltd KNC Konica corporation KNX Nutech Marketing PTL KOB Kobil Systems GmbH KOD Eastman Kodak Company KOE KOLTER ELECTRONIC KOL Kollmorgen Motion Technologies Group KOU KOUZIRO Co.,Ltd. KOW KOWA Company,LTD. KPC King Phoenix Company KRL Krell Industries Inc. KRM Kroma Telecom KRY Kroy LLC KSC Kinetic Systems Corporation KSL Karn Solutions Ltd. KSX King Tester Corporation KTC Kingston Tech Corporation KTD Takahata Electronics Co.,Ltd. KTE K-Tech KTG Kayser-Threde GmbH KTI Konica Technical Inc KTK Key Tronic Corporation KTN Katron Tech Inc KUR Kurta Corporation KVA Kvaser AB KVX KeyView KWD Kenwood Corporation KYC Kyocera Corporation KYE KYE Syst Corporation KYK Samsung Electronics America Inc KZI K-Zone International co. Ltd. KZN K-Zone International LAB ACT Labs Ltd LAC LaCie LAF Microline LAG Laguna Systems LAN Sodeman Lancom Inc LAS LASAT Comm. A/S LAV Lava Computer MFG Inc LBO Lubosoft LCC LCI LCD Toshiba Matsushita Display Technology Co., Ltd LCE La Commande Electronique LCI Lite-On Communication Inc LCM Latitude Comm. LCN LEXICON LCS Longshine Electronics Company LCT Labcal Technologies LDT LogiDataTech Electronic GmbH LEC Lectron Company Ltd LED Long Engineering Design Inc LEG Legerity, Inc LEN Lenovo Group Limited LEO First International Computer Inc LEX Lexical Ltd LGC Logic Ltd LGI Logitech Inc LGS LG Semicom Company Ltd LGX Lasergraphics, Inc. LHA Lars Haagh ApS LHE Lung Hwa Electronics Company Ltd LHT Lighthouse Technologies Limited LIN Lenovo Beijing Co. Ltd. LIP Linked IP GmbH LIT Lithics Silicon Technology LJX Datalogic Corporation LKM Likom Technology Sdn. Bhd. LLL L-3 Communications LMG Lucent Technologies LMI Lexmark Int'l Inc LMP Leda Media Products LMT Laser Master LND Land Computer Company Ltd LNK Link Tech Inc LNR Linear Systems Ltd. LNT LANETCO International LNV Lenovo LOC Locamation B.V. LOE Loewe Opta GmbH LOG Logicode Technology Inc LOL Litelogic Operations Ltd LPE El-PUSK Co., Ltd. LPI Design Technology LPL LG Philips LSC LifeSize Communications LSD Intersil Corporation LSI Loughborough Sound Images LSJ LSI Japan Company Ltd LSL Logical Solutions LSY LSI Systems Inc LTC Labtec Inc LTI Jongshine Tech Inc LTK Lucidity Technology Company Ltd LTN Litronic Inc LTS LTS Scale LLC LTV Leitch Technology International Inc. LTW Lightware, Inc LUC Lucent Technologies LUM Lumagen, Inc. LUX Luxxell Research Inc LVI LVI Low Vision International AB LWC Labway Corporation LWR Lightware Visual Engineering LWW Lanier Worldwide LXC LXCO Technologies AG LXN Luxeon LXS ELEA CardWare LZX Lightwell Company Ltd MAC MAC System Company Ltd MAD Xedia Corporation MAE Maestro Pty Ltd MAG MAG InnoVision MAI Mutoh America Inc MAL Meridian Audio Ltd MAN LGIC MAS Mass Inc. MAT Matsushita Electric Ind. Company Ltd MAX Rogen Tech Distribution Inc MAY Maynard Electronics MAZ MAZeT GmbH MBC MBC MBD Microbus PLC MBM Marshall Electronics MBV Moreton Bay MCA American Nuclear Systems Inc MCC Micro Industries MCD McDATA Corporation MCE Metz-Werke GmbH & Co KG MCG Motorola Computer Group MCI Micronics Computers MCL Motorola Communications Israel MCM Metricom Inc MCN Micron Electronics Inc MCO Motion Computing Inc. MCP Magni Systems Inc MCQ Mat's Computers MCR Marina Communicaitons MCS Micro Computer Systems MCT Microtec MDA Media4 Inc MDC Midori Electronics MDD MODIS MDG Madge Networks MDI Micro Design Inc MDK Mediatek Corporation MDO Panasonic MDR Medar Inc MDS Micro Display Systems Inc MDT Magus Data Tech MDV MET Development Inc MDX MicroDatec GmbH MDY Microdyne Inc MEC Mega System Technologies Inc MED Messeltronik Dresden GmbH MEE Mitsubishi Electric Engineering Co., Ltd. MEG Abeam Tech Ltd MEI Panasonic Industry Company MEJ Mac-Eight Co., LTD. MEL Mitsubishi Electric Corporation MEN MEN Mikroelectronik Nueruberg GmbH MEP Meld Technology MEQ Matelect Ltd. MET Metheus Corporation MEX MSC Vertriebs GmbH MFG MicroField Graphics Inc MFI Micro Firmware MFR MediaFire Corp. MGA Mega System Technologies, Inc. MGC Mentor Graphics Corporation MGE Schneider Electric S.A. MGL M-G Technology Ltd MGT Megatech R & D Company MIC Micom Communications Inc MID miro Displays MII Mitec Inc MIL Marconi Instruments Ltd MIM Mimio – A Newell Rubbermaid Company MIN Minicom Digital Signage MIP micronpc.com MIR Miro Computer Prod. MIS Modular Industrial Solutions Inc MIT MCM Industrial Technology GmbH MJI MARANTZ JAPAN, INC. MJS MJS Designs MKC Media Tek Inc. MKT MICROTEK Inc. MKV Trtheim Technology MLD Deep Video Imaging Ltd MLG Micrologica AG MLI McIntosh Laboratory Inc. MLM Millennium Engineering Inc MLN Mark Levinson MLS Milestone EPE MLX Mylex Corporation MMA Micromedia AG MMD Micromed Biotecnologia Ltd MMF Minnesota Mining and Manufacturing MMI Multimax MMM Electronic Measurements MMN MiniMan Inc MMS MMS Electronics MNC Mini Micro Methods Ltd MNL Monorail Inc MNP Microcom MOD Modular Technology MOM Momentum Data Systems MOS Moses Corporation MOT Motorola UDS MPC M-Pact Inc MPI Mediatrix Peripherals Inc MPJ Microlab MPL Maple Research Inst. Company Ltd MPN Mainpine Limited MPS mps Software GmbH MPX Micropix Technologies, Ltd. MQP MultiQ Products AB MRA Miranda Technologies Inc MRC Marconi Simulation & Ty-Coch Way Training MRD MicroDisplay Corporation MRK Maruko & Company Ltd MRL Miratel MRO Medikro Oy MRT Merging Technologies MSA Micro Systemation AB MSC Mouse Systems Corporation MSD Datenerfassungs- und Informationssysteme MSF M-Systems Flash Disk Pioneers MSG MSI GmbH MSH Microsoft MSI Microstep MSK Megasoft Inc MSL MicroSlate Inc. MSM Advanced Digital Systems MSP Mistral Solutions [P] Ltd. MSR MASPRO DENKOH Corp. MST MS Telematica MSU motorola MSV Mosgi Corporation MSX Micomsoft Co., Ltd. MSY MicroTouch Systems Inc MTB Media Technologies Ltd. MTC Mars-Tech Corporation MTD MindTech Display Co. Ltd MTE MediaTec GmbH MTH Micro-Tech Hearing Instruments MTI MaxCom Technical Inc MTI Motorola Inc. MTK Microtek International Inc. MTL Mitel Corporation MTM Motium MTN Mtron Storage Technology Co., Ltd. MTR Mitron computer Inc MTS Multi-Tech Systems MTU Mark of the Unicorn Inc MTX Matrox MUD Multi-Dimension Institute MUK mainpine limited MVD Microvitec PLC MVI Media Vision Inc MVM SOBO VISION MVS Microvision MVX COM 1 MWI Multiwave Innovation Pte Ltd MWR mware MWY Microway Inc MXD MaxData Computer GmbH & Co.KG MXI Macronix Inc MXL Hitachi Maxell, Ltd. MXP Maxpeed Corporation MXT Maxtech Corporation MXV MaxVision Corporation MYA Monydata MYR Myriad Solutions Ltd MYX Micronyx Inc NAC Ncast Corporation NAD NAD Electronics NAK Nakano Engineering Co.,Ltd. NAL Network Alchemy NAT NaturalPoint Inc. NAV Navigation Corporation NAX Naxos Tecnologia NBL N*Able Technologies Inc NBS National Key Lab. on ISN NBT NingBo Bestwinning Technology CO., Ltd NCA Nixdorf Company NCC NCR Corporation NCE Norcent Technology, Inc. NCI NewCom Inc NCL NetComm Ltd NCR NCR Electronics NCS Northgate Computer Systems NCT NEC CustomTechnica, Ltd. NDC National DataComm Corporaiton NDI National Display Systems NDK Naitoh Densei CO., LTD. NDL Network Designers NDS Nokia Data NEC NEC Corporation NEO NEO TELECOM CO.,LTD. NET Mettler Toledo NEU NEUROTEC - EMPRESA DE PESQUISA E DESENVOLVIMENTO EM BIOMEDICINA NEX Nexgen Mediatech Inc., NFC BTC Korea Co., Ltd NFS Number Five Software NGC Network General NGS A D S Exports NHT Vinci Labs NIC National Instruments Corporation NIS Nissei Electric Company NIT Network Info Technology NIX Seanix Technology Inc NLC Next Level Communications NME Navico, Inc. NMP Nokia Mobile Phones NMS Natural Micro System NMV NEC-Mitsubishi Electric Visual Systems Corporation NMX Neomagic NNC NNC NOE NordicEye AB NOI North Invent A/S NOK Nokia Display Products NOR Norand Corporation NOT Not Limited Inc NPI Network Peripherals Inc NRL U.S. Naval Research Lab NRT Beijing Northern Radiantelecom Co. NRV Taugagreining hf NSC National Semiconductor Corporation NSI NISSEI ELECTRIC CO.,LTD NSP Nspire System Inc. NSS Newport Systems Solutions NST Network Security Technology Co NTC NeoTech S.R.L NTI New Tech Int'l Company NTL National Transcomm. Ltd NTN Nuvoton Technology Corporation NTR N-trig Innovative Technologies, Inc. NTS Nits Technology Inc. NTT NTT Advanced Technology Corporation NTW Networth Inc NTX Netaccess Inc NUG NU Technology, Inc. NUI NU Inc. NVC NetVision Corporation NVD Nvidia NVI NuVision US, Inc. NVL Novell Inc NVT Navatek Engineering Corporation NWC NW Computer Engineering NWP NovaWeb Technologies Inc NWS Newisys, Inc. NXC NextCom K.K. NXG Nexgen NXP NXP Semiconductors bv. NXQ Nexiq Technologies, Inc. NXS Technology Nexus Secure Open Systems AB NYC nakayo telecommunications,inc. OAK Oak Tech Inc OAS Oasys Technology Company OBS Optibase Technologies OCD Macraigor Systems Inc OCN Olfan OCS Open Connect Solutions ODM ODME Inc. ODR Odrac OEC ORION ELECTRIC CO.,LTD OEI Optum Engineering Inc. OIC Option Industrial Computers OIM Option International OIN Option International OKI OKI Electric Industrial Company Ltd OLC Olicom A/S OLD Olidata S.p.A. OLI Olivetti OLT Olitec S.A. OLV Olitec S.A. OLY OLYMPUS CORPORATION OMC OBJIX Multimedia Corporation OMN Omnitel OMR Omron Corporation ONE Oneac Corporation ONK ONKYO Corporation ONL OnLive, Inc ONS On Systems Inc ONW OPEN Networks Ltd ONX SOMELEC Z.I. Du Vert Galanta OOS OSRAM OPC Opcode Inc OPI D.N.S. Corporation OPP OPPO Digital, Inc. OPT OPTi Inc OPV Optivision Inc OQI Oksori Company Ltd ORG ORGA Kartensysteme GmbH ORI OSR Open Systems Resources, Inc. ORN ORION ELECTRIC CO., LTD. OSA OSAKA Micro Computer, Inc. OSP OPTI-UPS Corporation OSR Oksori Company Ltd OTB outsidetheboxstuff.com OTI Orchid Technology OTM Optoma Corporation OTT OPTO22, Inc. OUK OUK Company Ltd OVR Oculus VR, Inc. OWL Mediacom Technologies Pte Ltd OXU Oxus Research S.A. OYO Shadow Systems OZC OZ Corporation OZO Tribe Computer Works Inc PAC Pacific Avionics Corporation PAD Promotion and Display Technology Ltd. PAK Many CNC System Co., Ltd. PAM Peter Antesberger Messtechnik PAN The Panda Project PAR Parallan Comp Inc PBI Pitney Bowes PBL Packard Bell Electronics PBN Packard Bell NEC PBV Pitney Bowes PCA Philips BU Add On Card PCB OCTAL S.A. PCC PowerCom Technology Company Ltd PCG First Industrial Computer Inc PCI Pioneer Computer Inc PCK PCBANK21 PCL pentel.co.,ltd PCM PCM Systems Corporation PCO Performance Concepts Inc., PCP Procomp USA Inc PCS TOSHIBA PERSONAL COMPUTER SYSTEM CORPRATION PCT PC-Tel Inc PCW Pacific CommWare Inc PCX PC Xperten PDM Psion Dacom Plc. PDN AT&T Paradyne PDR Pure Data Inc PDS PD Systems International Ltd PDT PDTS - Prozessdatentechnik und Systeme PDV Prodrive B.V. PEC POTRANS Electrical Corp. PEI PEI Electronics Inc PEL Primax Electric Ltd PEN Interactive Computer Products Inc PEP Peppercon AG PER Perceptive Signal Technologies PET Practical Electronic Tools PFT Telia ProSoft AB PGI PACSGEAR, Inc. PGM Paradigm Advanced Research Centre PGP propagamma kommunikation PGS Princeton Graphic Systems PHC Pijnenburg Beheer N.V. PHE Philips Medical Systems Boeblingen GmbH PHI DO NOT USE - PHI PHL Philips Consumer Electronics Company PHO Photonics Systems Inc. PHS Philips Communication Systems PHY Phylon Communications PIE Pacific Image Electronics Company Ltd PIM Prism, LLC PIO Pioneer Electronic Corporation PIX Pixie Tech Inc PJA Projecta PJD Projectiondesign AS PJT Pan Jit International Inc. PKA Acco UK ltd. PLC Pro-Log Corporation PLF Panasonic Avionics Corporation PLM PROLINK Microsystems Corp. PLT PT Hartono Istana Teknologi PLV PLUS Vision Corp. PLX Parallax Graphics PLY Polycom Inc. PMC PMC Consumer Electronics Ltd PMD TDK USA Corporation PMM Point Multimedia System PMT Promate Electronic Co., Ltd. PMX Photomatrix PNG Microsoft PNG P.I. Engineering Inc PNL Panelview, Inc. PNP Microsoft PNR Planar Systems, Inc. PNS PanaScope PNX Phoenix Technologies, Ltd. POL PolyComp (PTY) Ltd. PON Perpetual Technologies, LLC POR Portalis LC PPC Phoenixtec Power Company Ltd PPD MEPhI PPI Practical Peripherals PPM Clinton Electronics Corp. PPP Purup Prepress AS PPR PicPro PPX Perceptive Pixel Inc. PQI Pixel Qi PRA PRO/AUTOMATION PRC PerComm PRD Praim S.R.L. PRF Digital Electronics Corporation PRG The Phoenix Research Group Inc PRI Priva Hortimation BV PRM Prometheus PRO Proteon PRS Leutron Vision PRT Parade Technologies, Ltd. PRX Proxima Corporation PSA Advanced Signal Processing Technologies PSC Philips Semiconductors PSD Peus-Systems GmbH PSE Practical Solutions Pte., Ltd. PSI PSI-Perceptive Solutions Inc PSL Perle Systems Limited PSM Prosum PST Global Data SA PSY Prodea Systems Inc. PTA PAR Tech Inc. PTC PS Technology Corporation PTG Cipher Systems Inc PTH Pathlight Technology Inc PTI Promise Technology Inc PTL Pantel Inc PTS Plain Tree Systems Inc PTW DO NOT USE - PTW PUL Pulse-Eight Ltd PVC DO NOT USE - PVC PVG Proview Global Co., Ltd PVI Prime view international Co., Ltd PVM Penta Studiotechnik GmbH PVN Pixel Vision PVP Klos Technologies, Inc. PXC Phoenix Contact PXE PIXELA CORPORATION PXL The Moving Pixel Company PXM Proxim Inc QCC QuakeCom Company Ltd QCH Metronics Inc QCI Quanta Computer Inc QCK Quick Corporation QCL Quadrant Components Inc QCP Qualcomm Inc QDI Quantum Data Incorporated QDM Quadram QDS Quanta Display Inc. QFF Padix Co., Inc. QFI Quickflex, Inc QLC Q-Logic QQQ Chuomusen Co., Ltd. QSI Quantum Solutions, Inc. QTD Quantum 3D Inc QTH Questech Ltd QTI Quicknet Technologies Inc QTM Quantum QTR Qtronix Corporation QUA Quatographic AG QUE Questra Consulting QVU Quartics RAC Racore Computer Products Inc RAD Radisys Corporation RAI Rockwell Automation/Intecolor RAN Rancho Tech Inc RAR Raritan, Inc. RAS RAScom Inc RAT Rent-A-Tech RAY Raylar Design, Inc. RCE Parc d'Activite des Bellevues RCH Reach Technology Inc RCI RC International RCN Radio Consult SRL RCO Rockwell Collins RDI Rainbow Displays, Inc. RDM Tremon Enterprises Company Ltd RDN RADIODATA GmbH RDS Radius Inc REA Real D REC ReCom RED Research Electronics Development Inc REF Reflectivity, Inc. REH Rehan Electronics Ltd. REL Reliance Electric Ind Corporation REM SCI Systems Inc. REN Renesas Technology Corp. RES ResMed Pty Ltd RET Resonance Technology, Inc. REX RATOC Systems, Inc. RGB RGB Spectrum RGL Robertson Geologging Ltd RHD RightHand Technologies RHM Rohm Company Ltd RHT Red Hat, Inc. RIC RICOH COMPANY, LTD. RII Racal Interlan Inc RIO Rios Systems Company Ltd RIT Ritech Inc RIV Rivulet Communications RJA Roland Corporation RJS Advanced Engineering RKC Reakin Technolohy Corporation RLD MEPCO RLN RadioLAN Inc RMC Raritan Computer, Inc RMP Research Machines RMT Roper Mobile RNB Rainbow Technologies ROB Robust Electronics GmbH ROH Rohm Co., Ltd. ROK Rockwell International ROP Roper International Ltd ROS Rohde & Schwarz RPI RoomPro Technologies RPT R.P.T.Intergroups RRI Radicom Research Inc RSC PhotoTelesis RSH ADC-Centre RSI Rampage Systems Inc RSN Radiospire Networks, Inc. RSQ R Squared RSS Rockwell Semiconductor Systems RSV Ross Video Ltd RSX Rapid Tech Corporation RTC Relia Technologies RTI Rancho Tech Inc RTK DO NOT USE - RTK RTL Realtek Semiconductor Company Ltd RTS Raintree Systems RUN RUNCO International RUP Ups Manufactoring s.r.l. RVC RSI Systems Inc RVI Realvision Inc RVL Reveal Computer Prod RWC Red Wing Corporation RXT Tectona SoftSolutions (P) Ltd., SAA Sanritz Automation Co.,Ltd. SAE Saab Aerotech SAG Sedlbauer SAI Sage Inc SAK Saitek Ltd SAM Samsung Electric Company SAN Sanyo Electric Co.,Ltd. SAS Stores Automated Systems Inc SAT Shuttle Tech SBC Shanghai Bell Telephone Equip Mfg Co SBD Softbed - Consulting & Development Ltd SBI SMART Technologies Inc. SBS SBS-or Industrial Computers GmbH SBT Senseboard Technologies AB SCB SeeCubic B.V. SCC SORD Computer Corporation SCD Sanyo Electric Company Ltd SCE Sun Corporation SCH Schlumberger Cards SCI System Craft SCL Sigmacom Co., Ltd. SCM SCM Microsystems Inc SCN Scanport, Inc. SCO SORCUS Computer GmbH SCP Scriptel Corporation SCR Systran Corporation SCS Nanomach Anstalt SCT Smart Card Technology SDA SAT (Societe Anonyme) SDD Intrada-SDD Ltd SDE Sherwood Digital Electronics Corporation SDF SODIFF E&T CO., Ltd. SDH Communications Specialies, Inc. SDI Samtron Displays Inc SDK SAIT-Devlonics SDR SDR Systems SDS SunRiver Data System SDT Siemens AG SDX SDX Business Systems Ltd SEA Seanix Technology Inc. SEB system elektronik GmbH SEC Seiko Epson Corporation SEE SeeColor Corporation SEG DO NOT USE - SEG SEI Seitz & Associates Inc SEL Way2Call Communications SEM Samsung Electronics Company Ltd SEN Sencore SEO SEOS Ltd SEP SEP Eletronica Ltda. SER Sony Ericsson Mobile Communications Inc. SES Session Control LLC SET SendTek Corporation SFM TORNADO Company SFT Mikroforum Ring 3 SGC Spectragraphics Corporation SGD Sigma Designs, Inc. SGE Kansai Electric Company Ltd SGI Scan Group Ltd SGL Super Gate Technology Company Ltd SGM SAGEM SGO Logos Design A/S SGT Stargate Technology SGW Shanghai Guowei Science and Technology Co., Ltd. SGX Silicon Graphics Inc SGZ Systec Computer GmbH SHC ShibaSoku Co., Ltd. SHG Soft & Hardware development Goldammer GmbH SHI Jiangsu Shinco Electronic Group Co., Ltd SHP Sharp Corporation SHR Digital Discovery SHT Shin Ho Tech SIA SIEMENS AG SIB Sanyo Electric Company Ltd SIC Sysmate Corporation SID Seiko Instruments Information Devices Inc SIE Siemens SIG Sigma Designs Inc SII Silicon Image, Inc. SIL Silicon Laboratories, Inc SIM S3 Inc SIN Singular Technology Co., Ltd. SIR Sirius Technologies Pty Ltd SIS Silicon Integrated Systems Corporation SIT Sitintel SIU Seiko Instruments USA Inc SIX Zuniq Data Corporation SJE Sejin Electron Inc SKD Schneider & Koch SKT Samsung Electro-Mechanics Company Ltd SKY SKYDATA S.P.A. SLA Systeme Lauer GmbH&Co KG SLB Shlumberger Ltd SLC Syslogic Datentechnik AG SLF StarLeaf SLH Silicon Library Inc. SLI Symbios Logic Inc SLK Silitek Corporation SLM Solomon Technology Corporation SLR Schlumberger Technology Corporate SLS Schnick-Schnack-Systems GmbH SLT Salt Internatioinal Corp. SLX Specialix SMA SMART Modular Technologies SMB Schlumberger SMC Standard Microsystems Corporation SME Sysmate Company SMI SpaceLabs Medical Inc SMK SMK CORPORATION SML Sumitomo Metal Industries, Ltd. SMM Shark Multimedia Inc SMO STMicroelectronics SMP Simple Computing SMR B.& V. s.r.l. SMS Silicom Multimedia Systems Inc SMT Silcom Manufacturing Tech Inc SNC Sentronic International Corp. SNI Siemens Microdesign GmbH SNK S&K Electronics SNO SINOSUN TECHNOLOGY CO., LTD SNP Siemens Nixdorf Info Systems SNS Cirtech (UK) Ltd SNT SuperNet Inc SNW Snell & Wilcox SNX Sonix Comm. Ltd SNY Sony SOI Silicon Optix Corporation SOL Solitron Technologies Inc SON Sony SOR Sorcus Computer GmbH SOT Sotec Company Ltd SOY SOYO Group, Inc SPC SpinCore Technologies, Inc SPE SPEA Software AG SPH G&W Instruments GmbH SPI SPACE-I Co., Ltd. SPK SpeakerCraft SPL Smart Silicon Systems Pty Ltd SPN Sapience Corporation SPR pmns GmbH SPS Synopsys Inc SPT Sceptre Tech Inc SPU SIM2 Multimedia S.P.A. SPX Simplex Time Recorder Co. SQT Sequent Computer Systems Inc SRC Integrated Tech Express Inc SRD Setred SRF Surf Communication Solutions Ltd SRG Intuitive Surgical, Inc. SRS SR-Systems e.K. SRT SeeReal Technologies GmbH SSC Sierra Semiconductor Inc SSD FlightSafety International SSE Samsung Electronic Co. SSI S-S Technology Inc SSJ Sankyo Seiki Mfg.co., Ltd SSP Spectrum Signal Proecessing Inc SSS S3 Inc SST SystemSoft Corporation STA ST Electronics Systems Assembly Pte Ltd STB STB Systems Inc STC STAC Electronics STD STD Computer Inc STE SII Ido-Tsushin Inc STF Starflight Electronics STG StereoGraphics Corp. STH Semtech Corporation STI Smart Tech Inc STK SANTAK CORP. STL SigmaTel Inc STM SGS Thomson Microelectronics STN Samsung Electronics America STO Stollmann E+V GmbH STP StreamPlay Ltd STR Starlight Networks Inc STS SITECSYSTEM CO., LTD. STT Star Paging Telecom Tech (Shenzhen) Co. Ltd. STU Sentelic Corporation STW Starwin Inc. STX ST-Ericsson STY SDS Technologies SUB Subspace Comm. Inc SUM Summagraphics Corporation SUN Sun Electronics Corporation SUP Supra Corporation SUR Surenam Computer Corporation SVA SGEG SVC Intellix Corp. SVD SVD Computer SVI Sun Microsystems SVS SVSI SVT SEVIT Co., Ltd. SWC Software Café SWI Sierra Wireless Inc. SWL Sharedware Ltd SWS Static SWT Software Technologies Group,Inc. SXB Syntax-Brillian SXD Silex technology, Inc. SXG SELEX GALILEO SXL SolutionInside SXT SHARP TAKAYA ELECTRONIC INDUSTRY CO.,LTD. SYC Sysmic SYE SY Electronics Ltd SYK Stryker Communications SYL Sylvania Computer Products SYM Symicron Computer Communications Ltd. SYN Synaptics Inc SYP SYPRO Co Ltd SYS Sysgration Ltd SYT Seyeon Tech Company Ltd SYV SYVAX Inc SYX Prime Systems, Inc. TAA Tandberg TAB Todos Data System AB TAG Teles AG TAI Toshiba America Info Systems Inc TAM Tamura Seisakusyo Ltd TAS Taskit Rechnertechnik GmbH TAT Teleliaison Inc TAX Taxan (Europe) Ltd TBB Triple S Engineering Inc TBC Turbo Communication, Inc TBS Turtle Beach System TCC Tandon Corporation TCD Taicom Data Systems Co., Ltd. TCE Century Corporation TCH Interaction Systems, Inc TCI Tulip Computers Int'l B.V. TCJ TEAC America Inc TCL Technical Concepts Ltd TCM 3Com Corporation TCN Tecnetics (PTY) Ltd TCO Thomas-Conrad Corporation TCR Thomson Consumer Electronics TCS Tatung Company of America Inc TCT Telecom Technology Centre Co. Ltd. TCX FREEMARS Heavy Industries TDC Teradici TDD Tandberg Data Display AS TDK TDK USA Corporation TDM Tandem Computer Europe Inc TDP 3D Perception TDS Tri-Data Systems Inc TDT TDT TDV TDVision Systems, Inc. TDY Tandy Electronics TEA TEAC System Corporation TEC Tecmar Inc TEK Tektronix Inc TEL Promotion and Display Technology Ltd. TER TerraTec Electronic GmbH TGC Toshiba Global Commerce Solutions, Inc. TGI TriGem Computer Inc TGM TriGem Computer,Inc. TGS Torus Systems Ltd TGV Grass Valley Germany GmbH THN Thundercom Holdings Sdn. Bhd. TIC Trigem KinfoComm TIP TIPTEL AG TIV OOO Technoinvest TIX Tixi.Com GmbH TKC Taiko Electric Works.LTD TKN Teknor Microsystem Inc TKO TouchKo, Inc. TKS TimeKeeping Systems, Inc. TLA Ferrari Electronic GmbH TLD Telindus TLF Teleforce.,co,ltd TLI TOSHIBA TELI CORPORATION TLK Telelink AG TLS Teleste Educational OY TLT Dai Telecom S.p.A. TLV S3 Inc TLX Telxon Corporation TMC Techmedia Computer Systems Corporation TME AT&T Microelectronics TMI Texas Microsystem TMM Time Management, Inc. TMR Taicom International Inc TMS Trident Microsystems Ltd TMT T-Metrics Inc. TMX Thermotrex Corporation TNC TNC Industrial Company Ltd TNJ DO NOT USE - TNJ TNM TECNIMAGEN SA TNY Tennyson Tech Pty Ltd TOE TOEI Electronics Co., Ltd. TOG The OPEN Group TON TONNA TOP Orion Communications Co., Ltd. TOS Toshiba Corporation TOU Touchstone Technology TPC Touch Panel Systems Corporation TPE Technology Power Enterprises Inc TPJ Junnila TPK TOPRE CORPORATION TPR Topro Technology Inc TPS Teleprocessing Systeme GmbH TPT Thruput Ltd TPV Top Victory Electronics ( Fujian ) Company Ltd TPZ Ypoaz Systems Inc TRA TriTech Microelectronics International TRC Trioc AB TRD Trident Microsystem Inc TRE Tremetrics TRI Tricord Systems TRL Royal Information TRM Tekram Technology Company Ltd TRN Datacommunicatie Tron B.V. TRS Torus Systems Ltd TRT Tritec Electronic AG TRU Aashima Technology B.V. TRV Trivisio Prototyping GmbH TRX Trex Enterprises TSB Toshiba America Info Systems Inc TSC Sanyo Electric Company Ltd TSD TechniSat Digital GmbH TSE Tottori Sanyo Electric TSF Racal-Airtech Software Forge Ltd TSG The Software Group Ltd TSI TeleVideo Systems TSL Tottori SANYO Electric Co., Ltd. TSP U.S. Navy TST Transtream Inc TSV TRANSVIDEO TSY TouchSystems TTA Topson Technology Co., Ltd. TTB National Semiconductor Japan Ltd TTC Telecommunications Techniques Corporation TTE TTE, Inc. TTI Trenton Terminals Inc TTK Totoku Electric Company Ltd TTL 2-Tel B.V. TTS TechnoTrend Systemtechnik GmbH TTY TRIDELITY Display Solutions GmbH TUA T+A elektroakustik GmbH TUT Tut Systems TVD Tecnovision TVI Truevision TVM Taiwan Video & Monitor Corporation TVO TV One Ltd TVR TV Interactive Corporation TVS TVS Electronics Limited TVV TV1 GmbH TWA Tidewater Association TWE Kontron Electronik TWH Twinhead International Corporation TWI Easytel oy TWK TOWITOKO electronics GmbH TWX TEKWorx Limited TXL Trixel Ltd TXN Texas Insturments TXT Textron Defense System TYN Tyan Computer Corporation UAS Ultima Associates Pte Ltd UBI Ungermann-Bass Inc UBL Ubinetics Ltd. UDN Uniden Corporation UEC Ultima Electronics Corporation UEG Elitegroup Computer Systems Company Ltd UEI Universal Electronics Inc UET Universal Empowering Technologies UFG UNIGRAF-USA UFO UFO Systems Inc UHB XOCECO UIC Uniform Industrial Corporation UJR Ueda Japan Radio Co., Ltd. ULT Ultra Network Tech UMC United Microelectr Corporation UMG Umezawa Giken Co.,Ltd UMM Universal Multimedia UNA Unisys DSD UNB Unisys Corporation UNC Unisys Corporation UND Unisys Corporation UNE Unisys Corporation UNF Unisys Corporation UNI Uniform Industry Corp. UNI Unisys Corporation UNM Unisys Corporation UNO Unisys Corporation UNP Unitop UNS Unisys Corporation UNT Unisys Corporation UNY Unicate UPP UPPI UPS Systems Enhancement URD Video Computer S.p.A. USA Utimaco Safeware AG USD U.S. Digital Corporation USI Universal Scientific Industrial Co., Ltd. USR U.S. Robotics Inc UTD Up to Date Tech UWC Uniwill Computer Corp. VAD Vaddio, LLC VAL Valence Computing Corporation VAR Varian Australia Pty Ltd VBR VBrick Systems Inc. VBT Valley Board Ltda VCC Virtual Computer Corporation VCI VistaCom Inc VCJ Victor Company of Japan, Limited VCM Vector Magnetics, LLC VCX VCONEX VDA Victor Data Systems VDC VDC Display Systems VDM Vadem VDO Video & Display Oriented Corporation VDS Vidisys GmbH & Company VDT Viditec, Inc. VEC Vector Informatik GmbH VEK Vektrex VES Vestel Elektronik Sanayi ve Ticaret A. S. VFI VeriFone Inc VHI Macrocad Development Inc. VIA VIA Tech Inc VIB Tatung UK Ltd VIC Victron B.V. VID Ingram Macrotron Germany VIK Viking Connectors VIM Via Mons Ltd. VIN Vine Micros Ltd VIR Visual Interface, Inc VIS Visioneer VIT Visitech AS VIZ VIZIO, Inc VLB ValleyBoard Ltda. VLK Vislink International Ltd VLT VideoLan Technologies VMI Vermont Microsystems VML Vine Micros Limited VMW VMware Inc., VNC Vinca Corporation VOB MaxData Computer AG VPI Video Products Inc VPR Best Buy VQ@ Vision Quest VRC Virtual Resources Corporation VSC ViewSonic Corporation VSD 3M VSI VideoServer VSN Ingram Macrotron VSP Vision Systems GmbH VSR V-Star Electronics Inc. VTC VTel Corporation VTG Voice Technologies Group Inc VTI VLSI Tech Inc VTK Viewteck Co., Ltd. VTL Vivid Technology Pte Ltd VTM Miltope Corporation VTN VIDEOTRON CORP. VTS VTech Computers Ltd VTV VATIV Technologies VTX Vestax Corporation VUT Vutrix (UK) Ltd VWB Vweb Corp. WAC Wacom Tech WAL Wave Access WAN DO NOT USE - WAN WAV Wavephore WBN MicroSoftWare WBS WB Systemtechnik GmbH WCI Wisecom Inc WCS Woodwind Communications Systems Inc WDC Western Digital WDE Westinghouse Digital Electronics WEB WebGear Inc WEC Winbond Electronics Corporation WEL W-DEV WEY WEY Design AG WHI Whistle Communications WII Innoware Inc WIL WIPRO Information Technology Ltd WIN Wintop Technology Inc WIP Wipro Infotech WKH Uni-Take Int'l Inc. WLD Wildfire Communications Inc WML Wolfson Microelectronics Ltd WMO Westermo Teleindustri AB WMT Winmate Communication Inc WNI WillNet Inc. WNV Winnov L.P. WNX Wincor Nixdorf International GmbH WPA Matsushita Communication Industrial Co., Ltd. WPI Wearnes Peripherals International (Pte) Ltd WRC WiNRADiO Communications WSC CIS Technology Inc WSP Wireless And Smart Products Inc. WST Wistron Corporation WTC ACC Microelectronics WTI WorkStation Tech WTK Wearnes Thakral Pte WTS Restek Electric Company Ltd WVM Wave Systems Corporation WVV WolfVision GmbH WWV World Wide Video, Inc. WXT Woxter Technology Co. Ltd WYS Wyse Technology WYT Wooyoung Image & Information Co.,Ltd. XAC XAC Automation Corp XAD Alpha Data XDM XDM Ltd. XER DO NOT USE - XER XFG Jan Strapko - FOTO XFO EXFO Electro Optical Engineering XIN Xinex Networks Inc XIO Xiotech Corporation XIR Xirocm Inc XIT Xitel Pty ltd XLX Xilinx, Inc. XMM C3PO S.L. XNT XN Technologies, Inc. XOC DO NOT USE - XOC XQU SHANGHAI SVA-DAV ELECTRONICS CO., LTD XRC Xircom Inc XRO XORO ELECTRONICS (CHENGDU) LIMITED XSN Xscreen AS XST XS Technologies Inc XSY XSYS XTD Icuiti Corporation XTE X2E GmbH XTL Crystal Computer XTN X-10 (USA) Inc XYC Xycotec Computer GmbH YED Y-E Data Inc YHQ Yokogawa Electric Corporation YHW Exacom SA YMH Yamaha Corporation YOW American Biometric Company ZAN Zandar Technologies plc ZAX Zefiro Acoustics ZAZ Zazzle Technologies ZBR Zebra Technologies International, LLC ZCT ZeitControl cardsystems GmbH ZDS Zenith Data Systems ZGT Zenith Data Systems ZIC Nationz Technologies Inc. ZMT Zalman Tech Co., Ltd. ZMZ Z Microsystems ZNI Zetinet Inc ZNX Znyx Adv. Systems ZOW Zowie Intertainment, Inc ZRN Zoran Corporation ZSE Zenith Data Systems ZTC ZyDAS Technology Corporation ZTE ZTE Corporation ZTI Zoom Telephonics Inc ZTM ZT Group Int'l Inc. ZTT Z3 Technology ZYD Zydacron Inc ZYP Zypcom Inc ZYT Zytex Computers ZYX Zyxel ZZZ Boca Research Inc dispcalGUI-1.7.1.6/dispcalGUI/postinstall.py000644 000765 000000 00000024472 12266411534 020545 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from StringIO import StringIO from subprocess import call from os.path import splitext import os import shutil import sys import traceback from meta import name from util_os import relpath, which recordfile_name = "INSTALLED_FILES" if not sys.stdout.isatty(): sys.stdout = StringIO() if sys.platform == "win32": try: create_shortcut # this function is only available within bdist_wininst installers except NameError: try: from pythoncom import (CoCreateInstance, CLSCTX_INPROC_SERVER, IID_IPersistFile) from win32com.shell import shell import win32con except ImportError: def create_shortcut(*args): pass else: def create_shortcut(*args): shortcut = CoCreateInstance( shell.CLSID_ShellLink, None, CLSCTX_INPROC_SERVER, shell.IID_IShellLink ) shortcut.SetPath(args[0]) shortcut.SetDescription(args[1]) if len(args) > 3: shortcut.SetArguments(args[3]) if len(args) > 4: shortcut.SetWorkingDirectory(args[4]) if len(args) > 5: shortcut.SetIconLocation(args[5], args[6] if len(args) > 6 else 0) shortcut.SetShowCmd(win32con.SW_SHOWNORMAL) shortcut.QueryInterface(IID_IPersistFile).Save(args[2], 0) try: directory_created # this function is only available within bdist_wininst installers except NameError: def directory_created(path): pass try: file_created # this function is only available within bdist_wininst installers except NameError: try: import win32api except ImportError: def file_created(path): pass else: def file_created(path): if os.path.exists(recordfile_name): installed_files = [] if os.path.exists(recordfile_name): recordfile = open(recordfile_name, "r") installed_files += [line.rstrip("\n") for line in recordfile] recordfile.close() try: path.decode("ASCII") except (UnicodeDecodeError, UnicodeEncodeError): # the contents of the record file used by distutils # must be ASCII GetShortPathName allows us to avoid # any issues with encoding because it returns the # short path as 7-bit string (while still being a # valid path) path = win32api.GetShortPathName(path) installed_files += [path] recordfile = open(recordfile_name, "w") recordfile.write("\n".join(installed_files)) recordfile.close() try: get_special_folder_path # this function is only available within bdist_wininst installers except NameError: try: from win32com.shell import shell, shellcon except ImportError: def get_special_folder_path(csidl_string): pass else: def get_special_folder_path(csidl_string): return shell.SHGetSpecialFolderPath(0, getattr(shellcon, csidl_string), 1) def postinstall(prefix=None): if sys.platform == "darwin": # TODO: implement pass elif sys.platform == "win32": if prefix is None: # assume we are running from bdist_wininst installer import dispcalGUI modpath = os.path.dirname(os.path.abspath(dispcalGUI.__file__)) else: # assume we are running from source dir, # or from install dir modpath = prefix if os.path.exists(modpath): icon = os.path.join(modpath, "theme", "icons", name + ".ico") if os.path.exists(icon): try: startmenu_programs_common = get_special_folder_path( "CSIDL_COMMON_PROGRAMS") startmenu_programs = get_special_folder_path( "CSIDL_PROGRAMS") startmenu_common = get_special_folder_path( "CSIDL_COMMON_STARTMENU") startmenu = get_special_folder_path("CSIDL_STARTMENU") except OSError, exception: traceback.print_exc() return else: filenames = [name + ".py", "LICENSE.txt", "README.html", "Uninstall"] installed_shortcuts = [] for path in (startmenu_programs_common, startmenu_programs): if path: grppath = os.path.join(path, name) if path == startmenu_programs: group = relpath(grppath, startmenu) else: group = relpath(grppath, startmenu_common) if not os.path.exists(grppath): try: os.makedirs(grppath) except Exception, exception: # maybe insufficient privileges? pass if os.path.exists(grppath): print ("Created start menu group '%s' in " "%s") % (name, (unicode(path, "MBCS", "replace") if type(path) != unicode else path).encode("MBCS", "replace")) else: print ("Failed to create start menu group '%s' in " "%s") % (name, (unicode(path, "MBCS", "replace") if type(path) != unicode else path).encode("MBCS", "replace")) continue directory_created(grppath) for filename in filenames: lnkpath = os.path.join( grppath, splitext(filename)[0] + ".lnk") if os.path.exists(lnkpath): try: os.remove(lnkpath) except Exception, exception: # maybe insufficient privileges? print ("Failed to create start menu entry '%s' in " "%s") % (splitext(filename)[0], (unicode(grppath, "MBCS", "replace") if type(grppath) != unicode else grppath).encode("MBCS", "replace")) continue if not os.path.exists(lnkpath): if filename != "Uninstall": tgtpath = os.path.join(modpath, filename) try: if filename == "Uninstall": uninstaller = os.path.join( sys.prefix, "Remove%s.exe" % name) if os.path.exists(uninstaller): create_shortcut( uninstaller, splitext(filename)[0], lnkpath, '-u "%s-wininst.log"' % os.path.join(sys.prefix, name), sys.prefix, os.path.join( modpath, "theme", "icons", name + "-uninstall.ico")) else: # When running from a # bdist_wininst or bdist_msi # installer, sys.executable # points to the installer # executable, not python.exe create_shortcut( os.path.join(sys.prefix, "python.exe"), splitext(filename)[0], lnkpath, '"%s" uninstall ' '--record="%s"' % ( os.path.join( modpath, "setup.py"), os.path.join( modpath, "INSTALLED_FILES") ), sys.prefix, os.path.join( modpath, "theme", "icons", name + "-uninstall.ico")) elif filename.endswith(".py"): # When running from a # bdist_wininst or bdist_msi # installer, sys.executable # points to the installer # executable, not python.exe create_shortcut( os.path.join(sys.prefix, "pythonw.exe"), splitext(filename)[0], lnkpath, '"%s"' % tgtpath, modpath, icon) else: create_shortcut( tgtpath, splitext(filename)[0], lnkpath, "", modpath) except Exception, exception: # maybe insufficient privileges? print ("Failed to create start menu entry '%s' in " "%s") % (splitext(filename)[0], (unicode(grppath, "MBCS", "replace") if type(grppath) != unicode else grppath).encode("MBCS", "replace")) continue print ("Installed start menu entry '%s' to " "%s") % (splitext(filename)[0], (unicode(group, "MBCS", "replace") if type(group) != unicode else group).encode("MBCS", "replace")) file_created(lnkpath) installed_shortcuts.append(filename) if installed_shortcuts == filenames: break else: print "warning - '%s' not found" % icon.encode("MBCS", "replace") if os.path.exists(recordfile_name): irecordfile_name = os.path.join(modpath, "INSTALLED_FILES") irecordfile = open(irecordfile_name, "w") irecordfile.close() file_created(irecordfile_name) shutil.copy2(recordfile_name, irecordfile_name) else: print "warning - '%s' not found" % modpath.encode("MBCS", "replace") else: # Linux/Unix if prefix is None: prefix = sys.prefix if which("xdg-icon-resource"): ##print "installing icon resources..." ##for size in [16, 22, 24, 32, 48, 256]: ##call(["xdg-icon-resource", "install", "--noupdate", "--novendor", ##"--size", str(size), prefix + ##("/share/%s/theme/icons/%sx%s/%s.png" % (name, size, size, ##name))]) call(["xdg-icon-resource", "forceupdate"]) if which("xdg-desktop-menu"): ##print "installing desktop menu entry..." ##call(["xdg-desktop-menu", "install", "--novendor", (prefix + ##"/share/%s/%s.desktop" % (name, name))]) call(["xdg-desktop-menu", "forceupdate"]) def postuninstall(prefix=None): if sys.platform == "darwin": # TODO: implement pass elif sys.platform == "win32": # nothing to do pass else: # Linux/Unix if prefix is None: prefix = sys.prefix if which("xdg-desktop-menu"): ##print "uninstalling desktop menu entry..." ##call(["xdg-desktop-menu", "uninstall", prefix + ##("/share/applications/%s.desktop" % name)]) call(["xdg-desktop-menu", "forceupdate"]) if which("xdg-icon-resource"): ##print "uninstalling icon resources..." ##for size in [16, 22, 24, 32, 48, 256]: ##call(["xdg-icon-resource", "uninstall", "--noupdate", "--size", ##str(size), name]) call(["xdg-icon-resource", "forceupdate"]) def main(): prefix = None for arg in sys.argv[1:]: arg = arg.split("=") if len(arg) == 2: if arg[0] == "--prefix": prefix = arg[1] try: if "-remove" in sys.argv[1:]: postuninstall(prefix) else: postinstall(prefix) except Exception, exception: traceback.print_exc() if __name__ == "__main__": main() dispcalGUI-1.7.1.6/dispcalGUI/presets/000755 000765 000000 00000000000 12266723170 017275 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/pyi_md5pickuphelper.py000644 000765 000000 00000000451 12025152312 022127 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from sys import platform if platform not in ("darwin", "win32"): try: import _md5 except ImportError: _md5 = None try: from hashlib import md5 except ImportError, exception: if platform not in ("darwin", "win32") and _md5: md5 = _md5 else: raise exceptiondispcalGUI-1.7.1.6/dispcalGUI/quirk.json000644 000765 000000 00000003713 12224371766 017646 0ustar00svpwheel000000 000000 // From colord/lib/colord/cd_quirk.c, cd_quirk_vendor_name { "suffixes": [ "Co.", "Co", "Inc.", "Inc", "Ltd.", "Ltd", "Corporation", "Incorporated", "Limited", "GmbH", "corp." ], "vendor_names": { "Acer, inc.": "Acer", "Acer Technologies": "Acer", "AOC Intl": "AOC", "Apple Computer Inc": "Apple", "Arnos Insturments & Computer Systems": "Arnos", "ASUSTeK Computer Inc.": "ASUSTeK", "ASUSTeK Computer INC": "ASUSTeK", "ASUSTeK COMPUTER INC.": "ASUSTeK", "BTC Korea Co., Ltd": "BTC", "CASIO COMPUTER CO.,LTD": "Casio", "CLEVO": "Clevo", "Delta Electronics": "Delta", "Eizo Nanao Corporation": "Eizo", "Envision Peripherals,": "Envision", "FUJITSU": "Fujitsu", "Fujitsu Siemens Computers GmbH": "Fujitsu Siemens", "Funai Electric Co., Ltd.": "Funai", "Gigabyte Technology Co., Ltd.": "Gigabyte", "Goldstar Company Ltd": "LG", "Hewlett-Packard": "Hewlett Packard", "Hitachi America Ltd": "Hitachi", "HP": "Hewlett Packard", "HWP": "Hewlett Packard", "IBM France": "IBM", "Lenovo Group Limited": "Lenovo", "LENOVO": "Lenovo", "Iiyama North America": "Iiyama", "MARANTZ JAPAN, INC.": "Marantz", "Mitsubishi Electric Corporation": "Mitsubishi", "Nexgen Mediatech Inc.,": "Nexgen Mediatech", "NIKON": "Nikon", "Panasonic Industry Company": "Panasonic", "Philips Consumer Electronics Company": "Philips", "RGB Systems, Inc. dba Extron Electronics": "Extron", "SAM": "Samsung", "Samsung Electric Company": "Samsung", "Samsung Electronics America": "Samsung", "samsung": "Samsung", "SAMSUNG": "Samsung", "Sanyo Electric Co.,Ltd.": "Sanyo", "Sonix Technology Co.": "Sonix", "System manufacturer": "Unknown", "To Be Filled By O.E.M.": "Unknown", "Toshiba America Info Systems Inc": "Toshiba", "Toshiba Matsushita Display Technology Co.,": "Toshiba", "TOSHIBA": "Toshiba", "Unknown vendor": "Unknown", "Westinghouse Digital Electronics": "Westinghouse Digital", "Zalman Tech Co., Ltd.": "Zalman" } }dispcalGUI-1.7.1.6/dispcalGUI/RealDisplaySizeMM.c000644 000765 000000 00000065152 12025152311 021245 0ustar00svpwheel000000 000000 #include "Python.h" #include #include #include #include #include #include #include #ifdef NT # include # include #else # include # include # include #endif #ifdef __APPLE__ /* Assume OSX Carbon */ # include # include # include #endif /* __APPLE__ */ #if defined(UNIX) && !defined(__APPLE__) # include # include # include # include # include # include # include # include #endif /* UNIX */ #if defined(_MSC_VER) # define DLL extern "C" __declspec(dllexport) #else # define DLL #endif #define errout stderr #ifdef DEBUG # define debug(xx) fprintf(errout, xx ) # define debug2(xx) fprintf xx # define debugr(xx) fprintf(errout, xx ) # define debugr2(xx) fprintf xx # define debugrr(xx) fprintf(errout, xx ) # define debugrr2(xx) fprintf xx #else # define debug(xx) # define debug2(xx) # define debugr(xx) # define debugr2(xx) # define debugrr(xx) # define debugrr2(xx) #endif // START disppath /* Structure to store infomation about possible displays */ typedef struct { char *name; /* Display name */ char *description; /* Description of display */ int sx,sy; /* Displays offset in pixels */ int sw,sh; /* Displays width and height in pixels*/ #ifdef NT char monid[128]; /* Monitor ID */ int prim; /* NZ if primary display monitor */ #endif /* NT */ #ifdef __APPLE__ CGDirectDisplayID ddid; #endif /* __APPLE__ */ #if defined(UNIX) && !defined(__APPLE__) int screen; /* Screen to select */ int uscreen; /* Underlying screen */ int rscreen; /* Underlying RAMDAC screen */ #if RANDR_MAJOR == 1 && RANDR_MINOR >= 2 /* Xrandr stuff - output is connected 1:1 to a display */ RRCrtc crtc; /* Associated crtc */ RROutput output; /* Associated output */ #endif /* randr >= V 1.2 */ #endif /* UNIX */ } disppath; // END disppath void free_disppaths(disppath **paths); /* ----------------------------------------------- */ /* Dealing with locating displays */ int callback_ddebug = 0; /* Diagnostic global for get_displays() and get_a_display() */ #ifdef NT #define sleep(secs) Sleep((secs) * 1000) static BOOL CALLBACK MonitorEnumProc( HMONITOR hMonitor, /* handle to display monitor */ HDC hdcMonitor, /* NULL, because EnumDisplayMonitors hdc is NULL */ LPRECT lprcMonitor, /* Virtual screen coordinates of this monitor */ LPARAM dwData /* Context data */ ) { disppath ***pdisps = (disppath ***)dwData; disppath **disps = *pdisps; MONITORINFOEX pmi; int ndisps = 0; debugrr2((errout, "MonitorEnumProc() called with hMonitor = 0x%x\n",hMonitor)); /* Get some more information */ pmi.cbSize = sizeof(MONITORINFOEX); if (GetMonitorInfo(hMonitor, (MONITORINFO *)&pmi) == 0) { debugrr("get_displays failed GetMonitorInfo - ignoring display\n"); return TRUE; } /* See if it seems to be a pseudo-display */ if (strncmp(pmi.szDevice, "\\\\.\\DISPLAYV", 12) == 0) { debugrr("Seems to be invisible pseudo-display - ignoring it\n"); return TRUE; } /* Add the display to the list */ if (disps == NULL) { if ((disps = (disppath **)calloc(sizeof(disppath *), 1 + 1)) == NULL) { debugrr("get_displays failed on malloc\n"); return FALSE; } } else { /* Count current number on list */ for (ndisps = 0; disps[ndisps] != NULL; ndisps++) ; if ((disps = (disppath **)realloc(disps, sizeof(disppath *) * (ndisps + 2))) == NULL) { debugrr("get_displays failed on malloc\n"); return FALSE; } disps[ndisps+1] = NULL; /* End marker */ } if ((disps[ndisps] = calloc(sizeof(disppath),1)) == NULL) { debugrr("get_displays failed on malloc\n"); return FALSE; } if ((disps[ndisps]->name = strdup(pmi.szDevice)) == NULL) { debugrr("malloc failed\n"); return FALSE; } disps[ndisps]->prim = (pmi.dwFlags & MONITORINFOF_PRIMARY) ? 1 : 0; disps[ndisps]->sx = lprcMonitor->left; disps[ndisps]->sy = lprcMonitor->top; disps[ndisps]->sw = lprcMonitor->right - lprcMonitor->left; disps[ndisps]->sh = lprcMonitor->bottom - lprcMonitor->top; disps[ndisps]->description = NULL; debugrr2((errout, "MonitorEnumProc() set initial monitor info: %d,%d %d,%d name '%s'\n",disps[ndisps]->sx,disps[ndisps]->sy,disps[ndisps]->sw,disps[ndisps]->sh, disps[ndisps]->name)); *pdisps = disps; return TRUE; } /* Dynamically linked function support */ BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD) = NULL; /* See if we can get the wanted function calls */ /* return nz if OK */ static int setup_dyn_calls() { static int dyn_inited = 0; if (dyn_inited == 0) { dyn_inited = 1; /* EnumDisplayDevicesA was left out of lib32.lib on earlier SDK's ... */ pEnumDisplayDevices = (BOOL (WINAPI*)(PVOID,DWORD,PVOID,DWORD)) GetProcAddress(LoadLibrary("USER32"), "EnumDisplayDevicesA"); if (pEnumDisplayDevices == NULL) dyn_inited = 0; } return dyn_inited; } /* Simple up conversion from char string to wchar string */ /* Return NULL if malloc fails */ /* ~~~ Note, should probably replace this with mbstowcs() ???? */ static unsigned short *char2wchar(char *s) { unsigned char *cp; unsigned short *w, *wp; if ((w = malloc(sizeof(unsigned short) * (strlen(s) + 1))) == NULL) return w; for (cp = (unsigned char *)s, wp = w; ; cp++, wp++) { *wp = *cp; /* Zero extend */ if (*cp == 0) break; } return w; } #endif /* NT */ #if defined(UNIX) && !defined(__APPLE__) /* Hack to notice if the error handler has been triggered */ /* when a function doesn't return a value. */ int g_error_handler_triggered = 0; /* A noop X11 error handler */ int null_error_handler(Display *disp, XErrorEvent *ev) { g_error_handler_triggered = 1; return 0; } #endif /* X11 */ /* Return pointer to list of disppath. Last will be NULL. */ /* Return NULL on failure. Call free_disppaths() to free up allocation */ disppath **get_displays() { disppath **disps = NULL; #ifdef NT DISPLAY_DEVICE dd; char buf[200]; int i, j; if (setup_dyn_calls() == 0) { debugrr("Dynamic linking to EnumDisplayDevices or Vista AssociateColorProfile failed\n"); free_disppaths(disps); return NULL; } /* Create an initial list of monitors */ /* (It might be better to call pEnumDisplayDevices(NULL, i ..) instead ??, */ /* then we can use the StateFlags to distingish monitors not attached to the desktop etc.) */ if (EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)&disps) == 0) { debugrr("EnumDisplayMonitors failed\n"); free_disppaths(disps); return NULL; } /* Now locate detailed information about displays */ for (i = 0; ; i++) { if (disps == NULL || disps[i] == NULL) break; dd.cb = sizeof(dd); debugrr2((errout, "get_displays about to get monitor information for %d\n",i)); /* Get monitor information */ for (j = 0; ;j++) { if ((*pEnumDisplayDevices)(disps[i]->name, j, &dd, 0) == 0) { debugrr2((errout,"EnumDisplayDevices failed on '%s' Mon = %d\n",disps[i]->name,j)); if (j == 0) { strcpy(disps[i]->monid, ""); /* We won't be able to set a profile */ } break; } if (callback_ddebug) { fprintf(errout,"Mon %d, name '%s'\n",j,dd.DeviceName); fprintf(errout,"Mon %d, string '%s'\n",j,dd.DeviceString); fprintf(errout,"Mon %d, flags 0x%x\n",j,dd.StateFlags); fprintf(errout,"Mon %d, id '%s'\n",j,dd.DeviceID); fprintf(errout,"Mon %d, key '%s'\n",j,dd.DeviceKey); } if (j == 0) { strcpy(disps[i]->monid, dd.DeviceID); } } sprintf(buf,"%s, at %d, %d, width %d, height %d%s",disps[i]->name+4, disps[i]->sx, disps[i]->sy, disps[i]->sw, disps[i]->sh, disps[i]->prim ? " (Primary Display)" : ""); if ((disps[i]->description = strdup(buf)) == NULL) { debugrr("get_displays failed on malloc\n"); free_disppaths(disps); return NULL; } debugrr2((errout, "get_displays added description '%s' to display %d\n",disps[i]->description,i)); /* Note that calling EnumDisplayDevices(NULL, j, ..) for the adapter can return other */ /* information, such as the graphics card name, and additional state flags. */ /* EnumDisplaySettings() can also be called to get information such as display depth etc. */ } #ifdef NEVER /* Explore adapter information */ for (j = 0; ; j++) { /* Get adapater information */ if ((*pEnumDisplayDevices)(NULL, j, &dd, 0) == 0) break; printf("Adapt %d, name '%s'\n",j,dd.DeviceName); printf("Adapt %d, string '%s'\n",j,dd.DeviceString); printf("Adapt %d, flags 0x%x\n",j,dd.StateFlags); printf("Adapt %d, id '%s'\n",j,dd.DeviceID); printf("Adapt %d, key '%s'\n",j,dd.DeviceKey); } #endif /* NEVER */ #endif /* NT */ #ifdef __APPLE__ /* Note :- some recent releases of OS X have a feature which */ /* automatically adjusts the screen brigtness with ambient level. */ /* We may have to find a way of disabling this during calibration and profiling. */ /* See the "pset -g" command. */ int i; CGDisplayErr dstat; CGDisplayCount dcount; /* Number of display IDs */ CGDirectDisplayID *dids; /* Array of display IDs */ if ((dstat = CGGetActiveDisplayList(0, NULL, &dcount)) != kCGErrorSuccess || dcount < 1) { debugrr("CGGetActiveDisplayList #1 returned error\n"); return NULL; } if ((dids = (CGDirectDisplayID *)malloc(dcount * sizeof(CGDirectDisplayID))) == NULL) { debugrr("malloc of CGDirectDisplayID's failed\n"); return NULL; } if ((dstat = CGGetActiveDisplayList(dcount, dids, &dcount)) != kCGErrorSuccess) { debugrr("CGGetActiveDisplayList #2 returned error\n"); free(dids); return NULL; } /* Found dcount displays */ debugrr2((errout,"Found %d screens\n",dcount)); /* Allocate our list */ if ((disps = (disppath **)calloc(sizeof(disppath *), dcount + 1)) == NULL) { debugrr("get_displays failed on malloc\n"); free(dids); return NULL; } for (i = 0; i < dcount; i++) { if ((disps[i] = calloc(sizeof(disppath), 1)) == NULL) { debugrr("get_displays failed on malloc\n"); free_disppaths(disps); free(dids); return NULL; } disps[i]->ddid = dids[i]; } /* Got displays, now figure out a description for each one */ for (i = 0; i < dcount; i++) { CGRect dbound; /* Bounding rectangle of chosen display */ io_service_t dport; CFDictionaryRef ddr, pndr; CFIndex dcount; char *dp = NULL, desc[50]; char buf[200]; dbound = CGDisplayBounds(dids[i]); disps[i]->sx = dbound.origin.x; disps[i]->sy = dbound.origin.y; disps[i]->sw = dbound.size.width; disps[i]->sh = dbound.size.height; /* Try and get some information about the display */ if ((dport = CGDisplayIOServicePort(dids[i])) == MACH_PORT_NULL) { debugrr("CGDisplayIOServicePort returned error\n"); free_disppaths(disps); free(dids); return NULL; } #ifdef NEVER { io_name_t name; if (IORegistryEntryGetName(dport, name) != KERN_SUCCESS) { debugrr("IORegistryEntryGetName returned error\n"); free_disppaths(disps); free(dids); return NULL; } printf("Driver %d name = '%s'\n",i,name); } #endif if ((ddr = IODisplayCreateInfoDictionary(dport, 0)) == NULL) { debugrr("IODisplayCreateInfoDictionary returned NULL\n"); free_disppaths(disps); free(dids); return NULL; } if ((pndr = CFDictionaryGetValue(ddr, CFSTR(kDisplayProductName))) == NULL) { debugrr("CFDictionaryGetValue returned NULL\n"); CFRelease(ddr); free_disppaths(disps); free(dids); return NULL; } if ((dcount = CFDictionaryGetCount(pndr)) > 0) { const void **keys; const void **values; int j; keys = (const void **)calloc(sizeof(void *), dcount); values = (const void **)calloc(sizeof(void *), dcount); if (keys == NULL || values == NULL) { if (keys != NULL) free(keys); if (values != NULL) free(values); debugrr("malloc failed\n"); CFRelease(ddr); free_disppaths(disps); free(dids); return NULL; } CFDictionaryGetKeysAndValues(pndr, keys, values); for (j = 0; j < dcount; j++) { const char *k, *v; char kbuf[50], vbuf[50]; k = CFStringGetCStringPtr(keys[j], kCFStringEncodingMacRoman); if (k == NULL) { if (CFStringGetCString(keys[j], kbuf, 50, kCFStringEncodingMacRoman)) k = kbuf; } v = CFStringGetCStringPtr(values[j], kCFStringEncodingMacRoman); if (v == NULL) { if (CFStringGetCString(values[j], vbuf, 50, kCFStringEncodingMacRoman)) v = vbuf; } //printf("~1 got key %s and value %s\n",k,v); /* We're only grabing the english description... */ if (k != NULL && v != NULL && strcmp(k, "en_US") == 0) { strncpy(desc, v, 49); desc[49] = '\000'; dp = desc; } } free(keys); free(values); } CFRelease(ddr); if (dp == NULL) { strcpy(desc, "(unknown)"); dp = desc; } sprintf(buf,"%s, at %d, %d, width %d, height %d%s",dp, disps[i]->sx, disps[i]->sy, disps[i]->sw, disps[i]->sh, CGDisplayIsMain(dids[i]) ? " (Primary Display)" : ""); if ((disps[i]->name = strdup(dp)) == NULL || (disps[i]->description = strdup(buf)) == NULL) { debugrr("get_displays failed on malloc\n"); free_disppaths(disps); free(dids); return NULL; } } free(dids); #endif /* __APPLE__ */ #if defined(UNIX) && !defined(__APPLE__) int i, j, k; int defsix = 0; /* default screen index */ int dcount; /* Number of screens */ char *dname; char dnbuf[100]; int evb = 0, erb = 0; int majv, minv; /* Version */ Display *mydisplay; int ndisps = 0; XineramaScreenInfo *xai = NULL; char desc1[100], desc2[200]; /* There seems to be no way of getting the available displays */ /* on an X11 system. Attempting to open them in sequence */ /* takes too long. We just rely on the user supplying the */ /* right display. We can enumerate screens though. */ /* Open the base display, and then enumerate all the screens */ if ((dname = getenv("DISPLAY")) != NULL) { char *pp; strncpy(dnbuf,dname,99); dnbuf[99] = '\000'; if ((pp = strrchr(dnbuf, ':')) != NULL) { if ((pp = strchr(pp, '.')) == NULL) strcat(dnbuf,".0"); else { if (pp[1] == '\000') strcat(dnbuf,"0"); else { pp[1] = '0'; pp[2] = '\000'; } } } } else strcpy(dnbuf,":0.0"); if ((mydisplay = XOpenDisplay(dnbuf)) == NULL) { debugrr2((errout, "failed to open display '%s'\n",dnbuf)); return NULL; } #if RANDR_MAJOR == 1 && RANDR_MINOR >= 2 && !defined(DISABLE_RANDR) /* Use Xrandr 1.2 if it's available, and if it's not disabled */ if (getenv("ARGYLL_IGNORE_XRANDR1_2") == NULL && XRRQueryExtension(mydisplay, &evb, &erb) != 0 && XRRQueryVersion(mydisplay, &majv, &minv) && majv == 1 && minv >= 2) { if (XSetErrorHandler(null_error_handler) == 0) { debugrr("get_displays failed on XSetErrorHandler\n"); XCloseDisplay(mydisplay); free_disppaths(disps); return NULL; } dcount = ScreenCount(mydisplay); /* Go through all the screens */ for (i = 0; i < dcount; i++) { XRRScreenResources *scrnres; int jj; /* Screen index */ if ((scrnres = XRRGetScreenResources(mydisplay, RootWindow(mydisplay,i))) == NULL) { debugrr("XRRGetScreenResources failed\n"); XCloseDisplay(mydisplay); free_disppaths(disps); return NULL; } /* Look at all the screens outputs */ for (jj = j = 0; j < scrnres->noutput; j++) { XRROutputInfo *outi; XRRCrtcInfo *crtci; if ((outi = XRRGetOutputInfo(mydisplay, scrnres, scrnres->outputs[j])) == NULL) { debugrr("XRRGetOutputInfo failed\n"); XRRFreeScreenResources(scrnres); XCloseDisplay(mydisplay); free_disppaths(disps); return NULL; } if (outi->connection == RR_Disconnected|| outi->crtc == None) { continue; } /* Check that the VideoLUT's are accessible */ { XRRCrtcGamma *crtcgam; debugrr("Checking XRandR 1.2 VideoLUT access\n"); if ((crtcgam = XRRGetCrtcGamma(mydisplay, outi->crtc)) == NULL || crtcgam->size == 0) { if (crtcgam != NULL) XRRFreeGamma(crtcgam); free_disppaths(disps); disps = NULL; j = scrnres->noutput; i = dcount; continue; /* Abort XRandR 1.2 */ } } #ifdef NEVER { Atom *oprops; int noprop; /* Get a list of the properties of the output */ oprops = XRRListOutputProperties(mydisplay, scrnres->outputs[j], &noprop); printf("num props = %d\n", noprop); for (k = 0; k < noprop; k++) { printf("%d: atom 0x%x, name = '%s'\n", k, oprops[k], XGetAtomName(mydisplay, oprops[k])); } } #endif /* NEVER */ if ((crtci = XRRGetCrtcInfo(mydisplay, scrnres, outi->crtc)) != NULL) { char *pp; /* Add the output to the list */ if (disps == NULL) { if ((disps = (disppath **)calloc(sizeof(disppath *), 1 + 1)) == NULL) { debugrr("get_displays failed on malloc\n"); XRRFreeCrtcInfo(crtci); XRRFreeScreenResources(scrnres); XCloseDisplay(mydisplay); return NULL; } } else { if ((disps = (disppath **)realloc(disps, sizeof(disppath *) * (ndisps + 2))) == NULL) { debugrr("get_displays failed on malloc\n"); XRRFreeCrtcInfo(crtci); XRRFreeScreenResources(scrnres); XCloseDisplay(mydisplay); return NULL; } disps[ndisps+1] = NULL; /* End marker */ } /* ndisps is current display we're filling in */ if ((disps[ndisps] = calloc(sizeof(disppath),1)) == NULL) { debugrr("get_displays failed on malloc\n"); XRRFreeCrtcInfo(crtci); XRRFreeScreenResources(scrnres); XCloseDisplay(mydisplay); free_disppaths(disps); return NULL; } disps[ndisps]->screen = i; disps[ndisps]->uscreen = i; disps[ndisps]->rscreen = i; disps[ndisps]->sx = crtci->x; disps[ndisps]->sy = crtci->y; disps[ndisps]->sw = crtci->width; disps[ndisps]->sh = crtci->height; disps[ndisps]->crtc = outi->crtc; /* XID of crtc */ disps[ndisps]->output = scrnres->outputs[j]; /* XID of output */ sprintf(desc1,"Screen %d, Output %s",ndisps+1,outi->name); sprintf(desc2,"%s at %d, %d, width %d, height %d",desc1, disps[ndisps]->sx, disps[ndisps]->sy, disps[ndisps]->sw, disps[ndisps]->sh); /* See if it is a clone */ for (k = 0; k < ndisps; k++) { if (disps[k]->crtc == disps[ndisps]->crtc) { sprintf(desc1, "[ Clone of %d ]",k+1); strcat(desc2, desc1); } } if ((disps[ndisps]->description = strdup(desc2)) == NULL) { debugrr("get_displays failed on malloc\n"); XRRFreeCrtcInfo(crtci); XRRFreeScreenResources(scrnres); XCloseDisplay(mydisplay); free_disppaths(disps); return NULL; } /* Form the display name */ if ((pp = strrchr(dnbuf, ':')) != NULL) { if ((pp = strchr(pp, '.')) != NULL) { sprintf(pp,".%d",i); } } if ((disps[ndisps]->name = strdup(dnbuf)) == NULL) { debugrr("get_displays failed on malloc\n"); XRRFreeCrtcInfo(crtci); XRRFreeScreenResources(scrnres); XCloseDisplay(mydisplay); free_disppaths(disps); return NULL; } debugrr2((errout, "Display %d name = '%s'\n",ndisps,disps[ndisps]->name)); jj++; /* Next enabled index */ ndisps++; /* Now it's number of displays */ XRRFreeCrtcInfo(crtci); } XRRFreeOutputInfo(outi); } XRRFreeScreenResources(scrnres); } XSetErrorHandler(NULL); defsix = DefaultScreen(mydisplay); } #endif /* randr >= V 1.2 */ if (disps == NULL) { /* Use Older style identification */ debugrr("get_displays checking for Xinerama\n"); if (XSetErrorHandler(null_error_handler) == 0) { debugrr("get_displays failed on XSetErrorHandler\n"); XCloseDisplay(mydisplay); return NULL; } if (XineramaQueryExtension(mydisplay, &evb, &erb) != 0 && XineramaIsActive(mydisplay)) { xai = XineramaQueryScreens(mydisplay, &dcount); if (xai == NULL || dcount == 0) { debugrr("XineramaQueryScreens failed\n"); XCloseDisplay(mydisplay); return NULL; } defsix = 0; } else { dcount = ScreenCount(mydisplay); defsix = DefaultScreen(mydisplay); } /* Allocate our list */ if ((disps = (disppath **)calloc(sizeof(disppath *), dcount + 1)) == NULL) { debugrr("get_displays failed on malloc\n"); XCloseDisplay(mydisplay); return NULL; } for (i = 0; i < dcount; i++) { if ((disps[i] = calloc(sizeof(disppath), 1)) == NULL) { debugrr("get_displays failed on malloc\n"); free_disppaths(disps); XCloseDisplay(mydisplay); return NULL; } } /* Create a description for each screen */ for (i = 0; i < dcount; i++) { XF86VidModeMonitor monitor; int evb = 0, erb = 0; char *pp; /* Form the display name */ if ((pp = strrchr(dnbuf, ':')) != NULL) { if ((pp = strchr(pp, '.')) != NULL) { sprintf(pp,".%d",i); } } if ((disps[i]->name = strdup(dnbuf)) == NULL) { debugrr("get_displays failed on malloc\n"); free_disppaths(disps); XCloseDisplay(mydisplay); return NULL; } debugrr2((errout, "Display %d name = '%s'\n",i,disps[i]->name)); if (xai != NULL) { /* Xinerama */ disps[i]->screen = 0; /* We are asuming Xinerame creates a single virtual screen */ disps[i]->uscreen = i; /* We are assuming xinerama lists screens in the same order */ disps[i]->rscreen = i; disps[i]->sx = xai[i].x_org; disps[i]->sy = xai[i].y_org; disps[i]->sw = xai[i].width; disps[i]->sh = xai[i].height; } else { disps[i]->screen = i; disps[i]->uscreen = i; disps[i]->rscreen = i; disps[i]->sx = 0; /* Must be 0 */ disps[i]->sy = 0; disps[i]->sw = DisplayWidth(mydisplay, disps[i]->screen); disps[i]->sh = DisplayHeight(mydisplay, disps[i]->screen); } if (XF86VidModeQueryExtension(mydisplay, &evb, &erb) != 0) { /* Some propietary multi-screen drivers (ie. TwinView & MergeFB) */ /* don't implement the XVidMode extension properly. */ monitor.model = NULL; if (XF86VidModeGetMonitor(mydisplay, disps[i]->uscreen, &monitor) != 0 && monitor.model != NULL && monitor.model[0] != '\000') sprintf(desc1, "%s",monitor.model); else sprintf(desc1,"Screen %d",i+1); } else sprintf(desc1,"Screen %d",i+1); sprintf(desc2,"%s at %d, %d, width %d, height %d",desc1, disps[i]->sx, disps[i]->sy, disps[i]->sw, disps[i]->sh); if ((disps[i]->description = strdup(desc2)) == NULL) { debugrr("get_displays failed on malloc\n"); free_disppaths(disps); XCloseDisplay(mydisplay); return NULL; } } XSetErrorHandler(NULL); } /* Put the screen given by the display name at the top */ { disppath *tdispp; tdispp = disps[defsix]; disps[defsix] = disps[0]; disps[0] = tdispp; } if (xai != NULL) XFree(xai); XCloseDisplay(mydisplay); #endif /* UNIX X11 */ return disps; } // END get_displays /* Free a whole list of display paths */ void free_disppaths(disppath **disps) { if (disps != NULL) { int i; for (i = 0; ; i++) { if (disps[i] == NULL) break; if (disps[i]->name != NULL) free(disps[i]->name); if (disps[i]->description != NULL) free(disps[i]->description); free(disps[i]); } free(disps); } } // START get_a_display disppath *get_a_display(int ix) { disppath **paths, *rv = NULL; int i; if ((paths = get_displays()) == NULL) return NULL; for (i = 0; ;i++) { if (paths[i] == NULL) { free_disppaths(paths); return NULL; } if (i == ix) break; } if ((rv = malloc(sizeof(disppath))) == NULL) { debugrr("get_a_display failed malloc\n"); free_disppaths(paths); return NULL; } *rv = *paths[i]; /* Structure copy */ if ((rv->name = strdup(paths[i]->name)) == NULL) { debugrr("get_displays failed on malloc\n"); free(rv->description); free(rv); free_disppaths(paths); return NULL; } if ((rv->description = strdup(paths[i]->description)) == NULL) { debugrr("get_displays failed on malloc\n"); free(rv); free_disppaths(paths); return NULL; } free_disppaths(paths); return rv; } // END get_a_display // MAIN typedef struct { int width_mm, height_mm; } size_mm; static size_mm get_real_screen_size_mm(int ix) { size_mm size; disppath *disp = NULL; #ifdef NT HDC hdc = NULL; #endif #ifdef __APPLE__ CGSize sz; /* Display size in mm */ #endif #if defined(UNIX) && !defined(__APPLE__) char *pp, *bname; /* base display name */ Display *mydisplay; int myscreen; /* Usual or virtual screen with Xinerama */ #endif size.width_mm = 0; size.height_mm = 0; disp = get_a_display(ix); if (disp == NULL) return size; #ifdef NT hdc = CreateDC(disp->name, NULL, NULL, NULL); if (hdc == NULL) return size; size.width_mm = GetDeviceCaps(hdc, HORZSIZE); size.height_mm = GetDeviceCaps(hdc, VERTSIZE); #endif #ifdef __APPLE__ sz = CGDisplayScreenSize(disp->ddid); size.width_mm = sz.width; size.height_mm = sz.height; #endif #if defined(UNIX) && !defined(__APPLE__) /* Create the base display name (in case of Xinerama, XRandR) */ if ((bname = strdup(disp->name)) == NULL) return size; if ((pp = strrchr(bname, ':')) != NULL) { if ((pp = strchr(pp, '.')) != NULL) { sprintf(pp,".%d",disp->screen); } } /* open the display */ mydisplay = XOpenDisplay(bname); if(!mydisplay) { debugr2((errout,"Unable to open display '%s'\n",bname)); free(bname); return size; } free(bname); debugr("Opened display OK\n"); myscreen = disp->screen; size.width_mm = DisplayWidthMM(mydisplay, myscreen); size.height_mm = DisplayHeightMM(mydisplay, myscreen); XCloseDisplay(mydisplay); #endif return size; } static int get_xrandr_output_xid(int ix) { int xid = 0; disppath *disp = NULL; #if defined(UNIX) && !defined(__APPLE__) #if RANDR_MAJOR == 1 && RANDR_MINOR >= 2 disp = get_a_display(ix); if (disp == NULL) return 0; xid = disp->output; #endif #endif return xid; } static PyObject * RealDisplaySizeMM(PyObject *self, PyObject *args) { int ix; size_mm size; if (!PyArg_ParseTuple(args, "i", &ix)) ix = 0; size = get_real_screen_size_mm(ix); return Py_BuildValue("(i,i)", size.width_mm, size.height_mm); } static PyObject * GetXRandROutputXID(PyObject *self, PyObject *args) { int ix; int xid; if (!PyArg_ParseTuple(args, "i", &ix)) ix = 0; xid = get_xrandr_output_xid(ix); return Py_BuildValue("i", xid); } static PyMethodDef RealDisplaySizeMM_methods[] = { {"RealDisplaySizeMM", RealDisplaySizeMM, METH_VARARGS, "RealDisplaySizeMM(int displayNum = 0)\nReturn the size (in mm) of a given display."}, {"GetXRandROutputXID", GetXRandROutputXID, METH_VARARGS, "GetXRandROutputXID(int displayNum = 0)\nReturn the XRandR output X11 ID of a given display."}, {NULL, NULL, 0, NULL} /* Sentinel - marks the end of this structure */ }; PyMODINIT_FUNC initRealDisplaySizeMM(void) { Py_InitModule("RealDisplaySizeMM", RealDisplaySizeMM_methods); } dispcalGUI-1.7.1.6/dispcalGUI/RealDisplaySizeMM.py000644 000765 000000 00000001423 12025152312 021443 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import platform import sys if sys.platform == "darwin": # Mac OS X has universal binaries from lib.RealDisplaySizeMM import * else: # Linux and Windows have separate files if platform.architecture()[0].startswith('64'): if sys.version_info[:2] == (2, 5): from lib64.python25.RealDisplaySizeMM import * elif sys.version_info[:2] == (2, 6): from lib64.python26.RealDisplaySizeMM import * elif sys.version_info[:2] == (2, 7): from lib64.python27.RealDisplaySizeMM import * else: if sys.version_info[:2] == (2, 5): from lib32.python25.RealDisplaySizeMM import * elif sys.version_info[:2] == (2, 6): from lib32.python26.RealDisplaySizeMM import * elif sys.version_info[:2] == (2, 7): from lib32.python27.RealDisplaySizeMM import * dispcalGUI-1.7.1.6/dispcalGUI/ref/000755 000765 000000 00000000000 12266723171 016365 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/report/000755 000765 000000 00000000000 12266723171 017124 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/report.py000644 000765 000000 00000012777 12266411643 017512 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from time import strftime import codecs import os import re import shutil import sys from config import get_data_path, initcfg from meta import version from safe_print import safe_print import jspacker import localization as lang def create(report_path, placeholders2data, pack=True, templatename="report"): """ Create a report with all placeholders substituted by data. """ # read report template report_html_template_path = get_data_path(os.path.join("report", "%s.html" % templatename)) if not report_html_template_path: raise IOError(lang.getstr("file.missing", report_html_template_path)) try: report_html_template = codecs.open(report_html_template_path, "r", "UTF-8") except (IOError, OSError), exception: raise exception.__class__(lang.getstr("error.file.open", report_html_template_path)) report_html = report_html_template.read() report_html_template.close() # create report for placeholder, data in placeholders2data.iteritems(): report_html = report_html.replace(placeholder, data) for include in ("base.css", "compare.css", "print.css", "jsapi-packages.js", "jsapi-patches.js", "compare.constants.js", "compare.variables.js", "compare.functions.js", "compare.init.js", "uniformity.functions.js"): path = get_data_path(os.path.join("report", include)) if not path: raise IOError(lang.getstr("file.missing", include)) try: f = codecs.open(path, "r", "UTF-8") except (IOError, OSError), exception: raise exception.__class__(lang.getstr("error.file.open", path)) if include.endswith(".js"): js = f.read() if pack: packer = jspacker.JavaScriptPacker() js = packer.pack(js, 62, True).strip() report_html = report_html.replace('src="%s">' % include, ">/**/") else: report_html = report_html.replace('@import "%s";' % include, f.read().strip()) f.close() # write report try: report_html_file = codecs.open(report_path, "w", "UTF-8") except (IOError, OSError), exception: raise exception.__class__(lang.getstr("error.file.create", report_path)) report_html_file.write(report_html) report_html_file.close() def update(report_path, pack=True): """ Update existing report with current template files. Also creates a backup copy of the old report. """ # read original report try: orig_report = codecs.open(report_path, "r", "UTF-8") except (IOError, OSError), exception: raise exception.__class__(lang.getstr("error.file.open", report_path)) orig_report_html = orig_report.read() orig_report.close() data = (("${PLANCKIAN}", 'id="FF_planckian"\s*(.*?)\s*disabled="disabled"', 0), ("${DISPLAY}", '"FF_display"\s*value="(.+?)"\s\/>', 0), ("${INSTRUMENT}", '"FF_instrument"\s*value="(.+?)"\s\/>', 0), ("${CORRECTION_MATRIX}", '"FF_correction_matrix"\s*value="(.+?)"\s\/>', 0), ("${BLACKPOINT}", '"FF_blackpoint"\s*value="(.+?)"\s\/>', 0), ("${WHITEPOINT}", '"FF_whitepoint"\s*value="(.+?)"\s\/>', 0), ("${WHITEPOINT_NORMALIZED}", '"FF_whitepoint_normalized"\s*value="(.+?)"\s\/>', 0), ("${PROFILE}", '"FF_profile"\s*value="(.+?)"\s\/>', 0), ("${PROFILE_WHITEPOINT}", '"FF_profile_whitepoint"\s*value="(.+?)"\s\/>', 0), ("${PROFILE_WHITEPOINT_NORMALIZED}", '"FF_profile_whitepoint_normalized"\s*value="(.+?)"\s\/>', 0), ("${SIMULATION_PROFILE}", 'SIMULATION_PROFILE\s*=\s*"(.+?)"[;,]', 0), ("${BT_1886_GAMMA}", 'BT_1886_GAMMA\s*=\s*(.+?)[;,]', 0), ("${BT_1886_GAMMA_TYPE}", 'BT_1886_GAMMA_TYPE\s*=\s*"(.+?)"[;,]', 0), ("${WHITEPOINT_SIMULATION}", 'WHITEPOINT_SIMULATION\s*=\s*(.+?)[;,]', 0), ("${WHITEPOINT_SIMULATION_RELATIVE}", 'WHITEPOINT_SIMULATION_RELATIVE\s*=\s*(.+?)[;,]', 0), ("${DEVICELINK_PROFILE}", 'DEVICELINK_PROFILE\s*=\s*"(.+?)"[;,]', 0), ("${TESTCHART}", '"FF_testchart"\s*value="(.+?)"\s\/>', 0), ("${ADAPTION}", '"FF_adaption"\s*value="(.+?)"\s\/>', 0), ("${DATETIME}", '"FF_datetime"\s*value="(.+?)"\s\/>', 0), ("${REF}", '"FF_data_ref"\s*value="(.+?)"\s\/>', re.DOTALL), ("${MEASURED}", '"FF_data_in"\s*value="(.+?)"\s\/>', re.DOTALL), ("${CAL_ENTRYCOUNT}", "CAL_ENTRYCOUNT\s*=\s*(.+?)[;,]$", re.M), ("${CAL_RGBLEVELS}", "CAL_RGBLEVELS\s*=\s*(.+?)[;,]$", re.M), ("${GRAYSCALE}", "CRITERIA_GRAYSCALE\s*=\s*(.+?)[;,]$", re.M)) placeholders2data = {"${REPORT_VERSION}": version, "${CORRECTION_MATRIX}": "Unknown", "${ADAPTION}": "None", "${CAL_ENTRYCOUNT}": "null", "${CAL_RGBLEVELS}": "null", "${GRAYSCALE}": "null", "${BLACKPOINT}": "-1 -1 -1", "${BT_1886_GAMMA}": "null", "${WHITEPOINT_SIMULATION}": "false", "${WHITEPOINT_SIMULATION_RELATIVE}": "false"} for placeholder, pattern, flags in data: result = re.search(pattern, orig_report_html, flags) if result or not placeholders2data.get(placeholder): placeholders2data[placeholder] = result.groups()[0] if result else "" # backup original report shutil.copy2(report_path, "%s.%s" % (report_path, strftime("%Y-%m-%d_%H-%M-%S"))) create(report_path, placeholders2data, pack) if __name__ == "__main__": initcfg() lang.init() if not sys.argv[1:]: safe_print("Update existing report(s) with current template files.") safe_print("Usage: %s report1.html [report2.html...]" % os.path.basename(sys.argv[0])) else: for arg in sys.argv[1:]: try: update(arg) except (IOError, OSError), exception: safe_print(exception) dispcalGUI-1.7.1.6/dispcalGUI/safe_print.py000644 000765 000000 00000005632 12266411643 020321 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import locale import os import sys from encoding import get_encoding, get_encodings from encodedstdio import encodestdio original_codepage = None if sys.stdout.isatty(): encodestdio() enc, fs_enc = get_encodings() class SafePrinter(): def __init__(self, pad=False, padchar=" ", sep=" ", end="\n", file_=sys.stdout, fn=None, encoding=None): """ Write safely, avoiding any UnicodeDe-/EncodingErrors on strings and converting all other objects to safe string representations. sprint = SafePrinter(pad=False, padchar=' ', sep=' ', end='\\n', file=sys.stdout, fn=None) sprint(value, ..., pad=False, padchar=' ', sep=' ', end='\\n', file=sys.stdout, fn=None) Writes the values to a stream (default sys.stdout), honoring its encoding and replacing characters not present in the encoding with question marks silently. Optional keyword arguments: pad: pad the lines to n chars, or os.getenv('COLUMNS') if True. padchar: character to use for padding, default a space. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. file: a file-like object (stream); defaults to the sys.stdout. fn: a function to execute instead of printing. """ self.pad = pad self.padchar = padchar self.sep = sep self.end = end self.file = file_ self.fn = fn self.encoding = encoding or (get_encoding(file_) if file_ else None) def __call__(self, *args, **kwargs): self.write(*args, **kwargs) def flush(self): self.file and self.file.flush() def write(self, *args, **kwargs): pad = kwargs.get("pad", self.pad) padchar = kwargs.get("padchar", self.padchar) sep = kwargs.get("sep", self.sep) end = kwargs.get("end", self.end) file_ = kwargs.get("file_", self.file) fn = kwargs.get("fn", self.fn) encoding = kwargs.get("encoding", self.encoding) strargs = [] for arg in args: if not isinstance(arg, basestring): try: arg = str(arg) except: arg = repr(arg) elif isinstance(arg, unicode) and encoding: arg = arg.encode(encoding, "replace") strargs += [arg] line = sep.join(strargs).rstrip() try: conwidth = int(os.getenv("COLUMNS")) except (TypeError, ValueError): conwidth = 80 if pad is not False: if pad is True: width = conwidth else: width = int(pad) line = line.ljust(width, padchar) if fn: fn(line) else: file_.write(line) if end and (sys.platform != "win32" or len(line) != conwidth or not (hasattr(file_, "isatty") and file_.isatty()) or end != "\n"): # On Windows, if a line is exactly the width of the buffer, a line # break would insert an empty line between this line and the next. # To avoid this, skip the newline in that case. file_.write(end) safe_print = SafePrinter() if __name__ == '__main__': for arg in sys.argv[1:]: safe_print(arg.decode(fs_enc)) dispcalGUI-1.7.1.6/dispcalGUI/setup.py000644 000765 000000 00000107157 12266411534 017333 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- """ dispcalGUI setup.py script Can be used with setuptools or pure distutils (the latter can be forced with the --use-distutils option, otherwise it will try to use setuptools by default). Also supported in addition to standard distutils/setuptools commands, are the bdist_bbfreeze, py2app and py2exe commands (if the appropriate packages are installed), which makes this file your all-around building/ bundling powerhouse for dispcalGUI. In the case of py2exe, special care is taken of Python 2.6+ and the Microsoft.VC90.CRT assembly dependency, so if building an executable on Windows with Python 2.6+ you should preferably use py2exe. Please note that bdist_bbfreeze and py2app *require* setuptools. IMPORTANT NOTE: If called from within the installed package, should only be used to uninstall (setup.py uninstall --record=INSTALLED_FILES), otherwise use the wrapper script in the root directory of the source tar.gz/zip """ from distutils.command.install import install from distutils.util import change_root, get_platform import distutils.core import glob import os import platform import shutil import subprocess as sp import sys from time import strftime from types import StringType from defaultpaths import autostart, autostart_home from meta import (author, author_ascii, description, longdesc, domain, name, py_maxversion, py_minversion, version, version_tuple, wx_minversion) from util_os import relpath pypath = os.path.abspath(__file__) pydir = os.path.dirname(pypath) basedir = os.path.dirname(pydir) msiversion = ".".join((str(version_tuple[0]), str(version_tuple[1]), str(version_tuple[2]) + str(version_tuple[3]))) class Target: def __init__(self, **kwargs): self.__dict__.update(kwargs) def setup(): bits = platform.architecture()[0][:2] print "***", os.path.abspath(sys.argv[0]), " ".join(sys.argv[1:]) bdist_bbfreeze = "bdist_bbfreeze" in sys.argv[1:] bdist_dumb = "bdist_dumb" in sys.argv[1:] bdist_win = "bdist_msi" in sys.argv[1:] or "bdist_wininst" in sys.argv[1:] debug = 0 do_full_install = False do_install = False do_py2app = "py2app" in sys.argv[1:] do_py2exe = "py2exe" in sys.argv[1:] do_uninstall = "uninstall" in sys.argv[1:] doc_layout = "deb" if os.path.exists("/etc/debian_version") else "" dry_run = "-n" in sys.argv[1:] or "--dry-run" in sys.argv[1:] help = False install_data = None # data files install path (only if given) is_rpm_build = "bdist_rpm" in sys.argv[1:] or os.path.abspath(sys.argv[0]).endswith( os.path.join(os.path.sep, "rpm", "BUILD", name + "-" + version, os.path.basename(os.path.abspath(sys.argv[0])))) prefix = "" recordfile_name = None # record installed files to this file sdist = "sdist" in sys.argv[1:] setuptools = None skip_instrument_conf_files = "--skip-instrument-configuration-files" in \ sys.argv[1:] skip_postinstall = "--skip-postinstall" in sys.argv[1:] use_distutils = not bdist_bbfreeze and not do_py2app use_setuptools = not use_distutils or "--use-setuptools" in \ sys.argv[1:] or (os.path.exists("use-setuptools") and not "--use-distutils" in sys.argv[1:]) sys.path.insert(1, os.path.join(os.path.dirname(pydir), "util")) if use_setuptools: if "--use-setuptools" in sys.argv[1:] and not \ os.path.exists("use-setuptools"): open("use-setuptools", "w").close() try: from ez_setup import use_setuptools as ez_use_setuptools ez_use_setuptools() except ImportError: pass try: from setuptools import setup, Extension setuptools = True print "using setuptools" except ImportError: pass else: if os.path.exists("use-setuptools"): os.remove("use-setuptools") if not setuptools: from distutils.core import setup, Extension print "using distutils" if do_py2exe: import py2exe # ModuleFinder can't handle runtime changes to __path__, but win32com # uses them try: # if this doesn't work, try import modulefinder import py2exe.mf as modulefinder import win32com for p in win32com.__path__[1:]: modulefinder.AddPackagePath("win32com", p) for extra in ["win32com.shell"]: __import__(extra) m = sys.modules[extra] for p in m.__path__[1:]: modulefinder.AddPackagePath(extra, p) except ImportError: # no build path setup, no worries. pass if do_py2exe: origIsSystemDLL = py2exe.build_exe.isSystemDLL def isSystemDLL(pathname): if os.path.basename(pathname).lower() in ("gdiplus.dll", "mfc90.dll"): return 0 if os.path.basename(pathname).lower() in ("powrprof.dll", ) or \ os.path.basename(pathname).lower().startswith("api-ms-win-"): return 1 return origIsSystemDLL(pathname) py2exe.build_exe.isSystemDLL = isSystemDLL if do_uninstall: i = sys.argv.index("uninstall") sys.argv = sys.argv[:i] + ["install"] + sys.argv[i + 1:] install.create_home_path = lambda self: None if skip_instrument_conf_files: i = sys.argv.index("--skip-instrument-configuration-files") sys.argv = sys.argv[:i] + sys.argv[i + 1:] if skip_postinstall: i = sys.argv.index("--skip-postinstall") sys.argv = sys.argv[:i] + sys.argv[i + 1:] if "--use-distutils" in sys.argv[1:]: i = sys.argv.index("--use-distutils") sys.argv = sys.argv[:i] + sys.argv[i + 1:] if "--use-setuptools" in sys.argv[1:]: i = sys.argv.index("--use-setuptools") sys.argv = sys.argv[:i] + sys.argv[i + 1:] argv = list(sys.argv[1:]) for i, arg in enumerate(reversed(argv)): n = len(sys.argv) - i - 1 if arg in ("install", "install_lib", "install_headers", "install_scripts", "install_data"): if arg == "install": do_full_install = True do_install = True elif arg == "-d" and len(sys.argv[1:]) > i: dist_dir = sys.argv[i + 2] else: arg = arg.split("=") if arg[0] == "--debug": debug = 1 if len(arg) == 1 else int(arg[1]) sys.argv = sys.argv[:n] + sys.argv[n + 1:] elif len(arg) == 2: if arg[0] == "--dist-dir": dist_dir = arg[1] elif arg[0] == "--doc-layout": doc_layout = arg[1] sys.argv = sys.argv[:n] + sys.argv[n + 1:] elif arg[0] == "--install-data": install_data = arg[1] elif arg[0] == "--prefix": prefix = arg[1] elif arg[0] == "--record": recordfile_name = arg[1] elif arg[0] == "-h" or arg[0].startswith("--help"): help = True if not recordfile_name and (do_full_install or do_uninstall): recordfile_name = "INSTALLED_FILES" # if not do_uninstall: # sys.argv.append("--record=" + "INSTALLED_FILES") if sys.platform in ("darwin", "win32") or "bdist_egg" in sys.argv[1:]: doc = data = "." if do_py2app or do_py2exe or bdist_bbfreeze else name else: # Linux/Unix data = name if doc_layout.startswith("deb"): doc = os.path.join("doc", name.lower()) elif "suse" in doc_layout: doc = os.path.join("doc", "packages", name) else: doc = os.path.join("doc", name + "-" + version) if not install_data: data = os.path.join("share", data) doc = os.path.join("share", doc) if is_rpm_build: doc = os.path.join(os.path.sep, "usr", doc) # on Mac OS X and Windows, we want data files in the package dir # (package_data will be ignored when using py2exe) package_data = { name: [ "argyll_instruments.json", "beep.wav", "camera_shutter.wav", "pnp.ids", "lang/*.json", "presets/*.icc", "quirk.json", "ref/*.cie", "ref/*.gam", "ref/*.icm", "ref/*.ti1", "report/*.css", "report/*.html", "report/*.js", "theme/*.png", "theme/icons/10x10/*.png", "theme/icons/16x16/*.png", "theme/icons/32x32/*.png", "theme/icons/72x72/*.png", "ti1/*.ti1", "xrc/*.xrc", "linear.cal", "test.cal" ] if sys.platform in ("darwin", "win32") and not do_py2app and not do_py2exe else [] } if sdist and sys.platform in ("darwin", "win32"): package_data[name] += ["theme/icons/22x22/*.png", "theme/icons/24x24/*.png", "theme/icons/48x48/*.png", "theme/icons/256x256/*.png"] if sys.platform == "win32" and not do_py2exe: package_data[name] += ["theme/icons/*.ico"] # Doc files data_files = [ (os.path.join(doc, "screenshots"), glob.glob(os.path.join(pydir, "..", "screenshots", "*.png"))), (os.path.join(doc, "theme"), glob.glob(os.path.join(pydir, "..", "theme", "*.png"))), (os.path.join(doc, "theme"), glob.glob(os.path.join(pydir, "..", "theme", "*.css"))), (os.path.join(doc, "theme"), glob.glob(os.path.join(pydir, "..", "theme", "*.js"))), (os.path.join(doc, "theme", "slimbox2"), glob.glob(os.path.join(pydir, "..", "theme", "slimbox2", "*.css"))), (os.path.join(doc, "theme", "slimbox2"), glob.glob(os.path.join(pydir, "..", "theme", "slimbox2", "*.js"))), (os.path.join(doc, "theme", "icons"), [os.path.join(pydir, "..", "theme", "icons", "favicon.ico")]), (doc, [os.path.join(pydir, "..", "README.html")]) ] if not is_rpm_build or doc_layout.startswith("deb") else [] if data_files: if doc_layout.startswith("deb"): data_files.append((doc, [os.path.join(pydir, "..", "dist", "copyright")])) data_files.append((os.path.join(os.path.dirname(data), "doc-base"), [os.path.join(pydir, "..", "misc", "dispcalgui-readme")])) else: data_files.append((doc, [os.path.join(pydir, "..", "LICENSE.txt")])) if sys.platform not in ("darwin", "win32") or do_py2app or do_py2exe: # Linux/Unix or py2app/py2exe data_files += [ (data, [os.path.join(pydir, "argyll_instruments.json")]), (data, [os.path.join(pydir, "beep.wav")]), (data, [os.path.join(pydir, "camera_shutter.wav")]), (data, [os.path.join(pydir, "pnp.ids")]), (data, [os.path.join(pydir, "quirk.json")]), (os.path.join(data, "lang"), glob.glob(os.path.join(pydir, "lang", "*.json"))), (os.path.join(data, "presets"), glob.glob(os.path.join(pydir, "presets", "*.icc"))), (os.path.join(data, "ref"), glob.glob(os.path.join(pydir, "ref", "*.cie"))), (os.path.join(data, "ref"), glob.glob(os.path.join(pydir, "ref", "*.gam"))), (os.path.join(data, "ref"), glob.glob(os.path.join(pydir, "ref", "*.icm"))), (os.path.join(data, "ref"), glob.glob(os.path.join(pydir, "ref", "*.ti1"))), (os.path.join(data, "report"), glob.glob(os.path.join(pydir, "report", "*.css"))), (os.path.join(data, "report"), glob.glob(os.path.join(pydir, "report", "*.html"))), (os.path.join(data, "report"), glob.glob(os.path.join(pydir, "report", "*.js"))), (os.path.join(data, "tests"), glob.glob(os.path.join(pydir, "..", "tests", "*.icc"))), (os.path.join(data, "theme"), glob.glob(os.path.join(pydir, "theme", "*.png"))), (os.path.join(data, "ti1"), glob.glob(os.path.join(pydir, "ti1", "*.ti1"))), (os.path.join(data, "xrc"), glob.glob(os.path.join(pydir, "xrc", "*.xrc"))), (data, [os.path.join(pydir, "linear.cal")]), (data, [os.path.join(pydir, "test.cal")]) ] if sys.platform == "win32": if do_py2exe: data_files += [ (os.path.join(data, "theme", "icons"), [os.path.join(pydir, "theme", "icons", name + "-uninstall.ico")]), (os.path.join(data, "lib"), [sys.executable, sys.executable.replace(".exe", "w.exe")]), (os.path.join(data, "scripts"), [os.path.join("scripts", name + "-3DLUT-maker")]), (os.path.join(data, "scripts"), [os.path.join("scripts", name + "-apply-profiles")]), (os.path.join(data, "scripts"), [os.path.join("scripts", name + "-curve-viewer")]), (os.path.join(data, "scripts"), [os.path.join("scripts", name + "-profile-info")]), (os.path.join(data, "scripts"), [os.path.join("scripts", name + "-synthprofile")]), (os.path.join(data, "scripts"), [os.path.join("scripts", name + "-testchart-editor")])] else: data_files += [(os.path.join(data, "theme", "icons"), glob.glob(os.path.join(pydir, "theme", "icons", "*.icns|*.ico")))] elif sys.platform != "darwin": # Linux data_files += [(os.path.join(os.path.dirname(data), "applications"), [os.path.join(pydir, "..", "misc", name + ".desktop")])] data_files += [(autostart if os.geteuid() == 0 or prefix.startswith("/") else autostart_home, [os.path.join(pydir, "..", "misc", "z-%s-apply-profiles.desktop" % name)])] data_files += [(os.path.join(os.path.dirname(data), "man", "man1"), glob.glob(os.path.join(pydir, "..", "man", "*.1")))] if not skip_instrument_conf_files: # device configuration / permission stuff if is_rpm_build: # RPM postinstall script will install these to the correct # locations. This allows us compatibility with Argyll # packages which may also contain same udev rules / hotplug # scripts, thus avoiding file conflicts data_files += [(os.path.join(data, "usb"), [os.path.join( pydir, "..", "misc", "45-Argyll.rules")])] data_files += [(os.path.join(data, "usb"), [os.path.join( pydir, "..", "misc", "55-Argyll.rules")])] data_files += [(os.path.join(data, "usb"), [os.path.join( pydir, "..", "misc", "Argyll")])] data_files += [(os.path.join(data, "usb"), [os.path.join( pydir, "..", "misc", "Argyll.usermap")])] else: devconf_files = [] if os.path.isdir("/etc/udev/rules.d"): if glob.glob("/dev/bus/usb/*/*"): # USB and serial instruments using udev, where udev # already creates /dev/bus/usb/00X/00X devices devconf_files += [ ("/etc/udev/rules.d", [os.path.join( pydir, "..", "misc", "55-Argyll.rules")]) ] else: # USB using udev, where there are NOT /dev/bus/usb/00X/00X # devices devconf_files += [ ("/etc/udev/rules.d", [os.path.join( pydir, "..", "misc", "45-Argyll.rules")]) ] else: if os.path.isdir("/etc/hotplug"): # USB using hotplug and Serial using udev # (older versions of Linux) devconf_files += [ ("/etc/hotplug/usb", [os.path.join(pydir, "..", "misc", fname) for fname in ["Argyll", "Argyll.usermap"]]) ] for entry in devconf_files: for fname in entry[1]: if os.path.isfile(fname): data_files += [(entry[0], [fname])] for dname in ("10x10", "16x16", "22x22", "24x24", "32x32", "48x48", "72x72", "256x256"): # Only the 10x10, 16x16, 32x32 and 72x72 icons are used exclusively # by the app, the other sizes of the app icon are used for the # desktop entry under Linux icons = [] desktopicons = [] for iconpath in glob.glob(os.path.join(pydir, "theme", "icons", dname, "*.png")): if os.path.basename(iconpath) != name + ".png" or ( sys.platform in ("darwin", "win32") and dname in ("10x10", "16x16", "32x32", "72x72")): icons.append(iconpath) elif sys.platform not in ("darwin", "win32"): desktopicons.append(iconpath) if icons: data_files += [(os.path.join(data, "theme", "icons", dname), icons)] if desktopicons: data_files += [(os.path.join(os.path.dirname(data), "icons", "hicolor", dname, "apps"), desktopicons)] sources = [os.path.join(name, "RealDisplaySizeMM.c")] if sys.platform == "win32": macros = [("NT", None)] libraries = ["user32", "gdi32"] link_args = None elif sys.platform == "darwin": macros = [("__APPLE__", None), ("UNIX", None)] libraries = None link_args = ["-framework Carbon", "-framework CoreFoundation", "-framework Python", "-framework IOKit"] if not help and ("build" in sys.argv[1:] or "build_ext" in sys.argv[1:] or (("install" in sys.argv[1:] or "install_lib" in sys.argv[1:]) and not "--skip-build" in sys.argv[1:])): p = sp.Popen([sys.executable, '-c', '''import os from distutils.core import setup, Extension setup(ext_modules=[Extension("%s.RealDisplaySizeMM", sources=%r, define_macros=%r, extra_link_args=%r)])''' % (name, sources, macros, link_args)] + sys.argv[1:], stdout = sp.PIPE, stderr = sp.STDOUT) lines = [] while True: o = p.stdout.readline() if o == '' and p.poll() != None: break if o[0:4] == 'gcc ': lines += [o] print o.rstrip() if len(lines): os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.3' sp.call(lines[-1], shell = True) # fix the library else: macros = [("UNIX", None)] libraries = ["X11", "Xinerama", "Xrandr", "Xxf86vm"] link_args = None if sys.platform == "darwin": extname = "%s.lib.RealDisplaySizeMM" % name else: extname = "%s.lib%s.python%s%s.RealDisplaySizeMM" % ((name, bits) + sys.version_info[:2]) RealDisplaySizeMM = Extension(extname, sources=sources, define_macros=macros, libraries=libraries, extra_link_args=link_args) ext_modules = [RealDisplaySizeMM] requires = [] if not setuptools or sys.platform != "win32": # wxPython windows installer doesn't add egg-info entry, so # a dependency check from pkg_resources would always fail requires += [ "wxPython (>= %s)" % ".".join(str(n) for n in wx_minversion) ] if sys.platform == "win32": requires += [ "pywin32 (>= 213.0)" ] packages = [name, "%s.lib" % name, "%s.lib.agw" % name] if sdist: # For source desributions we want all libraries for tmpbits in ("32", "64"): for pycompat in ("25", "26", "27"): packages += ["%s.lib%s" % (name, tmpbits), "%s.lib%s.python%s" % (name, tmpbits, pycompat)] elif sys.platform == "darwin": # On Mac OS X we only want the universal binary in lib pass else: # On Linux/Windows we want separate libraries packages += ["%s.lib%s" % (name, bits), "%s.lib%s.python%s%s" % ((name, bits) + sys.version_info[:2])] attrs = { "author": author_ascii, "author_email": "%s@hoech.net" % name, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: MacOS X", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Multimedia :: Graphics", ], "data_files": data_files, "description": description, "download_url": "http://%(domain)s/" "%(name)s-%(version)s.tar.gz" % {"domain": domain, "name": name, "version": version}, "ext_modules": ext_modules, "license": "GPL v3", "long_description": longdesc, "name": name, "packages": packages, "package_data": package_data, "package_dir": { name: name }, "platforms": [ "Python >= %s <= %s" % (".".join(str(n) for n in py_minversion), ".".join(str(n) for n in py_maxversion)), "Linux/Unix with X11", "Mac OS X >= 10.4", "Windows 2000 and newer" ], "requires": requires, "provides": [name], "scripts": [], "url": "http://%s/" % domain, "version": msiversion if "bdist_msi" in sys.argv[1:] else version } if setuptools: attrs["entry_points"] = { "gui_scripts": [ "%s = %s.%s:main" % (name, name, name), ] } attrs["exclude_package_data"] = { name: ["RealDisplaySizeMM.c"] } attrs["include_package_data"] = sys.platform in ("darwin", "win32") install_requires = [req.replace("(", "").replace(")", "") for req in requires] attrs["install_requires"] = install_requires attrs["zip_safe"] = False else: attrs["scripts"] += [os.path.join("scripts", name)] attrs["scripts"] += [os.path.join("scripts", name + "-3DLUT-maker")] attrs["scripts"] += [os.path.join("scripts", name + "-curve-viewer")] attrs["scripts"] += [os.path.join("scripts", name + "-profile-info")] attrs["scripts"] += [os.path.join("scripts", name + "-synthprofile")] attrs["scripts"] += [os.path.join("scripts", name + "-testchart-editor")] if sys.platform != "darwin" and (sys.platform != "win32" or not do_py2exe): attrs["scripts"] += [os.path.join("scripts", name + "-apply-profiles")] if bdist_bbfreeze: attrs["setup_requires"] = ["bbfreeze"] if "bdist_wininst" in sys.argv[1:]: attrs["scripts"] += [os.path.join("util", name + "_postinstall.py")] if do_py2app: reversedomain = domain.split(".") reversedomain.reverse() reversedomain = ".".join(reversedomain) attrs["app"] = [os.path.join(pydir, "main.py")] dist_dir = os.path.join(pydir, "..", "dist", "py2app.%s-py%s" % (get_platform(), sys.version[:3]), name + "-" + version) excludes = ["test", "Tkconstants", "Tkinter", "tcl"] for excludebits in ("32", "64"): excludes += ["dispcalGUI.lib%s" % excludebits] for pycompat in ("25", "26", "27"): excludes += ["lib%s.python%s" % (excludebits, pycompat), "lib%s.python%s.RealDisplaySizeMM" % (excludebits, pycompat)] attrs["options"] = { "py2app": { "argv_emulation": True, "dist_dir": dist_dir, # numpy.lib.utils imports pydoc, which imports Tkinter, but # numpy.lib.utils is not even used by dispcalGUI, so omit all # Tk stuff "excludes": excludes, "iconfile": os.path.join(pydir, "theme", "icons", "dispcalGUI.icns"), "optimize": 0, "plist": { "CFBundleDevelopmentRegion": "English", "CFBundleExecutable": name, "CFBundleGetInfoString": version, "CFBundleIdentifier": reversedomain, "CFBundleInfoDictionaryVersion": "6.0", "CFBundleLongVersionString": version, "CFBundleName": name, "CFBundlePackageType": "APPL", "CFBundleShortVersionString": version, "CFBundleSignature": "????", "CFBundleVersion": ".".join(map(str, version_tuple)), "NSHumanReadableCopyright": u"© %s %s" % (strftime("%Y"), author) } } } attrs["setup_requires"] = ["py2app"] if do_py2exe: import wx from winmanifest_util import getmanifestxml manifest_xml = getmanifestxml(os.path.join(pydir, "..", "misc", name + (".exe.VC90.manifest" if hasattr(sys, "version_info") and sys.version_info[:2] >= (2,6) else ".exe.manifest"))) attrs["windows"] = [Target(**{ "script": os.path.join(pydir, "..", script), "icon_resources": [(1, os.path.join(pydir, "theme", "icons", name + ".ico"))], "other_resources": [(24, 1, manifest_xml)], "copyright": u"© %s %s" % (strftime("%Y"), author), "description": desc }) for desc, script in [(name, name + ".pyw"), ("Profile Loader", os.path.join("scripts", name + "-apply-profiles")), ("3DLUT Maker", os.path.join("scripts", name + "-3DLUT-maker")), ("Curve Viewer", os.path.join("scripts", name + "-curve-viewer")), ("Profile Info", os.path.join("scripts", name + "-profile-info")), ("Synthetic Profile Creator", os.path.join("scripts", name + "-synthprofile")), ("Testchart Editor", os.path.join("scripts", name + "-testchart-editor"))]] dist_dir = os.path.join(pydir, "..", "dist", "py2exe.%s-py%s" % (get_platform(), sys.version[:3]), name + "-" + version) excludes = ["Tkconstants", "Tkinter", "tcl", "dispcalGUI.lib", "lib.RealDisplaySizeMM"] if bits == "32": excludebits = "64" else: excludebits = "32" excludes += ["dispcalGUI.lib%s" % excludebits, "lib%s.RealDisplaySizeMM" % excludebits] for pycompat in ("25", "26", "27"): excludes += ["lib%s.python%s" % (excludebits, pycompat), "lib%s.python%s.RealDisplaySizeMM" % (excludebits, pycompat)] attrs["options"] = { "py2exe": { "dist_dir": dist_dir, "dll_excludes": [ "iertutil.dll", "msvcm90.dll", "msvcp90.dll", "msvcr90.dll", "mswsock.dll", "urlmon.dll", "w9xpopen.exe" ], # numpy.lib.utils imports pydoc, which imports Tkinter, but # numpy.lib.utils is not even used by dispcalGUI, so omit all # Tk stuff "excludes": excludes, "bundle_files": 3 if wx.VERSION >= (2, 8, 10, 1) else 1, "compressed": 1, "optimize": 0 # 0 = don’t optimize (generate .pyc) # 1 = normal optimization (like python -O) # 2 = extra optimization (like python -OO) } } if debug: attrs["options"]["py2exe"].update({ "bundle_files": 3, "compressed": 0, "optimize": 0, "skip_archive": 1 }) if setuptools: attrs["setup_requires"] = ["py2exe"] attrs["zipfile"] = os.path.join("lib", "library.zip") if (do_uninstall or do_install or bdist_win or bdist_dumb) and not help: distutils.core._setup_stop_after = "commandline" dist = setup(**attrs) distutils.core._setup_stop_after = None cmd = install(dist).get_finalized_command("install") if debug > 0: for attrname in [ "base", "data", "headers", "lib", "libbase", "platbase", "platlib", "prefix", "purelib", "root", "scripts", "userbase" ]: if attrname not in ["prefix", "root"]: attrname = "install_" + attrname if hasattr(cmd, attrname): print attrname, getattr(cmd, attrname) if debug > 1: try: from ppdir import ppdir except ImportError: pass else: ppdir(cmd, types=[dict, list, str, tuple, type, unicode]) if not install_data and sys.platform in ("darwin", "win32"): # on Mac OS X and Windows, we want data files in the package dir data_basedir = cmd.install_lib else: data_basedir = cmd.install_data data = change_root(data_basedir, data) doc = change_root(data_basedir, doc) # determine in which cases we want to make data file paths relative to # site-packages (on Mac and Windows) and when we want to make them # absolute (Linux) linux = sys.platform not in ("darwin", "win32") and (not cmd.root and setuptools) dar_win = (sys.platform in ("darwin", "win32") and (cmd.root or not setuptools)) or bdist_win if not do_uninstall and not install_data and (linux or dar_win) and \ attrs["data_files"]: if data_basedir.startswith(cmd.install_data + os.path.sep): data_basedir = relpath(data_basedir, cmd.install_data) print "*** changing basedir for data_files:", data_basedir for i, f in enumerate(attrs["data_files"]): if type(f) is StringType: attrs["data_files"][i] = change_root(data_basedir, f) else: attrs["data_files"][i] = (change_root(data_basedir, f[0]), f[1]) if do_uninstall and not help: # Quick and dirty uninstall if dry_run: print "dry run - nothing will be removed" else: from postinstall import postuninstall # Yeah, yeah - its actually pre-uninstall if cmd.root: postuninstall(prefix=change_root(cmd.root, cmd.prefix)) else: postuninstall(prefix=cmd.prefix) removed = [] visited = [] if os.path.exists(recordfile_name): paths = [(change_root(cmd.root, line.rstrip("\n")) if cmd.root else line.rstrip("\n")) for line in open(recordfile_name, "r")] else: paths = [] if not paths: # If the installed files have not been recorded, use some fallback # logic to find them paths = glob.glob(os.path.join(cmd.install_scripts, name)) if sys.platform == "win32": if setuptools: paths += glob.glob(os.path.join(cmd.install_scripts, name + ".exe")) paths += glob.glob(os.path.join(cmd.install_scripts, name + "-script.py")) else: paths += glob.glob(os.path.join(cmd.install_scripts, name + ".cmd")) paths += glob.glob(os.path.join(cmd.install_scripts, name + "_postinstall.py")) for attrname in [ "data", "headers", "lib", "libbase", "platlib", "purelib" ]: path = os.path.join(getattr(cmd, "install_" + attrname), name) if not path in paths: # Using sys.version in this way is consistent with # setuptools paths += glob.glob(path) + glob.glob(path + ("-%(version)s-py%(pyversion)s*.egg" % { "version": version, "pyversion": sys.version[:3] }) ) + glob.glob(path + ("-%(version)s-py%(pyversion)s*.egg-info" % { "version": version, "pyversion": sys.version[:3] }) ) if os.path.isabs(data) and not data in paths: for fname in [ "lang", "presets", "ref", "report", "screenshots", "tests", "theme", "ti1", "LICENSE.txt", "README.html", "argyll_instruments.json", "beep.wav", "camera_shutter.wav", name + ".desktop", "pnp.ids", "quirk.json", "linear.cal", "test.cal" ]: path = os.path.join(data, fname) if not path in paths: paths += glob.glob(path) if os.path.isabs(doc) and not doc in paths: for fname in [ "screenshots", "theme", "LICENSE.txt", "README.html" ]: path = os.path.join(doc, fname) if not path in paths: paths += glob.glob(path) if sys.platform == "win32": from postinstall import get_special_folder_path startmenu_programs_common = get_special_folder_path( "CSIDL_COMMON_PROGRAMS") startmenu_programs = get_special_folder_path("CSIDL_PROGRAMS") for path in (startmenu_programs_common, startmenu_programs): if path: for filename in (name, "LICENSE", "README", "Uninstall"): paths += glob.glob(os.path.join(path, name, filename + ".lnk")) for path in paths: if os.path.exists(path): if path in visited: continue else: visited += [path] if dry_run: print path continue try: if os.path.isfile(path): os.remove(path) elif os.path.isdir(path): os.rmdir(path) except Exception, exception: print "could'nt remove", path print " ", exception else: print "removed", path removed += [path] while path != os.path.dirname(path): # remove parent directories if empty # could also use os.removedirs(path) but we want some status # info path = os.path.dirname(path) if os.path.isdir(path): if len(os.listdir(path)) == 0: if path in visited: continue else: visited += [path] if dry_run: print path continue try: os.rmdir(path) except Exception, exception: print "could'nt remove", path print " ", exception else: print "removed", path removed += [path] else: break if not removed: print len(visited), "entries found" else: print len(removed), "entries removed" else: # To have a working sdist and bdist_rpm when using distutils, # we go to the length of generating MANIFEST.in from scratch everytime, # using the information available from setup. manifest_in = ["# This file will be re-generated by setup.py - do not" "edit"] manifest_in += ["include LICENSE.txt", "include MANIFEST", "include MANIFEST.in", "include README.html", "include %s.pyw" % name, "include use-distutils"] manifest_in += ["include " + os.path.basename(sys.argv[0])] manifest_in += ["include " + os.path.splitext(os.path.basename(sys.argv[0]))[0] + ".cfg"] for datadir, datafiles in attrs.get("data_files", []): for datafile in datafiles: manifest_in += ["include " + ( relpath(os.path.sep.join(datafile.split("/")), basedir) or datafile)] for extmod in attrs.get("ext_modules", []): manifest_in += ["include " + os.path.sep.join(src.split("/")) for src in extmod.sources] for pkg in attrs.get("packages", []): pkg = os.path.join(*pkg.split(".")) pkgdir = os.path.sep.join(attrs.get("package_dir", {}).get(pkg, pkg).split("/")) manifest_in += ["include " + os.path.join(pkgdir, "*.py")] manifest_in += ["include " + os.path.join(pkgdir, "*.so")] for obj in attrs.get("package_data", {}).get(pkg, []): manifest_in += ["include " + os.path.sep.join([pkgdir] + obj.split("/"))] for pymod in attrs.get("py_modules", []): manifest_in += ["include " + os.path.join(*pymod.split("."))] manifest_in += ["include " + os.path.join(name, "theme", "theme-info.txt")] manifest_in += ["recursive-include %s %s %s" % (os.path.join(name, "theme", "icons"), "*.icns", "*.ico")] manifest_in += ["recursive-include %s %s" % ("autopackage", "*")] manifest_in += ["include " + os.path.join("man", "*.1")] manifest_in += ["recursive-include %s %s" % ("misc", "*")] if skip_instrument_conf_files: manifest_in += [ "exclude misc/Argyll", "exclude misc/*.rules", "exclude misc/*.usermap", ] manifest_in += ["include " + os.path.join("screenshots", "*.png")] manifest_in += ["include " + os.path.join("scripts", "*")] manifest_in += ["include " + os.path.join("tests", "*")] manifest_in += ["recursive-include %s %s" % ("theme", "*")] manifest_in += ["recursive-include %s %s" % ("util", "*.cmd *.py *.sh")] if sys.platform == "win32" and not setuptools: # Only needed under Windows manifest_in += ["global-exclude .svn/*"] manifest_in += ["global-exclude *~"] manifest_in += ["global-exclude *.backup"] manifest_in += ["global-exclude *.bak"] if not dry_run: manifest = open("MANIFEST.in", "w") manifest.write("\n".join(manifest_in)) manifest.close() if os.path.exists("MANIFEST"): os.remove("MANIFEST") if bdist_bbfreeze: i = sys.argv.index("bdist_bbfreeze") if not "-d" in sys.argv[i + 1:] and \ not "--dist-dir" in sys.argv[i + 1:]: dist_dir = os.path.join(pydir, "..", "dist", "bbfreeze.%s-py%s" % (get_platform(), sys.version[:3])) sys.argv.insert(i + 1, "--dist-dir=" + dist_dir) if not "egg_info" in sys.argv[1:i]: sys.argv.insert(i, "egg_info") if do_py2app or do_py2exe: sys.path.insert(1, pydir) i = sys.argv.index("py2app" if do_py2app else "py2exe") if not "build_ext" in sys.argv[1:i]: sys.argv.insert(i, "build_ext") if len(sys.argv) < i + 2 or sys.argv[i + 1] not in ("--inplace", "-i"): sys.argv.insert(i + 1, "-i") setup(**attrs) if dry_run or help: return if do_py2app: # Create ref, tests, ReadMe and license symlinks in directory # containing the app bundle os.symlink(os.path.join("dispcalGUI.app", "Contents", "Resources", "ref"), os.path.join(dist_dir, "ref")) os.symlink(os.path.join("dispcalGUI.app", "Contents", "Resources", "tests"), os.path.join(dist_dir, "tests")) os.symlink(os.path.join("dispcalGUI.app", "Contents", "Resources", "README.html"), os.path.join(dist_dir, "README.html")) os.symlink(os.path.join("dispcalGUI.app", "Contents", "Resources", "LICENSE.txt"), os.path.join(dist_dir, "LICENSE.txt")) if do_py2exe: shutil.copy(os.path.join(dist_dir, "python26.dll"), os.path.join(dist_dir, "lib", "python26.dll")) if ((bdist_bbfreeze and sys.platform == "win32") or do_py2exe) and \ sys.version_info[:2] >= (2,6): from vc90crt import name as vc90crt_name, vc90crt_copy_files if do_py2exe: vc90crt_copy_files(dist_dir) vc90crt_copy_files(os.path.join(dist_dir, "lib")) else: vc90crt_copy_files(os.path.join(dist_dir, name + "-" + version)) if do_full_install and not is_rpm_build and not skip_postinstall: from postinstall import postinstall if sys.platform == "win32": path = os.path.join(cmd.install_lib, name) # Using sys.version in this way is consistent with setuptools for path in glob.glob(path) + glob.glob( os.path.join(path + ( "-%(version)s-py%(pyversion)s*.egg" % { "version": version, "pyversion": sys.version[:3] } ), name) ): if cmd.root: postinstall(prefix=change_root(cmd.root, path)) else: postinstall(prefix=path) elif cmd.root: postinstall(prefix=change_root(cmd.root, cmd.prefix)) else: postinstall(prefix=cmd.prefix) if __name__ == "__main__": setup() dispcalGUI-1.7.1.6/dispcalGUI/subprocess.py000644 000765 000000 00000001012 12025152312 020327 0ustar00svpwheel000000 000000 # WRAPPER FOR PYTHON 2.5 # This module exists only to make sure that other module's imports of subprocess # end up with a version that supports the terminate() method (introduced in # Python 2.6) import sys from subprocess26 import * if sys.platform == "win32": from subprocess26 import (CREATE_NEW_CONSOLE, DUPLICATE_SAME_ACCESS, INFINITE, STARTF_USESHOWWINDOW, STARTF_USESTDHANDLES, STARTUPINFO, STD_ERROR_HANDLE, STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, SW_HIDE, WAIT_OBJECT_0) dispcalGUI-1.7.1.6/dispcalGUI/subprocess26.py000644 000765 000000 00000136076 12025152312 020522 0ustar00svpwheel000000 000000 # subprocess - Subprocesses with accessible I/O streams # # For more information about this module, see PEP 324. # # This module should remain compatible with Python 2.2, see PEP 291. # # Copyright (c) 2003-2005 by Peter Astrand # # Licensed to PSF under a Contributor Agreement. # See http://www.python.org/2.4/license for licensing details. r"""subprocess - Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several other, older modules and functions, like: os.system os.spawn* os.popen* popen2.* commands.* Information about how the subprocess module can be used to replace these modules and functions can be found below. Using the subprocess module =========================== This module defines one class called Popen: class Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0): Arguments are: args should be a string, or a sequence of program arguments. The program to execute is normally the first item in the args sequence or string, but can be explicitly set by using the executable argument. On UNIX, with shell=False (default): In this case, the Popen class uses os.execvp() to execute the child program. args should normally be a sequence. A string will be treated as a sequence with the string as the only item (the program to execute). On UNIX, with shell=True: If args is a string, it specifies the command string to execute through the shell. If args is a sequence, the first item specifies the command string, and any additional items will be treated as additional shell arguments. On Windows: the Popen class uses CreateProcess() to execute the child program, which operates on strings. If args is a sequence, it will be converted to a string using the list2cmdline method. Please note that not all MS Windows applications interpret the command line the same way: The list2cmdline is designed for applications using the same rules as the MS C runtime. bufsize, if given, has the same meaning as the corresponding argument to the built-in open() function: 0 means unbuffered, 1 means line buffered, any other positive value means use a buffer of (approximately) that size. A negative bufsize means to use the system default, which usually means fully buffered. The default value for bufsize is 0 (unbuffered). stdin, stdout and stderr specify the executed programs' standard input, standard output and standard error file handles, respectively. Valid values are PIPE, an existing file descriptor (a positive integer), an existing file object, and None. PIPE indicates that a new pipe to the child should be created. With None, no redirection will occur; the child's file handles will be inherited from the parent. Additionally, stderr can be STDOUT, which indicates that the stderr data from the applications should be captured into the same file handle as for stdout. If preexec_fn is set to a callable object, this object will be called in the child process just before the child is executed. If close_fds is true, all file descriptors except 0, 1 and 2 will be closed before the child process is executed. if shell is true, the specified command will be executed through the shell. If cwd is not None, the current directory will be changed to cwd before the child is executed. If env is not None, it defines the environment variables for the new process. If universal_newlines is true, the file objects stdout and stderr are opened as a text files, but lines may be terminated by any of '\n', the Unix end-of-line convention, '\r', the Macintosh convention or '\r\n', the Windows convention. All of these external representations are seen as '\n' by the Python program. Note: This feature is only available if Python is built with universal newline support (the default). Also, the newlines attribute of the file objects stdout, stdin and stderr are not updated by the communicate() method. The startupinfo and creationflags, if given, will be passed to the underlying CreateProcess() function. They can specify things such as appearance of the main window and priority for the new process. (Windows only) This module also defines two shortcut functions: call(*popenargs, **kwargs): Run command with arguments. Wait for command to complete, then return the returncode attribute. The arguments are the same as for the Popen constructor. Example: retcode = call(["ls", "-l"]) check_call(*popenargs, **kwargs): Run command with arguments. Wait for command to complete. If the exit code was zero then return, otherwise raise CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute. The arguments are the same as for the Popen constructor. Example: check_call(["ls", "-l"]) Exceptions ---------- Exceptions raised in the child process, before the new program has started to execute, will be re-raised in the parent. Additionally, the exception object will have one extra attribute called 'child_traceback', which is a string containing traceback information from the childs point of view. The most common exception raised is OSError. This occurs, for example, when trying to execute a non-existent file. Applications should prepare for OSErrors. A ValueError will be raised if Popen is called with invalid arguments. check_call() will raise CalledProcessError, if the called process returns a non-zero return code. Security -------- Unlike some other popen functions, this implementation will never call /bin/sh implicitly. This means that all characters, including shell metacharacters, can safely be passed to child processes. Popen objects ============= Instances of the Popen class have the following methods: poll() Check if child process has terminated. Returns returncode attribute. wait() Wait for child process to terminate. Returns returncode attribute. communicate(input=None) Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate. The optional input argument should be a string to be sent to the child process, or None, if no data should be sent to the child. communicate() returns a tuple (stdout, stderr). Note: The data read is buffered in memory, so do not use this method if the data size is large or unlimited. The following attributes are also available: stdin If the stdin argument is PIPE, this attribute is a file object that provides input to the child process. Otherwise, it is None. stdout If the stdout argument is PIPE, this attribute is a file object that provides output from the child process. Otherwise, it is None. stderr If the stderr argument is PIPE, this attribute is file object that provides error output from the child process. Otherwise, it is None. pid The process ID of the child process. returncode The child return code. A None value indicates that the process hasn't terminated yet. A negative value -N indicates that the child was terminated by signal N (UNIX only). Replacing older functions with the subprocess module ==================================================== In this section, "a ==> b" means that b can be used as a replacement for a. Note: All functions in this section fail (more or less) silently if the executed program cannot be found; this module raises an OSError exception. In the following examples, we assume that the subprocess module is imported with "from subprocess import *". Replacing /bin/sh shell backquote --------------------------------- output=`mycmd myarg` ==> output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] Replacing shell pipe line ------------------------- output=`dmesg | grep hda` ==> p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) output = p2.communicate()[0] Replacing os.system() --------------------- sts = os.system("mycmd" + " myarg") ==> p = Popen("mycmd" + " myarg", shell=True) pid, sts = os.waitpid(p.pid, 0) Note: * Calling the program through the shell is usually not required. * It's easier to look at the returncode attribute than the exitstatus. A more real-world example would look like this: try: retcode = call("mycmd" + " myarg", shell=True) if retcode < 0: print >>sys.stderr, "Child was terminated by signal", -retcode else: print >>sys.stderr, "Child returned", retcode except OSError, e: print >>sys.stderr, "Execution failed:", e Replacing os.spawn* ------------------- P_NOWAIT example: pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg") ==> pid = Popen(["/bin/mycmd", "myarg"]).pid P_WAIT example: retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg") ==> retcode = call(["/bin/mycmd", "myarg"]) Vector example: os.spawnvp(os.P_NOWAIT, path, args) ==> Popen([path] + args[1:]) Environment example: os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) ==> Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) Replacing os.popen* ------------------- pipe = os.popen("cmd", mode='r', bufsize) ==> pipe = Popen("cmd", shell=True, bufsize=bufsize, stdout=PIPE).stdout pipe = os.popen("cmd", mode='w', bufsize) ==> pipe = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE).stdin (child_stdin, child_stdout) = os.popen2("cmd", mode, bufsize) ==> p = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE, stdout=PIPE, close_fds=True) (child_stdin, child_stdout) = (p.stdin, p.stdout) (child_stdin, child_stdout, child_stderr) = os.popen3("cmd", mode, bufsize) ==> p = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True) (child_stdin, child_stdout, child_stderr) = (p.stdin, p.stdout, p.stderr) (child_stdin, child_stdout_and_stderr) = os.popen4("cmd", mode, bufsize) ==> p = Popen("cmd", shell=True, bufsize=bufsize, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True) (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout) On Unix, os.popen2, os.popen3 and os.popen4 also accept a sequence as the command to execute, in which case arguments will be passed directly to the program without shell intervention. This usage can be replaced as follows: (child_stdin, child_stdout) = os.popen2(["/bin/ls", "-l"], mode, bufsize) ==> p = Popen(["/bin/ls", "-l"], bufsize=bufsize, stdin=PIPE, stdout=PIPE) (child_stdin, child_stdout) = (p.stdin, p.stdout) Return code handling translates as follows: pipe = os.popen("cmd", 'w') ... rc = pipe.close() if rc != None and rc % 256: print "There were some errors" ==> process = Popen("cmd", 'w', shell=True, stdin=PIPE) ... process.stdin.close() if process.wait() != 0: print "There were some errors" Replacing popen2.* ------------------ (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode) ==> p = Popen(["somestring"], shell=True, bufsize=bufsize stdin=PIPE, stdout=PIPE, close_fds=True) (child_stdout, child_stdin) = (p.stdout, p.stdin) On Unix, popen2 also accepts a sequence as the command to execute, in which case arguments will be passed directly to the program without shell intervention. This usage can be replaced as follows: (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode) ==> p = Popen(["mycmd", "myarg"], bufsize=bufsize, stdin=PIPE, stdout=PIPE, close_fds=True) (child_stdout, child_stdin) = (p.stdout, p.stdin) The popen2.Popen3 and popen2.Popen4 basically works as subprocess.Popen, except that: * subprocess.Popen raises an exception if the execution fails * the capturestderr argument is replaced with the stderr argument. * stdin=PIPE and stdout=PIPE must be specified. * popen2 closes all filedescriptors by default, but you have to specify close_fds=True with subprocess.Popen. """ import sys mswindows = (sys.platform == "win32") import os import types import traceback import gc import signal # Exception classes used by this module. class CalledProcessError(Exception): """This exception is raised when a process run by check_call() returns a non-zero exit status. The exit status will be stored in the returncode attribute.""" def __init__(self, returncode, cmd): self.returncode = returncode self.cmd = cmd def __str__(self): return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode) if mswindows: import threading import msvcrt if 0: # <-- change this to use pywin32 instead of the _subprocess driver import pywintypes from win32api import GetStdHandle, STD_INPUT_HANDLE, \ STD_OUTPUT_HANDLE, STD_ERROR_HANDLE from win32api import GetCurrentProcess, DuplicateHandle, \ GetModuleFileName, GetVersion from win32con import DUPLICATE_SAME_ACCESS, SW_HIDE from win32pipe import CreatePipe from win32process import CreateProcess, STARTUPINFO, \ GetExitCodeProcess, STARTF_USESTDHANDLES, \ STARTF_USESHOWWINDOW, CREATE_NEW_CONSOLE from win32process import TerminateProcess from win32event import WaitForSingleObject, INFINITE, WAIT_OBJECT_0 else: from _subprocess import * class STARTUPINFO: dwFlags = 0 hStdInput = None hStdOutput = None hStdError = None wShowWindow = 0 class pywintypes: error = IOError else: import select import errno import fcntl import pickle __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "CalledProcessError"] try: MAXFD = os.sysconf("SC_OPEN_MAX") except: MAXFD = 256 # True/False does not exist on 2.2.0 #try: # False #except NameError: # False = 0 # True = 1 _active = [] def _cleanup(): for inst in _active[:]: if inst._internal_poll(_deadstate=sys.maxint) >= 0: try: _active.remove(inst) except ValueError: # This can happen if two threads create a new Popen instance. # It's harmless that it was already removed, so ignore. pass PIPE = -1 STDOUT = -2 def _eintr_retry_call(func, *args): while True: try: return func(*args) except OSError, e: if e.errno == errno.EINTR: continue raise def call(*popenargs, **kwargs): """Run command with arguments. Wait for command to complete, then return the returncode attribute. The arguments are the same as for the Popen constructor. Example: retcode = call(["ls", "-l"]) """ return Popen(*popenargs, **kwargs).wait() def check_call(*popenargs, **kwargs): """Run command with arguments. Wait for command to complete. If the exit code was zero then return, otherwise raise CalledProcessError. The CalledProcessError object will have the return code in the returncode attribute. The arguments are the same as for the Popen constructor. Example: check_call(["ls", "-l"]) """ retcode = call(*popenargs, **kwargs) cmd = kwargs.get("args") if cmd is None: cmd = popenargs[0] if retcode: raise CalledProcessError(retcode, cmd) return retcode def list2cmdline(seq): """ Translate a sequence of arguments into a command line string, using the same rules as the MS C runtime: 1) Arguments are delimited by white space, which is either a space or a tab. 2) A string surrounded by double quotation marks is interpreted as a single argument, regardless of white space or pipe characters contained within. A quoted string can be embedded in an argument. 3) A double quotation mark preceded by a backslash is interpreted as a literal double quotation mark. 4) Backslashes are interpreted literally, unless they immediately precede a double quotation mark. 5) If backslashes immediately precede a double quotation mark, every pair of backslashes is interpreted as a literal backslash. If the number of backslashes is odd, the last backslash escapes the next double quotation mark as described in rule 3. """ # See # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx # or search http://msdn.microsoft.com for # "Parsing C++ Command-Line Arguments" result = [] needquote = False for arg in seq: bs_buf = [] # Add a space to separate this argument from the others if result: result.append(' ') needquote = (" " in arg) or ("\t" in arg) or ("|" in arg) or not arg if needquote: result.append('"') for c in arg: if c == '\\': # Don't know if we need to double yet. bs_buf.append(c) elif c == '"': # Double backslashes. result.append('\\' * len(bs_buf)*2) bs_buf = [] result.append('\\"') else: # Normal char if bs_buf: result.extend(bs_buf) bs_buf = [] result.append(c) # Add remaining backslashes, if any. if bs_buf: result.extend(bs_buf) if needquote: result.extend(bs_buf) result.append('"') return ''.join(result) class Popen(object): def __init__(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0): """Create new Popen instance.""" _cleanup() self._child_created = False if not isinstance(bufsize, (int, long)): raise TypeError("bufsize must be an integer") if mswindows: if preexec_fn is not None: raise ValueError("preexec_fn is not supported on Windows " "platforms") if close_fds and (stdin is not None or stdout is not None or stderr is not None): raise ValueError("close_fds is not supported on Windows " "platforms if you redirect stdin/stdout/stderr") else: # POSIX if startupinfo is not None: raise ValueError("startupinfo is only supported on Windows " "platforms") if creationflags != 0: raise ValueError("creationflags is only supported on Windows " "platforms") self.stdin = None self.stdout = None self.stderr = None self.pid = None self.returncode = None self.universal_newlines = universal_newlines # Input and output objects. The general principle is like # this: # # Parent Child # ------ ----- # p2cwrite ---stdin---> p2cread # c2pread <--stdout--- c2pwrite # errread <--stderr--- errwrite # # On POSIX, the child objects are file descriptors. On # Windows, these are Windows file handles. The parent objects # are file descriptors on both platforms. The parent objects # are None when not using PIPEs. The child objects are None # when not redirecting. (p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) = self._get_handles(stdin, stdout, stderr) self._execute_child(args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) if mswindows: if p2cwrite is not None: p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) if c2pread is not None: c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) if errread is not None: errread = msvcrt.open_osfhandle(errread.Detach(), 0) if p2cwrite is not None: self.stdin = os.fdopen(p2cwrite, 'wb', bufsize) if c2pread is not None: if universal_newlines: self.stdout = os.fdopen(c2pread, 'rU', bufsize) else: self.stdout = os.fdopen(c2pread, 'rb', bufsize) if errread is not None: if universal_newlines: self.stderr = os.fdopen(errread, 'rU', bufsize) else: self.stderr = os.fdopen(errread, 'rb', bufsize) def _translate_newlines(self, data): data = data.replace("\r\n", "\n") data = data.replace("\r", "\n") return data def __del__(self, sys=sys): if not self._child_created: # We didn't get to successfully create a child process. return # In case the child hasn't been waited on, check if it's done. self._internal_poll(_deadstate=sys.maxint) if self.returncode is None and _active is not None: # Child is still running, keep us alive until we can wait on it. _active.append(self) def communicate(self, input=None): """Interact with process: Send data to stdin. Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate. The optional input argument should be a string to be sent to the child process, or None, if no data should be sent to the child. communicate() returns a tuple (stdout, stderr).""" # Optimization: If we are only using one pipe, or no pipe at # all, using select() or threads is unnecessary. if [self.stdin, self.stdout, self.stderr].count(None) >= 2: stdout = None stderr = None if self.stdin: if input: self.stdin.write(input) self.stdin.close() elif self.stdout: stdout = self.stdout.read() self.stdout.close() elif self.stderr: stderr = self.stderr.read() self.stderr.close() self.wait() return (stdout, stderr) return self._communicate(input) def poll(self): return self._internal_poll() if mswindows: # # Windows methods # def _get_handles(self, stdin, stdout, stderr): """Construct and return tupel with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite """ if stdin is None and stdout is None and stderr is None: return (None, None, None, None, None, None) p2cread, p2cwrite = None, None c2pread, c2pwrite = None, None errread, errwrite = None, None if stdin is None: p2cread = GetStdHandle(STD_INPUT_HANDLE) if p2cread is None: p2cread, _ = CreatePipe(None, 0) elif stdin == PIPE: p2cread, p2cwrite = CreatePipe(None, 0) elif isinstance(stdin, int): p2cread = msvcrt.get_osfhandle(stdin) else: # Assuming file-like object p2cread = msvcrt.get_osfhandle(stdin.fileno()) p2cread = self._make_inheritable(p2cread) if stdout is None: c2pwrite = GetStdHandle(STD_OUTPUT_HANDLE) if c2pwrite is None: _, c2pwrite = CreatePipe(None, 0) elif stdout == PIPE: c2pread, c2pwrite = CreatePipe(None, 0) elif isinstance(stdout, int): c2pwrite = msvcrt.get_osfhandle(stdout) else: # Assuming file-like object c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) c2pwrite = self._make_inheritable(c2pwrite) if stderr is None: errwrite = GetStdHandle(STD_ERROR_HANDLE) if errwrite is None: _, errwrite = CreatePipe(None, 0) elif stderr == PIPE: errread, errwrite = CreatePipe(None, 0) elif stderr == STDOUT: errwrite = c2pwrite elif isinstance(stderr, int): errwrite = msvcrt.get_osfhandle(stderr) else: # Assuming file-like object errwrite = msvcrt.get_osfhandle(stderr.fileno()) errwrite = self._make_inheritable(errwrite) return (p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) def _make_inheritable(self, handle): """Return a duplicate of handle, which is inheritable""" return DuplicateHandle(GetCurrentProcess(), handle, GetCurrentProcess(), 0, 1, DUPLICATE_SAME_ACCESS) def _find_w9xpopen(self): """Find and return absolut path to w9xpopen.exe""" w9xpopen = os.path.join(os.path.dirname(GetModuleFileName(0)), "w9xpopen.exe") if not os.path.exists(w9xpopen): # Eeek - file-not-found - possibly an embedding # situation - see if we can locate it in sys.exec_prefix w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix), "w9xpopen.exe") if not os.path.exists(w9xpopen): raise RuntimeError("Cannot locate w9xpopen.exe, which is " "needed for Popen to work with your " "shell or platform.") return w9xpopen def _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite): """Execute program (MS Windows version)""" if not isinstance(args, types.StringTypes): args = list2cmdline(args) # Process startup details if startupinfo is None: startupinfo = STARTUPINFO() if None not in (p2cread, c2pwrite, errwrite): startupinfo.dwFlags |= STARTF_USESTDHANDLES startupinfo.hStdInput = p2cread startupinfo.hStdOutput = c2pwrite startupinfo.hStdError = errwrite if shell: startupinfo.dwFlags |= STARTF_USESHOWWINDOW startupinfo.wShowWindow = SW_HIDE comspec = os.environ.get("COMSPEC", "cmd.exe") args = comspec + " /c " + args if (GetVersion() >= 0x80000000L or os.path.basename(comspec).lower() == "command.com"): # Win9x, or using command.com on NT. We need to # use the w9xpopen intermediate program. For more # information, see KB Q150956 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp) w9xpopen = self._find_w9xpopen() args = '"%s" %s' % (w9xpopen, args) # Not passing CREATE_NEW_CONSOLE has been known to # cause random failures on win9x. Specifically a # dialog: "Your program accessed mem currently in # use at xxx" and a hopeful warning about the # stability of your system. Cost is Ctrl+C wont # kill children. creationflags |= CREATE_NEW_CONSOLE # Start the process try: hp, ht, pid, tid = CreateProcess(executable, args, # no special security None, None, int(not close_fds), creationflags, env, cwd, startupinfo) except pywintypes.error, e: # Translate pywintypes.error to WindowsError, which is # a subclass of OSError. FIXME: We should really # translate errno using _sys_errlist (or simliar), but # how can this be done from Python? raise WindowsError(*e.args) # Retain the process handle, but close the thread handle self._child_created = True self._handle = hp self.pid = pid ht.Close() # Child is launched. Close the parent's copy of those pipe # handles that only the child should have open. You need # to make sure that no handles to the write end of the # output pipe are maintained in this process or else the # pipe will not close when the child process exits and the # ReadFile will hang. if p2cread is not None: p2cread.Close() if c2pwrite is not None: c2pwrite.Close() if errwrite is not None: errwrite.Close() def _internal_poll(self, _deadstate=None): """Check if child process has terminated. Returns returncode attribute.""" if self.returncode is None: if WaitForSingleObject(self._handle, 0) == WAIT_OBJECT_0: self.returncode = GetExitCodeProcess(self._handle) return self.returncode def wait(self): """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: obj = WaitForSingleObject(self._handle, INFINITE) self.returncode = GetExitCodeProcess(self._handle) return self.returncode def _readerthread(self, fh, buffer): buffer.append(fh.read()) def _communicate(self, input): stdout = None # Return stderr = None # Return if self.stdout: stdout = [] stdout_thread = threading.Thread(target=self._readerthread, args=(self.stdout, stdout)) stdout_thread.setDaemon(True) stdout_thread.start() if self.stderr: stderr = [] stderr_thread = threading.Thread(target=self._readerthread, args=(self.stderr, stderr)) stderr_thread.setDaemon(True) stderr_thread.start() if self.stdin: if input is not None: self.stdin.write(input) self.stdin.close() if self.stdout: stdout_thread.join() if self.stderr: stderr_thread.join() # All data exchanged. Translate lists into strings. if stdout is not None: stdout = stdout[0] if stderr is not None: stderr = stderr[0] # Translate newlines, if requested. We cannot let the file # object do the translation: It is based on stdio, which is # impossible to combine with select (unless forcing no # buffering). if self.universal_newlines and hasattr(file, 'newlines'): if stdout: stdout = self._translate_newlines(stdout) if stderr: stderr = self._translate_newlines(stderr) self.wait() return (stdout, stderr) def send_signal(self, sig): """Send a signal to the process """ if sig == signal.SIGTERM: self.terminate() else: raise ValueError("Only SIGTERM is supported on Windows") def terminate(self): """Terminates the process """ TerminateProcess(self._handle, 1) kill = terminate else: # # POSIX methods # def _get_handles(self, stdin, stdout, stderr): """Construct and return tupel with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite """ p2cread, p2cwrite = None, None c2pread, c2pwrite = None, None errread, errwrite = None, None if stdin is None: pass elif stdin == PIPE: p2cread, p2cwrite = os.pipe() elif isinstance(stdin, int): p2cread = stdin else: # Assuming file-like object p2cread = stdin.fileno() if stdout is None: pass elif stdout == PIPE: c2pread, c2pwrite = os.pipe() elif isinstance(stdout, int): c2pwrite = stdout else: # Assuming file-like object c2pwrite = stdout.fileno() if stderr is None: pass elif stderr == PIPE: errread, errwrite = os.pipe() elif stderr == STDOUT: errwrite = c2pwrite elif isinstance(stderr, int): errwrite = stderr else: # Assuming file-like object errwrite = stderr.fileno() return (p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) def _set_cloexec_flag(self, fd): try: cloexec_flag = fcntl.FD_CLOEXEC except AttributeError: cloexec_flag = 1 old = fcntl.fcntl(fd, fcntl.F_GETFD) fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag) def _close_fds(self, but): os.closerange(3, but) os.closerange(but + 1, MAXFD) def _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite): """Execute program (POSIX version)""" if isinstance(args, types.StringTypes): args = [args] else: args = list(args) if shell: args = ["/bin/sh", "-c"] + args if executable is None: executable = args[0] # For transferring possible exec failure from child to parent # The first char specifies the exception type: 0 means # OSError, 1 means some other error. errpipe_read, errpipe_write = os.pipe() try: try: self._set_cloexec_flag(errpipe_write) gc_was_enabled = gc.isenabled() # Disable gc to avoid bug where gc -> file_dealloc -> # write to stderr -> hang. http://bugs.python.org/issue1336 gc.disable() try: self.pid = os.fork() except: if gc_was_enabled: gc.enable() raise self._child_created = True if self.pid == 0: # Child try: # Close parent's pipe ends if p2cwrite is not None: os.close(p2cwrite) if c2pread is not None: os.close(c2pread) if errread is not None: os.close(errread) os.close(errpipe_read) # Dup fds for child if p2cread is not None: os.dup2(p2cread, 0) if c2pwrite is not None: os.dup2(c2pwrite, 1) if errwrite is not None: os.dup2(errwrite, 2) # Close pipe fds. Make sure we don't close the same # fd more than once, or standard fds. if p2cread is not None and p2cread not in (0,): os.close(p2cread) if c2pwrite is not None and c2pwrite not in (p2cread, 1): os.close(c2pwrite) if errwrite is not None and errwrite not in (p2cread, c2pwrite, 2): os.close(errwrite) # Close all other fds, if asked for if close_fds: self._close_fds(but=errpipe_write) if cwd is not None: os.chdir(cwd) if preexec_fn: preexec_fn() if env is None: os.execvp(executable, args) else: os.execvpe(executable, args, env) except: exc_type, exc_value, tb = sys.exc_info() # Save the traceback and attach it to the exception object exc_lines = traceback.format_exception(exc_type, exc_value, tb) exc_value.child_traceback = ''.join(exc_lines) os.write(errpipe_write, pickle.dumps(exc_value)) # This exitcode won't be reported to applications, so it # really doesn't matter what we return. os._exit(255) # Parent if gc_was_enabled: gc.enable() finally: # be sure the FD is closed no matter what os.close(errpipe_write) if p2cread is not None and p2cwrite is not None: os.close(p2cread) if c2pwrite is not None and c2pread is not None: os.close(c2pwrite) if errwrite is not None and errread is not None: os.close(errwrite) # Wait for exec to fail or succeed; possibly raising exception # Exception limited to 1M data = _eintr_retry_call(os.read, errpipe_read, 1048576) finally: # be sure the FD is closed no matter what os.close(errpipe_read) if data != "": _eintr_retry_call(os.waitpid, self.pid, 0) child_exception = pickle.loads(data) for fd in (p2cwrite, c2pread, errread): if fd is not None: os.close(fd) raise child_exception def _handle_exitstatus(self, sts): if os.WIFSIGNALED(sts): self.returncode = -os.WTERMSIG(sts) elif os.WIFEXITED(sts): self.returncode = os.WEXITSTATUS(sts) else: # Should never happen raise RuntimeError("Unknown child exit status!") def _internal_poll(self, _deadstate=None): """Check if child process has terminated. Returns returncode attribute.""" if self.returncode is None: try: pid, sts = os.waitpid(self.pid, os.WNOHANG) if pid == self.pid: self._handle_exitstatus(sts) except os.error: if _deadstate is not None: self.returncode = _deadstate return self.returncode def wait(self): """Wait for child process to terminate. Returns returncode attribute.""" if self.returncode is None: pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) self._handle_exitstatus(sts) return self.returncode def _communicate(self, input): read_set = [] write_set = [] stdout = None # Return stderr = None # Return if self.stdin: # Flush stdio buffer. This might block, if the user has # been writing to .stdin in an uncontrolled fashion. self.stdin.flush() if input: write_set.append(self.stdin) else: self.stdin.close() if self.stdout: read_set.append(self.stdout) stdout = [] if self.stderr: read_set.append(self.stderr) stderr = [] input_offset = 0 while read_set or write_set: try: rlist, wlist, xlist = select.select(read_set, write_set, []) except select.error, e: if e.args[0] == errno.EINTR: continue raise if self.stdin in wlist: # When select has indicated that the file is writable, # we can write up to PIPE_BUF bytes without risk # blocking. POSIX defines PIPE_BUF >= 512 chunk = input[input_offset : input_offset + 512] bytes_written = os.write(self.stdin.fileno(), chunk) input_offset += bytes_written if input_offset >= len(input): self.stdin.close() write_set.remove(self.stdin) if self.stdout in rlist: data = os.read(self.stdout.fileno(), 1024) if data == "": self.stdout.close() read_set.remove(self.stdout) stdout.append(data) if self.stderr in rlist: data = os.read(self.stderr.fileno(), 1024) if data == "": self.stderr.close() read_set.remove(self.stderr) stderr.append(data) # All data exchanged. Translate lists into strings. if stdout is not None: stdout = ''.join(stdout) if stderr is not None: stderr = ''.join(stderr) # Translate newlines, if requested. We cannot let the file # object do the translation: It is based on stdio, which is # impossible to combine with select (unless forcing no # buffering). if self.universal_newlines and hasattr(file, 'newlines'): if stdout: stdout = self._translate_newlines(stdout) if stderr: stderr = self._translate_newlines(stderr) self.wait() return (stdout, stderr) def send_signal(self, sig): """Send a signal to the process """ os.kill(self.pid, sig) def terminate(self): """Terminate the process with SIGTERM """ self.send_signal(signal.SIGTERM) def kill(self): """Kill the process with SIGKILL """ self.send_signal(signal.SIGKILL) def _demo_posix(): # # Example 1: Simple redirection: Get process list # plist = Popen(["ps"], stdout=PIPE).communicate()[0] print "Process list:" print plist # # Example 2: Change uid before executing child # if os.getuid() == 0: p = Popen(["id"], preexec_fn=lambda: os.setuid(100)) p.wait() # # Example 3: Connecting several subprocesses # print "Looking for 'hda'..." p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) print repr(p2.communicate()[0]) # # Example 4: Catch execution error # print print "Trying a weird file..." try: print Popen(["/this/path/does/not/exist"]).communicate() except OSError, e: if e.errno == errno.ENOENT: print "The file didn't exist. I thought so..." print "Child traceback:" print e.child_traceback else: print "Error", e.errno else: print >>sys.stderr, "Gosh. No error." def _demo_windows(): # # Example 1: Connecting several subprocesses # print "Looking for 'PROMPT' in set output..." p1 = Popen("set", stdout=PIPE, shell=True) p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE) print repr(p2.communicate()[0]) # # Example 2: Simple execution of program # print "Executing calc..." p = Popen("calc") p.wait() if __name__ == "__main__": if mswindows: _demo_windows() else: _demo_posix() dispcalGUI-1.7.1.6/dispcalGUI/tempfile.py000644 000765 000000 00000000337 12025152312 017755 0ustar00svpwheel000000 000000 # WRAPPER FOR PYTHON 2.5 # This module exists only to make sure that other module's imports of tempfile # end up with a version that has the SpooledTemporaryFile class (introduced in # Python 2.6) from tempfile26 import * dispcalGUI-1.7.1.6/dispcalGUI/tempfile26.py000644 000765 000000 00000043711 12025152312 020130 0ustar00svpwheel000000 000000 """Temporary files. This module provides generic, low- and high-level interfaces for creating temporary files and directories. The interfaces listed as "safe" just below can be used without fear of race conditions. Those listed as "unsafe" cannot, and are provided for backward compatibility only. This module also provides some data items to the user: TMP_MAX - maximum number of names that will be tried before giving up. template - the default prefix for all temporary names. You may change this to control the default prefix. tempdir - If this is set to a string before the first use of any routine from this module, it will be considered as another candidate location to store temporary files. """ __all__ = [ "NamedTemporaryFile", "TemporaryFile", # high level safe interfaces "SpooledTemporaryFile", "mkstemp", "mkdtemp", # low level safe interfaces "mktemp", # deprecated unsafe interface "TMP_MAX", "gettempprefix", # constants "tempdir", "gettempdir" ] # Imports. import os as _os import errno as _errno from random import Random as _Random try: from cStringIO import StringIO as _StringIO except ImportError: from StringIO import StringIO as _StringIO try: import fcntl as _fcntl except ImportError: def _set_cloexec(fd): pass else: def _set_cloexec(fd): try: flags = _fcntl.fcntl(fd, _fcntl.F_GETFD, 0) except IOError: pass else: # flags read successfully, modify flags |= _fcntl.FD_CLOEXEC _fcntl.fcntl(fd, _fcntl.F_SETFD, flags) try: import thread as _thread except ImportError: import dummy_thread as _thread _allocate_lock = _thread.allocate_lock _text_openflags = _os.O_RDWR | _os.O_CREAT | _os.O_EXCL if hasattr(_os, 'O_NOINHERIT'): _text_openflags |= _os.O_NOINHERIT if hasattr(_os, 'O_NOFOLLOW'): _text_openflags |= _os.O_NOFOLLOW _bin_openflags = _text_openflags if hasattr(_os, 'O_BINARY'): _bin_openflags |= _os.O_BINARY if hasattr(_os, 'TMP_MAX'): TMP_MAX = _os.TMP_MAX else: TMP_MAX = 10000 template = "tmp" # Internal routines. _once_lock = _allocate_lock() if hasattr(_os, "lstat"): _stat = _os.lstat elif hasattr(_os, "stat"): _stat = _os.stat else: # Fallback. All we need is something that raises os.error if the # file doesn't exist. def _stat(fn): try: f = open(fn) except IOError: raise _os.error f.close() def _exists(fn): try: _stat(fn) except _os.error: return False else: return True class _RandomNameSequence: """An instance of _RandomNameSequence generates an endless sequence of unpredictable strings which can safely be incorporated into file names. Each string is six characters long. Multiple threads can safely use the same instance at the same time. _RandomNameSequence is an iterator.""" characters = ("abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789_") def __init__(self): self.mutex = _allocate_lock() self.rng = _Random() self.normcase = _os.path.normcase def __iter__(self): return self def next(self): m = self.mutex c = self.characters choose = self.rng.choice m.acquire() try: letters = [choose(c) for dummy in "123456"] finally: m.release() return self.normcase(''.join(letters)) def _candidate_tempdir_list(): """Generate a list of candidate temporary directories which _get_default_tempdir will try.""" dirlist = [] # First, try the environment. for envname in 'TMPDIR', 'TEMP', 'TMP': dirname = _os.getenv(envname) if dirname: dirlist.append(dirname) # Failing that, try OS-specific locations. if _os.name == 'riscos': dirname = _os.getenv('Wimp$ScrapDir') if dirname: dirlist.append(dirname) elif _os.name == 'nt': dirlist.extend([ r'c:\temp', r'c:\tmp', r'\temp', r'\tmp' ]) else: dirlist.extend([ '/tmp', '/var/tmp', '/usr/tmp' ]) # As a last resort, the current directory. try: dirlist.append(_os.getcwd()) except (AttributeError, _os.error): dirlist.append(_os.curdir) return dirlist def _get_default_tempdir(): """Calculate the default directory to use for temporary files. This routine should be called exactly once. We determine whether or not a candidate temp dir is usable by trying to create and write to a file in that directory. If this is successful, the test file is deleted. To prevent denial of service, the name of the test file must be randomized.""" namer = _RandomNameSequence() dirlist = _candidate_tempdir_list() flags = _text_openflags for dir in dirlist: if dir != _os.curdir: dir = _os.path.normcase(_os.path.abspath(dir)) # Try only a few names per directory. for seq in xrange(100): name = namer.next() filename = _os.path.join(dir, name) try: fd = _os.open(filename, flags, 0600) fp = _os.fdopen(fd, 'w') fp.write('blat') fp.close() _os.unlink(filename) del fp, fd return dir except (OSError, IOError), e: if e[0] != _errno.EEXIST: break # no point trying more names in this directory pass raise IOError, (_errno.ENOENT, ("No usable temporary directory found in %s" % dirlist)) _name_sequence = None def _get_candidate_names(): """Common setup sequence for all user-callable interfaces.""" global _name_sequence if _name_sequence is None: _once_lock.acquire() try: if _name_sequence is None: _name_sequence = _RandomNameSequence() finally: _once_lock.release() return _name_sequence def _mkstemp_inner(dir, pre, suf, flags): """Code common to mkstemp, TemporaryFile, and NamedTemporaryFile.""" names = _get_candidate_names() for seq in xrange(TMP_MAX): name = names.next() file = _os.path.join(dir, pre + name + suf) try: fd = _os.open(file, flags, 0600) _set_cloexec(fd) return (fd, _os.path.abspath(file)) except OSError, e: if e.errno == _errno.EEXIST: continue # try again raise raise IOError, (_errno.EEXIST, "No usable temporary file name found") # User visible interfaces. def gettempprefix(): """Accessor for tempdir.template.""" return template tempdir = None def gettempdir(): """Accessor for tempfile.tempdir.""" global tempdir if tempdir is None: _once_lock.acquire() try: if tempdir is None: tempdir = _get_default_tempdir() finally: _once_lock.release() return tempdir def mkstemp(suffix="", prefix=template, dir=None, text=False): """User-callable function to create and return a unique temporary file. The return value is a pair (fd, name) where fd is the file descriptor returned by os.open, and name is the filename. If 'suffix' is specified, the file name will end with that suffix, otherwise there will be no suffix. If 'prefix' is specified, the file name will begin with that prefix, otherwise a default prefix is used. If 'dir' is specified, the file will be created in that directory, otherwise a default directory is used. If 'text' is specified and true, the file is opened in text mode. Else (the default) the file is opened in binary mode. On some operating systems, this makes no difference. The file is readable and writable only by the creating user ID. If the operating system uses permission bits to indicate whether a file is executable, the file is executable by no one. The file descriptor is not inherited by children of this process. Caller is responsible for deleting the file when done with it. """ if dir is None: dir = gettempdir() if text: flags = _text_openflags else: flags = _bin_openflags return _mkstemp_inner(dir, prefix, suffix, flags) def mkdtemp(suffix="", prefix=template, dir=None): """User-callable function to create and return a unique temporary directory. The return value is the pathname of the directory. Arguments are as for mkstemp, except that the 'text' argument is not accepted. The directory is readable, writable, and searchable only by the creating user. Caller is responsible for deleting the directory when done with it. """ if dir is None: dir = gettempdir() names = _get_candidate_names() for seq in xrange(TMP_MAX): name = names.next() file = _os.path.join(dir, prefix + name + suffix) try: _os.mkdir(file, 0700) return file except OSError, e: if e.errno == _errno.EEXIST: continue # try again raise raise IOError, (_errno.EEXIST, "No usable temporary directory name found") def mktemp(suffix="", prefix=template, dir=None): """User-callable function to return a unique temporary file name. The file is not created. Arguments are as for mkstemp, except that the 'text' argument is not accepted. This function is unsafe and should not be used. The file name refers to a file that did not exist at some point, but by the time you get around to creating it, someone else may have beaten you to the punch. """ ## from warnings import warn as _warn ## _warn("mktemp is a potential security risk to your program", ## RuntimeWarning, stacklevel=2) if dir is None: dir = gettempdir() names = _get_candidate_names() for seq in xrange(TMP_MAX): name = names.next() file = _os.path.join(dir, prefix + name + suffix) if not _exists(file): return file raise IOError, (_errno.EEXIST, "No usable temporary filename found") class _TemporaryFileWrapper: """Temporary file wrapper This class provides a wrapper around files opened for temporary use. In particular, it seeks to automatically remove the file when it is no longer needed. """ def __init__(self, file, name, delete=True): self.file = file self.name = name self.close_called = False self.delete = delete def __getattr__(self, name): # Attribute lookups are delegated to the underlying file # and cached for non-numeric results # (i.e. methods are cached, closed and friends are not) file = self.__dict__['file'] a = getattr(file, name) if not issubclass(type(a), type(0)): setattr(self, name, a) return a # The underlying __enter__ method returns the wrong object # (self.file) so override it to return the wrapper def __enter__(self): self.file.__enter__() return self # NT provides delete-on-close as a primitive, so we don't need # the wrapper to do anything special. We still use it so that # file.name is useful (i.e. not "(fdopen)") with NamedTemporaryFile. if _os.name != 'nt': # Cache the unlinker so we don't get spurious errors at # shutdown when the module-level "os" is None'd out. Note # that this must be referenced as self.unlink, because the # name TemporaryFileWrapper may also get None'd out before # __del__ is called. unlink = _os.unlink def close(self): if not self.close_called: self.close_called = True self.file.close() if self.delete: self.unlink(self.name) def __del__(self): self.close() # Need to trap __exit__ as well to ensure the file gets # deleted when used in a with statement def __exit__(self, exc, value, tb): result = self.file.__exit__(exc, value, tb) self.close() return result def NamedTemporaryFile(mode='w+b', bufsize=-1, suffix="", prefix=template, dir=None, delete=True): """Create and return a temporary file. Arguments: 'prefix', 'suffix', 'dir' -- as for mkstemp. 'mode' -- the mode argument to os.fdopen (default "w+b"). 'bufsize' -- the buffer size argument to os.fdopen (default -1). 'delete' -- whether the file is deleted on close (default True). The file is created as mkstemp() would do it. Returns an object with a file-like interface; the name of the file is accessible as file.name. The file will be automatically deleted when it is closed unless the 'delete' argument is set to False. """ if dir is None: dir = gettempdir() if 'b' in mode: flags = _bin_openflags else: flags = _text_openflags # Setting O_TEMPORARY in the flags causes the OS to delete # the file when it is closed. This is only supported by Windows. if _os.name == 'nt' and delete: flags |= _os.O_TEMPORARY (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) file = _os.fdopen(fd, mode, bufsize) return _TemporaryFileWrapper(file, name, delete) if _os.name != 'posix' or _os.sys.platform == 'cygwin': # On non-POSIX and Cygwin systems, assume that we cannot unlink a file # while it is open. TemporaryFile = NamedTemporaryFile else: def TemporaryFile(mode='w+b', bufsize=-1, suffix="", prefix=template, dir=None): """Create and return a temporary file. Arguments: 'prefix', 'suffix', 'dir' -- as for mkstemp. 'mode' -- the mode argument to os.fdopen (default "w+b"). 'bufsize' -- the buffer size argument to os.fdopen (default -1). The file is created as mkstemp() would do it. Returns an object with a file-like interface. The file has no name, and will cease to exist when it is closed. """ if dir is None: dir = gettempdir() if 'b' in mode: flags = _bin_openflags else: flags = _text_openflags (fd, name) = _mkstemp_inner(dir, prefix, suffix, flags) try: _os.unlink(name) return _os.fdopen(fd, mode, bufsize) except: _os.close(fd) raise class SpooledTemporaryFile: """Temporary file wrapper, specialized to switch from StringIO to a real file when it exceeds a certain size or when a fileno is needed. """ _rolled = False def __init__(self, max_size=0, mode='w+b', bufsize=-1, suffix="", prefix=template, dir=None): self._file = _StringIO() self._max_size = max_size self._rolled = False self._TemporaryFileArgs = (mode, bufsize, suffix, prefix, dir) def _check(self, file): if self._rolled: return max_size = self._max_size if max_size and file.tell() > max_size: self.rollover() def rollover(self): if self._rolled: return file = self._file newfile = self._file = TemporaryFile(*self._TemporaryFileArgs) del self._TemporaryFileArgs newfile.write(file.getvalue()) newfile.seek(file.tell(), 0) self._rolled = True # The method caching trick from NamedTemporaryFile # won't work here, because _file may change from a # _StringIO instance to a real file. So we list # all the methods directly. # Context management protocol def __enter__(self): if self._file.closed: raise ValueError("Cannot enter context with closed file") return self def __exit__(self, exc, value, tb): self._file.close() # file protocol def __iter__(self): return self._file.__iter__() def close(self): self._file.close() @property def closed(self): return self._file.closed @property def encoding(self): return self._file.encoding def fileno(self): self.rollover() return self._file.fileno() def flush(self): self._file.flush() def isatty(self): return self._file.isatty() @property def mode(self): return self._file.mode @property def name(self): return self._file.name @property def newlines(self): return self._file.newlines def next(self): return self._file.next def read(self, *args): return self._file.read(*args) def readline(self, *args): return self._file.readline(*args) def readlines(self, *args): return self._file.readlines(*args) def seek(self, *args): self._file.seek(*args) @property def softspace(self): return self._file.softspace def tell(self): return self._file.tell() def truncate(self): self._file.truncate() def write(self, s): file = self._file rv = file.write(s) self._check(file) return rv def writelines(self, iterable): file = self._file rv = file.writelines(iterable) self._check(file) return rv def xreadlines(self, *args): return self._file.xreadlines(*args) dispcalGUI-1.7.1.6/dispcalGUI/test.cal000644 000765 000000 00000020511 12025152312 017232 0ustar00svpwheel000000 000000 CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Wed Dec 24 20:08:15 2008" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.20000 0.20000 0.20000 0.00392 0.20235 0.20235 0.20235 0.00784 0.20471 0.20471 0.20471 0.01176 0.20706 0.20706 0.20706 0.01569 0.20941 0.20941 0.20941 0.01961 0.21176 0.21176 0.21176 0.02353 0.21412 0.21412 0.21412 0.02745 0.21647 0.21647 0.21647 0.03137 0.21882 0.21882 0.21882 0.03529 0.22118 0.22118 0.22118 0.03922 0.22353 0.22353 0.22353 0.04314 0.22588 0.22588 0.22588 0.04706 0.22824 0.22824 0.22824 0.05098 0.23059 0.23059 0.23059 0.05490 0.23294 0.23294 0.23294 0.05882 0.23529 0.23529 0.23529 0.06275 0.23765 0.23765 0.23765 0.06667 0.24000 0.24000 0.24000 0.07059 0.24235 0.24235 0.24235 0.07451 0.24471 0.24471 0.24471 0.07843 0.24706 0.24706 0.24706 0.08235 0.24941 0.24941 0.24941 0.08627 0.25176 0.25176 0.25176 0.09020 0.25412 0.25412 0.25412 0.09412 0.25647 0.25647 0.25647 0.09804 0.25882 0.25882 0.25882 0.10196 0.26118 0.26118 0.26118 0.10588 0.26353 0.26353 0.26353 0.10980 0.26588 0.26588 0.26588 0.11373 0.26824 0.26824 0.26824 0.11765 0.27059 0.27059 0.27059 0.12157 0.27294 0.27294 0.27294 0.12549 0.27529 0.27529 0.27529 0.12941 0.27765 0.27765 0.27765 0.13333 0.28000 0.28000 0.28000 0.13725 0.28235 0.28235 0.28235 0.14118 0.28471 0.28471 0.28471 0.14510 0.28706 0.28706 0.28706 0.14902 0.28941 0.28941 0.28941 0.15294 0.29176 0.29176 0.29176 0.15686 0.29412 0.29412 0.29412 0.16078 0.29647 0.29647 0.29647 0.16471 0.29882 0.29882 0.29882 0.16863 0.30118 0.30118 0.30118 0.17255 0.30353 0.30353 0.30353 0.17647 0.30588 0.30588 0.30588 0.18039 0.30824 0.30824 0.30824 0.18431 0.31059 0.31059 0.31059 0.18824 0.31294 0.31294 0.31294 0.19216 0.31529 0.31529 0.31529 0.19608 0.31765 0.31765 0.31765 0.20000 0.32000 0.32000 0.32000 0.20392 0.32235 0.32235 0.32235 0.20784 0.32471 0.32471 0.32471 0.21176 0.32706 0.32706 0.32706 0.21569 0.32941 0.32941 0.32941 0.21961 0.33176 0.33176 0.33176 0.22353 0.33412 0.33412 0.33412 0.22745 0.33647 0.33647 0.33647 0.23137 0.33882 0.33882 0.33882 0.23529 0.34118 0.34118 0.34118 0.23922 0.34353 0.34353 0.34353 0.24314 0.34588 0.34588 0.34588 0.24706 0.34824 0.34824 0.34824 0.25098 0.35059 0.35059 0.35059 0.25490 0.35294 0.35294 0.35294 0.25882 0.35529 0.35529 0.35529 0.26275 0.35765 0.35765 0.35765 0.26667 0.36000 0.36000 0.36000 0.27059 0.36235 0.36235 0.36235 0.27451 0.36471 0.36471 0.36471 0.27843 0.36706 0.36706 0.36706 0.28235 0.36941 0.36941 0.36941 0.28627 0.37176 0.37176 0.37176 0.29020 0.37412 0.37412 0.37412 0.29412 0.37647 0.37647 0.37647 0.29804 0.37882 0.37882 0.37882 0.30196 0.38118 0.38118 0.38118 0.30588 0.38353 0.38353 0.38353 0.30980 0.38588 0.38588 0.38588 0.31373 0.38824 0.38824 0.38824 0.31765 0.39059 0.39059 0.39059 0.32157 0.39294 0.39294 0.39294 0.32549 0.39529 0.39529 0.39529 0.32941 0.39765 0.39765 0.39765 0.33333 0.40000 0.40000 0.40000 0.33725 0.40235 0.40235 0.40235 0.34118 0.40471 0.40471 0.40471 0.34510 0.40706 0.40706 0.40706 0.34902 0.40941 0.40941 0.40941 0.35294 0.41176 0.41176 0.41176 0.35686 0.41412 0.41412 0.41412 0.36078 0.41647 0.41647 0.41647 0.36471 0.41882 0.41882 0.41882 0.36863 0.42118 0.42118 0.42118 0.37255 0.42353 0.42353 0.42353 0.37647 0.42588 0.42588 0.42588 0.38039 0.42824 0.42824 0.42824 0.38431 0.43059 0.43059 0.43059 0.38824 0.43294 0.43294 0.43294 0.39216 0.43529 0.43529 0.43529 0.39608 0.43765 0.43765 0.43765 0.40000 0.44000 0.44000 0.44000 0.40392 0.44235 0.44235 0.44235 0.40784 0.44471 0.44471 0.44471 0.41176 0.44706 0.44706 0.44706 0.41569 0.44941 0.44941 0.44941 0.41961 0.45176 0.45176 0.45176 0.42353 0.45412 0.45412 0.45412 0.42745 0.45647 0.45647 0.45647 0.43137 0.45882 0.45882 0.45882 0.43529 0.46118 0.46118 0.46118 0.43922 0.46353 0.46353 0.46353 0.44314 0.46588 0.46588 0.46588 0.44706 0.46824 0.46824 0.46824 0.45098 0.47059 0.47059 0.47059 0.45490 0.47294 0.47294 0.47294 0.45882 0.47529 0.47529 0.47529 0.46275 0.47765 0.47765 0.47765 0.46667 0.48000 0.48000 0.48000 0.47059 0.48235 0.48235 0.48235 0.47451 0.48471 0.48471 0.48471 0.47843 0.48706 0.48706 0.48706 0.48235 0.48941 0.48941 0.48941 0.48627 0.49176 0.49176 0.49176 0.49020 0.49412 0.49412 0.49412 0.49412 0.49647 0.49647 0.49647 0.49804 0.49882 0.49882 0.49882 0.50196 0.50118 0.50118 0.50118 0.50588 0.50353 0.50353 0.50353 0.50980 0.50588 0.50588 0.50588 0.51373 0.50824 0.50824 0.50824 0.51765 0.51059 0.51059 0.51059 0.52157 0.51294 0.51294 0.51294 0.52549 0.51529 0.51529 0.51529 0.52941 0.51765 0.51765 0.51765 0.53333 0.52000 0.52000 0.52000 0.53725 0.52235 0.52235 0.52235 0.54118 0.52471 0.52471 0.52471 0.54510 0.52706 0.52706 0.52706 0.54902 0.52941 0.52941 0.52941 0.55294 0.53176 0.53176 0.53176 0.55686 0.53412 0.53412 0.53412 0.56078 0.53647 0.53647 0.53647 0.56471 0.53882 0.53882 0.53882 0.56863 0.54118 0.54118 0.54118 0.57255 0.54353 0.54353 0.54353 0.57647 0.54588 0.54588 0.54588 0.58039 0.54824 0.54824 0.54824 0.58431 0.55059 0.55059 0.55059 0.58824 0.55294 0.55294 0.55294 0.59216 0.55529 0.55529 0.55529 0.59608 0.55765 0.55765 0.55765 0.60000 0.56000 0.56000 0.56000 0.60392 0.56235 0.56235 0.56235 0.60784 0.56471 0.56471 0.56471 0.61176 0.56706 0.56706 0.56706 0.61569 0.56941 0.56941 0.56941 0.61961 0.57176 0.57176 0.57176 0.62353 0.57412 0.57412 0.57412 0.62745 0.57647 0.57647 0.57647 0.63137 0.57882 0.57882 0.57882 0.63529 0.58118 0.58118 0.58118 0.63922 0.58353 0.58353 0.58353 0.64314 0.58588 0.58588 0.58588 0.64706 0.58824 0.58824 0.58824 0.65098 0.59059 0.59059 0.59059 0.65490 0.59294 0.59294 0.59294 0.65882 0.59529 0.59529 0.59529 0.66275 0.59765 0.59765 0.59765 0.66667 0.60000 0.60000 0.60000 0.67059 0.60235 0.60235 0.60235 0.67451 0.60471 0.60471 0.60471 0.67843 0.60706 0.60706 0.60706 0.68235 0.60941 0.60941 0.60941 0.68627 0.61176 0.61176 0.61176 0.69020 0.61412 0.61412 0.61412 0.69412 0.61647 0.61647 0.61647 0.69804 0.61882 0.61882 0.61882 0.70196 0.62118 0.62118 0.62118 0.70588 0.62353 0.62353 0.62353 0.70980 0.62588 0.62588 0.62588 0.71373 0.62824 0.62824 0.62824 0.71765 0.63059 0.63059 0.63059 0.72157 0.63294 0.63294 0.63294 0.72549 0.63529 0.63529 0.63529 0.72941 0.63765 0.63765 0.63765 0.73333 0.64000 0.64000 0.64000 0.73725 0.64235 0.64235 0.64235 0.74118 0.64471 0.64471 0.64471 0.74510 0.64706 0.64706 0.64706 0.74902 0.64941 0.64941 0.64941 0.75294 0.65176 0.65176 0.65176 0.75686 0.65412 0.65412 0.65412 0.76078 0.65647 0.65647 0.65647 0.76471 0.65882 0.65882 0.65882 0.76863 0.66118 0.66118 0.66118 0.77255 0.66353 0.66353 0.66353 0.77647 0.66588 0.66588 0.66588 0.78039 0.66824 0.66824 0.66824 0.78431 0.67059 0.67059 0.67059 0.78824 0.67294 0.67294 0.67294 0.79216 0.67529 0.67529 0.67529 0.79608 0.67765 0.67765 0.67765 0.80000 0.68000 0.68000 0.68000 0.80392 0.68235 0.68235 0.68235 0.80784 0.68471 0.68471 0.68471 0.81176 0.68706 0.68706 0.68706 0.81569 0.68941 0.68941 0.68941 0.81961 0.69176 0.69176 0.69176 0.82353 0.69412 0.69412 0.69412 0.82745 0.69647 0.69647 0.69647 0.83137 0.69882 0.69882 0.69882 0.83529 0.70118 0.70118 0.70118 0.83922 0.70353 0.70353 0.70353 0.84314 0.70588 0.70588 0.70588 0.84706 0.70824 0.70824 0.70824 0.85098 0.71059 0.71059 0.71059 0.85490 0.71294 0.71294 0.71294 0.85882 0.71529 0.71529 0.71529 0.86275 0.71765 0.71765 0.71765 0.86667 0.72000 0.72000 0.72000 0.87059 0.72235 0.72235 0.72235 0.87451 0.72471 0.72471 0.72471 0.87843 0.72706 0.72706 0.72706 0.88235 0.72941 0.72941 0.72941 0.88627 0.73176 0.73176 0.73176 0.89020 0.73412 0.73412 0.73412 0.89412 0.73647 0.73647 0.73647 0.89804 0.73882 0.73882 0.73882 0.90196 0.74118 0.74118 0.74118 0.90588 0.74353 0.74353 0.74353 0.90980 0.74588 0.74588 0.74588 0.91373 0.74824 0.74824 0.74824 0.91765 0.75059 0.75059 0.75059 0.92157 0.75294 0.75294 0.75294 0.92549 0.75529 0.75529 0.75529 0.92941 0.75765 0.75765 0.75765 0.93333 0.76000 0.76000 0.76000 0.93725 0.76235 0.76235 0.76235 0.94118 0.76471 0.76471 0.76471 0.94510 0.76706 0.76706 0.76706 0.94902 0.76941 0.76941 0.76941 0.95294 0.77176 0.77176 0.77176 0.95686 0.77412 0.77412 0.77412 0.96078 0.77647 0.77647 0.77647 0.96471 0.77882 0.77882 0.77882 0.96863 0.78118 0.78118 0.78118 0.97255 0.78353 0.78353 0.78353 0.97647 0.78588 0.78588 0.78588 0.98039 0.78824 0.78824 0.78824 0.98431 0.79059 0.79059 0.79059 0.98824 0.79294 0.79294 0.79294 0.99216 0.79529 0.79529 0.79529 0.99608 0.79765 0.79765 0.79765 1.00000 0.80000 0.80000 0.80000 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/theme/000755 000765 000000 00000000000 12266723171 016713 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/ti1/000755 000765 000000 00000000000 12266723171 016306 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/trash.py000644 000765 000000 00000005204 12025152312 017267 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import sys import os if sys.platform == "win32": from win32com.shell import shell, shellcon import win32api def recycle(path): path = os.path.join(win32api.GetShortPathName(os.path.split(path)[0]), os.path.split(path)[1]) retcode, aborted = shell.SHFileOperation((0, shellcon.FO_DELETE, path, "", shellcon.FOF_ALLOWUNDO | shellcon.FOF_NOCONFIRMATION | shellcon.FOF_RENAMEONCOLLISION | shellcon.FOF_SILENT, None, None)) return retcode == 0 else: from time import strftime from urllib import quote import shutil from util_os import getenvu, expanduseru class TrashcanUnavailableError(Exception): pass def trash(paths): """ Move files and folders to the trash. If a trashcan facility does not exist, do not touch the files. Return a list of successfully processed paths. """ if isinstance(paths, (str, unicode)): paths = [paths] if not isinstance(paths, list): raise TypeError(str(type(paths)) + " is not list") deleted = [] if sys.platform == "win32": for path in paths: path = os.path.abspath(path) if not os.path.exists(path): raise IOError("No such file or directory: " + path) if recycle(path): deleted += [path] else: # http://freedesktop.org/wiki/Specifications/trash-spec trashroot = os.path.join(getenvu("XDG_DATA_HOME", os.path.join(expanduseru("~"), ".local", "share")), "Trash") trashinfo = os.path.join(trashroot, "info") if os.path.isdir(trashroot): # modern Linux distros trashcan = os.path.join(trashroot, "files") else: # older Linux distros and Mac OS X trashcan = os.path.join(expanduseru("~"), ".Trash") if not os.path.isdir(trashcan): raise TrashcanUnavailableError("Not a directory: '%s'" % trashcan) for path in paths: if os.path.isdir(trashcan): n = 1 dst = os.path.join(trashcan, os.path.basename(path)) while os.path.exists(dst): # avoid name clashes n += 1 dst = os.path.join(trashcan, os.path.basename(path) + "." + str(n)) if os.path.isdir(trashinfo): info = open(os.path.join(trashinfo, os.path.basename(dst) + ".trashinfo"), "w") info.write("[Trash Info]\n") info.write("Path=%s\n" % quote(path.encode(sys.getfilesystemencoding()))) info.write("DeletionDate=" + strftime("%Y-%m-%dT%H:%M:%S")) info.close() shutil.move(path, dst) else: # if trashcan does not exist, simply delete file/folder? pass # if os.path.isdir(path) and not os.path.islink(path): # shutil.rmtree(path) # else: # os.remove(path) deleted += [path] return deleted dispcalGUI-1.7.1.6/dispcalGUI/util_decimal.py000644 000765 000000 00000001144 12025152311 020577 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import decimal import math def float2dec(f, digits=10): parts = str(f).split(".") if len(parts) > 1: if parts[1][:digits] == "9" * digits: f = math.ceil(f) elif parts[1][:digits] == "0" * digits: f = math.floor(f) return decimal.Decimal(str(f)) def stripzeros(n): """ Strip zeros and convert to decimal. Will always return the shortest decimal representation (1.0 becomes 1, 1.234567890 becomes 1.23456789). """ n = str(n) if n.find(".") < 0: n += "." try: n = decimal.Decimal(n.rstrip("0")) except decimal.InvalidOperation, exception: pass return n dispcalGUI-1.7.1.6/dispcalGUI/util_http.py000644 000765 000000 00000004021 12025152312 020156 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- # http://code.activestate.com/recipes/146306-http-client-to-post-using-multipartform-data/ import httplib import mimetypes import uuid def post_multipart(host, selector, fields, files, charset="UTF-8"): """ Post fields and files to an http host as multipart/form-data. fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return the server's response page. """ content_type, body = encode_multipart_formdata(fields, files, charset) h = httplib.HTTPConnection(host) h.putrequest('POST', selector) h.putheader('Content-Type', content_type) h.putheader('Content-Length', str(len(body))) h.endheaders() h.send(body) resp = h.getresponse() return resp.read() def encode_multipart_formdata(fields, files, charset="UTF-8"): """ fields is a sequence of (name, value) elements for regular form fields. files is a sequence of (name, filename, value) elements for data to be uploaded as files Return (content_type, body) ready for httplib.HTTP instance """ BOUNDARY = '----=_NextPart_%s' % uuid.uuid1() CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('Content-Type: text/plain; charset=%s' % charset) L.append('') L.append(value.encode(charset)) for (key, filename, value) in files: L.append('--' + BOUNDARY) L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) L.append('Content-Type: %s' % get_content_type(filename)) L.append('') L.append(value) L.append('--' + BOUNDARY + '--') L.append('') body = CRLF.join(L) content_type = 'multipart/form-data; boundary=%s' % BOUNDARY return content_type, body def get_content_type(filename): return mimetypes.guess_type(filename)[0] or 'application/octet-stream' dispcalGUI-1.7.1.6/dispcalGUI/util_io.py000644 000765 000000 00000005636 12241576567 017651 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import gzip import os import sys from StringIO import StringIO from time import time from safe_print import safe_print from util_str import universal_newlines class Files(): """ Read and/or write from/to several files at once. """ def __init__(self, files, mode="r"): """ Return a Files object. files must be a list or tuple of file objects or filenames (the mode parameter is only used in the latter case). """ self.files = [] for item in files: if isinstance(item, basestring): self.files.append(open(item, mode)) else: self.files.append(item) def __iter__(self): return iter(self.files) def close(self): for item in self.files: item.close() def flush(self): for item in self.files: item.flush() def seek(self, pos, mode=0): for item in self.files: item.seek(pos, mode) def truncate(self, size=None): for item in self.files: item.truncate(size) def write(self, data): for item in self.files: item.write(data) def writelines(self, str_sequence): self.write("".join(str_sequence)) class GzipFileProper(gzip.GzipFile): """ Proper GZIP file implementation, where the optional filename in the header has directory components removed, and is converted to ISO 8859-1 (Latin-1). On Windows, the filename will also be forced to lowercase. See RFC 1952 GZIP File Format Specification version 4.3 """ def _write_gzip_header(self): self.fileobj.write('\037\213') # magic header self.fileobj.write('\010') # compression method fname = os.path.basename(self.name) if fname.endswith(".gz"): fname = fname[:-3] elif fname.endswith(".tgz"): fname = "%s.tar" % fname[:-4] elif fname.endswith(".wrz"): fname = "%s.wrl" % fname[:-4] flags = 0 if fname: flags = gzip.FNAME self.fileobj.write(chr(flags)) gzip.write32u(self.fileobj, long(time())) self.fileobj.write('\002') self.fileobj.write('\377') if fname: if sys.platform == "win32": # Windows is case insensitive by default (although it can be # set to case sensitive), so according to the GZIP spec, we # force the name to lowercase fname = fname.lower() self.fileobj.write(fname.encode("ISO-8859-1", "replace") .replace("?", "_") + '\000') def __enter__(self): return self def __exit__(self, type, value, tb): self.close() class StringIOu(StringIO): """ StringIO which converts all new line formats in buf to POSIX newlines. """ def __init__(self, buf=''): StringIO.__init__(self, universal_newlines(buf)) class Tee(Files): """ Write to a file and stdout. """ def __init__(self, file_obj): Files.__init__((sys.stdout, file_obj)) def __getattr__(self, name): return getattr(self.files[1], name) def close(self): self.files[1].close() def seek(self, pos, mode=0): return self.files[1].seek(pos, mode) def truncate(self, size=None): return self.files[1].truncate(size) dispcalGUI-1.7.1.6/dispcalGUI/util_list.py000644 000765 000000 00000003265 12025152312 020163 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import re def floatlist(alist): """ Convert all list items to floats (0.0 on error) """ result = [] for item in alist: try: result.append(float(item)) except ValueError: result.append(0.0) return result def index_ignorecase(self, value, start = None, stop = None): """ Case-insensitive version of list.index """ items = [(item.lower() if isinstance(item, (str, unicode)) else item) for item in self] return items.index(value, start or 0, stop or len(self)) def index_fallback_ignorecase(self, value, start = None, stop = None): """ Return index of value in list. Prefer a case-sensitive match. """ if value in self: return self.index(value, start or 0, stop or len(self)) return index_ignorecase(self, value, start or 0, stop or len(self)) def intlist(alist): """ Convert all list items to ints (0 on error) """ result = [] for item in alist: try: result.append(int(item)) except ValueError: result.append(0) return result def natsort(list_in): """ Sort a list which (also) contains integers naturally. """ list_out = [] # decorate alphanumeric = re.compile("\D+|\d+") numeric = re.compile("^\d+$") for i in list_in: match = alphanumeric.findall(i) tmp = [] for j in match: if numeric.match(j): tmp.append((int(j), j)) else: tmp.append((j, None)) list_out.append(tmp) list_out.sort() list_in = list_out list_out = [] # undecorate for i in list_in: tmp = [] for j in i: if type(j[0]) in (int, long): tmp.append(j[1]) else: tmp.append(j[0]) list_out.append("".join(tmp)) return list_out def strlist(alist): """ Convert all list items to strings """ return [str(item) for item in alist] dispcalGUI-1.7.1.6/dispcalGUI/util_mac.py000644 000765 000000 00000005230 12025152312 017742 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import subprocess as sp from time import sleep from meta import name as appname from options import verbose def get_osascript_args(applescript): """ Return arguments ready to use for osascript """ if isinstance(applescript, basestring): applescript = applescript.splitlines() args = [] for line in applescript: args += ['-e', line] return args def get_osascript_args_or_run(applescript, run=True): """ Return arguments ready to use for osascript or run the AppleScript """ if run: return osascript(applescript) else: return get_osascript_args(applescript) def mac_app_activate(delay=0, mac_app_name="Finder"): """ Activate (show & bring to front) an application if it is running. """ applescript = [ 'on appIsRunning(appName)', 'tell application "System Events" to (name of processes) contains ' 'appName', 'end appIsRunning', 'if appIsRunning("%s") then' % mac_app_name, 'tell app "%s" to activate' % mac_app_name, 'end if' ] if delay: sleep(delay) return osascript(applescript) def mac_terminal_do_script(script=None, do=True): """ Run a script in Terminal. """ applescript = [ 'on appIsRunning(appName)', 'tell application "System Events" to (name of processes) contains ' 'appName', 'end appIsRunning', 'if appIsRunning("Terminal") then', 'tell app "Terminal"', 'activate', 'do script ""', # Terminal is already running, open a new # window to make sure it is not blocked by # another process 'end tell', 'else', 'tell app "Terminal" to activate', # Terminal is not yet running, # launch & use first window 'end if' ] if script: applescript += [ 'tell app "Terminal"', 'do script "%s" in first window' % script.replace('"', '\\"'), 'end tell' ] return get_osascript_args_or_run(applescript, script and do) def mac_terminal_set_colors(background="black", cursor="gray", text="gray", text_bold="gray", do=True): """ Set Terminal colors. """ applescript = [ 'tell app "Terminal"', 'set background color of first window to "%s"' % background, 'set cursor color of first window to "%s"' % cursor, 'set normal text color of first window to "%s"' % text, 'set bold text color of first window to "%s"' % text_bold, 'end tell' ] return get_osascript_args_or_run(applescript, do) def osascript(applescript): """ Run AppleScript with the 'osascript' command Return osascript's exit code. """ args = get_osascript_args(applescript) p = sp.Popen(['osascript'] + args, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) output, errors = p.communicate() retcode = p.wait() return retcode, output, errors dispcalGUI-1.7.1.6/dispcalGUI/util_os.py000644 000765 000000 00000016314 12231523252 017634 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import locale import os import re import shutil import subprocess as sp import sys import tempfile from os.path import join if sys.platform == "win32": import ctypes from encoding import get_encodings fs_enc = get_encodings()[1] def quote_args(args): """ Quote commandline arguments where needed. It quotes all arguments that contain spaces or any of the characters ^!$%&()[]{}=;'+,`~ """ args_out = [] for arg in args: if re.search("[\^!$%&()[\]{}=;'+,`~\s]", arg): arg = '"' + arg + '"' args_out += [arg] return args_out def expanduseru(path): """ Unicode version of os.path.expanduser """ if sys.platform == "win32": # The code in this if-statement is copied from Python 2.7's expanduser # in ntpath.py, but uses getenvu() instead of os.environ[] if path[:1] != '~': return path i, n = 1, len(path) while i < n and path[i] not in '/\\': i = i + 1 if 'HOME' in os.environ: userhome = getenvu('HOME') elif 'USERPROFILE' in os.environ: userhome = getenvu('USERPROFILE') elif not 'HOMEPATH' in os.environ: return path else: try: drive = getenvu('HOMEDRIVE') except KeyError: drive = '' userhome = join(drive, getenvu('HOMEPATH')) if i != 1: #~user userhome = join(dirname(userhome), path[1:i]) return userhome + path[i:] return unicode(os.path.expanduser(path), fs_enc) def expandvarsu(path): """ Unicode version of os.path.expandvars """ if sys.platform == "win32": # The code in this if-statement is copied from Python 2.7's expandvars # in ntpath.py, but uses getenvu() instead of os.environ[] if '$' not in path and '%' not in path: return path import string varchars = string.ascii_letters + string.digits + '_-' res = '' index = 0 pathlen = len(path) while index < pathlen: c = path[index] if c == '\'': # no expansion within single quotes path = path[index + 1:] pathlen = len(path) try: index = path.index('\'') res = res + '\'' + path[:index + 1] except ValueError: res = res + path index = pathlen - 1 elif c == '%': # variable or '%' if path[index + 1:index + 2] == '%': res = res + c index = index + 1 else: path = path[index+1:] pathlen = len(path) try: index = path.index('%') except ValueError: res = res + '%' + path index = pathlen - 1 else: var = path[:index] if var in os.environ: res = res + getenvu(var) else: res = res + '%' + var + '%' elif c == '$': # variable or '$$' if path[index + 1:index + 2] == '$': res = res + c index = index + 1 elif path[index + 1:index + 2] == '{': path = path[index+2:] pathlen = len(path) try: index = path.index('}') var = path[:index] if var in os.environ: res = res + getenvu(var) else: res = res + '${' + var + '}' except ValueError: res = res + '${' + path index = pathlen - 1 else: var = '' index = index + 1 c = path[index:index + 1] while c != '' and c in varchars: var = var + c index = index + 1 c = path[index:index + 1] if var in os.environ: res = res + getenvu(var) else: res = res + '$' + var if c != '': index = index - 1 else: res = res + c index = index + 1 return res return unicode(os.path.expandvars(path), fs_enc) def getenvu(name, default = None): """ Unicode version of os.getenv """ if sys.platform == "win32": name = unicode(name) # http://stackoverflow.com/questions/2608200/problems-with-umlauts-in-python-appdata-environvent-variable length = ctypes.windll.kernel32.GetEnvironmentVariableW(name, None, 0) if length == 0: return default buffer = ctypes.create_unicode_buffer(u'\0' * length) ctypes.windll.kernel32.GetEnvironmentVariableW(name, buffer, length) return buffer.value var = os.getenv(name, default) return var if isinstance(var, unicode) else unicode(var, fs_enc) def is_superuser(): if sys.platform == "win32": if sys.getwindowsversion() >= (5, 1): return ctypes.windll.shell32.IsUserAnAdmin() else: try: return ctypes.windll.advpack.IsNTAdmin(0, 0) except Exception: return False else: return os.geteuid() == 0 def launch_file(filepath): """ Open a file with its assigned default app. Return tuple(returncode, stdout, stderr) or None if functionality not available """ filepath = filepath.encode(fs_enc) retcode = None kwargs = dict(stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) if sys.platform == "darwin": retcode = sp.call(['open', filepath], **kwargs) elif sys.platform == "win32": # for win32, we could use os.startfile, but then we'd not be able # to return exitcode (does it matter?) kwargs["startupinfo"] = sp.STARTUPINFO() kwargs["startupinfo"].dwFlags |= sp.STARTF_USESHOWWINDOW kwargs["startupinfo"].wShowWindow = sp.SW_HIDE kwargs["shell"] = True retcode = sp.call('start "" /B "%s"' % filepath, **kwargs) elif which('xdg-open'): retcode = sp.call(['xdg-open', filepath], **kwargs) return retcode def listdir_re(path, rex = None): """ Filter directory contents through a regular expression """ files = os.listdir(path) if rex: rex = re.compile(rex, re.IGNORECASE) files = filter(rex.search, files) return files def movefile(src, dst, overwrite=True): """ Move a file to another location. dst can be a directory in which case a file with the same basename as src will be created in it. Set overwrite to True to make sure existing files are overwritten. """ if os.path.isdir(dst): dst = os.path.join(dst, os.path.basename(src)) if os.path.isfile(dst) and overwrite: os.remove(dst) shutil.move(src, dst) def putenvu(name, value): """ Unicode version of os.putenv (also correctly updates os.environ) """ if sys.platform == "win32" and isinstance(value, unicode): ctypes.windll.kernel32.SetEnvironmentVariableW(unicode(name), value) else: os.environ[name] = value.encode(fs_enc) def relpath(path, start): """ Return a relative version of a path """ path = os.path.abspath(path).split(os.path.sep) start = os.path.abspath(start).split(os.path.sep) if path == start: return "." elif path[:len(start)] == start: return os.path.sep.join(path[len(start):]) elif start[:len(path)] == path: return os.path.sep.join([".."] * (len(start) - len(path))) def waccess(path, mode): """ Test access to path """ if mode & os.R_OK: try: test = open(path, "rb") except EnvironmentError: return False test.close() if mode & os.W_OK: if os.path.isdir(path): dir = path else: dir = os.path.dirname(path) try: if os.path.isfile(path): test = open(path, "ab") else: test = tempfile.TemporaryFile(prefix=".", dir=dir) except EnvironmentError: return False test.close() if mode & os.X_OK: return os.access(path, mode) return True def which(executable, paths = None): """ Return the full path of executable """ if not paths: paths = getenvu("PATH", os.defpath).split(os.pathsep) for cur_dir in paths: filename = os.path.join(cur_dir, executable) if os.path.isfile(filename): try: # make sure file is actually executable if os.access(filename, os.X_OK): return filename except Exception, exception: pass return None dispcalGUI-1.7.1.6/dispcalGUI/util_str.py000644 000765 000000 00000020730 12266411534 020027 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import codecs import locale import string import sys try: from functools import reduce except ImportError: # Python < 2.6 pass from encoding import get_encodings fs_enc = get_encodings()[1] ascii_printable = "".join([getattr(string, name) for name in "digits", "ascii_letters", "punctuation", "whitespace"]) # Control chars are defined as charcodes in the decimal range 0-31 (inclusive) # except whitespace characters, plus charcode 127 (DEL) control_chars = "".join([chr(i) for i in range(0, 9) + range(14, 32) + [127]]) # Safe character substitution - can be used for filenames # i.e. no \/:*?"<>| will be added through substitution safesubst = {u"\u00a9": u"(C)", # U+00A9 copyright sign u"\u00ae": u"(R)", # U+00AE registered sign u"\u00b1": u"+-", u"\u00b2": u"^2", # U+00B2 superscript two u"\u00b3": u"^3", # U+00B3 superscript three u"\u00b9": u"^1", # U+00B9 superscript one u"\u00d7": u"x", # U+00D7 multiplication sign u"\u00df": u"ss", u"\u00e6": u"ae", u"\u0153": u"oe", u"\u0192": u"f", u"\u02dc": u"~", u"\u02c6": u"^", u"\u2010": u"-", u"\u2012": u"-", u"\u2013": u"-", # U+2013 en dash u"\u2014": u"--", # U+2014 em dash u"\u2015": u"---", # U+2015 horizontal bar u"\u2018": u"'", u"\u2019": u"'", u"\u201a": u",", u"\u201b": u"'", u"\u201e": u",,", u"\u2026": u"...", # U+2026 ellipsis u"\u2034": u"'''", u"\u203C": u"!!", u"\u2070": u"^0", u"\u2074": u"^4", u"\u2075": u"^5", u"\u2076": u"^6", u"\u2077": u"^7", u"\u2078": u"^8", u"\u2079": u"^9", u"\u20a7": u"Pts", u"\u20a8": u"Rs", u"\u2113": u"l", u"\u2116": u"No.", u"\u2117": u"(P)", u"\u2122": u"TM", u"\u2212": u"-", u"\u2260": u"!=", u"\u2776": u"(1)", u"\u2777": u"(2)", u"\u2778": u"(3)", u"\u2779": u"(4)", u"\u277a": u"(5)", u"\u277b": u"(6)", u"\u277c": u"(7)", u"\u277d": u"(8)", u"\u277e": u"(9)", u"\u277f": u"(10)", u"\ufb01": u"fi", u"\ufb02": u"fl",} # U+2212 minus sign # Extended character substitution - can NOT be used for filenames subst = dict(safesubst) subst.update({u"\u00a6": u"|", u"\u00ab": u"<<", u"\u00bb": u">>", u"\u00bc": u"1/4", u"\u00bd": u"1/2", u"\u00be": u"3/4", u"\u00f7": u":", u"\u201c": u"\x22", u"\u201d": u"\x22", u"\u201f": u"\x22", u"\u2039": u"<", u"\u203a": u">", u"\u2044": u"/", u"\u2105": u"c/o", u"\u2153": u"1/3", u"\u2154": u"2/3", u"\u215b": u"1/8", u"\u215c": u"3/8", u"\u215d": u"5/8", u"\u215e": u"7/8", u"\u2190": u"<-", u"\u2192": u"->", u"\u2194": u"<->", u"\u2264": u"<=", u"\u2265": u"=>",}) def asciize(obj): """ Turn several unicode chars into an ASCII representation. This function either takes a string or an exception as argument (when used as error handler for encode or decode). """ chars = u"" if isinstance(obj, Exception): for char in obj.object[obj.start:obj.end]: chars += subst.get(char, u"?") return chars, obj.end else: return obj.encode("ASCII", "asciize") codecs.register_error("asciize", asciize) def safe_asciize(obj): """ Turn several unicode chars into an ASCII representation. This function either takes a string or an exception as argument (when used as error handler for encode or decode). """ chars = u"" if isinstance(obj, Exception): for char in obj.object[obj.start:obj.end]: chars += safesubst.get(char, u"_") return chars, obj.end else: return obj.encode("ASCII", "safe_asciize") codecs.register_error("safe_asciize", safe_asciize) def escape(obj): """ Turn unicode chars into escape codes. This function either takes a string or an exception as argument (when used as error handler for encode or decode). """ chars = u"" if isinstance(obj, Exception): for char in obj.object[obj.start:obj.end]: chars += subst.get(char, u"\\u" % hex(ord(char))[2:]) return chars, obj.end else: return obj.encode("ASCII", "escape") codecs.register_error("escape", escape) def make_ascii_printable(text, subst=""): return "".join([char if char in ascii_printable else subst for char in text]) def center(text, width = None): """ Center (mono-spaced) text. If no width is given, the longest line (after breaking at each newline) is used as max width. """ text = text.split("\n") if width is None: width = 0 for line in text: if len(line) > width: width = len(line) i = 0 for line in text: text[i] = line.center(width) i += 1 return "\n".join(text) def create_replace_function(template, values): """ Create a replace function for use with e.g. re.sub """ def replace_function(match, template=template, values=values): for i, group in enumerate(match.groups()): template = template.replace("\\%i" % (i + 1), group) return template % values return replace_function def ellipsis(text, maxlen=64, pos="r"): """ Truncate text to maxlen characters and add elipsis if it was longer. Elipsis position can be 'm' (middle) or 'r' (right). """ if len(text) <= maxlen: return text if pos == "r": return text[:maxlen - 1] + u"\u2026" elif pos == "m": return text[:maxlen / 2] + u"\u2026" + text[-maxlen / 2 + 1:] def hexunescape(match): """ To be used with re.sub """ return unichr(int(match.group(1), 16)) def universal_newlines(txt): """ Return txt with all new line formats converted to POSIX newlines. """ return txt.replace("\r\n", "\n").replace("\r", "\n") def replace_control_chars(txt, replacement=" ", collapse=False): """ Replace all control characters. Default replacement character is ' ' (space). If the 'collapse' keyword argument evaluates to True, consecutive replacement characters are collapsed to a single one. """ txt = strtr(txt, dict(zip(control_chars, [replacement] * len(control_chars)))) if collapse: while replacement * 2 in txt: txt = txt.replace(replacement * 2, replacement) return txt def safe_basestring(obj): """ Return a unicode or string representation of obj Return obj if isinstance(obj, basestring). Otherwise, return unicode(obj), string(obj), or repr(obj), whichever succeeds first. """ if isinstance(obj, EnvironmentError): # There are three possible variations of EnvironmentError instances: # - instance with 'errno', 'strerror', 'filename' and 'args' attributes # (created by EnvironmentError with three arguments) # NOTE: The 'args' attribute will contain only the first two arguments # - instance with 'errno', 'strerror' and 'args' attributes # (created by EnvironmentError with two arguments) # - instance with just 'args' attribute # (created by EnvironmentError with one or more than three arguments) args = [safe_unicode(arg) for arg in obj.args] if obj.filename is not None: obj = "[Errno %s] %s: %r" % (args[0], args[1], obj.filename) elif obj.strerror is not None: obj = "[Errno %s] %s" % (args[0], args[1]) elif obj.errno is not None: obj = "[Errno %s]" % args[0] else: obj = " ".join(args) if not isinstance(obj, basestring): try: obj = unicode(obj) except UnicodeDecodeError: try: obj = str(obj) except UnicodeEncodeError: obj = repr(obj) return obj def safe_str(obj, enc=fs_enc, errors="replace"): """ Return string representation of obj """ obj = safe_basestring(obj) if isinstance(obj, unicode): return obj.encode(enc, errors) else: return obj def safe_unicode(obj, enc=fs_enc, errors="replace"): """ Return unicode representation of obj """ obj = safe_basestring(obj) if isinstance(obj, unicode): return obj else: return obj.decode(enc, errors) def strtr(txt, replacements): """ String multi-replace, a bit like PHP's strtr. replacements can be a dict or a list. If it is a list, all items are replaced with the empty string (""). """ if hasattr(replacements, "iteritems"): replacements = replacements.iteritems() else: replacements = zip(replacements, [""] * len(replacements)) for srch, sub in replacements: txt = txt.replace(srch, sub) return txt def wrap(text, width = 70): """ A word-wrap function that preserves existing line breaks and spaces. Expects that existing line breaks are posix newlines (\\n). """ return reduce(lambda line, word, width=width: '%s%s%s' % (line, ' \n'[(len(line)-line.rfind('\n')-1 + len(word.split('\n',1)[0] ) >= width)], word), text.split(' ') ) def test(): for k, v in subst.iteritems(): print k, v if __name__ == "__main__": test() dispcalGUI-1.7.1.6/dispcalGUI/util_win.py000644 000765 000000 00000016262 12266411534 020021 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import ctypes import _winreg import struct import sys import pywintypes import win32api import winerror # http://msdn.microsoft.com/en-us/library/dd183569%28v=vs.85%29.aspx DISPLAY_DEVICE_ACTIVE = 0x1 # DISPLAY_DEVICE_ACTIVE specifies whether a monitor is presented as being "on" by the respective GDI view. # Windows Vista: EnumDisplayDevices will only enumerate monitors that can be presented as being "on." DISPLAY_DEVICE_MIRRORING_DRIVER = 0x8 # Represents a pseudo device used to mirror application drawing for remoting or other purposes. # An invisible pseudo monitor is associated with this device. # For example, NetMeeting uses it. Note that GetSystemMetrics (SM_MONITORS) only accounts for visible display monitors. DISPLAY_DEVICE_MODESPRUNED = 0x8000000 # The device has more display modes than its output devices support. DISPLAY_DEVICE_PRIMARY_DEVICE = 0x4 # The primary desktop is on the device. # For a system with a single display card, this is always set. # For a system with multiple display cards, only one device can have this set. DISPLAY_DEVICE_REMOVABLE = 0x20 # The device is removable; it cannot be the primary display. DISPLAY_DEVICE_VGA_COMPATIBLE = 0x10 # The device is VGA compatible. DISPLAY_DEVICE_DISCONNECT = 0x2000000 DISPLAY_DEVICE_MULTI_DRIVER = 0x2 DISPLAY_DEVICE_REMOTE = 0x4000000 # Icm.h CLASS_MONITOR = struct.unpack("!L", "mntr")[0] CLASS_PRINTER = struct.unpack("!L", "prtr")[0] CLASS_SCANNER = struct.unpack("!L", "scnr")[0] def _get_icm_display_device_key(device): monkey = device.DeviceKey.split("\\")[-2:] # pun totally intended subkey = "\\".join(["Software", "Microsoft", "Windows NT", "CurrentVersion", "ICM", "ProfileAssociations", "Display"] + monkey) return _winreg.CreateKey(_winreg.HKEY_CURRENT_USER, subkey) def _get_mscms_dll_handle(): try: return ctypes.windll.mscms except WindowsError: return None def calibration_management_isenabled(): """ Check if calibration is enabled under Windows 7 """ if sys.getwindowsversion() < (6, 1): # Windows XP and Vista don't have calibration management return False if False: # Using registry - NEVER # Also, does not work! key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ICM\Calibration") return bool(_winreg.QueryValueEx(key, "CalibrationManagementEnabled")[0]) else: # Using ctypes mscms = _get_mscms_dll_handle() pbool = ctypes.pointer(ctypes.c_bool()) if not mscms or not mscms.WcsGetCalibrationManagementState(pbool): return return bool(pbool.contents) def disable_calibration_management(): """ Disable calibration loading under Windows 7 """ enable_calibration_management(False) def disable_per_user_profiles(display_no=0): """ Disable per user profiles under Vista/Windows 7 """ enable_per_user_profiles(False, display_no) def enable_calibration_management(enable=True): """ Enable calibration loading under Windows 7 """ if sys.getwindowsversion() < (6, 1): raise NotImplementedError("Calibration Management is only available " "in Windows 7 or later") if False: # Using registry - NEVER # Also, does not work! key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ICM\Calibration", _winreg.KEY_SET_VALUE) _winreg.SetValueEx(key, "CalibrationManagementEnabled", 0, _winreg.REG_DWORD, int(enable)) else: # Using ctypes (must be called with elevated permissions) mscms = _get_mscms_dll_handle() if not mscms: return False if not mscms.WcsSetCalibrationManagementState(enable): raise get_windows_error(ctypes.windll.kernel32.GetLastError()) return True def enable_per_user_profiles(enable=True, display_no=0): """ Enable per user profiles under Vista/Windows 7 """ if sys.getwindowsversion() < (6, ): # Windows XP doesn't have per-user profiles raise NotImplementedError("Per-user profiles are only available " "in Windows Vista, 7 or later") device = get_display_device(display_no) if device: if False: # Using registry - NEVER key = _get_icm_display_device_key(device) _winreg.SetValueEx(key, "UsePerUserProfiles", 0, _winreg.REG_DWORD, int(enable)) else: # Using ctypes mscms = _get_mscms_dll_handle() if not mscms: return False if not mscms.WcsSetUsePerUserProfiles(unicode(device.DeviceID), CLASS_MONITOR, enable): raise get_windows_error(ctypes.windll.kernel32.GetLastError()) return True def get_active_display_device(devicename): """ Get active display device of an output (there can only be one per output) Return value: display device object or None Example usage: get_active_display_device('\\\\.\\DISPLAY1', 0) devicename = '\\\\.\\DISPLAYn' where n is a positive integer starting at 1 """ devices = [] n = 0 while True: try: devices.append(win32api.EnumDisplayDevices(devicename, n)) except pywintypes.error: break n += 1 for device in devices: if (device.StateFlags & DISPLAY_DEVICE_ACTIVE and (len(devices) == 1 or device.StateFlags & DISPLAY_DEVICE_MULTI_DRIVER)): return device def get_display_device(display_no=0): # The ordering will work as long as Argyll continues using # EnumDisplayMonitors monitors = get_real_display_devices_info() moninfo = monitors[display_no] # via win32api & registry return get_active_display_device(moninfo["Device"]) def get_real_display_devices_info(): """ Return info for real (non-virtual) devices """ # See Argyll source spectro/dispwin.c MonitorEnumProc, get_displays monitors = [] for monitor in win32api.EnumDisplayMonitors(None, None): try: moninfo = win32api.GetMonitorInfo(monitor[0]) except pywintypes.error: pass else: if moninfo and not moninfo["Device"].startswith("\\\\.\\DISPLAYV"): monitors.append(moninfo) return monitors def get_windows_error(errorcode): for name in dir(winerror): if name.startswith("ERROR_") and getattr(winerror, name) == errorcode: return WindowsError(errorcode, name) return WindowsError(errorcode, "") def per_user_profiles_isenabled(display_no=0): """ Check if per user profiles is enabled under Vista/Windows 7 """ if sys.getwindowsversion() < (6, ): # Windows XP doesn't have per-user profiles return False device = get_display_device(display_no) if device: if False: # Using registry - NEVER key = _get_icm_display_device_key(device) return bool(_winreg.QueryValueEx(key, "UsePerUserProfiles")[0]) else: # Using ctypes mscms = _get_mscms_dll_handle() pbool = ctypes.pointer(ctypes.c_bool()) if not mscms or not mscms.WcsGetUsePerUserProfiles(unicode(device.DeviceID), CLASS_MONITOR, pbool): return return bool(pbool.contents) if __name__ == "__main__": if "calibration" in sys.argv[1:]: if "enable" in sys.argv[1:] or "disable" in sys.argv[1:]: enable_calibration_management(sys.argv[1:][-1] != "disable") print calibration_management_isenabled() elif "per_user_profiles" in sys.argv[1:]: if "enable" in sys.argv[1:] or "disable" in sys.argv[1:]: enable_per_user_profiles(sys.argv[1:][-1] != "disable") print per_user_profiles_isenabled() dispcalGUI-1.7.1.6/dispcalGUI/util_x.py000644 000765 000000 00000001152 12025152312 017450 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os def get_display(): """ Parse $DISPLAY and return (hostname, display number, screen number) """ display = os.getenv("DISPLAY", ":0.0").split(":") hostname = display[0] if len(display) > 1: try: display_screen = tuple(int(n) for n in display[1].split(".")) except ValueError: raise ValueError("The DISPLAY environment variable has an unknown " "format: %r" % os.getenv("DISPLAY")) display = display_screen[0] if len(display_screen) > 1: screen = display_screen[1] else: screen = 0 else: display, screen = 0, 0 return hostname, display, screen dispcalGUI-1.7.1.6/dispcalGUI/wexpect.py000644 000765 000000 00000343122 12237536425 017651 0ustar00svpwheel000000 000000 """Pexpect is a Python module for spawning child applications and controlling them automatically. Pexpect can be used for automating interactive applications such as ssh, ftp, passwd, telnet, etc. It can be used to a automate setup scripts for duplicating software package installations on different servers. It can be used for automated software testing. Pexpect is in the spirit of Don Libes' Expect, but Pexpect is pure Python. Other Expect-like modules for Python require TCL and Expect or require C extensions to be compiled. Pexpect does not use C, Expect, or TCL extensions. It should work on any platform that supports the standard Python pty module. The Pexpect interface focuses on ease of use so that simple tasks are easy. There are two main interfaces to Pexpect -- the function, run() and the class, spawn. You can call the run() function to execute a command and return the output. This is a handy replacement for os.system(). For example:: pexpect.run('ls -la') The more powerful interface is the spawn class. You can use this to spawn an external child command and then interact with the child by sending lines and expecting responses. For example:: child = pexpect.spawn('scp foo myname@host.example.com:.') child.expect ('Password:') child.sendline (mypassword) This works even for commands that ask for passwords or other input outside of the normal stdio streams. Credits: Noah Spurrier, Richard Holden, Marco Molteni, Kimberley Burchett, Robert Stone, Hartmut Goebel, Chad Schroeder, Erick Tryzelaar, Dave Kirby, Ids vander Molen, George Todd, Noel Taylor, Nicolas D. Cesar, Alexander Gattin, Geoffrey Marshall, Francisco Lourenco, Glen Mabey, Karthik Gurusamy, Fernando Perez, Corey Minyard, Jon Cohen, Guillaume Chazarain, Andrew Ryan, Nick Craig-Wood, Andrew Stone, Jorgen Grahn (Let me know if I forgot anyone.) Free, open source, and all that good stuff. 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Pexpect Copyright (c) 2008 Noah Spurrier http://pexpect.sourceforge.net/ $Id: pexpect.py 507 2007-12-27 02:40:52Z noah $ """ try: import os, sys, time import select import string import re import struct import types import errno import traceback import signal import subprocess if sys.platform != 'win32': import pty import tty import termios import resource import fcntl else: from StringIO import StringIO try: from ctypes import windll import pywintypes from win32com.shell.shellcon import CSIDL_APPDATA from win32com.shell.shell import SHGetSpecialFolderPath from win32console import * from win32process import * from win32con import * from win32gui import * import win32api import win32file import winerror except ImportError, e: raise ImportError(str(e) + "\nThis package requires the win32 python packages.") screenbufferfillchar = u'\4' maxconsoleY = 8000 except ImportError, e: raise ImportError (str(e) + """ A critical module was not found. Probably this operating system does not support it. Pexpect is intended for UNIX-like operating systems.""") __version__ = '2.3' __revision__ = '$Revision: 399 $' __all__ = ['ExceptionPexpect', 'EOF', 'TIMEOUT', 'spawn', 'run', 'which', 'split_command_line', '__version__', '__revision__'] appname = 'dispcalGUI' # Exception classes used by this module. class ExceptionPexpect(Exception): """Base class for all exceptions raised by this module. """ def __init__(self, value): self.value = value def __str__(self): return str(self.value) def get_trace(self): """This returns an abbreviated stack trace with lines that only concern the caller. In other words, the stack trace inside the Pexpect module is not included. """ tblist = traceback.extract_tb(sys.exc_info()[2]) #tblist = filter(self.__filter_not_pexpect, tblist) tblist = [item for item in tblist if self.__filter_not_pexpect(item)] tblist = traceback.format_list(tblist) return ''.join(tblist) def __filter_not_pexpect(self, trace_list_item): """This returns True if list item 0 the string 'pexpect.py' in it. """ if trace_list_item[0].find('pexpect.py') == -1: return True else: return False class EOF(ExceptionPexpect): """Raised when EOF is read from a child. This usually means the child has exited.""" class TIMEOUT(ExceptionPexpect): """Raised when a read time exceeds the timeout. """ ##class TIMEOUT_PATTERN(TIMEOUT): ## """Raised when the pattern match time exceeds the timeout. ## This is different than a read TIMEOUT because the child process may ## give output, thus never give a TIMEOUT, but the output ## may never match a pattern. ## """ ##class MAXBUFFER(ExceptionPexpect): ## """Raised when a scan buffer fills before matching an expected pattern.""" def run (command, timeout=-1, withexitstatus=False, events=None, extra_args=None, logfile=None, cwd=None, env=None): """ This function runs the given command; waits for it to finish; then returns all output as a string. STDERR is included in output. If the full path to the command is not given then the path is searched. Note that lines are terminated by CR/LF (\\r\\n) combination even on UNIX-like systems because this is the standard for pseudo ttys. If you set 'withexitstatus' to true, then run will return a tuple of (command_output, exitstatus). If 'withexitstatus' is false then this returns just command_output. The run() function can often be used instead of creating a spawn instance. For example, the following code uses spawn:: from pexpect import * child = spawn('scp foo myname@host.example.com:.') child.expect ('(?i)password') child.sendline (mypassword) The previous code can be replace with the following:: from pexpect import * run ('scp foo myname@host.example.com:.', events={'(?i)password': mypassword}) Examples ======== Start the apache daemon on the local machine:: from pexpect import * run ("/usr/local/apache/bin/apachectl start") Check in a file using SVN:: from pexpect import * run ("svn ci -m 'automatic commit' my_file.py") Run a command and capture exit status:: from pexpect import * (command_output, exitstatus) = run ('ls -l /bin', withexitstatus=1) Tricky Examples =============== The following will run SSH and execute 'ls -l' on the remote machine. The password 'secret' will be sent if the '(?i)password' pattern is ever seen:: run ("ssh username@machine.example.com 'ls -l'", events={'(?i)password':'secret\\n'}) This will start mencoder to rip a video from DVD. This will also display progress ticks every 5 seconds as it runs. For example:: from pexpect import * def print_ticks(d): print d['event_count'], run ("mencoder dvd://1 -o video.avi -oac copy -ovc copy", events={TIMEOUT:print_ticks}, timeout=5) The 'events' argument should be a dictionary of patterns and responses. Whenever one of the patterns is seen in the command out run() will send the associated response string. Note that you should put newlines in your string if Enter is necessary. The responses may also contain callback functions. Any callback is function that takes a dictionary as an argument. The dictionary contains all the locals from the run() function, so you can access the child spawn object or any other variable defined in run() (event_count, child, and extra_args are the most useful). A callback may return True to stop the current run process otherwise run() continues until the next event. A callback may also return a string which will be sent to the child. 'extra_args' is not used by directly run(). It provides a way to pass data to a callback function through run() through the locals dictionary passed to a callback. """ if timeout == -1: child = spawn(command, maxread=2000, logfile=logfile, cwd=cwd, env=env) else: child = spawn(command, timeout=timeout, maxread=2000, logfile=logfile, cwd=cwd, env=env) if events is not None: patterns = events.keys() responses = events.values() else: patterns=None # We assume that EOF or TIMEOUT will save us. responses=None child_result_list = [] event_count = 0 while 1: try: index = child.expect (patterns) if type(child.after) in types.StringTypes: child_result_list.append(child.before + child.after) else: # child.after may have been a TIMEOUT or EOF, so don't cat those. child_result_list.append(child.before) if type(responses[index]) in types.StringTypes: child.send(responses[index]) elif type(responses[index]) is types.FunctionType: callback_result = responses[index](locals()) sys.stdout.flush() if type(callback_result) in types.StringTypes: child.send(callback_result) elif callback_result: break else: raise TypeError ('The callback must be a string or function type.') event_count = event_count + 1 except TIMEOUT, e: child_result_list.append(child.before) break except EOF, e: child_result_list.append(child.before) break child_result = ''.join(child_result_list) if withexitstatus: child.close() return (child_result, child.exitstatus) else: return child_result def spawn(command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None, codepage=None): log('=' * 80) log('Buffer size: %s' % maxread) if searchwindowsize: log('Search window size: %s' % searchwindowsize) log('Timeout: %ss' % timeout) if env: log('Environment:') for name in env: log('\t%s=%s' % (name, env[name])) if cwd: log('Working directory: %s' % cwd) log('Spawning %s' % join_args([command] + args)) if sys.platform == 'win32': return spawn_windows(command, args, timeout, maxread, searchwindowsize, logfile, cwd, env, codepage) else: return spawn_unix(command, args, timeout, maxread, searchwindowsize, logfile, cwd, env) class spawn_unix (object): """This is the main class interface for Pexpect. Use this class to start and control child applications. """ def __init__(self, command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None): """This is the constructor. The command parameter may be a string that includes a command and any arguments to the command. For example:: child = pexpect.spawn ('/usr/bin/ftp') child = pexpect.spawn ('/usr/bin/ssh user@example.com') child = pexpect.spawn ('ls -latr /tmp') You may also construct it with a list of arguments like so:: child = pexpect.spawn ('/usr/bin/ftp', []) child = pexpect.spawn ('/usr/bin/ssh', ['user@example.com']) child = pexpect.spawn ('ls', ['-latr', '/tmp']) After this the child application will be created and will be ready to talk to. For normal use, see expect() and send() and sendline(). Remember that Pexpect does NOT interpret shell meta characters such as redirect, pipe, or wild cards (>, |, or *). This is a common mistake. If you want to run a command and pipe it through another command then you must also start a shell. For example:: child = pexpect.spawn('/bin/bash -c "ls -l | grep LOG > log_list.txt"') child.expect(pexpect.EOF) The second form of spawn (where you pass a list of arguments) is useful in situations where you wish to spawn a command and pass it its own argument list. This can make syntax more clear. For example, the following is equivalent to the previous example:: shell_cmd = 'ls -l | grep LOG > log_list.txt' child = pexpect.spawn('/bin/bash', ['-c', shell_cmd]) child.expect(pexpect.EOF) The maxread attribute sets the read buffer size. This is maximum number of bytes that Pexpect will try to read from a TTY at one time. Setting the maxread size to 1 will turn off buffering. Setting the maxread value higher may help performance in cases where large amounts of output are read back from the child. This feature is useful in conjunction with searchwindowsize. The searchwindowsize attribute sets the how far back in the incomming seach buffer Pexpect will search for pattern matches. Every time Pexpect reads some data from the child it will append the data to the incomming buffer. The default is to search from the beginning of the imcomming buffer each time new data is read from the child. But this is very inefficient if you are running a command that generates a large amount of data where you want to match The searchwindowsize does not effect the size of the incomming data buffer. You will still have access to the full buffer after expect() returns. The logfile member turns on or off logging. All input and output will be copied to the given file object. Set logfile to None to stop logging. This is the default. Set logfile to sys.stdout to echo everything to standard output. The logfile is flushed after each write. Example log input and output to a file:: child = pexpect.spawn('some_command') fout = file('mylog.txt','w') child.logfile = fout Example log to stdout:: child = pexpect.spawn('some_command') child.logfile = sys.stdout The logfile_read and logfile_send members can be used to separately log the input from the child and output sent to the child. Sometimes you don't want to see everything you write to the child. You only want to log what the child sends back. For example:: child = pexpect.spawn('some_command') child.logfile_read = sys.stdout To separately log output sent to the child use logfile_send:: self.logfile_send = fout The delaybeforesend helps overcome a weird behavior that many users were experiencing. The typical problem was that a user would expect() a "Password:" prompt and then immediately call sendline() to send the password. The user would then see that their password was echoed back to them. Passwords don't normally echo. The problem is caused by the fact that most applications print out the "Password" prompt and then turn off stdin echo, but if you send your password before the application turned off echo, then you get your password echoed. Normally this wouldn't be a problem when interacting with a human at a real keyboard. If you introduce a slight delay just before writing then this seems to clear up the problem. This was such a common problem for many users that I decided that the default pexpect behavior should be to sleep just before writing to the child application. 1/20th of a second (50 ms) seems to be enough to clear up the problem. You can set delaybeforesend to 0 to return to the old behavior. Most Linux machines don't like this to be below 0.03. I don't know why. Note that spawn is clever about finding commands on your path. It uses the same logic that "which" uses to find executables. If you wish to get the exit status of the child you must call the close() method. The exit or signal status of the child will be stored in self.exitstatus or self.signalstatus. If the child exited normally then exitstatus will store the exit return code and signalstatus will be None. If the child was terminated abnormally with a signal then signalstatus will store the signal value and exitstatus will be None. If you need more detail you can also read the self.status member which stores the status returned by os.waitpid. You can interpret this using os.WIFEXITED/os.WEXITSTATUS or os.WIFSIGNALED/os.TERMSIG. """ self.STDIN_FILENO = pty.STDIN_FILENO self.STDOUT_FILENO = pty.STDOUT_FILENO self.STDERR_FILENO = pty.STDERR_FILENO self.stdin = sys.stdin self.stdout = sys.stdout self.stderr = sys.stderr self.searcher = None self.ignorecase = False self.before = None self.after = None self.match = None self.match_index = None self.terminated = True self.exitstatus = None self.signalstatus = None self.status = None # status returned by os.waitpid self.flag_eof = False self.pid = None self.child_fd = -1 # initially closed self.timeout = timeout self.delimiter = EOF self.logfile = logfile self.logfile_read = None # input from child (read_nonblocking) self.logfile_send = None # output to send (send, sendline) self.maxread = maxread # max bytes to read at one time into buffer self.buffer = '' # This is the read buffer. See maxread. self.searchwindowsize = searchwindowsize # Anything before searchwindowsize point is preserved, but not searched. # Most Linux machines don't like delaybeforesend to be below 0.03 (30 ms). self.delaybeforesend = 0.05 # Sets sleep time used just before sending data to child. Time in seconds. self.delayafterclose = 0.1 # Sets delay in close() method to allow kernel time to update process status. Time in seconds. self.delayafterterminate = 0.1 # Sets delay in terminate() method to allow kernel time to update process status. Time in seconds. self.softspace = False # File-like object. self.name = '<' + repr(self) + '>' # File-like object. self.encoding = None # File-like object. self.closed = True # File-like object. self.ocwd = os.getcwdu() self.cwd = cwd self.env = env self.__irix_hack = (sys.platform.lower().find('irix')>=0) # This flags if we are running on irix # Solaris uses internal __fork_pty(). All others use pty.fork(). if (sys.platform.lower().find('solaris')>=0) or (sys.platform.lower().find('sunos5')>=0): self.use_native_pty_fork = False else: self.use_native_pty_fork = True # allow dummy instances for subclasses that may not use command or args. if command is None: self.command = None self.args = None self.name = '' else: self._spawn (command, args) def __del__(self): """This makes sure that no system resources are left open. Python only garbage collects Python objects. OS file descriptors are not Python objects, so they must be handled explicitly. If the child file descriptor was opened outside of this class (passed to the constructor) then this does not close it. """ if not self.closed: # It is possible for __del__ methods to execute during the # teardown of the Python VM itself. Thus self.close() may # trigger an exception because os.close may be None. # -- Fernando Perez try: self.close() except AttributeError: pass def __str__(self): """This returns a human-readable string that represents the state of the object. """ s = [] s.append(repr(self)) s.append('version: ' + __version__ + ' (' + __revision__ + ')') s.append('command: ' + str(self.command)) s.append('args: ' + str(self.args)) s.append('searcher: ' + str(self.searcher)) s.append('buffer (last 100 chars): ' + str(self.buffer)[-100:]) s.append('before (last 100 chars): ' + str(self.before)[-100:]) s.append('after: ' + str(self.after)) s.append('match: ' + str(self.match)) s.append('match_index: ' + str(self.match_index)) s.append('exitstatus: ' + str(self.exitstatus)) s.append('flag_eof: ' + str(self.flag_eof)) s.append('pid: ' + str(self.pid)) s.append('child_fd: ' + str(self.child_fd)) s.append('closed: ' + str(self.closed)) s.append('timeout: ' + str(self.timeout)) s.append('delimiter: ' + str(self.delimiter)) s.append('logfile: ' + str(self.logfile)) s.append('logfile_read: ' + str(self.logfile_read)) s.append('logfile_send: ' + str(self.logfile_send)) s.append('maxread: ' + str(self.maxread)) s.append('ignorecase: ' + str(self.ignorecase)) s.append('searchwindowsize: ' + str(self.searchwindowsize)) s.append('delaybeforesend: ' + str(self.delaybeforesend)) s.append('delayafterclose: ' + str(self.delayafterclose)) s.append('delayafterterminate: ' + str(self.delayafterterminate)) return '\n'.join(s) def _spawn(self,command,args=[]): """This starts the given command in a child process. This does all the fork/exec type of stuff for a pty. This is called by __init__. If args is empty then command will be parsed (split on spaces) and args will be set to parsed arguments. """ # The pid and child_fd of this object get set by this method. # Note that it is difficult for this method to fail. # You cannot detect if the child process cannot start. # So the only way you can tell if the child process started # or not is to try to read from the file descriptor. If you get # EOF immediately then it means that the child is already dead. # That may not necessarily be bad because you may haved spawned a child # that performs some task; creates no stdout output; and then dies. # If command is an int type then it may represent a file descriptor. if type(command) == type(0): raise ExceptionPexpect ('Command is an int type. If this is a file descriptor then maybe you want to use fdpexpect.fdspawn which takes an existing file descriptor instead of a command string.') if type (args) != type([]): raise TypeError ('The argument, args, must be a list.') if args == []: self.args = split_command_line(command) self.command = self.args[0] else: self.args = args[:] # work with a copy self.args.insert (0, command) self.command = command command_with_path = which(self.command) if command_with_path is None: raise ExceptionPexpect ('The command was not found or was not executable: %s.' % self.command) self.command = command_with_path self.args[0] = self.command self.name = '<' + ' '.join (self.args) + '>' assert self.pid is None, 'The pid member should be None.' assert self.command is not None, 'The command member should not be None.' if self.use_native_pty_fork: try: self.pid, self.child_fd = pty.fork() except OSError, e: raise ExceptionPexpect('Error! pty.fork() failed: ' + str(e)) else: # Use internal __fork_pty self.pid, self.child_fd = self.__fork_pty() if self.pid == 0: # Child try: self.child_fd = sys.stdout.fileno() # used by setwinsize() self.setwinsize(24, 80) except: # Some platforms do not like setwinsize (Cygwin). # This will cause problem when running applications that # are very picky about window size. # This is a serious limitation, but not a show stopper. pass # Do not allow child to inherit open file descriptors from parent. max_fd = resource.getrlimit(resource.RLIMIT_NOFILE)[0] for i in range (3, max_fd): try: os.close (i) except OSError: pass # I don't know why this works, but ignoring SIGHUP fixes a # problem when trying to start a Java daemon with sudo # (specifically, Tomcat). signal.signal(signal.SIGHUP, signal.SIG_IGN) if self.cwd is not None: os.chdir(self.cwd) if self.env is None: os.execv(self.command, self.args) else: os.execvpe(self.command, self.args, self.env) if self.cwd is not None: # Restore the original working dir os.chdir(self.ocwd) # Parent self.terminated = False self.closed = False def __fork_pty(self): """This implements a substitute for the forkpty system call. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. Modified 10.06.05 by Geoff Marshall: Implemented __fork_pty() method to resolve the issue with Python's pty.fork() not supporting Solaris, particularly ssh. Based on patch to posixmodule.c authored by Noah Spurrier:: http://mail.python.org/pipermail/python-dev/2003-May/035281.html """ parent_fd, child_fd = os.openpty() if parent_fd < 0 or child_fd < 0: raise ExceptionPexpect, "Error! Could not open pty with os.openpty()." pid = os.fork() if pid < 0: raise ExceptionPexpect, "Error! Failed os.fork()." elif pid == 0: # Child. os.close(parent_fd) self.__pty_make_controlling_tty(child_fd) os.dup2(child_fd, 0) os.dup2(child_fd, 1) os.dup2(child_fd, 2) if child_fd > 2: os.close(child_fd) else: # Parent. os.close(child_fd) return pid, parent_fd def __pty_make_controlling_tty(self, tty_fd): """This makes the pseudo-terminal the controlling tty. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. """ child_name = os.ttyname(tty_fd) # Disconnect from controlling tty if still connected. fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY); if fd >= 0: os.close(fd) os.setsid() # Verify we are disconnected from controlling tty try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY); if fd >= 0: os.close(fd) raise ExceptionPexpect, "Error! We are not disconnected from a controlling tty." except: # Good! We are disconnected from a controlling tty. pass # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR); if fd < 0: raise ExceptionPexpect, "Error! Could not open child pty, " + child_name else: os.close(fd) # Verify we now have a controlling tty. fd = os.open("/dev/tty", os.O_WRONLY) if fd < 0: raise ExceptionPexpect, "Error! Could not open controlling tty, /dev/tty" else: os.close(fd) def fileno (self): # File-like object. """This returns the file descriptor of the pty for the child. """ return self.child_fd def close (self, force=True): # File-like object. """This closes the connection with the child application. Note that calling close() more than once is valid. This emulates standard Python behavior with files. Set force to True if you want to make sure that the child is terminated (SIGKILL is sent if the child ignores SIGHUP and SIGINT). """ if not self.closed: self.flush() os.close (self.child_fd) time.sleep(self.delayafterclose) # Give kernel time to update process status. if self.isalive(): if not self.terminate(force): raise ExceptionPexpect ('close() could not terminate the child using terminate()') self.child_fd = -1 self.closed = True #self.pid = None def flush (self): # File-like object. """This does nothing. It is here to support the interface for a File-like object. """ pass def isatty (self): # File-like object. """This returns True if the file descriptor is open and connected to a tty(-like) device, else False. """ return os.isatty(self.child_fd) def waitnoecho (self, timeout=-1): """This waits until the terminal ECHO flag is set False. This returns True if the echo mode is off. This returns False if the ECHO flag was not set False before the timeout. This can be used to detect when the child is waiting for a password. Usually a child application will turn off echo mode when it is waiting for the user to enter a password. For example, instead of expecting the "password:" prompt you can wait for the child to set ECHO off:: p = pexpect.spawn ('ssh user@example.com') p.waitnoecho() p.sendline(mypassword) If timeout is None then this method to block forever until ECHO flag is False. """ if timeout == -1: timeout = self.timeout if timeout is not None: end_time = time.time() + timeout while True: if not self.getecho(): return True if timeout < 0 and timeout is not None: return False if timeout is not None: timeout = end_time - time.time() time.sleep(0.1) def getecho (self): """This returns the terminal echo mode. This returns True if echo is on or False if echo is off. Child applications that are expecting you to enter a password often set ECHO False. See waitnoecho(). """ attr = termios.tcgetattr(self.child_fd) if attr[3] & termios.ECHO: return True return False def setecho (self, state): """This sets the terminal echo mode on or off. Note that anything the child sent before the echo will be lost, so you should be sure that your input buffer is empty before you call setecho(). For example, the following will work as expected:: p = pexpect.spawn('cat') p.sendline ('1234') # We will see this twice (once from tty echo and again from cat). p.expect (['1234']) p.expect (['1234']) p.setecho(False) # Turn off tty echo p.sendline ('abcd') # We will set this only once (echoed by cat). p.sendline ('wxyz') # We will set this only once (echoed by cat) p.expect (['abcd']) p.expect (['wxyz']) The following WILL NOT WORK because the lines sent before the setecho will be lost:: p = pexpect.spawn('cat') p.sendline ('1234') # We will see this twice (once from tty echo and again from cat). p.setecho(False) # Turn off tty echo p.sendline ('abcd') # We will set this only once (echoed by cat). p.sendline ('wxyz') # We will set this only once (echoed by cat) p.expect (['1234']) p.expect (['1234']) p.expect (['abcd']) p.expect (['wxyz']) """ self.child_fd attr = termios.tcgetattr(self.child_fd) if state: attr[3] = attr[3] | termios.ECHO else: attr[3] = attr[3] & ~termios.ECHO # I tried TCSADRAIN and TCSAFLUSH, but these were inconsistent # and blocked on some platforms. TCSADRAIN is probably ideal if it worked. termios.tcsetattr(self.child_fd, termios.TCSANOW, attr) def read_nonblocking (self, size = 1, timeout = -1): """This reads at most size characters from the child application. It includes a timeout. If the read does not complete within the timeout period then a TIMEOUT exception is raised. If the end of file is read then an EOF exception will be raised. If a log file was set using setlog() then all data will also be written to the log file. If timeout is None then the read may block indefinitely. If timeout is -1 then the self.timeout value is used. If timeout is 0 then the child is polled and if there was no data immediately ready then this will raise a TIMEOUT exception. The timeout refers only to the amount of time to read at least one character. This is not effected by the 'size' parameter, so if you call read_nonblocking(size=100, timeout=30) and only one character is available right away then one character will be returned immediately. It will not wait for 30 seconds for another 99 characters to come in. This is a wrapper around os.read(). It uses select.select() to implement the timeout. """ if self.closed: raise ValueError ('I/O operation on closed file in read_nonblocking().') if timeout == -1: timeout = self.timeout # Note that some systems such as Solaris do not give an EOF when # the child dies. In fact, you can still try to read # from the child_fd -- it will block forever or until TIMEOUT. # For this case, I test isalive() before doing any reading. # If isalive() is false, then I pretend that this is the same as EOF. if not self.isalive(): r,w,e = self.__select([self.child_fd], [], [], 0) # timeout of 0 means "poll" if not r: self.flag_eof = True raise EOF ('End Of File (EOF) in read_nonblocking(). Braindead platform.') elif self.__irix_hack: # This is a hack for Irix. It seems that Irix requires a long delay before checking isalive. # This adds a 2 second delay, but only when the child is terminated. r, w, e = self.__select([self.child_fd], [], [], 2) if not r and not self.isalive(): self.flag_eof = True raise EOF ('End Of File (EOF) in read_nonblocking(). Pokey platform.') r,w,e = self.__select([self.child_fd], [], [], timeout) if not r: if not self.isalive(): # Some platforms, such as Irix, will claim that their processes are alive; # then timeout on the select; and then finally admit that they are not alive. self.flag_eof = True raise EOF ('End of File (EOF) in read_nonblocking(). Very pokey platform.') else: raise TIMEOUT ('Timeout exceeded in read_nonblocking().') if self.child_fd in r: try: s = os.read(self.child_fd, size) except OSError, e: # Linux does this self.flag_eof = True raise EOF ('End Of File (EOF) in read_nonblocking(). Exception style platform.') if s == '': # BSD style self.flag_eof = True raise EOF ('End Of File (EOF) in read_nonblocking(). Empty string style platform.') if self.logfile is not None: self.logfile.write (s) self.logfile.flush() if self.logfile_read is not None: self.logfile_read.write (s) self.logfile_read.flush() return s raise ExceptionPexpect ('Reached an unexpected state in read_nonblocking().') def read (self, size = -1): # File-like object. """This reads at most "size" bytes from the file (less if the read hits EOF before obtaining size bytes). If the size argument is negative or omitted, read all data until EOF is reached. The bytes are returned as a string object. An empty string is returned when EOF is encountered immediately. """ if size == 0: return '' if size < 0: self.expect (self.delimiter) # delimiter default is EOF return self.before # I could have done this more directly by not using expect(), but # I deliberately decided to couple read() to expect() so that # I would catch any bugs early and ensure consistant behavior. # It's a little less efficient, but there is less for me to # worry about if I have to later modify read() or expect(). # Note, it's OK if size==-1 in the regex. That just means it # will never match anything in which case we stop only on EOF. cre = re.compile('.{%d}' % size, re.DOTALL) index = self.expect ([cre, self.delimiter]) # delimiter default is EOF if index == 0: return self.after ### self.before should be ''. Should I assert this? return self.before def readline (self, size = -1): # File-like object. """This reads and returns one entire line. A trailing newline is kept in the string, but may be absent when a file ends with an incomplete line. Note: This readline() looks for a \\r\\n pair even on UNIX because this is what the pseudo tty device returns. So contrary to what you may expect you will receive the newline as \\r\\n. An empty string is returned when EOF is hit immediately. Currently, the size argument is mostly ignored, so this behavior is not standard for a file-like object. If size is 0 then an empty string is returned. """ if size == 0: return '' index = self.expect (['\r\n', self.delimiter]) # delimiter default is EOF if index == 0: return self.before + '\r\n' else: return self.before def __iter__ (self): # File-like object. """This is to support iterators over a file-like object. """ return self def next (self): # File-like object. """This is to support iterators over a file-like object. """ result = self.readline() if result == "": raise StopIteration return result def readlines (self, sizehint = -1): # File-like object. """This reads until EOF using readline() and returns a list containing the lines thus read. The optional "sizehint" argument is ignored. """ lines = [] while True: line = self.readline() if not line: break lines.append(line) return lines def write(self, s): # File-like object. """This is similar to send() except that there is no return value. """ self.send (s) def writelines (self, sequence): # File-like object. """This calls write() for each element in the sequence. The sequence can be any iterable object producing strings, typically a list of strings. This does not add line separators There is no return value. """ for s in sequence: self.write (s) def send(self, s): """This sends a string to the child process. This returns the number of bytes written. If a log file was set then the data is also written to the log. """ time.sleep(self.delaybeforesend) if self.logfile is not None: self.logfile.write (s) self.logfile.flush() if self.logfile_send is not None: self.logfile_send.write (s) self.logfile_send.flush() c = os.write(self.child_fd, s) return c def sendline(self, s=''): """This is like send(), but it adds a line feed (os.linesep). This returns the number of bytes written. """ n = self.send(s) n = n + self.send (os.linesep) return n def sendcontrol(self, char): """This sends a control character to the child such as Ctrl-C or Ctrl-D. For example, to send a Ctrl-G (ASCII 7):: child.sendcontrol('g') See also, sendintr() and sendeof(). """ char = char.lower() a = ord(char) if a>=97 and a<=122: a = a - ord('a') + 1 return self.send (chr(a)) d = {'@':0, '`':0, '[':27, '{':27, '\\':28, '|':28, ']':29, '}': 29, '^':30, '~':30, '_':31, '?':127} if char not in d: return 0 return self.send (chr(d[char])) def sendeof(self): """This sends an EOF to the child. This sends a character which causes the pending parent output buffer to be sent to the waiting child program without waiting for end-of-line. If it is the first character of the line, the read() in the user program returns 0, which signifies end-of-file. This means to work as expected a sendeof() has to be called at the beginning of a line. This method does not send a newline. It is the responsibility of the caller to ensure the eof is sent at the beginning of a line. """ ### Hmmm... how do I send an EOF? ###C if ((m = write(pty, *buf, p - *buf)) < 0) ###C return (errno == EWOULDBLOCK) ? n : -1; #fd = sys.stdin.fileno() #old = termios.tcgetattr(fd) # remember current state #attr = termios.tcgetattr(fd) #attr[3] = attr[3] | termios.ICANON # ICANON must be set to recognize EOF #try: # use try/finally to ensure state gets restored # termios.tcsetattr(fd, termios.TCSADRAIN, attr) # if hasattr(termios, 'CEOF'): # os.write (self.child_fd, '%c' % termios.CEOF) # else: # # Silly platform does not define CEOF so assume CTRL-D # os.write (self.child_fd, '%c' % 4) #finally: # restore state # termios.tcsetattr(fd, termios.TCSADRAIN, old) if hasattr(termios, 'VEOF'): char = termios.tcgetattr(self.child_fd)[6][termios.VEOF] else: # platform does not define VEOF so assume CTRL-D char = chr(4) self.send(char) def sendintr(self): """This sends a SIGINT to the child. It does not require the SIGINT to be the first character on a line. """ if hasattr(termios, 'VINTR'): char = termios.tcgetattr(self.child_fd)[6][termios.VINTR] else: # platform does not define VINTR so assume CTRL-C char = chr(3) self.send (char) def eof (self): """This returns True if the EOF exception was ever raised. """ return self.flag_eof def terminate(self, force=False): """This forces a child process to terminate. It starts nicely with SIGHUP and SIGINT. If "force" is True then moves onto SIGKILL. This returns True if the child was terminated. This returns False if the child could not be terminated. """ if not self.isalive(): return True try: self.kill(signal.SIGHUP) time.sleep(self.delayafterterminate) if not self.isalive(): return True self.kill(signal.SIGCONT) time.sleep(self.delayafterterminate) if not self.isalive(): return True self.kill(signal.SIGINT) time.sleep(self.delayafterterminate) if not self.isalive(): return True if force: self.kill(signal.SIGKILL) time.sleep(self.delayafterterminate) if not self.isalive(): return True else: return False return False except OSError, e: # I think there are kernel timing issues that sometimes cause # this to happen. I think isalive() reports True, but the # process is dead to the kernel. # Make one last attempt to see if the kernel is up to date. time.sleep(self.delayafterterminate) if not self.isalive(): return True else: return False def wait(self): """This waits until the child exits. This is a blocking call. This will not read any data from the child, so this will block forever if the child has unread output and has terminated. In other words, the child may have printed output then called exit(); but, technically, the child is still alive until its output is read. """ if self.isalive(): pid, status = os.waitpid(self.pid, 0) else: raise ExceptionPexpect ('Cannot wait for dead child process.') self.exitstatus = os.WEXITSTATUS(status) if os.WIFEXITED (status): self.status = status self.exitstatus = os.WEXITSTATUS(status) self.signalstatus = None self.terminated = True elif os.WIFSIGNALED (status): self.status = status self.exitstatus = None self.signalstatus = os.WTERMSIG(status) self.terminated = True elif os.WIFSTOPPED (status): raise ExceptionPexpect ('Wait was called for a child process that is stopped. This is not supported. Is some other process attempting job control with our child pid?') return self.exitstatus def isalive(self): """This tests if the child process is running or not. This is non-blocking. If the child was terminated then this will read the exitstatus or signalstatus of the child. This returns True if the child process appears to be running or False if not. It can take literally SECONDS for Solaris to return the right status. """ if self.terminated: return False if self.flag_eof: # This is for Linux, which requires the blocking form of waitpid to get # status of a defunct process. This is super-lame. The flag_eof would have # been set in read_nonblocking(), so this should be safe. waitpid_options = 0 else: waitpid_options = os.WNOHANG try: pid, status = os.waitpid(self.pid, waitpid_options) except OSError, e: # No child processes if e[0] == errno.ECHILD: raise ExceptionPexpect ('isalive() encountered condition where "terminated" is 0, but there was no child process. Did someone else call waitpid() on our process?') else: raise e # I have to do this twice for Solaris. I can't even believe that I figured this out... # If waitpid() returns 0 it means that no child process wishes to # report, and the value of status is undefined. if pid == 0: try: pid, status = os.waitpid(self.pid, waitpid_options) ### os.WNOHANG) # Solaris! except OSError, e: # This should never happen... if e[0] == errno.ECHILD: raise ExceptionPexpect ('isalive() encountered condition that should never happen. There was no child process. Did someone else call waitpid() on our process?') else: raise e # If pid is still 0 after two calls to waitpid() then # the process really is alive. This seems to work on all platforms, except # for Irix which seems to require a blocking call on waitpid or select, so I let read_nonblocking # take care of this situation (unfortunately, this requires waiting through the timeout). if pid == 0: return True if pid == 0: return True if os.WIFEXITED (status): self.status = status self.exitstatus = os.WEXITSTATUS(status) self.signalstatus = None self.terminated = True elif os.WIFSIGNALED (status): self.status = status self.exitstatus = None self.signalstatus = os.WTERMSIG(status) self.terminated = True elif os.WIFSTOPPED (status): raise ExceptionPexpect ('isalive() encountered condition where child process is stopped. This is not supported. Is some other process attempting job control with our child pid?') return False def kill(self, sig): """This sends the given signal to the child application. In keeping with UNIX tradition it has a misleading name. It does not necessarily kill the child unless you send the right signal. """ # Same as os.kill, but the pid is given for you. if self.isalive(): os.kill(self.pid, sig) def compile_pattern_list(self, patterns): """This compiles a pattern-string or a list of pattern-strings. Patterns must be a StringType, EOF, TIMEOUT, SRE_Pattern, or a list of those. Patterns may also be None which results in an empty list (you might do this if waiting for an EOF or TIMEOUT condition without expecting any pattern). This is used by expect() when calling expect_list(). Thus expect() is nothing more than:: cpl = self.compile_pattern_list(pl) return self.expect_list(cpl, timeout) If you are using expect() within a loop it may be more efficient to compile the patterns first and then call expect_list(). This avoid calls in a loop to compile_pattern_list():: cpl = self.compile_pattern_list(my_pattern) while some_condition: ... i = self.expect_list(clp, timeout) ... """ if patterns is None: return [] if type(patterns) is not types.ListType: patterns = [patterns] compile_flags = re.DOTALL # Allow dot to match \n if self.ignorecase: compile_flags = compile_flags | re.IGNORECASE compiled_pattern_list = [] for p in patterns: if type(p) in types.StringTypes: compiled_pattern_list.append(re.compile(p, compile_flags)) elif p is EOF: compiled_pattern_list.append(EOF) elif p is TIMEOUT: compiled_pattern_list.append(TIMEOUT) elif type(p) is type(re.compile('')): compiled_pattern_list.append(p) else: raise TypeError ('Argument must be one of StringTypes, EOF, TIMEOUT, SRE_Pattern, or a list of those type. %s' % str(type(p))) return compiled_pattern_list def expect(self, pattern, timeout = -1, searchwindowsize=None): """This seeks through the stream until a pattern is matched. The pattern is overloaded and may take several types. The pattern can be a StringType, EOF, a compiled re, or a list of any of those types. Strings will be compiled to re types. This returns the index into the pattern list. If the pattern was not a list this returns index 0 on a successful match. This may raise exceptions for EOF or TIMEOUT. To avoid the EOF or TIMEOUT exceptions add EOF or TIMEOUT to the pattern list. That will cause expect to match an EOF or TIMEOUT condition instead of raising an exception. If you pass a list of patterns and more than one matches, the first match in the stream is chosen. If more than one pattern matches at that point, the leftmost in the pattern list is chosen. For example:: # the input is 'foobar' index = p.expect (['bar', 'foo', 'foobar']) # returns 1 ('foo') even though 'foobar' is a "better" match Please note, however, that buffering can affect this behavior, since input arrives in unpredictable chunks. For example:: # the input is 'foobar' index = p.expect (['foobar', 'foo']) # returns 0 ('foobar') if all input is available at once, # but returs 1 ('foo') if parts of the final 'bar' arrive late After a match is found the instance attributes 'before', 'after' and 'match' will be set. You can see all the data read before the match in 'before'. You can see the data that was matched in 'after'. The re.MatchObject used in the re match will be in 'match'. If an error occurred then 'before' will be set to all the data read so far and 'after' and 'match' will be None. If timeout is -1 then timeout will be set to the self.timeout value. A list entry may be EOF or TIMEOUT instead of a string. This will catch these exceptions and return the index of the list entry instead of raising the exception. The attribute 'after' will be set to the exception type. The attribute 'match' will be None. This allows you to write code like this:: index = p.expect (['good', 'bad', pexpect.EOF, pexpect.TIMEOUT]) if index == 0: do_something() elif index == 1: do_something_else() elif index == 2: do_some_other_thing() elif index == 3: do_something_completely_different() instead of code like this:: try: index = p.expect (['good', 'bad']) if index == 0: do_something() elif index == 1: do_something_else() except EOF: do_some_other_thing() except TIMEOUT: do_something_completely_different() These two forms are equivalent. It all depends on what you want. You can also just expect the EOF if you are waiting for all output of a child to finish. For example:: p = pexpect.spawn('/bin/ls') p.expect (pexpect.EOF) print p.before If you are trying to optimize for speed then see expect_list(). """ compiled_pattern_list = self.compile_pattern_list(pattern) return self.expect_list(compiled_pattern_list, timeout, searchwindowsize) def expect_list(self, pattern_list, timeout = -1, searchwindowsize = -1): """This takes a list of compiled regular expressions and returns the index into the pattern_list that matched the child output. The list may also contain EOF or TIMEOUT (which are not compiled regular expressions). This method is similar to the expect() method except that expect_list() does not recompile the pattern list on every call. This may help if you are trying to optimize for speed, otherwise just use the expect() method. This is called by expect(). If timeout==-1 then the self.timeout value is used. If searchwindowsize==-1 then the self.searchwindowsize value is used. """ return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize) def expect_exact(self, pattern_list, timeout = -1, searchwindowsize = -1): """This is similar to expect(), but uses plain string matching instead of compiled regular expressions in 'pattern_list'. The 'pattern_list' may be a string; a list or other sequence of strings; or TIMEOUT and EOF. This call might be faster than expect() for two reasons: string searching is faster than RE matching and it is possible to limit the search to just the end of the input buffer. This method is also useful when you don't want to have to worry about escaping regular expression characters that you want to match.""" if type(pattern_list) in types.StringTypes or pattern_list in (TIMEOUT, EOF): pattern_list = [pattern_list] return self.expect_loop(searcher_string(pattern_list), timeout, searchwindowsize) def expect_loop(self, searcher, timeout = -1, searchwindowsize = -1): """This is the common loop used inside expect. The 'searcher' should be an instance of searcher_re or searcher_string, which describes how and what to search for in the input. See expect() for other arguments, return value and exceptions. """ self.searcher = searcher if timeout == -1: timeout = self.timeout if timeout is not None: end_time = time.time() + timeout if searchwindowsize == -1: searchwindowsize = self.searchwindowsize try: incoming = self.buffer freshlen = len(incoming) while True: # Keep reading until exception or return. index = searcher.search(incoming, freshlen, searchwindowsize) if index >= 0: self.buffer = incoming[searcher.end : ] self.before = incoming[ : searcher.start] self.after = incoming[searcher.start : searcher.end] self.match = searcher.match self.match_index = index return self.match_index # No match at this point if timeout < 0 and timeout is not None: raise TIMEOUT ('Timeout exceeded in expect_any().') # Still have time left, so read more data c = self.read_nonblocking (self.maxread, timeout) freshlen = len(c) time.sleep (0.0001) incoming = incoming + c if timeout is not None: timeout = end_time - time.time() except EOF, e: self.buffer = '' self.before = incoming self.after = EOF index = searcher.eof_index if index >= 0: self.match = EOF self.match_index = index return self.match_index else: self.match = None self.match_index = None raise EOF (str(e) + '\n' + str(self)) except TIMEOUT, e: self.buffer = incoming self.before = incoming self.after = TIMEOUT index = searcher.timeout_index if index >= 0: self.match = TIMEOUT self.match_index = index return self.match_index else: self.match = None self.match_index = None raise TIMEOUT (str(e) + '\n' + str(self)) except: self.before = incoming self.after = None self.match = None self.match_index = None raise def getwinsize(self): """This returns the terminal window size of the child tty. The return value is a tuple of (rows, cols). """ TIOCGWINSZ = getattr(termios, 'TIOCGWINSZ', 1074295912L) s = struct.pack('HHHH', 0, 0, 0, 0) x = fcntl.ioctl(self.fileno(), TIOCGWINSZ, s) return struct.unpack('HHHH', x)[0:2] def setwinsize(self, r, c): """This sets the terminal window size of the child tty. This will cause a SIGWINCH signal to be sent to the child. This does not change the physical window size. It changes the size reported to TTY-aware applications like vi or curses -- applications that respond to the SIGWINCH signal. """ # Check for buggy platforms. Some Python versions on some platforms # (notably OSF1 Alpha and RedHat 7.1) truncate the value for # termios.TIOCSWINSZ. It is not clear why this happens. # These platforms don't seem to handle the signed int very well; # yet other platforms like OpenBSD have a large negative value for # TIOCSWINSZ and they don't have a truncate problem. # Newer versions of Linux have totally different values for TIOCSWINSZ. # Note that this fix is a hack. TIOCSWINSZ = getattr(termios, 'TIOCSWINSZ', -2146929561) if TIOCSWINSZ == 2148037735L: # L is not required in Python >= 2.2. TIOCSWINSZ = -2146929561 # Same bits, but with sign. # Note, assume ws_xpixel and ws_ypixel are zero. s = struct.pack('HHHH', r, c, 0, 0) fcntl.ioctl(self.fileno(), TIOCSWINSZ, s) def interact(self, escape_character = chr(29), input_filter = None, output_filter = None): """This gives control of the child process to the interactive user (the human at the keyboard). Keystrokes are sent to the child process, and the stdout and stderr output of the child process is printed. This simply echos the child stdout and child stderr to the real stdout and it echos the real stdin to the child stdin. When the user types the escape_character this method will stop. The default for escape_character is ^]. This should not be confused with ASCII 27 -- the ESC character. ASCII 29 was chosen for historical merit because this is the character used by 'telnet' as the escape character. The escape_character will not be sent to the child process. You may pass in optional input and output filter functions. These functions should take a string and return a string. The output_filter will be passed all the output from the child process. The input_filter will be passed all the keyboard input from the user. The input_filter is run BEFORE the check for the escape_character. Note that if you change the window size of the parent the SIGWINCH signal will not be passed through to the child. If you want the child window size to change when the parent's window size changes then do something like the following example:: import pexpect, struct, fcntl, termios, signal, sys def sigwinch_passthrough (sig, data): s = struct.pack("HHHH", 0, 0, 0, 0) a = struct.unpack('hhhh', fcntl.ioctl(sys.stdout.fileno(), termios.TIOCGWINSZ , s)) global p p.setwinsize(a[0],a[1]) p = pexpect.spawn('/bin/bash') # Note this is global and used in sigwinch_passthrough. signal.signal(signal.SIGWINCH, sigwinch_passthrough) p.interact() """ # Flush the buffer. self.stdout.write (self.buffer) self.stdout.flush() self.buffer = '' mode = tty.tcgetattr(self.STDIN_FILENO) tty.setraw(self.STDIN_FILENO) try: self.__interact_copy(escape_character, input_filter, output_filter) finally: tty.tcsetattr(self.STDIN_FILENO, tty.TCSAFLUSH, mode) def __interact_writen(self, fd, data): """This is used by the interact() method. """ while data != '' and self.isalive(): n = os.write(fd, data) data = data[n:] def __interact_read(self, fd): """This is used by the interact() method. """ return os.read(fd, 1000) def __interact_copy(self, escape_character = None, input_filter = None, output_filter = None): """This is used by the interact() method. """ while self.isalive(): r,w,e = self.__select([self.child_fd, self.STDIN_FILENO], [], []) if self.child_fd in r: try: data = self.__interact_read(self.child_fd) except OSError, e: break if output_filter: data = output_filter(data) if self.logfile is not None: self.logfile.write (data) self.logfile.flush() os.write(self.STDOUT_FILENO, data) if self.STDIN_FILENO in r: data = self.__interact_read(self.STDIN_FILENO) if input_filter: data = input_filter(data) i = data.rfind(escape_character) if i != -1: data = data[:i] self.__interact_writen(self.child_fd, data) break self.__interact_writen(self.child_fd, data) def __select (self, iwtd, owtd, ewtd, timeout=None): """This is a wrapper around select.select() that ignores signals. If select.select raises a select.error exception and errno is an EINTR error then it is ignored. Mainly this is used to ignore sigwinch (terminal resize). """ # if select() is interrupted by a signal (errno==EINTR) then # we loop back and enter the select() again. if timeout is not None: end_time = time.time() + timeout while True: try: return select.select (iwtd, owtd, ewtd, timeout) except select.error, e: if e[0] == errno.EINTR: # if we loop back we have to subtract the amount of time we already waited. if timeout is not None: timeout = end_time - time.time() if timeout < 0: return ([],[],[]) else: # something else caused the select.error, so this really is an exception raise ############################################################################## # The following methods are no longer supported or allowed. def setmaxread (self, maxread): """This method is no longer supported or allowed. I don't like getters and setters without a good reason. """ raise ExceptionPexpect ('This method is no longer supported or allowed. Just assign a value to the maxread member variable.') def setlog (self, fileobject): """This method is no longer supported or allowed. """ raise ExceptionPexpect ('This method is no longer supported or allowed. Just assign a value to the logfile member variable.') ############################################################################## # End of spawn_unix class ############################################################################## class spawn_windows (spawn_unix, object): """This is the main class interface for Pexpect. Use this class to start and control child applications. """ def __init__(self, command, args=[], timeout=30, maxread=60000, searchwindowsize=None, logfile=None, cwd=None, env=None, codepage=None): self.stdin = sys.stdin self.stdout = sys.stdout self.stderr = sys.stderr self.searcher = None self.ignorecase = False self.before = None self.after = None self.match = None self.match_index = None self.terminated = True self.exitstatus = None self.signalstatus = None self.status = None # status returned by os.waitpid self.flag_eof = False self.pid = None self.child_fd = -1 # initially closed self.timeout = timeout self.delimiter = EOF self.logfile = logfile self.logfile_read = None # input from child (read_nonblocking) self.logfile_send = None # output to send (send, sendline) self.maxread = maxread # max bytes to read at one time into buffer self.buffer = '' # This is the read buffer. See maxread. self.searchwindowsize = searchwindowsize # Anything before searchwindowsize point is preserved, but not searched. self.delaybeforesend = 0.05 # Sets sleep time used just before sending data to child. Time in seconds. self.delayafterclose = 0.1 # Sets delay in close() method to allow kernel time to update process status. Time in seconds. self.delayafterterminate = 0.1 # Sets delay in terminate() method to allow kernel time to update process status. Time in seconds. self.softspace = False # File-like object. self.name = '<' + repr(self) + '>' # File-like object. self.encoding = None # File-like object. self.closed = True # File-like object. self.ocwd = os.getcwdu() self.cwd = cwd self.env = env self.codepage = codepage # allow dummy instances for subclasses that may not use command or args. if command is None: self.command = None self.args = None self.name = '' else: self._spawn (command, args) def __del__(self): """This makes sure that no system resources are left open. Python only garbage collects Python objects, not the child console.""" try: self.wtty.terminate_child() except: pass def _spawn(self,command,args=[]): """This starts the given command in a child process. This does all the fork/exec type of stuff for a pty. This is called by __init__. If args is empty then command will be parsed (split on spaces) and args will be set to parsed arguments. """ # The pid and child_fd of this object get set by this method. # Note that it is difficult for this method to fail. # You cannot detect if the child process cannot start. # So the only way you can tell if the child process started # or not is to try to read from the file descriptor. If you get # EOF immediately then it means that the child is already dead. # That may not necessarily be bad because you may haved spawned a child # that performs some task; creates no stdout output; and then dies. # If command is an int type then it may represent a file descriptor. if type(command) == type(0): raise ExceptionPexpect ('Command is an int type. If this is a file descriptor then maybe you want to use fdpexpect.fdspawn which takes an existing file descriptor instead of a command string.') if type (args) != type([]): raise TypeError ('The argument, args, must be a list.') if args == []: #Momentairly broken - path '\' characters being misinterpreted #self.args = split_command_line(command) self.args = [command] self.command = self.args[0] else: self.args = args[:] # work with a copy self.args.insert (0, command) self.command = command command_with_path = which(self.command) if command_with_path is None: raise ExceptionPexpect ('The command was not found or was not executable: %s.' % self.command) self.command = command_with_path self.args[0] = self.command self.name = '<' + ' '.join (self.args) + '>' #assert self.pid is None, 'The pid member should be None.' #assert self.command is not None, 'The command member should not be None.' self.wtty = Wtty(timeout=self.timeout, codepage=self.codepage) if self.cwd is not None: os.chdir(self.cwd) self.child_fd = self.wtty.spawn(self.command, self.args, self.env) if self.cwd is not None: # Restore the original working dir os.chdir(self.ocwd) self.terminated = False self.closed = False self.pid = self.wtty.pid def fileno (self): # File-like object. """There is no child fd.""" return 0 def close(self, force=True): # File-like object. """ Closes the child console.""" self.closed = self.terminate(force) if not self.closed: raise ExceptionPexpect ('close() could not terminate the child using terminate()') self.closed = True def isatty(self): # File-like object. """The child is always created with a console.""" return True def getecho (self): """This returns the terminal echo mode. This returns True if echo is on or False if echo is off. Child applications that are expecting you to enter a password often set ECHO False. See waitnoecho().""" return self.wtty.getecho() def setecho (self, state): """This sets the terminal echo mode on or off.""" self.wtty.setecho(state) def read_nonblocking (self, size = 1, timeout = -1): """This reads at most size characters from the child application. It includes a timeout. If the read does not complete within the timeout period then a TIMEOUT exception is raised. If the end of file is read then an EOF exception will be raised. If a log file was set using setlog() then all data will also be written to the log file. If timeout is None then the read may block indefinitely. If timeout is -1 then the self.timeout value is used. If timeout is 0 then the child is polled and if there was no data immediately ready then this will raise a TIMEOUT exception. The timeout refers only to the amount of time to read at least one character. This is not effected by the 'size' parameter, so if you call read_nonblocking(size=100, timeout=30) and only one character is available right away then one character will be returned immediately. It will not wait for 30 seconds for another 99 characters to come in. This is a wrapper around Wtty.read(). """ if self.closed: raise ValueError ('I/O operation on closed file in read_nonblocking().') if timeout == -1: timeout = self.timeout s = self.wtty.read_nonblocking(timeout, size) if s == '': if not self.wtty.isalive(): self.flag_eof = True raise EOF('End Of File (EOF) in read_nonblocking().') if timeout is None: # Do not raise TIMEOUT because we might be waiting for EOF # sleep to keep CPU utilization down time.sleep(.05) else: raise TIMEOUT ('Timeout exceeded in read_nonblocking().') else: if self.logfile is not None: self.logfile.write (s) self.logfile.flush() if self.logfile_read is not None: self.logfile_read.write (s) self.logfile_read.flush() return s def send(self, s): """This sends a string to the child process. This returns the number of bytes written. If a log file was set then the data is also written to the log. """ (self.delaybeforesend) if self.logfile is not None: self.logfile.write (s) self.logfile.flush() if self.logfile_send is not None: self.logfile_send.write (s) self.logfile_send.flush() c = self.wtty.write(s) return c ### UNIMPLEMENTED ### def sendcontrol(self, char): raise ExceptionPexpect ('sendcontrol() is not supported on windows') ### UNIMPLEMENTED ### ### Parent buffer does not wait for endline by default. def sendeof(self): raise ExceptionPexpect ('sendeof() is not supported on windows') def sendintr(self): """This sends a SIGINT to the child. It does not require the SIGINT to be the first character on a line. """ self.wtty.sendintr() def terminate(self, force=False): """Terminate the child. Force not used. """ if not self.isalive(): return True self.wtty.terminate_child() time.sleep(self.delayafterterminate) if not self.isalive(): return True return False def kill(self, sig): """Sig == sigint for ctrl-c otherwise the child is terminated.""" if sig == signal.SIGINT: self.wtty.sendintr() else: self.wtty.terminate_child() def wait(self): """This waits until the child exits. This is a blocking call. This will not read any data from the child, so this will block forever if the child has unread output and has terminated. In other words, the child may have printed output then called exit(); but, technically, the child is still alive until its output is read.""" if not self.isalive(): raise ExceptionPexpect ('Cannot wait for dead child process.') # We can't use os.waitpid under Windows because of 'permission denied' # exception? Perhaps if not running as admin (or UAC enabled under # Vista/7). Simply loop and wait for child to exit. while self.isalive(): time.sleep(.05) # Keep CPU utilization down return self.exitstatus def isalive(self): """Determines if the child is still alive.""" if self.terminated: return False if self.wtty.isalive(): return True else: self.exitstatus = GetExitCodeProcess(self.wtty.getchild()) self.status = (self.pid, self.exitstatus << 8) # left-shift exit status by 8 bits like os.waitpid self.terminated = True return False def getwinsize(self): """This returns the terminal window size of the child tty. The return value is a tuple of (rows, cols). """ return self.wtty.getwinsize() def setwinsize(self, r, c): """Set the size of the child screen buffer. """ self.wtty.setwinsize(r, c) ### Prototype changed def interact(self): """Makes the child console visible for interaction""" self.wtty.interact() ### Prototype changed def stop_interact(self): """Hides the child console from the user.""" self.wtty.stop_interact() ############################################################################## # End of spawn_windows class ############################################################################## class Wtty: def __init__(self, timeout=30, codepage=None): self.__buffer = StringIO() self.__bufferY = 0 self.__currentReadCo = PyCOORDType(0, 0) self.__consSize = [80, 16000] self.__parentPid = 0 self.__oproc = 0 self.conpid = 0 self.__otid = 0 self.__switch = True self.__childProcess = None self.codepage = codepage self.console = False self.lastRead = 0 self.lastReadData = "" self.pid = None self.processList = [] # We need a timeout for connecting to the child process self.timeout = timeout self.totalRead = 0 def spawn(self, command, args=[], env=None): """Spawns spawner.py with correct arguments.""" ts = time.time() self.startChild(args, env) while True: msg = PeekMessage(0, 0, 0, PM_REMOVE) childPid = msg[1][2] # Sometimes GetMessage returns a bogus PID, so keep calling it # until we can successfully connect to the child or timeout is # reached if childPid: try: self.__childProcess = win32api.OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION, False, childPid) except pywintypes.error, e: pass else: self.pid = childPid break if time.time() > ts + self.timeout: log('Timeout exceeded in Wtty.spawn().') break time.sleep(.05) if not self.__childProcess: raise ExceptionPexpect ('The process ' + args[0] + ' could not be started.') winHandle = int(GetConsoleWindow()) self.__switch = True if winHandle != 0: self.__parentPid = GetWindowThreadProcessId(winHandle)[1] # Do we have a console attached? Do not rely on winHandle, because # it will also be non-zero if we didn't have a console, and then # spawned a child process! Using sys.stdout.isatty() seems safe self.console = hasattr(sys.stdout, 'isatty') and sys.stdout.isatty() # If the original process had a console, record a list of attached # processes so we can check if we need to reattach/reallocate the # console later self.processList = GetConsoleProcessList() else: self.switchTo(False) self.__switch = False def startChild(self, args, env): si = GetStartupInfo() si.dwFlags = STARTF_USESHOWWINDOW si.wShowWindow = SW_HIDE # Determine the directory of wexpect.py or, if we are running 'frozen' # (eg. py2exe deployment), of the packed executable dirname = os.path.dirname(sys.executable if getattr(sys, 'frozen', False) else os.path.abspath(__file__)) if getattr(sys, 'frozen', False): logdir = appname else: logdir = dirname logdir = os.path.basename(logdir) spath = [dirname] pyargs = ['-c'] if getattr(sys, 'frozen', False): # If we are running 'frozen', add library.zip and lib\library.zip # to sys.path # py2exe: Needs appropriate 'zipfile' option in setup script and # 'bundle_files' 3 spath.append(os.path.join(dirname, 'library.zip')) spath.append(os.path.join(dirname, 'library.zip', appname)) if os.path.isdir(os.path.join(dirname, 'lib')): dirname = os.path.join(dirname, 'lib') spath.append(os.path.join(dirname, 'library.zip')) spath.append(os.path.join(dirname, 'library.zip', appname)) pyargs.insert(0, '-S') # skip 'import site' pid = GetCurrentProcessId() tid = win32api.GetCurrentThreadId() cp = self.codepage or windll.kernel32.GetACP() # If we are running 'frozen', expect python.exe in the same directory # as the packed executable. # py2exe: The python executable can be included via setup script by # adding it to 'data_files' commandLine = '"%s" %s "%s"' % (os.path.join(dirname, 'python.exe') if getattr(sys, 'frozen', False) else os.path.join(os.path.dirname(sys.executable), 'python.exe'), ' '.join(pyargs), "import sys; sys.path = %s + sys.path;" "args = %s; import wexpect;" "wexpect.ConsoleReader(wexpect.join_args(args), %i, %i, cp=%i, logdir=%r)" % (("%r" % spath).replace('"', r'\"'), ("%r" % args).replace('"', r'\"'), pid, tid, cp, logdir)) log(commandLine) self.__oproc, _, self.conpid, self.__otid = CreateProcess(None, commandLine, None, None, False, CREATE_NEW_CONSOLE, env, None, si) def switchTo(self, attached=True): """Releases from the current console and attatches to the childs.""" if not self.__switch: return if attached: FreeConsole() AttachConsole(self.conpid) self.__consin = GetStdHandle(STD_INPUT_HANDLE) self.__consout = self.getConsoleOut() def switchBack(self): """Releases from the current console and attaches to the parents.""" if not self.__switch: return if self.console: # If we originally had a console, re-attach it (or allocate a new one) # If we didn't have a console to begin with, there's no need to # re-attach/allocate FreeConsole() if len(self.processList) > 1: # Our original console is still present, re-attach AttachConsole(self.__parentPid) else: # Our original console has been free'd, allocate a new one AllocConsole() self.__consin = None self.__consout = None def getConsoleOut(self): consout = win32file.CreateFile('CONOUT$', GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, None, OPEN_EXISTING, 0, 0) return PyConsoleScreenBufferType(consout) def getchild(self): """Returns a handle to the child process.""" return self.__childProcess def terminate_child(self): """Terminate the child process.""" win32api.TerminateProcess(self.__childProcess, 1) def createKeyEvent(self, char): """Creates a single key record corrosponding to the ascii character char.""" evt = PyINPUT_RECORDType(KEY_EVENT) evt.KeyDown = True evt.Char = char evt.RepeatCount = 1 return evt def write(self, s): """Writes input into the child consoles input buffer.""" if s[-1] == '\n': s = s[:-1] if len(s) == 0: return 0 records = [self.createKeyEvent(c) for c in unicode(s)] self.switchTo() try: consinfo = self.__consout.GetConsoleScreenBufferInfo() startCo = consinfo['CursorPosition'] wrote = self.__consin.WriteConsoleInput(records) while self.__consin.PeekConsoleInput(8) != (): time.sleep(0) self.__consout.FillConsoleOutputCharacter(screenbufferfillchar, len(s), startCo) except Exception, e: log(e, '_exceptions') self.switchBack() raise self.switchBack() return wrote def getPoint(self, offset): """Converts an offset to a point represented as a tuple.""" x = offset % self.__consSize[0] y = offset / self.__consSize[0] return (x, y) def getOffset(self, x, y): """Converts a tuple-point to an offset.""" return x + y * self.__consSize[0] def readConsole(self, startCo, endCo): """Reads the console area from startCo to endCo and returns it as a string.""" buff = [] self.lastRead = 0 startCo = PyCOORDType(startCo.X, startCo.Y) endX = endCo.X endY = endCo.Y while True: startOff = self.getOffset(startCo.X, startCo.Y) endOff = self.getOffset(endX, endY) readlen = endOff - startOff if readlen > 4000: readlen = 4000 endPoint = self.getPoint(startOff + 4000) else: endPoint = self.getPoint(endOff) s = self.__consout.ReadConsoleOutputCharacter(readlen, startCo) ln = len(s) self.lastRead += ln self.totalRead += ln buff.append(s) startCo.X, startCo.Y = endPoint[0], endPoint[1] if readlen <= 0 or (startCo.X >= endX and startCo.Y >= endY): break return ''.join(buff) def parseData(self, s): """Ensures that special characters are interpretted as newlines or blanks, depending on if there written over characters or screen-buffer-fill characters.""" strlist = [] for i, c in enumerate(s): if c == screenbufferfillchar: if (self.totalRead - self.lastRead + i + 1) % 80 == 0: strlist.append('\r\n') else: strlist.append(c) s = ''.join(strlist) try: return s.encode(str(self.codepage), 'replace') except LookupError: return s.encode(getattr(sys.stdout, 'encoding', None) or sys.getdefaultencoding(), 'replace') def readConsoleToCursor(self): """Reads from the current read position to the current cursor position and inserts the string into self.__buffer.""" if not self.__consout: return "" consinfo = self.__consout.GetConsoleScreenBufferInfo() cursorPos = consinfo['CursorPosition'] #log('=' * 80) #log('cursor: %r, current: %r' % (cursorPos, self.__currentReadCo)) isSameX = cursorPos.X == self.__currentReadCo.X isSameY = cursorPos.Y == self.__currentReadCo.Y isSamePos = isSameX and isSameY #log('isSameY: %r' % isSameY) #log('isSamePos: %r' % isSamePos) if isSameY or not self.lastReadData.endswith('\r\n'): # Read the current slice again self.totalRead -= self.lastRead self.__currentReadCo.X = 0 self.__currentReadCo.Y = self.__bufferY #log('cursor: %r, current: %r' % (cursorPos, self.__currentReadCo)) raw = self.readConsole(self.__currentReadCo, cursorPos) rawlist = [] while raw: rawlist.append(raw[:self.__consSize[0]]) raw = raw[self.__consSize[0]:] raw = ''.join(rawlist) s = self.parseData(raw) for i, line in enumerate(reversed(rawlist)): if line.endswith(screenbufferfillchar): # Record the Y offset where the most recent line break was detected self.__bufferY += len(rawlist) - i break #log('lastReadData: %r' % self.lastReadData) #log('s: %r' % s) #isSameData = False if isSamePos and self.lastReadData == s: #isSameData = True s = '' #log('isSameData: %r' % isSameData) #log('s: %r' % s) if s: lastReadData = self.lastReadData pos = self.getOffset(self.__currentReadCo.X, self.__currentReadCo.Y) self.lastReadData = s if isSameY or not lastReadData.endswith('\r\n'): # Detect changed lines self.__buffer.seek(pos) buf = self.__buffer.read() #log('buf: %r' % buf) #log('raw: %r' % raw) if raw.startswith(buf): # Line has grown rawslice = raw[len(buf):] # Update last read bytes so line breaks can be detected in parseData lastRead = self.lastRead self.lastRead = len(rawslice) s = self.parseData(rawslice) self.lastRead = lastRead else: # Cursor has been repositioned s = '\r' + s #log('s: %r' % s) self.__buffer.seek(pos) self.__buffer.truncate() self.__buffer.write(raw) self.__currentReadCo.X = cursorPos.X self.__currentReadCo.Y = cursorPos.Y return s def read_nonblocking(self, timeout, size): """Reads data from the console if available, otherwise waits timeout seconds, and writes the string 'None' to the pipe if no data is available after that time.""" self.switchTo() try: while True: #Wait for child process to be paused if self.__currentReadCo.Y > maxconsoleY: time.sleep(.2) start = time.clock() s = self.readConsoleToCursor() if self.__currentReadCo.Y > maxconsoleY: self.refreshConsole() if len(s) != 0: self.switchBack() return s if not self.isalive() or timeout <= 0: self.switchBack() return '' time.sleep(0.001) end = time.clock() timeout -= end - start except Exception, e: log(e, '_exceptions') log('End Of File (EOF) in Wtty.read_nonblocking().') self.switchBack() raise EOF('End Of File (EOF) in Wtty.read_nonblocking().') def refreshConsole(self): """Clears the console after pausing the child and reading all the data currently on the console.""" orig = PyCOORDType(0, 0) self.__consout.SetConsoleCursorPosition(orig) self.__currentReadCo.X = 0 self.__currentReadCo.Y = 0 writelen = self.__consSize[0] * self.__consSize[1] self.__consout.FillConsoleOutputCharacter(screenbufferfillchar, writelen, orig) self.__bufferY = 0 self.__buffer.truncate(0) #consinfo = self.__consout.GetConsoleScreenBufferInfo() #cursorPos = consinfo['CursorPosition'] #log('refreshConsole: cursorPos %s' % cursorPos) def setecho(self, state): """Sets the echo mode of the child console.""" self.switchTo() try: mode = self.__consin.GetConsoleMode() if state: mode |= 0x0004 else: mode &= ~0x0004 self.__consin.SetConsoleMode(mode) except: self.switchBack() raise self.switchBack() def getecho(self): """Returns the echo mode of the child console.""" self.switchTo() try: mode = self.__consin.GetConsoleMode() ret = (mode & 0x0004) > 0 self.switchBack() except: self.switchBack() raise return ret def getwinsize(self): """Returns the size of the child console as a tuple of (rows, columns).""" self.switchTo() try: size = self.__consout.GetConsoleScreenBufferInfo()['Size'] self.switchBack() except: self.switchBack() raise return (size.Y, size.X) def setwinsize(self, r, c): """Sets the child console screen buffer size to (r, c).""" self.switchTo() try: self.__consout.SetConsoleScreenBufferSize(PyCOORDType(c, r)) except: self.switchBack() raise self.switchBack() def interact(self): """Displays the child console for interaction.""" self.switchTo() try: ShowWindow(GetConsoleWindow(), SW_SHOW) except: self.switchBack() raise self.switchBack() def stop_interact(self): """Hides the child console.""" self.switchTo() try: ShowWindow(GetConsoleWindow(), SW_HIDE) except: self.switchBack() raise self.switchBack() def isalive(self): """True if the child is still alive, false otherwise""" return GetExitCodeProcess(self.__childProcess) == STILL_ACTIVE ###Broken### def sendintr(self): """Sends the sigint signal to the child.""" raise ExceptionPexpect ('sendintr() is currently not supported') self.switchTo() try: time.sleep(.15) win32api.SetConsoleCtrlHandler(None, True) time.sleep(.15) win32api.GenerateConsoleCtrlEvent(0, 0) time.sleep(.25) except: self.switchBack() raise self.switchBack() class ConsoleReader: def __init__(self, path, pid, tid, env = None, cp=None, logdir=None): self.logdir = logdir log('=' * 80, 'consolereader', logdir) log("OEM code page: %s" % windll.kernel32.GetOEMCP(), 'consolereader', logdir) log("ANSI code page: %s" % windll.kernel32.GetACP(), 'consolereader', logdir) log("Console output code page: %s" % windll.kernel32.GetConsoleOutputCP(), 'consolereader', logdir) if cp: log("Setting console output code page to %s" % cp, 'consolereader', logdir) try: SetConsoleOutputCP(cp) except Exception, e: log(e, 'consolereader_exceptions', logdir) else: log("Console output code page: %s" % windll.kernel32.GetConsoleOutputCP(), 'consolereader', logdir) log('Spawning %s' % path, 'consolereader', logdir) try: try: consout = self.getConsoleOut() self.initConsole(consout) si = GetStartupInfo() self.__childProcess, _, childPid, self.__tid = CreateProcess(None, path, None, None, False, 0, None, None, si) except Exception, e: log(e, 'consolereader_exceptions', logdir) time.sleep(.1) win32api.PostThreadMessage(int(tid), WM_USER, 0, 0) sys.exit() time.sleep(.1) win32api.PostThreadMessage(int(tid), WM_USER, childPid, 0) parent = win32api.OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION , 0, int(pid)) paused = False while True: consinfo = consout.GetConsoleScreenBufferInfo() cursorPos = consinfo['CursorPosition'] if GetExitCodeProcess(parent) != STILL_ACTIVE or GetExitCodeProcess(self.__childProcess) != STILL_ACTIVE: time.sleep(.1) try: TerminateProcess(self.__childProcess, 0) except pywintypes.error, e: # 'Access denied' happens always? Perhaps if not # running as admin (or UAC enabled under Vista/7). # Don't log. Child process will exit regardless when # calling sys.exit if e.args[0] != winerror.ERROR_ACCESS_DENIED: log(e, 'consolereader_exceptions', logdir) sys.exit() if cursorPos.Y > maxconsoleY and not paused: #log('ConsoleReader.__init__: cursorPos %s' #% cursorPos, 'consolereader', logdir) #log('suspendThread', 'consolereader', logdir) self.suspendThread() paused = True if cursorPos.Y <= maxconsoleY and paused: #log('ConsoleReader.__init__: cursorPos %s' #% cursorPos, 'consolereader', logdir) #log('resumeThread', 'consolereader', logdir) self.resumeThread() paused = False time.sleep(.1) except Exception, e: log(e, 'consolereader_exceptions', logdir) time.sleep(.1) def handler(self, sig): log(sig, 'consolereader', logdir) return False def getConsoleOut(self): consout = win32file.CreateFile('CONOUT$', GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, None, OPEN_EXISTING, 0, 0) return PyConsoleScreenBufferType(consout) def initConsole(self, consout): rect = PySMALL_RECTType(0, 0, 79, 24) consout.SetConsoleWindowInfo(True, rect) size = PyCOORDType(80, 16000) consout.SetConsoleScreenBufferSize(size) pos = PyCOORDType(0, 0) consout.FillConsoleOutputCharacter(screenbufferfillchar, size.X * size.Y, pos) def suspendThread(self): """Pauses the main thread of the child process.""" handle = windll.kernel32.OpenThread(THREAD_SUSPEND_RESUME, 0, self.__tid) SuspendThread(handle) def resumeThread(self): """Un-pauses the main thread of the child process.""" handle = windll.kernel32.OpenThread(THREAD_SUSPEND_RESUME, 0, self.__tid) ResumeThread(handle) class searcher_string (object): """This is a plain string search helper for the spawn.expect_any() method. Attributes: eof_index - index of EOF, or -1 timeout_index - index of TIMEOUT, or -1 After a successful match by the search() method the following attributes are available: start - index into the buffer, first byte of match end - index into the buffer, first byte after match match - the matching string itself """ def __init__(self, strings): """This creates an instance of searcher_string. This argument 'strings' may be a list; a sequence of strings; or the EOF or TIMEOUT types. """ self.eof_index = -1 self.timeout_index = -1 self._strings = [] for n, s in zip(range(len(strings)), strings): if s is EOF: self.eof_index = n continue if s is TIMEOUT: self.timeout_index = n continue self._strings.append((n, s)) def __str__(self): """This returns a human-readable string that represents the state of the object.""" ss = [ (ns[0],' %d: "%s"' % ns) for ns in self._strings ] ss.append((-1,'searcher_string:')) if self.eof_index >= 0: ss.append ((self.eof_index,' %d: EOF' % self.eof_index)) if self.timeout_index >= 0: ss.append ((self.timeout_index,' %d: TIMEOUT' % self.timeout_index)) ss.sort() ss = zip(*ss)[1] return '\n'.join(ss) def search(self, buffer, freshlen, searchwindowsize=None): """This searches 'buffer' for the first occurence of one of the search strings. 'freshlen' must indicate the number of bytes at the end of 'buffer' which have not been searched before. It helps to avoid searching the same, possibly big, buffer over and over again. See class spawn for the 'searchwindowsize' argument. If there is a match this returns the index of that string, and sets 'start', 'end' and 'match'. Otherwise, this returns -1. """ absurd_match = len(buffer) first_match = absurd_match # 'freshlen' helps a lot here. Further optimizations could # possibly include: # # using something like the Boyer-Moore Fast String Searching # Algorithm; pre-compiling the search through a list of # strings into something that can scan the input once to # search for all N strings; realize that if we search for # ['bar', 'baz'] and the input is '...foo' we need not bother # rescanning until we've read three more bytes. # # Sadly, I don't know enough about this interesting topic. /grahn for index, s in self._strings: if searchwindowsize is None: # the match, if any, can only be in the fresh data, # or at the very end of the old data offset = -(freshlen+len(s)) else: # better obey searchwindowsize offset = -searchwindowsize n = buffer.find(s, offset) if n >= 0 and n < first_match: first_match = n best_index, best_match = index, s if first_match == absurd_match: return -1 self.match = best_match self.start = first_match self.end = self.start + len(self.match) return best_index class searcher_re (object): """This is regular expression string search helper for the spawn.expect_any() method. Attributes: eof_index - index of EOF, or -1 timeout_index - index of TIMEOUT, or -1 After a successful match by the search() method the following attributes are available: start - index into the buffer, first byte of match end - index into the buffer, first byte after match match - the re.match object returned by a succesful re.search """ def __init__(self, patterns): """This creates an instance that searches for 'patterns' Where 'patterns' may be a list or other sequence of compiled regular expressions, or the EOF or TIMEOUT types.""" self.eof_index = -1 self.timeout_index = -1 self._searches = [] for n, s in zip(range(len(patterns)), patterns): if s is EOF: self.eof_index = n continue if s is TIMEOUT: self.timeout_index = n continue self._searches.append((n, s)) def __str__(self): """This returns a human-readable string that represents the state of the object.""" ss = [ (n,' %d: re.compile("%s")' % (n,str(s.pattern))) for n,s in self._searches] ss.append((-1,'searcher_re:')) if self.eof_index >= 0: ss.append ((self.eof_index,' %d: EOF' % self.eof_index)) if self.timeout_index >= 0: ss.append ((self.timeout_index,' %d: TIMEOUT' % self.timeout_index)) ss.sort() ss = zip(*ss)[1] return '\n'.join(ss) def search(self, buffer, freshlen, searchwindowsize=None): """This searches 'buffer' for the first occurence of one of the regular expressions. 'freshlen' must indicate the number of bytes at the end of 'buffer' which have not been searched before. See class spawn for the 'searchwindowsize' argument. If there is a match this returns the index of that string, and sets 'start', 'end' and 'match'. Otherwise, returns -1.""" absurd_match = len(buffer) first_match = absurd_match # 'freshlen' doesn't help here -- we cannot predict the # length of a match, and the re module provides no help. if searchwindowsize is None: searchstart = 0 else: searchstart = max(0, len(buffer)-searchwindowsize) for index, s in self._searches: match = s.search(buffer, searchstart) if match is None: continue n = match.start() if n < first_match: first_match = n the_match = match best_index = index if first_match == absurd_match: return -1 self.start = first_match self.match = the_match self.end = self.match.end() return best_index def log(e, suffix='', logdir=None): if isinstance(e, Exception): # Get the full traceback e = traceback.format_exc() #if hasattr(sys.stdout, 'isatty') and sys.stdout.isatty(): ## Only try to print if stdout is a tty, otherwise we might get ## an 'invalid handle' exception #print e if not logdir: if getattr(sys, 'frozen', False): logdir = appname else: logdir = os.path.split(os.path.dirname(os.path.abspath(__file__))) if logdir[-1] == 'lib': logdir.pop() logdir = logdir[-1] if sys.platform == "win32": logdir = os.path.join(SHGetSpecialFolderPath(0, CSIDL_APPDATA, 1), logdir, "logs") elif sys.platform == "darwin": logdir = os.path.join(os.path.expanduser("~"), "Library", "Logs", logdir) else: logdir = os.path.join(os.getenv("XDG_DATA_HOME", os.path.expandvars("$HOME/.local/share")), logdir, "logs") if not os.path.exists(logdir): try: os.makedirs(logdir) except OSError: pass if os.path.isdir(logdir) and os.access(logdir, os.W_OK): logfile = os.path.join(logdir, 'wexpect%s.log' % suffix) if os.path.isfile(logfile): try: logstat = os.stat(logfile) except Exception, exception: pass else: try: mtime = time.localtime(logstat.st_mtime) except ValueError, exception: # This can happen on Windows because localtime() is buggy on # that platform. See: # http://stackoverflow.com/questions/4434629/zipfile-module-in-python-runtime-problems # http://bugs.python.org/issue1760357 # To overcome this problem, we ignore the real modification # date and force a rollover mtime = time.localtime(time() - 60 * 60 * 24) if time.localtime()[:3] > mtime[:3]: # do rollover try: os.remove(logfile) except Exception, exception: pass try: fout = open(logfile, 'a') except: pass else: ts = time.time() fout.write('%s,%s %s\n' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(ts)), ('%3f' % (ts - int(ts)))[2:5], e)) fout.close() def excepthook(etype, value, tb): log(''.join(traceback.format_exception(etype, value, tb))) #sys.excepthook = excepthook def which (filename): """This takes a given filename; tries to find it in the environment path; then checks if it is executable. This returns the full path to the filename if found and executable. Otherwise this returns None.""" # Special case where filename already contains a path. if os.path.dirname(filename) != '': if os.access (filename, os.X_OK): return filename if not os.environ.has_key('PATH') or os.environ['PATH'] == '': p = os.defpath else: p = os.environ['PATH'] # Oddly enough this was the one line that made Pexpect # incompatible with Python 1.5.2. #pathlist = p.split (os.pathsep) pathlist = string.split (p, os.pathsep) for path in pathlist: f = os.path.join(path, filename) if os.access(f, os.X_OK): return f return None def join_args(args): """Joins arguments into a command line. It quotes all arguments that contain spaces or any of the characters ^!$%&()[]{}=;'+,`~""" commandline = [] for arg in args: if re.search('[\^!$%&()[\]{}=;\'+,`~\s]', arg): arg = '"%s"' % arg commandline.append(arg) return ' '.join(commandline) def split_command_line(command_line): """This splits a command line into a list of arguments. It splits arguments on spaces, but handles embedded quotes, doublequotes, and escaped characters. It's impossible to do this with a regular expression, so I wrote a little state machine to parse the command line. """ arg_list = [] arg = '' # Constants to name the states we can be in. state_basic = 0 state_esc = 1 state_singlequote = 2 state_doublequote = 3 state_whitespace = 4 # The state of consuming whitespace between commands. state = state_basic for c in command_line: if state == state_basic or state == state_whitespace: if c == '\\': # Escape the next character state = state_esc elif c == r"'": # Handle single quote state = state_singlequote elif c == r'"': # Handle double quote state = state_doublequote elif c.isspace(): # Add arg to arg_list if we aren't in the middle of whitespace. if state == state_whitespace: None # Do nothing. else: arg_list.append(arg) arg = '' state = state_whitespace else: arg = arg + c state = state_basic elif state == state_esc: arg = arg + c state = state_basic elif state == state_singlequote: if c == r"'": state = state_basic else: arg = arg + c elif state == state_doublequote: if c == r'"': state = state_basic else: arg = arg + c if arg != '': arg_list.append(arg) return arg_list dispcalGUI-1.7.1.6/dispcalGUI/worker.py000644 000765 000000 00000635153 12266720266 017513 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- # stdlib from __future__ import with_statement import getpass import math import os import re import shutil import subprocess as sp import sys import tempfile import textwrap import traceback from encodings.aliases import aliases from hashlib import md5 from time import sleep, strftime, time if sys.platform == "darwin": from platform import mac_ver from thread import start_new_thread elif sys.platform == "win32": from ctypes import windll from win32com.shell import shell import pythoncom import win32con # 3rd party if sys.platform == "win32": import pywintypes import win32api elif sys.platform != "darwin": try: import dbus except ImportError: dbus = None dbus_session = None else: try: dbus_session = dbus.SessionBus() except dbus.exceptions.DBusException: dbus_session = None # custom import CGATS import ICCProfile as ICCP import colormath import config import defaultpaths import localization as lang import wexpect from argyll_cgats import (add_dispcal_options_to_cal, add_options_to_ti3, extract_fix_copy_cal, ti3_to_ti1, vcgt_to_cal, verify_cgats) from argyll_instruments import (get_canonical_instrument_name, instruments as all_instruments) from argyll_names import (names as argyll_names, altnames as argyll_altnames, optional as argyll_optional, viewconds, intents) from config import (autostart, autostart_home, script_ext, defaults, enc, exe, exe_ext, fs_enc, getcfg, geticon, get_ccxx_testchart, get_data_path, get_verified_path, isapp, isexe, is_ccxx_testchart, profile_ext, pydir, setcfg, writecfg) from debughelpers import handle_error if sys.platform not in ("darwin", "win32"): from defaultpaths import (iccprofiles_home, iccprofiles_display_home, xdg_config_home, xdg_config_dirs) from edid import WMIError, get_edid from log import DummyLogger, LogFile, get_file_logger, log, safe_print from meta import name as appname, version from options import ascii, debug, test, test_require_sensor_cal, verbose from ordereddict import OrderedDict from trash import trash from util_io import Files, GzipFileProper, StringIOu as StringIO from util_list import intlist if sys.platform == "darwin": from util_mac import (mac_app_activate, mac_terminal_do_script, mac_terminal_set_colors, osascript) elif sys.platform == "win32": import util_win import colord from util_os import getenvu, is_superuser, movefile, putenvu, quote_args, which from util_str import safe_str, safe_unicode from wxaddons import wx from wxwindows import ConfirmDialog, InfoDialog, ProgressDialog, SimpleTerminal from wxDisplayAdjustmentFrame import DisplayAdjustmentFrame from wxDisplayUniformityFrame import DisplayUniformityFrame from wxUntetheredFrame import UntetheredFrame import wx.lib.delayedresult as delayedresult INST_CAL_MSGS = ["Do a reflective white calibration", "Do a transmissive white calibration", "Do a transmissive dark calibration", "Place the instrument on its reflective white reference", "Click the instrument on its reflective white reference", "Place the instrument in the dark", "Place cap on the instrument", # i1 Pro "Place ambient adapter and cap on the instrument", "Set instrument sensor to calibration position", # ColorMunki "Place the instrument on its transmissive white source", "Use the appropriate tramissive blocking", "Change filter on instrument to"] USE_WPOPEN = 0 keycodes = {wx.WXK_NUMPAD0: ord("0"), wx.WXK_NUMPAD1: ord("1"), wx.WXK_NUMPAD2: ord("2"), wx.WXK_NUMPAD3: ord("3"), wx.WXK_NUMPAD4: ord("4"), wx.WXK_NUMPAD5: ord("5"), wx.WXK_NUMPAD6: ord("6"), wx.WXK_NUMPAD7: ord("7"), wx.WXK_NUMPAD8: ord("8"), wx.WXK_NUMPAD9: ord("9"), wx.WXK_NUMPAD_ADD: ord("+"), wx.WXK_NUMPAD_ENTER: ord("\n"), wx.WXK_NUMPAD_EQUAL: ord("="), wx.WXK_NUMPAD_DIVIDE: ord("/"), wx.WXK_NUMPAD_MULTIPLY: ord("*"), wx.WXK_NUMPAD_SUBTRACT: ord("-")} def Property(func): return property(**func()) def check_argyll_bin(paths=None): """ Check if the Argyll binaries can be found. """ prev_dir = None for name in argyll_names: exe = get_argyll_util(name, paths) if not exe: if name in argyll_optional: continue return False cur_dir = os.path.dirname(exe) if prev_dir: if cur_dir != prev_dir: if verbose: safe_print("Warning - the Argyll executables are " "scattered. They should be in the same " "directory.") return False else: prev_dir = cur_dir if verbose >= 3: safe_print("Argyll binary directory:", cur_dir) if debug: safe_print("[D] check_argyll_bin OK") if debug >= 2: if not paths: paths = getenvu("PATH", os.defpath).split(os.pathsep) argyll_dir = (getcfg("argyll.dir") or "").rstrip(os.path.sep) if argyll_dir: if argyll_dir in paths: paths.remove(argyll_dir) paths = [argyll_dir] + paths safe_print("[D] Searchpath:\n ", "\n ".join(paths)) argyll_dir = os.path.dirname(cur_dir) if (os.path.isdir(os.path.join(argyll_dir, "ref")) and not argyll_dir in config.data_dirs): config.data_dirs.append(argyll_dir) config.defaults["3dlut.input.profile"] = get_data_path(os.path.join("ref", "Rec709.icm")) or "" config.defaults["testchart.reference"] = get_data_path(os.path.join("ref", "ColorChecker.cie")) or "" config.defaults["gamap_profile"] = get_data_path(os.path.join("ref", "sRGB.icm")) or "" return True def check_create_dir(path): """ Try to create a directory and show an error message on failure. """ if not os.path.exists(path): try: os.makedirs(path) except Exception, exception: return Error(lang.getstr("error.dir_creation", path) + "\n\n" + safe_unicode(exception)) if not os.path.isdir(path): return Error(lang.getstr("error.dir_notdir", path)) return True def check_cal_isfile(cal=None, missing_msg=None, notfile_msg=None, silent=False): """ Check if a calibration file exists and show an error message if not. """ if not silent: if not missing_msg: missing_msg = lang.getstr("error.calibration.file_missing", cal) if not notfile_msg: notfile_msg = lang.getstr("error.calibration.file_notfile", cal) return check_file_isfile(cal, missing_msg, notfile_msg, silent) def check_profile_isfile(profile_path=None, missing_msg=None, notfile_msg=None, silent=False): """ Check if a profile exists and show an error message if not. """ if not silent: if not missing_msg: missing_msg = lang.getstr("error.profile.file_missing", profile_path) if not notfile_msg: notfile_msg = lang.getstr("error.profile.file_notfile", profile_path) return check_file_isfile(profile_path, missing_msg, notfile_msg, silent) def check_file_isfile(filename, missing_msg=None, notfile_msg=None, silent=False): """ Check if a file exists and show an error message if not. """ if not os.path.exists(filename): if not silent: if not missing_msg: missing_msg = lang.getstr("file.missing", filename) return Error(missing_msg) return False if not os.path.isfile(filename): if not silent: if not notfile_msg: notfile_msg = lang.getstr("file.notfile", filename) return Error(notfile_msg) return False return True def check_set_argyll_bin(): """ Check if Argyll binaries can be found, otherwise let the user choose. """ if check_argyll_bin(): return True else: return set_argyll_bin() def check_ti3_criteria1(RGB, XYZ, black_XYZ, white_XYZ, delta_to_sRGB_threshold_E=10, delta_to_sRGB_threshold_L=10, delta_to_sRGB_threshold_C=75, delta_to_sRGB_threshold_H=75, print_debuginfo=True): sRGBLab = colormath.RGB2Lab(RGB[0] / 100.0, RGB[1] / 100.0, RGB[2] / 100.0, noadapt=not white_XYZ) if white_XYZ: if black_XYZ: black_Lab = colormath.XYZ2Lab(*colormath.adapt(black_XYZ[0], black_XYZ[1], black_XYZ[2], white_XYZ)) black_C = math.sqrt(math.pow(black_Lab[1], 2) + math.pow(black_Lab[2], 2)) if black_Lab[0] < 3 and black_C < 3: # Sanity check: Is this color reasonably dark and achromatic? # Then do BPC so we can compare better to perfect black sRGB XYZ = colormath.apply_bpc(XYZ[0], XYZ[1], XYZ[2], black_XYZ, (0, 0, 0), white_XYZ) XYZ = colormath.adapt(XYZ[0], XYZ[1], XYZ[2], white_XYZ) Lab = colormath.XYZ2Lab(*XYZ) delta_to_sRGB = colormath.delta(*sRGBLab + Lab + (2000, )) # Depending on how (a)chromatic the sRGB color is, scale the thresholds # Use math derived from DE2000 formula to get chroma and hue angle L, a, b = sRGBLab b_pow = math.pow(b, 2) C = math.sqrt(math.pow(a, 2) + b_pow) C_pow = math.pow(C, 7) G = .5 * (1 - math.sqrt(C_pow / (C_pow + math.pow(25, 7)))) a = (1 + G) * a C = math.sqrt(math.pow(a, 2) + b_pow) h = 0 if a == 0 and b == 0 else math.degrees(math.atan2(b, a)) + (0 if b >= 0 else 360.0) # C and h scaling factors C_scale = C / 100.0 h_scale = h / 360.0 # RGB hue, saturation and value scaling factors H, S, V = colormath.RGB2HSV(*[v / 100.0 for v in RGB]) SV_scale = S * V # Scale the thresholds delta_to_sRGB_threshold_E += (delta_to_sRGB_threshold_E * max(C_scale, SV_scale)) delta_to_sRGB_threshold_L += (delta_to_sRGB_threshold_L * max(C_scale, SV_scale)) # Allow higher chroma errors as luminance of reference decreases L_scale = max(1 - (1 * C_scale) + (100.0 - L) / 100.0, 1) delta_to_sRGB_threshold_C = ((delta_to_sRGB_threshold_C * max(C_scale, SV_scale) + 2) * L_scale) delta_to_sRGB_threshold_H = ((delta_to_sRGB_threshold_H * max(C_scale, h_scale, H, SV_scale) + 2) * L_scale) criteria1 = (delta_to_sRGB["E"] > delta_to_sRGB_threshold_E and (abs(delta_to_sRGB["L"]) > delta_to_sRGB_threshold_L or abs(delta_to_sRGB["C"]) > delta_to_sRGB_threshold_C or abs(delta_to_sRGB["H"]) > delta_to_sRGB_threshold_H)) # This patch has an unusually high delta 00 to its sRGB equivalent delta_to_sRGB["E_ok"] = delta_to_sRGB["E"] <= delta_to_sRGB_threshold_E delta_to_sRGB["L_ok"] = (abs(delta_to_sRGB["L"]) <= delta_to_sRGB_threshold_L) delta_to_sRGB["C_ok"] = (abs(delta_to_sRGB["C"]) <= delta_to_sRGB_threshold_C) delta_to_sRGB["H_ok"] = (abs(delta_to_sRGB["H"]) <= delta_to_sRGB_threshold_H) delta_to_sRGB["ok"] = (delta_to_sRGB["E_ok"] and delta_to_sRGB["L_ok"] and delta_to_sRGB["C_ok"] and delta_to_sRGB["H_ok"]) debuginfo = ("RGB: %6.2f %6.2f %6.2f RGB(sRGB)->Lab(D50): %6.2f %6.2f %6.2f " "L_scale: %5.3f C: %5.2f C_scale: %5.3f h: %5.2f " "h_scale: %5.3f H: %5.2f H_scale: %5.3f S: %5.2f " "V: %5.2f SV_scale: %5.3f Thresholds: E %5.2f L %5.2f " "C %5.2f H %5.2f XYZ->Lab(D50): %6.2f %6.2f %6.2f delta " "RGB(sRGB)->Lab(D50) to XYZ->Lab(D50): dE %5.2f dL %5.2f dC " "%5.2f dH %5.2f" % (RGB[0], RGB[1], RGB[2], sRGBLab[0], sRGBLab[1], sRGBLab[2], L_scale, C, C_scale, h, h_scale, H * 360, H, S, V, SV_scale, delta_to_sRGB_threshold_E, delta_to_sRGB_threshold_L, delta_to_sRGB_threshold_C, delta_to_sRGB_threshold_H, Lab[0], Lab[1], Lab[2], delta_to_sRGB["E"], delta_to_sRGB["L"], delta_to_sRGB["C"], delta_to_sRGB["H"])) if print_debuginfo: safe_print(debuginfo) return sRGBLab, Lab, delta_to_sRGB, criteria1, debuginfo def check_ti3_criteria2(prev_Lab, Lab, prev_sRGBLab, sRGBLab, prev_RGB, RGB, sRGB_delta_E_scale_factor=.5): delta = colormath.delta(*prev_Lab + Lab + (2000, )) sRGB_delta = colormath.delta(*prev_sRGBLab + sRGBLab + (2000, )) sRGB_delta["E"] *= sRGB_delta_E_scale_factor criteria2 = delta["E"] < sRGB_delta["E"] # These two patches have different RGB values # but suspiciously low delta E 76. if criteria2 and (prev_RGB[0] == prev_RGB[1] == prev_RGB[2] and RGB[0] == RGB[1] == RGB[2]): # If RGB gray, check if the Y difference makes sense criteria2 = ((RGB[0] > prev_RGB[0] and Lab[0] <= prev_Lab[0]) or (RGB[0] < prev_RGB[0] and Lab[0] >= prev_Lab[0])) delta["L_ok"] = not criteria2 delta["E_ok"] = True else: delta["E_ok"] = not criteria2 delta["L_ok"] = True return delta, sRGB_delta, criteria2 def check_ti3(ti3, print_debuginfo=True): """ Check subsequent patches' expected vs real deltaE and collect patches with different RGB values, but suspiciously low delta E Used as a means to find misreads. The expected dE is calculated by converting from a patches RGB values (assuming sRGB) to Lab and comparing the values. """ if not isinstance(ti3, CGATS.CGATS): ti3 = CGATS.CGATS(ti3) data = ti3.queryv1("DATA") datalen = len(data) black = data.queryi1({"RGB_R": 0, "RGB_G": 0, "RGB_B": 0}) if black: black = black["XYZ_X"], black["XYZ_Y"], black["XYZ_Z"] elif print_debuginfo: safe_print("Warning - no black patch found in CGATS") white = data.queryi1({"RGB_R": 100, "RGB_G": 100, "RGB_B": 100}) if white: white = white["XYZ_X"], white["XYZ_Y"], white["XYZ_Z"] elif print_debuginfo: safe_print("Warning - no white patch found in CGATS") suspicious = [] prev = {} delta = {} for index, item in data.iteritems(): (sRGBLab, Lab, delta_to_sRGB, criteria1, debuginfo) = check_ti3_criteria1((item["RGB_R"], item["RGB_G"], item["RGB_B"]), (item["XYZ_X"], item["XYZ_Y"], item["XYZ_Z"]), black, white, print_debuginfo=False) if (criteria1 or (prev and (max(prev["item"]["RGB_R"], item["RGB_R"]) - min(prev["item"]["RGB_R"], item["RGB_R"]) > 1.0 / 2.55 or max(prev["item"]["RGB_G"], item["RGB_G"]) - min(prev["item"]["RGB_G"], item["RGB_G"]) > 1.0 / 2.55 or max(prev["item"]["RGB_B"], item["RGB_B"]) - min(prev["item"]["RGB_B"], item["RGB_B"]) > 1.0 / 2.55))): if prev: (delta, sRGB_delta, criteria2) = check_ti3_criteria2(prev["Lab"], Lab, prev["sRGBLab"], sRGBLab, (prev["item"]["RGB_R"], prev["item"]["RGB_G"], prev["item"]["RGB_B"]), (item["RGB_R"], item["RGB_G"], item["RGB_B"])) else: criteria2 = False if criteria1 or criteria2: if print_debuginfo: if criteria2: debuginfo = (("%s dE to previous XYZ->Lab(D50): " "%5.3f dE_OK: %s L_OK: %s " "0.5 dE RGB(sRGB)->Lab(D50) to previous " "RGB(sRGB)->Lab(D50): %5.3f") % (debuginfo, delta["E"], delta["E_ok"], delta["L_ok"], sRGB_delta["E"])) sample_id = "Patch #%%.0%id" % len(str(datalen)) safe_print(sample_id % item.SAMPLE_ID, debuginfo) suspicious.append((prev["item"] if criteria2 else None, item, delta if criteria2 else None, sRGB_delta if criteria2 else None, prev["delta_to_sRGB"] if criteria2 else None, delta_to_sRGB)) prev["item"] = item prev["sRGBLab"] = sRGBLab prev["Lab"] = Lab prev["delta_to_sRGB"] = delta_to_sRGB return suspicious def get_argyll_util(name, paths=None): """ Find a single Argyll utility. Return the full path. """ if not paths: paths = getenvu("PATH", os.defpath).split(os.pathsep) argyll_dir = (getcfg("argyll.dir") or "").rstrip(os.path.sep) if argyll_dir: if argyll_dir in paths: paths.remove(argyll_dir) paths = [argyll_dir] + paths elif verbose >= 4: safe_print("Info: Searching for", name, "in", os.pathsep.join(paths)) exe = None for path in paths: for altname in argyll_altnames.get(name, []): exe = which(altname + exe_ext, [path]) if exe: break if exe: break if verbose >= 4: if exe: safe_print("Info:", name, "=", exe) else: safe_print("Info:", "|".join(argyll_altnames[name]), "not found in", os.pathsep.join(paths)) return exe def get_argyll_utilname(name, paths=None): """ Find a single Argyll utility. Return the basename without extension. """ exe = get_argyll_util(name, paths) if exe: exe = os.path.basename(os.path.splitext(exe)[0]) return exe def get_argyll_version(name, silent=False): """ Determine version of a certain Argyll utility. """ argyll_version_string = get_argyll_version_string(name, silent) return parse_argyll_version_string(argyll_version_string) def get_argyll_version_string(name, silent=False): argyll_version_string = "0.0.0" if (silent and check_argyll_bin()) or (not silent and check_set_argyll_bin()): cmd = get_argyll_util(name) if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None try: p = sp.Popen([cmd.encode(fs_enc), "-?"], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT, startupinfo=startupinfo) except Exception, exception: safe_print(cmd) safe_print(exception) return argyll_version_string for i, line in enumerate((p.communicate()[0] or "").splitlines()): if isinstance(line, basestring): line = line.strip() if i == 0 and "version" in line.lower(): argyll_version_string = line[line.lower().find("version")+8:] break return argyll_version_string def get_current_profile_path(): profile = None profile_path = getcfg("calibration.file") if profile_path: try: profile = ICCP.ICCProfile(profile_path) except Exception, exception: return else: try: profile = ICCP.get_display_profile(getcfg("display.number") - 1) except Exception, exception: return if profile: return profile.fileName def parse_argument_string(args): """ Parses an argument string and returns a list of arguments. """ return [re.sub('^["\']|["\']$', '', arg) for arg in re.findall('(?:^|\s+)(-[^\s"\']+|"[^"]+?"|\'[^\']+?\'|[^\s"\']+)', args)] def parse_argyll_version_string(argyll_version_string): argyll_version = re.findall("(\d+|[^.\d]+)", argyll_version_string) for i, v in enumerate(argyll_version): try: argyll_version[i] = int(v) except ValueError: pass return argyll_version def get_options_from_args(dispcal_args=None, colprof_args=None): """ Extract options used for dispcal and colprof from argument strings. """ re_options_dispcal = [ "[moupHVF]", "d(?:\d+(?:,\d+)?|madvr|web)", "[cv]\d+", "q(?:%s)" % "|".join(config.valid_values["calibration.quality"]), "y(?:%s)" % "|".join(filter(None, config.valid_values["measurement_mode"])), "[tT](?:\d+(?:\.\d+)?)?", "w\d+(?:\.\d+)?,\d+(?:\.\d+)?", "[bfakAB]\d+(?:\.\d+)?", "(?:g(?:240|709|l|s)|[gG]\d+(?:\.\d+)?)", "[pP]\d+(?:\.\d+)?,\d+(?:\.\d+)?,\d+(?:\.\d+)?", 'X(?:\s*\d+|\s+["\'][^"\']+?["\'])', # Argyll >= 1.3.0 colorimeter correction matrix / Argyll >= 1.3.4 calibration spectral sample "I[bw]{,2}", # Argyll >= 1.3.0 drift compensation "YA" # Argyll >= 1.5.0 disable adaptive mode ] re_options_colprof = [ "q[lmh]", "b[lmh]", # B2A quality "a(?:%s)" % "|".join(config.valid_values["profile.type"]), '[sSMA]\s+["\'][^"\']+?["\']', "[cd](?:%s)" % "|".join(viewconds), "[tT](?:%s)" % "|".join(intents) ] options_dispcal = [] options_colprof = [] if dispcal_args: options_dispcal = re.findall(" -(" + "|".join(re_options_dispcal) + ")", " " + dispcal_args) if colprof_args: options_colprof = re.findall(" -(" + "|".join(re_options_colprof) + ")", " " + colprof_args) return options_dispcal, options_colprof def get_options_from_cprt(cprt): """ Extract options used for dispcal and colprof from profile copyright. """ if not isinstance(cprt, unicode): if isinstance(cprt, (ICCP.TextDescriptionType, ICCP.MultiLocalizedUnicodeType)): cprt = unicode(cprt) else: cprt = unicode(cprt, fs_enc, "replace") dispcal_args = cprt.split(" dispcal ") colprof_args = None if len(dispcal_args) > 1: dispcal_args[1] = dispcal_args[1].split(" colprof ") if len(dispcal_args[1]) > 1: colprof_args = dispcal_args[1][1] dispcal_args = dispcal_args[1][0] else: dispcal_args = None colprof_args = cprt.split(" colprof ") if len(colprof_args) > 1: colprof_args = colprof_args[1] else: colprof_args = None return dispcal_args, colprof_args def get_options_from_cal(cal): if not isinstance(cal, CGATS.CGATS): cal = CGATS.CGATS(cal) if not cal or not "ARGYLL_DISPCAL_ARGS" in cal[0] or \ not cal[0].ARGYLL_DISPCAL_ARGS: return [], [] dispcal_args = cal[0].ARGYLL_DISPCAL_ARGS[0].decode("UTF-7", "replace") return get_options_from_args(dispcal_args) def get_options_from_profile(profile): """ Try and get options from profile. First, try the 'targ' tag and look for the special dispcalGUI sections 'ARGYLL_DISPCAL_ARGS' and 'ARGYLL_COLPROF_ARGS'. If either does not exist, fall back to the copyright tag (dispcalGUI < 0.4.0.2) """ if not isinstance(profile, ICCP.ICCProfile): profile = ICCP.ICCProfile(profile) dispcal_args = None colprof_args = None if "targ" in profile.tags: ti3 = CGATS.CGATS(profile.tags.targ) if len(ti3) > 1 and "ARGYLL_DISPCAL_ARGS" in ti3[1] and \ ti3[1].ARGYLL_DISPCAL_ARGS: dispcal_args = ti3[1].ARGYLL_DISPCAL_ARGS[0].decode("UTF-7", "replace") if "ARGYLL_COLPROF_ARGS" in ti3[0] and \ ti3[0].ARGYLL_COLPROF_ARGS: colprof_args = ti3[0].ARGYLL_COLPROF_ARGS[0].decode("UTF-7", "replace") if not dispcal_args and "cprt" in profile.tags: dispcal_args = get_options_from_cprt(profile.getCopyright())[0] if not colprof_args and "cprt" in profile.tags: colprof_args = get_options_from_cprt(profile.getCopyright())[1] return get_options_from_args(dispcal_args, colprof_args) def get_options_from_ti3(ti3): """ Try and get options from TI3 file by looking for the special dispcalGUI sections 'ARGYLL_DISPCAL_ARGS' and 'ARGYLL_COLPROF_ARGS'. """ if not isinstance(ti3, CGATS.CGATS): ti3 = CGATS.CGATS(ti3) dispcal_args = None colprof_args = None if len(ti3) > 1 and "ARGYLL_DISPCAL_ARGS" in ti3[1] and \ ti3[1].ARGYLL_DISPCAL_ARGS: dispcal_args = ti3[1].ARGYLL_DISPCAL_ARGS[0].decode("UTF-7", "replace") if "ARGYLL_COLPROF_ARGS" in ti3[0] and \ ti3[0].ARGYLL_COLPROF_ARGS: colprof_args = ti3[0].ARGYLL_COLPROF_ARGS[0].decode("UTF-7", "replace") return get_options_from_args(dispcal_args, colprof_args) def get_arg(argmatch, args): """ Return first found entry beginning with the argmatch string or None """ for arg in args: if arg.startswith(argmatch): return arg def make_argyll_compatible_path(path): """ Make the path compatible with the Argyll utilities. This is currently only effective under Windows to make sure that any unicode 'division' slashes in the profile name are replaced with underscores. """ make_compat_enc = fs_enc skip = -1 if re.match(r'\\\\\?\\', path, re.I): # Don't forget about UNC paths: # \\?\UNC\Server\Volume\File # \\?\C:\File skip = 2 parts = path.split(os.path.sep) for i, part in enumerate(parts): if i > skip: parts[i] = unicode(part.encode(make_compat_enc, "safe_asciize"), make_compat_enc).replace("/", "_").replace("?", "_") return os.path.sep.join(parts) def printcmdline(cmd, args=None, fn=safe_print, cwd=None): """ Pretty-print a command line. """ if args is None: args = [] if cwd is None: cwd = os.getcwdu() fn(" " + cmd) i = 0 lines = [] for item in args: ispath = False if item.find(os.path.sep) > -1: if os.path.dirname(item) == cwd: item = os.path.basename(item) ispath = True item = quote_args([item])[0] lines.append(item) i += 1 for line in lines: fn(textwrap.fill(line, 80, expand_tabs = False, replace_whitespace = False, initial_indent = " ", subsequent_indent = " ")) def set_argyll_bin(parent=None): """ Set the directory containing the Argyll CMS binary executables """ if parent and not parent.IsShownOnScreen(): parent = None # do not center on parent if not visible defaultPath = os.path.join(*get_verified_path("argyll.dir")) dlg = wx.DirDialog(parent, lang.getstr("dialog.set_argyll_bin"), defaultPath=defaultPath, style=wx.DD_DIR_MUST_EXIST) dlg.Center(wx.BOTH) result = False while not result: result = dlg.ShowModal() == wx.ID_OK if result: path = dlg.GetPath().rstrip(os.path.sep) result = check_argyll_bin([path]) if result: if verbose >= 3: safe_print("Setting Argyll binary directory:", path) setcfg("argyll.dir", path) writecfg() break else: not_found = [] for name in argyll_names: if (not get_argyll_util(name, [path]) and not name in argyll_optional): not_found.append((" " + lang.getstr("or") + " ").join(filter(lambda altname: not "argyll" in altname, [altname + exe_ext for altname in argyll_altnames[name]]))) InfoDialog(parent, msg=path + "\n\n" + lang.getstr("argyll.dir.invalid", ", ".join(not_found)), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) else: break dlg.Destroy() return result def show_result_dialog(result, parent=None, pos=None): """ Show dialog depending on type of result. Result should be an exception type. An appropriate visual representation will be chosen whether result is of exception type 'Info', 'Warning' or other error. """ msg = safe_unicode(result) if not pos: pos=(-1, -1) if isinstance(result, Info): bitmap = geticon(32, "dialog-information") elif isinstance(result, Warning): bitmap = geticon(32, "dialog-warning") else: bitmap = geticon(32, "dialog-error") InfoDialog(parent, pos=pos, msg=msg, ok=lang.getstr("ok"), bitmap=bitmap, log=not isinstance(result, (UnloggedError, UnloggedInfo, UnloggedWarning))) class Error(Exception): pass class Info(UserWarning): pass class UnloggedError(Error): pass class UnloggedInfo(Info): pass class UnloggedWarning(UserWarning): pass class Warn(UserWarning): pass class FilteredStream(): """ Wrap a stream and filter all lines written to it. """ # Discard progress information like ... or *** or % discard = "" # If one of the triggers is contained in a line, skip the whole line triggers = ["Place instrument on test window", "key to continue", "key to retry", "key to take a reading", "] to read", "' to set", "' to report", "' to toggle", " or Q to ", "place on the white calibration reference", "read failed due to the sensor being in the wrong position", "Ambient filter should be removed"] + INST_CAL_MSGS substitutions = {" peqDE ": " DE to previous pass ", r"\^\[": "", # ESC key on Linux/OSX "patch ": "Patch ", re.compile("Point (\\d+ Delta E)", re.I): " point \\1"} def __init__(self, stream, data_encoding=None, file_encoding=None, errors="replace", discard=None, linesep_in="\r\n", linesep_out="\n", substitutions=None, triggers=None): self.stream = stream self.data_encoding = data_encoding self.file_encoding = file_encoding self.errors = errors if discard is not None: self.discard = discard self.linesep_in = linesep_in self.linesep_out = linesep_out if substitutions is not None: self.substitutions = substitutions if triggers is not None: self.triggers = triggers def __getattr__(self, name): return getattr(self.stream, name) def write(self, data): """ Write data to stream, stripping all unwanted output. Incoming lines are expected to be delimited by linesep_in. """ if not data: return lines = [] for line in data.split(self.linesep_in): if line and not re.sub(self.discard, "", line): line = "" write = True for trigger in self.triggers: if trigger.lower() in line.lower(): write = False break if write: if self.data_encoding and not isinstance(line, unicode): line = line.decode(self.data_encoding, self.errors) for search, sub in self.substitutions.iteritems(): line = re.sub(search, sub, line) if self.file_encoding: line = line.encode(self.file_encoding, self.errors) lines.append(line) if lines: self.stream.write(self.linesep_out.join(lines)) class LineBufferedStream(): """ Buffer lines and only write them to stream if line separator is detected """ def __init__(self, stream, data_encoding=None, file_encoding=None, errors="replace", linesep_in="\r\n", linesep_out="\n"): self.buf = "" self.data_encoding = data_encoding self.file_encoding = file_encoding self.errors = errors self.linesep_in = linesep_in self.linesep_out = linesep_out self.stream = stream def __del__(self): self.commit() def __getattr__(self, name): return getattr(self.stream, name) def close(self): self.commit() self.stream.close() def commit(self): if self.buf: if self.data_encoding and not isinstance(self.buf, unicode): self.buf = self.buf.decode(self.data_encoding, self.errors) if self.file_encoding: self.buf = self.buf.encode(self.file_encoding, self.errors) self.stream.write(self.buf) self.buf = "" def write(self, data): data = data.replace(self.linesep_in, "\n") for char in data: if char == "\r": while self.buf and not self.buf.endswith(self.linesep_out): self.buf = self.buf[:-1] else: if char == "\n": self.buf += self.linesep_out self.commit() else: self.buf += char class LineCache(): """ When written to it, stores only the last n + 1 lines and returns only the last n non-empty lines when read. """ def __init__(self, maxlines=1): self.clear() self.maxlines = maxlines def clear(self): self.cache = [""] def flush(self): pass def read(self, triggers=None): lines = [""] for line in self.cache: read = True if triggers: for trigger in triggers: if trigger.lower() in line.lower(): read = False break if read and line: lines.append(line) return "\n".join(filter(lambda line: line, lines)[-self.maxlines:]) def write(self, data): for char in data: if char == "\r": self.cache[-1] = "" elif char == "\n": self.cache.append("") else: self.cache[-1] += char self.cache = (filter(lambda line: line, self.cache[:-1]) + self.cache[-1:])[-self.maxlines - 1:] class WPopen(sp.Popen): def __init__(self, *args, **kwargs): sp.Popen.__init__(self, *args, **kwargs) self._seekpos = 0 self._stdout = kwargs["stdout"] self.after = None self.before = None self.exitstatus = None self.logfile_read = None self.match = None self.maxlen = 80 self.timeout = 30 def isalive(self): self.exitstatus = self.poll() return self.exitstatus is None def expect(self, patterns, timeout=-1): if not isinstance(patterns, list): patterns = [patterns] if timeout == -1: timeout = self.timeout if timeout is not None: end = time() + timeout while timeout is None or time() < end: self._stdout.seek(self._seekpos) buf = self._stdout.read() self._seekpos += len(buf) if not buf and not self.isalive(): self.match = wexpect.EOF("End Of File (EOF) in expect() - dead child process") if wexpect.EOF in patterns: return self.match raise self.match if buf and self.logfile_read: self.logfile_read.write(buf) for pattern in patterns: if isinstance(pattern, basestring) and pattern in buf: offset = buf.find(pattern) self.after = buf[offset:] self.before = buf[:offset] self.match = buf[offset:offset + len(pattern)] return self.match sleep(.01) if timeout is not None: self.match = wexpect.TIMEOUT("Timeout exceeded in expect()") if wexpect.TIMEOUT in patterns: return self.match raise self.match def send(self, s): self.stdin.write(s) self._stdout.seek(self._seekpos) buf = self._stdout.read() self._seekpos += len(buf) if buf and self.logfile_read: self.logfile_read.write(buf) def terminate(self, force=False): sp.Popen.terminate(self) class Worker(object): def __init__(self, owner=None): """ Create and return a new worker instance. """ self.owner = owner # owner should be a wxFrame or similar if sys.platform == "win32": self.data_encoding = aliases.get(str(windll.kernel32.GetACP()), "ascii") else: self.data_encoding = enc self.cmdrun = False self.dispcal_create_fast_matrix_shaper = False self.dispread_after_dispcal = False self.finished = True self.interactive = False self.lastcmdname = None self.lastmsg_discard = re.compile("[\\*\\.]+") self.options_colprof = [] self.options_dispcal = [] self.options_dispread = [] self.options_targen = [] self.recent_discard = re.compile("^\\s*(?:Adjusted )?(Current|[Tt]arget) (?:Brightness|50% Level|white|(?:Near )?[Bb]lack|(?:advertised )?gamma) .+|^Gamma curve .+|^Display adjustment menu:|^Press|^\\d\\).+|^(?:1%|Black|Red|Green|Blue|White)\\s+=.+|^\\s*patch \\d+ of \\d+.*|^\\s*point \\d+.*|^\\s*Added \\d+/\\d+|[\\*\\.]+|\\s*\\d*%?", re.I) self.subprocess_abort = False self.sudo_availoptions = None self.auth_timestamp = 0 self.sessionlogfiles = {} self.tempdir = None self.thread_abort = False self.triggers = [] self.clear_argyll_info() self.clear_cmd_output() self._pwdstr = "" def add_measurement_features(self, args, display=True): """ Add common options and to dispcal, dispread and spotread arguments """ if display and not get_arg("-d", args): args += ["-d" + self.get_display()] if not get_arg("-c", args): args += ["-c%s" % getcfg("comport.number")] measurement_mode = getcfg("measurement_mode") instrument_features = self.get_instrument_features() if (measurement_mode and (measurement_mode != "p" or self.get_instrument_name() == "ColorHug") and not get_arg("-y", args)): # Always specify -y for colorimeters (won't be read from .cal # when updating) # Only ColorHug supports -yp parameter if self.argyll_version >= [1, 5, 0]: measurement_mode_map = instrument_features.get("measurement_mode_map", {}) measurement_mode = measurement_mode_map.get(measurement_mode[0], measurement_mode) args += ["-y" + measurement_mode[0]] if getcfg("measurement_mode.projector") and \ instrument_features.get("projector_mode") and \ self.argyll_version >= [1, 1, 0] and not get_arg("-p", args): # Projector mode, Argyll >= 1.1.0 Beta args += ["-p"] if instrument_features.get("adaptive_mode"): if getcfg("measurement_mode.adaptive"): if ((self.argyll_version[0:3] > [1, 1, 0] or (self.argyll_version[0:3] == [1, 1, 0] and not "Beta" in self.argyll_version_string and not "RC1" in self.argyll_version_string and not "RC2" in self.argyll_version_string)) and self.argyll_version[0:3] < [1, 5, 0] and not get_arg("-V", args)): # Adaptive measurement mode, Argyll >= 1.1.0 RC3 args += ["-V"] else: if self.argyll_version[0:3] >= [1, 5, 0]: # Disable adaptive measurement mode args += ["-YA"] if display and not (get_arg("-dweb", args) or get_arg("-dmadvr", args)): if ((self.argyll_version <= [1, 0, 4] and not get_arg("-p", args)) or (self.argyll_version > [1, 0, 4] and not get_arg("-P", args))): args += [("-p" if self.argyll_version <= [1, 0, 4] else "-P") + getcfg("dimensions.measureframe")] if getcfg("measure.darken_background") and not get_arg("-F", args): args += ["-F"] if getcfg("measurement_mode.highres") and \ instrument_features.get("highres_mode") and not get_arg("-H", args): args += ["-H"] if (self.instrument_can_use_ccxx() and not is_ccxx_testchart() and not get_arg("-X", args)): # Use colorimeter correction? ccmx = getcfg("colorimeter_correction_matrix_file").split(":", 1) if len(ccmx) > 1 and ccmx[1]: ccmx = ccmx[1] else: ccmx = None if ccmx and (not ccmx.lower().endswith(".ccss") or self.instrument_supports_ccss()): result = check_file_isfile(ccmx) if isinstance(result, Exception): return result try: cgats = CGATS.CGATS(ccmx) except CGATS.CGATSError, exception: safe_print("%s:" % ccmx, exception) instrument = None else: instrument = get_canonical_instrument_name(str(cgats.queryv1("INSTRUMENT") or "").replace("eye-one display", "i1 Display")) if ((instrument and self.get_instrument_name().lower().replace(" ", "") in instrument.lower().replace(" ", "")) or ccmx.lower().endswith(".ccss")): tempdir = self.create_tempdir() if isinstance(tempdir, Exception): return tempdir ccmxcopy = os.path.join(tempdir, os.path.basename(ccmx)) if not os.path.isfile(ccmxcopy): try: # Copy ccmx to profile dir shutil.copyfile(ccmx, ccmxcopy) except Exception, exception: return Error(lang.getstr("error.copy_failed", (ccmx, ccmxcopy)) + "\n\n" + safe_unicode(exception)) result = check_file_isfile(ccmxcopy) if isinstance(result, Exception): return result args += ["-X"] args += [os.path.basename(ccmxcopy)] if (display and (getcfg("drift_compensation.blacklevel") or getcfg("drift_compensation.whitelevel")) and self.argyll_version >= [1, 3, 0] and not get_arg("-I", args)): args += ["-I"] if getcfg("drift_compensation.blacklevel"): args[-1] += "b" if getcfg("drift_compensation.whitelevel"): args[-1] += "w" # TTBD/FIXME: Skipping of sensor calibration can't be done in # emissive mode (see Argyll source spectro/ss.c, around line 40) if (getcfg("allow_skip_sensor_cal") and instrument_features.get("skip_sensor_cal") and self.argyll_version >= [1, 1, 0] and not get_arg("-N", args)): args += ["-N"] return True def instrument_can_use_ccxx(self): """ Return boolean whether the instrument in its current measurement mode can use a CCMX or CCSS colorimeter correction """ # Special cases: # Spectrometer (not needed), # ColorHug (only sensible in factory or raw measurement mode), # ColorMunki Smile (only generic LCD CCFL measurement mode), # Colorimétre HCFR (only raw measurement mode), # DTP94 (only LCD, refresh and generic measurement modes) # Spyder 4 (only generic LCD and refresh measurement modes) return (self.argyll_version >= [1, 3, 0] and not self.get_instrument_features().get("spectral") and (self.get_instrument_name() != "ColorHug" or getcfg("measurement_mode") in ("F", "R")) and (self.get_instrument_name() != "ColorMunki Smile" or getcfg("measurement_mode") == "f") and (self.get_instrument_name() != "Colorimtre HCFR" or # Missing é is NOT a typo getcfg("measurement_mode") == "R") and (self.get_instrument_name() != "DTP94" or getcfg("measurement_mode") in ("l", "c", "g")) and (self.get_instrument_name() != "Spyder4" or getcfg("measurement_mode") in ("l", "c"))) @Property def pwd(): def fget(self): return self._pwdstr[10:].ljust(int(math.ceil(len(self._pwdstr[10:]) / 4.0) * 4), "=").decode("base64").decode("UTF-8") def fset(self, pwd): self._pwdstr = "/tmp/%s%s" % (md5(getpass.getuser()).hexdigest().encode("base64")[:5], pwd.encode("UTF-8").encode("base64").rstrip("=\n")) return locals() def check_display_conf_oy_compat(self, display_no): """ Check the screen configuration for oyranos-monitor compatibility oyranos-monitor works off screen coordinates, so it will not handle overlapping screens (like separate X screens, which will usually have the same x, y coordinates)! So, oyranos-monitor can only be used if: - The wx.Display count is > 1 which means NOT separate X screens OR if we use the 1st screen - The screens don't overlap """ oyranos = False if wx.Display.GetCount() > 1 or display_no == 1: oyranos = True for display_rect_1 in self.display_rects: for display_rect_2 in self.display_rects: if display_rect_1 is not display_rect_2: if display_rect_1.Intersects(display_rect_2): oyranos = False break if not oyranos: break return oyranos def check_is_ambient_measuring(self, txt): if (("ambient light measuring" in txt.lower() or "Will use emissive mode instead" in txt) and not getattr(self, "is_ambient_measuring", False)): self.is_ambient_measuring = True if (getattr(self, "is_ambient_measuring", False) and "Place instrument on spot to be measured" in txt): self.is_ambient_measuring = False self.do_ambient_measurement() def do_ambient_measurement(self): if getattr(self, "subprocess_abort", False) or \ getattr(self, "thread_abort", False): # If we are aborting, ignore request return self.progress_wnd.Pulse(" " * 4) self.progress_wnd.MakeModal(False) dlg = ConfirmDialog(self.progress_wnd, msg=lang.getstr("instrument.measure_ambient"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information")) self.progress_wnd.dlg = dlg dlg_result = dlg.ShowModal() dlg.Destroy() if self.finished: return self.progress_wnd.MakeModal(True) if dlg_result != wx.ID_OK: self.abort_subprocess() return False if self.safe_send(" "): self.progress_wnd.Pulse(lang.getstr("please_wait")) def check_instrument_calibration(self, txt): """ Check if current instrument needs sensor calibration by looking at Argyll CMS command output """ if not self.instrument_calibration_complete: if "calibration complete" in txt.lower(): self.instrument_calibration_complete = True else: for calmsg in INST_CAL_MSGS: if calmsg in txt or "calibration failed" in txt.lower(): self.do_instrument_calibration() break def check_instrument_place_on_screen(self, txt): """ Check if instrument should be placed on screen by looking at Argyll CMS command output """ if "place instrument on test window" in txt.lower(): self.instrument_place_on_screen_msg = True if (self.instrument_place_on_screen_msg and "key to continue" in txt.lower()): self.instrument_place_on_screen_msg = False if (self.cmdname == get_argyll_utilname("dispcal") and sys.platform == "darwin"): # On the Mac dispcal's test window # hides the cursor and steals focus start_new_thread(mac_app_activate, (1, appname if isapp else "Python")) if (self.instrument_calibration_complete or ((config.get_display_name() == "Web" or getcfg("measure.darken_background")) and (not self.dispread_after_dispcal or self.cmdname == "dispcal"))): # Show a dialog asking user to place the instrument on the # screen if the instrument calibration was completed, # or if we measure a remote ("Web") display, # or if we use a black background during measurements, # but in case of the latter two only if dispread is not # run directly after dispcal self.instrument_calibration_complete = False self.instrument_place_on_screen() else: if self.subprocess.isalive(): if debug or test: safe_print('Sending SPACE key') self.safe_send(" ") def check_instrument_sensor_position(self, txt): """ Check instrument sensor position by looking at Argyll CMS command output """ if "read failed due to the sensor being in the wrong position" in txt.lower(): self.instrument_sensor_position_msg = True if (self.instrument_sensor_position_msg and " or q to " in txt.lower()): self.instrument_sensor_position_msg = False self.instrument_reposition_sensor() def check_retry_measurement(self, txt): if ("key to retry:" in txt and not "read stopped at user request!" in self.recent.read() and ("Sample read failed due to misread" in self.recent.read() or "Sample read failed due to communication problem" in self.recent.read()) and not self.subprocess_abort): self.retrycount += 1 self.recent.write("\r\n%s: Retrying (%s)..." % (appname, self.retrycount)) self.safe_send(" ") def check_spotread_result(self, txt): """ Check if spotread returned a result """ if (self.cmdname == "spotread" and getattr(self, "terminal", None) is None and "Result is XYZ:" in txt): # Single spotread reading, we are done wx.CallLater(1000, self.quit_terminate_cmd) def do_instrument_calibration(self): """ Ask user to initiate sensor calibration and execute. Give an option to cancel. """ if getattr(self, "subprocess_abort", False) or \ getattr(self, "thread_abort", False): # If we are aborting, ignore request return self.progress_wnd.Pulse(" " * 4) self.progress_wnd.MakeModal(False) if self.get_instrument_name() == "ColorMunki": lstr ="instrument.calibrate.colormunki" else: lstr = "instrument.calibrate" dlg = ConfirmDialog(self.progress_wnd, msg=lang.getstr(lstr), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information")) self.progress_wnd.dlg = dlg dlg_result = dlg.ShowModal() dlg.Destroy() if self.finished: return self.progress_wnd.MakeModal(True) if dlg_result != wx.ID_OK: self.abort_subprocess() return False self.progress_wnd.Pulse(lang.getstr("please_wait")) if debug or test: safe_print('Sending SPACE key') if self.safe_send(" "): self.progress_wnd.Pulse(lang.getstr("instrument.calibrating")) def abort_subprocess(self, confirm=False): """ Abort the current subprocess """ if confirm and getattr(self, "progress_wnd", None): if getattr(self.progress_wnd, "dlg", None): return pause = (not getattr(self.progress_wnd, "paused", False) and hasattr(self.progress_wnd, "pause_continue_handler")) if pause: self.progress_wnd.pause_continue_handler(True) self.progress_wnd.MakeModal(False) dlg = ConfirmDialog(self.progress_wnd, msg=lang.getstr("dialog.confirm_cancel"), ok=lang.getstr("yes"), cancel=lang.getstr("no"), bitmap=geticon(32, "dialog-warning")) self.progress_wnd.dlg = dlg dlg_result = dlg.ShowModal() dlg.Destroy() if self.finished: return self.progress_wnd.MakeModal(True) if dlg_result != wx.ID_OK: self.progress_wnd.Resume() if pause: self.progress_wnd.pause_continue_handler() return self.subprocess_abort = True self.thread_abort = True delayedresult.startWorker(lambda result: None, self.quit_terminate_cmd) def instrument_place_on_screen(self): """ Show a dialog asking user to place the instrument on the screen and give an option to cancel """ if getattr(self, "subprocess_abort", False) or \ getattr(self, "thread_abort", False): # If we are aborting, ignore request return self.progress_wnd.Pulse(" " * 4) self.progress_wnd.MakeModal(False) dlg = ConfirmDialog(self.progress_wnd, msg=lang.getstr("instrument.place_on_screen"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-information")) self.progress_wnd.dlg = dlg dlg_result = dlg.ShowModal() dlg.Destroy() if self.finished: return self.progress_wnd.MakeModal(True) if dlg_result != wx.ID_OK: self.abort_subprocess() return False if debug or test: safe_print('Sending SPACE key') self.safe_send(" ") def instrument_reposition_sensor(self): if getattr(self, "subprocess_abort", False) or \ getattr(self, "thread_abort", False): # If we are aborting, ignore request return self.progress_wnd.Pulse(" " * 4) self.progress_wnd.MakeModal(False) dlg = ConfirmDialog(self.progress_wnd, msg=lang.getstr("instrument.reposition_sensor"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) self.progress_wnd.dlg = dlg dlg_result = dlg.ShowModal() dlg.Destroy() if self.finished: return self.progress_wnd.MakeModal(True) if dlg_result != wx.ID_OK: self.abort_subprocess() return False if debug or test: safe_print('Sending SPACE key') self.safe_send(" ") def clear_argyll_info(self): """ Clear Argyll CMS version, detected displays and instruments. """ self.argyll_bin_dir = None self.argyll_version = [0, 0, 0] self.argyll_version_string = "0.0.0" self._displays = [] self.cmdname = None self.display_edid = [] self.display_manufacturers = [] self.display_names = [] self.display_rects = [] self.displays = [] self.instruments = [] self.lut_access = [] def clear_cmd_output(self): """ Clear any output from the last run command. """ self.retcode = -1 self.output = [] self.errors = [] self.recent = FilteredStream(LineCache(maxlines=3), self.data_encoding, discard=self.recent_discard, triggers=self.triggers) self.retrycount = 0 self.lastmsg = FilteredStream(LineCache(), self.data_encoding, discard=self.lastmsg_discard, triggers=self.triggers) self.send_buffer = None if not hasattr(self, "logger") or (self.interactive and self.owner and isinstance(self.logger, DummyLogger)): # Log interaction with Argyll tools that run interactively if self.interactive and self.owner: if self.owner.Name != "mainframe": name = "interact.%s" % self.owner.Name else: name = "interact" self.logger = get_file_logger(name) else: self.logger = DummyLogger() if self.interactive: self.logger.info("-" * 80) self.sessionlogfile = None def create_3dlut(self, profile_in, path, profile_abst=None, profile_out=None, apply_cal=True, intent="r", format="3dl", size=17, input_bits=10, output_bits=12, maxval=1.0, input_encoding="n", output_encoding="n", bt1886_gamma=None, bt1886_gamma_type="b", save_link_icc=True): """ Create a 3D LUT from one (device link) or two (device) profiles, optionally incorporating an abstract profile. """ # .cube: http://doc.iridas.com/index.php?title=LUT_Formats # .3dl: http://www.kodak.com/US/plugins/acrobat/en/motion/products/look/UserGuide.pdf # http://download.autodesk.com/us/systemdocs/pdf/lustre_color_management_user_guide.pdf # .spi3d: https://github.com/imageworks/OpenColorIO/blob/master/src/core/FileFormatSpi3D.cpp # .mga: http://pogle.pandora-int.com/download/manual/lut3d_format.html for profile in (profile_in, profile_out): if (profile.profileClass not in ("mntr", "link", "scnr", "spac") or profile.colorSpace != "RGB"): raise NotImplementedError(lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace))) if profile_in.profileClass == "link": break # Setup temp dir cwd = self.create_tempdir() if isinstance(cwd, Exception): raise cwd result = None path = os.path.split(path) path = os.path.join(path[0], make_argyll_compatible_path(path[1])) filename, ext = os.path.splitext(path) name = os.path.basename(filename) if profile_in.profileClass == "link": link_basename = os.path.basename(profile_in.fileName) link_filename = os.path.join(cwd, link_basename) profile_in.write(link_filename) else: # Check if files are the same if profile_in.isSame(profile_out, force_calculation=True): raise Error(lang.getstr("error.source_dest_same")) # Prepare building a device link link_basename = name + profile_ext link_filename = os.path.join(cwd, link_basename) profile_in_basename = make_argyll_compatible_path(os.path.basename(profile_in.fileName)) profile_out_basename = make_argyll_compatible_path(os.path.basename(profile_out.fileName)) if profile_in_basename == profile_out_basename: (profile_out_filename, profile_out_ext) = os.path.splitext(profile_out_basename) profile_out_basename = "%s (2)%s" % (profile_out_filename, profile_out_ext) profile_in.fileName = os.path.join(cwd, profile_in_basename) profile_in.write() profile_out.fileName = os.path.join(cwd, profile_out_basename) profile_out.write() profile_out_cal_path = os.path.splitext(profile_out.fileName)[0] + ".cal" # Apply calibration? if apply_cal: # Get the calibration from profile vcgt if not profile_out.tags.get("vcgt", None): raise Error(lang.getstr("profile.no_vcgt")) try: cgats = vcgt_to_cal(profile_out) except (CGATS.CGATSInvalidError, CGATS.CGATSInvalidOperationError, CGATS.CGATSKeyError, CGATS.CGATSTypeError, CGATS.CGATSValueError), exception: raise Error(lang.getstr("cal_extraction_failed")) cgats.write(profile_out_cal_path) if self.argyll_version < [1, 6]: # Can't apply the calibration with old collink versions - # apply the calibration to the 'out' profile prior to # device linking instead applycal = get_argyll_util("applycal") if not applycal: raise NotImplementedError(lang.getstr("argyll.util.not_found", "applycal")) safe_print(lang.getstr("apply_cal")) result = self.exec_cmd(applycal, ["-v", profile_out_cal_path, profile_out_basename, profile_out.fileName], capture_output=True, skip_scripts=True) if isinstance(result, Exception) and not getcfg("dry_run"): raise result elif not result: raise Error("\n\n".join([lang.getstr("apply_cal.error"), "\n".join(self.errors)])) # Now build the device link collink = get_argyll_util("collink") if not collink: raise NotImplementedError(lang.getstr("argyll.util.not_found", "collink")) args = ["-v", "-qh", "-G", "-i%s" % intent, "-r65", "-n"] if profile_abst: profile_abst.write(os.path.join(cwd, "abstract.icc")) args += ["-p", "abstract.icc"] if self.argyll_version >= [1, 6]: if format == "madVR": args += ["-3m"] elif format == "eeColor" and not test: args += ["-3e"] args += ["-e%s" % input_encoding] args += ["-E%s" % output_encoding] if bt1886_gamma: args += ["-I%s:%s" % (bt1886_gamma_type, bt1886_gamma)] if apply_cal: # Apply the calibration when building our device link # i.e. use collink -a parameter (apply calibration curves # to link output and append linear) args += ["-a", profile_out_cal_path] if getcfg("extra_args.collink").strip(): args += parse_argument_string(getcfg("extra_args.collink")) result = self.exec_cmd(collink, args + [profile_in_basename, profile_out_basename, link_filename], capture_output=True, skip_scripts=True) if (result and not isinstance(result, Exception) and save_link_icc and os.path.isfile(link_filename)): profile_link = ICCP.ICCProfile(link_filename) profile_link.setDescription(name) profile_link.setCopyright(getcfg("copyright")) manufacturer = profile_out.getDeviceManufacturerDescription() if manufacturer: profile_link.setDeviceManufacturerDescription(manufacturer) model = profile_out.getDeviceModelDescription() if model: profile_link.setDeviceModelDescription(model) profile_link.device["manufacturer"] = profile_out.device["manufacturer"] profile_link.device["model"] = profile_out.device["model"] if "mmod" in profile_out.tags: profile_link.tags.mmod = profile_out.tags.mmod profile_link.calculateID() profile_link.write(filename + profile_ext) if self.argyll_version >= [1, 6] and ((format == "eeColor" and not test) or format == "madVR"): # Collink has already written the 3DLUT for us result2 = self.wrapup(not isinstance(result, UnloggedInfo) and result, dst_path=path, ext_filter=[".3dlut", ".cal", ".log", ".txt"]) if not result: result = UnloggedError(lang.getstr("aborted")) if isinstance(result2, Exception): if isinstance(result, Exception): result = Error(safe_unicode(result) + "\n\n" + safe_unicode(result2)) else: result = result2 if not isinstance(result, Exception): return if isinstance(result, Exception): raise result elif not result: raise UnloggedError(lang.getstr("aborted")) # We have to create the 3DLUT ourselves # Create input RGB values RGB_in = [] RGB_indexes = [] seen = {} if format == "eeColor": # Fixed size size = 65 step = 1.0 / (size - 1) RGB_triplet = [0.0, 0.0, 0.0] RGB_index = [0, 0, 0] # Set the fastest and slowest changing columns, from right to left if format in ("3dl", "mga", "spi3d"): columns = (0, 1, 2) elif format == "eeColor": columns = (2, 0, 1) else: columns = (2, 1, 0) for i in xrange(0, size): # Red RGB_triplet[columns[0]] = step * i RGB_index[columns[0]] = i for j in xrange(0, size): # Green RGB_triplet[columns[1]] = step * j RGB_index[columns[1]] = j for k in xrange(0, size): # Blue RGB_triplet[columns[2]] = step * k RGB_copy = list(RGB_triplet) if format == "eeColor": # eeColor cLUT is fake 65^3 - only 64^3 is usable. # This affects full range and xvYCC RGB, so un-map # inputs to cLUT to only use 64^3 if input_encoding == "n": for l in xrange(3): RGB_copy[l] = min(RGB_copy[l] * (size - 1.0) / (size - 2.0), 100.0) elif input_encoding in ("x", "X"): for l in xrange(2): RGB_copy[1 + l] = min((RGB_copy[1 + l] * (size - 1.0) - 1.0) / (size - 3.0), 100.0) RGB_index[columns[2]] = k RGB_in.append(RGB_copy) RGB_indexes.append(list(RGB_index)) # Convert RGB triplets to list of strings for i, RGB_triplet in enumerate(RGB_in): RGB_in[i] = " ".join(str(n) for n in RGB_triplet) if debug: safe_print(len(RGB_in), "RGB triplets") safe_print("\n".join(RGB_in)) # Setup icclu # (Using icclu instead of xicclu because xicclu in versions # prior to Argyll CMS 1.6.0 could not deal with devicelink profiles) icclu = get_argyll_util("icclu").encode(fs_enc) if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None # Lookup RGB -> XYZ values through devicelink profile using icclu stderr = tempfile.SpooledTemporaryFile() p = sp.Popen([icclu, "-v0", link_basename], stdin=sp.PIPE, stdout=sp.PIPE, stderr=stderr, cwd=cwd.encode(fs_enc), startupinfo=startupinfo) self.subprocess = p if p.poll() not in (0, None): stderr.seek(0) result = Error(stderr.read().strip()) try: odata = p.communicate("\n".join(RGB_in))[0].splitlines() except IOError: stderr.seek(0) result = Error(stderr.read().strip()) if p.wait() != 0: result = IOError(''.join(odata)) stderr.close() # Remove temporary files, move .cal and .log files result2 = self.wrapup(dst_path=path, ext_filter=[".cal", ".log"]) if isinstance(result, Exception): raise result # Convert icclu output to RGB triplets RGB_out = [] for line in odata: RGB_out.append([float(n) for n in line.strip().split()]) if debug: safe_print(len(odata), "RGB triplets") safe_print("\n".join(odata)) lut = [["# Created with %s %s" % (appname, version)]] valsep = " " linesep = "\n" if format == "3dl": if maxval is None: maxval = 1023 if output_bits is None: output_bits = math.log(maxval + 1) / math.log(2) if input_bits is None: input_bits = output_bits maxval = math.pow(2, output_bits) - 1 pad = len(str(maxval)) lut.append(["# INPUT RANGE: %i" % input_bits]) lut.append(["# OUTPUT RANGE: %i" % output_bits]) lut.append([]) for i in xrange(0, size): lut[-1] += ["%i" % int(round(i * step * (math.pow(2, input_bits) - 1)))] for RGB_triplet in RGB_out: lut.append([]) for component in (0, 1, 2): lut[-1] += [("%i" % int(round(RGB_triplet[component] * maxval))).rjust(pad, " ")] elif format == "cube": if maxval is None: maxval = 1.0 lut.append(["LUT_3D_SIZE %i" % size]) lut.append(["DOMAIN_MIN 0.0 0.0 0.0"]) fp_offset = str(maxval).find(".") domain_max = "DOMAIN_MAX %s %s %s" % (("%%.%if" % len(str(maxval)[fp_offset + 1:]), ) * 3) lut.append([domain_max % ((maxval ,) * 3)]) lut.append([]) for RGB_triplet in RGB_out: lut.append([]) for component in (0, 1, 2): lut[-1] += ["%.6f" % (RGB_triplet[component] * maxval)] elif format == "spi3d": if maxval is None: maxval = 1.0 lut = [["SPILUT 1.0"]] lut.append(["3 3"]) lut.append(["%i %i %i" % ((size, ) * 3)]) for i, RGB_triplet in enumerate(RGB_out): lut.append([str(index) for index in RGB_indexes[i]]) for component in (0, 1, 2): lut[-1] += ["%.6f" % (RGB_triplet[component] * maxval)] elif format == "eeColor": if maxval is None: maxval = 1.0 lut = [] for i, RGB_triplet in enumerate(RGB_out): lut.append(["%.6f" % (float(component) * maxval) for component in RGB_in[i].split()]) for component in (0, 1, 2): lut[-1] += ["%.6f" % (RGB_triplet[component] * maxval)] linesep = "\r\n" elif format == "mga": lut = [["#HEADER"], ["#filename: %s" % os.path.basename(path)], ["#type: 3D cube file"], ["#format: 1.00"], ["#created: %s" % strftime("%d %B %Y")], ["#owner: %s" % getpass.getuser()], ["#title: %s" % os.path.splitext(os.path.basename(path))[0]], ["#END"]] lut.append([]) lut.append(["channel 3d"]) lut.append(["in %i" % (size ** 3)]) maxval = 2 ** output_bits - 1 lut.append(["out %i" % (maxval + 1)]) lut.append([""]) lut.append(["format lut"]) lut.append([""]) lut.append(["values\tred\tgreen\tblue"]) for i, RGB_triplet in enumerate(RGB_out): lut.append(["%i" % i]) for component in (0, 1, 2): lut[-1] += [("%i" % int(round(RGB_triplet[component] * maxval)))] valsep = "\t" lut.append([]) for i, line in enumerate(lut): lut[i] = valsep.join(line) result = linesep.join(lut) # Write 3DLUT lut_file = open(path, "wb") lut_file.write(result) lut_file.close() if isinstance(result2, Exception): raise result2 def create_tempdir(self): """ Create a temporary working directory and return its path. """ if not self.tempdir or not os.path.isdir(self.tempdir): # we create the tempdir once each calibrating/profiling run # (deleted by 'wrapup' after each run) if verbose >= 2: if not self.tempdir: msg = "there is none" else: msg = "the previous (%s) no longer exists" % self.tempdir safe_print(appname + ": Creating a new temporary directory " "because", msg) try: self.tempdir = tempfile.mkdtemp(prefix=appname + u"-") except Exception, exception: self.tempdir = None return Error("Error - couldn't create temporary directory: " + safe_str(exception)) return self.tempdir def enumerate_displays_and_ports(self, silent=False, check_lut_access=True, enumerate_ports=True): """ Enumerate the available displays and ports. Also sets Argyll version number, availability of certain options like black point rate, and checks LUT access for each display. """ if (silent and check_argyll_bin()) or (not silent and check_set_argyll_bin()): displays = [] lut_access = [] if verbose >= 1 and not silent: safe_print(lang.getstr("enumerating_displays_and_comports")) if getattr(wx.GetApp(), "progress_dlg", None) and \ wx.GetApp().progress_dlg.IsShownOnScreen(): wx.GetApp().progress_dlg.Pulse( lang.getstr("enumerating_displays_and_comports")) instruments = [] if enumerate_ports: cmd = get_argyll_util("dispcal") else: cmd = get_argyll_util("dispwin") for instrument in getcfg("instruments").split(os.pathsep): # Names are canonical from 1.1.4.7 onwards, but we may have # verbose names from an old configuration instrument = get_canonical_instrument_name(instrument) if instrument.strip(): instruments.append(instrument) argyll_bin_dir = os.path.dirname(cmd) if (argyll_bin_dir != self.argyll_bin_dir): self.argyll_bin_dir = argyll_bin_dir safe_print(self.argyll_bin_dir) result = self.exec_cmd(cmd, ["-?"], capture_output=True, skip_scripts=True, silent=True, log_output=False) if isinstance(result, Exception): safe_print(result) arg = None defaults["calibration.black_point_rate.enabled"] = 0 n = -1 self.display_rects = [] non_standard_display_args = ("-dweb[:port]", "-dmadvr") for line in self.output: if isinstance(line, unicode): n += 1 line = line.strip() if n == 0 and "version" in line.lower(): argyll_version_string = line[line.lower().find("version") + 8:] if (argyll_version_string != self.argyll_version_string): self.set_argyll_version_from_string(argyll_version_string) safe_print("Argyll CMS " + self.argyll_version_string) config.defaults["copyright"] = ("No copyright. Created " "with %s %s and Argyll " "CMS %s" % (appname, version, argyll_version_string)) if self.argyll_version > [1, 0, 4]: # Rate of blending from neutral to black point. defaults["calibration.black_point_rate.enabled"] = 1 continue line = line.split(None, 1) if len(line) and line[0][0] == "-": arg = line[0] if arg == "-A": # Rate of blending from neutral to black point. defaults["calibration.black_point_rate.enabled"] = 1 elif arg in non_standard_display_args: displays.append(arg) elif len(line) > 1 and line[1][0] == "=": value = line[1].strip(" ='") if arg == "-d": match = re.findall("(.+?),? at (-?\d+), (-?\d+), " "width (\d+), height (\d+)", value) if len(match): display = "%s @ %s, %s, %sx%s" % match[0] if " ".join(value.split()[-2:]) == \ "(Primary Display)": display += u" [PRIMARY]" displays.append(display) self.display_rects.append( wx.Rect(*[int(item) for item in match[0][1:]])) elif arg == "-c": if ((re.match("/dev/tty\w?\d+$", value) or re.match("COM\d+$", value)) and getcfg("skip_legacy_serial_ports")): # Skip all legacy serial ports (this means we # deliberately don't support DTP92 and # Spectrolino, although they may work when # used with a serial to USB adaptor) continue value = value.split(None, 1) if len(value) > 1: value = value[1].strip("()") else: value = value[0] value = get_canonical_instrument_name(value) instruments.append(value) if test: inames = all_instruments.keys() inames.sort() for iname in inames: iname = get_canonical_instrument_name(iname) if not iname in instruments: instruments.append(iname) if verbose >= 1 and not silent: safe_print(lang.getstr("success")) if getattr(wx.GetApp(), "progress_dlg", None) and \ wx.GetApp().progress_dlg.IsShownOnScreen(): wx.GetApp().progress_dlg.Pulse( lang.getstr("success")) if instruments != self.instruments: self.instruments = instruments setcfg("instruments", os.pathsep.join(instruments)) if displays != self._displays: self._displays = list(displays) displays = filter(lambda display: not display in non_standard_display_args, displays) self.display_edid = [] self.display_manufacturers = [] self.display_names = [] if sys.platform == "win32": # The ordering will work as long # as Argyll continues using # EnumDisplayMonitors monitors = util_win.get_real_display_devices_info() for i, display in enumerate(displays): display_name = displays[i].split("@")[0].strip() # Make sure we have nice descriptions desc = [] if sys.platform == "win32" and i < len(monitors): # Get monitor description using win32api device = util_win.get_active_display_device( monitors[i]["Device"]) if device: desc.append(device.DeviceString.decode(fs_enc, "replace")) # Get monitor descriptions from EDID try: # Important: display_name must be given for get_edid # under Mac OS X, but it doesn't hurt to always # include it edid = get_edid(i, display_name) except (TypeError, ValueError, WMIError): edid = {} self.display_edid.append(edid) if edid: manufacturer = edid.get("manufacturer", "").split() monitor = edid.get("monitor_name", edid.get("ascii", str(edid["product_id"] or ""))) if monitor and not monitor in "".join(desc): desc = [monitor] else: manufacturer = [] if desc and desc[-1] not in display: # Only replace the description if it not already # contains the monitor model displays[i] = " @".join([" ".join(desc), display.split("@")[1]]) self.display_manufacturers.append(" ".join(manufacturer)) self.display_names.append(displays[i].split("@")[0].strip()) if self.argyll_version >= [1, 4, 0]: displays.append("Web @ localhost") self.display_edid.append({}) self.display_manufacturers.append("") self.display_names.append("Web") if self.argyll_version >= [1, 6, 0]: displays.append("madVR") self.display_edid.append({}) self.display_manufacturers.append("") self.display_names.append("madVR") displays.append("Untethered") self.display_edid.append({}) self.display_manufacturers.append("") self.display_names.append("Untethered") self.displays = displays setcfg("displays", os.pathsep.join(displays)) # Filter out Untethered displays = displays[:-1] if self.argyll_version >= [1, 6, 0]: # Filter out madVR displays = displays[:-1] if self.argyll_version >= [1, 4, 0]: # Filter out Web @ localhost displays = displays[:-1] if check_lut_access: dispwin = get_argyll_util("dispwin") for i, disp in enumerate(displays): if verbose >= 1 and not silent: safe_print(lang.getstr("checking_lut_access", (i + 1))) if getattr(wx.GetApp(), "progress_dlg", None) and \ wx.GetApp().progress_dlg.IsShownOnScreen(): wx.GetApp().progress_dlg.Pulse( lang.getstr("checking_lut_access", (i + 1))) test_cal = get_data_path("test.cal") if not test_cal: safe_print(lang.getstr("file.missing", "test.cal")) return # Load test.cal result = self.exec_cmd(dispwin, ["-d%s" % (i +1), "-c", test_cal], capture_output=True, skip_scripts=True, silent=True) if isinstance(result, Exception): safe_print(result) # Check if LUT == test.cal result = self.exec_cmd(dispwin, ["-d%s" % (i +1), "-V", test_cal], capture_output=True, skip_scripts=True, silent=True) if isinstance(result, Exception): safe_print(result) retcode = -1 for line in self.output: if line.find("IS loaded") >= 0: retcode = 0 break # Reset LUT & load profile cal (if any) result = self.exec_cmd(dispwin, ["-d%s" % (i + 1), "-c", self.get_dispwin_display_profile_argument(i)], capture_output=True, skip_scripts=True, silent=True) if isinstance(result, Exception): safe_print(result) lut_access += [retcode == 0] if verbose >= 1 and not silent: if retcode == 0: safe_print(lang.getstr("success")) else: safe_print(lang.getstr("failure")) if getattr(wx.GetApp(), "progress_dlg", None) and \ wx.GetApp().progress_dlg.IsShownOnScreen(): wx.GetApp().progress_dlg.Pulse( lang.getstr("success" if retcode == 0 else "failure")) else: lut_access += [None] * len(displays) if self.argyll_version >= [1, 4, 0]: # Web @ localhost lut_access.append(False) if self.argyll_version >= [1, 6, 0]: # madVR lut_access.append(True) # Untethered lut_access.append(False) self.lut_access = lut_access elif silent or not check_argyll_bin(): self.clear_argyll_info() def exec_cmd(self, cmd, args=[], capture_output=False, display_output=False, low_contrast=True, skip_scripts=False, silent=False, parent=None, asroot=False, log_output=True, title=appname, shell=False, working_dir=None, dry_run=False): """ Execute a command. cmd is the full path of the command. args are the arguments, if any. capture_output (if True) swallows any output from the command and sets the 'output' and 'errors' properties of the Worker instance. display_output shows any captured output if the Worker instance's 'owner' window has a 'LogWindow' child called 'infoframe'. low_contrast (if True) sets low contrast shell colors while the command is run. skip_scripts (if True) skips the creation of shell scripts that allow re-running the command which are created by default. silent (if True) skips most output and also most error dialogs (except unexpected failures) parent sets the parent window for any message dialogs. asroot (if True) on Linux runs the command using sudo. log_output (if True) logs any output if capture_output is also set. title = Title for sudo dialog working_dir = Working directory. If None, will be determined from absulte path of last argument and last argument will be set to only the basename. If False, no working dir will be used and file arguments not changed. """ progress_dlg = getattr(self, "progress_wnd", getattr(wx.GetApp(), "progress_dlg", None)) if parent is None: if progress_dlg and progress_dlg.IsShownOnScreen(): parent = progress_dlg else: parent = self.owner if not capture_output: capture_output = not sys.stdout.isatty() self.clear_cmd_output() if None in [cmd, args]: if verbose >= 1 and not silent: safe_print(lang.getstr("aborted")) return False cmdname = os.path.splitext(os.path.basename(cmd))[0] self.cmdname = cmdname if cmdname == get_argyll_utilname("dispwin"): if "-Sl" in args or "-Sn" in args or (sys.platform == "darwin" and not "-I" in args and mac_ver()[0] >= '10.6'): # Mac OS X 10.6 and up needs root privileges if loading/clearing # calibration # In all other cases, root is only required if installing a # profile to a system location asroot = True working_basename = None if args and args[-1].find(os.path.sep) > -1: working_basename = os.path.basename(args[-1]) if cmdname not in (get_argyll_utilname("dispcal"), get_argyll_utilname("dispread"), get_argyll_utilname("colprof"), get_argyll_utilname("targen"), get_argyll_utilname("txt2ti3")): # Last arg is with extension working_basename = os.path.splitext(working_basename)[0] if working_dir is None: working_dir = os.path.dirname(args[-1]) if working_dir is None: working_dir = self.tempdir if working_dir and not os.path.isdir(working_dir): working_dir = None if (working_basename and working_dir == self.tempdir and not silent and log_output and not getcfg("dry_run")): self.sessionlogfile = LogFile(working_basename, working_dir) self.sessionlogfiles[working_basename] = self.sessionlogfile if verbose >= 1 or not silent: if not silent or verbose >= 3: self.log("-" * 80) if self.sessionlogfile: safe_print("Session log: %s" % working_basename + ".log") safe_print("") if (not silent and (dry_run or getcfg("dry_run")) and not self.cmdrun): safe_print(lang.getstr("dry_run")) safe_print("") self.cmdrun = True if working_dir: self.log(lang.getstr("working_dir")) indent = " " for name in working_dir.split(os.path.sep): self.log(textwrap.fill(name + os.path.sep, 80, expand_tabs=False, replace_whitespace=False, initial_indent=indent, subsequent_indent=indent)) indent += " " self.log("") self.log(lang.getstr("commandline")) printcmdline(cmd if verbose >= 2 else os.path.basename(cmd), args, fn=self.log, cwd=working_dir) self.log("") if not silent and (dry_run or getcfg("dry_run")): if not self.lastcmdname or self.lastcmdname == cmdname: safe_print(lang.getstr("dry_run.end")) if self.owner and hasattr(self.owner, "infoframe"): wx.CallAfter(self.owner.infoframe.Show) return UnloggedInfo(lang.getstr("dry_run.info")) cmdline = [cmd] + args if working_dir: for i, item in enumerate(cmdline): if i > 0 and (item.find(os.path.sep) > -1 and os.path.dirname(item) == working_dir): # Strip the path from all items in the working dir if sys.platform == "win32" and \ re.search("[^\x20-\x7e]", os.path.basename(item)) and os.path.exists(item): # Avoid problems with encoding item = win32api.GetShortPathName(item) cmdline[i] = os.path.basename(item) if (sys.platform == "win32" and re.search("[^\x20-\x7e]", working_dir) and os.path.exists(working_dir)): # Avoid problems with encoding working_dir = win32api.GetShortPathName(working_dir) sudo = None # Run commands through wexpect.spawn instead of subprocess.Popen if # all of these conditions apply: # - command is dispcal, dispread or spotread # - arguments are not empty # - actual user interaction in a terminal is not needed OR # we are on Windows and running without a console measure_cmds = (get_argyll_utilname("dispcal"), get_argyll_utilname("dispread"), get_argyll_utilname("spotread")) process_cmds = (get_argyll_utilname("collink"), get_argyll_utilname("colprof"), get_argyll_utilname("targen")) interact = args and not "-?" in args and cmdname in measure_cmds + process_cmds self.measure_cmd = not "-?" in args and cmdname in measure_cmds if asroot and ((sys.platform != "win32" and os.geteuid() != 0) or (sys.platform == "win32" and sys.getwindowsversion() >= (6, ))): if sys.platform == "win32": # Vista and later pass else: sudo = which("sudo") if sudo: if not self.pwd: # Determine available sudo options if not self.sudo_availoptions: man = which("man") if man: manproc = sp.Popen([man, "sudo"], stdout=sp.PIPE, stderr=sp.PIPE) # Strip formatting stdout = re.sub(".\x08", "", manproc.communicate()[0]) self.sudo_availoptions = {"E": bool(re.search("-E", stdout)), "l [command]": bool(re.search("-l(?:\[l\])?\s+\[command\]", stdout)), "n": bool(re.search("-n", stdout))} else: self.sudo_availoptions = {"E": False, "l [command]": False, "n": False} if debug: safe_print("[D] Available sudo options:", ", ".join(filter(lambda option: self.sudo_availoptions[option], self.sudo_availoptions.keys()))) # Set sudo args based on available options if self.sudo_availoptions["l [command]"]: sudo_args = ["-l", "-n" if self.sudo_availoptions["n"] else "-S", cmd, "-?"] else: sudo_args = ["-l", "-S"] # Set stdin based on -n option availability if "-S" in sudo_args: stdin = tempfile.SpooledTemporaryFile() stdin.write((self.pwd or "").encode(enc, "replace") + os.linesep) stdin.seek(0) else: stdin = None sudoproc = sp.Popen([sudo] + sudo_args, stdin=stdin, stdout=sp.PIPE, stderr=sp.PIPE) stdout, stderr = sudoproc.communicate() if stdin and not stdin.closed: stdin.close() if not stdout.strip(): # ask for password dlg = ConfirmDialog( parent, title=title, msg=lang.getstr("dialog.enter_password"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-question")) dlg.pwd_txt_ctrl = wx.TextCtrl(dlg, -1, "", size=(320, -1), style=wx.TE_PASSWORD | wx.TE_PROCESS_ENTER) dlg.pwd_txt_ctrl.Bind(wx.EVT_TEXT_ENTER, lambda event: dlg.EndModal(wx.ID_OK)) dlg.sizer3.Add(dlg.pwd_txt_ctrl, 1, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.ok.SetDefault() dlg.pwd_txt_ctrl.SetFocus() dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() sudo_args = ["-l", "-S"] if self.sudo_availoptions["l [command]"]: sudo_args += [cmd, "-?"] while True: if parent and parent is progress_dlg: progress_dlg.MakeModal(False) result = dlg.ShowModal() if parent and parent is progress_dlg: progress_dlg.MakeModal(True) pwd = dlg.pwd_txt_ctrl.GetValue() if result != wx.ID_OK: safe_print(lang.getstr("aborted")) return None stdin = tempfile.SpooledTemporaryFile() stdin.write(pwd.encode(enc, "replace") + os.linesep) stdin.seek(0) sudoproc = sp.Popen([sudo] + sudo_args, stdin=stdin, stdout=sp.PIPE, stderr=sp.PIPE) stdout, stderr = sudoproc.communicate() if not stdin.closed: stdin.close() if stdout.strip(): # password was accepted self.auth_timestamp = time() self.pwd = pwd break else: errstr = unicode(stderr, enc, "replace") if not silent: safe_print(errstr) else: log(errstr) dlg.message.SetLabel( lang.getstr("auth.failed") + "\n" + errstr) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() dlg.Destroy() cmdline.insert(0, sudo) if (cmdname == get_argyll_utilname("dispwin") and sys.platform != "darwin" and self.sudo_availoptions["E"] and getcfg("sudo.preserve_environment")): # Preserve environment so $DISPLAY is set cmdline.insert(1, "-E") if not interact: cmdline.insert(1, "-S") if working_dir and working_basename and not skip_scripts: try: cmdfilename = os.path.join(working_dir, working_basename + "." + cmdname + script_ext) allfilename = os.path.join(working_dir, working_basename + ".all" + script_ext) first = not os.path.exists(allfilename) last = cmdname == get_argyll_utilname("dispwin") cmdfile = open(cmdfilename, "w") allfile = open(allfilename, "a") cmdfiles = Files((cmdfile, allfile)) if first: context = cmdfiles else: context = cmdfile if sys.platform == "win32": context.write("@echo off\n") context.write(('PATH %s;%%PATH%%\n' % os.path.dirname(cmd)).encode(enc, "safe_asciize")) cmdfiles.write('pushd "%~dp0"\n'.encode(enc, "safe_asciize")) if cmdname in (get_argyll_utilname("dispcal"), get_argyll_utilname("dispread")): cmdfiles.write("color 07\n") else: context.write(('PATH=%s:$PATH\n' % os.path.dirname(cmd)).encode(enc, "safe_asciize")) if sys.platform == "darwin" and config.mac_create_app: cmdfiles.write('pushd "`dirname ' '\\"$0\\"`/../../.."\n') else: cmdfiles.write('pushd "`dirname \\"$0\\"`"\n') if cmdname in (get_argyll_utilname("dispcal"), get_argyll_utilname("dispread")) and \ sys.platform != "darwin": cmdfiles.write('echo -e "\\033[40;2;37m" && clear\n') os.chmod(cmdfilename, 0755) os.chmod(allfilename, 0755) cmdfiles.write(u" ".join(quote_args(cmdline)).replace(cmd, cmdname).encode(enc, "safe_asciize") + "\n") if sys.platform == "win32": cmdfiles.write("set exitcode=%errorlevel%\n") if cmdname in (get_argyll_utilname("dispcal"), get_argyll_utilname("dispread")): # Reset to default commandline shell colors cmdfiles.write("color\n") cmdfiles.write("popd\n") cmdfiles.write("if not %exitcode%==0 exit /B %exitcode%\n") else: cmdfiles.write("exitcode=$?\n") if cmdname in (get_argyll_utilname("dispcal"), get_argyll_utilname("dispread")) and \ sys.platform != "darwin": # reset to default commandline shell colors cmdfiles.write('echo -e "\\033[0m" && clear\n') cmdfiles.write("popd\n") cmdfiles.write("if [ $exitcode -ne 0 ]; " "then exit $exitcode; fi\n") cmdfiles.close() if sys.platform == "darwin": if config.mac_create_app: # Could also use .command file directly, but using # applescript allows giving focus to the terminal # window automatically after a delay script = mac_terminal_do_script() + \ mac_terminal_set_colors(do=False) + \ ['-e', 'set shellscript to quoted form of ' '(POSIX path of (path to resource ' '"main.command"))', '-e', 'tell app ' '"Terminal"', '-e', 'do script shellscript ' 'in first window', '-e', 'delay 3', '-e', 'activate', '-e', 'end tell', '-o'] # Part 1: "cmdfile" appfilename = os.path.join(working_dir, working_basename + "." + cmdname + ".app").encode(fs_enc) cmdargs = ['osacompile'] + script + [appfilename] p = sp.Popen(cmdargs, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) p.communicate() shutil.move(cmdfilename, appfilename + "/Contents/Resources/main.command") os.chmod(appfilename + "/Contents/Resources/main.command", 0755) # Part 2: "allfile" appfilename = os.path.join( working_dir, working_basename + ".all.app") cmdargs = ['osacompile'] + script + [appfilename] p = sp.Popen(cmdargs, stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE) p.communicate() shutil.copyfile(allfilename, appfilename + "/Contents/Resources/main.command") os.chmod(appfilename + "/Contents/Resources/main.command", 0755) if last: os.remove(allfilename) except Exception, exception: safe_print("Warning - error during shell script creation:", safe_unicode(exception)) cmdline = [arg.encode(fs_enc) for arg in cmdline] working_dir = None if not working_dir else working_dir.encode(fs_enc) try: if not self.measure_cmd and self.argyll_version >= [1, 2]: # Argyll tools will no longer respond to keys if debug: safe_print("[D] Setting ARGYLL_NOT_INTERACTIVE 1") putenvu("ARGYLL_NOT_INTERACTIVE", "1") elif "ARGYLL_NOT_INTERACTIVE" in os.environ: del os.environ["ARGYLL_NOT_INTERACTIVE"] if debug: safe_print("[D] argyll_version", self.argyll_version) safe_print("[D] ARGYLL_NOT_INTERACTIVE", os.environ.get("ARGYLL_NOT_INTERACTIVE")) if sys.platform not in ("darwin", "win32"): putenvu("ENABLE_COLORHUG", "1") if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None if not interact: if silent: stderr = sp.STDOUT else: stderr = tempfile.SpooledTemporaryFile() if capture_output: stdout = tempfile.SpooledTemporaryFile() elif sys.stdout.isatty(): stdout = sys.stdout else: stdout = sp.PIPE if sudo: stdin = tempfile.SpooledTemporaryFile() stdin.write((self.pwd or "").encode(enc, "replace") + os.linesep) stdin.seek(0) elif sys.stdin.isatty(): stdin = None else: stdin = sp.PIPE else: kwargs = dict(timeout=5, cwd=working_dir, env=os.environ) if sys.platform == "win32": kwargs["codepage"] = windll.kernel32.GetACP() stderr = StringIO() stdout = StringIO() logfiles = [] if (self.interactive and getattr(self, "terminal", None)): logfiles.append(FilteredStream(self.terminal, discard="", triggers=self.triggers)) if log_output: linebuffered_logfiles = [] if sys.stdout.isatty(): linebuffered_logfiles.append(safe_print) else: linebuffered_logfiles.append(log) if self.sessionlogfile: linebuffered_logfiles.append(self.sessionlogfile) logfiles.append(LineBufferedStream( FilteredStream(Files(linebuffered_logfiles), self.data_encoding, discard="", linesep_in="\n", triggers=[]))) logfiles += [stdout, self.recent, self.lastmsg, self] tries = 1 while tries > 0: if interact: if self.argyll_version >= [1, 2] and USE_WPOPEN and \ os.environ.get("ARGYLL_NOT_INTERACTIVE"): self.subprocess = WPopen(" ".join(cmdline) if shell else cmdline, stdin=sp.PIPE, stdout=tempfile.SpooledTemporaryFile(), stderr=sp.STDOUT, shell=shell, cwd=working_dir, startupinfo=startupinfo) else: # Minimum Windows version: XP or Server 2003 if (sys.platform == "win32" and sys.getwindowsversion() < (5, 1)): return Error(lang.getstr("windows.version.unsupported")) try: self.subprocess = wexpect.spawn(cmdline[0], cmdline[1:], **kwargs) except wexpect.ExceptionPexpect, exception: self.retcode = -1 return Error(safe_unicode(exception)) if debug >= 9 or (test and not "-?" in args): self.subprocess.interact() self.subprocess.logfile_read = Files(logfiles) if self.subprocess.isalive(): if self.measure_cmd: keyhit_strs = [" or Q to ", "8\) Exit"] while self.subprocess.isalive(): self.subprocess.expect(keyhit_strs + ["Current", r" \d+ of \d+", wexpect.EOF], timeout=None) if self.subprocess.after in (wexpect.EOF, None): break if filter(lambda keyhit_str: re.search(keyhit_str, self.subprocess.after), keyhit_strs): # Wait for the keypress while not self.send_buffer: if not self.subprocess.isalive(): break sleep(.05) if (self.send_buffer and self.subprocess.isalive()): self._safe_send(self.send_buffer) self.send_buffer = None else: self.subprocess.expect(wexpect.EOF, timeout=None) if self.subprocess.after not in (wexpect.EOF, wexpect.TIMEOUT): self.subprocess.expect(wexpect.EOF, timeout=None) # We need to call isalive() to set the exitstatus. # We can't use wait() because it might block in the # case of a timeout while self.subprocess.isalive(): sleep(.1) self.retcode = self.subprocess.exitstatus else: try: self.subprocess = sp.Popen(" ".join(cmdline) if shell else cmdline, stdin=stdin, stdout=stdout, stderr=stderr, shell=shell, cwd=working_dir, startupinfo=startupinfo) except Exception, exception: self.retcode = -1 return Error("\n".join([safe_unicode(v) for v in (cmd, exception)])) self.retcode = self.subprocess.wait() if stdin and not getattr(stdin, "closed", True): stdin.close() if self.is_working() and self.subprocess_abort and \ self.retcode == 0: self.retcode = -1 self.subprocess = None tries -= 1 if not silent: stderr.seek(0) errors = stderr.readlines() if not capture_output or stderr is not stdout: stderr.close() if len(errors): for line in errors: if "Instrument Access Failed" in line and \ "-N" in cmdline[:-1]: cmdline.remove("-N") tries = 1 break if line.strip() and \ line.find("User Aborted") < 0 and \ line.find("XRandR 1.2 is faulty - falling back " "to older extensions") < 0: self.errors += [line.decode(enc, "replace")] if tries > 0 and not interact: stderr = tempfile.SpooledTemporaryFile() if capture_output or interact: stdout.seek(0) self.output = [re.sub("^\.{4,}\s*$", "", line.decode(enc, "replace")) for line in stdout.readlines()] stdout.close() if len(self.output) and log_output: if not interact: logfn = log if silent else safe_print self.log("".join(self.output).strip(), logfn) if display_output and self.owner and \ hasattr(self.owner, "infoframe"): wx.CallAfter(self.owner.infoframe.Show) if tries > 0 and not interact: stdout = tempfile.SpooledTemporaryFile() if not silent and len(self.errors): errstr = "".join(self.errors).strip() self.log(errstr) except Exception, exception: if debug: safe_print('[D] working_dir:', working_dir) errmsg = (" ".join(cmdline).decode(fs_enc) + "\n" + safe_unicode(traceback.format_exc())) self.retcode = -1 return Error(errmsg) if debug and not silent: safe_print("*** Returncode:", self.retcode) if self.retcode != 0: if interact and verbose >= 1 and not silent: safe_print(lang.getstr("aborted")) if interact and len(self.output): for i, line in enumerate(self.output): if "Calibrate failed with 'User hit Abort Key' (No device error)" in line: break if ((": Error" in line and not "failed with 'User Aborted'" in line and not "test_crt returned error code 1" in line) or line.startswith("Failed to") or ("Requested ambient light capability" in line and len(self.output) == i + 2) or ("Diagnostic:" in line and (len(self.output) == i + 1 or self.output[i + 1].startswith("usage:")))): # "test_crt returned error code 1" == user aborted if (sys.platform == "win32" and ("config 1 failed (Operation not supported or " "unimplemented on this platform) (Permissions ?)") in line): self.output.insert(i, lang.getstr("argyll.instrument.driver.missing") + "\n\n" + lang.getstr("argyll.error.detail") + " ") if "Diagnostic:" in line: errmsg = line else: errmsg = "".join(self.output[i:]) startpos = errmsg.find(": Error") if startpos > -1: errmsg = errmsg[startpos + 2:] return UnloggedError(errmsg.strip()) return False return True def flush(self): pass def _generic_consumer(self, delayedResult, consumer, continue_next, *args, **kwargs): # consumer must accept result as first arg result = None exception = None try: result = delayedResult.get() except Exception, exception: result = Error(u"Error - delayedResult.get() failed: " + safe_unicode(traceback.format_exc())) if self.progress_start_timer.IsRunning(): self.progress_start_timer.Stop() self.finished = True if not continue_next or isinstance(result, Exception) or not result: self.stop_progress() self.subprocess_abort = False self.thread_abort = False wx.CallAfter(consumer, result, *args, **kwargs) def get_device_id(self, quirk=True): """ Get org.freedesktop.ColorManager device key """ if config.get_display_name() in ("Web", "Untethered", "madVR"): return None edid = self.display_edid[max(0, min(len(self.displays) - 1, getcfg("display.number") - 1))] return colord.device_id_from_edid(edid, quirk=quirk) def get_display(self): """ Get the currently configured display number. Returned is the Argyll CMS dispcal/dispread -d argument """ if config.get_display_name() == "Web": return "web:%i" % getcfg("webserver.portnumber") if config.get_display_name() == "madVR": return "madvr" if config.get_display_name() == "Untethered": return "0" display_no = min(len(self.displays), getcfg("display.number")) - 1 display = str(display_no + 1) if (self.has_separate_lut_access() or getcfg("use_separate_lut_access")) and ( not getcfg("display_lut.link") or (display_no > -1 and not self.lut_access[display_no])): display_lut_no = min(len(self.displays), getcfg("display_lut.number")) - 1 if display_lut_no > -1 and not self.lut_access[display_lut_no]: for display_lut_no, disp in enumerate(self.lut_access): if disp: break display += "," + str(display_lut_no + 1) return display def get_display_edid(self): """ Return EDID of currently configured display """ n = getcfg("display.number") - 1 if n >= 0 and n < len(self.display_edid): return self.display_edid[n] return {} def get_display_name(self, prepend_manufacturer=False, prefer_edid=False): """ Return name of currently configured display """ n = getcfg("display.number") - 1 if n >= 0 and n < len(self.display_names): display = [] manufacturer = None display_name = None if prefer_edid: edid = self.get_display_edid() manufacturer = edid.get("manufacturer") display_name = edid.get("monitor_name", edid.get("ascii", str(edid.get("product_id") or ""))) if not manufacturer: manufacturer = self.display_manufacturers[n] if not display_name: display_name = self.display_names[n] if manufacturer: manufacturer = colord.quirk_manufacturer(manufacturer) if prepend_manufacturer: if manufacturer.lower() not in display_name.lower(): display.append(manufacturer) else: start = display_name.lower().find(manufacturer.lower()) if start > -1: display_name = (display_name[:start] + display_name[start + len(manufacturer):]).lstrip() display.append(display_name) return " ".join(display) return "" def get_display_name_short(self, prepend_manufacturer=False, prefer_edid=False): """ Return shortened name of configured display (if possible) If name can't be shortened (e.g. because it's already 10 characters or less), return full string """ display_name = self.get_display_name(prepend_manufacturer, prefer_edid) if len(display_name) > 10: maxweight = 0 for part in re.findall('[^\s_]+(?:\s*\d+)?', re.sub("\([^)]+\)", "", display_name)): digits = re.search("\d+", part) if digits: # Weigh parts with digits higher than those without chars = re.sub("\d+", "", part) weight = len(chars) + len(digits.group()) * 5 else: # Weigh parts with uppercase letters higher than those without chars = "" for char in part: if char.lower() != char: chars += char weight = len(chars) if chars and weight >= maxweight: # Weigh parts further to the right higher display_name = part maxweight = weight return display_name def get_dispwin_display_profile_argument(self, display_no=0): """ Return argument corresponding to the display profile for use with dispwin. Will either return '-L' (use current profile) or a filename """ arg = "-L" try: profile = ICCP.get_display_profile(display_no) except Exception, exception: safe_print("Error - couldn't get profile for display %s" % display_no) else: if profile and profile.fileName: arg = profile.fileName return arg def update_display_name_manufacturer(self, ti3, display_name=None, display_manufacturer=None, write=True): """ Update display name and manufacturer in colprof arguments embedded in 'ARGYLL_COLPROF_ARGS' section in a TI3 file. """ options_colprof = [] if not display_name and not display_manufacturer: # Note: Do not mix'n'match display name and manufacturer from # different sources for option in get_options_from_ti3(ti3)[1]: if option[0] == "M": display_name = option.split(None, 1)[-1][1:-1] elif option[0] == "A": display_manufacturer = option.split(None, 1)[-1][1:-1] if not display_name and not display_manufacturer: # Note: Do not mix'n'match display name and manufacturer from # different sources edid = self.display_edid[max(0, min(len(self.displays), getcfg("display.number") - 1))] display_name = edid.get("monitor_name", edid.get("ascii", str(edid.get("product_id") or ""))) display_manufacturer = edid.get("manufacturer") if not display_name and not display_manufacturer: # Note: Do not mix'n'match display name and manufacturer from # different sources display_name = self.get_display_name() if display_name: options_colprof.append("-M") options_colprof.append(display_name) if display_manufacturer: options_colprof.append("-A") options_colprof.append(display_manufacturer) if write: # Add dispcal and colprof arguments to ti3 ti3 = add_options_to_ti3(ti3, self.options_dispcal, options_colprof) if ti3: ti3.write() return options_colprof def get_instrument_features(self): """ Return features of currently configured instrument """ features = all_instruments.get(self.get_instrument_name(), {}) if test_require_sensor_cal: features["sensor_cal"] = True features["skip_sensor_cal"] = False return features def get_instrument_name(self): """ Return name of currently configured instrument """ n = getcfg("comport.number") - 1 if n >= 0 and n < len(self.instruments): return self.instruments[n] return "" def has_lut_access(self): display_no = min(len(self.lut_access), getcfg("display.number")) - 1 return display_no > -1 and self.lut_access[display_no] def has_separate_lut_access(self): """ Return True if separate LUT access is possible and needed. """ if self.argyll_version >= [1, 6, 0]: # filter out Web @ localhost, madVR and Untethered lut_access = self.lut_access[:-3] elif self.argyll_version >= [1, 4, 0]: # filter out Web @ localhost and Untethered lut_access = self.lut_access[:-2] else: # filter out Untethered lut_access = self.lut_access[:-1] return (len(self.displays) > 1 and False in lut_access and True in lut_access) def import_colorimeter_corrections(self, cmd, args=None): """ Import colorimeter corrections. cmd can be 'i1d3ccss', 'spyd4en' or 'oeminst' """ if not args: args = [] needroot = sys.platform != "win32" if (is_superuser() or needroot) and not "-Sl" in args: # If we are root or need root privs anyway, install to local # system scope args.insert(0, "-Sl") return self.exec_cmd(cmd, ["-v"] + args, capture_output=True, skip_scripts=True, silent=False, asroot=needroot) def import_edr(self, args=None): """ Import X-Rite .edr files """ return self.import_colorimeter_corrections(get_argyll_util("i1d3ccss"), args) def import_spyd4cal(self, args=None): """ Import Spyder4 calibrations to spy4cal.bin """ return self.import_colorimeter_corrections(get_argyll_util("spyd4en"), args) def install_profile(self, profile_path, capture_output=True, skip_scripts=False, silent=False): """ Install a profile by copying it to an appropriate location and registering it with the system """ result = True colord_install = False gcm_import = False oy_install = False argyll_install = self._install_profile_argyll(profile_path, capture_output, skip_scripts, silent) if sys.platform not in ("darwin", "win32") and not getcfg("dry_run"): device_id = self.get_device_id(quirk=True) if device_id and colord.Colord: try: client = colord.client_connect() device = colord.device_connect(client, device_id) except colord.CDError: device_id = self.get_device_id(quirk=False) # FIXME: This can block, so should really be run in separate # thread with progress dialog in 'indeterminate' mode result = self._install_profile_colord(profile_path, device_id) colord_install = result if (not device_id or not colord.Colord or isinstance(result, Exception) or not result): gcm_import = bool(which("gcm-import")) if (isinstance(result, Exception) or not result) and gcm_import: # Fall back to gcm-import if colord profile install failed result = gcm_import if (not isinstance(result, Exception) and result and which("oyranos-monitor") and self.check_display_conf_oy_compat(getcfg("display.number"))): if device_id: profile_name = re.sub("[- ]", "_", device_id.lower()) + ".icc" else: profile_name = None result = self._install_profile_oy(profile_path, profile_name, capture_output, skip_scripts, silent) oy_install = result if not isinstance(result, Exception) and result: if isinstance(argyll_install, Exception) or not argyll_install: # Fedora's Argyll cannot install profiles using dispwin # Check if profile installation via colord or oyranos-monitor # was successful and continue if not isinstance(colord_install, Exception) and colord_install: result = colord_install elif not isinstance(oy_install, Exception) and oy_install: result = oy_install else: result = argyll_install if not isinstance(result, Exception) and result: if getcfg("profile.install_scope") == "l": # We need a system-wide config file to store the path to # the Argyll binaries result = config.makecfgdir("system", self) if result: result = config.writecfg("system", self) if not result: return Error(lang.getstr("error.autostart_system")) if sys.platform == "win32": if getcfg("profile.load_on_login"): result = self._install_profile_loader_win32(silent) elif sys.platform != "darwin": if getcfg("profile.load_on_login"): result = self._install_profile_loader_xdg(silent) if gcm_import: self._install_profile_gcm(profile_path) if not isinstance(result, Exception) and result and not gcm_import: if verbose >= 1: safe_print(lang.getstr("success")) if sys.platform == "darwin" and False: # NEVER # If installing the profile by just copying it to the # right location, tell user to select it manually msg = lang.getstr("profile.install.osx_manual_select") else: msg = lang.getstr("profile.install.success") result = Info(msg) else: if result is not None and not getcfg("dry_run"): if verbose >= 1: safe_print(lang.getstr("failure")) result = Error(lang.getstr("profile.install.error")) return result def _install_profile_argyll(self, profile_path, capture_output=False, skip_scripts=False, silent=False): """ Install profile using dispwin """ if (sys.platform == "darwin" and False): # NEVER # Alternate way of 'installing' the profile under OS X by just # copying it profiles = os.path.join("Library", "ColorSync", "Profiles") profile_install_path = os.path.join(profiles, os.path.basename(profile_path)) network = os.path.join(os.path.sep, "Network", profiles) if getcfg("profile.install_scope") == "l": profile_install_path = os.path.join(os.path.sep, profile_install_path) elif (getcfg("profile.install_scope") == "n" and os.path.isdir(network)): profile_install_path = os.path.join(network, profile_install_path) else: profile_install_path = os.path.join(os.path.expanduser("~"), profile_install_path) cmd, args = "cp", ["-f", profile_path, profile_install_path] result = self.exec_cmd(cmd, args, capture_output, low_contrast=False, skip_scripts=skip_scripts, silent=silent, asroot=getcfg("profile.install_scope") in ("l", "n"), title=lang.getstr("profile.install")) if not isinstance(result, Exception) and result: self.output = ["Installed"] else: if (sys.platform == "win32" and sys.getwindowsversion() >= (6, ) and not util_win.per_user_profiles_isenabled()): # Enable per-user profiles under Vista / Windows 7 try: util_win.enable_per_user_profiles(True, getcfg("display.number") - 1) except Exception, exception: safe_print("util_win.enable_per_user_profiles(True, %s): %s" % (getcfg("display.number") - 1, safe_unicode(exception))) cmd, args = self.prepare_dispwin(None, profile_path, True) if not isinstance(cmd, Exception): if "-Sl" in args and (sys.platform != "darwin" or intlist(mac_ver()[0].split(".")) >= [10, 6]): # If a 'system' install is requested under Linux, # Mac OS X >= 10.6 or Windows, # install in 'user' scope first because a system-wide install # doesn't also set it as current user profile on those systems # (on Mac OS X < 10.6, we can use ColorSyncScripting to set it). # It has the small drawback under Linux and OS X 10.6 that # it will copy the profile to both the user and system-wide # locations, though, which is not a problem under Windows as # they are the same. args.remove("-Sl") result = self.exec_cmd(cmd, args, capture_output, low_contrast=False, skip_scripts=skip_scripts, silent=silent, title=lang.getstr("profile.install")) args.insert(0, "-Sl") else: result = True if not isinstance(result, Exception) and result: result = self.exec_cmd(cmd, args, capture_output, low_contrast=False, skip_scripts=skip_scripts, silent=silent, title=lang.getstr("profile.install")) else: result = cmd if not isinstance(result, Exception) and result is not None: result = False for line in self.output: if "Installed" in line: if (sys.platform == "darwin" and "-Sl" in args and intlist(mac_ver()[0].split(".")) < [10, 6]): # The profile has been installed, but we need a little # help from AppleScript to actually make it the default # for the current user. Only works under Mac OS < 10.6 n = getcfg("display.number") path = os.path.join(os.path.sep, "Library", "ColorSync", "Profiles", os.path.basename(args[-1])) applescript = ['tell app "ColorSyncScripting"', 'set displayProfile to POSIX file "%s" as alias' % path, 'set display profile of display %i to displayProfile' % n, 'end tell'] try: retcode, output, errors = osascript(applescript) except Exception, exception: safe_print(exception) else: if errors.strip(): safe_print("osascript error: %s" % errors) else: result = True break elif (sys.platform == "darwin" and False): # NEVER # After 'installing' a profile under Mac OS X by just # copying it, show system preferences applescript = ['tell application "System Preferences"', 'activate', 'set current pane to pane id "com.apple.preference.displays"', 'reveal (first anchor of current pane whose name is "displaysColorTab")', # This needs access for assistive devices enabled #'tell application "System Events"', #'tell process "System Preferences"', #'select row 2 of table 1 of scroll area 1 of group 1 of tab group 1 of window ""', #'end tell', #'end tell', 'end tell'] try: retcode, output, errors = osascript(applescript) except Exception, exception: safe_print(exception) else: if errors.strip(): safe_print("osascript error: %s" % errors) else: result = True else: result = True break self.wrapup(False) return result def _install_profile_colord(self, profile_path, device_id): """ Install profile using colord """ try: colord.install_profile(device_id, profile_path) except Exception, exception: safe_print(exception) return exception return True def _install_profile_gcm(self, profile_path): """ Install profile using gcm-import """ # Remove old profile so gcm-import can work profilename = os.path.basename(profile_path) for dirname in iccprofiles_home: profile_install_path = os.path.join(dirname, profilename) if os.path.isfile(profile_install_path) and \ profile_install_path != profile_path: try: trash([profile_install_path]) except Exception, exception: safe_print(exception) # Run gcm-import cmd, args = which("gcm-import"), [profile_path] args = " ".join('"%s"' % arg for arg in args) safe_print('%s %s &' % (cmd, args)) sp.call(('%s %s &' % (cmd, args)).encode(fs_enc), shell=True) def _install_profile_oy(self, profile_path, profile_name=None, capture_output=False, skip_scripts=False, silent=False): """ Install profile using oyranos-monitor """ display = self.displays[max(0, min(len(self.displays) - 1, getcfg("display.number") - 1))] x, y = [pos.strip() for pos in display.split(" @")[1].split(",")[0:2]] if getcfg("profile.install_scope") == "l": # If system-wide install, copy profile to # /var/lib/color/icc/devices/display var_icc = "/var/lib/color/icc/devices/display" if not profile_name: profile_name = os.path.basename(profile_path) profile_install_path = os.path.join(var_icc, profile_name) result = self.exec_cmd("mkdir", ["-p", os.path.dirname(profile_install_path)], capture_output=True, low_contrast=False, skip_scripts=True, silent=True, asroot=True) if not isinstance(result, Exception) and result: result = self.exec_cmd("cp", ["-f", profile_path, profile_install_path], capture_output=True, low_contrast=False, skip_scripts=True, silent=True, asroot=True) else: result = True dirname = None for dirname in iccprofiles_display_home: if os.path.isdir(dirname): # Use the first one that exists break else: dirname = None if not dirname: # Create the first one in the list dirname = iccprofiles_display_home[0] try: os.makedirs(dirname) except Exception, exception: safe_print(exception) result = False if result is not False: profile_install_path = os.path.join(dirname, os.path.basename(profile_path)) try: shutil.copyfile(profile_path, profile_install_path) except Exception, exception: safe_print(exception) result = False if not isinstance(result, Exception) and result is not False: cmd = which("oyranos-monitor") args = ["-x", x, "-y", y, profile_install_path] result = self.exec_cmd(cmd, args, capture_output, low_contrast=False, skip_scripts=skip_scripts, silent=silent, working_dir=False) ##if getcfg("profile.install_scope") == "l": ##result = self.exec_cmd(cmd, args, ##capture_output, ##low_contrast=False, ##skip_scripts=skip_scripts, ##silent=silent, ##asroot=True, ##working_dir=False) return result def _install_profile_loader_win32(self, silent=False): """ Install profile loader """ if (sys.platform == "win32" and sys.getwindowsversion() >= (6, 1) and util_win.calibration_management_isenabled()): self._uninstall_profile_loader_win32() return True # Must return either True on success or an Exception object on error result = True # Remove outdated (pre-0.5.5.9) profile loaders display_no = self.get_display() name = "%s Calibration Loader (Display %s)" % (appname, display_no) if autostart_home: loader_v01b = os.path.join(autostart_home, ("dispwin-d%s-c-L" % display_no) + ".lnk") if os.path.exists(loader_v01b): try: # delete v0.1b loader os.remove(loader_v01b) except Exception, exception: safe_print(u"Warning - could not remove old " u"v0.1b calibration loader '%s': %s" % tuple(safe_unicode(s) for s in (loader_v01b, exception))) loader_v02b = os.path.join(autostart_home, name + ".lnk") if os.path.exists(loader_v02b): try: # delete v02.b/v0.2.1b loader os.remove(loader_v02b) except Exception, exception: safe_print(u"Warning - could not remove old " u"v0.2b calibration loader '%s': %s" % tuple(safe_unicode(s) for s in (loader_v02b, exception))) loader_v0558 = os.path.join(autostart_home, name + ".lnk") if os.path.exists(loader_v0558): try: # delete v0.5.5.8 user loader os.remove(loader_v0558) except Exception, exception: safe_print(u"Warning - could not remove old " u"v0.2b calibration loader '%s': %s" % tuple(safe_unicode(s) for s in (loader_v02b, exception))) if autostart: loader_v0558 = os.path.join(autostart, name + ".lnk") if os.path.exists(loader_v0558): try: # delete v0.5.5.8 system loader os.remove(loader_v0558) except Exception, exception: safe_print(u"Warning - could not remove old " u"v0.2b calibration loader '%s': %s" % tuple(safe_unicode(s) for s in (loader_v02b, exception))) # Create unified loader name = appname + " Profile Loader" if autostart: autostart_lnkname = os.path.join(autostart, name + ".lnk") if autostart_home: autostart_home_lnkname = os.path.join(autostart_home, name + ".lnk") loader_args = [] if os.path.basename(sys.executable) in ("python.exe", "pythonw.exe"): cmd = sys.executable loader_args += [u'"%s"' % get_data_path(os.path.join("scripts", "dispcalGUI-apply-profiles"))] else: cmd = os.path.join(pydir, "dispcalGUI-apply-profiles.exe") try: scut = pythoncom.CoCreateInstance(shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink) scut.SetPath(cmd) scut.SetWorkingDirectory(pydir) if isexe: scut.SetIconLocation(exe, 0) else: scut.SetIconLocation(get_data_path(os.path.join("theme", "icons", appname + ".ico")), 0) scut.SetArguments(" ".join(loader_args)) scut.SetShowCmd(win32con.SW_SHOWMINNOACTIVE) if is_superuser(): if autostart: try: scut.QueryInterface(pythoncom.IID_IPersistFile).Save(autostart_lnkname, 0) except Exception, exception: if not silent: result = Warning(lang.getstr("error.autostart_creation", autostart) + "\n\n" + safe_unicode(exception)) # Now try user scope else: if not silent: result = Warning(lang.getstr("error.autostart_system")) if autostart_home: if (autostart and os.path.isfile(autostart_lnkname)): # Remove existing user loader if os.path.isfile(autostart_home_lnkname): os.remove(autostart_home_lnkname) else: # Only create user loader if no system loader try: scut.QueryInterface( pythoncom.IID_IPersistFile).Save( autostart_home_lnkname, 0) except Exception, exception: if not silent: result = Warning(lang.getstr("error.autostart_creation", autostart_home) + "\n\n" + safe_unicode(exception)) else: if not silent: result = Warning(lang.getstr("error.autostart_user")) except Exception, exception: if not silent: result = Warning(lang.getstr("error.autostart_creation", autostart_home) + "\n\n" + safe_unicode(exception)) return result def _uninstall_profile_loader_win32(self): """ Uninstall profile loader """ name = appname + " Profile Loader" if autostart and is_superuser(): autostart_lnkname = os.path.join(autostart, name + ".lnk") if os.path.exists(autostart_lnkname): try: os.remove(autostart_lnkname) except Exception, exception: safe_print(autostart_lnkname, exception) if autostart_home: autostart_home_lnkname = os.path.join(autostart_home, name + ".lnk") if os.path.exists(autostart_home_lnkname): try: os.remove(autostart_home_lnkname) except Exception, exception: safe_print(autostart_home_lnkname, exception) return True def _install_profile_loader_xdg(self, silent=False): """ Install profile loader """ # See http://standards.freedesktop.org/autostart-spec # Must return either True on success or an Exception object on error result = True # Remove outdated (pre-0.5.5.9) profile loaders name = "%s-Calibration-Loader-Display-%s" % (appname, self.get_display()) desktopfile_path = os.path.join(autostart_home, name + ".desktop") oy_desktopfile_path = os.path.join(autostart_home, "oyranos-monitor.desktop") system_desktopfile_path = os.path.join( autostart, name + ".desktop") # Remove old (pre-0.5.5.9) dispwin user loader if os.path.exists(desktopfile_path): try: os.remove(desktopfile_path) except Exception, exception: result = Warning(lang.getstr("error.autostart_remove_old", desktopfile_path)) # Remove old (pre-0.5.5.9) oyranos user loader if os.path.exists(oy_desktopfile_path): try: os.remove(oy_desktopfile_path) except Exception, exception: result = Warning(lang.getstr("error.autostart_remove_old", oy_desktopfile_path)) # Remove old (pre-0.5.5.9) dispwin system loader if (os.path.exists(system_desktopfile_path) and (self.exec_cmd("rm", ["-f", system_desktopfile_path], capture_output=True, low_contrast=False, skip_scripts=True, silent=False, asroot=True, title=lang.getstr("autostart_remove_old")) is not True) and not silent): result = Warning(lang.getstr("error.autostart_remove_old", system_desktopfile_path)) # Create unified loader # Prepend 'z' so our loader hopefully loads after # possible nvidia-settings entry (which resets gamma table) name = "z-%s-apply-profiles" % appname desktopfile_path = os.path.join(autostart_home, name + ".desktop") system_desktopfile_path = os.path.join(autostart, name + ".desktop") if not os.path.exists(system_desktopfile_path) and \ not os.path.exists(desktopfile_path): try: # Create user loader, even if we later try to # move it to the system-wide location so that atleast # the user loader is present if the move to the system # dir fails if not os.path.exists(autostart_home): os.makedirs(autostart_home) desktopfile = open(desktopfile_path, "w") desktopfile.write('[Desktop Entry]\n') desktopfile.write('Version=1.0\n') desktopfile.write('Encoding=UTF-8\n') desktopfile.write('Type=Application\n') desktopfile.write('Name=%s\n' % (appname + ' Profile Loader').encode("UTF-8")) desktopfile.write('Comment=%s\n' % lang.getstr("calibrationloader.description", lcode="en").encode("UTF-8")) if lang.getcode() != "en": desktopfile.write(('Comment[%s]=%s\n' % (lang.getcode(), lang.getstr("calibrationloader.description"))).encode("UTF-8")) desktopfile.write('Icon=%s\n' % appname.encode("UTF-8")) desktopfile.write('Exec=%s-apply-profiles\n' % appname.encode("UTF-8")) desktopfile.write('Terminal=false\n') desktopfile.close() except Exception, exception: if not silent: result = Warning(lang.getstr("error.autostart_creation", desktopfile_path) + "\n\n" + safe_unicode(exception)) else: if getcfg("profile.install_scope") == "l" and autostart: # Move system-wide loader if (self.exec_cmd("mkdir", ["-p", autostart], capture_output=True, low_contrast=False, skip_scripts=True, silent=True, asroot=True) is not True or self.exec_cmd("mv", ["-f", desktopfile_path, system_desktopfile_path], capture_output=True, low_contrast=False, skip_scripts=True, silent=True, asroot=True) is not True) and \ not silent: result = Warning(lang.getstr("error.autostart_creation", system_desktopfile_path)) return result def instrument_supports_ccss(self): """ Return whether instrument supports CCSS files or not """ instrument_name = self.get_instrument_name() return ("i1 DisplayPro, ColorMunki Display" in instrument_name or "Spyder4" in instrument_name) def create_ccxx(self, args=None, working_dir=None): """ Create CCMX or CCSS """ if not args: args = [] cmd = get_argyll_util("ccxxmake") if not "-I" in args: # Display manufacturer & name name = self.get_display_name(True) if name: args.insert(0, "-I") args.insert(1, name) elif not "-T" in args: # Display technology args.insert(0, "-T") displaytech = ["LCD" if getcfg("measurement_mode") == "l" else "CRT"] if (self.get_instrument_features().get("projector_mode") and getcfg("measurement_mode.projector")): displaytech.append("Projector") args.insert(1, " ".join(displaytech)) return self.exec_cmd(cmd, ["-v"] + args, capture_output=True, skip_scripts=True, silent=False, working_dir=working_dir) def create_gamut_views(self, profile_path): """ Generate gamut views (VRML files) and show progress in current progress dialog """ if getcfg("profile.create_gamut_views"): safe_print("-" * 80) safe_print(lang.getstr("gamut.view.create")) self.recent.clear() self.recent.write(lang.getstr("gamut.view.create")) sleep(.75) # Allow time for progress window to update return self.calculate_gamut(profile_path) else: return None, None def create_profile(self, dst_path=None, skip_scripts=False, display_name=None, display_manufacturer=None, tags=None): """ Create an ICC profile and process the generated file """ safe_print(lang.getstr("create_profile")) if dst_path is None: dst_path = os.path.join(getcfg("profile.save_path"), getcfg("profile.name.expanded"), getcfg("profile.name.expanded") + profile_ext) cmd, args = self.prepare_colprof( os.path.basename(os.path.splitext(dst_path)[0]), display_name, display_manufacturer) if not isinstance(cmd, Exception): result = self.exec_cmd(cmd, args, low_contrast=False, skip_scripts=skip_scripts) else: result = cmd # Get profile max and avg err to be later added to metadata # Argyll outputs the following: # Profile check complete, peak err = x.xxxxxx, avg err = x.xxxxxx, RMS = x.xxxxxx peak = None avg = None rms = None for line in self.output: if line.startswith("Profile check complete"): peak = re.search("peak err = (\d+(?:\.\d+))", line) avg = re.search("avg err = (\d+(?:\.\d+))", line) rms = re.search("RMS = (\d+(?:\.\d+))", line) if peak: peak = peak.groups()[0] if avg: avg = avg.groups()[0] if rms: rms = rms.groups()[0] break if (os.path.isfile(args[-1] + ".ti3.backup") and os.path.isfile(args[-1] + ".ti3")): # Restore backed up TI3 os.rename(args[-1] + ".ti3", args[-1] + ".bpc.ti3") os.rename(args[-1] + ".ti3.backup", args[-1] + ".ti3") ti3_file = open(args[-1] + ".ti3", "rb") ti3 = ti3_file.read() ti3_file.close() else: ti3 = None if os.path.isfile(args[-1] + ".chrm"): # Get ChromaticityType tag with open(args[-1] + ".chrm", "rb") as blob: chrm = ICCP.ChromaticityType(blob.read()) else: chrm = None if not isinstance(result, Exception) and result: (gamut_volume, gamut_coverage) = self.create_gamut_views(args[-1] + profile_ext) safe_print("-" * 80) if not isinstance(result, Exception) and result: result = self.update_profile(args[-1] + profile_ext, ti3, chrm, tags, avg, peak, rms, gamut_volume, gamut_coverage, quality=getcfg("profile.quality")) result2 = self.wrapup(not isinstance(result, UnloggedInfo) and result, dst_path=dst_path) if isinstance(result2, Exception): if isinstance(result, Exception): result = Error(safe_unicode(result) + "\n\n" + safe_unicode(result2)) else: result = result2 elif not isinstance(result, Exception) and result: setcfg("last_cal_or_icc_path", dst_path) setcfg("last_icc_path", dst_path) return result def update_profile(self, profile, ti3=None, chrm=None, tags=None, avg=None, peak=None, rms=None, gamut_volume=None, gamut_coverage=None, quality=None): """ Update profile tags and metadata """ if isinstance(profile, basestring): profile_path = profile try: profile = ICCP.ICCProfile(profile_path) except (IOError, ICCP.ICCProfileInvalidError), exception: return Error(lang.getstr("profile.invalid") + "\n" + profile_path) else: profile_path = profile.fileName if (profile.profileClass == "mntr" and profile.colorSpace == "RGB" and not (self.tempdir and profile_path.startswith(self.tempdir))): setcfg("last_cal_or_icc_path", profile_path) setcfg("last_icc_path", profile_path) if ti3: # Embed original TI3 profile.tags.targ = profile.tags.DevD = profile.tags.CIED = ICCP.TextType( "text\0\0\0\0" + ti3 + "\0", "targ") if chrm: # Add ChromaticityType tag profile.tags.chrm = chrm # Fixup desc tags - ASCII needs to be 7-bit # also add Unicode strings if different from ASCII if "desc" in profile.tags and isinstance(profile.tags.desc, ICCP.TextDescriptionType): profile.setDescription(profile.getDescription()) if "dmdd" in profile.tags and isinstance(profile.tags.dmdd, ICCP.TextDescriptionType): profile.setDeviceModelDescription( profile.getDeviceModelDescription()) if "dmnd" in profile.tags and isinstance(profile.tags.dmnd, ICCP.TextDescriptionType): profile.setDeviceManufacturerDescription( profile.getDeviceManufacturerDescription()) if tags and tags is not True: # Add custom tags for tagname, tag in tags.iteritems(): if tagname == "mmod": profile.device["manufacturer"] = "\0\0" + tag["manufacturer"][1] + tag["manufacturer"][0] profile.device["model"] = "\0\0" + tag["model"][0] + tag["model"][1] profile.tags[tagname] = tag elif tags is True: edid = self.get_display_edid() if edid: profile.device["manufacturer"] = "\0\0" + edid["edid"][9] + edid["edid"][8] profile.device["model"] = "\0\0" + edid["edid"][11] + edid["edid"][10] # Add Apple-specific 'mmod' tag (TODO: need full spec) mmod = ("mmod" + ("\x00" * 6) + edid["edid"][8:10] + ("\x00" * 2) + edid["edid"][11] + edid["edid"][10] + ("\x00" * 4) + ("\x00" * 20)) profile.tags.mmod = ICCP.ICCProfileTag(mmod, "mmod") # Add new meta information based on EDID profile.set_edid_metadata(edid) elif not "meta" in profile.tags: # Make sure meta tag exists profile.tags.meta = ICCP.DictType() profile.tags.meta.update({"CMF_product": appname, "CMF_binary": appname, "CMF_version": version}) # Set license profile.tags.meta["License"] = getcfg("profile.license") # Set profile quality quality = {"v": "very low", "l": "low", "m": "medium", "h": "high"}.get(quality) if quality: profile.tags.meta["Quality"] = quality # Set OPENICC_automatic_generated to "0" profile.tags.meta["OPENICC_automatic_generated"] = "0" # Set GCM DATA_source to "calib" profile.tags.meta["DATA_source"] = "calib" # Add instrument profile.tags.meta["MEASUREMENT_device"] = self.get_instrument_name().lower() spec_prefixes = "CMF_,DATA_,MEASUREMENT_,OPENICC_" # Add screen brightness if applicable if sys.platform not in ("darwin", "win32") and dbus_session: try: proxy = dbus_session.get_object("org.gnome.SettingsDaemon", "/org/gnome/SettingsDaemon/Power") iface = dbus.Interface(proxy, dbus_interface="org.gnome.SettingsDaemon.Power.Screen") brightness = iface.GetPercentage() except dbus.exceptions.DBusException: pass else: profile.tags.meta["SCREEN_brightness"] = str(brightness) spec_prefixes += ",SCREEN_" # Set device ID device_id = self.get_device_id(quirk=True) if device_id: profile.tags.meta["MAPPING_device_id"] = device_id spec_prefixes += ",MAPPING_" prefixes = (profile.tags.meta.getvalue("prefix", "", None) or spec_prefixes).split(",") for prefix in spec_prefixes.split(","): if not prefix in prefixes: prefixes.append(prefix) profile.tags.meta["prefix"] = ",".join(prefixes) if (avg, peak, rms) != (None, ) * 3: # Make sure meta tag exists if not "meta" in profile.tags: profile.tags.meta = ICCP.DictType() # Update meta prefix prefixes = (profile.tags.meta.getvalue("prefix", "", None) or "ACCURACY_").split(",") if not "ACCURACY_" in prefixes: prefixes.append("ACCURACY_") profile.tags.meta["prefix"] = ",".join(prefixes) # Add error info if avg is not None: profile.tags.meta["ACCURACY_dE76_avg"] = avg if peak is not None: profile.tags.meta["ACCURACY_dE76_max"] = peak if rms is not None: profile.tags.meta["ACCURACY_dE76_rms"] = rms profile.set_gamut_metadata(gamut_volume, gamut_coverage) # Set default rendering intent if ((getcfg("gamap_perceptual") and "B2A0" in profile.tags) or (getcfg("gamap_saturation") and "B2A2" in profile.tags)): profile.intent = {"p": 0, "r": 1, "s": 2, "a": 3}[getcfg("gamap_default_intent")] # Calculate profile ID profile.calculateID() try: profile.write() except Exception, exception: return exception return True def is_working(self): """ Check if the Worker instance is busy. Return True or False. """ return not getattr(self, "finished", True) def log(self, msg, fn=safe_print): fn(msg) if self.sessionlogfile: self.sessionlogfile.write(msg + "\n") def start_measurement(self, consumer, apply_calibration=True, progress_msg="", resume=False, continue_next=False): """ Start a measurement and use a progress dialog for progress information """ self.start(consumer, self.measure, wkwargs={"apply_calibration": apply_calibration}, progress_msg=progress_msg, resume=resume, continue_next=continue_next, pauseable=True) def start_calibration(self, consumer, remove=False, progress_msg="", continue_next=False): """ Start a calibration and use a progress dialog for progress information """ self.start(consumer, self.calibrate, wkwargs={"remove": remove}, progress_msg=progress_msg, continue_next=continue_next, interactive_frame="adjust", pauseable=True) def measure(self, apply_calibration=True): """ Measure the configured testchart """ cmd, args = self.prepare_dispread(apply_calibration) if not isinstance(cmd, Exception): if config.get_display_name() == "Untethered": cmd, args2 = get_argyll_util("spotread"), ["-v", "-e"] if getcfg("extra_args.spotread").strip(): args2 += parse_argument_string(getcfg("extra_args.spotread")) result = self.add_measurement_features(args2, False) if isinstance(result, Exception): return result else: args2 = args result = self.exec_cmd(cmd, args2) if not isinstance(result, Exception) and result: self.update_display_name_manufacturer(args[-1] + ".ti3") else: result = cmd result2 = self.wrapup(not isinstance(result, UnloggedInfo) and result, isinstance(result, Exception) or not result) if isinstance(result2, Exception): if isinstance(result, Exception): result = Error(safe_unicode(result) + "\n\n" + safe_unicode(result2)) else: result = result2 return result def parse(self, txt): if not txt: return self.logger.info("%r" % txt) self.check_instrument_calibration(txt) self.check_instrument_place_on_screen(txt) self.check_instrument_sensor_position(txt) self.check_retry_measurement(txt) self.check_is_ambient_measuring(txt) self.check_spotread_result(txt) def prepare_colprof(self, profile_name=None, display_name=None, display_manufacturer=None): """ Prepare a colprof commandline. All options are read from the user configuration. Profile name and display name can be ovverridden by passing the corresponding arguments. """ profile_save_path = self.create_tempdir() if not profile_save_path or isinstance(profile_save_path, Exception): return profile_save_path, None # Check directory and in/output file(s) result = check_create_dir(profile_save_path) if isinstance(result, Exception): return result, None if profile_name is None: profile_name = getcfg("profile.name.expanded") inoutfile = os.path.join(profile_save_path, make_argyll_compatible_path(profile_name)) if not os.path.exists(inoutfile + ".ti3"): return Error(lang.getstr("error.measurement.file_missing", inoutfile + ".ti3")), None if not os.path.isfile(inoutfile + ".ti3"): return Error(lang.getstr("error.measurement.file_notfile", inoutfile + ".ti3")), None # cmd = get_argyll_util("colprof") args = [] args += ["-v"] # verbose args += ["-q" + getcfg("profile.quality")] args += ["-a" + getcfg("profile.type")] if getcfg("profile.type") in ["l", "x", "X"]: b2a_q = getcfg("profile.quality.b2a") if b2a_q: args += ["-b" + b2a_q] if getcfg("gamap_saturation"): gamap = "S" elif getcfg("gamap_perceptual"): gamap = "s" else: gamap = None if gamap and getcfg("gamap_profile"): args += ["-" + gamap] args += [getcfg("gamap_profile")] args += ["-t" + getcfg("gamap_perceptual_intent")] if gamap == "S": args += ["-T" + getcfg("gamap_saturation_intent")] if getcfg("gamap_src_viewcond"): args += ["-c" + getcfg("gamap_src_viewcond")] if getcfg("gamap_out_viewcond"): args += ["-d" + getcfg("gamap_out_viewcond")] args += ["-C"] args += [getcfg("copyright").encode("ASCII", "asciize")] if getcfg("extra_args.colprof").strip(): args += parse_argument_string(getcfg("extra_args.colprof")) options_dispcal = None if "-d3" in self.options_targen: # only add display desc and dispcal options if creating RGB profile options_dispcal = self.options_dispcal if len(self.displays): args.extend( self.update_display_name_manufacturer(inoutfile + ".ti3", display_name, display_manufacturer, write=False)) self.options_colprof = list(args) args += ["-D"] args += [profile_name] args += [inoutfile] # Add dispcal and colprof arguments to ti3 ti3 = add_options_to_ti3(inoutfile + ".ti3", options_dispcal, self.options_colprof) if ti3: # Prepare ChromaticityType tag colorants = ti3.get_colorants() if colorants and not None in colorants: color_rep = ti3.queryv1("COLOR_REP").split("_") chrm = ICCP.ChromaticityType() chrm.type = 0 for colorant in colorants: if color_rep[1] == "LAB": XYZ = colormath.Lab2XYZ(colorant["LAB_L"], colorant["LAB_A"], colorant["LAB_B"]) else: XYZ = (colorant["XYZ_X"], colorant["XYZ_Y"], colorant["XYZ_Z"]) chrm.channels.append(colormath.XYZ2xyY(*XYZ)[:-1]) with open(inoutfile + ".chrm", "wb") as blob: blob.write(chrm.tagData) # Black point compensation ti3[0].add_keyword("USE_BLACK_POINT_COMPENSATION", "YES" if getcfg("profile.black_point_compensation") else "NO") if getcfg("profile.black_point_compensation"): # Backup TI3 ti3.write(inoutfile + ".ti3.backup") # Apply black point compensation ti3[0].apply_bpc() ti3.write() return cmd, args def prepare_dispcal(self, calibrate=True, verify=False, dry_run=False): """ Prepare a dispcal commandline. All options are read from the user configuration. You can choose if you want to calibrate and/or verify by passing the corresponding arguments. """ cmd = get_argyll_util("dispcal") args = [] args += ["-v2"] # verbose if getcfg("argyll.debug"): args += ["-D6"] result = self.add_measurement_features(args) if isinstance(result, Exception): return result, None if calibrate: args += ["-q" + getcfg("calibration.quality")] profile_save_path = self.create_tempdir() if not profile_save_path or isinstance(profile_save_path, Exception): return profile_save_path, None # Check directory and in/output file(s) result = check_create_dir(profile_save_path) if isinstance(result, Exception): return result, None inoutfile = os.path.join(profile_save_path, make_argyll_compatible_path(getcfg("profile.name.expanded"))) if getcfg("profile.update") or \ self.dispcal_create_fast_matrix_shaper: args += ["-o"] if getcfg("calibration.update") and not dry_run: cal = getcfg("calibration.file") calcopy = os.path.join(inoutfile + ".cal") filename, ext = os.path.splitext(cal) ext = ".cal" cal = filename + ext if ext.lower() == ".cal": result = check_cal_isfile(cal) if isinstance(result, Exception): return result, None if not result: return None, None if not os.path.exists(calcopy): try: # Copy cal to profile dir shutil.copyfile(cal, calcopy) except Exception, exception: return Error(lang.getstr("error.copy_failed", (cal, calcopy)) + "\n\n" + safe_unicode(exception)), None result = check_cal_isfile(calcopy) if isinstance(result, Exception): return result, None if not result: return None, None cal = calcopy else: rslt = extract_fix_copy_cal(cal, calcopy) if isinstance(rslt, ICCP.ICCProfileInvalidError): return Error(lang.getstr("profile.invalid") + "\n" + cal), None elif isinstance(rslt, Exception): return Error(lang.getstr("cal_extraction_failed") + "\n" + cal + "\n\n" + unicode(str(rslt), enc, "replace")), None if not isinstance(rslt, list): return None, None if getcfg("profile.update"): profile_path = os.path.splitext( getcfg("calibration.file"))[0] + profile_ext result = check_profile_isfile(profile_path) if isinstance(result, Exception): return result, None if not result: return None, None profilecopy = os.path.join(inoutfile + profile_ext) if not os.path.exists(profilecopy): try: # Copy profile to profile dir shutil.copyfile(profile_path, profilecopy) except Exception, exception: return Error(lang.getstr("error.copy_failed", (profile_path, profilecopy)) + "\n\n" + safe_unicode(exception)), None result = check_profile_isfile(profilecopy) if isinstance(result, Exception): return result, None if not result: return None, None args += ["-u"] if calibrate or verify: if calibrate and not \ getcfg("calibration.interactive_display_adjustment"): # Skip interactive display adjustment args += ["-m"] whitepoint_colortemp = getcfg("whitepoint.colortemp", False) whitepoint_x = getcfg("whitepoint.x", False) whitepoint_y = getcfg("whitepoint.y", False) if whitepoint_colortemp or None in (whitepoint_x, whitepoint_y): whitepoint = getcfg("whitepoint.colortemp.locus") if whitepoint_colortemp: whitepoint += str(whitepoint_colortemp) args += ["-" + whitepoint] else: args += ["-w%s,%s" % (whitepoint_x, whitepoint_y)] luminance = getcfg("calibration.luminance", False) if luminance: args += ["-b%s" % luminance] args += ["-" + getcfg("trc.type") + str(getcfg("trc"))] args += ["-f%s" % getcfg("calibration.black_output_offset")] if bool(int(getcfg("calibration.ambient_viewcond_adjust"))): args += ["-a%s" % getcfg("calibration.ambient_viewcond_adjust.lux")] if not getcfg("calibration.black_point_correction.auto"): args += ["-k%s" % getcfg("calibration.black_point_correction")] if defaults["calibration.black_point_rate.enabled"] and \ float(getcfg("calibration.black_point_correction")) < 1: black_point_rate = getcfg("calibration.black_point_rate") if black_point_rate: args += ["-A%s" % black_point_rate] black_luminance = getcfg("calibration.black_luminance", False) if black_luminance: args += ["-B%f" % black_luminance] if verify: if calibrate and type(verify) == int: args += ["-e%s" % verify] # Verify final computed curves elif self.argyll_version >= [1, 6]: args += ["-z"] # Verify current curves else: args += ["-E"] # Verify current curves if getcfg("extra_args.dispcal").strip(): args += parse_argument_string(getcfg("extra_args.dispcal")) self.options_dispcal = list(args) if calibrate: args += [inoutfile] return cmd, args def prepare_dispread(self, apply_calibration=True): """ Prepare a dispread commandline. All options are read from the user configuration. You can choose if you want to apply the current calibration, either the previously by dispcal created one by passing in True, by passing in a valid path to a .cal file, or by passing in None (current video card gamma table). """ self.lastcmdname = get_argyll_utilname("dispread") profile_save_path = self.create_tempdir() if not profile_save_path or isinstance(profile_save_path, Exception): return profile_save_path, None # Check directory and in/output file(s) result = check_create_dir(profile_save_path) if isinstance(result, Exception): return result, None inoutfile = os.path.join(profile_save_path, make_argyll_compatible_path(getcfg("profile.name.expanded"))) if not os.path.exists(inoutfile + ".ti1"): filename, ext = os.path.splitext(getcfg("testchart.file")) result = check_file_isfile(filename + ext) if isinstance(result, Exception): return result, None try: if ext.lower() in (".icc", ".icm"): try: profile = ICCP.ICCProfile(filename + ext) except (IOError, ICCP.ICCProfileInvalidError), exception: return Error(lang.getstr("error.testchart.read", getcfg("testchart.file"))), None ti3 = StringIO(profile.tags.get("CIED", "") or profile.tags.get("targ", "")) elif ext.lower() == ".ti1": shutil.copyfile(filename + ext, inoutfile + ".ti1") else: # ti3 try: ti3 = open(filename + ext, "rU") except Exception, exception: return Error(lang.getstr("error.testchart.read", getcfg("testchart.file"))), None if ext.lower() != ".ti1": ti3_lines = [line.strip() for line in ti3] ti3.close() if not "CTI3" in ti3_lines: return Error(lang.getstr("error.testchart.invalid", getcfg("testchart.file"))), None ti1 = open(inoutfile + ".ti1", "w") ti1.write(ti3_to_ti1(ti3_lines)) ti1.close() except Exception, exception: return Error(lang.getstr("error.testchart.creation_failed", inoutfile + ".ti1") + "\n\n" + safe_unicode(exception)), None if apply_calibration is not False: if apply_calibration is True: # Always a .cal file in that case cal = os.path.join(getcfg("profile.save_path"), getcfg("profile.name.expanded"), getcfg("profile.name.expanded")) + ".cal" elif apply_calibration is None: result = None if self.argyll_version >= [1, 1, 0]: cal = inoutfile + ".cal" cmd, args = (get_argyll_util("dispwin"), ["-d" + self.get_display(), "-s", cal]) result = self.exec_cmd(cmd, args, capture_output=True, skip_scripts=True, silent=False) if (isinstance(result, Exception) and not isinstance(result, UnloggedInfo)): return result, None if not result: return Error(lang.getstr("calibration.load_error")), None else: cal = apply_calibration # can be .cal or .icc / .icm calcopy = inoutfile + ".cal" filename, ext = os.path.splitext(cal) if getcfg("dry_run"): options_dispcal = [] elif ext.lower() == ".cal": result = check_cal_isfile(cal) if isinstance(result, Exception): return result, None if not result: return None, None # Get dispcal options if present options_dispcal = get_options_from_cal(cal)[0] if not os.path.exists(calcopy): try: # Copy cal to temp dir shutil.copyfile(cal, calcopy) except Exception, exception: return Error(lang.getstr("error.copy_failed", (cal, calcopy)) + "\n\n" + safe_unicode(exception)), None result = check_cal_isfile(calcopy) if isinstance(result, Exception): return result, None if not result: return None, None else: # .icc / .icm result = check_profile_isfile(cal) if isinstance(result, Exception): return result, None if not result: return None, None try: profile = ICCP.ICCProfile(filename + ext) except (IOError, ICCP.ICCProfileInvalidError), exception: profile = None if profile: ti3 = StringIO(profile.tags.get("CIED", "") or profile.tags.get("targ", "")) # Get dispcal options if present options_dispcal = get_options_from_profile(profile)[0] else: ti3 = StringIO("") ti3_lines = [line.strip() for line in ti3] ti3.close() if not "CTI3" in ti3_lines: return Error(lang.getstr("error.cal_extraction", (cal))), None try: tmpcal = open(calcopy, "w") tmpcal.write(extract_cal_from_ti3(ti3_lines)) tmpcal.close() except Exception, exception: return Error(lang.getstr("error.cal_extraction", (cal)) + "\n\n" + safe_unicode(exception)), None cal = calcopy if options_dispcal: self.options_dispcal = ["-" + arg for arg in options_dispcal] # # Make sure any measurement options are present if not self.options_dispcal: self.prepare_dispcal(dry_run=True) # Special case -X because it can have a separate filename argument if "-X" in self.options_dispcal: index = self.options_dispcal.index("-X") if (len(self.options_dispcal) > index + 1 and self.options_dispcal[index + 1][0] != "-"): self.options_dispcal = (self.options_dispcal[:index] + self.options_dispcal[index + 2:]) # Strip options we may override (basically all the stuff which can be # added by add_measurement_features. -X is repeated because it can # have a number instead of explicit filename argument, e.g. -X1) dispcal_override_args = ("-F", "-H", "-I", "-P", "-V", "-X", "-d", "-c", "-p", "-y") self.options_dispcal = filter(lambda arg: not arg[:2] in dispcal_override_args, self.options_dispcal) # Only add the dispcal extra args which may override measurement features dispcal_extra_args = parse_argument_string(getcfg("extra_args.dispcal")) for i, arg in enumerate(dispcal_extra_args): if not arg.startswith("-") and i > 0: # Assume option to previous arg arg = dispcal_extra_args[i - 1] if arg[:2] in dispcal_override_args: self.options_dispcal += [dispcal_extra_args[i]] result = self.add_measurement_features(self.options_dispcal) if isinstance(result, Exception): return result, None cmd = get_argyll_util("dispread") args = [] args += ["-v"] # verbose if getcfg("argyll.debug"): args += ["-D6"] result = self.add_measurement_features(args) if isinstance(result, Exception): return result, None if apply_calibration is not False: if (self.argyll_version >= [1, 3, 3] and (not self.has_lut_access() or not getcfg("calibration.use_video_lut"))): if config.get_display_name() == "madVR": # Normally -K will automatically reset the video LUT, # but when using madVR, we have to do it explicitly result = self.reset_cal() if (isinstance(result, Exception) and not isinstance(result, UnloggedInfo)): return result, None args += ["-K"] else: args += ["-k"] args += [cal] if self.get_instrument_features().get("spectral"): args += ["-s"] if getcfg("extra_args.dispread").strip(): args += parse_argument_string(getcfg("extra_args.dispread")) self.options_dispread = list(args) if getattr(self, "terminal", None) and isinstance(self.terminal, UntetheredFrame): self.set_terminal_cgats(inoutfile + ".ti1") return cmd, self.options_dispread + [inoutfile] def prepare_dispwin(self, cal=None, profile_path=None, install=True): """ Prepare a dispwin commandline. All options are read from the user configuration. If you pass in cal as True, it will try to load the current display profile's calibration. If cal is a path, it'll use that instead. If cal is False, it'll clear the current calibration. If cal is None, it'll try to load the calibration from a profile specified by profile_path. """ cmd = get_argyll_util("dispwin") args = [] args += ["-v"] if getcfg("argyll.debug"): if self.argyll_version >= [1, 3, 1]: args += ["-D6"] else: args += ["-E6"] args += ["-d" + self.get_display()] if sys.platform != "darwin" or cal is False: # Mac OS X 10.7 Lion needs root privileges when clearing # calibration args += ["-c"] if cal is True: args += [self.get_dispwin_display_profile_argument( max(0, min(len(self.displays), getcfg("display.number")) - 1))] elif cal: result = check_cal_isfile(cal) if isinstance(result, Exception): return result, None if not result: return None, None args += [cal] else: if cal is None: if not profile_path: profile_save_path = os.path.join( getcfg("profile.save_path"), getcfg("profile.name.expanded")) profile_path = os.path.join(profile_save_path, getcfg("profile.name.expanded") + profile_ext) result = check_profile_isfile(profile_path) if isinstance(result, Exception): return result, None if not result: return None, None try: profile = ICCP.ICCProfile(profile_path) except (IOError, ICCP.ICCProfileInvalidError), exception: return Error(lang.getstr("profile.invalid") + "\n" + profile_path), None if profile.profileClass != "mntr" or \ profile.colorSpace != "RGB": return Error(lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace)) + "\n" + profile_path), None if install: if getcfg("profile.install_scope") != "u" and \ (((sys.platform == "darwin" or (sys.platform != "win32" and self.argyll_version >= [1, 1, 0])) and (os.geteuid() == 0 or which("sudo"))) or (sys.platform == "win32" and sys.getwindowsversion() >= (6, ) and self.argyll_version > [1, 1, 1])): # -S option is broken on Linux with current Argyll # releases args += ["-S" + getcfg("profile.install_scope")] args += ["-I"] if (sys.platform in ("win32", "darwin") or fs_enc.upper() not in ("UTF8", "UTF-8")) and \ re.search("[^\x20-\x7e]", os.path.basename(profile_path)): # Copy to temp dir and give unique ASCII-only name to # avoid profile install issues tmp_dir = self.create_tempdir() if not tmp_dir or isinstance(tmp_dir, Exception): return tmp_dir, None # Check directory and in/output file(s) result = check_create_dir(tmp_dir) if isinstance(result, Exception): return result, None # profile name: 'display-.icc' profile_tmp_path = os.path.join(tmp_dir, "display" + self.get_display() + "-" + md5(profile.data).hexdigest() + profile_ext) shutil.copyfile(profile_path, profile_tmp_path) profile_path = profile_tmp_path args += [profile_path] return cmd, args def prepare_targen(self): """ Prepare a targen commandline. All options are read from the user configuration. """ path = self.create_tempdir() if not path or isinstance(path, Exception): return path, None # Check directory and in/output file(s) result = check_create_dir(path) if isinstance(result, Exception): return result, None inoutfile = os.path.join(path, "temp") cmd = get_argyll_util("targen") args = [] args += ['-v'] args += ['-d3'] args += ['-e%s' % getcfg("tc_white_patches")] if self.argyll_version >= [1, 6]: args += ['-B%s' % getcfg("tc_black_patches")] args += ['-s%s' % getcfg("tc_single_channel_patches")] args += ['-g%s' % getcfg("tc_gray_patches")] args += ['-m%s' % getcfg("tc_multi_steps")] if self.argyll_version >= [1, 6, 0]: args += ['-b%s' % getcfg("tc_multi_bcc_steps")] tc_algo = getcfg("tc_algo") if getcfg("tc_fullspread_patches") > 0: args += ['-f%s' % config.get_total_patches()] if tc_algo: args += ['-' + tc_algo] if tc_algo in ("i", "I"): args += ['-a%s' % getcfg("tc_angle")] if tc_algo == "": args += ['-A%s' % getcfg("tc_adaption")] if self.argyll_version >= [1, 3, 3]: args += ['-N%s' % getcfg("tc_neutral_axis_emphasis")] if (self.argyll_version == [1, 1, "RC1"] or self.argyll_version >= [1, 1]): args += ['-G'] else: args += ['-f0'] if getcfg("tc_precond") and getcfg("tc_precond_profile"): args += ['-c'] args += [getcfg("tc_precond_profile")] if getcfg("tc_filter"): args += ['-F%s,%s,%s,%s' % (getcfg("tc_filter_L"), getcfg("tc_filter_a"), getcfg("tc_filter_b"), getcfg("tc_filter_rad"))] if (self.argyll_version >= [1, 6, 2] and ("-c" in args or self.argyll_version >= [1, 6, 3])): args += ['-V%s' % (1 + getcfg("tc_dark_emphasis") * 3)] if self.argyll_version == [1, 1, "RC2"] or self.argyll_version >= [1, 1]: args += ['-p%s' % getcfg("tc_gamma")] if getcfg("extra_args.targen").strip(): # Disallow -d and -D as the testchart editor only supports # video RGB (-d3) args += filter(lambda arg: not arg.lower().startswith("-d"), parse_argument_string(getcfg("extra_args.targen"))) self.options_targen = list(args) args += [inoutfile] return cmd, args def progress_handler(self, event): """ Handle progress dialog updates and react to Argyll CMS command output """ if getattr(self, "subprocess_abort", False) or \ getattr(self, "thread_abort", False): self.progress_wnd.Pulse(lang.getstr("aborting")) return percentage = None msg = self.recent.read(FilteredStream.triggers) lastmsg = self.lastmsg.read(FilteredStream.triggers).strip() if re.match("\\s*\\d+%", lastmsg): # colprof try: percentage = int(self.lastmsg.read().strip("%")) except ValueError: pass elif re.match("Patch \\d+ of \\d+", lastmsg, re.I): # dispcal/dispread components = lastmsg.split() try: start = float(components[1]) end = float(components[3]) except ValueError: pass else: percentage = start / end * 100 elif re.match("Added \\d+/\\d+", lastmsg, re.I): # targen components = lastmsg.lower().replace("added ", "").split("/") try: start = float(components[0]) end = float(components[1]) except ValueError: pass else: percentage = start / end * 100 if (percentage and time() > self.starttime + 3 and self.progress_wnd is getattr(self, "terminal", None)): # We no longer need keyboard interaction, switch over to # progress dialog wx.CallAfter(self.swap_progress_wnds) if getattr(self.progress_wnd, "original_msg", None) and \ msg != self.progress_wnd.original_msg: # UGLY HACK: This 'safe_print' call fixes a GTK assertion and # segfault under Arch Linux when setting the window title safe_print("") self.progress_wnd.SetTitle(self.progress_wnd.original_msg) self.progress_wnd.original_msg = None if percentage: if "Setting up the instrument" in msg or \ "Commencing device calibration" in msg or \ "Calibration complete" in msg: self.recent.clear() msg = "" keepGoing, skip = self.progress_wnd.Update(math.ceil(percentage), msg + "\n" + lastmsg) else: if getattr(self.progress_wnd, "lastmsg", "") == msg or not msg: keepGoing, skip = self.progress_wnd.Pulse() else: if "Setting up the instrument" in lastmsg: msg = lang.getstr("instrument.initializing") elif "Created web server at" in msg: webserver = re.search("(http\:\/\/[^']+)", msg) if webserver: msg = (lang.getstr("webserver.waiting") + " " + webserver.groups()[0]) keepGoing, skip = self.progress_wnd.Pulse(msg) if (getattr(self.progress_wnd, "paused", False) and not getattr(self, "paused", False)): self.paused = True self.safe_send("\x1b") elif (not getattr(self.progress_wnd, "paused", False) and getattr(self, "paused", False)): self.paused = False self.recent.clear() self.safe_send(" ") if (hasattr(self.progress_wnd, "pause_continue") and "read stopped at user request!" in lastmsg): self.progress_wnd.pause_continue.Enable() if not keepGoing: if getattr(self, "subprocess", None) and \ not getattr(self, "subprocess_abort", False): if debug: safe_print('[D] calling quit_terminate_cmd') self.abort_subprocess(True) elif not getattr(self, "thread_abort", False): if debug: safe_print('[D] thread_abort') self.thread_abort = True if self.finished is True: return if (not self.activated and self.progress_wnd.IsShownOnScreen() and (not wx.GetApp().IsActive() or not self.progress_wnd.IsActive()) and not getattr(self.progress_wnd, "dlg", None)): self.activated = True self.progress_wnd.Raise() def progress_dlg_start(self, progress_title="", progress_msg="", parent=None, resume=False): """ Start a progress dialog, replacing existing one if present """ if getattr(self, "progress_dlg", None) and not resume: self.progress_dlg.Destroy() self.progress_dlg = None if getattr(self, "progress_wnd", None) and \ self.progress_wnd is getattr(self, "terminal", None): self.terminal.stop_timer() self.terminal.Hide() if self.finished is True: return pauseable = getattr(self, "pauseable", False) if getattr(self, "progress_dlg", None): self.progress_wnd = self.progress_dlg self.progress_wnd.MakeModal(True) # UGLY HACK: This 'safe_print' call fixes a GTK assertion and # segfault under Arch Linux when setting the window title safe_print("") self.progress_wnd.SetTitle(progress_title) self.progress_wnd.Update(0, progress_msg) if hasattr(self.progress_wnd, "pause_continue"): self.progress_wnd.pause_continue.Show(pauseable) self.progress_wnd.Layout() self.progress_wnd.Resume() if not self.progress_wnd.IsShownOnScreen(): self.progress_wnd.Show() self.progress_wnd.start_timer() else: # Set maximum to 101 to prevent the 'cancel' changing to 'close' # when 100 is reached self.progress_dlg = ProgressDialog(progress_title, progress_msg, maximum=101, parent=parent, handler=self.progress_handler, keyhandler=self.terminal_key_handler, pauseable=pauseable) self.progress_wnd = self.progress_dlg self.progress_wnd.original_msg = progress_msg def quit_terminate_cmd(self): """ Forcefully abort the current subprocess. Try to gracefully exit first by sending common Argyll CMS abort keystrokes (ESC), forcefully terminate the subprocess if not reacting """ if debug: safe_print('[D] safe_quit') if getattr(self, "subprocess", None) and \ (hasattr(self.subprocess, "poll") and self.subprocess.poll() is None) or \ (hasattr(self.subprocess, "isalive") and self.subprocess.isalive()): if debug or test: safe_print('User requested abort') try: if self.measure_cmd and hasattr(self.subprocess, "send"): try: if self.subprocess.after == "Current": # Stop measurement self.safe_send(" ") sleep(1) ts = time() while getattr(self, "subprocess", None) and \ self.subprocess.isalive(): self.safe_send("\x1b") if time() > ts + 9: break sleep(.5) except Exception, exception: self.logger.exception("Exception") if getattr(self, "subprocess", None) and \ (hasattr(self.subprocess, "poll") and self.subprocess.poll() is None) or \ (hasattr(self.subprocess, "isalive") and self.subprocess.isalive()): self.logger.info("Trying to terminate subprocess...") self.subprocess.terminate() ts = time() while getattr(self, "subprocess", None) and \ hasattr(self.subprocess, "isalive") and \ self.subprocess.isalive(): if time() > ts + 3: break sleep(.25) if getattr(self, "subprocess", None) and \ hasattr(self.subprocess, "isalive") and \ self.subprocess.isalive(): self.logger.info("Trying to terminate subprocess forcefully...") self.subprocess.terminate(force=True) except Exception, exception: self.logger.exception("Exception") if debug: safe_print('[D] end try') elif debug: safe_print('[D] subprocess: %r' % getattr(self, "subprocess", None)) safe_print('[D] subprocess_abort: %r' % getattr(self, "subprocess_abort", False)) if getattr(self, "subprocess", None): safe_print('[D] subprocess has poll: %r' % hasattr(self.subprocess, "poll")) if hasattr(self.subprocess, "poll"): safe_print('[D] subprocess.poll(): %r' % self.subprocess.poll()) safe_print('[D] subprocess has isalive: %r' % hasattr(self.subprocess, "isalive")) if hasattr(self.subprocess, "isalive"): safe_print('[D] subprocess.isalive(): %r' % self.subprocess.isalive()) def report(self, report_calibrated=True): """ Report on calibrated or uncalibrated display device response """ cmd, args = self.prepare_dispcal(calibrate=False) if isinstance(cmd, Exception): return cmd if args: if report_calibrated: args += ["-r"] else: args += ["-R"] return self.exec_cmd(cmd, args, capture_output=True, skip_scripts=True) def reset_cal(self): cmd, args = self.prepare_dispwin(False) result = self.exec_cmd(cmd, args, capture_output=True, skip_scripts=True, silent=False) return result def safe_send(self, bytes): self.send_buffer = bytes return True def _safe_send(self, bytes, retry=3): """ Safely send a keystroke to the current subprocess """ for i in xrange(0, retry): self.logger.info("Sending key(s) %r (%i)" % (bytes, i + 1)) try: wrote = self.subprocess.send(bytes) except Exception, exception: self.logger.exception("Exception: %s" % safe_unicode(exception)) else: if wrote == len(bytes): return True sleep(.25) return False def set_argyll_version(self, name, silent=False, cfg=False): self.set_argyll_version_from_string(get_argyll_version_string(name, silent), cfg) def set_argyll_version_from_string(self, argyll_version_string, cfg=True): self.argyll_version_string = argyll_version_string if cfg: setcfg("argyll.version", argyll_version_string) self.argyll_version = parse_argyll_version_string(argyll_version_string) def set_terminal_cgats(self, cgats_filename): self.terminal.cgats = CGATS.CGATS(cgats_filename) def argyll_support_file_exists(self, name): """ Check if named file exists in any of the known Argyll support locations valid for the chosen Argyll CMS version. """ if sys.platform != "darwin": paths = [defaultpaths.appdata] + defaultpaths.commonappdata else: paths = [defaultpaths.library_home, defaultpaths.library] searchpaths = [] if self.argyll_version >= [1, 5, 0]: if sys.platform != "darwin": searchpaths += [os.path.join(dir_, "ArgyllCMS", name) for dir_ in paths] else: searchpaths += [os.path.join(dir_, "ArgyllCMS", name) for dir_ in [defaultpaths.appdata, defaultpaths.library]] searchpaths += [os.path.join(dir_, "color", name) for dir_ in paths] for searchpath in searchpaths: if os.path.isfile(searchpath): return True return False def spyder2_firmware_exists(self): """ Check if the Spyder 2 firmware file exists in any of the known locations valid for the chosen Argyll CMS version. """ if self.argyll_version < [1, 2, 0]: spyd2en = get_argyll_util("spyd2en") if not spyd2en: return False return os.path.isfile(os.path.join(os.path.dirname(spyd2en), "spyd2PLD.bin")) else: return self.argyll_support_file_exists("spyd2PLD.bin") def spyder4_cal_exists(self): """ Check if the Spyder 4 calibration file exists in any of the known locations valid for the chosen Argyll CMS version. """ if self.argyll_version < [1, 3, 6]: # We couldn't use it even if it exists return False return self.argyll_support_file_exists("spyd4cal.bin") def start(self, consumer, producer, cargs=(), ckwargs=None, wargs=(), wkwargs=None, progress_title=appname, progress_msg="", parent=None, progress_start=100, resume=False, continue_next=False, stop_timers=True, interactive_frame="", pauseable=False): """ Start a worker process. Also show a progress dialog while the process is running. consumer consumer function. producer producer function. cargs consumer arguments. ckwargs consumer keyword arguments. wargs producer arguments. wkwargs producer keyword arguments. progress_title progress dialog title. Defaults to '%s'. progress_msg progress dialog message. Defaults to ''. progress_start show progress dialog after delay (ms). resume resume previous progress dialog (elapsed time etc). continue_next do not hide progress dialog after producer finishes. stop_timers stop the timers on the owner window if True interactive_frame "" or "uniformity" (selects the type of interactive window) pauseable Is the operation pauseable? (show pause button on progress dialog) """ % appname if ckwargs is None: ckwargs = {} if wkwargs is None: wkwargs = {} while self.is_working(): sleep(.25) # wait until previous worker thread finishes if hasattr(self.owner, "stop_timers") and stop_timers: self.owner.stop_timers() if not parent: parent = self.owner if progress_start < 100: progress_start = 100 self.activated = False self.cmdrun = False self.finished = False self.instrument_calibration_complete = False self.instrument_place_on_screen_msg = False self.instrument_sensor_position_msg = False self.is_ambient_measuring = False self.lastcmdname = None self.pauseable = pauseable self.paused = False self.resume = resume self.subprocess_abort = False self.starttime = time() self.thread_abort = False if self.interactive: self.progress_start_timer = wx.Timer() if getattr(self, "progress_wnd", None) and \ self.progress_wnd is getattr(self, "progress_dlg", None): self.progress_dlg.Destroy() self.progress_dlg = None if progress_msg and progress_title == appname: progress_title = progress_msg if (config.get_display_name() == "Untethered" and interactive_frame != "uniformity"): interactive_frame = "untethered" if interactive_frame == "adjust": windowclass = DisplayAdjustmentFrame elif interactive_frame == "uniformity": windowclass = DisplayUniformityFrame elif interactive_frame == "untethered": windowclass = UntetheredFrame else: windowclass = SimpleTerminal if getattr(self, "terminal", None) and isinstance(self.terminal, windowclass): self.progress_wnd = self.terminal if not resume: if isinstance(self.progress_wnd, SimpleTerminal): self.progress_wnd.console.SetValue("") elif (isinstance(self.progress_wnd, DisplayAdjustmentFrame) or isinstance(self.progress_wnd, DisplayUniformityFrame) or isinstance(self.progress_wnd, UntetheredFrame)): self.progress_wnd.reset() self.progress_wnd.stop_timer() self.progress_wnd.Resume() self.progress_wnd.start_timer() # UGLY HACK: This 'safe_print' call fixes a GTK assertion and # segfault under Arch Linux when setting the window title safe_print("") if isinstance(self.progress_wnd, SimpleTerminal): self.progress_wnd.SetTitle(progress_title) self.progress_wnd.Show() if resume and isinstance(self.progress_wnd, SimpleTerminal): self.progress_wnd.console.ScrollLines( self.progress_wnd.console.GetNumberOfLines()) else: if interactive_frame == "adjust": self.terminal = DisplayAdjustmentFrame(parent, handler=self.progress_handler, keyhandler=self.terminal_key_handler) elif interactive_frame == "uniformity": self.terminal = DisplayUniformityFrame(parent, handler=self.progress_handler, keyhandler=self.terminal_key_handler) elif interactive_frame == "untethered": self.terminal = UntetheredFrame(parent, handler=self.progress_handler, keyhandler=self.terminal_key_handler) else: self.terminal = SimpleTerminal(parent, title=progress_title, handler=self.progress_handler, keyhandler=self.terminal_key_handler) self.terminal.worker = self self.progress_wnd = self.terminal else: if not progress_msg: progress_msg = lang.getstr("please_wait") # Show the progress dialog after a delay self.progress_start_timer = wx.CallLater(progress_start, self.progress_dlg_start, progress_title, progress_msg, parent, resume) self.thread = delayedresult.startWorker(self._generic_consumer, producer, [consumer, continue_next] + list(cargs), ckwargs, wargs, wkwargs) return True def stop_progress(self): if getattr(self, "progress_wnd", False): if getattr(self.progress_wnd, "dlg", None): self.progress_wnd.dlg.Close() del self.progress_wnd.dlg self.progress_wnd.stop_timer() self.progress_wnd.MakeModal(False) # under Linux, destroying it here causes segfault if sys.platform == "win32" and wx.VERSION >= (2, 9): self.progress_wnd.Destroy() else: self.progress_wnd.Hide() def swap_progress_wnds(self): """ Swap the current interactive window with a progress dialog """ parent = self.terminal.GetParent() if isinstance(self.terminal, DisplayAdjustmentFrame): title = lang.getstr("calibration") else: title = self.terminal.GetTitle() self.progress_dlg_start(title, "", parent, self.resume) def terminal_key_handler(self, event): """ Key handler for the interactive window or progress dialog. """ keycode = None if event.GetEventType() in (wx.EVT_CHAR_HOOK.typeId, wx.EVT_KEY_DOWN.typeId): keycode = event.GetKeyCode() elif event.GetEventType() == wx.EVT_MENU.typeId: keycode = self.progress_wnd.id_to_keycode.get(event.GetId()) if keycode is not None and getattr(self, "subprocess", None) and \ hasattr(self.subprocess, "send"): keycode = keycodes.get(keycode, keycode) if keycode in (ord("\x1b"), ord("8"), ord("Q"), ord("q")): # exit self.abort_subprocess(True) return try: self.safe_send(chr(keycode)) except: pass def calculate_gamut(self, profile_path): """ Calculate gamut, volume, and coverage % against sRGB and Adobe RGB. Return gamut volume (int, scaled to sRGB = 1.0) and coverage (dict) as tuple. """ outname = os.path.splitext(profile_path)[0] gamut_volume = None gamut_coverage = {} # Create profile gamut and vrml if (sys.platform == "win32" and re.search("[^\x20-\x7e]", os.path.basename(profile_path))): # Avoid problems with encoding profile_path = win32api.GetShortPathName(profile_path) result = self.exec_cmd(get_argyll_util("iccgamut"), ["-v", "-w", "-ir", profile_path], capture_output=True, skip_scripts=True) if not isinstance(result, Exception) and result: # iccgamut output looks like this: # Header: # <...> # # Total volume of gamut is xxxxxx.xxxxxx cubic colorspace units for line in self.output: match = re.search("(\d+(?:\.\d+)?)\s+cubic\s+colorspace\s+" "units", line) if match: gamut_volume = float(match.groups()[0]) / ICCP.GAMUT_VOLUME_SRGB break name = os.path.splitext(profile_path)[0] gamfilename = name + ".gam" wrlfilename = name + ".wrl" tmpfilenames = [gamfilename, wrlfilename] for key, src in (("srgb", "sRGB"), ("adobe-rgb", "ClayRGB1998")): if not isinstance(result, Exception) and result: # Create gamut view and intersection src_path = get_data_path("ref/%s.gam" % src) if not src_path: continue outfilename = outname + (" vs %s.wrl" % src) tmpfilenames.append(outfilename) result = self.exec_cmd(get_argyll_util("viewgam"), ["-cw", "-t.75", "-s", src_path, "-cn", "-t.25", "-s", gamfilename, "-i", outfilename], capture_output=True, skip_scripts=True) if not isinstance(result, Exception) and result: # viewgam output looks like this: # Intersecting volume = xxx.x cubic units # 'path/to/1.gam' volume = xxx.x cubic units, intersect = xx.xx% # 'path/to/2.gam' volume = xxx.x cubic units, intersect = xx.xx% for line in self.output: match = re.search("[\\\/]%s.gam'\s+volume\s*=\s*" "\d+(?:\.\d+)?\s+cubic\s+units,?" "\s+intersect\s*=\s*" "(\d+(?:\.\d+)?)" % re.escape(src), line) if match: gamut_coverage[key] = float(match.groups()[0]) / 100.0 break if not isinstance(result, Exception) and result: for tmpfilename in tmpfilenames: if (tmpfilename == gamfilename and tmpfilename != outname + ".gam"): # Use the original file name filename = outname + ".gam" elif (tmpfilename == wrlfilename and tmpfilename != outname + ".wrl"): # Use the original file name filename = outname + ".wrl" else: filename = tmpfilename try: if getcfg("vrml.compress"): # Compress gam and wrl files using gzip if filename.endswith(".wrl"): filename = filename[:-4] + ".wrz" else: filename = filename + ".gz" with GzipFileProper(tmpfilename + ".gz", "wb") as gz: # Always use original filename with '.gz' extension, # that way the filename in the header will be correct with open(tmpfilename, "rb") as infile: gz.write(infile.read()) # Remove uncompressed file os.remove(tmpfilename) tmpfilename = tmpfilename + ".gz" if tmpfilename != filename: # Rename the file if filename is different if os.path.exists(filename): os.remove(filename) os.rename(tmpfilename, filename) except Exception, exception: safe_print(safe_unicode(exception)) elif result: # Exception safe_print(safe_unicode(result)) return gamut_volume, gamut_coverage def calibrate(self, remove=False): """ Calibrate the screen and process the generated file(s). """ capture_output = not sys.stdout.isatty() cmd, args = self.prepare_dispcal() if not isinstance(cmd, Exception): result = self.exec_cmd(cmd, args, capture_output=capture_output) else: result = cmd if not isinstance(result, Exception) and result: dst_pathname = os.path.join(getcfg("profile.save_path"), getcfg("profile.name.expanded"), getcfg("profile.name.expanded")) cal = args[-1] + ".cal" result = check_cal_isfile( cal, lang.getstr("error.calibration.file_not_created")) if not isinstance(result, Exception) and result: cal_cgats = add_dispcal_options_to_cal(cal, self.options_dispcal) if cal_cgats: cal_cgats.write() if getcfg("profile.update") or \ self.dispcal_create_fast_matrix_shaper: profile_path = args[-1] + profile_ext result = check_profile_isfile( profile_path, lang.getstr("error.profile.file_not_created")) if not isinstance(result, Exception) and result: try: profile = ICCP.ICCProfile(profile_path) except (IOError, ICCP.ICCProfileInvalidError), exception: result = Error(lang.getstr("profile.invalid") + "\n" + profile_path) if not isinstance(result, Exception) and result: if not getcfg("profile.update"): # Created fast matrix shaper profile # we need to set cprt, targ and a few other things profile.setCopyright(getcfg("copyright")) # Fast matrix shaper profiles currently don't # contain TI3 data, but look for it anyways # to be future-proof ti3 = add_options_to_ti3( profile.tags.get("targ", profile.tags.get("CIED", "")), self.options_dispcal) if not ti3: ti3 = CGATS.CGATS("TI3\n") ti3[1] = cal_cgats edid = self.get_display_edid() display_name = edid.get("monitor_name", edid.get("ascii", str(edid.get("product_id") or ""))) display_manufacturer = edid.get("manufacturer") profile.setDeviceModelDescription(display_name) profile.setDeviceManufacturerDescription( display_manufacturer) (gamut_volume, gamut_coverage) = self.create_gamut_views(profile_path) self.update_profile(profile, ti3=str(ti3), chrm=None, tags=True, avg=None, peak=None, rms=None, gamut_volume=gamut_volume, gamut_coverage=gamut_coverage, quality=getcfg("calibration.quality")) else: # Update desc tag - ASCII needs to be 7-bit # also add Unicode string if different from ASCII if "desc" in profile.tags and isinstance(profile.tags.desc, ICCP.TextDescriptionType): profile.setDescription( getcfg("profile.name.expanded")) # Calculate profile ID profile.calculateID() try: profile.write() except Exception, exception: safe_print(exception) result2 = self.wrapup(not isinstance(result, UnloggedInfo) and result, remove or isinstance(result, Exception) or not result) if isinstance(result2, Exception): if isinstance(result, Exception): result = Error(safe_unicode(result) + "\n\n" + safe_unicode(result2)) else: result = result2 elif not isinstance(result, Exception) and result: setcfg("last_cal_path", dst_pathname + ".cal") setcfg("calibration.file.previous", getcfg("calibration.file")) if (getcfg("profile.update") or self.dispcal_create_fast_matrix_shaper): setcfg("last_cal_or_icc_path", dst_pathname + profile_ext) setcfg("last_icc_path", dst_pathname + profile_ext) setcfg("calibration.file", dst_pathname + profile_ext) else: setcfg("calibration.file", dst_pathname + ".cal") setcfg("last_cal_or_icc_path", dst_pathname + ".cal") return result def chart_lookup(self, cgats, profile, as_ti3=False, fields=None, check_missing_fields=False, function="f", pcs="l", intent="r", bt1886=None, add_white_patches=True): """ Lookup CIE or device values through profile """ if profile.colorSpace == "RGB": labels = ('RGB_R', 'RGB_G', 'RGB_B') else: labels = ('CMYK_C', 'CMYK_M', 'CMYK_Y', 'CMYK_K') ti1 = None ti3_ref = None gray = None try: if not isinstance(cgats, CGATS.CGATS): cgats = CGATS.CGATS(cgats, True) else: # Always make a copy and do not alter a passed in CGATS instance! cgats = CGATS.CGATS(str(cgats)) if 0 in cgats: # only look at the first section cgats[0].filename = cgats.filename cgats = cgats[0] primaries = cgats.queryi(labels) if primaries and not as_ti3: primaries.fix_device_values_scaling(profile.colorSpace) cgats.type = 'CTI1' cgats.COLOR_REP = profile.colorSpace ti1, ti3_ref, gray = self.ti1_lookup_to_ti3(cgats, profile, function, pcs, "r", add_white_patches) if bt1886 or intent == "a": cat = profile.guess_cat() or "Bradford" for item in ti3_ref.DATA.itervalues(): if pcs == "l": X, Y, Z = colormath.Lab2XYZ(item["LAB_L"], item["LAB_A"], item["LAB_B"]) else: X, Y, Z = item["XYZ_X"], item["XYZ_Y"], item["XYZ_Z"] if bt1886: X, Y, Z = bt1886.apply(X, Y, Z) if intent == "a": X, Y, Z = colormath.adapt(X, Y, Z, "D50", profile.tags.wtpt.values(), cat=cat) X, Y, Z = [v * 100 for v in (X, Y, Z)] if pcs == "l": (item["LAB_L"], item["LAB_A"], item["LAB_B"]) = colormath.XYZ2Lab(X, Y, Z) else: item["XYZ_X"], item["XYZ_Y"], item["XYZ_Z"] = X, Y, Z else: if not primaries and check_missing_fields: raise ValueError(lang.getstr("error.testchart.missing_fields", (cgats.filename, ", ".join(labels)))) ti1, ti3_ref = self.ti3_lookup_to_ti1(cgats, profile, fields, intent, add_white_patches) except Exception, exception: InfoDialog(self.owner, msg=safe_unicode(exception), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return ti1, ti3_ref, gray def ti1_lookup_to_ti3(self, ti1, profile, function="f", pcs=None, intent="r", add_white_patches=True): """ Read TI1 (filename or CGATS instance), lookup device->pcs values colorimetrically through profile using Argyll's xicclu utility and return TI3 (CGATS instance) """ # ti1 if isinstance(ti1, basestring): ti1 = CGATS.CGATS(ti1) if not isinstance(ti1, CGATS.CGATS): raise TypeError('Wrong type for ti1, needs to be CGATS.CGATS ' 'instance') # profile if isinstance(profile, basestring): profile = ICCP.ICCProfile(profile) if not isinstance(profile, ICCP.ICCProfile): raise TypeError('Wrong type for profile, needs to be ' 'ICCP.ICCProfile instance') # determine pcs for lookup color_rep = profile.connectionColorSpace.upper() if color_rep == "RGB": pcs = None elif not pcs: if color_rep == 'LAB': pcs = 'l' elif color_rep == 'XYZ': pcs = 'x' else: raise ValueError('Unknown CIE color representation ' + color_rep) # get profile color space colorspace = profile.colorSpace # required fields for ti1 if colorspace == "CMYK": required = ("CMYK_C", "CMYK_M", "CMYK_Y", "CMYK_K") else: required = ("RGB_R", "RGB_G", "RGB_B") ti1_filename = ti1.filename try: ti1 = verify_cgats(ti1, required, True) except CGATS.CGATSInvalidError: raise ValueError(lang.getstr("error.testchart.invalid", ti1_filename)) except CGATS.CGATSKeyError: raise ValueError(lang.getstr("error.testchart.missing_fields", (ti1_filename, ", ".join(required)))) # read device values from ti1 data = ti1.queryv1("DATA") if not data: raise ValueError(lang.getstr("error.testchart.invalid", ti1_filename)) device_data = data.queryv(required) if not device_data: raise ValueError(lang.getstr("error.testchart.missing_fields", (ti1_filename, ", ".join(required)))) if colorspace == "RGB" and add_white_patches: # make sure the first four patches are white so the whitepoint can be # averaged white_rgb = {'RGB_R': 100, 'RGB_G': 100, 'RGB_B': 100} white = dict(white_rgb) wp = ti1.queryv1("APPROX_WHITE_POINT") if wp: wp = [float(v) for v in wp.split()] wp = [CGATS.rpad((v / wp[1]) * 100.0, data.vmaxlen) for v in wp] else: wp = colormath.get_standard_illuminant("D65", scale=100) for label in data.parent.DATA_FORMAT.values(): if not label in white: if label.upper() == 'LAB_L': value = 100 elif label.upper() in ('LAB_A', 'LAB_B'): value = 0 elif label.upper() == 'XYZ_X': value = wp[0] elif label.upper() == 'XYZ_Y': value = 100 elif label.upper() == 'XYZ_Z': value = wp[2] else: value = '0' white.update({label: value}) white_added_count = 0 while len(data.queryi(white_rgb)) < 4: # add white patches data.insert(0, white) white_added_count += 1 safe_print("Added %i white patch(es)" % white_added_count) idata = [] for primaries in device_data.values(): idata.append(' '.join(str(n) for n in primaries.values())) # lookup device->cie values through profile using (x)icclu if pcs or self.argyll_version >= [1, 6]: xicclu = get_argyll_util("xicclu").encode(fs_enc) else: # DeviceLink profile, we have to use icclu under older Argyll CMS # versions because older xicclu cannot handle devicelink xicclu = get_argyll_util("icclu").encode(fs_enc) cwd = self.create_tempdir() if isinstance(cwd, Exception): raise cwd profile.write(os.path.join(cwd, "temp.icc")) if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None args = [xicclu, '-f' + function] if pcs: args += ['-i' + intent, '-p' + pcs] p = sp.Popen(args + ['-s100', "temp.icc"], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT, cwd=cwd.encode(fs_enc), startupinfo=startupinfo) odata = p.communicate('\n'.join(idata))[0].splitlines() if p.wait() != 0: # error raise IOError(''.join(odata)) gray = [] igray = [] igray_idx = [] if colorspace == "RGB": # treat r=g=b specially: set expected a=b=0 for i, line in enumerate(odata): line = line.strip().split('->') line = ''.join(line).split() if line[-1] == '(clip)': line.pop() r, g, b = [float(n) for n in line[:3]] if r == g == b < 100: # if grayscale and not white cie = [float(n) for n in line[5:-1]] if pcs == 'x': # Need to scale XYZ coming from xicclu # Lab is already scaled cie = colormath.XYZ2Lab(*[n * 100.0 for n in cie]) cie = (cie[0], 0, 0) # set a=b=0 igray.append("%s %s %s" % cie) igray_idx.append(i) if pcs == 'x': cie = colormath.Lab2XYZ(*cie) luminance = cie[1] else: luminance = colormath.Lab2XYZ(*cie)[1] if luminance * 100.0 >= 1: # only add if luminance is greater or equal 1% because # dark tones fluctuate too much gray.append((r, g, b)) if False: # NEVER? # set cie in odata to a=b=0 line[5:-1] = [str(n) for n in cie] odata[i] = ' -> '.join([' '.join(line[:4]), line[4], ' '.join(line[5:])]) if igray and False: # NEVER? # lookup cie->device values for grays through profile using xicclu gray = [] xicclu = get_argyll_util("xicclu").encode(fs_enc) cwd = self.create_tempdir() if isinstance(cwd, Exception): raise cwd profile.write(os.path.join(cwd, "temp.icc")) if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None p = sp.Popen([xicclu, '-fb', '-ir', '-pl', '-s100', "temp.icc"], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT, cwd=cwd.encode(fs_enc), startupinfo=startupinfo) ogray = p.communicate('\n'.join(igray))[0].splitlines() if p.wait() != 0: # error raise IOError(''.join(odata)) for i, line in enumerate(ogray): line = line.strip().split('->') line = ''.join(line).split() if line[-1] == '(clip)': line.pop() cie = [float(n) for n in line[:3]] rgb = [float(n) for n in line[5:-1]] if colormath.Lab2XYZ(cie[0], 0, 0)[1] * 100.0 >= 1: # only add if luminance is greater or equal 1% because # dark tones fluctuate too much gray.append(rgb) # update values in ti1 and data for ti3 for n, channel in enumerate(("R", "G", "B")): data[igray_idx[i] + white_added_count]["RGB_" + channel] = rgb[n] oline = odata[igray_idx[i]].strip().split('->', 1) odata[igray_idx[i]] = ' [RGB] ->'.join([' '.join(line[5:-1])] + oline[1:]) self.wrapup(False) # write output ti3 ofile = StringIO() if pcs: ofile.write('CTI3 \n') ofile.write('\nDESCRIPTOR "Argyll Calibration Target chart information 3"\n') else: ofile.write('CTI1 \n') ofile.write('\nDESCRIPTOR "Argyll Calibration Target chart information 1"\n') ofile.write('KEYWORD "DEVICE_CLASS"\n') ofile.write('DEVICE_CLASS "' + ('DISPLAY' if colorspace == 'RGB' else 'OUTPUT') + '"\n') include_sample_name = False i = 0 offset = 0 if colorspace == "RGB" else 1 for line in odata: line = line.strip().split('->') line = ''.join(line).split() if line[-1] == '(clip)': line.pop() if i == 0: icolor = line[3 + offset].strip('[]') if icolor == 'RGB': olabel = 'RGB_R RGB_G RGB_B' elif icolor == 'CMYK': olabel = 'CMYK_C CMYK_M CMYK_Y CMYK_K' else: raise ValueError('Unknown color representation ' + icolor) ocolor = line[-1].strip('[]').upper() if ocolor == 'LAB': ilabel = 'LAB_L LAB_A LAB_B' elif ocolor in ('XYZ', 'RGB'): ilabel = 'XYZ_X XYZ_Y XYZ_Z' else: raise ValueError('Unknown CIE color representation ' + ocolor) ofile.write('KEYWORD "COLOR_REP"\n') if icolor == ocolor: ofile.write('COLOR_REP "' + icolor + '"\n') else: ofile.write('COLOR_REP "' + icolor + '_' + ocolor + '"\n') ofile.write('\n') ofile.write('NUMBER_OF_FIELDS ') if include_sample_name: ofile.write(str(2 + len(icolor) + len(ocolor)) + '\n') else: ofile.write(str(1 + len(icolor) + len(ocolor)) + '\n') ofile.write('BEGIN_DATA_FORMAT\n') ofile.write('SAMPLE_ID ') if include_sample_name: ofile.write('SAMPLE_NAME ' + olabel + ' ' + ilabel + '\n') else: ofile.write(olabel + ' ' + ilabel + '\n') ofile.write('END_DATA_FORMAT\n') ofile.write('\n') ofile.write('NUMBER_OF_SETS ' + str(len(odata)) + '\n') ofile.write('BEGIN_DATA\n') i += 1 cie = [float(n) for n in line[5 + offset:-1]] if pcs == 'x': # Need to scale XYZ coming from xicclu, Lab is already scaled cie = [round(n * 100.0, 5 - len(str(int(abs(n * 100.0))))) for n in cie] elif not pcs: line[:3] = line[5 + offset:-1] cie = [round(n * 100.0, 5 - len(str(int(abs(n * 100.0))))) for n in colormath.RGB2XYZ(*[n / 100.0 for n in cie])] cie = [str(n) for n in cie] if include_sample_name: ofile.write(str(i) + ' ' + data[i - 1][1].strip('"') + ' ' + ' '.join(line[:3 + offset]) + ' ' + ' '.join(cie) + '\n') else: ofile.write(str(i) + ' ' + ' '.join(line[:3 + offset]) + ' ' + ' '.join(cie) + '\n') ofile.write('END_DATA\n') ofile.seek(0) return ti1, CGATS.CGATS(ofile)[0], map(list, gray) def ti3_lookup_to_ti1(self, ti3, profile, fields=None, intent="r", add_white_patches=True): """ Read TI3 (filename or CGATS instance), lookup cie->device values colorimetrically through profile using Argyll's xicclu utility and return TI1 and compatible TI3 (CGATS instances) """ # ti3 copy = True if isinstance(ti3, basestring): copy = False ti3 = CGATS.CGATS(ti3) if not isinstance(ti3, CGATS.CGATS): raise TypeError('Wrong type for ti3, needs to be CGATS.CGATS ' 'instance') ti3_filename = ti3.filename if copy: # Make a copy and do not alter a passed in CGATS instance! ti3 = CGATS.CGATS(str(ti3)) if fields == "XYZ": labels = ("XYZ_X", "XYZ_Y", "XYZ_Z") else: labels = ("LAB_L", "LAB_A", "LAB_B") try: ti3v = verify_cgats(ti3, labels, True) except CGATS.CGATSInvalidError, exception: raise ValueError(lang.getstr("error.testchart.invalid", ti3_filename) + "\n" + lang.getstr(safe_str(exception))) except CGATS.CGATSKeyError: try: if fields: raise else: labels = ("XYZ_X", "XYZ_Y", "XYZ_Z") ti3v = verify_cgats(ti3, labels, True) except CGATS.CGATSKeyError: missing = ", ".join(labels) if not fields: missing += " " + lang.getstr("or") + " LAB_L, LAB_A, LAB_B" raise ValueError(lang.getstr("error.testchart.missing_fields", (ti3_filename, missing))) else: color_rep = 'XYZ' else: color_rep = fields or 'LAB' # profile if isinstance(profile, basestring): profile = ICCP.ICCProfile(profile) if not isinstance(profile, ICCP.ICCProfile): raise TypeError('Wrong type for profile, needs to be ' 'ICCP.ICCProfile instance') # determine pcs for lookup if color_rep == 'LAB': pcs = 'l' required = ("LAB_L", "LAB_A", "LAB_B") elif color_rep == 'XYZ': pcs = 'x' required = ("XYZ_X", "XYZ_Y", "XYZ_Z") else: raise ValueError('Unknown CIE color representation ' + color_rep) # get profile color space colorspace = profile.colorSpace # read cie values from ti3 data = ti3v.queryv1("DATA") if not data: raise ValueError(lang.getstr("error.testchart.invalid", ti3_filename)) cie_data = data.queryv(required) if not cie_data: raise ValueError(lang.getstr("error.testchart.missing_fields", (ti3_filename, ", ".join(required)))) idata = [] if colorspace == "RGB" and add_white_patches: # make sure the first four patches are white so the whitepoint can be # averaged wp = [n * 100.0 for n in profile.tags.wtpt.values()] if color_rep == 'LAB': wp = colormath.XYZ2Lab(*wp) wp = OrderedDict((('L', wp[0]), ('a', wp[1]), ('b', wp[2]))) else: wp = OrderedDict((('X', wp[0]), ('Y', wp[1]), ('Z', wp[2]))) wp = [wp] * 4 safe_print("Added 4 white patches") else: wp = [] for cie in wp + cie_data.values(): cie = cie.values() if color_rep == 'XYZ': # assume scale 0...100 in ti3, we need to convert to 0...1 cie = [n / 100.0 for n in cie] idata.append(' '.join(str(n) for n in cie)) # lookup cie->device values through profile.icc using xicclu xicclu = get_argyll_util("xicclu").encode(fs_enc) cwd = self.create_tempdir() if isinstance(cwd, Exception): raise cwd profile.write(os.path.join(cwd, "temp.icc")) if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None p = sp.Popen([xicclu, '-fb', '-i' + intent, '-p' + pcs, '-s100', "temp.icc"], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.STDOUT, cwd=cwd.encode(fs_enc), startupinfo=startupinfo) odata = p.communicate('\n'.join(idata))[0].splitlines() if p.wait() != 0: # error raise IOError(''.join(odata)) self.wrapup(False) # write output ti1/ti3 ti1out = StringIO() ti1out.write('CTI1\n') ti1out.write('\n') ti1out.write('DESCRIPTOR "Argyll Calibration Target chart information 1"\n') include_sample_name = False i = 0 for line in odata: line = line.strip().split('->') line = ''.join(line).split() if line[-1] == '(clip)': line.pop() if i == 0: icolor = line[3].strip('[]').upper() if icolor == 'LAB': ilabel = 'LAB_L LAB_A LAB_B' elif icolor == 'XYZ': ilabel = 'XYZ_X XYZ_Y XYZ_Z' else: raise ValueError('Unknown CIE color representation ' + icolor) ocolor = line[-1].strip('[]') if ocolor == 'RGB': olabel = 'RGB_R RGB_G RGB_B' elif ocolor == 'CMYK': olabel = 'CMYK_C CMYK_M CMYK_Y CMYK_K' else: raise ValueError('Unknown color representation ' + ocolor) olabels = olabel.split() # add device fields to DATA_FORMAT if not yet present if not olabels[0] in ti3v.DATA_FORMAT.values() and \ not olabels[1] in ti3v.DATA_FORMAT.values() and \ not olabels[2] in ti3v.DATA_FORMAT.values() and \ (ocolor == 'RGB' or (ocolor == 'CMYK' and not olabels[3] in ti3v.DATA_FORMAT.values())): ti3v.DATA_FORMAT.add_data(olabels) # add required fields to DATA_FORMAT if not yet present if not required[0] in ti3v.DATA_FORMAT.values() and \ not required[1] in ti3v.DATA_FORMAT.values() and \ not required[2] in ti3v.DATA_FORMAT.values(): ti3v.DATA_FORMAT.add_data(required) ti1out.write('KEYWORD "COLOR_REP"\n') ti1out.write('COLOR_REP "' + ocolor + '"\n') ti1out.write('\n') ti1out.write('NUMBER_OF_FIELDS ') if include_sample_name: ti1out.write(str(2 + len(icolor) + len(ocolor)) + '\n') else: ti1out.write(str(1 + len(icolor) + len(ocolor)) + '\n') ti1out.write('BEGIN_DATA_FORMAT\n') ti1out.write('SAMPLE_ID ') if include_sample_name: ti1out.write('SAMPLE_NAME ' + olabel + ' ' + ilabel + '\n') else: ti1out.write(olabel + ' ' + ilabel + '\n') ti1out.write('END_DATA_FORMAT\n') ti1out.write('\n') ti1out.write('NUMBER_OF_SETS ' + str(len(odata)) + '\n') ti1out.write('BEGIN_DATA\n') if i < len(wp): if ocolor == 'RGB': device = '100.00 100.00 100.00'.split() else: device = '0 0 0 0'.split() else: device = line[5:-1] # Make sure device values do not exceed valid range of 0..100 device = [str(max(0, min(float(v), 100))) for v in device] cie = (wp + cie_data.values())[i].values() cie = [str(n) for n in cie] if include_sample_name: ti1out.write(str(i + 1) + ' ' + data[i][1].strip('"') + ' ' + ' '.join(device) + ' ' + ' '.join(cie) + '\n') else: ti1out.write(str(i + 1) + ' ' + ' '.join(device) + ' ' + ' '.join(cie) + '\n') if i > len(wp) - 1: # don't include whitepoint patches in ti3 # set device values in ti3 for n, v in enumerate(olabels): ti3v.DATA[i - len(wp)][v] = float(line[5 + n]) # set PCS values in ti3 for n, v in enumerate(cie): ti3v.DATA[i - len(wp)][required[n]] = float(v) i += 1 ti1out.write('END_DATA\n') ti1out.seek(0) return CGATS.CGATS(ti1out), ti3v def verify_calibration(self): """ Verify the current calibration """ cmd, args = self.prepare_dispcal(calibrate=False, verify=True) if not isinstance(cmd, Exception): result = self.exec_cmd(cmd, args, capture_output=True, skip_scripts=True) else: result = cmd return result def measure_ti1(self, ti1_path, cal_path=None, colormanaged=False): """ Measure a TI1 testchart file """ if config.get_display_name() == "Untethered": cmd, args = get_argyll_util("spotread"), ["-v", "-e"] if getcfg("extra_args.spotread").strip(): args += parse_argument_string(getcfg("extra_args.spotread")) self.set_terminal_cgats(ti1_path) else: cmd = get_argyll_util("dispread") args = ["-v"] if config.get_display_name() == "madVR" and colormanaged: args += ["-V"] if cal_path: if (self.argyll_version >= [1, 3, 3] and (not self.has_lut_access() or not getcfg("calibration.use_video_lut"))): if config.get_display_name() == "madVR": # Normally -K will automatically reset the video LUT, # but when using madVR, we have to do it explicitly result = self.reset_cal() if (isinstance(result, Exception) and not isinstance(result, UnloggedInfo)): return result, None args += ["-K"] else: args += ["-k"] args += [cal_path] if getcfg("extra_args.dispread").strip(): args += parse_argument_string(getcfg("extra_args.dispread")) result = self.add_measurement_features(args, cmd == get_argyll_util("dispread")) if isinstance(result, Exception): return result if config.get_display_name() != "Untethered": args += [os.path.splitext(ti1_path)[0]] return self.exec_cmd(cmd, args, skip_scripts=True) def wrapup(self, copy=True, remove=True, dst_path=None, ext_filter=None): """ Wrap up - copy and/or clean temporary file(s). """ if debug: safe_print("[D] wrapup(copy=%s, remove=%s)" % (copy, remove)) if not self.tempdir or not os.path.isdir(self.tempdir): return # nothing to do while self.sessionlogfiles: self.sessionlogfiles.popitem()[1].close() result = True if copy: try: src_listdir = os.listdir(self.tempdir) except Exception, exception: result = exception remove = False if not isinstance(result, Exception) and src_listdir: if not ext_filter: ext_filter = [".app", ".cal", ".ccmx", ".ccss", ".cmd", ".command", ".gam", ".gz", ".icc", ".icm", ".log", ".sh", ".ti1", ".ti3", ".wrl", ".wrz"] if dst_path is None: dst_path = os.path.join(getcfg("profile.save_path"), getcfg("profile.name.expanded"), getcfg("profile.name.expanded") + ".ext") result = check_create_dir(os.path.dirname(dst_path)) if isinstance(result, Exception): remove = False else: for basename in src_listdir: name, ext = os.path.splitext(basename) if ext_filter is None or ext.lower() in ext_filter: src = os.path.join(self.tempdir, basename) dst = os.path.join(os.path.dirname(dst_path), basename) if os.path.exists(dst): if os.path.isdir(dst): if verbose >= 2: safe_print(appname + ": Removing existing " "destination directory tree", dst) try: shutil.rmtree(dst, True) except Exception, exception: safe_print(u"Warning - directory '%s' " u"could not be removed: %s" % tuple(safe_unicode(s) for s in (dst, exception))) else: if verbose >= 2: safe_print(appname + ": Removing existing " "destination file", dst) try: os.remove(dst) except Exception, exception: safe_print(u"Warning - file '%s' could " u"not be removed: %s" % tuple(safe_unicode(s) for s in (dst, exception))) if remove: if verbose >= 2: safe_print(appname + ": Moving temporary " "object %s to %s" % (src, dst)) try: shutil.move(src, dst) except Exception, exception: safe_print(u"Warning - temporary object " u"'%s' could not be moved to " u"'%s': %s" % tuple(safe_unicode(s) for s in (src, dst, exception))) try: shutil.copyfile(src, dst) except Exception, exception: result = Error(lang.getstr("error.copy_failed", (src, dst))) else: if os.path.isdir(src): if verbose >= 2: safe_print(appname + ": Copying temporary " "directory tree %s to %s" % (src, dst)) try: shutil.copytree(src, dst) except Exception, exception: safe_print(u"Warning - temporary " u"directory '%s' could not " u"be copied to '%s': %s" % tuple(safe_unicode(s) for s in (src, dst, exception))) else: if verbose >= 2: safe_print(appname + ": Copying temporary " "file %s to %s" % (src, dst)) try: shutil.copyfile(src, dst) except Exception, exception: safe_print(u"Warning - temporary file " u"'%s' could not be copied " u"to '%s': %s" % tuple(safe_unicode(s) for s in (src, dst, exception))) if remove: try: src_listdir = os.listdir(self.tempdir) except Exception, exception: safe_print(u"Error - directory '%s' listing failed: %s" % tuple(safe_unicode(s) for s in (self.tempdir, exception))) else: for basename in src_listdir: name, ext = os.path.splitext(basename) if ext_filter is None or ext.lower() not in ext_filter: src = os.path.join(self.tempdir, basename) isdir = os.path.isdir(src) if isdir: if verbose >= 2: safe_print(appname + ": Removing temporary " "directory tree", src) try: shutil.rmtree(src, True) except Exception, exception: safe_print(u"Warning - temporary directory " u"'%s' could not be removed: %s" % tuple(safe_unicode(s) for s in (src, exception))) else: if verbose >= 2: safe_print(appname + ": Removing temporary file", src) try: os.remove(src) except Exception, exception: safe_print(u"Warning - temporary file " u"'%s' could not be removed: %s" % tuple(safe_unicode(s) for s in (src, exception))) try: src_listdir = os.listdir(self.tempdir) except Exception, exception: safe_print(u"Error - directory '%s' listing failed: %s" % tuple(safe_unicode(s) for s in (self.tempdir, exception))) else: if not src_listdir: if verbose >= 2: safe_print(appname + ": Removing empty temporary directory", self.tempdir) try: shutil.rmtree(self.tempdir, True) except Exception, exception: safe_print(u"Warning - temporary directory '%s' could " u"not be removed: %s" % tuple(safe_unicode(s) for s in (self.tempdir, exception))) if isinstance(result, Exception): result = Error(safe_unicode(result) + "\n\n" + lang.getstr("tempdir_should_still_contain_files", self.tempdir)) return result def write(self, txt): wx.CallAfter(self.parse, txt) dispcalGUI-1.7.1.6/dispcalGUI/wxaddons.py000644 000765 000000 00000014323 12264345701 020012 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys from wxfixes import wx def GetRealClientArea(self): """ Return the real (non-overlapping) client area of a display """ # need to fix overlapping ClientArea on some Linux multi-display setups # the client area must be always smaller than the geometry clientarea = list(self.ClientArea) if self.Geometry[0] > clientarea[0]: clientarea[0] = self.Geometry[0] if self.Geometry[1] > clientarea[1]: clientarea[1] = self.Geometry[1] if self.Geometry[2] < clientarea[2]: clientarea[2] = self.Geometry[2] if self.Geometry[3] < clientarea[3]: clientarea[3] = self.Geometry[3] return wx.Rect(*clientarea) wx.Display.GetRealClientArea = GetRealClientArea def GetAllChildren(self): """ Get children of window and its subwindows """ children = self.GetChildren() allchildren = [] for child in children: allchildren += [child] if hasattr(child, "GetAllChildren") and hasattr(child.GetAllChildren, "__call__"): allchildren += child.GetAllChildren() return allchildren wx.Window.GetAllChildren = GetAllChildren def GetDisplay(self): """ Return the display the window is shown on """ display_no = wx.Display.GetFromWindow(self) if display_no < 0: # window outside visible area display_no = 0 return wx.Display(display_no) wx.Window.GetDisplay = GetDisplay def SetMaxFontSize(self, pointsize=11): font = self.GetFont() if font.GetPointSize() > pointsize: font.SetPointSize(pointsize) self.SetFont(font) wx.Window.SetMaxFontSize = SetMaxFontSize def SetSaneGeometry(self, x=None, y=None, w=None, h=None): """ Set a 'sane' window position and/or size (within visible screen area). """ if not None in (x, y): # First, move to coordinates given self.SetPosition((x, y)) # Returns the first display's client area if the window # is completely outside the client area of all displays display_client_rect = self.GetDisplay().ClientArea if sys.platform not in ("darwin", "win32"): # Linux safety_margin = 45 else: safety_margin = 20 if not None in (w, h): # Set given size, but resize if needed to fit inside client area self.SetSize((min(display_client_rect[2] - safety_margin, w), min(display_client_rect[3] - safety_margin, h))) if not None in (x, y): if not display_client_rect.ContainsXY(x, y) or \ not display_client_rect.ContainsRect((x, y, 100, 100)): # If outside client area or near the borders, # move to leftmost / topmost coordinates of client area self.SetPosition(display_client_rect[0:2]) wx.Window.SetSaneGeometry = SetSaneGeometry def GridGetSelectedRowsFromSelection(self): """ Return the number of fully selected rows. Unlike GetSelectedRows, include rows that have been selected by chosing individual cells. """ sel = self.GetSelection() numcols = self.GetNumberCols() rows = [] i = -1 for cell in sel: row, col = cell if row > i: i = row rownumcols = 0 rownumcols += 1 if rownumcols == numcols: rows += [row] return rows wx.grid.Grid.GetSelectedRowsFromSelection = GridGetSelectedRowsFromSelection def GridGetSelectionRows(self): """ Return the selected rows, even if not all cells in a row are selected. """ sel = self.GetSelection() rows = [] i = -1 for cell in sel: row, col = cell if row > i: i = row rows += [row] return rows wx.grid.Grid.GetSelectionRows = GridGetSelectionRows def IsSizer(self): """ Check if the window is a sizer """ return isinstance(self, wx.Sizer) wx.Window.IsSizer = IsSizer wx.BitmapButton._SetBitmapDisabled = wx.BitmapButton.SetBitmapDisabled def SetBitmapDisabled(self, bitmap=None): image = self.GetBitmapLabel().ConvertToImage() if image.HasMask(): image.InitAlpha() if image.HasAlpha(): alphabuffer = image.GetAlphaBuffer() for i, byte in enumerate(alphabuffer): if byte > "\0": alphabuffer[i] = chr(int(round(ord(byte) * .3))) bitmap = image.ConvertToBitmap() self._SetBitmapDisabled(bitmap) wx.BitmapButton.SetBitmapDisabled = SetBitmapDisabled def get_dc_font_size(size, dc): """ Get correct font size for DC """ pointsize = (1.0, 1.0) if isinstance(dc, wx.GCDC): pointsize = tuple(1.0 / scale for scale in dc.GetLogicalScale()) if sys.platform in ("darwin", "win32") or not isinstance(dc, wx.GCDC): return size * (sum(pointsize) / 2.0) else: # On Linux, we need to correct the font size by a certain factor if # wx.GCDC is used, to make text the same size as if wx.GCDC weren't used ppi = dc.GetPPI() return size * ((96.0 / ppi[0] * pointsize[0] + 96.0 / ppi[1] * pointsize[1]) / 2.0) def get_platform_window_decoration_size(): if sys.platform in ("darwin", "win32"): # Size includes windows decoration if sys.platform == "win32": border = 8 # Windows 7 titlebar = 30 # Windows 7 else: border = 0 # Mac OS X 10.7 Lion titlebar = 22 # Mac OS X 10.7 Lion else: # Linux. Size does not include window decoration border = 0 titlebar = 0 return border, titlebar class CustomEvent(wx.PyEvent): def __init__(self, typeId, object, window=None): wx.PyEvent.__init__(self, typeId, object.GetId()) self.evtType = [typeId] self.typeId = typeId self.object = object self.window = window def GetEventObject(self): return self.object def GetEventType(self): return self.typeId def GetWindow(self): return self.window class CustomGridCellEvent(CustomEvent): def __init__(self, typeId, object, row=-1, col=-1, window=None): CustomEvent.__init__(self, typeId, object, window) self.row = row self.col = col @property def Col(self): return self.col def GetRow(self): return self.row def GetCol(self): return self.col @property def Row(self): return self.row class FileDrop(wx.FileDropTarget): def __init__(self, drophandlers=None): wx.FileDropTarget.__init__(self) if drophandlers is None: drophandlers = {} self.drophandlers = drophandlers self.unsupported_handler = None def OnDropFiles(self, x, y, filenames): self._files = {} self._filenames = filenames for filename in filenames: name, ext = os.path.splitext(filename) if ext.lower() in self.drophandlers: self._files[ext.lower()] = filename if len(self._files): for key in self._files: self.drophandlers[key](self._files[key]) elif self.unsupported_handler: self.unsupported_handler() dispcalGUI-1.7.1.6/dispcalGUI/wxDisplayAdjustmentFrame.py000644 000765 000000 00000165304 12266411534 023167 0ustar00svpwheel000000 000000 # -*- coding: UTF-8 -*- """ Interactive display calibration UI """ import os import re import sys from wxaddons import wx from wx.lib import delayedresult from lib.agw import labelbook from lib.agw.fmresources import * from lib.agw.pygauge import PyGauge from lib.agw.artmanager import ArtManager from config import (get_data_path, get_icon_bundle, getbitmap, getcfg, setcfg, valid_values) from log import get_file_logger from meta import name as appname from ordereddict import OrderedDict from util_str import wrap from wxwindows import FlatShadedButton, numpad_keycodes import colormath import config import localization as lang BGCOLOUR = wx.Colour(0x33, 0x33, 0x33) BORDERCOLOUR = wx.Colour(0x22, 0x22, 0x22) FGCOLOUR = wx.Colour(0x99, 0x99, 0x99) CRT = True def get_panel(parent, size=wx.DefaultSize): panel = wx.Panel(parent, wx.ID_ANY, size=size) if "--debug" in sys.argv[1:]: from random import randint panel.SetBackgroundColour(wx.Colour(randint(0, 255), randint(0, 255), randint(0, 255))) get_panel.i += 1 wx.StaticText(panel, wx.ID_ANY, str(get_panel.i) + " " + str(size)) else: panel.SetBackgroundColour(BGCOLOUR) return panel get_panel.i = 0 def get_xy_vt_dE(groups): x = float(groups[0]) y = float(groups[1]) vt = "" dE = 0 if len(groups) > 2: vt = groups[2] or "" if groups[3]: dE = float(groups[3]) return x, y, vt, dE def set_label_and_size(txtctrl, label): txtctrl.SetMinSize((txtctrl.GetSize()[0], -1)) txtctrl.SetLabel(label) txtctrl.SetMinSize(txtctrl.GetSize()) class DisplayAdjustmentImageContainer(labelbook.ImageContainer): def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="ImageContainer"): """ Override default agw ImageContainer to use BackgroundColour and ForegroundColour with no borders/labeltext and hilite image instead of hilite shading """ labelbook.ImageContainer.__init__(self, parent, id, pos, size, style, agwStyle, name) imagelist = wx.ImageList(84, 72) for img in ("tab_hilite", "tab_selected"): bmp = getbitmap("theme/%s" % img) imagelist.Add(bmp) self.stateimgs = imagelist def HitTest(self, pt): """ Returns the index of the tab at the specified position or ``wx.NOT_FOUND`` if ``None``, plus the flag style of L{HitTest}. :param `pt`: an instance of `wx.Point`, to test for hits. :return: The index of the tab at the specified position plus the hit test flag, which can be one of the following bits: ====================== ======= ================================ HitTest Flags Value Description ====================== ======= ================================ ``IMG_OVER_IMG`` 0 The mouse is over the tab icon ``IMG_OVER_PIN`` 1 The mouse is over the pin button ``IMG_OVER_EW_BORDER`` 2 The mouse is over the east-west book border ``IMG_NONE`` 3 Nowhere ====================== ======= ================================ """ if self.GetParent().GetParent().is_busy: return -1, IMG_NONE style = self.GetParent().GetAGWWindowStyleFlag() if style & INB_USE_PIN_BUTTON: if self._pinBtnRect.Contains(pt): return -1, IMG_OVER_PIN for i in xrange(len(self._pagesInfoVec)): if self._pagesInfoVec[i].GetPosition() == wx.Point(-1, -1): break if getcfg("measurement_mode") != "c" and i in self.GetParent().disabled_pages: continue # For Web Hover style, we test the TextRect if not self.HasAGWFlag(INB_WEB_HILITE): buttonRect = wx.RectPS((self._pagesInfoVec[i].GetPosition()[0], self._pagesInfoVec[i].GetPosition()[1] + i * 8), self._pagesInfoVec[i].GetSize()) else: buttonRect = self._pagesInfoVec[i].GetTextRect() if buttonRect.Contains(pt): return i, IMG_OVER_IMG if self.PointOnSash(pt): return -1, IMG_OVER_EW_BORDER else: return -1, IMG_NONE def OnPaint(self, event): """ Handles the ``wx.EVT_PAINT`` event for L{ImageContainer}. :param `event`: a `wx.PaintEvent` event to be processed. """ dc = wx.BufferedPaintDC(self) style = self.GetParent().GetAGWWindowStyleFlag() backBrush = wx.Brush(self.GetBackgroundColour()) if style & INB_BORDER: borderPen = wx.Pen(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DSHADOW)) else: borderPen = wx.TRANSPARENT_PEN size = self.GetSize() # Background dc.SetBrush(backBrush) borderPen.SetWidth(1) dc.SetPen(borderPen) dc.DrawRectangle(0, 0, size.x, size.y) bUsePin = (style & INB_USE_PIN_BUTTON and [True] or [False])[0] if bUsePin: # Draw the pin button clientRect = self.GetClientRect() pinRect = wx.Rect(clientRect.GetX() + clientRect.GetWidth() - 20, 2, 20, 20) self.DrawPin(dc, pinRect, not self._bCollapsed) if self._bCollapsed: return borderPen = wx.BLACK_PEN borderPen.SetWidth(1) dc.SetPen(borderPen) dc.DrawLine(0, size.y, size.x, size.y) dc.DrawPoint(0, size.y) clientSize = 0 bUseYcoord = (style & INB_RIGHT or style & INB_LEFT) if bUseYcoord: clientSize = size.GetHeight() else: clientSize = size.GetWidth() # We reserver 20 pixels for the 'pin' button # The drawing of the images start position. This is # depenedent of the style, especially when Pin button # style is requested if bUsePin: if style & INB_TOP or style & INB_BOTTOM: pos = (style & INB_BORDER and [0] or [1])[0] else: pos = (style & INB_BORDER and [20] or [21])[0] else: pos = (style & INB_BORDER and [0] or [1])[0] nPadding = 4 # Pad text with 2 pixels on the left and right nTextPaddingLeft = 2 count = 0 for i in xrange(len(self._pagesInfoVec)): if self.GetParent().GetParent().is_busy and i != self.GetParent().GetSelection(): continue if getcfg("measurement_mode") != "c" and i in self.GetParent().disabled_pages: continue count = count + 1 # incase the 'fit button' style is applied, we set the rectangle width to the # text width plus padding # Incase the style IS applied, but the style is either LEFT or RIGHT # we ignore it normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) dc.SetFont(normalFont) textWidth, textHeight = dc.GetTextExtent(self._pagesInfoVec[i].GetCaption()) # Restore font to be normal normalFont.SetWeight(wx.FONTWEIGHT_NORMAL) dc.SetFont(normalFont) # Default values for the surronounding rectangle # around a button rectWidth = self._nImgSize # To avoid the recangle to 'touch' the borders rectHeight = self._nImgSize # Incase the style requires non-fixed button (fit to text) # recalc the rectangle width if style & INB_FIT_BUTTON and \ not ((style & INB_LEFT) or (style & INB_RIGHT)) and \ not self._pagesInfoVec[i].GetCaption() == "" and \ not (style & INB_SHOW_ONLY_IMAGES): rectWidth = ((textWidth + nPadding * 2) > rectWidth and [nPadding * 2 + textWidth] or [rectWidth])[0] # Make the width an even number if rectWidth % 2 != 0: rectWidth += 1 # Check that we have enough space to draw the button # If Pin button is used, consider its space as well (applicable for top/botton style) # since in the left/right, its size is already considered in 'pos' pinBtnSize = (bUsePin and [20] or [0])[0] if pos + rectWidth + pinBtnSize > clientSize: break # Calculate the button rectangle modRectWidth = ((style & INB_LEFT or style & INB_RIGHT) and [rectWidth - 2] or [rectWidth])[0] modRectHeight = ((style & INB_LEFT or style & INB_RIGHT) and [rectHeight] or [rectHeight - 2])[0] if bUseYcoord: buttonRect = wx.Rect(1, pos, modRectWidth, modRectHeight) else: buttonRect = wx.Rect(pos , 1, modRectWidth, modRectHeight) if bUseYcoord: rect = wx.Rect(0, pos, rectWidth, rectWidth) else: rect = wx.Rect(pos, 0, rectWidth, rectWidth) # Incase user set both flags: # INB_SHOW_ONLY_TEXT and INB_SHOW_ONLY_IMAGES # We override them to display both if style & INB_SHOW_ONLY_TEXT and style & INB_SHOW_ONLY_IMAGES: style ^= INB_SHOW_ONLY_TEXT style ^= INB_SHOW_ONLY_IMAGES self.GetParent().SetAGWWindowStyleFlag(style) # Draw the caption and text imgTopPadding = 0 if not style & INB_SHOW_ONLY_TEXT and self._pagesInfoVec[i].GetImageIndex() != -1: if bUseYcoord: imgXcoord = 0 imgYcoord = (style & INB_SHOW_ONLY_IMAGES and [pos] or [pos + imgTopPadding])[0] + (8 * (count - 1)) else: imgXcoord = pos + (rectWidth / 2) - (self._nImgSize / 2) imgYcoord = (style & INB_SHOW_ONLY_IMAGES and [self._nImgSize / 2] or [imgTopPadding])[0] if self._nHoeveredImgIdx == i: self.stateimgs.Draw(0, dc, 0, imgYcoord, wx.IMAGELIST_DRAW_TRANSPARENT, True) if self._nIndex == i: self.stateimgs.Draw(1, dc, 0, imgYcoord, wx.IMAGELIST_DRAW_TRANSPARENT, True) self._ImageList.Draw(self._pagesInfoVec[i].GetImageIndex(), dc, imgXcoord, imgYcoord, wx.IMAGELIST_DRAW_TRANSPARENT, True) # Draw the text if not style & INB_SHOW_ONLY_IMAGES and not self._pagesInfoVec[i].GetCaption() == "": dc.SetFont(normalFont) # Check if the text can fit the size of the rectangle, # if not truncate it fixedText = self._pagesInfoVec[i].GetCaption() if not style & INB_FIT_BUTTON or (style & INB_LEFT or (style & INB_RIGHT)): fixedText = self.FixTextSize(dc, self._pagesInfoVec[i].GetCaption(), self._nImgSize *2 - 4) # Update the length of the text textWidth, textHeight = dc.GetTextExtent(fixedText) if bUseYcoord: textOffsetX = ((rectWidth - textWidth) / 2 ) textOffsetY = (not style & INB_SHOW_ONLY_TEXT and [pos + self._nImgSize + imgTopPadding + 3] or \ [pos + ((self._nImgSize * 2 - textHeight) / 2 )])[0] else: textOffsetX = (rectWidth - textWidth) / 2 + pos + nTextPaddingLeft textOffsetY = (not style & INB_SHOW_ONLY_TEXT and [self._nImgSize + imgTopPadding + 3] or \ [((self._nImgSize * 2 - textHeight) / 2 )])[0] dc.SetTextForeground(self.GetForegroundColour()) dc.DrawText(fixedText, textOffsetX, textOffsetY) # Update the page info self._pagesInfoVec[i].SetPosition(buttonRect.GetPosition()) self._pagesInfoVec[i].SetSize(buttonRect.GetSize()) pos += rectWidth # Update all buttons that can not fit into the screen as non-visible #for ii in xrange(count, len(self._pagesInfoVec)): #self._pagesInfoVec[ii].SetPosition(wx.Point(-1, -1)) # Draw the pin button if bUsePin: clientRect = self.GetClientRect() pinRect = wx.Rect(clientRect.GetX() + clientRect.GetWidth() - 20, 2, 20, 20) self.DrawPin(dc, pinRect, not self._bCollapsed) class DisplayAdjustmentFlatImageBook(labelbook.FlatImageBook): def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="FlatImageBook"): """ Override default agw ImageContainer to use BackgroundColour and ForegroundColour with no borders/labeltext and hilite image instead of hilite shading """ labelbook.FlatImageBook.__init__(self, parent, id, pos, size, style, agwStyle, name) def CreateImageContainer(self): return DisplayAdjustmentImageContainer(self, wx.ID_ANY, agwStyle=self.GetAGWWindowStyleFlag()) def SetAGWWindowStyleFlag(self, agwStyle): """ Sets the window style. :param `agwStyle`: can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== """ self._agwStyle = agwStyle # Check that we are not in initialization process if self._bInitializing: return if not self._pages: return # Detach the windows attached to the sizer if self.GetSelection() >= 0: self._mainSizer.Detach(self._windows[self.GetSelection()]) self._mainSizer.Detach(self._pages) # Create new sizer with the requested orientaion className = self.GetName() if className == "LabelBook": self._mainSizer = wx.BoxSizer(wx.HORIZONTAL) else: if agwStyle & INB_LEFT or agwStyle & INB_RIGHT: self._mainSizer = wx.BoxSizer(wx.HORIZONTAL) else: self._mainSizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self._mainSizer) # Add the tab container and the separator self._mainSizer.Add(self._pages, 0, wx.EXPAND) if className == "FlatImageBook": if agwStyle & INB_LEFT or agwStyle & INB_RIGHT: self._pages.SetSizeHints(self._pages._nImgSize + 24, -1) else: self._pages.SetSizeHints(-1, self._pages._nImgSize) # Attach the windows back to the sizer to the sizer if self.GetSelection() >= 0: self.DoSetSelection(self._windows[self.GetSelection()]) if agwStyle & INB_FIT_LABELTEXT: self.ResizeTabArea() self._mainSizer.Layout() dummy = wx.SizeEvent() wx.PostEvent(self, dummy) self._pages.Refresh() class DisplayAdjustmentPanel(wx.Panel): def __init__(self, parent=None, id=wx.ID_ANY, title="", ctrltype="luminance"): wx.Panel.__init__(self, parent, id) self.ctrltype = ctrltype self.SetBackgroundColour(BGCOLOUR) self.SetForegroundColour(FGCOLOUR) self.SetSizer(wx.BoxSizer(wx.VERTICAL)) self.title_txt = wx.StaticText(self, wx.ID_ANY, title) if sys.platform == "darwin": fontsize = 11 else: fontsize = 10 self.title_txt.SetFont(wx.Font(fontsize, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)) self.title_txt.SetForegroundColour(FGCOLOUR) self.GetSizer().Add(self.title_txt) self.sizer = wx.FlexGridSizer(0, 2, 0, 0) self.GetSizer().Add(self.sizer, flag=wx.TOP, border=8) self.gauges = OrderedDict() self.txt = OrderedDict() if ctrltype == "check_all": txt = wx.StaticText(self, wx.ID_ANY, lang.getstr("calibration.interactive_display_adjustment.check_all")) txt.SetForegroundColour(FGCOLOUR) txt.SetMaxFontSize(10) txt.Wrap(250) self.desc = txt self.GetSizer().Insert(1, txt, flag=wx.TOP, border=8) for name, lstr in (("luminance", "calibration.luminance"), ("black_level", "calibration.black_luminance"), ("white_point", "whitepoint"), ("black_point", "black_point")): bitmap = wx.StaticBitmap(self, wx.ID_ANY, getbitmap("theme/icons/16x16/%s" % name)) bitmap.SetToolTipString(lang.getstr(lstr)) self.add_txt(name, bitmap, 4) return if ctrltype.startswith("rgb"): if ctrltype == "rgb_offset": # CRT lstr = "calibration.interactive_display_adjustment.black_point.crt" else: lstr = "calibration.interactive_display_adjustment.white_point" txt = wx.StaticText(self, wx.ID_ANY, lang.getstr(lstr) + " " + lang.getstr("calibration.interactive_display_adjustment.generic_hint.plural")) txt.SetForegroundColour(FGCOLOUR) txt.SetMaxFontSize(10) txt.Wrap(250) self.desc = txt self.GetSizer().Insert(1, txt, flag=wx.TOP, border=8) self.sizer.Add((1, 4)) self.sizer.Add((1, 4)) self.add_marker() self.add_gauge("R", ctrltype + "_red", "R") self.sizer.Add((1, 4)) self.sizer.Add((1, 4)) self.add_gauge("G", ctrltype + "_green", "G") self.sizer.Add((1, 4)) self.sizer.Add((1, 4)) self.add_gauge("B", ctrltype + "_blue", "B") self.add_marker("btm") self.add_txt("rgb") else: txt = wx.StaticText(self, wx.ID_ANY, " ") txt.SetForegroundColour(FGCOLOUR) txt.SetMaxFontSize(10) txt.Wrap(250) self.desc = txt self.GetSizer().Insert(1, txt, flag=wx.TOP, border=8) self.sizer.Add((1, 4)) self.sizer.Add((1, 4)) self.add_marker() bitmapnames = {"rgb_offset": "black_level", "rgb_gain": "luminance"} lstrs = {"black_level": "calibration.black_luminance", "rgb_offset": "calibration.black_luminance", "rgb_gain": "calibration.luminance", "luminance": "calibration.luminance"} self.add_gauge("L", bitmapnames.get(ctrltype, ctrltype), lang.getstr(lstrs.get(ctrltype, ctrltype))) self.add_marker("btm") self.add_txt("luminance") def add_gauge(self, name="R", bitmapname=None, tooltip=None): if bitmapname == "black_level" or bitmapname.startswith("rgb_offset"): gaugecolors = {"R": (wx.Colour(102, 0, 0), wx.Colour(204, 0, 0)), "G": (wx.Colour(0, 102, 0), wx.Colour(0, 204, 0)), "B": (wx.Colour(0, 0, 102), wx.Colour(0, 0, 204)), "L": (wx.Colour(102, 102, 102), wx.Colour(204, 204, 204))} else: gaugecolors = {"R": (wx.Colour(153, 0, 0), wx.Colour(255, 0, 0)), "G": (wx.Colour(0, 153, 0), wx.Colour(0, 255, 0)), "B": (wx.Colour(0, 0, 153), wx.Colour(0, 0, 255)), "L": (wx.Colour(153, 153, 153), wx.Colour(255, 255, 255))} self.gauges[name] = PyGauge(self, size=(200, 8)) self.gauges[name].SetBackgroundColour(BORDERCOLOUR) self.gauges[name].SetBarGradient(gaugecolors[name]) self.gauges[name].SetBorderColour(BORDERCOLOUR) self.gauges[name].SetValue(0) if bitmapname: self.gauges[name].label = wx.StaticBitmap(self, wx.ID_ANY, getbitmap("theme/icons/16x16/%s" % bitmapname)) if tooltip: self.gauges[name].label.SetToolTipString(tooltip) else: self.gauges[name].label = wx.StaticText(self, wx.ID_ANY, name) self.gauges[name].label.SetForegroundColour(FGCOLOUR) self.sizer.Add(self.gauges[name].label, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=8) self.sizer.Add(self.gauges[name], flag=wx.ALIGN_CENTER_VERTICAL) def add_marker(self, direction="top"): self.sizer.Add((1, 1)) self.sizer.Add(wx.StaticBitmap(self, bitmap=getbitmap("theme/marker_%s" % direction), size=(200, 10))) def add_txt(self, name, spacer=None, border=8): checkmark = wx.StaticBitmap(self, wx.ID_ANY, getbitmap("theme/icons/16x16/checkmark")) txtsizer = wx.BoxSizer(wx.HORIZONTAL) if spacer: self.sizer.Add(spacer, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=8) txtsizer.Add(checkmark, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=8) else: self.sizer.Add(checkmark, flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, border=8) initial = lang.getstr("initial") current = lang.getstr("current") target = lang.getstr("target") strings = {len(initial): initial, len(current): current, len(target): target} longest = strings[max(strings.keys())] label = longest + u" x 0.0000 y 0.0000 VDT 0000K 0.0 \u0394E*00" checkmark.GetContainingSizer().Hide(checkmark) self.sizer.Add(txtsizer, flag=wx.TOP | wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL, border=border) self.txt[name] = wx.StaticText(self, wx.ID_ANY, label) self.txt[name].SetForegroundColour(BGCOLOUR) self.txt[name].SetMaxFontSize(10) self.txt[name].checkmark = checkmark self.txt[name].spacer = spacer txtsizer.Add(self.txt[name]) self.txt[name].Fit() self.txt[name].SetMinSize((self.txt[name].GetSize()[0], self.txt[name].GetSize()[1] * 2)) def update_desc(self): if self.ctrltype in ("luminance", "black_level"): if self.ctrltype == "black_level": lstr = "calibration.interactive_display_adjustment.black_level.crt" elif getcfg("measurement_mode") == "c": # CRT lstr = "calibration.interactive_display_adjustment.white_level.crt" else: lstr = "calibration.interactive_display_adjustment.white_level.lcd" self.desc.SetLabel(lang.getstr(lstr) + " " + lang.getstr("calibration.interactive_display_adjustment.generic_hint.singular")) self.desc.Wrap(250) class DisplayAdjustmentFrame(wx.Frame): def __init__(self, parent=None, handler=None, keyhandler=None, start_timer=True): wx.Frame.__init__(self, parent, wx.ID_ANY, lang.getstr("calibration.interactive_display_adjustment"), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetIcons(get_icon_bundle([256, 48, 32, 16], appname)) self.SetBackgroundColour(BGCOLOUR) self.sizer = wx.FlexGridSizer(0, 3) self.sizer.AddGrowableCol(1) self.sizer.AddGrowableRow(2) self.SetSizer(self.sizer) # FlatImageNotebook self.lb = DisplayAdjustmentFlatImageBook(self, agwStyle=INB_LEFT | INB_SHOW_ONLY_IMAGES) self.lb.SetBackgroundColour(BGCOLOUR) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.sizer.Add(self.lb, 1, flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.pagenum_2_argyll_key_num = {} # Page - black luminance self.page_black_luminance = DisplayAdjustmentPanel(self, wx.ID_ANY, lang.getstr("calibration.black_luminance"), "black_level") self.lb.AddPage(self.page_black_luminance, lang.getstr("calibration.black_luminance"), True, 0) self.pagenum_2_argyll_key_num[len(self.pagenum_2_argyll_key_num)] = "1" # Page - white point self.page_white_point = DisplayAdjustmentPanel(self, wx.ID_ANY, lang.getstr("whitepoint") + " / " + lang.getstr("calibration.luminance"), "rgb_gain") self.lb.AddPage(self.page_white_point, lang.getstr("whitepoint"), True, 1) self.pagenum_2_argyll_key_num[len(self.pagenum_2_argyll_key_num)] = "2" # Page - luminance self.page_luminance = DisplayAdjustmentPanel(self, wx.ID_ANY, lang.getstr("calibration.luminance")) self.lb.AddPage(self.page_luminance, lang.getstr("calibration.luminance"), True, 2) self.pagenum_2_argyll_key_num[len(self.pagenum_2_argyll_key_num)] = "3" # Page - black point self.page_black_point = DisplayAdjustmentPanel(self, wx.ID_ANY, lang.getstr("black_point") + " / " + lang.getstr("calibration.black_luminance"), "rgb_offset") self.lb.AddPage(self.page_black_point, lang.getstr("black_point"), True, 3) self.pagenum_2_argyll_key_num[len(self.pagenum_2_argyll_key_num)] = "4" # Page - check all self.page_check_all = DisplayAdjustmentPanel(self, wx.ID_ANY, lang.getstr("calibration.check_all"), "check_all") self.lb.AddPage(self.page_check_all, lang.getstr("calibration.check_all"), True, 4) self.pagenum_2_argyll_key_num[len(self.pagenum_2_argyll_key_num)] = "5" # Set colours on tab list self.lb.Children[0].SetBackgroundColour(BGCOLOUR) self.lb.Children[0].SetForegroundColour(FGCOLOUR) # Sound when measuring # Needs to be stereo! try: self.measurement_sound = wx.Sound(get_data_path("beep.wav") or "") except NotImplementedError: pass # Add buttons self.btnsizer = wx.BoxSizer(wx.HORIZONTAL) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.sizer.Add(self.btnsizer, flag=wx.ALIGN_RIGHT | wx.EXPAND) self.btnsizer.Add(get_panel(self, (2, 12)), 1, flag=wx.EXPAND) self.indicator_panel = get_panel(self, (22, 12)) self.indicator_panel.SetSizer(wx.BoxSizer(wx.HORIZONTAL)) self.indicator_panel.SetForegroundColour(FGCOLOUR) self.btnsizer.Add(self.indicator_panel, flag=wx.EXPAND) self.indicator_ctrl = wx.StaticBitmap(self.indicator_panel, wx.ID_ANY, getbitmap("10x10/empty"), size=(10, 10)) self.indicator_ctrl.SetForegroundColour(FGCOLOUR) self.indicator_panel.GetSizer().Add(self.indicator_ctrl, flag=wx.ALIGN_CENTER_VERTICAL) self.indicator_panel.GetSizer().Add(get_panel(self.indicator_panel, (10, 12)), flag=wx.EXPAND) self.create_start_interactive_adjustment_button() self.adjustment_btn.SetDefault() self.btnsizer.Add(get_panel(self, (6, 12)), flag=wx.EXPAND) if getcfg("measurement.play_sound"): bitmap = getbitmap("theme/icons/16x16/sound_volume_full") else: bitmap = getbitmap("theme/icons/16x16/sound_off") self.sound_on_off_btn = self.create_gradient_button(bitmap, "", name="sound_on_off_btn") self.sound_on_off_btn.SetToolTipString(lang.getstr("measurement.play_sound")) self.sound_on_off_btn.Bind(wx.EVT_BUTTON, self.measurement_play_sound_handler) self.btnsizer.Add(get_panel(self, (12, 12)), flag=wx.EXPAND) self.calibration_btn = self.create_gradient_button(getbitmap("theme/icons/10x10/skip"), " " + lang.getstr("calibration.start"), name="calibration_btn") self.calibration_btn.Bind(wx.EVT_BUTTON, self.continue_to_calibration) self.calibration_btn.Disable() self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.add_panel((12, 12), flag=wx.EXPAND) self.keyhandler = keyhandler if sys.platform in ("darwin", "win32"): # Use an accelerator table for space, 0-9, A-Z, numpad keycodes = [ord(" ")] + range(ord("0"), ord("9")) + range(ord("A"), ord("Z")) + numpad_keycodes self.id_to_keycode = {} for keycode in keycodes: self.id_to_keycode[wx.NewId()] = keycode accels = [] for id, keycode in self.id_to_keycode.iteritems(): self.Bind(wx.EVT_MENU, self.key_handler, id=id) accels += [(wx.ACCEL_NORMAL, keycode, id)] self.SetAcceleratorTable(wx.AcceleratorTable(accels)) else: self.Bind(wx.EVT_CHAR_HOOK, self.key_handler) # Event handlers self.Bind(wx.EVT_CLOSE, self.OnClose, self) self.Bind(wx.EVT_MOVE, self.OnMove, self) self.timer = wx.Timer(self) if handler: self.Bind(wx.EVT_TIMER, handler, self.timer) self.Bind(labelbook.EVT_IMAGENOTEBOOK_PAGE_CHANGING, self.OnPageChanging) self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy, self) # Final initialization steps self.logger = get_file_logger("adjust") self._setup(True) self.Show() if start_timer: self.start_timer() def EndModal(self, returncode=wx.ID_OK): return returncode def MakeModal(self, makemodal=False): pass def OnClose(self, event): #if getattr(self, "measurement_play_sound_ctrl", None): #setcfg("measurement.play_sound", #int(self.measurement_play_sound_ctrl.GetValue())) config.writecfg() if not self.timer.IsRunning(): self.Destroy() else: self.keepGoing = False def OnDestroy(self, event): self.stop_timer() del self.timer def OnMove(self, event): if self.IsShownOnScreen() and not self.IsIconized() and \ (not self.GetParent() or not self.GetParent().IsShownOnScreen()): prev_x = getcfg("position.progress.x") prev_y = getcfg("position.progress.y") x, y = self.GetScreenPosition() if x != prev_x or y != prev_y: setcfg("position.progress.x", x) setcfg("position.progress.y", y) def OnPageChanging(self, event): oldsel = event.GetOldSelection() newsel = event.GetSelection() self.abort() event.Skip() def Pulse(self, msg=""): if ((msg in (lang.getstr("instrument.initializing"), lang.getstr("instrument.calibrating"), lang.getstr("please_wait"), lang.getstr("aborting")) or msg == " " * 4 or "error" in msg.lower() or "failed" in msg.lower() or msg.startswith(lang.getstr("webserver.waiting"))) and msg != self.lastmsg): self.lastmsg = msg self.Freeze() for txt in self.lb.GetCurrentPage().txt.itervalues(): txt.checkmark.GetContainingSizer().Hide(txt.checkmark) txt.SetLabel(" ") txt = self.lb.GetCurrentPage().txt.values()[0] if txt.GetLabel() != wrap(msg, 46): txt.SetLabel(wrap(msg, 46)) txt.SetForegroundColour(FGCOLOUR) self.Thaw() return self.keepGoing, False def Resume(self): self.keepGoing = True def Update(self, value, msg=""): return self.Pulse(msg) def UpdatePulse(self, msg=""): return self.Pulse(msg) def _assign_image_list(self): imagelist = wx.ImageList(72, 72) modes = {CRT: {"black_luminance": "luminance", "luminance": "contrast"}} for img in ("black_luminance", "white_point", "luminance", "black_point", "check_all"): img = modes.get(getcfg("measurement_mode") == "c", {}).get(img, img) bmp = getbitmap("theme/icons/72x72/%s" % img) imagelist.Add(bmp) self.lb.AssignImageList(imagelist) def _setup(self, init=False): self.logger.info("-" * 80) self.cold_run = True self.is_busy = None self.is_measuring = None self.keepGoing = True self.lastmsg = "" self.target_br = None self._assign_image_list() if getcfg("measurement_mode") == "c": self.lb.disabled_pages = tuple() self.lb.SetSelection(0) else: self.lb.disabled_pages = (0, 3) self.lb.SetSelection(1) # Update black luminance page description self.lb.GetPage(0).update_desc() # Update white luminance page description self.lb.GetPage(2).update_desc() # Set size min_h = (72 + 8) * (self.lb.GetPageCount() - len(self.lb.disabled_pages)) + 2 - 8 if init: self.lb.SetMinSize((350, min_h)) self.lb.SetMinSize((self.lb.GetMinSize()[0], max(self.lb.GetMinSize()[1], min_h))) self.lb.GetCurrentPage().Fit() self.lb.GetCurrentPage().Layout() self.lb.Fit() self.lb.Layout() self.SetMinSize((0, 0)) self.Fit() self.Layout() # The button sizer will be as wide as the labelbook or wider, # so use it as reference w = self.btnsizer.GetSize()[0] - 84 - 12 for pagenum in xrange(0, self.lb.GetPageCount()): page = self.lb.GetPage(pagenum) page.SetSize((w, -1)) page.desc.SetLabel(page.desc.GetLabel().replace("\n", " ")) page.desc.Wrap(w) bitmaps = {"black_level": {CRT: "luminance", not CRT: "black_level"}, "luminance": {CRT: "contrast", not CRT: "luminance"}} if page.ctrltype == "check_all": for name in bitmaps: bitmap = bitmaps.get(name).get(getcfg("measurement_mode") == "c") page.txt[name].spacer.SetBitmap(getbitmap("theme/icons/16x16/" + bitmap)) else: ctrltype = {"rgb_offset": "black_level", "rgb_gain": "luminance"}.get(page.ctrltype, page.ctrltype) bitmap = bitmaps.get(ctrltype).get(getcfg("measurement_mode") == "c") page.gauges["L"].label.SetBitmap(getbitmap("theme/icons/16x16/" + bitmap)) page.Fit() page.Layout() for txt in page.txt.itervalues(): txt.SetLabel(" ") self.lb.SetMinSize((self.lb.GetMinSize()[0], max(self.lb.GetCurrentPage().GetSize()[1], min_h))) self.Fit() self.Layout() self.SetSize((self.GetSize()[0], self.GetSize()[1])) self.SetMinSize(self.GetSize()) # Set position placed = False if self.GetParent(): if self.GetParent().IsShownOnScreen(): self.Center() placed = True else: x = getcfg("position.progress.x", False) or self.GetParent().GetScreenPosition()[0] y = getcfg("position.progress.y", False) or self.GetParent().GetScreenPosition()[1] else: x = getcfg("position.progress.x") y = getcfg("position.progress.y") if not placed: self.SetSaneGeometry(x, y) def abort(self): if self.has_worker_subprocess(): if self.is_measuring: self.worker.safe_send(" ") def abort_and_send(self, key): self.abort() if self.has_worker_subprocess(): if self.worker.safe_send(key): self.is_busy = True self.adjustment_btn.Disable() self.calibration_btn.Disable() def add_panel(self, size=wx.DefaultSize, flag=0): panel = get_panel(self, size) self.sizer.Add(panel, flag=flag) return panel def continue_to_calibration(self, event=None): self.abort_and_send("7") def create_start_interactive_adjustment_button(self, icon="play", enable=False, startstop="start"): if getattr(self, "adjustment_btn", None): self.adjustment_btn._bitmap = getbitmap("theme/icons/10x10/%s" % icon) self.adjustment_btn.SetLabel(" " + lang.getstr("calibration.interactive_display_adjustment.%s" % startstop)) self.adjustment_btn.Enable(enable) return self.adjustment_btn = self.create_gradient_button(getbitmap("theme/icons/10x10/%s" % icon), " " + lang.getstr("calibration.interactive_display_adjustment.%s" % startstop), name="adjustment_btn") self.adjustment_btn.Bind(wx.EVT_BUTTON, self.start_interactive_adjustment) self.adjustment_btn.Enable(enable) def create_gradient_button(self, bitmap, label, name): btn = FlatShadedButton(self, bitmap=bitmap, label=label, name=name, fgcolour=FGCOLOUR) self.btnsizer.Add(btn) self.btnsizer.Layout() return btn def flush(self): pass def has_worker_subprocess(self): return bool(getattr(self, "worker", None) and getattr(self.worker, "subprocess", None)) def isatty(self): return True def key_handler(self, event): #print {wx.EVT_CHAR.typeId: 'EVT_CHAR', #wx.EVT_CHAR_HOOK.typeId: 'EVT_CHAR_HOOK', #wx.EVT_KEY_DOWN.typeId: 'EVT_KEY_DOWN', #wx.EVT_MENU.typeId: 'EVT_MENU'}.get(event.GetEventType(), #event.GetEventType()) keycode = None if event.GetEventType() in (wx.EVT_CHAR.typeId, wx.EVT_CHAR_HOOK.typeId, wx.EVT_KEY_DOWN.typeId): keycode = event.GetKeyCode() elif event.GetEventType() == wx.EVT_MENU.typeId: keycode = self.id_to_keycode.get(event.GetId()) if keycode is not None: #print chr(keycode) if keycode == ord(" "): if (event.GetEventType() != wx.EVT_MENU.typeId or not isinstance(self.FindFocus(), FlatShadedButton) or self.FindFocus() == self.adjustment_btn): if self.is_measuring: self.abort() else: self.start_interactive_adjustment() elif keycode in [ord(str(c)) for c in range(1, 6)]: key_num = chr(keycode) pagenum = dict(zip(self.pagenum_2_argyll_key_num.values(), self.pagenum_2_argyll_key_num.keys())).get(key_num) if getcfg("measurement_mode") != "c" or pagenum not in self.lb.disabled_pages: if pagenum is not None and not self.is_measuring: self.lb.SetSelection(pagenum) self.start_interactive_adjustment() elif keycode in (ord("\x1b"), ord("7"), ord("8"), ord("Q"), ord("q")): if self.keyhandler: self.keyhandler(event) elif self.has_worker_subprocess(): self.worker.safe_send(chr(keycode)) else: event.Skip() else: event.Skip() else: event.Skip() def measurement_play_sound_handler(self, event): #self.measurement_play_sound_ctrl.SetValue(not self.measurement_play_sound_ctrl.GetValue()) setcfg("measurement.play_sound", int(not(bool(getcfg("measurement.play_sound"))))) if getcfg("measurement.play_sound"): bitmap = getbitmap("theme/icons/16x16/sound_volume_full") else: bitmap = getbitmap("theme/icons/16x16/sound_off") self.sound_on_off_btn._bitmap = bitmap def parse_txt(self, txt): colors = {True: wx.Colour(0x33, 0xcc, 0x0), False: FGCOLOUR} if not txt: return self.logger.info("%r" % txt) if "Setting up the instrument" in txt: self.Pulse(lang.getstr("instrument.initializing")) if "/ Current" in txt: indicator = getbitmap("theme/icons/10x10/record") else: indicator = getbitmap("theme/icons/10x10/record_outline") target_br = re.search("Target white brightness = (\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) if getcfg("measurement_mode") == "c": target_bl = re.search("Target Near Black = (\d+(?:\.\d+)?), Current = (\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) if target_bl: self.lb.GetCurrentPage().target_bl = ["Target", float(target_bl.groups()[0])] initial_br = re.search("(Initial|Target)(?: Br)? (\d+(?:\.\d+)?)\s*(?:, x (\d+(?:\.\d+)?)\s*, y (\d+(?:\.\d+)?)(?:\s*, (?:(V[CD]T \d+K?) )?DE(?: 2K)? (\d+(?:\.\d+)?))?|$)".replace(" ", "\s+"), txt, re.I) current_br = None current_bl = None if target_br and not getattr(self, "target_br", None): self.target_br = ["Target", float(target_br.groups()[0])] if initial_br: self.lb.GetCurrentPage().initial_br = [initial_br.groups()[0], float(initial_br.groups()[1])] + list(initial_br.groups()[2:]) if self.lb.GetCurrentPage().ctrltype != "check_all": current_br = re.search("Current(?: Br)? (\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) else: current_br = re.search("Target Brightness = (?:\d+(?:\.\d+)?), Current = (\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) if not current_br: current_br = re.search("Current Brightness = (\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) if getcfg("measurement_mode") == "c": if target_bl: current_bl = float(target_bl.groups()[1]) else: current_bl = re.search("Black = XYZ (?:\d+(?:\.\d+)?) (\d+(?:\.\d+)?) (?:\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) if current_bl: current_bl = float(current_bl.groups()[0]) xy_dE_rgb = re.search("x (\d+(?:\.\d+)?)[=+-]*, y (\d+(?:\.\d+)?)[=+-]*,? (?:(V[CD]T \d+K?) )?DE(?: 2K)? (\d+(?:\.\d+)?) R([=+-]+) G([=+-]+) B([=+-]+)".replace(" ", "\s+"), txt, re.I) white_xy_dE_re = "(?:Target white = x (?:\d+(?:\.\d+)?), y (?:\d+(?:\.\d+)?), Current|Current white) = x (\d+(?:\.\d+)?), y (\d+(?:\.\d+)?), (?:(?:(V[CD]T \d+K?) )?DE(?: 2K)?|error =) (\d+(?:\.\d+)?)".replace(" ", "\s+") white_xy_dE = re.search(white_xy_dE_re, txt, re.I) black_xy_dE = re.search(white_xy_dE_re.replace("white", "black"), txt, re.I) white_xy_target = re.search("Target white = x (\d+(?:\.\d+)?), y (\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) black_xy_target = re.search("Target black = x (\d+(?:\.\d+)?), y (\d+(?:\.\d+)?)".replace(" ", "\s+"), txt, re.I) if current_br or current_bl or xy_dE_rgb or white_xy_dE or black_xy_dE: self.Freeze() #for t in ("target_br", "target_bl", "initial_br", "current_br", "current_bl"): #if locals()[t]: #print "\n" + t, locals()[t].groups(), if current_br: initial_br = getattr(self.lb.GetCurrentPage(), "initial_br", None) if self.lb.GetCurrentPage().ctrltype in ("rgb_gain", "luminance", "check_all"): target_br = getattr(self, "target_br", None) else: target_br = None if self.lb.GetCurrentPage().ctrltype == "rgb_gain" and initial_br: initial_br = ["Initial"] + initial_br[1:] compare_br = target_br or initial_br or ("Initial", float(current_br.groups()[0])) lstr = (compare_br[0]).lower() if compare_br[1]: percent = 100.0 / compare_br[1] else: percent = 100.0 l_diff = float(current_br.groups()[0]) - compare_br[1] l = int(round(50 + l_diff * percent)) if self.lb.GetCurrentPage().gauges.get("L"): self.lb.GetCurrentPage().gauges["L"].SetValue(min(max(l, 1), 100)) self.lb.GetCurrentPage().gauges["L"].Refresh() if self.lb.GetCurrentPage().txt.get("luminance"): if initial_br or target_br: #and round(l_diff, 2): if round(l_diff, 2) > 0: sign = "+" elif round(l_diff, 2) < 0: sign = "-" else: sign = u"\u00B1" # plusminus label = u"%s %.2f cd/m\u00b2\n%s %.2f cd/m\u00b2 (%s%.2f%%)" % (lang.getstr(lstr), compare_br[1], lang.getstr("current"), float(current_br.groups()[0]), sign, abs(l_diff) * percent) else: label = lang.getstr("current") + u" %.2f cd/m\u00b2" % float(current_br.groups()[0]) self.lb.GetCurrentPage().txt["luminance"].checkmark.GetContainingSizer().Show(self.lb.GetCurrentPage().txt["luminance"].checkmark, lstr == "target" and abs(l_diff) * percent <= 1) self.lb.GetCurrentPage().txt["luminance"].SetForegroundColour(colors[lstr == "target" and abs(l_diff) * percent <= 1]) set_label_and_size(self.lb.GetCurrentPage().txt["luminance"], label) if current_bl and self.lb.GetCurrentPage().txt.get("black_level"): target_bl = getattr(self.lb.GetCurrentPage(), "target_bl", None) or getattr(self.lb.GetCurrentPage(), "initial_br", None) if target_bl: percent = 100.0 / target_bl[1] if target_bl: #and round(target_bl[1], 2) != round(current_bl, 2): l_diff = current_bl - target_bl[1] if round(l_diff, 2) > 0: sign = "+" elif round(l_diff, 2) < 0: sign = "-" else: sign = u"\u00B1" # plusminus label = u"%s %.2f cd/m\u00b2\n%s %.2f cd/m\u00b2 (%s%.2f%%)" % (lang.getstr("target"), target_bl[1], lang.getstr("current"), current_bl, sign, abs(l_diff) * percent) else: if target_bl: l_diff = 0 else: l_diff = None label = lang.getstr("current") + u" %.2f cd/m\u00b2" % current_bl self.lb.GetCurrentPage().txt["black_level"].checkmark.GetContainingSizer().Show(self.lb.GetCurrentPage().txt["black_level"].checkmark, l_diff is not None and abs(l_diff) * percent <= 1) self.lb.GetCurrentPage().txt["black_level"].SetForegroundColour(colors[l_diff is not None and abs(l_diff) * percent <= 1]) set_label_and_size(self.lb.GetCurrentPage().txt["black_level"], label) # groups()[0] = x # groups()[1] = y # groups()[2] = VDT/VCT (optional) # groups()[3] = dE # groups()[4] = R +- # groups()[5] = G +- # groups()[6] = B +- if xy_dE_rgb: x, y, vdt, dE = get_xy_vt_dE(xy_dE_rgb.groups()) r = int(round(50 - (xy_dE_rgb.groups()[4].count("+") - xy_dE_rgb.groups()[4].count("-")) * (dE))) g = int(round(50 - (xy_dE_rgb.groups()[5].count("+") - xy_dE_rgb.groups()[5].count("-")) * (dE))) b = int(round(50 - (xy_dE_rgb.groups()[6].count("+") - xy_dE_rgb.groups()[6].count("-")) * (dE))) if self.lb.GetCurrentPage().gauges.get("R"): self.lb.GetCurrentPage().gauges["R"].SetValue(min(max(r, 1), 100)) self.lb.GetCurrentPage().gauges["R"].Refresh() if self.lb.GetCurrentPage().gauges.get("G"): self.lb.GetCurrentPage().gauges["G"].SetValue(min(max(g, 1), 100)) self.lb.GetCurrentPage().gauges["G"].Refresh() if self.lb.GetCurrentPage().gauges.get("B"): self.lb.GetCurrentPage().gauges["B"].SetValue(min(max(b, 1), 100)) self.lb.GetCurrentPage().gauges["B"].Refresh() if self.lb.GetCurrentPage().txt.get("rgb"): self.lb.GetCurrentPage().txt["rgb"].checkmark.GetContainingSizer().Show(self.lb.GetCurrentPage().txt["rgb"].checkmark, abs(dE) <= 1) self.lb.GetCurrentPage().txt["rgb"].SetForegroundColour(colors[abs(dE) <= 1]) label = (lang.getstr("current") + u" x %.4f y %.4f %s %.1f \u0394E*00" % (x, y, vdt, dE)).replace(" ", " ") initial_br = getattr(self.lb.GetCurrentPage(), "initial_br", None) if initial_br and len(initial_br) > 3: x, y, vdt, dE = get_xy_vt_dE(initial_br[2:]) label = (lang.getstr(initial_br[0].lower()) + u" x %.4f y %.4f %s %.1f \u0394E*00\n" % (x, y, vdt, dE)).replace(" ", " ") + label set_label_and_size(self.lb.GetCurrentPage().txt["rgb"], label) if white_xy_dE: x, y, vdt, dE = get_xy_vt_dE(white_xy_dE.groups()) if self.lb.GetCurrentPage().txt.get("white_point"): self.lb.GetCurrentPage().txt["white_point"].checkmark.GetContainingSizer().Show(self.lb.GetCurrentPage().txt["white_point"].checkmark, abs(dE) <= 1) self.lb.GetCurrentPage().txt["white_point"].SetForegroundColour(colors[abs(dE) <= 1]) label = (lang.getstr("current") + u" x %.4f y %.4f %s %.1f \u0394E*00" % (x, y, vdt, dE)).replace(" ", " ") if white_xy_target: x, y, vdt, dE = get_xy_vt_dE(white_xy_target.groups()) label = (lang.getstr("target") + u" x %.4f y %.4f\n" % (x, y)).replace(" ", " ") + label set_label_and_size(self.lb.GetCurrentPage().txt["white_point"], label) if black_xy_dE: x, y, vdt, dE = get_xy_vt_dE(black_xy_dE.groups()) if self.lb.GetCurrentPage().txt.get("white_point"): self.lb.GetCurrentPage().txt["black_point"].checkmark.GetContainingSizer().Show(self.lb.GetCurrentPage().txt["black_point"].checkmark, abs(dE) <= 1) self.lb.GetCurrentPage().txt["black_point"].SetForegroundColour(colors[abs(dE) <= 1]) label = (lang.getstr("current") + u" x %.4f y %.4f %s %.1f \u0394E*00" % (x, y, vdt, dE)).replace(" ", " ") if black_xy_target: x, y, vdt, dE = get_xy_vt_dE(black_xy_target.groups()) label = (lang.getstr("target") + u" x %.4f y %.4f\n" % (x, y)).replace(" ", " ") + label set_label_and_size(self.lb.GetCurrentPage().txt["black_point"], label) if ((current_br or current_bl or xy_dE_rgb) and self.lb.GetCurrentPage().ctrltype != "check_all"): if (getattr(self, "measurement_sound", None) and #self.measurement_play_sound_ctrl.GetValue() and getcfg("measurement.play_sound") and self.measurement_sound.IsOk()): self.measurement_sound.Play(wx.SOUND_ASYNC) self.indicator_ctrl.SetBitmap(indicator) self.btnsizer.Layout() if current_br or current_bl or xy_dE_rgb or white_xy_dE or black_xy_dE: self.lb.GetCurrentPage().Layout() self.Thaw() if "Press 1 .. 7" in txt or "8) Exit" in txt: if self.cold_run: self.cold_run = False self.Pulse(" " * 4) if self.is_measuring is not False: self.lb.Children[0].Refresh() if self.is_measuring is True: self.create_start_interactive_adjustment_button(enable=True) else: self.adjustment_btn.Enable() self.is_busy = False self.is_measuring = False self.indicator_ctrl.SetBitmap(getbitmap("10x10/empty")) self.calibration_btn.Enable() self.lb.SetFocus() # Make frame receive EVT_CHAR_HOOK events under Linux elif "initial measurements" in txt or "check measurements" in txt: self.is_busy = True self.lb.Children[0].Refresh() self.Pulse(lang.getstr("please_wait")) if not self.is_measuring: self.create_start_interactive_adjustment_button("pause", True, "stop") self.is_measuring = True self.lb.SetFocus() # Make frame receive EVT_CHAR_HOOK events under Linux #self.SetTitle("is_measuring %s timer.IsRunning %s keepGoing %s" % #(str(self.is_measuring), self.timer.IsRunning(), self.keepGoing)) def reset(self): self.Freeze() self._setup() # Reset controls for pagenum in xrange(0, self.lb.GetPageCount()): page = self.lb.GetPage(pagenum) page.initial_br = None page.target_bl = None for name in ("R", "G", "B", "L"): if page.gauges.get(name): page.gauges[name].SetValue(0) page.gauges[name].Refresh() for txt in page.txt.itervalues(): txt.checkmark.GetContainingSizer().Hide(txt.checkmark) txt.SetForegroundColour(FGCOLOUR) self.create_start_interactive_adjustment_button() self.calibration_btn.Disable() self.Thaw() def start_interactive_adjustment(self, event=None): if self.is_measuring: self.abort() else: self.abort_and_send(self.pagenum_2_argyll_key_num[self.lb.GetSelection()]) def start_timer(self, ms=50): self.timer.Start(ms) def stop_timer(self): self.timer.Stop() def write(self, txt): wx.CallAfter(self.parse_txt, txt) if __name__ == "__main__": from thread import start_new_thread from time import sleep class Subprocess(): def send(self, bytes): start_new_thread(test, (bytes,)) class Worker(object): def __init__(self): self.subprocess = Subprocess() def safe_send(self, bytes): self.subprocess.send(bytes) return True config.initcfg() lang.init() app = wx.App(0) if "--crt" in sys.argv[1:]: setcfg("measurement_mode", "c") else: setcfg("measurement_mode", "l") frame = DisplayAdjustmentFrame(start_timer=False) frame.worker = Worker() frame.Show() i = 0 def test(bytes=None): global i # 0 = dispcal -v -yl # 1 = dispcal -v -yl -b130 # 2 = dispcal -v -yl -B0.5 # 3 = dispcal -v -yl -t5200 # 4 = dispcal -v -yl -t5200 -b130 -B0.5 menu = r""" Press 1 .. 7 1) Black level (CRT: Offset/Brightness) 2) White point (Color temperature, R,G,B, Gain/Contrast) 3) White level (CRT: Gain/Contrast, LCD: Brightness/Backlight) 4) Black point (R,G,B, Offset/Brightness) 5) Check all 6) Measure and set ambient for viewing condition adjustment 7) Continue on to calibration 8) Exit """ if bytes == " ": txt = "\n" + menu elif bytes == "1": # Black level txt = [r"""Doing some initial measurements Black = XYZ 0.19 0.20 0.28 Grey = XYZ 27.20 27.79 24.57 White = XYZ 126.48 128.71 112.75 Adjust CRT brightness to get target level. Press space when done. Target 1.29 / Current 2.02 -""", r"""Doing some initial measurements Black = XYZ 0.19 0.20 0.29 Grey = XYZ 27.11 27.76 24.72 White = XYZ 125.91 128.38 113.18 Adjust CRT brightness to get target level. Press space when done. Target 1.28 / Current 2.02 -""", r"""Doing some initial measurements Black = XYZ 0.19 0.21 0.28 Grey = XYZ 27.08 27.72 24.87 White = XYZ 125.47 127.86 113.60 Adjust CRT brightness to get target level. Press space when done. Target 1.28 / Current 2.02 -""", r"""Doing some initial measurements Black = XYZ 0.19 0.20 0.29 Grey = XYZ 27.11 27.77 25.01 White = XYZ 125.21 127.80 113.90 Adjust CRT brightness to get target level. Press space when done. Target 1.28 / Current 2.03 -""", r"""Doing some initial measurements Black = XYZ 0.19 0.20 0.30 Grey = XYZ 23.56 24.14 21.83 White = XYZ 124.87 130.00 112.27 Adjust CRT brightness to get target level. Press space when done. Target 1.28 / Current 1.28"""][i] elif bytes == "2": # White point txt = [r"""Doing some initial measurements Red = XYZ 81.08 39.18 2.41 Green = XYZ 27.63 80.13 10.97 Blue = XYZ 18.24 9.90 99.75 White = XYZ 126.53 128.96 112.57 Adjust R,G & B gain to desired white point. Press space when done. Initial Br 128.96, x 0.3438 , y 0.3504 , VDT 5152K DE 2K 4.7 / Current Br 128.85, x 0.3439-, y 0.3502+ VDT 5151K DE 2K 4.8 R- G++ B-""", r"""Doing some initial measurements Red = XYZ 80.48 38.87 2.43 Green = XYZ 27.58 79.99 10.96 Blue = XYZ 18.34 9.93 100.24 White = XYZ 125.94 128.32 113.11 Adjust R,G & B gain to desired white point. Press space when done. Initial Br 130.00, x 0.3428 , y 0.3493 , VDT 5193K DE 2K 4.9 / Current Br 128.39, x 0.3428-, y 0.3496+ VDT 5190K DE 2K 4.7 R- G++ B-""", r"""Doing some initial measurements Red = XYZ 80.01 38.57 2.44 Green = XYZ 27.51 79.85 10.95 Blue = XYZ 18.45 9.94 100.77 White = XYZ 125.48 127.88 113.70 Adjust R,G & B gain to desired white point. Press space when done. Initial Br 127.88, x 0.3419 , y 0.3484 , VDT 5232K DE 2K 5.0 / Current Br 127.87, x 0.3419-, y 0.3485+ VDT 5231K DE 2K 4.9 R- G++ B-""", r"""Doing some initial measurements Red = XYZ 79.69 38.48 2.44 Green = XYZ 27.47 79.76 10.95 Blue = XYZ 18.50 9.95 101.06 White = XYZ 125.08 127.71 113.91 Adjust R,G & B gain to get target x,y. Press space when done. Target Br 127.71, x 0.3401 , y 0.3540 / Current Br 127.70, x 0.3412-, y 0.3481+ DE 4.8 R- G++ B-""", r"""Doing some initial measurements Red = XYZ 79.47 38.41 2.44 Green = XYZ 27.41 79.72 10.94 Blue = XYZ 18.52 9.96 101.20 White = XYZ 124.87 130.00 112.27 Adjust R,G & B gain to get target x,y. Press space when done. Target Br 130.00, x 0.3401 , y 0.3540 / Current Br 130.00, x 0.3401=, y 0.3540= DE 0.0 R= G= B="""][i] elif bytes == "3": # White level txt = [r"""Doing some initial measurements White = XYZ 126.56 128.83 112.65 Adjust CRT Contrast or LCD Brightness to desired level. Press space when done. Initial 128.83 / Current 128.85""", r"""Doing some initial measurements White = XYZ 125.87 128.23 113.43 Adjust CRT Contrast or LCD Brightness to get target level. Press space when done. Target 130.00 / Current 128.24 +""", r"""Doing some initial measurements White = XYZ 125.33 127.94 113.70 Adjust CRT Contrast or LCD Brightness to desired level. Press space when done. Initial 127.94 / Current 127.88""", r"""Doing some initial measurements White = XYZ 125.00 127.72 114.03 Adjust CRT Contrast or LCD Brightness to desired level. Press space when done. Initial 127.72 / Current 127.69""", r"""Doing some initial measurements White = XYZ 124.87 130.00 112.27 Adjust CRT Contrast or LCD Brightness to get target level. Press space when done. Target 130.00 / Current 130.00"""][i] elif bytes == "4": # Black point txt = [r"""Doing some initial measurements Black = XYZ 0.19 0.21 0.29 Grey = XYZ 27.25 27.83 24.52 White = XYZ 126.60 128.86 112.54 Adjust R,G & B offsets to get target x,y. Press space when done. Target Br 1.29, x 0.3440 , y 0.3502 / Current Br 2.03, x 0.3409+, y 0.3484+ DE 1.7 R++ G+ B-""", r"""Doing some initial measurements Black = XYZ 0.19 0.21 0.29 Grey = XYZ 27.19 27.87 24.94 White = XYZ 125.83 128.16 113.57 Adjust R,G & B offsets to get target x,y. Press space when done. Target Br 1.28, x 0.3423 , y 0.3487 / Current Br 2.03, x 0.3391+, y 0.3470+ DE 1.7 R++ G+ B-""", r"""Doing some initial measurements Black = XYZ 0.19 0.21 0.29 Grey = XYZ 27.14 27.79 24.97 White = XYZ 125.49 127.89 113.90 Adjust R,G & B offsets to get target x,y. Press space when done. Target Br 1.28, x 0.3417 , y 0.3482 / Current Br 2.02, x 0.3386+, y 0.3466+ DE 1.7 R++ G+ B-""", r"""Doing some initial measurements Black = XYZ 0.19 0.21 0.30 Grey = XYZ 27.10 27.79 25.12 White = XYZ 125.12 127.68 114.09 Adjust R,G & B offsets to get target x,y. Press space when done. Target Br 1.28, x 0.3401 , y 0.3540 / Current Br 2.04, x 0.3373+, y 0.3465+ DE 4.4 R+ G++ B-""", r"""Doing some initial measurements Black = XYZ 0.19 0.21 0.29 Grey = XYZ 23.56 24.14 21.83 White = XYZ 124.87 130.00 112.27 Adjust R,G & B offsets to get target x,y. Press space when done. Target Br 1.28, x 0.3401 , y 0.3540 / Current Br 1.28, x 0.3401=, y 0.3540= DE 0.0 R= G= B="""][i] elif bytes == "5": # Check all txt = [r"""Doing check measurements Black = XYZ 0.19 0.20 0.29 Grey = XYZ 27.22 27.80 24.49 White = XYZ 126.71 128.91 112.34 1% = XYZ 1.94 1.98 1.76 Current Brightness = 128.91 Target 50% Level = 24.42, Current = 27.80, error = 2.6% Target Near Black = 1.29, Current = 2.02, error = 0.6% Current white = x 0.3443, y 0.3503, VDT 5137K DE 2K 5.0 Target black = x 0.3443, y 0.3503, Current = x 0.3411, y 0.3486, error = 1.73 DE Press 1 .. 7""", r"""Doing check measurements Black = XYZ 0.19 0.21 0.29 Grey = XYZ 27.10 27.75 24.85 White = XYZ 125.78 128.17 113.53 1% = XYZ 1.93 1.98 1.79 Target Brightness = 130.00, Current = 128.17, error = -1.4% Target 50% Level = 24.28, Current = 27.75, error = 2.7% Target Near Black = 1.28, Current = 2.02, error = 0.6% Current white = x 0.3423, y 0.3488, VDT 5215K DE 2K 4.9 Target black = x 0.3423, y 0.3488, Current = x 0.3391, y 0.3467, error = 1.69 DE Press 1 .. 7""", r"""Doing check measurements Black = XYZ 0.19 0.21 0.29 Grey = XYZ 27.09 27.74 24.95 White = XYZ 125.32 127.78 113.82 1% = XYZ 1.93 1.98 1.80 Current Brightness = 127.78 Target 50% Level = 24.21, Current = 27.74, error = 2.8% Target Near Black = 1.28, Current = 2.02, error = 0.6% Current white = x 0.3415, y 0.3483, VDT 5243K DE 2K 4.9 Target black = x 0.3415, y 0.3483, Current = x 0.3386, y 0.3465, error = 1.55 DE Press 1 .. 7""", r"""Doing check measurements Black = XYZ 0.19 0.20 0.29 Grey = XYZ 26.98 27.68 24.97 White = XYZ 125.00 127.56 113.99 1% = XYZ 1.92 1.97 1.80 Current Brightness = 127.56 Target 50% Level = 24.17, Current = 27.68, error = 2.8% Target Near Black = 1.28, Current = 2.02, error = 0.6% Target white = x 0.3401, y 0.3540, Current = x 0.3410, y 0.3480, error = 4.83 DE Target black = x 0.3401, y 0.3540, Current = x 0.3372, y 0.3464, error = 4.48 DE Press 1 .. 7""", r"""Doing check measurements Black = XYZ 0.19 0.21 0.29 Grey = XYZ 23.56 24.14 21.83 White = XYZ 124.87 130.00 112.27 1% = XYZ 1.92 1.97 1.80 Target Brightness = 130.00, Current = 130.00, error = 0.0% Target 50% Level = 24.14, Current = 24.14, error = 0.0% Target Near Black = 1.27, Current = 1.27, error = 0.0% Target white = x 0.3401, y 0.3540, Current = x 0.3401, y 0.3540, error = 0.00 DE Target black = x 0.3401, y 0.3540, Current = x 0.3401, y 0.3540, error = 0.00 DE Press 1 .. 7"""][i] elif bytes == "7" or not bytes: if bytes == "7": if i < 4: i += 1 else: i -= 4 wx.CallAfter(frame.reset) txt = [r"""Setting up the instrument Place instrument on test window. Hit Esc or Q to give up, any other key to continue: Display type is LCD Target white = native white point Target white brightness = native brightness Target black brightness = native brightness Target advertised gamma = 2.400000""", r"""Setting up the instrument Place instrument on test window. Hit Esc or Q to give up, any other key to continue: Display type is LCD Target white = native white point Target white brightness = 130.000000 cd/m^2 Target black brightness = native brightness Target advertised gamma = 2.400000""", r"""Setting up the instrument Place instrument on test window. Hit Esc or Q to give up, any other key to continue: Display type is LCD Target white = native white point Target white brightness = native brightness Target black brightness = 0.500000 cd/m^2 Target advertised gamma = 2.400000""", r"""Setting up the instrument Place instrument on test window. Hit Esc or Q to give up, any other key to continue: Display type is LCD Target white = 5200.000000 degrees kelvin Daylight spectrum Target white brightness = native brightness Target black brightness = native brightness Target advertised gamma = 2.400000""", r"""Setting up the instrument Place instrument on test window. Hit Esc or Q to give up, any other key to continue: Display type is CRT Target white = 5200.000000 degrees kelvin Daylight spectrum Target white brightness = 130.000000 cd/m^2 Target black brightness = 0.500000 cd/m^2 Target advertised gamma = 2.400000"""][i] + r""" Display adjustment menu:""" + menu elif bytes == "8": wx.CallAfter(frame.Close) return else: return for line in txt.split("\n"): sleep(.0625) wx.CallAfter(frame.write, line) print line start_new_thread(test, tuple()) app.MainLoop() dispcalGUI-1.7.1.6/dispcalGUI/wxDisplayUniformityFrame.py000644 000765 000000 00000116352 12266411534 023215 0ustar00svpwheel000000 000000 # -*- coding: UTF-8 -*- """ Interactive display calibration UI """ from __future__ import with_statement from time import strftime import codecs import math import os import re import sys import time from wxaddons import wx from config import (getbitmap, getcfg, get_icon_bundle, get_data_path, get_display_number, get_display_rects, get_verified_path, setcfg) from log import get_file_logger, safe_print from meta import name as appname, version as appversion from util_os import launch_file, waccess from util_str import center from wxaddons import CustomEvent from wxMeasureFrame import MeasureFrame from wxwindows import FlatShadedButton, numpad_keycodes import colormath import config import jspacker import localization as lang import report BGCOLOUR = wx.Colour(0x33, 0x33, 0x33) BLACK = wx.Colour(0, 0, 0) BORDERCOLOUR = wx.Colour(0x22, 0x22, 0x22) FGCOLOUR = wx.Colour(0x99, 0x99, 0x99) LIGHTGRAY = wx.Colour(0xcc, 0xcc, 0xcc) MEDIUMGRAY = wx.Colour(0x80, 0x80, 0x80) WHITE = wx.Colour(0xff, 0xff, 0xff) class FlatShadedNumberedButton(FlatShadedButton): def __init__(self, parent, id=wx.ID_ANY, bitmap=None, label="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER, validator=wx.DefaultValidator, name="gradientbutton", bgcolour=None, fgcolour=None, index=0): FlatShadedButton.__init__(self, parent, id, bitmap, label, pos, size, style, validator, name, bgcolour, fgcolour) self.index = index class DisplayUniformityFrame(wx.Frame): def __init__(self, parent=None, handler=None, keyhandler=None, start_timer=True, rows=3, cols=5): wx.Frame.__init__(self, parent, wx.ID_ANY, lang.getstr("report.uniformity"), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetIcons(get_icon_bundle([256, 48, 32, 16], appname)) self.SetBackgroundColour(BGCOLOUR) self.sizer = wx.GridSizer(rows, cols) self.SetSizer(self.sizer) self.rows = rows self.cols = cols self.colors = (WHITE, wx.Colour(192, 192, 192), wx.Colour(128, 128, 128), wx.Colour(64, 64, 64)) self.labels = {} self.panels = [] self.buttons = [] for index in xrange(rows * cols): panel = wx.Panel(self, style=wx.BORDER_SIMPLE) panel.SetBackgroundColour(BGCOLOUR) sizer = wx.BoxSizer(wx.VERTICAL) panel.SetSizer(sizer) self.panels.append(panel) button = FlatShadedNumberedButton(panel, label=" %s " % lang.getstr("measure"), bitmap=getbitmap("theme/icons/10x10/record"), bgcolour=LIGHTGRAY, fgcolour=BLACK, index=index) button.Bind(wx.EVT_BUTTON, self.measure) self.buttons.append(button) label = wx.StaticText(panel) label.SetForegroundColour(WHITE) self.labels[index] = label sizer.Add(label, 1, wx.ALIGN_CENTER) sizer.Add(button, 0, wx.ALIGN_BOTTOM | wx.ALIGN_CENTER | wx.BOTTOM | wx.LEFT | wx.RIGHT, border=8) self.sizer.Add(panel, 1, wx.EXPAND) self.disable_buttons() self.keyhandler = keyhandler if sys.platform in ("darwin", "win32"): # Use an accelerator table for space, 0-9, A-Z, numpad keycodes = [ord(" ")] + range(ord("0"), ord("9")) + range(ord("A"), ord("Z")) + numpad_keycodes self.id_to_keycode = {} for keycode in keycodes: self.id_to_keycode[wx.NewId()] = keycode accels = [] for id, keycode in self.id_to_keycode.iteritems(): self.Bind(wx.EVT_MENU, self.key_handler, id=id) accels += [(wx.ACCEL_NORMAL, keycode, id)] self.SetAcceleratorTable(wx.AcceleratorTable(accels)) else: self.Bind(wx.EVT_CHAR_HOOK, self.key_handler) # Event handlers self.Bind(wx.EVT_CLOSE, self.OnClose, self) self.Bind(wx.EVT_MOVE, self.OnMove, self) self.timer = wx.Timer(self) if handler: self.Bind(wx.EVT_TIMER, handler, self.timer) self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy, self) # Final initialization steps self.logger = get_file_logger("uniformity") self._setup() self.Show() if start_timer: self.start_timer() def EndModal(self, returncode=wx.ID_OK): return returncode def MakeModal(self, makemodal=False): pass def OnClose(self, event): if not self.timer.IsRunning(): self.Destroy() else: self.keepGoing = False def OnDestroy(self, event): self.stop_timer() del self.timer def OnMove(self, event): pass def Pulse(self, msg=""): return self.keepGoing, False def Resume(self): self.keepGoing = True def Show(self, show=True): if show: display_no = getcfg("display.number") - 1 if display_no < 0 or display_no > wx.Display.GetCount() - 1: display_no = 0 else: display_no = get_display_number(display_no) x, y, w, h = wx.Display(display_no).ClientArea # Place frame on correct display self.SetPosition((x, y)) self.SetSize((w, h)) self.disable_buttons() wx.CallAfter(self.Maximize) wx.Frame.Show(self, show) def Update(self, value, msg=""): return self.Pulse(msg) def UpdatePulse(self, msg=""): return self.Pulse(msg) def disable_buttons(self): self.enable_buttons(False) def enable_buttons(self, enable=True): for button in self.buttons: button.Enable(enable) def flush(self): pass get_display = MeasureFrame.__dict__["get_display"] def has_worker_subprocess(self): return bool(getattr(self, "worker", None) and getattr(self.worker, "subprocess", None)) def hide_cursor(self): cursor_id = wx.CURSOR_BLANK cursor = wx.StockCursor(cursor_id) self.SetCursor(cursor) for panel in self.panels: panel.SetCursor(cursor) for label in self.labels.values(): label.SetCursor(cursor) for button in self.buttons: button.SetCursor(cursor) def isatty(self): return True def key_handler(self, event): keycode = None if event.GetEventType() in (wx.EVT_CHAR.typeId, wx.EVT_CHAR_HOOK.typeId, wx.EVT_KEY_DOWN.typeId): keycode = event.GetKeyCode() elif event.GetEventType() == wx.EVT_MENU.typeId: keycode = self.id_to_keycode.get(event.GetId()) if keycode is not None: if self.has_worker_subprocess(): if keycode == 27 or chr(keycode) == "Q": # ESC or Q self.worker.abort_subprocess() elif self.index > -1 and not self.is_measuring: # Any other key self.measure(CustomEvent(wx.EVT_BUTTON.typeId, self.buttons[self.index])) else: event.Skip() def measure(self, event=None): if event: self.index = event.GetEventObject().index self.is_measuring = True self.results[self.index] = [] self.labels[self.index].SetLabel("") self.hide_cursor() self.disable_buttons() self.buttons[self.index].Hide() self.panels[self.index].SetBackgroundColour(self.colors[len(self.results[self.index])]) self.panels[self.index].Refresh() self.panels[self.index].Update() # Use a delay to allow for TFT lag wx.CallLater(200, self.safe_send, " ") def parse_txt(self, txt): if not txt: return self.logger.info("%r" % txt) if "Setting up the instrument" in txt: self.Pulse(lang.getstr("instrument.initializing")) if "Spot read failed" in txt: self.last_error = txt if "Result is XYZ:" in txt: # Result is XYZ: d.dddddd d.dddddd d.dddddd, D50 Lab: d.dddddd d.dddddd d.dddddd # CCT = ddddK (Delta E d.dddddd) # Closest Planckian temperature = ddddK (Delta E d.dddddd) # Closest Daylight temperature = ddddK (Delta E d.dddddd) XYZ = re.search("XYZ:\s+(\d+\.\d+)\s+(\d+\.\d+)\s+(\d+\.\d+)", txt) self.results[self.index].append({"XYZ": [float(value) for value in XYZ.groups()]}) self.last_error = None loci = {"t": "Daylight", "T": "Planckian"} for locus in loci.values(): if locus in txt: CT = re.search("Closest\s+%s\s+temperature\s+=\s+(\d+)K" % locus, txt, re.I) self.results[self.index][-1]["C%sT" % locus[0]] = int(CT.groups()[0]) if "key to take a reading" in txt and not self.last_error: if not self.is_measuring: self.enable_buttons() return if len(self.results[self.index]) < len(self.colors): # Take readings at 5 different brightness levels per swatch self.measure() else: self.is_measuring = False self.show_cursor() self.enable_buttons() self.buttons[self.index].Show() self.buttons[self.index].SetBitmap(getbitmap("theme/icons/16x16/checkmark")) self.panels[self.index].SetBackgroundColour(BGCOLOUR) self.panels[self.index].Refresh() self.panels[self.index].Update() if len(self.results) == self.rows * self.cols: # All swatches have been measured, show results # Let the user choose a location for the results html display_no, geometry, client_area = self.get_display() # Translate from wx display index to Argyll display index geometry = "%i, %i, %ix%i" % tuple(geometry) for i, display in enumerate(getcfg("displays").split(os.pathsep)): if display.find("@ " + geometry) > -1: safe_print("Found display %s at index %i" % (display, i)) break display = display.replace(" [PRIMARY]", "") defaultFile = u"Uniformity Check %s — %s — %s" % (appversion, re.sub(r"[\\/:*?\"<>|]+", "_", display), strftime("%Y-%m-%d %H-%M.html")) defaultDir = get_verified_path(None, os.path.join(getcfg("profile.save_path"), defaultFile))[0] dlg = wx.FileDialog(self, lang.getstr("save_as"), defaultDir, defaultFile, wildcard=lang.getstr("filetype.html") + "|*.html;*.htm", style=wx.SAVE | wx.FD_OVERWRITE_PROMPT) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: path = dlg.GetPath() if not waccess(path, os.W_OK): from worker import show_result_dialog show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return save_path = os.path.splitext(path)[0] + ".html" setcfg("last_filedialog_path", save_path) dlg.Destroy() if result != wx.ID_OK: return locus = loci.get(getcfg("whitepoint.colortemp.locus")) report.create(save_path, {"${REPORT_VERSION}": appversion, "${DISPLAY}": display, "${DATETIME}": strftime("%Y-%m-%d %H:%M:%S"), "${ROWS}": str(self.rows), "${COLS}": str(self.cols), "${RESULTS}": str(self.results), "${LOCUS}": locus}, getcfg("report.pack_js"), "uniformity") launch_file(save_path) if getcfg("measurement.continuous"): self.measure(event=Event(self.buttons[self.index])) def reset(self): self._setup() for panel in self.panels: panel.SetBackgroundColour(BGCOLOUR) for button in self.buttons: button.SetBitmap(getbitmap("theme/icons/10x10/record")) button.Show() for index in self.labels: self.labels[index].SetLabel("") self.labels[index].GetContainingSizer().Layout() self.show_cursor() def _setup(self): self.logger.info("-" * 80) self.index = -1 self.is_measuring = False self.keepGoing = True self.last_error = None self.results = {} self.display_rects = get_display_rects() def safe_send(self, bytes): if self.has_worker_subprocess() and not self.worker.subprocess_abort: self.worker.safe_send(bytes) def show_cursor(self): cursor = wx.StockCursor(wx.CURSOR_ARROW) self.SetCursor(cursor) for panel in self.panels: panel.SetCursor(cursor) for label in self.labels.values(): label.SetCursor(cursor) for button in self.buttons: button.SetCursor(cursor) def start_timer(self, ms=50): self.timer.Start(ms) def stop_timer(self): self.timer.Stop() def write(self, txt): wx.CallAfter(self.parse_txt, txt) class Event(): def __init__(self, evtobj): self.evtobj = evtobj def GetEventObject(self): return self.evtobj if __name__ == "__main__": from thread import start_new_thread from time import sleep class Subprocess(): def send(self, bytes): start_new_thread(test, (bytes,)) class Worker(object): def __init__(self): self.subprocess = Subprocess() self.subprocess_abort = False def abort_subprocess(self): self.subprocess.send("Q") def safe_send(self, bytes): self.subprocess.send(bytes) return True config.initcfg() lang.init() lang.update_defaults() app = wx.App(0) frame = DisplayUniformityFrame(start_timer=False, cols=3) frame.worker = Worker() frame.Show() i = 0 def test(bytes=None): global i menu = r"""Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""" if not bytes: txt = menu elif bytes == " ": txt = [[""" Result is XYZ: 115.629826 123.903717 122.761510, D50 Lab: 108.590836 -5.813746 -13.529075 CCT = 6104K (Delta E 7.848119) Closest Planckian temperature = 5835K (Delta E 6.927113) Closest Daylight temperature = 5963K (Delta E 3.547392) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 65.336831 69.578641 68.180005, D50 Lab: 86.789788 -3.888434 -10.469442 CCT = 5983K (Delta E 6.816507) Closest Planckian temperature = 5757K (Delta E 5.996638) Closest Daylight temperature = 5883K (Delta E 2.598118) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 26.944662 28.614568 28.107897, D50 Lab: 60.439948 -2.589848 -7.899247 CCT = 5969K (Delta E 6.279024) Closest Planckian temperature = 5760K (Delta E 5.519000) Closest Daylight temperature = 5887K (Delta E 2.119333) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 6.153402 6.500147 6.625585, D50 Lab: 30.640770 -1.226804 -5.876967 CCT = 6123K (Delta E 4.946609) Closest Planckian temperature = 5943K (Delta E 4.353019) Closest Daylight temperature = 6082K (Delta E 0.985734) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.640770 -1.226804 -5.876967 CCT = 6123K (Delta E 4.946609) Closest Planckian temperature = 5943K (Delta E 4.353019) Closest Daylight temperature = 6082K (Delta E 0.985734) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 116.565941 124.165894 121.365684, D50 Lab: 108.678651 -4.762572 -12.508939 CCT = 5972K (Delta E 6.890329) Closest Planckian temperature = 5745K (Delta E 6.060831) Closest Daylight temperature = 5871K (Delta E 2.660205) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 64.511790 68.522425 66.980369, D50 Lab: 86.267011 -3.491468 -10.263432 CCT = 5945K (Delta E 6.363056) Closest Planckian temperature = 5735K (Delta E 5.590753) Closest Daylight temperature = 5862K (Delta E 2.186503) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 26.905684 28.417087 27.988741, D50 Lab: 60.263695 -1.987837 -8.005457 CCT = 5930K (Delta E 5.234243) Closest Planckian temperature = 5755K (Delta E 4.591707) Closest Daylight temperature = 5884K (Delta E 1.187672) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 6.144071 6.471379 6.584408, D50 Lab: 30.571861 -1.030833 -5.816641 CCT = 6083K (Delta E 4.418192) Closest Planckian temperature = 5923K (Delta E 3.883022) Closest Daylight temperature = 6062K (Delta E 0.510176) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.571861 -1.030833 -5.816641 CCT = 6083K (Delta E 4.418192) Closest Planckian temperature = 5923K (Delta E 3.883022) Closest Daylight temperature = 6062K (Delta E 0.510176) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 116.611176 123.928350 121.363808, D50 Lab: 108.599092 -4.350754 -12.644938 CCT = 5960K (Delta E 6.444925) Closest Planckian temperature = 5747K (Delta E 5.664879) Closest Daylight temperature = 5873K (Delta E 2.263144) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 64.672460 68.441938 67.178377, D50 Lab: 86.226954 -2.956057 -10.516177 CCT = 5931K (Delta E 5.640857) Closest Planckian temperature = 5744K (Delta E 4.950818) Closest Daylight temperature = 5872K (Delta E 1.545901) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 26.708397 28.224354 27.854805, D50 Lab: 60.090889 -2.043543 -8.080532 CCT = 5946K (Delta E 5.317449) Closest Planckian temperature = 5768K (Delta E 4.666630) Closest Daylight temperature = 5897K (Delta E 1.265350) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 6.154005 6.469558 6.599849, D50 Lab: 30.567493 -0.904424 -5.891430 CCT = 6079K (Delta E 4.041262) Closest Planckian temperature = 5932K (Delta E 3.549922) Closest Daylight temperature = 6072K (Delta E 0.177697) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.567493 -0.904424 -5.891430 CCT = 6079K (Delta E 4.041262) Closest Planckian temperature = 5932K (Delta E 3.549922) Closest Daylight temperature = 6072K (Delta E 0.177697) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 120.030166 127.667344 125.560879, D50 Lab: 109.839774 -4.542272 -13.098348 CCT = 5991K (Delta E 6.554213) Closest Planckian temperature = 5772K (Delta E 5.765044) Closest Daylight temperature = 5899K (Delta E 2.368586) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 66.590402 70.542611 69.377397, D50 Lab: 87.262309 -3.134252 -10.747149 CCT = 5951K (Delta E 5.807812) Closest Planckian temperature = 5758K (Delta E 5.100360) Closest Daylight temperature = 5886K (Delta E 1.698719) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 27.489125 29.158690 28.738045, D50 Lab: 60.921426 -2.478038 -8.105322 CCT = 5976K (Delta E 6.028851) Closest Planckian temperature = 5773K (Delta E 5.298263) Closest Daylight temperature = 5902K (Delta E 1.900430) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 6.326874 6.649709 6.776715, D50 Lab: 30.995780 -0.896754 -5.916062 CCT = 6071K (Delta E 4.005433) Closest Planckian temperature = 5926K (Delta E 3.517820) Closest Daylight temperature = 6065K (Delta E 0.144142) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.995780 -0.896754 -5.916062 CCT = 6071K (Delta E 4.005433) Closest Planckian temperature = 5926K (Delta E 3.517820) Closest Daylight temperature = 6065K (Delta E 0.144142) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 121.643262 130.105649 128.560173, D50 Lab: 110.635861 -5.574898 -13.543244 CCT = 6071K (Delta E 7.533820) Closest Planckian temperature = 5815K (Delta E 6.643605) Closest Daylight temperature = 5943K (Delta E 3.258868) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 67.775736 72.266319 71.178047, D50 Lab: 88.096621 -4.123469 -10.928024 CCT = 6023K (Delta E 6.995424) Closest Planckian temperature = 5788K (Delta E 6.159783) Closest Daylight temperature = 5915K (Delta E 2.767919) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 28.131948 29.978900 29.595129, D50 Lab: 61.636012 -3.012753 -8.258625 CCT = 6030K (Delta E 6.867980) Closest Planckian temperature = 5798K (Delta E 6.047536) Closest Daylight temperature = 5926K (Delta E 2.657241) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 6.473470 6.765282 6.888164, D50 Lab: 31.266484 -0.517860 -5.923364 CCT = 6007K (Delta E 2.947859) Closest Planckian temperature = 5902K (Delta E 2.582843) Closest Daylight temperature = 6042K (Delta E 0.798814) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.266484 -0.517860 -5.923364 CCT = 6007K (Delta E 2.947859) Closest Planckian temperature = 5902K (Delta E 2.582843) Closest Daylight temperature = 6042K (Delta E 0.798814) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 116.801943 124.624261 123.359911, D50 Lab: 108.831883 -5.063829 -13.483891 CCT = 6057K (Delta E 7.069302) Closest Planckian temperature = 5816K (Delta E 6.229078) Closest Daylight temperature = 5944K (Delta E 2.843045) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 64.869350 68.842421 67.977252, D50 Lab: 86.425958 -3.370123 -10.910497 CCT = 5991K (Delta E 6.099488) Closest Planckian temperature = 5785K (Delta E 5.362276) Closest Daylight temperature = 5914K (Delta E 1.966958) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 26.750888 28.302175 27.882982, D50 Lab: 60.160759 -2.171950 -8.007010 CCT = 5948K (Delta E 5.551435) Closest Planckian temperature = 5762K (Delta E 4.873477) Closest Daylight temperature = 5891K (Delta E 1.471926) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 6.255018 6.563924 6.746680, D50 Lab: 30.792814 -0.788285 -6.137368 CCT = 6105K (Delta E 3.641727) Closest Planckian temperature = 5970K (Delta E 3.198805) Closest Daylight temperature = 6113K (Delta E 0.167052) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.792814 -0.788285 -6.137368 CCT = 6105K (Delta E 3.641727) Closest Planckian temperature = 5970K (Delta E 3.198805) Closest Daylight temperature = 6113K (Delta E 0.167052) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 115.081771 122.300809 119.963479, D50 Lab: 108.051237 -4.328489 -12.711256 CCT = 5969K (Delta E 6.425079) Closest Planckian temperature = 5755K (Delta E 5.648226) Closest Daylight temperature = 5882K (Delta E 2.248055) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 62.334621 66.118418 64.979303, D50 Lab: 85.056784 -3.250929 -10.473103 CCT = 5960K (Delta E 6.051574) Closest Planckian temperature = 5758K (Delta E 5.316783) Closest Daylight temperature = 5886K (Delta E 1.916058) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 25.849804 27.374348 27.163845, D50 Lab: 59.319238 -2.248166 -8.249728 CCT = 5996K (Delta E 5.653680) Closest Planckian temperature = 5804K (Delta E 4.968356) Closest Daylight temperature = 5934K (Delta E 1.575347) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 5.898029 6.233309 6.427531, D50 Lab: 29.993614 -1.240610 -6.124217 CCT = 6197K (Delta E 4.937751) Closest Planckian temperature = 6011K (Delta E 4.350182) Closest Daylight temperature = 6153K (Delta E 0.996499) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.993614 -1.240610 -6.124217 CCT = 6197K (Delta E 4.937751) Closest Planckian temperature = 6011K (Delta E 4.350182) Closest Daylight temperature = 6153K (Delta E 0.996499) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 114.661874 122.077962 119.963424, D50 Lab: 107.975846 -4.649371 -12.841206 CCT = 5996K (Delta E 6.745175) Closest Planckian temperature = 5771K (Delta E 5.934859) Closest Daylight temperature = 5898K (Delta E 2.538832) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 61.818899 65.859246 64.979340, D50 Lab: 84.924570 -3.876653 -10.701093 CCT = 6024K (Delta E 6.822442) Closest Planckian temperature = 5794K (Delta E 6.006530) Closest Daylight temperature = 5922K (Delta E 2.615316) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 25.795743 27.295989 27.081138, D50 Lab: 59.247303 -2.163010 -8.233441 CCT = 5988K (Delta E 5.511791) Closest Planckian temperature = 5800K (Delta E 4.842103) Closest Daylight temperature = 5931K (Delta E 1.447924) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 5.925222 6.263326 6.427544, D50 Lab: 30.067324 -1.256015 -5.997186 CCT = 6170K (Delta E 5.014894) Closest Planckian temperature = 5984K (Delta E 4.416741) Closest Daylight temperature = 6124K (Delta E 1.057856) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.067324 -1.256015 -5.997186 CCT = 6170K (Delta E 5.014894) Closest Planckian temperature = 5984K (Delta E 4.416741) Closest Daylight temperature = 6124K (Delta E 1.057856) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""], [""" Result is XYZ: 116.839314 123.894968 122.159446, D50 Lab: 108.587904 -3.955352 -13.160232 CCT = 5975K (Delta E 5.963774) Closest Planckian temperature = 5774K (Delta E 5.240593) Closest Daylight temperature = 5903K (Delta E 1.842768) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 63.469751 67.164836 66.177725, D50 Lab: 85.587118 -2.928291 -10.687360 CCT = 5951K (Delta E 5.590334) Closest Planckian temperature = 5764K (Delta E 4.908104) Closest Daylight temperature = 5892K (Delta E 1.506948) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 26.106117 27.645671 27.403890, D50 Lab: 59.567264 -2.255152 -8.227727 CCT = 5991K (Delta E 5.663331) Closest Planckian temperature = 5798K (Delta E 4.976351) Closest Daylight temperature = 5928K (Delta E 1.582241) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 6.001154 6.326623 6.508185, D50 Lab: 30.221991 -1.083417 -6.086282 CCT = 6157K (Delta E 4.496558) Closest Planckian temperature = 5990K (Delta E 3.957006) Closest Daylight temperature = 6131K (Delta E 0.597640) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""", """ Result is XYZ: 0.104401 0.110705 0.109155, D50 Lab: 0.221991 -1.083417 -6.086282 CCT = 6157K (Delta E 4.496558) Closest Planckian temperature = 5990K (Delta E 3.957006) Closest Daylight temperature = 6131K (Delta E 0.597640) Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:"""]][frame.index][i] if i < 3: i += 1 else: i -= 3 elif bytes in ("Q", "q"): wx.CallAfter(frame.Close) return else: return for line in txt.split("\n"): sleep(.03125) wx.CallAfter(frame.write, line) print line start_new_thread(test, tuple()) app.MainLoop() dispcalGUI-1.7.1.6/dispcalGUI/wxenhancedplot.py000755 000765 000000 00000301156 12241576567 021227 0ustar00svpwheel000000 000000 #----------------------------------------------------------------------------- # Name: wx.lib.plot.py # Purpose: Line, Bar and Scatter Graphs # # Author: Gordon Williams # # Created: 2003/11/03 # RCS-ID: $Id: plot.py 65712 2010-10-01 17:56:32Z RD $ # Copyright: (c) 2002 # Licence: Use as you wish. #----------------------------------------------------------------------------- # 12/15/2003 - Jeff Grimmett (grimmtooth@softhome.net) # # o 2.5 compatability update. # o Renamed to plot.py in the wx.lib directory. # o Reworked test frame to work with wx demo framework. This saves a bit # of tedious cut and paste, and the test app is excellent. # # 12/18/2003 - Jeff Grimmett (grimmtooth@softhome.net) # # o wxScrolledMessageDialog -> ScrolledMessageDialog # # Oct 6, 2004 Gordon Williams (g_will@cyberus.ca) # - Added bar graph demo # - Modified line end shape from round to square. # - Removed FloatDCWrapper for conversion to ints and ints in arguments # # Oct 15, 2004 Gordon Williams (g_will@cyberus.ca) # - Imported modules given leading underscore to name. # - Added Cursor Line Tracking and User Point Labels. # - Demo for Cursor Line Tracking and Point Labels. # - Size of plot preview frame adjusted to show page better. # - Added helper functions PositionUserToScreen and PositionScreenToUser in PlotCanvas. # - Added functions GetClosestPoints (all curves) and GetClosestPoint (only closest curve) # can be in either user coords or screen coords. # # Jun 22, 2009 Florian Hoech (florian.hoech@gmx.de) # - Fixed exception when drawing empty plots on Mac OS X # - Fixed exception when trying to draw point labels on Mac OS X (Mac OS X # point label drawing code is still slow and only supports wx.COPY) # - Moved label positions away from axis lines a bit # - Added PolySpline class and modified demo 1 and 2 to use it # - Added center and diagonal lines option (Set/GetEnableCenterLines, # Set/GetEnableDiagonals) # - Added anti-aliasing option with optional high-resolution mode # (Set/GetEnableAntiAliasing, Set/GetEnableHiRes) and demo # - Added option to specify exact number of tick marks to use for each axis # (SetXSpec(, SetYSpec() -- work like 'min', but with # tick marks) # - Added support for background and foreground colours (enabled via # SetBackgroundColour/SetForegroundColour on a PlotCanvas instance) # - Changed PlotCanvas printing initialization from occuring in __init__ to # occur on access. This will postpone any IPP and / or CUPS warnings # which appear on stderr on some Linux systems until printing functionality # is actually used. # # """ This is a simple light weight plotting module that can be used with Boa or easily integrated into your own wxPython application. The emphasis is on small size and fast plotting for large data sets. It has a reasonable number of features to do line and scatter graphs easily as well as simple bar graphs. It is not as sophisticated or as powerful as SciPy Plt or Chaco. Both of these are great packages but consume huge amounts of computer resources for simple plots. They can be found at http://scipy.com This file contains two parts; first the re-usable library stuff, then, after a "if __name__=='__main__'" test, a simple frame and a few default plots for examples and testing. Based on wxPlotCanvas Written by K.Hinsen, R. Srinivasan; Ported to wxPython Harm van der Heijden, feb 1999 Major Additions Gordon Williams Feb. 2003 (g_will@cyberus.ca) -More style options -Zooming using mouse "rubber band" -Scroll left, right -Grid(graticule) -Printing, preview, and page set up (margins) -Axis and title labels -Cursor xy axis values -Doc strings and lots of comments -Optimizations for large number of points -Legends Did a lot of work here to speed markers up. Only a factor of 4 improvement though. Lines are much faster than markers, especially filled markers. Stay away from circles and triangles unless you only have a few thousand points. Times for 25,000 points Line - 0.078 sec Markers Square - 0.22 sec dot - 0.10 circle - 0.87 cross,plus - 0.28 triangle, triangle_down - 0.90 Thanks to Chris Barker for getting this version working on Linux. Zooming controls with mouse (when enabled): Left mouse drag - Zoom box. Left mouse double click - reset zoom. Right mouse click - zoom out centred on click location. """ import string as _string import time as _time import sys import wx # Needs Numeric or numarray or NumPy try: import oldnumeric as _Numeric except: try: import numarray as _Numeric #if numarray is used it is renamed Numeric except: try: import Numeric as _Numeric except: msg= """ This module requires the Numeric/numarray or NumPy module, which could not be imported. It probably is not installed (it's not part of the standard Python distribution). See the Numeric Python site (http://numpy.scipy.org) for information on downloading source or binaries.""" raise ImportError, "Numeric,numarray or NumPy not found. \n" + msg # # Plotting classes... # class PolyPoints: """Base Class for lines and markers - All methods are private. """ def __init__(self, points, attr): self._points = _Numeric.array(points).astype(_Numeric.Float64) self._logscale = (False, False) self._pointSize = (1.0, 1.0) self.currentScale= (1,1) self.currentShift= (0,0) self.scaled = self.points self.attributes = {} self.attributes.update(self._attributes) for name, value in attr.items(): if name not in self._attributes.keys(): raise KeyError, "Style attribute incorrect. Should be one of %s" % self._attributes.keys() self.attributes[name] = value def setLogScale(self, logscale): self._logscale = logscale def __getattr__(self, name): if name == 'points': if len(self._points)>0: data = _Numeric.array(self._points,copy=True) if self._logscale[0]: data = self.log10(data, 0) if self._logscale[1]: data = self.log10(data, 1) return data else: return self._points else: raise AttributeError, name def log10(self, data, ind): data = _Numeric.compress(data[:,ind]>0,data,0) data[:,ind] = _Numeric.log10(data[:,ind]) return data def boundingBox(self): if len(self.points) == 0: # no curves to draw # defaults to (-1,-1) and (1,1) but axis can be set in Draw minXY= _Numeric.array([-1.0,-1.0]) maxXY= _Numeric.array([ 1.0, 1.0]) else: minXY= _Numeric.minimum.reduce(self.points) maxXY= _Numeric.maximum.reduce(self.points) return minXY, maxXY def scaleAndShift(self, scale=(1,1), shift=(0,0)): if len(self.points) == 0: # no curves to draw return if (scale is not self.currentScale) or (shift is not self.currentShift): # update point scaling self.scaled = scale*self.points+shift self.currentScale= scale self.currentShift= shift # else unchanged use the current scaling def getLegend(self): return self.attributes['legend'] def getClosestPoint(self, pntXY, pointScaled= True): """Returns the index of closest point on the curve, pointXY, scaledXY, distance x, y in user coords if pointScaled == True based on screen coords if pointScaled == False based on user coords """ if pointScaled == True: #Using screen coords p = self.scaled pxy = self.currentScale * _Numeric.array(pntXY)+ self.currentShift else: #Using user coords p = self.points pxy = _Numeric.array(pntXY) #determine distance for each point d= _Numeric.sqrt(_Numeric.add.reduce((p-pxy)**2,1)) #sqrt(dx^2+dy^2) pntIndex = _Numeric.argmin(d) dist = d[pntIndex] return [pntIndex, self.points[pntIndex], self.scaled[pntIndex] / self._pointSize, dist] class PolyLine(PolyPoints): """Class to define line type and style - All methods except __init__ are private. """ _attributes = {'colour': 'black', 'width': 1, 'style': wx.SOLID, 'legend': ''} def __init__(self, points, **attr): """Creates PolyLine object points - sequence (array, tuple or list) of (x,y) points making up line **attr - key word attributes Defaults: 'colour'= 'black', - wx.Pen Colour any wx.NamedColour 'width'= 1, - Pen width 'style'= wx.SOLID, - wx.Pen style 'legend'= '' - Line Legend to display """ PolyPoints.__init__(self, points, attr) def draw(self, dc, printerScale, coord= None): colour = self.attributes['colour'] width = self.attributes['width'] * printerScale * self._pointSize[0] style= self.attributes['style'] if not isinstance(colour, wx.Colour): colour = wx.NamedColour(colour) pen = wx.Pen(colour, width, style) pen.SetCap(wx.CAP_BUTT) dc.SetPen(pen) if coord == None: if len(self.scaled): # bugfix for Mac OS X dc.DrawLines(self.scaled) else: dc.DrawLines(coord) # draw legend line def getSymExtent(self, printerScale): """Width and Height of Marker""" h= self.attributes['width'] * printerScale * self._pointSize[0] w= 5 * h return (w,h) class PolySpline(PolyLine): """Class to define line type and style - All methods except __init__ are private. """ _attributes = {'colour': 'black', 'width': 1, 'style': wx.SOLID, 'legend': ''} def __init__(self, points, **attr): """Creates PolyLine object points - sequence (array, tuple or list) of (x,y) points making up line **attr - key word attributes Defaults: 'colour'= 'black', - wx.Pen Colour any wx.NamedColour 'width'= 1, - Pen width 'style'= wx.SOLID, - wx.Pen style 'legend'= '' - Line Legend to display """ PolyLine.__init__(self, points, **attr) def draw(self, dc, printerScale, coord= None): colour = self.attributes['colour'] width = self.attributes['width'] * printerScale * self._pointSize[0] style= self.attributes['style'] if not isinstance(colour, wx.Colour): colour = wx.NamedColour(colour) pen = wx.Pen(colour, width, style) pen.SetCap(wx.CAP_ROUND) dc.SetPen(pen) if coord == None: if len(self.scaled): # bugfix for Mac OS X dc.DrawSpline(self.scaled) else: dc.DrawLines(coord) # draw legend line class PolyMarker(PolyPoints): """Class to define marker type and style - All methods except __init__ are private. """ _attributes = {'colour': 'black', 'width': 1, 'size': 2, 'fillcolour': None, 'fillstyle': wx.SOLID, 'marker': 'circle', 'legend': ''} def __init__(self, points, **attr): """Creates PolyMarker object points - sequence (array, tuple or list) of (x,y) points **attr - key word attributes Defaults: 'colour'= 'black', - wx.Pen Colour any wx.NamedColour 'width'= 1, - Pen width 'size'= 2, - Marker size 'fillcolour'= same as colour, - wx.Brush Colour any wx.NamedColour 'fillstyle'= wx.SOLID, - wx.Brush fill style (use wx.TRANSPARENT for no fill) 'marker'= 'circle' - Marker shape 'legend'= '' - Marker Legend to display Marker Shapes: - 'circle' - 'dot' - 'square' - 'triangle' - 'triangle_down' - 'cross' - 'plus' """ PolyPoints.__init__(self, points, attr) def draw(self, dc, printerScale, coord= None): colour = self.attributes['colour'] width = self.attributes['width'] * printerScale * self._pointSize[0] size = self.attributes['size'] * printerScale * self._pointSize[0] fillcolour = self.attributes['fillcolour'] fillstyle = self.attributes['fillstyle'] marker = self.attributes['marker'] if colour and not isinstance(colour, wx.Colour): colour = wx.NamedColour(colour) if fillcolour and not isinstance(fillcolour, wx.Colour): fillcolour = wx.NamedColour(fillcolour) dc.SetPen(wx.Pen(colour, width)) if fillcolour: dc.SetBrush(wx.Brush(fillcolour,fillstyle)) else: dc.SetBrush(wx.Brush(colour, fillstyle)) if coord == None: if len(self.scaled): # bugfix for Mac OS X self._drawmarkers(dc, self.scaled, marker, size) else: self._drawmarkers(dc, coord, marker, size) # draw legend marker def getSymExtent(self, printerScale): """Width and Height of Marker""" s= 5*self.attributes['size'] * printerScale * self._pointSize[0] return (s,s) def _drawmarkers(self, dc, coords, marker,size=1): f = eval('self._' +marker) f(dc, coords, size) def _circle(self, dc, coords, size=1): fact= 2.5*size wh= 5.0*size rect= _Numeric.zeros((len(coords),4),_Numeric.Float)+[0.0,0.0,wh,wh] rect[:,0:2]= coords-[fact,fact] dc.DrawEllipseList(rect.astype(_Numeric.Int32)) def _dot(self, dc, coords, size=1): dc.DrawPointList(coords) def _square(self, dc, coords, size=1): fact= 2.5*size wh= 5.0*size rect= _Numeric.zeros((len(coords),4),_Numeric.Float)+[0.0,0.0,wh,wh] rect[:,0:2]= coords-[fact,fact] dc.DrawRectangleList(rect.astype(_Numeric.Int32)) def _triangle(self, dc, coords, size=1): shape= [(-2.5*size,1.44*size), (2.5*size,1.44*size), (0.0,-2.88*size)] poly= _Numeric.repeat(coords,3) poly.shape= (len(coords),3,2) poly += shape dc.DrawPolygonList(poly.astype(_Numeric.Int32)) def _triangle_down(self, dc, coords, size=1): shape= [(-2.5*size,-1.44*size), (2.5*size,-1.44*size), (0.0,2.88*size)] poly= _Numeric.repeat(coords,3) poly.shape= (len(coords),3,2) poly += shape dc.DrawPolygonList(poly.astype(_Numeric.Int32)) def _cross(self, dc, coords, size=1): fact= 2.5*size for f in [[-fact,-fact,fact,fact],[-fact,fact,fact,-fact]]: lines= _Numeric.concatenate((coords,coords),axis=1)+f dc.DrawLineList(lines.astype(_Numeric.Int32)) def _plus(self, dc, coords, size=1): fact= 2.5*size for f in [[-fact,0,fact,0],[0,-fact,0,fact]]: lines= _Numeric.concatenate((coords,coords),axis=1)+f dc.DrawLineList(lines.astype(_Numeric.Int32)) class PlotGraphics: """Container to hold PolyXXX objects and graph labels - All methods except __init__ are private. """ def __init__(self, objects, title='', xLabel='', yLabel= ''): """Creates PlotGraphics object objects - list of PolyXXX objects to make graph title - title shown at top of graph xLabel - label shown on x-axis yLabel - label shown on y-axis """ if type(objects) not in [list,tuple]: raise TypeError, "objects argument should be list or tuple" self.objects = objects self.title= title self.xLabel= xLabel self.yLabel= yLabel self._pointSize = (1.0, 1.0) def setLogScale(self, logscale): if type(logscale) != tuple: raise TypeError, 'logscale must be a tuple of bools, e.g. (False, False)' if len(self.objects) == 0: return for o in self.objects: o.setLogScale(logscale) def boundingBox(self): p1, p2 = self.objects[0].boundingBox() for o in self.objects[1:]: p1o, p2o = o.boundingBox() p1 = _Numeric.minimum(p1, p1o) p2 = _Numeric.maximum(p2, p2o) return p1, p2 def scaleAndShift(self, scale=(1,1), shift=(0,0)): for o in self.objects: o.scaleAndShift(scale, shift) def setPrinterScale(self, scale): """Thickens up lines and markers only for printing""" self.printerScale= scale def setXLabel(self, xLabel= ''): """Set the X axis label on the graph""" self.xLabel= xLabel def setYLabel(self, yLabel= ''): """Set the Y axis label on the graph""" self.yLabel= yLabel def setTitle(self, title= ''): """Set the title at the top of graph""" self.title= title def getXLabel(self): """Get x axis label string""" return self.xLabel def getYLabel(self): """Get y axis label string""" return self.yLabel def getTitle(self, title= ''): """Get the title at the top of graph""" return self.title def draw(self, dc): for o in self.objects: #t=_time.clock() # profile info o._pointSize = self._pointSize o.draw(dc, self.printerScale) #dt= _time.clock()-t #print o, "time=", dt def getSymExtent(self, printerScale): """Get max width and height of lines and markers symbols for legend""" self.objects[0]._pointSize = self._pointSize symExt = self.objects[0].getSymExtent(printerScale) for o in self.objects[1:]: o._pointSize = self._pointSize oSymExt = o.getSymExtent(printerScale) symExt = _Numeric.maximum(symExt, oSymExt) return symExt def getLegendNames(self): """Returns list of legend names""" lst = [None]*len(self) for i in range(len(self)): lst[i]= self.objects[i].getLegend() return lst def __len__(self): return len(self.objects) def __getitem__(self, item): return self.objects[item] #------------------------------------------------------------------------------- # Main window that you will want to import into your application. class PlotCanvas(wx.Panel): """ Subclass of a wx.Panel which holds two scrollbars and the actual plotting canvas (self.canvas). It allows for simple general plotting of data with zoom, labels, and automatic axis scaling.""" def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name="plotCanvas"): """Constructs a panel, which can be a child of a frame or any other non-control window""" wx.Panel.__init__(self, parent, id, pos, size, style, name) sizer = wx.FlexGridSizer(2,2,0,0) self.canvas = wx.Window(self, -1) self.sb_vert = wx.ScrollBar(self, -1, style=wx.SB_VERTICAL) self.sb_vert.SetScrollbar(0,1000,1000,1000) self.sb_hor = wx.ScrollBar(self, -1, style=wx.SB_HORIZONTAL) self.sb_hor.SetScrollbar(0,1000,1000,1000) sizer.Add(self.canvas, 1, wx.EXPAND) sizer.Add(self.sb_vert, 0, wx.EXPAND) sizer.Add(self.sb_hor, 0, wx.EXPAND) sizer.Add((0,0)) sizer.AddGrowableRow(0, 1) sizer.AddGrowableCol(0, 1) self.sb_vert.Show(False) self.sb_hor.Show(False) self.SetSizer(sizer) self.Fit() self.border = (1,1) self.SetBackgroundColour("white") # Create some mouse events for zooming self.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) self.canvas.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp) self.canvas.Bind(wx.EVT_MOTION, self.OnMotion) self.canvas.Bind(wx.EVT_LEFT_DCLICK, self.OnMouseDoubleClick) self.canvas.Bind(wx.EVT_RIGHT_DOWN, self.OnMouseRightDown) # scrollbar events self.Bind(wx.EVT_SCROLL_THUMBTRACK, self.OnScroll) self.Bind(wx.EVT_SCROLL_PAGEUP, self.OnScroll) self.Bind(wx.EVT_SCROLL_PAGEDOWN, self.OnScroll) self.Bind(wx.EVT_SCROLL_LINEUP, self.OnScroll) self.Bind(wx.EVT_SCROLL_LINEDOWN, self.OnScroll) # set curser as cross-hairs self.canvas.SetCursor(wx.CROSS_CURSOR) self.HandCursor = wx.CursorFromImage(Hand.GetImage()) self.GrabHandCursor = wx.CursorFromImage(GrabHand.GetImage()) self.MagCursor = wx.CursorFromImage(MagPlus.GetImage()) # Things for printing self._print_data = None self._pageSetupData= None self.printerScale = 1 self.parent= parent # scrollbar variables self._sb_ignore = False self._adjustingSB = False self._sb_xfullrange = 0 self._sb_yfullrange = 0 self._sb_xunit = 0 self._sb_yunit = 0 self._dragEnabled = False self._screenCoordinates = _Numeric.array([0.0, 0.0]) self._logscale = (False, False) # Zooming variables self._zoomInFactor = 0.5 self._zoomOutFactor = 2 self._zoomCorner1= _Numeric.array([0.0, 0.0]) # left mouse down corner self._zoomCorner2= _Numeric.array([0.0, 0.0]) # left mouse up corner self._zoomEnabled= False self._hasDragged= False # Drawing Variables self.last_draw = None self._pointScale= 1 self._pointShift= 0 self._xSpec= 'auto' self._ySpec= 'auto' self._gridEnabled= False self._legendEnabled= False self._titleEnabled= True self._centerLinesEnabled = False self._diagonalsEnabled = False # Fonts self._fontCache = {} self._fontSizeAxis= 10 self._fontSizeTitle= 15 self._fontSizeLegend= 7 # pointLabels self._pointLabelEnabled= False self.last_PointLabel= None self._pointLabelFunc= None self.canvas.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave) if sys.platform != "darwin": self._logicalFunction = wx.EQUIV # (NOT src) XOR dst else: self._logicalFunction = wx.COPY # wx.EQUIV not supported on Mac OS X self._useScientificNotation = False self._antiAliasingEnabled = False self._hiResEnabled = False self._pointSize = (1.0, 1.0) self._fontScale = 1.0 self.canvas.Bind(wx.EVT_PAINT, self.OnPaint) self.canvas.Bind(wx.EVT_SIZE, self.OnSize) # OnSize called to make sure the buffer is initialized. # This might result in OnSize getting called twice on some # platforms at initialization, but little harm done. self.OnSize(None) # sets the initial size based on client size self._gridColour = wx.NamedColour('black') def SetCursor(self, cursor): self.canvas.SetCursor(cursor) def GetGridColour(self): return self._gridColour def SetGridColour(self, colour): if isinstance(colour, wx.Colour): self._gridColour = colour else: self._gridColour = wx.NamedColour(colour) # SaveFile def SaveFile(self, fileName= ''): """Saves the file to the type specified in the extension. If no file name is specified a dialog box is provided. Returns True if sucessful, otherwise False. .bmp Save a Windows bitmap file. .xbm Save an X bitmap file. .xpm Save an XPM bitmap file. .png Save a Portable Network Graphics file. .jpg Save a Joint Photographic Experts Group file. """ extensions = { "bmp": wx.BITMAP_TYPE_BMP, # Save a Windows bitmap file. "xbm": wx.BITMAP_TYPE_XBM, # Save an X bitmap file. "xpm": wx.BITMAP_TYPE_XPM, # Save an XPM bitmap file. "jpg": wx.BITMAP_TYPE_JPEG, # Save a JPG file. "png": wx.BITMAP_TYPE_PNG, # Save a PNG file. } fType = _string.lower(fileName[-3:]) dlg1 = None while fType not in extensions: if dlg1: # FileDialog exists: Check for extension dlg2 = wx.MessageDialog(self, 'File name extension\n' 'must be one of\nbmp, xbm, xpm, png, or jpg', 'File Name Error', wx.OK | wx.ICON_ERROR) try: dlg2.ShowModal() finally: dlg2.Destroy() else: # FileDialog doesn't exist: just check one dlg1 = wx.FileDialog( self, "Choose a file with extension bmp, gif, xbm, xpm, png, or jpg", ".", "", "BMP files (*.bmp)|*.bmp|XBM files (*.xbm)|*.xbm|XPM file (*.xpm)|*.xpm|PNG files (*.png)|*.png|JPG files (*.jpg)|*.jpg", wx.SAVE|wx.OVERWRITE_PROMPT ) if dlg1.ShowModal() == wx.ID_OK: fileName = dlg1.GetPath() fType = _string.lower(fileName[-3:]) else: # exit without saving dlg1.Destroy() return False if dlg1: dlg1.Destroy() # Save Bitmap res= self._Buffer.SaveFile(fileName, extensions[fType]) return res @property def print_data(self): if not self._print_data: self._print_data = wx.PrintData() self._print_data.SetPaperId(wx.PAPER_LETTER) self._print_data.SetOrientation(wx.LANDSCAPE) return self._print_data @property def pageSetupData(self): if not self._pageSetupData: self._pageSetupData= wx.PageSetupDialogData() self._pageSetupData.SetMarginBottomRight((25,25)) self._pageSetupData.SetMarginTopLeft((25,25)) self._pageSetupData.SetPrintData(self.print_data) return self._pageSetupData def PageSetup(self): """Brings up the page setup dialog""" data = self.pageSetupData data.SetPrintData(self.print_data) dlg = wx.PageSetupDialog(self.parent, data) try: if dlg.ShowModal() == wx.ID_OK: data = dlg.GetPageSetupData() # returns wx.PageSetupDialogData # updates page parameters from dialog self.pageSetupData.SetMarginBottomRight(data.GetMarginBottomRight()) self.pageSetupData.SetMarginTopLeft(data.GetMarginTopLeft()) self.pageSetupData.SetPrintData(data.GetPrintData()) self.print_data=wx.PrintData(data.GetPrintData()) # updates print_data finally: dlg.Destroy() def Printout(self, paper=None): """Print current plot.""" if paper != None: self.print_data.SetPaperId(paper) pdd = wx.PrintDialogData(self.print_data) printer = wx.Printer(pdd) out = PlotPrintout(self) print_ok = printer.Print(self.parent, out) if print_ok: self.print_data = wx.PrintData(printer.GetPrintDialogData().GetPrintData()) out.Destroy() def PrintPreview(self): """Print-preview current plot.""" printout = PlotPrintout(self) printout2 = PlotPrintout(self) self.preview = wx.PrintPreview(printout, printout2, self.print_data) if not self.preview.Ok(): wx.MessageDialog(self, "Print Preview failed.\n" \ "Check that default printer is configured\n", \ "Print error", wx.OK|wx.CENTRE).ShowModal() self.preview.SetZoom(40) # search up tree to find frame instance frameInst= self while not isinstance(frameInst, wx.Frame): frameInst= frameInst.GetParent() frame = wx.PreviewFrame(self.preview, frameInst, "Preview") frame.Initialize() frame.SetPosition(self.GetPosition()) frame.SetSize((600,550)) frame.Centre(wx.BOTH) frame.Show(True) def setLogScale(self, logscale): if type(logscale) != tuple: raise TypeError, 'logscale must be a tuple of bools, e.g. (False, False)' if self.last_draw is not None: graphics, xAxis, yAxis= self.last_draw graphics.setLogScale(logscale) self.last_draw = (graphics, None, None) self.SetXSpec('min') self.SetYSpec('min') self._logscale = logscale def getLogScale(self): return self._logscale def SetFontSizeAxis(self, point= 10): """Set the tick and axis label font size (default is 10 point)""" self._fontSizeAxis= point def GetFontSizeAxis(self): """Get current tick and axis label font size in points""" return self._fontSizeAxis def SetFontSizeTitle(self, point= 15): """Set Title font size (default is 15 point)""" self._fontSizeTitle= point def GetFontSizeTitle(self): """Get current Title font size in points""" return self._fontSizeTitle def SetFontSizeLegend(self, point= 7): """Set Legend font size (default is 7 point)""" self._fontSizeLegend= point def GetFontSizeLegend(self): """Get current Legend font size in points""" return self._fontSizeLegend def SetShowScrollbars(self, value): """Set True to show scrollbars""" if value not in [True,False]: raise TypeError, "Value should be True or False" if value == self.GetShowScrollbars(): return self.sb_vert.Show(value) self.sb_hor.Show(value) wx.CallAfter(self.Layout) def GetShowScrollbars(self): """Set True to show scrollbars""" return self.sb_vert.IsShown() def SetUseScientificNotation(self, useScientificNotation): self._useScientificNotation = useScientificNotation def GetUseScientificNotation(self): return self._useScientificNotation def SetEnableAntiAliasing(self, enableAntiAliasing): """Set True to enable anti-aliasing.""" self._antiAliasingEnabled = enableAntiAliasing self.Redraw() def GetEnableAntiAliasing(self): return self._antiAliasingEnabled def SetEnableHiRes(self, enableHiRes): """Set True to enable high-resolution mode when using anti-aliasing.""" self._hiResEnabled = enableHiRes self.Redraw() def GetEnableHiRes(self): return self._hiResEnabled def SetEnableDrag(self, value): """Set True to enable drag.""" if value not in [True,False]: raise TypeError, "Value should be True or False" if value: if self.GetEnableZoom(): self.SetEnableZoom(False) self.SetCursor(self.HandCursor) else: self.SetCursor(wx.CROSS_CURSOR) self._dragEnabled = value def GetEnableDrag(self): return self._dragEnabled def SetEnableZoom(self, value): """Set True to enable zooming.""" if value not in [True,False]: raise TypeError, "Value should be True or False" if value: if self.GetEnableDrag(): self.SetEnableDrag(False) self.SetCursor(self.MagCursor) else: self.SetCursor(wx.CROSS_CURSOR) self._zoomEnabled= value def GetEnableZoom(self): """True if zooming enabled.""" return self._zoomEnabled def SetEnableGrid(self, value): """Set True, 'Horizontal' or 'Vertical' to enable grid.""" if value not in [True,False,'Horizontal','Vertical']: raise TypeError, "Value should be True, False, Horizontal or Vertical" self._gridEnabled= value self.Redraw() def GetEnableGrid(self): """True if grid enabled.""" return self._gridEnabled def SetEnableCenterLines(self, value): """Set True, 'Horizontal' or 'Vertical' to enable center line(s).""" if value not in [True,False,'Horizontal','Vertical']: raise TypeError, "Value should be True, False, Horizontal or Vertical" self._centerLinesEnabled= value self.Redraw() def GetEnableCenterLines(self): """True if grid enabled.""" return self._centerLinesEnabled def SetEnableDiagonals(self, value): """Set True, 'Bottomleft-Topright' or 'Bottomright-Topleft' to enable center line(s).""" if value not in [True,False,'Bottomleft-Topright','Bottomright-Topleft']: raise TypeError, "Value should be True, False, Bottomleft-Topright or Bottomright-Topleft" self._diagonalsEnabled= value self.Redraw() def GetEnableDiagonals(self): """True if grid enabled.""" return self._diagonalsEnabled def SetEnableLegend(self, value): """Set True to enable legend.""" if value not in [True,False]: raise TypeError, "Value should be True or False" self._legendEnabled= value self.Redraw() def GetEnableLegend(self): """True if Legend enabled.""" return self._legendEnabled def SetEnableTitle(self, value): """Set True to enable title.""" if value not in [True,False]: raise TypeError, "Value should be True or False" self._titleEnabled= value self.Redraw() def GetEnableTitle(self): """True if title enabled.""" return self._titleEnabled def SetEnablePointLabel(self, value): """Set True to enable pointLabel.""" if value not in [True,False]: raise TypeError, "Value should be True or False" self._pointLabelEnabled= value self.Redraw() #will erase existing pointLabel if present self.last_PointLabel = None def GetEnablePointLabel(self): """True if pointLabel enabled.""" return self._pointLabelEnabled def SetPointLabelFunc(self, func): """Sets the function with custom code for pointLabel drawing ******** more info needed *************** """ self._pointLabelFunc= func def GetPointLabelFunc(self): """Returns pointLabel Drawing Function""" return self._pointLabelFunc def Reset(self): """Unzoom the plot.""" self.last_PointLabel = None #reset pointLabel if self.last_draw is not None: self._Draw(self.last_draw[0]) def ScrollRight(self, units): """Move view right number of axis units.""" self.last_PointLabel = None #reset pointLabel if self.last_draw is not None: graphics, xAxis, yAxis= self.last_draw xAxis= (xAxis[0]+units, xAxis[1]+units) self._Draw(graphics,xAxis,yAxis) def ScrollUp(self, units): """Move view up number of axis units.""" self.last_PointLabel = None #reset pointLabel if self.last_draw is not None: graphics, xAxis, yAxis= self.last_draw yAxis= (yAxis[0]+units, yAxis[1]+units) self._Draw(graphics,xAxis,yAxis) def GetXY(self, event): """Wrapper around _getXY, which handles log scales""" x,y = self._getXY(event) if self.getLogScale()[0]: x = _Numeric.power(10,x) if self.getLogScale()[1]: y = _Numeric.power(10,y) return x,y def _getXY(self,event): """Takes a mouse event and returns the XY user axis values.""" x,y= self.PositionScreenToUser(event.GetPosition()) return x,y def PositionUserToScreen(self, pntXY): """Converts User position to Screen Coordinates""" userPos= _Numeric.array(pntXY) x,y= userPos * self._pointScale + self._pointShift return x,y def PositionScreenToUser(self, pntXY): """Converts Screen position to User Coordinates""" screenPos= _Numeric.array(pntXY) x,y= (screenPos-self._pointShift)/self._pointScale return x,y def SetXSpec(self, type= 'auto'): """xSpec- defines x axis type. Can be 'none', 'min' or 'auto' where: 'none' - shows no axis or tick mark values 'min' - shows min bounding box values 'auto' - rounds axis range to sensible values - like 'min', but with tick marks """ self._xSpec= type def SetYSpec(self, type= 'auto'): """ySpec- defines x axis type. Can be 'none', 'min' or 'auto' where: 'none' - shows no axis or tick mark values 'min' - shows min bounding box values 'auto' - rounds axis range to sensible values - like 'min', but with tick marks """ self._ySpec= type def GetXSpec(self): """Returns current XSpec for axis""" return self._xSpec def GetYSpec(self): """Returns current YSpec for axis""" return self._ySpec def GetXMaxRange(self): xAxis = self._getXMaxRange() if self.getLogScale()[0]: xAxis = _Numeric.power(10,xAxis) return xAxis def _getXMaxRange(self): """Returns (minX, maxX) x-axis range for displayed graph""" graphics= self.last_draw[0] p1, p2 = graphics.boundingBox() # min, max points of graphics xAxis = self._axisInterval(self._xSpec, p1[0], p2[0]) # in user units return xAxis def GetYMaxRange(self): yAxis = self._getYMaxRange() if self.getLogScale()[1]: yAxis = _Numeric.power(10,yAxis) return yAxis def _getYMaxRange(self): """Returns (minY, maxY) y-axis range for displayed graph""" graphics= self.last_draw[0] p1, p2 = graphics.boundingBox() # min, max points of graphics yAxis = self._axisInterval(self._ySpec, p1[1], p2[1]) return yAxis def GetXCurrentRange(self): xAxis = self._getXCurrentRange() if self.getLogScale()[0]: xAxis = _Numeric.power(10,xAxis) return xAxis def _getXCurrentRange(self): """Returns (minX, maxX) x-axis for currently displayed portion of graph""" return self.last_draw[1] def GetYCurrentRange(self): yAxis = self._getYCurrentRange() if self.getLogScale()[1]: yAxis = _Numeric.power(10,yAxis) return yAxis def _getYCurrentRange(self): """Returns (minY, maxY) y-axis for currently displayed portion of graph""" return self.last_draw[2] def Draw(self, graphics, xAxis = None, yAxis = None, dc = None): """Wrapper around _Draw, which handles log axes""" graphics.setLogScale(self.getLogScale()) # check Axis is either tuple or none if type(xAxis) not in [type(None),tuple]: raise TypeError, "xAxis should be None or (minX,maxX)"+str(type(xAxis)) if type(yAxis) not in [type(None),tuple]: raise TypeError, "yAxis should be None or (minY,maxY)"+str(type(xAxis)) # check case for axis = (a,b) where a==b caused by improper zooms if xAxis != None: if xAxis[0] == xAxis[1]: return if self.getLogScale()[0]: xAxis = _Numeric.log10(xAxis) if yAxis != None: if yAxis[0] == yAxis[1]: return if self.getLogScale()[1]: yAxis = _Numeric.log10(yAxis) self._Draw(graphics, xAxis, yAxis, dc) def _Draw(self, graphics, xAxis = None, yAxis = None, dc = None): """\ Draw objects in graphics with specified x and y axis. graphics- instance of PlotGraphics with list of PolyXXX objects xAxis - tuple with (min, max) axis range to view yAxis - same as xAxis dc - drawing context - doesn't have to be specified. If it's not, the offscreen buffer is used """ if dc == None: # sets new dc and clears it dc = wx.BufferedDC(wx.ClientDC(self.canvas), self._Buffer) bbr = wx.Brush(self.GetBackgroundColour(), wx.SOLID) dc.SetBackground(bbr) dc.SetBackgroundMode(wx.SOLID) dc.Clear() if self._antiAliasingEnabled: if not isinstance(dc, wx.GCDC): try: dc = wx.GCDC(dc) except Exception, exception: pass else: if self._hiResEnabled: dc.SetMapMode(wx.MM_TWIPS) # high precision - each logical unit is 1/20 of a point self._pointSize = tuple(1.0 / lscale for lscale in dc.GetLogicalScale()) self._setSize() elif self._pointSize != (1.0, 1.0): self._pointSize = (1.0, 1.0) self._setSize() if sys.platform in ("darwin", "win32") or not isinstance(dc, wx.GCDC): self._fontScale = sum(self._pointSize) / 2.0 else: # on Linux, we need to correct the font size by a certain factor if wx.GCDC is used, # to make text the same size as if wx.GCDC weren't used ppi = dc.GetPPI() self._fontScale = (96.0 / ppi[0] * self._pointSize[0] + 96.0 / ppi[1] * self._pointSize[1]) / 2.0 graphics._pointSize = self._pointSize dc.SetTextForeground(self.GetForegroundColour()) dc.SetTextBackground(self.GetBackgroundColour()) dc.BeginDrawing() # dc.Clear() # set font size for every thing but title and legend dc.SetFont(self._getFont(self._fontSizeAxis)) # sizes axis to axis type, create lower left and upper right corners of plot if xAxis == None or yAxis == None: # One or both axis not specified in Draw p1, p2 = graphics.boundingBox() # min, max points of graphics if xAxis == None: xAxis = self._axisInterval(self._xSpec, p1[0], p2[0]) # in user units if yAxis == None: yAxis = self._axisInterval(self._ySpec, p1[1], p2[1]) # Adjust bounding box for axis spec p1[0],p1[1] = xAxis[0], yAxis[0] # lower left corner user scale (xmin,ymin) p2[0],p2[1] = xAxis[1], yAxis[1] # upper right corner user scale (xmax,ymax) else: # Both axis specified in Draw p1= _Numeric.array([xAxis[0], yAxis[0]]) # lower left corner user scale (xmin,ymin) p2= _Numeric.array([xAxis[1], yAxis[1]]) # upper right corner user scale (xmax,ymax) self.last_draw = (graphics, _Numeric.array(xAxis), _Numeric.array(yAxis)) # saves most recient values # Get ticks and textExtents for axis if required if self._xSpec is not 'none': xticks = self._xticks(xAxis[0], xAxis[1]) xTextExtent = dc.GetTextExtent(xticks[-1][1])# w h of x axis text last number on axis else: xticks = None xTextExtent= (0,0) # No text for ticks if self._ySpec is not 'none': yticks = self._yticks(yAxis[0], yAxis[1]) if self.getLogScale()[1]: yTextExtent = dc.GetTextExtent('-2e-2') else: yTextExtentBottom = dc.GetTextExtent(yticks[0][1]) yTextExtentTop = dc.GetTextExtent(yticks[-1][1]) yTextExtent= (max(yTextExtentBottom[0],yTextExtentTop[0]), max(yTextExtentBottom[1],yTextExtentTop[1])) else: yticks = None yTextExtent= (0,0) # No text for ticks # TextExtents for Title and Axis Labels titleWH, xLabelWH, yLabelWH= self._titleLablesWH(dc, graphics) # TextExtents for Legend legendBoxWH, legendSymExt, legendTextExt = self._legendWH(dc, graphics) # room around graph area rhsW= max(xTextExtent[0], legendBoxWH[0])+5*self._pointSize[0] # use larger of number width or legend width lhsW= yTextExtent[0]+ yLabelWH[1] + 3*self._pointSize[0] bottomH= max(xTextExtent[1], yTextExtent[1]/2.)+ xLabelWH[1] + 2*self._pointSize[1] topH= yTextExtent[1]/2. + titleWH[1] textSize_scale= _Numeric.array([rhsW+lhsW,bottomH+topH]) # make plot area smaller by text size textSize_shift= _Numeric.array([lhsW, bottomH]) # shift plot area by this amount # draw title if requested if self._titleEnabled: dc.SetFont(self._getFont(self._fontSizeTitle)) titlePos= (self.plotbox_origin[0]+ lhsW + (self.plotbox_size[0]-lhsW-rhsW)/2.- titleWH[0]/2., self.plotbox_origin[1]- self.plotbox_size[1]) dc.DrawText(graphics.getTitle(),titlePos[0],titlePos[1]) # draw label text dc.SetFont(self._getFont(self._fontSizeAxis)) xLabelPos= (self.plotbox_origin[0]+ lhsW + (self.plotbox_size[0]-lhsW-rhsW)/2.- xLabelWH[0]/2., self.plotbox_origin[1]- xLabelWH[1]) dc.DrawText(graphics.getXLabel(),xLabelPos[0],xLabelPos[1]) yLabelPos= (self.plotbox_origin[0] - 3*self._pointSize[0], self.plotbox_origin[1]- bottomH- (self.plotbox_size[1]-bottomH-topH)/2.+ yLabelWH[0]/2.) if graphics.getYLabel(): # bug fix for Linux dc.DrawRotatedText(graphics.getYLabel(),yLabelPos[0],yLabelPos[1],90) # drawing legend makers and text if self._legendEnabled: self._drawLegend(dc,graphics,rhsW,topH,legendBoxWH, legendSymExt, legendTextExt) # allow for scaling and shifting plotted points scale = (self.plotbox_size-textSize_scale) / (p2-p1)* _Numeric.array((1,-1)) shift = -p1*scale + self.plotbox_origin + textSize_shift * _Numeric.array((1,-1)) self._pointScale= scale / self._pointSize # make available for mouse events self._pointShift= shift / self._pointSize self._drawAxes(dc, p1, p2, scale, shift, xticks, yticks) graphics.scaleAndShift(scale, shift) graphics.setPrinterScale(self.printerScale) # thicken up lines and markers if printing # set clipping area so drawing does not occur outside axis box ptx,pty,rectWidth,rectHeight= self._point2ClientCoord(p1, p2) # allow graph to overlap axis lines by adding units to width and height dc.SetClippingRegion(ptx*self._pointSize[0],pty*self._pointSize[1],rectWidth*self._pointSize[0]+2,rectHeight*self._pointSize[1]+1) # Draw the lines and markers #start = _time.clock() graphics.draw(dc) # print "entire graphics drawing took: %f second"%(_time.clock() - start) # remove the clipping region dc.DestroyClippingRegion() dc.EndDrawing() self._adjustScrollbars() def Redraw(self, dc=None): """Redraw the existing plot.""" if self.last_draw is not None: graphics, xAxis, yAxis= self.last_draw self._Draw(graphics,xAxis,yAxis,dc) def Clear(self): """Erase the window.""" self.last_PointLabel = None #reset pointLabel dc = wx.BufferedDC(wx.ClientDC(self.canvas), self._Buffer) bbr = wx.Brush(self.GetBackgroundColour(), wx.SOLID) dc.SetBackground(bbr) dc.SetBackgroundMode(wx.SOLID) dc.Clear() if self._antiAliasingEnabled: try: dc = wx.GCDC(dc) except Exception, exception: pass dc.SetTextForeground(self.GetForegroundColour()) dc.SetTextBackground(self.GetBackgroundColour()) self.last_draw = None def Zoom(self, Center, Ratio): """ Zoom on the plot Centers on the X,Y coords given in Center Zooms by the Ratio = (Xratio, Yratio) given """ self.last_PointLabel = None #reset maker x,y = Center if self.last_draw != None: (graphics, xAxis, yAxis) = self.last_draw w = (xAxis[1] - xAxis[0]) * Ratio[0] h = (yAxis[1] - yAxis[0]) * Ratio[1] xAxis = ( x - w/2, x + w/2 ) yAxis = ( y - h/2, y + h/2 ) self._Draw(graphics, xAxis, yAxis) def GetClosestPoints(self, pntXY, pointScaled= True): """Returns list with [curveNumber, legend, index of closest point, pointXY, scaledXY, distance] list for each curve. Returns [] if no curves are being plotted. x, y in user coords if pointScaled == True based on screen coords if pointScaled == False based on user coords """ if self.last_draw == None: #no graph available return [] graphics, xAxis, yAxis= self.last_draw l = [] for curveNum,obj in enumerate(graphics): #check there are points in the curve if len(obj.points) == 0: continue #go to next obj #[curveNumber, legend, index of closest point, pointXY, scaledXY, distance] cn = [curveNum]+ [obj.getLegend()]+ obj.getClosestPoint( pntXY, pointScaled) l.append(cn) return l def GetClosestPoint(self, pntXY, pointScaled= True): """Returns list with [curveNumber, legend, index of closest point, pointXY, scaledXY, distance] list for only the closest curve. Returns [] if no curves are being plotted. x, y in user coords if pointScaled == True based on screen coords if pointScaled == False based on user coords """ #closest points on screen based on screen scaling (pointScaled= True) #list [curveNumber, index, pointXY, scaledXY, distance] for each curve closestPts= self.GetClosestPoints(pntXY, pointScaled) if closestPts == []: return [] #no graph present #find one with least distance dists = [c[-1] for c in closestPts] mdist = min(dists) #Min dist i = dists.index(mdist) #index for min dist return closestPts[i] #this is the closest point on closest curve GetClosetPoint = GetClosestPoint def UpdatePointLabel(self, mDataDict): """Updates the pointLabel point on screen with data contained in mDataDict. mDataDict will be passed to your function set by SetPointLabelFunc. It can contain anything you want to display on the screen at the scaledXY point you specify. This function can be called from parent window with onClick, onMotion events etc. """ if self.last_PointLabel != None: #compare pointXY if _Numeric.sometrue(mDataDict["pointXY"] != self.last_PointLabel["pointXY"]): #closest changed self._drawPointLabel(self.last_PointLabel) #erase old self._drawPointLabel(mDataDict) #plot new else: #just plot new with no erase self._drawPointLabel(mDataDict) #plot new #save for next erase self.last_PointLabel = mDataDict # event handlers ********************************** def OnMotion(self, event): if self._zoomEnabled and event.LeftIsDown(): if self._hasDragged: self._drawRubberBand(self._zoomCorner1, self._zoomCorner2) # remove old else: self._hasDragged= True self._zoomCorner2[0], self._zoomCorner2[1] = self._getXY(event) self._drawRubberBand(self._zoomCorner1, self._zoomCorner2) # add new elif self._dragEnabled and event.LeftIsDown(): coordinates = event.GetPosition() newpos, oldpos = map(_Numeric.array, map(self.PositionScreenToUser, [coordinates, self._screenCoordinates])) dist = newpos-oldpos self._screenCoordinates = coordinates if self.last_draw is not None: graphics, xAxis, yAxis= self.last_draw yAxis -= dist[1] xAxis -= dist[0] self._Draw(graphics,xAxis,yAxis) def OnMouseLeftDown(self,event): self._zoomCorner1[0], self._zoomCorner1[1]= self._getXY(event) self._screenCoordinates = _Numeric.array(event.GetPosition()) if self._dragEnabled: self.SetCursor(self.GrabHandCursor) self.canvas.CaptureMouse() def OnMouseLeftUp(self, event): if self._zoomEnabled: if self._hasDragged == True: self._drawRubberBand(self._zoomCorner1, self._zoomCorner2) # remove old self._zoomCorner2[0], self._zoomCorner2[1]= self._getXY(event) self._hasDragged = False # reset flag minX, minY= _Numeric.minimum( self._zoomCorner1, self._zoomCorner2) maxX, maxY= _Numeric.maximum( self._zoomCorner1, self._zoomCorner2) self.last_PointLabel = None #reset pointLabel if self.last_draw != None: self._Draw(self.last_draw[0], xAxis = (minX,maxX), yAxis = (minY,maxY), dc = None) #else: # A box has not been drawn, zoom in on a point ## this interfered with the double click, so I've disables it. # X,Y = self._getXY(event) # self.Zoom( (X,Y), (self._zoomInFactor,self._zoomInFactor) ) if self._dragEnabled: self.SetCursor(self.HandCursor) if self.canvas.HasCapture(): self.canvas.ReleaseMouse() def OnMouseDoubleClick(self,event): if self._zoomEnabled: # Give a little time for the click to be totally finished # before (possibly) removing the scrollbars and trigering # size events, etc. wx.FutureCall(200,self.Reset) def OnMouseRightDown(self,event): if self._zoomEnabled: X,Y = self._getXY(event) self.Zoom( (X,Y), (self._zoomOutFactor, self._zoomOutFactor) ) def OnPaint(self, event): # All that is needed here is to draw the buffer to screen if self.last_PointLabel != None: self._drawPointLabel(self.last_PointLabel) #erase old self.last_PointLabel = None dc = wx.BufferedPaintDC(self.canvas, self._Buffer) if self._antiAliasingEnabled: try: dc = wx.GCDC(dc) except Exception, exception: pass def OnSize(self,event): # The Buffer init is done here, to make sure the buffer is always # the same size as the Window Size = self.canvas.GetClientSize() Size.width = max(1, Size.width) Size.height = max(1, Size.height) # Make new offscreen bitmap: this bitmap will always have the # current drawing in it, so it can be used to save the image to # a file, or whatever. self._Buffer = wx.EmptyBitmap(Size.width, Size.height) self._setSize() self.last_PointLabel = None #reset pointLabel if self.last_draw is None: self.Clear() else: graphics, xSpec, ySpec = self.last_draw self._Draw(graphics,xSpec,ySpec) def OnLeave(self, event): """Used to erase pointLabel when mouse outside window""" if self.last_PointLabel != None: self._drawPointLabel(self.last_PointLabel) #erase old self.last_PointLabel = None def OnScroll(self, evt): if not self._adjustingSB: self._sb_ignore = True sbpos = evt.GetPosition() if evt.GetOrientation() == wx.VERTICAL: fullrange,pagesize = self.sb_vert.GetRange(),self.sb_vert.GetPageSize() sbpos = fullrange-pagesize-sbpos dist = sbpos*self._sb_yunit-(self._getYCurrentRange()[0]-self._sb_yfullrange[0]) self.ScrollUp(dist) if evt.GetOrientation() == wx.HORIZONTAL: dist = sbpos*self._sb_xunit-(self._getXCurrentRange()[0]-self._sb_xfullrange[0]) self.ScrollRight(dist) # Private Methods ************************************************** def _setSize(self, width=None, height=None): """DC width and height.""" if width == None: (self.width,self.height) = self.canvas.GetClientSize() else: self.width, self.height= width,height self.width *= self._pointSize[0] # high precision self.height *= self._pointSize[1] # high precision self.plotbox_size = 0.97*_Numeric.array([self.width, self.height]) xo = 0.5*(self.width-self.plotbox_size[0]) yo = self.height-0.5*(self.height-self.plotbox_size[1]) self.plotbox_origin = _Numeric.array([xo, yo]) def _setPrinterScale(self, scale): """Used to thicken lines and increase marker size for print out.""" # line thickness on printer is very thin at 600 dot/in. Markers small self.printerScale= scale def _printDraw(self, printDC): """Used for printing.""" if self.last_draw != None: graphics, xSpec, ySpec= self.last_draw self._Draw(graphics,xSpec,ySpec,printDC) def _drawPointLabel(self, mDataDict): """Draws and erases pointLabels""" width = self._Buffer.GetWidth() height = self._Buffer.GetHeight() if sys.platform != "darwin": tmp_Buffer = wx.EmptyBitmap(width,height) dcs = wx.MemoryDC() dcs.SelectObject(tmp_Buffer) dcs.Clear() else: tmp_Buffer = self._Buffer.GetSubBitmap((0, 0, width, height)) dcs = wx.MemoryDC(self._Buffer) dcs.BeginDrawing() self._pointLabelFunc(dcs,mDataDict) #custom user pointLabel function dcs.EndDrawing() dc = wx.ClientDC( self.canvas ) #this will erase if called twice dc.Blit(0, 0, width, height, dcs, 0, 0, self._logicalFunction) if sys.platform == "darwin": self._Buffer = tmp_Buffer def _drawLegend(self,dc,graphics,rhsW,topH,legendBoxWH, legendSymExt, legendTextExt): """Draws legend symbols and text""" # top right hand corner of graph box is ref corner trhc= self.plotbox_origin+ (self.plotbox_size-[rhsW,topH])*[1,-1] legendLHS= .091* legendBoxWH[0] # border space between legend sym and graph box lineHeight= max(legendSymExt[1], legendTextExt[1]) * 1.1 #1.1 used as space between lines dc.SetFont(self._getFont(self._fontSizeLegend)) for i in range(len(graphics)): o = graphics[i] s= i*lineHeight if isinstance(o,PolyMarker): # draw marker with legend pnt= (trhc[0]+legendLHS+legendSymExt[0]/2., trhc[1]+s+lineHeight/2.) o.draw(dc, self.printerScale, coord= _Numeric.array([pnt])) elif isinstance(o,PolyLine): # draw line with legend pnt1= (trhc[0]+legendLHS, trhc[1]+s+lineHeight/2.) pnt2= (trhc[0]+legendLHS+legendSymExt[0], trhc[1]+s+lineHeight/2.) o.draw(dc, self.printerScale, coord= _Numeric.array([pnt1,pnt2])) else: raise TypeError, "object is neither PolyMarker or PolyLine instance" # draw legend txt pnt= (trhc[0]+legendLHS+legendSymExt[0]+5*self._pointSize[0], trhc[1]+s+lineHeight/2.-legendTextExt[1]/2) dc.DrawText(o.getLegend(),pnt[0],pnt[1]) dc.SetFont(self._getFont(self._fontSizeAxis)) # reset def _titleLablesWH(self, dc, graphics): """Draws Title and labels and returns width and height for each""" # TextExtents for Title and Axis Labels dc.SetFont(self._getFont(self._fontSizeTitle)) if self._titleEnabled: title= graphics.getTitle() titleWH= dc.GetTextExtent(title) else: titleWH= (0,0) dc.SetFont(self._getFont(self._fontSizeAxis)) xLabel, yLabel= graphics.getXLabel(),graphics.getYLabel() xLabelWH= dc.GetTextExtent(xLabel) yLabelWH= dc.GetTextExtent(yLabel) return titleWH, xLabelWH, yLabelWH def _legendWH(self, dc, graphics): """Returns the size in screen units for legend box""" if self._legendEnabled != True: legendBoxWH= symExt= txtExt= (0,0) else: # find max symbol size symExt= graphics.getSymExtent(self.printerScale) # find max legend text extent dc.SetFont(self._getFont(self._fontSizeLegend)) txtList= graphics.getLegendNames() txtExt= dc.GetTextExtent(txtList[0]) for txt in graphics.getLegendNames()[1:]: txtExt= _Numeric.maximum(txtExt,dc.GetTextExtent(txt)) maxW= symExt[0]+txtExt[0] maxH= max(symExt[1],txtExt[1]) # padding .1 for lhs of legend box and space between lines maxW= maxW* 1.1 maxH= maxH* 1.1 * len(txtList) dc.SetFont(self._getFont(self._fontSizeAxis)) legendBoxWH= (maxW,maxH) return (legendBoxWH, symExt, txtExt) def _drawRubberBand(self, corner1, corner2): """Draws/erases rect box from corner1 to corner2""" ptx,pty,rectWidth,rectHeight= self._point2ClientCoord(corner1, corner2) # draw rectangle dc = wx.ClientDC( self.canvas ) dc.BeginDrawing() dc.SetPen(wx.Pen(wx.BLACK)) dc.SetBrush(wx.Brush( wx.WHITE, wx.TRANSPARENT ) ) dc.SetLogicalFunction(wx.INVERT) dc.DrawRectangle( ptx,pty, rectWidth,rectHeight) dc.SetLogicalFunction(wx.COPY) dc.EndDrawing() def _getFont(self,size): """Take font size, adjusts if printing and returns wx.Font""" s = size*self.printerScale*self._fontScale of = self.GetFont() # Linux speed up to get font from cache rather than X font server key = (int(s), of.GetFamily (), of.GetStyle (), of.GetWeight ()) font = self._fontCache.get (key, None) if font: return font # yeah! cache hit else: font = wx.Font(int(s), of.GetFamily(), of.GetStyle(), of.GetWeight()) self._fontCache[key] = font return font def _point2ClientCoord(self, corner1, corner2): """Converts user point coords to client screen int coords x,y,width,height""" c1= _Numeric.array(corner1) c2= _Numeric.array(corner2) # convert to screen coords pt1= c1*self._pointScale+self._pointShift pt2= c2*self._pointScale+self._pointShift # make height and width positive pul= _Numeric.minimum(pt1,pt2) # Upper left corner plr= _Numeric.maximum(pt1,pt2) # Lower right corner rectWidth, rectHeight= plr-pul ptx,pty= pul return ptx, pty, rectWidth, rectHeight def _axisInterval(self, spec, lower, upper): """Returns sensible axis range for given spec""" if spec == 'none' or spec == 'min' or isinstance(spec, (float, int)): if lower == upper: return lower-0.5, upper+0.5 else: return lower, upper elif spec == 'auto': range = upper-lower if range == 0.: return lower-0.5, upper+0.5 log = _Numeric.log10(range) power = _Numeric.floor(log) fraction = log-power if fraction <= 0.05: power = power-1 grid = 10.**power lower = lower - lower % grid mod = upper % grid if mod != 0: upper = upper - mod + grid return lower, upper elif type(spec) == type(()): lower, upper = spec if lower <= upper: return lower, upper else: return upper, lower else: raise ValueError, str(spec) + ': illegal axis specification' def _drawAxes(self, dc, p1, p2, scale, shift, xticks, yticks): penWidth= self.printerScale * self._pointSize[0] # increases thickness for printing only dc.SetPen(wx.Pen(self._gridColour, penWidth)) # set length of tick marks--long ones make grid if self._gridEnabled: x,y,width,height= self._point2ClientCoord(p1,p2) if self._gridEnabled == 'Horizontal': yTickLength= (width/2.0 +1) * self._pointSize[1] xTickLength= 3 * self.printerScale * self._pointSize[0] elif self._gridEnabled == 'Vertical': yTickLength= 3 * self.printerScale * self._pointSize[1] xTickLength= (height/2.0 +1) * self._pointSize[0] else: yTickLength= (width/2.0 +1) * self._pointSize[1] xTickLength= (height/2.0 +1) * self._pointSize[0] else: yTickLength= 3 * self.printerScale * self._pointSize[1] # lengthens lines for printing xTickLength= 3 * self.printerScale * self._pointSize[0] if self._xSpec is not 'none': lower, upper = p1[0],p2[0] text = 1 for y, d in [(p1[1], -xTickLength), (p2[1], xTickLength)]: # miny, maxy and tick lengths for x, label in xticks: pt = scale*_Numeric.array([x, y])+shift dc.DrawLine(pt[0],pt[1],pt[0],pt[1] + d) # draws tick mark d units if text: dc.DrawText(label,pt[0],pt[1]+2*self._pointSize[1]) a1 = scale*_Numeric.array([lower, y])+shift a2 = scale*_Numeric.array([upper, y])+shift dc.DrawLine(a1[0],a1[1],a2[0],a2[1]) # draws upper and lower axis line text = 0 # axis values not drawn on top side if self._ySpec is not 'none': lower, upper = p1[1],p2[1] text = 1 h = dc.GetCharHeight() for x, d in [(p1[0], -yTickLength), (p2[0], yTickLength)]: for y, label in yticks: pt = scale*_Numeric.array([x, y])+shift dc.DrawLine(pt[0],pt[1],pt[0]-d,pt[1]) if text: dc.DrawText(label,pt[0]-dc.GetTextExtent(label)[0]-3*self._pointSize[0], pt[1]-0.75*h) a1 = scale*_Numeric.array([x, lower])+shift a2 = scale*_Numeric.array([x, upper])+shift dc.DrawLine(a1[0],a1[1],a2[0],a2[1]) text = 0 # axis values not drawn on right side if self._centerLinesEnabled: if self._centerLinesEnabled in ('Horizontal', True): y1 = scale[1]*p1[1]+shift[1] y2 = scale[1]*p2[1]+shift[1] y = (y1 - y2) / 2.0 + y2 dc.DrawLine(scale[0] * p1[0] + shift[0], y, scale[0] * p2[0] + shift[0], y) if self._centerLinesEnabled in ('Vertical', True): x1 = scale[0]*p1[0]+shift[0] x2 = scale[0]*p2[0]+shift[0] x = (x1 - x2) / 2.0 + x2 dc.DrawLine(x, scale[1] * p1[1] + shift[1], x, scale[1] * p2[1] + shift[1]) if self._diagonalsEnabled: if self._diagonalsEnabled in ('Bottomleft-Topright', True): dc.DrawLine(scale[0] * p1[0] + shift[0], scale[1] * p1[1] + shift[1], scale[0] * p2[0] + shift[0], scale[1] * p2[1] + shift[1]) if self._diagonalsEnabled in ('Bottomright-Topleft', True): dc.DrawLine(scale[0] * p1[0] + shift[0], scale[1] * p2[1] + shift[1], scale[0] * p2[0] + shift[0], scale[1] * p1[1] + shift[1]) def _xticks(self, *args): if self._logscale[0]: return self._logticks(*args) else: attr = {'numticks': self._xSpec} return self._ticks(*args, **attr) def _yticks(self, *args): if self._logscale[1]: return self._logticks(*args) else: attr = {'numticks': self._ySpec} return self._ticks(*args, **attr) def _logticks(self, lower, upper): #lower,upper = map(_Numeric.log10,[lower,upper]) #print 'logticks',lower,upper ticks = [] mag = _Numeric.power(10,_Numeric.floor(lower)) if upper-lower > 6: t = _Numeric.power(10,_Numeric.ceil(lower)) base = _Numeric.power(10,_Numeric.floor((upper-lower)/6)) def inc(t): return t*base-t else: t = _Numeric.ceil(_Numeric.power(10,lower)/mag)*mag def inc(t): return 10**int(_Numeric.floor(_Numeric.log10(t)+1e-16)) majortick = int(_Numeric.log10(mag)) while t <= pow(10,upper): if majortick != int(_Numeric.floor(_Numeric.log10(t)+1e-16)): majortick = int(_Numeric.floor(_Numeric.log10(t)+1e-16)) ticklabel = '1e%d'%majortick else: if upper-lower < 2: minortick = int(t/pow(10,majortick)+.5) ticklabel = '%de%d'%(minortick,majortick) else: ticklabel = '' ticks.append((_Numeric.log10(t), ticklabel)) t += inc(t) if len(ticks) == 0: ticks = [(0,'')] return ticks def _ticks(self, lower, upper, numticks=None): if isinstance(numticks, (float, int)): ideal = (upper-lower)/float(numticks) else: ideal = (upper-lower)/7. log = _Numeric.log10(ideal) power = _Numeric.floor(log) if isinstance(numticks, (float, int)): grid = ideal else: fraction = log-power factor = 1. error = fraction for f, lf in self._multiples: e = _Numeric.fabs(fraction-lf) if e < error: error = e factor = f grid = factor * 10.**power if self._useScientificNotation and (power > 4 or power < -4): format = '%+7.1e' elif power >= 0: digits = max(1, int(power)) format = '%' + `digits`+'.0f' else: digits = -int(power) format = '%'+`digits+2`+'.'+`digits`+'f' ticks = [] t = -grid*_Numeric.floor(-lower/grid) while t <= upper: if t == -0: t = 0 ticks.append( (t, format % (t,)) ) t = t + grid return ticks _multiples = [(2., _Numeric.log10(2.)), (5., _Numeric.log10(5.))] def _adjustScrollbars(self): if self._sb_ignore: self._sb_ignore = False return if not self.GetShowScrollbars(): return self._adjustingSB = True needScrollbars = False # horizontal scrollbar r_current = self._getXCurrentRange() r_max = list(self._getXMaxRange()) sbfullrange = float(self.sb_hor.GetRange()) r_max[0] = min(r_max[0],r_current[0]) r_max[1] = max(r_max[1],r_current[1]) self._sb_xfullrange = r_max unit = (r_max[1]-r_max[0])/float(self.sb_hor.GetRange()) pos = int((r_current[0]-r_max[0])/unit) if pos >= 0: pagesize = int((r_current[1]-r_current[0])/unit) self.sb_hor.SetScrollbar(pos, pagesize, sbfullrange, pagesize) self._sb_xunit = unit needScrollbars = needScrollbars or (pagesize != sbfullrange) else: self.sb_hor.SetScrollbar(0, 1000, 1000, 1000) # vertical scrollbar r_current = self._getYCurrentRange() r_max = list(self._getYMaxRange()) sbfullrange = float(self.sb_vert.GetRange()) r_max[0] = min(r_max[0],r_current[0]) r_max[1] = max(r_max[1],r_current[1]) self._sb_yfullrange = r_max unit = (r_max[1]-r_max[0])/sbfullrange pos = int((r_current[0]-r_max[0])/unit) if pos >= 0: pagesize = int((r_current[1]-r_current[0])/unit) pos = (sbfullrange-1-pos-pagesize) self.sb_vert.SetScrollbar(pos, pagesize, sbfullrange, pagesize) self._sb_yunit = unit needScrollbars = needScrollbars or (pagesize != sbfullrange) else: self.sb_vert.SetScrollbar(0, 1000, 1000, 1000) self.SetShowScrollbars(needScrollbars) self._adjustingSB = False #------------------------------------------------------------------------------- # Used to layout the printer page class PlotPrintout(wx.Printout): """Controls how the plot is made in printing and previewing""" # Do not change method names in this class, # we have to override wx.Printout methods here! def __init__(self, graph): """graph is instance of plotCanvas to be printed or previewed""" wx.Printout.__init__(self) self.graph = graph def HasPage(self, page): if page == 1: return True else: return False def GetPageInfo(self): return (1, 1, 1, 1) # disable page numbers def OnPrintPage(self, page): dc = self.GetDC() # allows using floats for certain functions ## print "PPI Printer",self.GetPPIPrinter() ## print "PPI Screen", self.GetPPIScreen() ## print "DC GetSize", dc.GetSize() ## print "GetPageSizePixels", self.GetPageSizePixels() # Note PPIScreen does not give the correct number # Calulate everything for printer and then scale for preview PPIPrinter= self.GetPPIPrinter() # printer dots/inch (w,h) #PPIScreen= self.GetPPIScreen() # screen dots/inch (w,h) dcSize= dc.GetSize() # DC size if self.graph._antiAliasingEnabled and not isinstance(dc, wx.GCDC): try: dc = wx.GCDC(dc) except Exception, exception: pass else: if self.graph._hiResEnabled: dc.SetMapMode(wx.MM_TWIPS) # high precision - each logical unit is 1/20 of a point pageSize= self.GetPageSizePixels() # page size in terms of pixcels clientDcSize= self.graph.GetClientSize() # find what the margins are (mm) margLeftSize,margTopSize= self.graph.pageSetupData.GetMarginTopLeft() margRightSize, margBottomSize= self.graph.pageSetupData.GetMarginBottomRight() # calculate offset and scale for dc pixLeft= margLeftSize*PPIPrinter[0]/25.4 # mm*(dots/in)/(mm/in) pixRight= margRightSize*PPIPrinter[0]/25.4 pixTop= margTopSize*PPIPrinter[1]/25.4 pixBottom= margBottomSize*PPIPrinter[1]/25.4 plotAreaW= pageSize[0]-(pixLeft+pixRight) plotAreaH= pageSize[1]-(pixTop+pixBottom) # ratio offset and scale to screen size if preview if self.IsPreview(): ratioW= float(dcSize[0])/pageSize[0] ratioH= float(dcSize[1])/pageSize[1] pixLeft *= ratioW pixTop *= ratioH plotAreaW *= ratioW plotAreaH *= ratioH # rescale plot to page or preview plot area self.graph._setSize(plotAreaW,plotAreaH) # Set offset and scale dc.SetDeviceOrigin(pixLeft,pixTop) # Thicken up pens and increase marker size for printing ratioW= float(plotAreaW)/clientDcSize[0] ratioH= float(plotAreaH)/clientDcSize[1] aveScale= (ratioW+ratioH)/2 if self.graph._antiAliasingEnabled and not self.IsPreview(): scale = dc.GetUserScale() dc.SetUserScale(scale[0] / self.graph._pointSize[0], scale[1] / self.graph._pointSize[1]) self.graph._setPrinterScale(aveScale) # tickens up pens for printing self.graph._printDraw(dc) # rescale back to original self.graph._setSize() self.graph._setPrinterScale(1) self.graph.Redraw() #to get point label scale and shift correct return True #---------------------------------------------------------------------- try: from embeddedimage import PyEmbeddedImage except ImportError: from wx.lib.embeddedimage import PyEmbeddedImage MagPlus = PyEmbeddedImage( "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAOFJ" "REFUeJy1VdEOxCAIo27//8XbuKfuPASGZ0Zisoi2FJABbZM3bY8c13lo5GvbjioBPAUEB0Yc" "VZ0iGRRc56Ee8DcikEgrJD8EFpzRegQASiRtBtzuA0hrdRPYQxaEKyJPG6IHyiK3xnNZvUSS" "NvUuzgYh0il4y14nCFPk5XgmNbRbQbVotGo9msj47G3UXJ7fuz8Q8FAGEu0/PbZh2D3NoshU" "1VUydBGVZKMimlGeErdNGUmf/x7YpjMjcf8HVYvS2adr6aFVlCy/5Ijk9q8SeCR9isJR8SeJ" "8pv7S0Wu2Acr0qdj3w7DRAAAAABJRU5ErkJggg==") GrabHand = PyEmbeddedImage( "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAARFJ" "REFUeJy1VdESgzAIS2j//4s3s5fRQ6Rad5M7H0oxCZhWSpK1TjwUBCBJAIBItL1fijlfe1yJ" "8noCGC9KgrXO7f0SyZEDAF/H2opsAHv9V/548nplT5Jo7YAFQKQ1RMWzmHUS96suqdBrHkuV" "uxpdJjCS8CfGXWdJ2glzcquKSR5c46QOtCpgNyIHj6oieAXg3282QvMX45hy8a8H0VonJZUO" "clesjOPg/dhBTq64o1Kacz4Ri2x5RKsf8+wcWQaJJL+A+xRcZHeQeBKjK+5EFiVJ4xy4x2Mn" "1Vk4U5/DWmfPieiqbye7a3tV/cCsWKu76K76KUFFchVnhigJ/hmktelm/m3e3b8k+Ec8PqLH" "CT4JRfyK9o1xYwAAAABJRU5ErkJggg==") Hand = PyEmbeddedImage( "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAARBJ" "REFUeJytluECwiAIhDn1/Z942/UnjCGoq+6XNeWDC1xAqbKr6zyo61Ibds60J8GBT0yS3IEM" "ABuIpJTa4IOLiAAQksuKyixLH1ShHgTgZl8KiALxOsODPoEMkgJ25Su6zoO3ZrjRnI96OLIq" "k7dsqOCboDa4XV/nwQEQVeFtmMnvbSJja+oagKBUaLn9hzd7VipRa9ostIv0O1uhzzaqNJxk" "hViwDVxqg51kksMg9r2rDDIFwHCap130FBhdMzeAfWg//6Ki5WWQrHSv6EIUeVs0g3wT3J7r" "FmWQp/JJDXeRh2TXcJa91zAH2uN2mvXFsrIrsjS8rnftWmWfAiLIStuD9m9h9belvzgS/1fP" "X7075IwDENteAAAAAElFTkSuQmCC") #--------------------------------------------------------------------------- # if running standalone... # # ...a sample implementation using the above # def _draw1Objects(): # 100 points sin function, plotted as green circles data1 = 2.*_Numeric.pi*_Numeric.arange(200)/200. data1.shape = (100, 2) data1[:,1] = _Numeric.sin(data1[:,0]) markers1 = PolyMarker(data1, legend='Green Markers', colour='green', marker='circle',size=1) # 50 points cos function, plotted as red line data1 = 2.*_Numeric.pi*_Numeric.arange(100)/100. data1.shape = (50,2) data1[:,1] = _Numeric.cos(data1[:,0]) lines = PolySpline(data1, legend= 'Red Line', colour='red') # A few more points... pi = _Numeric.pi markers2 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.), (3.*pi/4., -1)], legend='Cross Legend', colour='blue', marker='cross') return PlotGraphics([markers1, lines, markers2],"Graph Title", "X Axis", "Y Axis") def _draw2Objects(): # 100 points sin function, plotted as green dots data1 = 2.*_Numeric.pi*_Numeric.arange(200)/200. data1.shape = (100, 2) data1[:,1] = _Numeric.sin(data1[:,0]) line1 = PolySpline(data1, legend='Green Line', colour='green', width=6, style=wx.DOT) # 50 points cos function, plotted as red dot-dash data1 = 2.*_Numeric.pi*_Numeric.arange(100)/100. data1.shape = (50,2) data1[:,1] = _Numeric.cos(data1[:,0]) line2 = PolySpline(data1, legend='Red Line', colour='red', width=3, style= wx.DOT_DASH) # A few more points... pi = _Numeric.pi markers1 = PolyMarker([(0., 0.), (pi/4., 1.), (pi/2, 0.), (3.*pi/4., -1)], legend='Cross Hatch Square', colour='blue', width= 3, size= 6, fillcolour= 'red', fillstyle= wx.CROSSDIAG_HATCH, marker='square') return PlotGraphics([markers1, line1, line2], "Big Markers with Different Line Styles") def _draw3Objects(): markerList= ['circle', 'dot', 'square', 'triangle', 'triangle_down', 'cross', 'plus', 'circle'] m=[] for i in range(len(markerList)): m.append(PolyMarker([(2*i+.5,i+.5)], legend=markerList[i], colour='blue', marker=markerList[i])) return PlotGraphics(m, "Selection of Markers", "Minimal Axis", "No Axis") def _draw4Objects(): # 25,000 point line data1 = _Numeric.arange(5e5,1e6,10) data1.shape = (25000, 2) line1 = PolyLine(data1, legend='Wide Line', colour='green', width=5) # A few more points... markers2 = PolyMarker(data1, legend='Square', colour='blue', marker='square') return PlotGraphics([line1, markers2], "25,000 Points", "Value X", "") def _draw5Objects(): # Empty graph with axis defined but no points/lines points=[] line1 = PolyLine(points, legend='Wide Line', colour='green', width=5) return PlotGraphics([line1], "Empty Plot With Just Axes", "Value X", "Value Y") def _draw6Objects(): # Bar graph points1=[(1,0), (1,10)] line1 = PolyLine(points1, colour='green', legend='Feb.', width=10) points1g=[(2,0), (2,4)] line1g = PolyLine(points1g, colour='red', legend='Mar.', width=10) points1b=[(3,0), (3,6)] line1b = PolyLine(points1b, colour='blue', legend='Apr.', width=10) points2=[(4,0), (4,12)] line2 = PolyLine(points2, colour='Yellow', legend='May', width=10) points2g=[(5,0), (5,8)] line2g = PolyLine(points2g, colour='orange', legend='June', width=10) points2b=[(6,0), (6,4)] line2b = PolyLine(points2b, colour='brown', legend='July', width=10) return PlotGraphics([line1, line1g, line1b, line2, line2g, line2b], "Bar Graph - (Turn on Grid, Legend)", "Months", "Number of Students") def _draw7Objects(): # Empty graph with axis defined but no points/lines x = _Numeric.arange(1,1000,1) y1 = 4.5*x**2 y2 = 2.2*x**3 points1 = _Numeric.transpose([x,y1]) points2 = _Numeric.transpose([x,y2]) line1 = PolyLine(points1, legend='quadratic', colour='blue', width=1) line2 = PolyLine(points2, legend='cubic', colour='red', width=1) return PlotGraphics([line1,line2], "double log plot", "Value X", "Value Y") class TestFrame(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, (600, 400)) # Now Create the menu bar and items self.mainmenu = wx.MenuBar() menu = wx.Menu() menu.Append(200, 'Page Setup...', 'Setup the printer page') self.Bind(wx.EVT_MENU, self.OnFilePageSetup, id=200) menu.Append(201, 'Print Preview...', 'Show the current plot on page') self.Bind(wx.EVT_MENU, self.OnFilePrintPreview, id=201) menu.Append(202, 'Print...', 'Print the current plot') self.Bind(wx.EVT_MENU, self.OnFilePrint, id=202) menu.Append(203, 'Save Plot...', 'Save current plot') self.Bind(wx.EVT_MENU, self.OnSaveFile, id=203) menu.Append(205, 'E&xit', 'Enough of this already!') self.Bind(wx.EVT_MENU, self.OnFileExit, id=205) self.mainmenu.Append(menu, '&File') menu = wx.Menu() menu.Append(206, 'Draw1', 'Draw plots1') self.Bind(wx.EVT_MENU,self.OnPlotDraw1, id=206) menu.Append(207, 'Draw2', 'Draw plots2') self.Bind(wx.EVT_MENU,self.OnPlotDraw2, id=207) menu.Append(208, 'Draw3', 'Draw plots3') self.Bind(wx.EVT_MENU,self.OnPlotDraw3, id=208) menu.Append(209, 'Draw4', 'Draw plots4') self.Bind(wx.EVT_MENU,self.OnPlotDraw4, id=209) menu.Append(210, 'Draw5', 'Draw plots5') self.Bind(wx.EVT_MENU,self.OnPlotDraw5, id=210) menu.Append(260, 'Draw6', 'Draw plots6') self.Bind(wx.EVT_MENU,self.OnPlotDraw6, id=260) menu.Append(261, 'Draw7', 'Draw plots7') self.Bind(wx.EVT_MENU,self.OnPlotDraw7, id=261) menu.Append(211, '&Redraw', 'Redraw plots') self.Bind(wx.EVT_MENU,self.OnPlotRedraw, id=211) menu.Append(212, '&Clear', 'Clear canvas') self.Bind(wx.EVT_MENU,self.OnPlotClear, id=212) menu.Append(213, '&Scale', 'Scale canvas') self.Bind(wx.EVT_MENU,self.OnPlotScale, id=213) menu.Append(214, 'Enable &Zoom', 'Enable Mouse Zoom', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableZoom, id=214) menu.Append(215, 'Enable &Grid', 'Turn on Grid', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableGrid, id=215) menu.Append(217, 'Enable &Drag', 'Activates dragging mode', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableDrag, id=217) menu.Append(220, 'Enable &Legend', 'Turn on Legend', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableLegend, id=220) menu.Append(222, 'Enable &Point Label', 'Show Closest Point', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnablePointLabel, id=222) menu.Append(223, 'Enable &Anti-Aliasing', 'Smooth output', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableAntiAliasing, id=223) menu.Append(224, 'Enable &High-Resolution AA', 'Draw in higher resolution', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableHiRes, id=224) menu.Append(226, 'Enable Center Lines', 'Draw center lines', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableCenterLines, id=226) menu.Append(227, 'Enable Diagonal Lines', 'Draw diagonal lines', kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU,self.OnEnableDiagonals, id=227) menu.Append(231, 'Set Gray Background', 'Change background colour to gray') self.Bind(wx.EVT_MENU,self.OnBackgroundGray, id=231) menu.Append(232, 'Set &White Background', 'Change background colour to white') self.Bind(wx.EVT_MENU,self.OnBackgroundWhite, id=232) menu.Append(233, 'Set Red Label Text', 'Change label text colour to red') self.Bind(wx.EVT_MENU,self.OnForegroundRed, id=233) menu.Append(234, 'Set &Black Label Text', 'Change label text colour to black') self.Bind(wx.EVT_MENU,self.OnForegroundBlack, id=234) menu.Append(225, 'Scroll Up 1', 'Move View Up 1 Unit') self.Bind(wx.EVT_MENU,self.OnScrUp, id=225) menu.Append(230, 'Scroll Rt 2', 'Move View Right 2 Units') self.Bind(wx.EVT_MENU,self.OnScrRt, id=230) menu.Append(235, '&Plot Reset', 'Reset to original plot') self.Bind(wx.EVT_MENU,self.OnReset, id=235) self.mainmenu.Append(menu, '&Plot') menu = wx.Menu() menu.Append(300, '&About', 'About this thing...') self.Bind(wx.EVT_MENU, self.OnHelpAbout, id=300) self.mainmenu.Append(menu, '&Help') self.SetMenuBar(self.mainmenu) # A status bar to tell people what's happening self.CreateStatusBar(1) self.client = PlotCanvas(self) #define the function for drawing pointLabels self.client.SetPointLabelFunc(self.DrawPointLabel) # Create mouse event for showing cursor coords in status bar self.client.canvas.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) # Show closest point when enabled self.client.canvas.Bind(wx.EVT_MOTION, self.OnMotion) self.Show(True) def DrawPointLabel(self, dc, mDataDict): """This is the fuction that defines how the pointLabels are plotted dc - DC that will be passed mDataDict - Dictionary of data that you want to use for the pointLabel As an example I have decided I want a box at the curve point with some text information about the curve plotted below. Any wxDC method can be used. """ # ---------- dc.SetPen(wx.Pen(wx.BLACK)) dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) ) sx, sy = mDataDict["scaledXY"] #scaled x,y of closest point dc.DrawRectangle( sx-5,sy-5, 10, 10) #10by10 square centered on point px,py = mDataDict["pointXY"] cNum = mDataDict["curveNum"] pntIn = mDataDict["pIndex"] legend = mDataDict["legend"] #make a string to display s = "Crv# %i, '%s', Pt. (%.2f,%.2f), PtInd %i" %(cNum, legend, px, py, pntIn) dc.DrawText(s, sx , sy+1) # ----------- def OnMouseLeftDown(self,event): s= "Left Mouse Down at Point: (%.4f, %.4f)" % self.client._getXY(event) self.SetStatusText(s) event.Skip() #allows plotCanvas OnMouseLeftDown to be called def OnMotion(self, event): #show closest point (when enbled) if self.client.GetEnablePointLabel() == True: #make up dict with info for the pointLabel #I've decided to mark the closest point on the closest curve dlst= self.client.GetClosestPoint( self.client._getXY(event), pointScaled= True) if dlst != []: #returns [] if none curveNum, legend, pIndex, pointXY, scaledXY, distance = dlst #make up dictionary to pass to my user function (see DrawPointLabel) mDataDict= {"curveNum":curveNum, "legend":legend, "pIndex":pIndex,\ "pointXY":pointXY, "scaledXY":scaledXY} #pass dict to update the pointLabel self.client.UpdatePointLabel(mDataDict) event.Skip() #go to next handler def OnFilePageSetup(self, event): self.client.PageSetup() def OnFilePrintPreview(self, event): self.client.PrintPreview() def OnFilePrint(self, event): self.client.Printout() def OnSaveFile(self, event): self.client.SaveFile() def OnFileExit(self, event): self.Close() def OnPlotDraw1(self, event): self.resetDefaults() self.client.Draw(_draw1Objects()) def OnPlotDraw2(self, event): self.resetDefaults() self.client.Draw(_draw2Objects()) def OnPlotDraw3(self, event): self.resetDefaults() self.client.SetFont(wx.Font(10,wx.SCRIPT,wx.NORMAL,wx.NORMAL)) self.client.SetFontSizeAxis(20) self.client.SetFontSizeLegend(12) self.client.SetXSpec('min') self.client.SetYSpec('none') self.client.Draw(_draw3Objects()) def OnPlotDraw4(self, event): self.resetDefaults() drawObj= _draw4Objects() self.client.Draw(drawObj) ## # profile ## start = _time.clock() ## for x in range(10): ## self.client.Draw(drawObj) ## print "10 plots of Draw4 took: %f sec."%(_time.clock() - start) ## # profile end def OnPlotDraw5(self, event): # Empty plot with just axes self.resetDefaults() drawObj= _draw5Objects() # make the axis X= (0,5), Y=(0,10) # (default with None is X= (-1,1), Y= (-1,1)) self.client.Draw(drawObj, xAxis= (0,5), yAxis= (0,10)) def OnPlotDraw6(self, event): #Bar Graph Example self.resetDefaults() #self.client.SetEnableLegend(True) #turn on Legend #self.client.SetEnableGrid(True) #turn on Grid self.client.SetXSpec('none') #turns off x-axis scale self.client.SetYSpec('auto') self.client.Draw(_draw6Objects(), xAxis= (0,7)) def OnPlotDraw7(self, event): #log scale example self.resetDefaults() self.client.setLogScale((True,True)) self.client.Draw(_draw7Objects()) def OnPlotRedraw(self,event): self.client.Redraw() def OnPlotClear(self,event): self.client.Clear() def OnPlotScale(self, event): if self.client.last_draw != None: graphics, xAxis, yAxis= self.client.last_draw self.client.Draw(graphics,(1,3.05),(0,1)) def OnEnableZoom(self, event): self.client.SetEnableZoom(event.IsChecked()) self.mainmenu.Check(217, not event.IsChecked()) def OnEnableGrid(self, event): self.client.SetEnableGrid(event.IsChecked()) def OnEnableDrag(self, event): self.client.SetEnableDrag(event.IsChecked()) self.mainmenu.Check(214, not event.IsChecked()) def OnEnableLegend(self, event): self.client.SetEnableLegend(event.IsChecked()) def OnEnablePointLabel(self, event): self.client.SetEnablePointLabel(event.IsChecked()) def OnEnableAntiAliasing(self, event): self.client.SetEnableAntiAliasing(event.IsChecked()) def OnEnableHiRes(self, event): self.client.SetEnableHiRes(event.IsChecked()) def OnEnableCenterLines(self, event): self.client.SetEnableCenterLines(event.IsChecked()) def OnEnableDiagonals(self, event): self.client.SetEnableDiagonals(event.IsChecked()) def OnBackgroundGray(self, event): self.client.SetBackgroundColour("#CCCCCC") self.client.Redraw() def OnBackgroundWhite(self, event): self.client.SetBackgroundColour("white") self.client.Redraw() def OnForegroundRed(self, event): self.client.SetForegroundColour("red") self.client.Redraw() def OnForegroundBlack(self, event): self.client.SetForegroundColour("black") self.client.Redraw() def OnScrUp(self, event): self.client.ScrollUp(1) def OnScrRt(self,event): self.client.ScrollRight(2) def OnReset(self,event): self.client.Reset() def OnHelpAbout(self, event): from wx.lib.dialogs import ScrolledMessageDialog about = ScrolledMessageDialog(self, __doc__, "About...") about.ShowModal() def resetDefaults(self): """Just to reset the fonts back to the PlotCanvas defaults""" self.client.SetFont(wx.Font(10,wx.SWISS,wx.NORMAL,wx.NORMAL)) self.client.SetFontSizeAxis(10) self.client.SetFontSizeLegend(7) self.client.setLogScale((False,False)) self.client.SetXSpec('auto') self.client.SetYSpec('auto') def __test(): class MyApp(wx.App): def OnInit(self): wx.InitAllImageHandlers() frame = TestFrame(None, -1, "PlotCanvas") #frame.Show(True) self.SetTopWindow(frame) return True app = MyApp(0) app.MainLoop() if __name__ == '__main__': __test() dispcalGUI-1.7.1.6/dispcalGUI/wxfixes.py000644 000765 000000 00000013357 12025152312 017653 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import sys from meta import wx_minversion import wxversion if not getattr(sys, "frozen", False): wxversion.ensureMinimal("%i.%i" % wx_minversion[:2]) import wx if wx.VERSION < wx_minversion: app = wx.PySimpleApp() result = wx.MessageBox("This application requires a version of wxPython " "greater than or equal to %s, but your most recent " "version is %s.\n\n" "Would you like to download a new version of wxPython?\n" % (".".join(str(n) for n in wx_minversion), wx.__version__), "wxPython Upgrade Needed", style=wx.YES_NO) if result == wx.YES: import webbrowser webbrowser.open(wxversion.UPDATE_URL) app.MainLoop() sys.exit() import wx.grid wx.BitmapButton._SetBitmapLabel = wx.BitmapButton.SetBitmapLabel def SetBitmapLabel(self, bitmap): """ Replacement for SetBitmapLabel which avoids flickering """ if self.GetBitmapLabel() != bitmap: self._SetBitmapLabel(bitmap) wx.BitmapButton.SetBitmapLabel = SetBitmapLabel def BitmapButtonEnable(self, enable = True): """ Replacement for BitmapButton.Enable which circumvents repainting issues (bitmap does not change on button state change) """ wx.Button.Enable(self, enable) if not hasattr(self, "_bitmaplabel"): self._bitmaplabel = self.GetBitmapLabel() if not hasattr(self, "_bitmapdisabled"): self._bitmapdisabled = self.GetBitmapDisabled() if enable: if not self._bitmaplabel.IsNull(): self.SetBitmapLabel(self._bitmaplabel) else: if not self._bitmapdisabled.IsNull(): self.SetBitmapLabel(self._bitmapdisabled) def BitmapButtonDisable(self): """ Replacement for BitmapButton.Disable which circumvents repainting issues (bitmap does not change on button state change) """ self.Enable(False) wx.BitmapButton.Enable = BitmapButtonEnable wx.BitmapButton.Disable = BitmapButtonDisable def FindMenuItem(self, label): """ Replacement for wx.Menu.FindItem """ label = GTKMenuItemGetFixedLabel(label) for menuitem in self.GetMenuItems(): if GTKMenuItemGetFixedLabel(menuitem.Label) == label: return menuitem.GetId() wx.Menu.FindItem = FindMenuItem def GTKMenuItemGetFixedLabel(label): if sys.platform not in ("darwin", "win32"): # The underscore is a special character under GTK, like the # ampersand on Mac OS X and Windows # Recent wxPython versions already do the right thing, but we need # this workaround for older releases if "__" in label: label = label.replace("__", "_") while label and label[0] == "_": label = label[1:] return label wx.Window._SetToolTipString = wx.Window.SetToolTipString def SetToolTipString(self, string): """ Replacement for SetToolTipString which updates correctly """ wx.Window.SetToolTip(self, None) wx.Window._SetToolTipString(self, string) wx.Window.SetToolTipString = SetToolTipString def GridGetSelection(self): """ Return selected rows, cols, block and cells """ sel = [] numrows = self.GetNumberRows() numcols = self.GetNumberCols() # rows rows = self.GetSelectedRows() for row in rows: if row > -1 and row < numrows: for i in range(numcols): if not (row, i) in sel: sel += [(row, i)] # cols cols = self.GetSelectedCols() for col in cols: if col > -1 and col < numcols: for i in range(numrows): if not (i, col) in sel: sel += [(i, col)] # block tl = self.GetSelectionBlockTopLeft() br = self.GetSelectionBlockBottomRight() if tl and br: for n in range(min(len(tl), len(br))): for i in range(tl[n][0], br[n][0] + 1): # rows if i > -1 and i < numrows: for j in range(tl[n][1], br[n][1] + 1): # cols if j > -1 and j < numcols and not (i, j) in sel: sel += [(i, j)] # single selected cells cells = self.GetSelectedCells() for cell in cells: if not -1 in cell and cell[0] < numrows and cell[1] < numcols and \ cell not in sel: sel += [cell] sel.sort() return sel wx.grid.Grid.GetSelection = GridGetSelection wx._ScrolledWindow = wx.ScrolledWindow class ScrolledWindow(wx._ScrolledWindow): """ ScrolledWindow that scrolls child controls into view on focus. OnChildFocus and ScrollChildIntoView borrowed from wx.lib.scrolledpanel. """ def __init__(self, *args, **kwargs): wx._ScrolledWindow.__init__(self, *args, **kwargs) self.Bind(wx.EVT_CHILD_FOCUS, self.OnChildFocus) def OnChildFocus(self, evt): # If the child window that gets the focus is not visible, # this handler will try to scroll enough to see it. evt.Skip() child = evt.GetWindow() self.ScrollChildIntoView(child) def ScrollChildIntoView(self, child): """ Scrolls the panel such that the specified child window is in view. """ sppu_x, sppu_y = self.GetScrollPixelsPerUnit() vs_x, vs_y = self.GetViewStart() cr = child.GetRect() clntsz = self.GetClientSize() new_vs_x, new_vs_y = -1, -1 # is it before the left edge? if cr.x < 0 and sppu_x > 0: new_vs_x = vs_x + (cr.x / sppu_x) # is it above the top? if cr.y < 0 and sppu_y > 0: new_vs_y = vs_y + (cr.y / sppu_y) # For the right and bottom edges, scroll enough to show the # whole control if possible, but if not just scroll such that # the top/left edges are still visible # is it past the right edge ? if cr.right > clntsz.width and sppu_x > 0: diff = (cr.right - clntsz.width) / sppu_x if cr.x - diff * sppu_x > 0: new_vs_x = vs_x + diff + 1 else: new_vs_x = vs_x + (cr.x / sppu_x) # is it below the bottom ? if cr.bottom > clntsz.height and sppu_y > 0: diff = (cr.bottom - clntsz.height) / sppu_y if cr.y - diff * sppu_y > 0: new_vs_y = vs_y + diff + 1 else: new_vs_y = vs_y + (cr.y / sppu_y) # if we need to adjust if new_vs_x != -1 or new_vs_y != -1: #print "%s: (%s, %s)" % (self.GetName(), new_vs_x, new_vs_y) self.Scroll(new_vs_x, new_vs_y) wx.ScrolledWindow = ScrolledWindow dispcalGUI-1.7.1.6/dispcalGUI/wxLUT3DFrame.py000644 000765 000000 00000062574 12266411534 020363 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys from config import (get_data_path, get_verified_path, getcfg, geticon, hascfg, setcfg) from log import safe_print from meta import name as appname from util_os import waccess from worker import Error, get_current_profile_path, show_result_dialog import ICCProfile as ICCP import config import localization as lang import worker from worker import check_set_argyll_bin from wxaddons import FileDrop from wxwindows import (BaseFrame, ConfirmDialog, FileBrowseBitmapButtonWithChoiceHistory as FileBrowse, InfoDialog, wx) from wx import xrc class LUT3DFrame(BaseFrame): """ 3D LUT creation window """ def __init__(self, parent=None): self.res = xrc.XmlResource(get_data_path(os.path.join("xrc", "3dlut.xrc"))) pre = wx.PreFrame() self.res.LoadOnFrame(pre, parent, "lut3dframe") self.PostCreate(pre) self.Bind(wx.EVT_CLOSE, self.OnClose) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.set_child_ctrls_as_attrs(self) self.panel = self.FindWindowByName("panel") self.worker = worker.Worker(self) self.worker.set_argyll_version("collink") # Bind event handlers self.abstract_profile_cb.Bind(wx.EVT_CHECKBOX, self.use_abstract_profile_ctrl_handler) self.output_profile_current_btn.Bind(wx.EVT_BUTTON, self.output_profile_current_ctrl_handler) self.apply_cal_cb.Bind(wx.EVT_CHECKBOX, self.apply_cal_ctrl_handler) self.encoding_input_ctrl.Bind(wx.EVT_CHOICE, self.encoding_input_ctrl_handler) self.encoding_output_ctrl.Bind(wx.EVT_CHOICE, self.encoding_output_ctrl_handler) self.apply_bt1886_cb.Bind(wx.EVT_CHECKBOX, self.apply_bt1886_ctrl_handler) self.bt1886_gamma_ctrl.Bind(wx.EVT_KILL_FOCUS, self.bt1886_gamma_ctrl_handler) self.bt1886_gamma_type_ctrl.Bind(wx.EVT_CHOICE, self.bt1886_gamma_type_ctrl_handler) self.rendering_intent_ctrl.Bind(wx.EVT_CHOICE, self.rendering_intent_ctrl_handler) self.lut3d_format_ctrl.Bind(wx.EVT_CHOICE, self.lut3d_format_ctrl_handler) self.lut3d_size_ctrl.Bind(wx.EVT_CHOICE, self.lut3d_size_ctrl_handler) self.lut3d_bitdepth_input_ctrl.Bind(wx.EVT_CHOICE, self.lut3d_bitdepth_input_ctrl_handler) self.lut3d_bitdepth_output_ctrl.Bind(wx.EVT_CHOICE, self.lut3d_bitdepth_output_ctrl_handler) self.lut3d_create_btn.Bind(wx.EVT_BUTTON, self.lut3d_create_handler) self.lut3d_create_btn.SetDefault() self.setup_language() self.update_controls() self.update_layout() config.defaults.update({ "position.lut3dframe.x": self.GetDisplay().ClientArea[0] + 40, "position.lut3dframe.y": self.GetDisplay().ClientArea[1] + 60, "size.lut3dframe.w": self.GetMinSize()[0], "size.lut3dframe.h": self.GetMinSize()[1]}) if (hascfg("position.lut3dframe.x") and hascfg("position.lut3dframe.y") and hascfg("size.lut3dframe.w") and hascfg("size.lut3dframe.h")): self.SetSaneGeometry(int(getcfg("position.lut3dframe.x")), int(getcfg("position.lut3dframe.y")), int(getcfg("size.lut3dframe.w")), int(getcfg("size.lut3dframe.h"))) else: self.Center() def OnClose(self, event=None): if (self.IsShownOnScreen() and not self.IsMaximized() and not self.IsIconized()): x, y = self.GetScreenPosition() setcfg("position.lut3dframe.x", x) setcfg("position.lut3dframe.y", y) setcfg("size.lut3dframe.w", self.GetSize()[0]) setcfg("size.lut3dframe.h", self.GetSize()[1]) config.writecfg() if event: event.Skip() def use_abstract_profile_ctrl_handler(self, event): setcfg("3dlut.use_abstract_profile", int(self.abstract_profile_cb.GetValue())) config.writecfg() enable = bool(getcfg("3dlut.use_abstract_profile")) self.abstract_profile_ctrl.Enable(enable) self.abstract_profile_desc.Enable(enable) def apply_bt1886_ctrl_handler(self, event): v = self.apply_bt1886_cb.GetValue() self.bt1886_gamma_ctrl.Enable(v) self.bt1886_gamma_type_ctrl.Enable(v) setcfg("3dlut.apply_bt1886_gamma_mapping", int(v)) config.writecfg() def apply_cal_ctrl_handler(self, event): setcfg("3dlut.output.profile.apply_cal", int(self.apply_cal_cb.GetValue())) config.writecfg() def abstract_drop_unsupported_handler(self): self.drop_unsupported("abstract") def bt1886_gamma_ctrl_handler(self, event): try: v = float(self.bt1886_gamma_ctrl.GetValue().replace(",", ".")) if (v < config.valid_ranges["3dlut.bt1886_gamma"][0] or v > config.valid_ranges["3dlut.bt1886_gamma"][1]): raise ValueError() except ValueError: wx.Bell() self.bt1886_gamma_ctrl.SetValue(str(getcfg("3dlut.bt1886_gamma"))) else: if str(v) != self.bt1886_gamma_ctrl.GetValue(): self.bt1886_gamma_ctrl.SetValue(str(v)) setcfg("3dlut.bt1886_gamma", v) config.writecfg() event.Skip() def bt1886_gamma_type_ctrl_handler(self, event): setcfg("3dlut.bt1886_gamma_type", self.bt1886_gamma_types_ab[self.bt1886_gamma_type_ctrl.GetSelection()]) config.writecfg() def input_drop_unsupported_handler(self): self.drop_unsupported("input") def output_drop_unsupported_handler(self): self.drop_unsupported("output") def drop_unsupported(self, which): if not self.worker.is_working(): files = getattr(self, "%s_droptarget" % which)._filenames InfoDialog(self, msg=lang.getstr("error.file_type_unsupported") + "\n\n" + "\n".join(files), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) def abstract_drop_handler(self, path): if not self.worker.is_working(): self.abstract_profile_ctrl.SetPath(path) self.set_profile("abstract") def encoding_input_ctrl_handler(self, event): encoding = self.encoding_ab[self.encoding_input_ctrl.GetSelection()] setcfg("3dlut.encoding.input", encoding) if getcfg("3dlut.format") == "eeColor": self.encoding_output_ctrl.SetSelection(self.encoding_ba[encoding]) setcfg("3dlut.encoding.output", encoding) config.writecfg() def encoding_output_ctrl_handler(self, event): encoding = self.encoding_ab[self.encoding_output_ctrl.GetSelection()] if getcfg("3dlut.format") == "madVR" and encoding != "t": profile = getattr(self, "output_profile") if (profile and "meta" in profile.tags and isinstance(profile.tags.meta, ICCP.DictType) and "EDID_model" in profile.tags.meta): devicename = profile.tags.meta["EDID_model"] else: devicename = None dlg = ConfirmDialog(self, msg=lang.getstr("3dlut.encoding.output.warning.madvr", devicename or lang.getstr("device.name.placeholder")), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: self.encoding_output_ctrl.SetSelection( self.encoding_ba[getcfg("3dlut.encoding.output")]) return False setcfg("3dlut.encoding.output", encoding) config.writecfg() def input_drop_handler(self, path): if not self.worker.is_working(): self.input_profile_ctrl.SetPath(path) self.set_profile("input") def output_drop_handler(self, path): if not self.worker.is_working(): self.output_profile_ctrl.SetPath(path) self.set_profile("output") def abstract_profile_ctrl_handler(self, event): self.set_profile("abstract", silent=not event) def input_profile_ctrl_handler(self, event): self.set_profile("input", silent=not event) def lut3d_bitdepth_input_ctrl_handler(self, event): setcfg("3dlut.bitdepth.input", self.lut3d_bitdepth_ab[self.lut3d_bitdepth_input_ctrl.GetSelection()]) config.writecfg() def lut3d_bitdepth_output_ctrl_handler(self, event): setcfg("3dlut.bitdepth.output", self.lut3d_bitdepth_ab[self.lut3d_bitdepth_output_ctrl.GetSelection()]) config.writecfg() def lut3d_create_consumer(self, result=None): if isinstance(result, Exception) and result: show_result_dialog(result, self) # Remove temporary files self.worker.wrapup(False) def lut3d_create_handler(self, event): if not check_set_argyll_bin(): return profile_in = self.set_profile("input") if getcfg("3dlut.use_abstract_profile"): profile_abst = self.set_profile("abstract") else: profile_abst = None profile_out = self.set_profile("output") if (not None in (profile_in, profile_out) or (profile_in and profile_in.profileClass == "link")): if profile_out and profile_in.isSame(profile_out, force_calculation=True): show_result_dialog(Error(lang.getstr("error.source_dest_same")), self) return path = None defaultDir, defaultFile = get_verified_path("last_3dlut_path") ext = getcfg("3dlut.format") if ext == "eeColor": ext = "txt" elif ext == "madVR": ext = "3dlut" defaultFile = os.path.splitext(defaultFile or os.path.basename(config.defaults.get("last_3dlut_path")))[0] + "." + ext dlg = wx.FileDialog(self, lang.getstr("3dlut.create"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard="*." + ext, style=wx.SAVE | wx.FD_OVERWRITE_PROMPT) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return setcfg("last_3dlut_path", path) config.writecfg() self.worker.interactive = False self.worker.start(self.lut3d_create_consumer, self.lut3d_create_producer, wargs=(profile_in, profile_abst, profile_out, path), progress_msg=lang.getstr("3dlut.create")) def lut3d_create_producer(self, profile_in, profile_abst, profile_out, path): apply_cal = (profile_out and "vcgt" in profile_out.tags and getcfg("3dlut.output.profile.apply_cal")) input_encoding = getcfg("3dlut.encoding.input") output_encoding = getcfg("3dlut.encoding.output") if getcfg("3dlut.apply_bt1886_gamma_mapping"): bt1886_gamma = getcfg("3dlut.bt1886_gamma") else: bt1886_gamma = None bt1886_gamma_type = getcfg("3dlut.bt1886_gamma_type") intent = getcfg("3dlut.rendering_intent") format = getcfg("3dlut.format") size = getcfg("3dlut.size") input_bits = getcfg("3dlut.bitdepth.input") output_bits = getcfg("3dlut.bitdepth.output") try: self.worker.create_3dlut(profile_in, path, profile_abst, profile_out, apply_cal=apply_cal, intent=intent, format=format, size=size, input_bits=input_bits, output_bits=output_bits, input_encoding=input_encoding, output_encoding=output_encoding, bt1886_gamma=bt1886_gamma, bt1886_gamma_type=bt1886_gamma_type) except Exception, exception: return exception def lut3d_format_ctrl_handler(self, event): if getcfg("3dlut.format") in ("eeColor", "madVR"): # If previous format was eeColor or madVR, restore 3D LUT encoding setcfg("3dlut.encoding.input", getcfg("3dlut.encoding.input.backup")) setcfg("3dlut.encoding.output", getcfg("3dlut.encoding.output.backup")) format = self.lut3d_formats_ab[self.lut3d_format_ctrl.GetSelection()] setcfg("3dlut.format", format) if format in ("eeColor", "madVR"): setcfg("3dlut.encoding.input.backup", getcfg("3dlut.encoding.input")) setcfg("3dlut.encoding.output.backup", getcfg("3dlut.encoding.output")) if format == "eeColor": if getcfg("3dlut.encoding.input") == "x": # As eeColor usually needs same input & output encoding, # and xvYCC output encoding is not supported generally, fall # back to Rec601 YCbCr SD for xvYCC Rec601 YCbCr SD setcfg("3dlut.encoding.input", "6") elif getcfg("3dlut.encoding.input") == "X": # As eeColor usually needs same input & output encoding, # and xvYCC output encoding is not supported generally, fall # back to Rec709 1125/60Hz YCbCr HD for xvYCC Rec709 YCbCr SD setcfg("3dlut.encoding.input", "7") # eeColor uses a fixed size of 65x65x65 setcfg("3dlut.size", 65) self.lut3d_size_ctrl.SetSelection(self.lut3d_size_ba[65]) elif format == "mga": # Pandora uses a fixed size of 33x33x33 setcfg("3dlut.size", 33) self.lut3d_size_ctrl.SetSelection(self.lut3d_size_ba[33]) # Pandora uses a fixed bitdepth of 16 setcfg("3dlut.bitdepth.output", 16) self.lut3d_bitdepth_output_ctrl.SetSelection(self.lut3d_bitdepth_ba[16]) elif format == "madVR": # -et -Et for madVR setcfg("3dlut.encoding.input", "t") setcfg("3dlut.encoding.output", "t") # collink says madVR works best with 65 setcfg("3dlut.size", 65) self.lut3d_size_ctrl.SetSelection(self.lut3d_size_ba[65]) config.writecfg() self.setup_encoding_ctrl(format) self.enable_encoding_controls() self.enable_size_controls() self.show_bitdepth_controls() self.lut3d_create_btn.Enable(format != "madVR" or self.output_profile_ctrl.IsShown()) def lut3d_size_ctrl_handler(self, event): setcfg("3dlut.size", self.lut3d_size_ab[self.lut3d_size_ctrl.GetSelection()]) config.writecfg() def output_profile_ctrl_handler(self, event): self.set_profile("output", silent=not event) def output_profile_current_ctrl_handler(self, event): profile_path = get_current_profile_path() if profile_path and os.path.isfile(profile_path): self.output_profile_ctrl.SetPath(profile_path) self.set_profile("output", profile_path or False, silent=not event) def rendering_intent_ctrl_handler(self, event): setcfg("3dlut.rendering_intent", self.rendering_intents_ab[self.rendering_intent_ctrl.GetSelection()]) config.writecfg() def set_profile(self, which, profile_path=None, silent=False): path = getattr(self, "%s_profile_ctrl" % which).GetPath() if which == "output": if profile_path is None: profile_path = get_current_profile_path() self.output_profile_current_btn.Enable(self.output_profile_ctrl.IsShown() and bool(profile_path) and os.path.isfile(profile_path) and profile_path != path) if path: if not os.path.isfile(path): if not silent: show_result_dialog(Error(lang.getstr("file.missing", path)), parent=self) return try: profile = ICCP.ICCProfile(path) except ICCP.ICCProfileInvalidError: if not silent: show_result_dialog(Error(lang.getstr("profile.invalid")), parent=self) except IOError, exception: if not silent: show_result_dialog(exception, parent=self) else: if ((which in ("input", "output") and (profile.profileClass not in ("mntr", "link", "scnr", "spac") or profile.colorSpace != "RGB")) or (which == "abstract" and (profile.profileClass != "abst" or profile.colorSpace not in ("Lab", "XYZ")))): show_result_dialog(NotImplementedError(lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace))), parent=self) else: if profile.profileClass == "link": if which == "output": self.input_profile_ctrl.SetPath(path) if getcfg("3dlut.output.profile") == path: # The original file was probably overwritten # by the device link. Reset. setcfg("3dlut.output.profile", None) self.output_profile_ctrl.SetPath(getcfg("3dlut.output.profile")) self.set_profile("input", silent=silent) return else: self.abstract_profile_cb.SetValue(False) self.abstract_profile_cb.Disable() self.abstract_profile_ctrl.Disable() self.abstract_profile_desc.Disable() self.Freeze() self.output_profile_label.Hide() self.output_profile_ctrl.Hide() self.output_profile_current_btn.Hide() self.output_profile_desc.Hide() self.apply_cal_cb.Hide() self.show_encoding_controls(False) self.show_bt1886_controls(False) self.rendering_intent_label.Hide() self.rendering_intent_ctrl.Hide() self.panel.GetSizer().Layout() self.Thaw() else: if which == "input": enable = bool(getcfg("3dlut.use_abstract_profile")) self.abstract_profile_cb.SetValue(enable) self.abstract_profile_cb.Enable() self.abstract_profile_ctrl.Enable(enable) self.abstract_profile_desc.Enable(enable) self.Freeze() self.output_profile_label.Show() self.output_profile_ctrl.Show() self.output_profile_current_btn.Show() self.output_profile_desc.Show() self.apply_cal_cb.Show() self.show_encoding_controls() self.enable_encoding_controls() self.show_bt1886_controls() self.apply_bt1886_cb.SetValue(bool(getcfg("3dlut.apply_bt1886_gamma_mapping"))) enable_bt1886_gamma = self.apply_bt1886_cb.GetValue() self.bt1886_gamma_ctrl.Enable(enable_bt1886_gamma) self.bt1886_gamma_type_ctrl.Enable(enable_bt1886_gamma) self.rendering_intent_label.Show() self.rendering_intent_ctrl.Show() # Update controls related to output profile self.set_profile("output", silent=silent) self.panel.GetSizer().Layout() self.Thaw() elif which == "output": self.apply_cal_cb.SetValue("vcgt" in profile.tags and bool(getcfg("3dlut.output.profile.apply_cal"))) self.apply_cal_cb.Enable("vcgt" in profile.tags) setattr(self, "%s_profile" % which, profile) getattr(self, "%s_profile_desc" % which).SetLabel(profile.getDescription()) if which == "output" and not self.output_profile_ctrl.IsShown(): return setcfg("3dlut.%s.profile" % which, profile.fileName) config.writecfg() self.lut3d_create_btn.Enable(bool(getcfg("3dlut.input.profile")) and os.path.isfile(getcfg("3dlut.input.profile")) and ((bool(getcfg("3dlut.output.profile")) and os.path.isfile(getcfg("3dlut.output.profile"))) or profile.profileClass == "link") and (getcfg("3dlut.format") != "madVR" or self.output_profile_ctrl.IsShown())) return profile getattr(self, "%s_profile_ctrl" % which).SetPath(getcfg("3dlut.%s.profile" % which)) else: if which == "input": getattr(self, "%s_profile_ctrl" % which).SetPath(getcfg("3dlut.%s.profile" % which)) else: getattr(self, "%s_profile_desc" % which).SetLabel("") if not silent: setattr(self, "%s_profile" % which, None) setcfg("3dlut.%s.profile" % which, None) if which == "output": self.apply_cal_cb.Disable() self.lut3d_create_btn.Disable() def setup_language(self): BaseFrame.setup_language(self) # Create the file picker ctrls dynamically to get translated strings for which in ("input", "abstract", "output"): origpickerctrl = self.FindWindowByName("%s_profile_ctrl" % which) hsizer = origpickerctrl.GetContainingSizer() msg = {"input": lang.getstr("3dlut.input.profile"), "abstract": lang.getstr("3dlut.use_abstract_profile"), "output": lang.getstr("output.profile")}[which] kwargs = dict(toolTip=msg.rstrip(":"), dialogTitle=msg, fileMask=lang.getstr("filetype.icc") + "|*.icc;*.icm", changeCallback=getattr(self, "%s_profile_ctrl_handler" % which), name="%s_profile_ctrl" % which) if which not in ("abstract", "output"): kwargs["history"] = get_data_path("ref", "\.(icc|icm)$") setattr(self, "%s_profile_ctrl" % which, FileBrowse(self.panel, -1, **kwargs)) getattr(self, "%s_profile_ctrl" % which).SetMaxFontSize(11) hsizer.Replace(origpickerctrl, getattr(self, "%s_profile_ctrl" % which)) origpickerctrl.Destroy() hsizer.Layout() # Drop targets setattr(self, "%s_droptarget" % which, FileDrop()) getattr(self, "%s_droptarget" % which).drophandlers = {".icc": getattr(self, "%s_drop_handler" % which), ".icm": getattr(self, "%s_drop_handler" % which)} getattr(self, "%s_droptarget" % which).unsupported_handler = getattr(self, "%s_drop_unsupported_handler" % which) getattr(self, "%s_profile_ctrl" % which).SetDropTarget(getattr(self, "%s_droptarget" % which)) self.bt1886_gamma_types_ab = {0: "b", 1: "B"} self.bt1886_gamma_types_ba = {"b": 0, "B": 1} self.bt1886_gamma_type_ctrl.SetItems([lang.getstr("trc.type.relative"), lang.getstr("trc.type.absolute")]) self.rendering_intents_ab = {} self.rendering_intents_ba = {} for i, ri in enumerate(config.valid_values["3dlut.rendering_intent"]): self.rendering_intent_ctrl.Append(lang.getstr("gamap.intents." + ri)) self.rendering_intents_ab[i] = ri self.rendering_intents_ba[ri] = i self.lut3d_formats_ab = {} self.lut3d_formats_ba = {} for i, format in enumerate(config.valid_values["3dlut.format"]): if format != "madVR" or self.worker.argyll_version >= [1, 6]: self.lut3d_format_ctrl.Append(lang.getstr("3dlut.format.%s" % format)) self.lut3d_formats_ab[i] = format self.lut3d_formats_ba[format] = i self.lut3d_size_ab = {} self.lut3d_size_ba = {} for i, size in enumerate(config.valid_values["3dlut.size"]): self.lut3d_size_ctrl.Append("%sx%sx%s" % ((size, ) * 3)) self.lut3d_size_ab[i] = size self.lut3d_size_ba[size] = i self.lut3d_bitdepth_ab = {} self.lut3d_bitdepth_ba = {} for i, bitdepth in enumerate(config.valid_values["3dlut.bitdepth.input"]): self.lut3d_bitdepth_input_ctrl.Append(str(bitdepth)) self.lut3d_bitdepth_output_ctrl.Append(str(bitdepth)) self.lut3d_bitdepth_ab[i] = bitdepth self.lut3d_bitdepth_ba[bitdepth] = i self.setup_encoding_ctrl(getcfg("3dlut.format")) def setup_encoding_ctrl(self, format=None): if format == "madVR": encodings = ["n", "t"] else: encodings = config.valid_values["3dlut.encoding.input"] self.encoding_ab = {} self.encoding_ba = {} self.encoding_input_ctrl.Freeze() self.encoding_input_ctrl.Clear() self.encoding_output_ctrl.Freeze() self.encoding_output_ctrl.Clear() for i, encoding in enumerate(encodings): lstr = lang.getstr("3dlut.encoding.type_%s" % encoding) if encoding not in ("x", "X") or format != "eeColor": # As eeColor usually needs same input & output encoding, # and xvYCC output encoding is not supported generally, # don't add xvYCC input encoding choices for eeColor self.encoding_input_ctrl.Append(lstr) if encoding not in ("x", "X"): # collink: xvYCC output encoding is not supported self.encoding_output_ctrl.Append(lstr) self.encoding_ab[i] = encoding self.encoding_ba[encoding] = i self.encoding_input_ctrl.Thaw() self.encoding_output_ctrl.Thaw() def update_controls(self): """ Update controls with values from the configuration """ self.lut3d_create_btn.Disable() self.input_profile_ctrl.SetPath(getcfg("3dlut.input.profile")) self.input_profile_ctrl_handler(None) enable = bool(getcfg("3dlut.use_abstract_profile")) self.abstract_profile_cb.SetValue(enable) self.abstract_profile_ctrl.SetPath(getcfg("3dlut.abstract.profile")) self.abstract_profile_ctrl_handler(None) self.output_profile_ctrl.SetPath(getcfg("3dlut.output.profile")) self.output_profile_ctrl_handler(None) self.bt1886_gamma_ctrl.SetValue(str(getcfg("3dlut.bt1886_gamma"))) self.bt1886_gamma_type_ctrl.SetSelection(self.bt1886_gamma_types_ba[getcfg("3dlut.bt1886_gamma_type")]) self.rendering_intent_ctrl.SetSelection(self.rendering_intents_ba[getcfg("3dlut.rendering_intent")]) format = getcfg("3dlut.format") if format == "madVR" and self.worker.argyll_version < [1, 6]: # MadVR only available with Argyll 1.6+, fall back to 3dl format = "3dl" setcfg("3dlut.format", format) self.lut3d_format_ctrl.SetSelection(self.lut3d_formats_ba[getcfg("3dlut.format")]) self.lut3d_size_ctrl.SetSelection(self.lut3d_size_ba[getcfg("3dlut.size")]) self.enable_size_controls() self.lut3d_bitdepth_input_ctrl.SetSelection(self.lut3d_bitdepth_ba[getcfg("3dlut.bitdepth.input")]) self.lut3d_bitdepth_output_ctrl.SetSelection(self.lut3d_bitdepth_ba[getcfg("3dlut.bitdepth.output")]) self.show_bitdepth_controls() def show_bitdepth_controls(self): self.Freeze() input_show = getcfg("3dlut.format") == "3dl" self.lut3d_bitdepth_input_label.Show(input_show) self.lut3d_bitdepth_input_ctrl.Show(input_show) output_show = getcfg("3dlut.format") in ("3dl", "mga") self.lut3d_bitdepth_output_label.Show(output_show) self.lut3d_bitdepth_output_ctrl.Show(output_show) self.panel.GetSizer().Layout() self.Thaw() def show_bt1886_controls(self, show=True): show = show and self.worker.argyll_version >= [1, 6] self.apply_bt1886_cb.Show(show) self.bt1886_gamma_ctrl.Show(show) self.bt1886_gamma_type_ctrl.Show(show) def show_encoding_controls(self, show=True): show = show and self.worker.argyll_version >= [1, 6] self.encoding_input_label.Show(show) self.encoding_input_ctrl.Show(show) self.encoding_output_label.Show(show) self.encoding_output_ctrl.Show(show) def enable_encoding_controls(self): self.encoding_input_ctrl.SetSelection(self.encoding_ba[getcfg("3dlut.encoding.input")]) self.encoding_input_ctrl.Enable(getcfg("3dlut.format") != "madVR") if getcfg("3dlut.format") == "eeColor": setcfg("3dlut.encoding.output", getcfg("3dlut.encoding.input")) self.encoding_output_ctrl.SetSelection(self.encoding_ba[getcfg("3dlut.encoding.output")]) self.encoding_output_ctrl.Enable(getcfg("3dlut.format") != "eeColor") def enable_size_controls(self): self.lut3d_size_ctrl.Enable(getcfg("3dlut.format") not in ("eeColor", "madVR")) def main(): config.initcfg() lang.init() lang.update_defaults() app = wx.App(0) app.lut3dframe = LUT3DFrame() app.lut3dframe.Show() app.MainLoop() if __name__ == "__main__": main() dispcalGUI-1.7.1.6/dispcalGUI/wxLUTViewer.py000644 000765 000000 00000135454 12266411534 020401 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from decimal import Decimal import math import os import re import subprocess as sp import sys import tempfile import traceback from numpy import interp from argyll_cgats import cal_to_fake_profile, vcgt_to_cal from config import (fs_enc, get_bitmap_as_icon, get_display_profile, get_display_rects, getcfg, geticon, setcfg) from log import safe_print from meta import name as appname from options import debug from util_decimal import float2dec from util_os import waccess from worker import (Error, Worker, get_argyll_util, make_argyll_compatible_path, show_result_dialog) from wxaddons import FileDrop, wx from wxenhancedplot import _Numeric from wxMeasureFrame import MeasureFrame from wxwindows import InfoDialog import colormath import config import wxenhancedplot as plot import localization as lang import CGATS import ICCProfile as ICCP BGCOLOUR = "#333333" FGCOLOUR = "#999999" GRIDCOLOUR = "#444444" if sys.platform == "darwin": FONTSIZE_LARGE = 11 FONTSIZE_SMALL = 10 else: FONTSIZE_LARGE = 9 FONTSIZE_SMALL = 8 class CoordinateType(list): """ List of coordinates. [(Y, x)] where Y is in the range 0..100 and x in the range 0..255 """ def __init__(self): self._transfer_function = {} def get_gamma(self, use_vmin_vmax=False, average=True, least_squares=False, slice=(0.01, 0.99)): """ Return average or least squares gamma or a list of gamma values """ if len(self): start = slice[0] * 100 end = slice[1] * 100 values = [] for i, (y, x) in enumerate(self): n = colormath.XYZ2Lab(0, y, 0)[0] if n >= start and n <= end: values.append((x / 255.0 * 100, y)) else: # Identity if average or least_squares: return 1.0 return [1.0] vmin = 0 vmax = 100.0 if use_vmin_vmax: if len(self) > 2: vmin = self[0][0] vmax = self[-1][0] return colormath.get_gamma(values, 100.0, vmin, vmax, average, least_squares) def get_transfer_function(self, best=True, slice=(0.05, 0.95)): """ Return transfer function name, exponent and match percentage """ transfer_function = self._transfer_function.get((best, slice)) if transfer_function: return transfer_function trc = CoordinateType() match = {} vmin = self[0][0] vmax = self[-1][0] best_yx = (0, 255) for i, (y, x) in enumerate(self): if x - 127.5 > 0 and x < best_yx[1]: best_yx = (y, x) gamma = colormath.get_gamma([(best_yx[1] / 255.0 * 100.0, best_yx[0])], 100.0, vmin, vmax) for name, exp in (("Rec. 709", -709), ("SMPTE 240M", -240), ("L*", -3.0), ("sRGB", -2.4), ("Gamma %.2f" % gamma, gamma)): trc.set_trc(exp, self, vmin, vmax) match[(name, exp)] = 0.0 count = 0 start = slice[0] * 255 end = slice[1] * 255 for i, (n, x) in enumerate(self): ##n = colormath.XYZ2Lab(0, n, 0)[0] if x >= start and x <= end: n = colormath.get_gamma([(x / 255.0 * 100, n)], 100.0, vmin, vmax, False) if n: n = n[0] ##n2 = colormath.XYZ2Lab(0, trc[i][0], 0)[0] n2 = colormath.get_gamma([(trc[i][1] / 255.0 * 100, trc[i][0])], 100.0, vmin, vmax, False) if n2: n2 = n2[0] match[(name, exp)] += 1 - (max(n, n2) - min(n, n2)) / n2 count += 1 if count: match[(name, exp)] /= count if not best: self._transfer_function[(best, slice)] = match return match match, (name, exp) = sorted(zip(match.values(), match.keys()))[-1] self._transfer_function[(best, slice)] = (name, exp), match return (name, exp), match def set_trc(self, power=2.2, values=(), vmin=0, vmax=100): """ Set the response to a certain function. Positive power, or -2.4 = sRGB, -3.0 = L*, -240 = SMPTE 240M, -601 = Rec. 601, -709 = Rec. 709 (Rec. 601 and 709 transfer functions are identical) """ self[:] = [[y, x] for y, x in values] for i in xrange(len(self)): self[i][0] = vmin + colormath.specialpow(self[i][1] / 255.0, power) * (vmax - vmin) class LUTCanvas(plot.PlotCanvas): def __init__(self, *args, **kwargs): plot.PlotCanvas.__init__(self, *args, **kwargs) self.canvas.Unbind(wx.EVT_LEAVE_WINDOW) self.SetBackgroundColour(BGCOLOUR) self.SetEnableAntiAliasing(True) self.SetEnableHiRes(True) self.SetEnableCenterLines(True) self.SetEnableDiagonals('Bottomleft-Topright') self.SetEnableGrid(False) self.SetEnablePointLabel(True) self.SetForegroundColour(FGCOLOUR) self.SetFontSizeAxis(FONTSIZE_SMALL) self.SetFontSizeLegend(FONTSIZE_SMALL) self.SetFontSizeTitle(FONTSIZE_LARGE) self.SetGridColour(GRIDCOLOUR) self.setLogScale((False,False)) self.SetXSpec(5) self.SetYSpec(5) self.SetPointLabelFunc(self.DrawPointLabel) self.worker = Worker() def DrawLUT(self, vcgt=None, title=None, xLabel=None, yLabel=None, r=True, g=True, b=True): if not title: title = "" if not xLabel: xLabel = "" if not yLabel: yLabel = "" detect_increments = False Plot = plot.PolyLine Plot._attributes["width"] = 1 lines = [] linear_points = [] axis_y = 255.0 if xLabel in ("L*", "Y"): axis_x = 100.0 else: axis_x = 255.0 self.point_grid = [{}, {}, {}] if not vcgt: irange = range(0, 256) elif "data" in vcgt: # table data = list(vcgt['data']) while len(data) < 3: data.append(data[0]) r_points = [] g_points = [] b_points = [] if (not isinstance(vcgt, ICCP.VideoCardGammaTableType) and not isinstance(data[0], ICCP.CurveType)): # Coordinate list irange = range(0, len(data[0])) for i in xrange(len(data)): if i == 0 and r: for n, y in data[i]: if xLabel == "L*": n = colormath.XYZ2Lab(0, n / axis_x * 100, 0)[0] * (axis_x / 100.0) r_points.append([n, y]) self.point_grid[i][n] = y elif i == 1 and g: for n, y in data[i]: if xLabel == "L*": n = colormath.XYZ2Lab(0, n / axis_x * 100, 0)[0] * (axis_x / 100.0) g_points.append([n, y]) self.point_grid[i][n] = y elif i == 2 and b: for n, y in data[i]: if xLabel == "L*": n = colormath.XYZ2Lab(0, n / axis_x * 100, 0)[0] * (axis_x / 100.0) b_points.append([n, y]) self.point_grid[i][n] = y else: irange = range(0, vcgt['entryCount']) for i in irange: j = i * (axis_y / (vcgt['entryCount'] - 1)) if not detect_increments: linear_points += [[j, j]] if r: n = float(data[0][i]) / (math.pow(256, vcgt['entrySize']) - 1) * axis_x if not detect_increments or not r_points or \ i == vcgt['entryCount'] - 1 or n != i: if detect_increments and n != i and \ len(r_points) == 1 and i > 1 and \ r_points[-1][0] == r_points[-1][1]: r_points += [[i - 1, i - 1]] if xLabel == "L*": n = colormath.XYZ2Lab(0, n / axis_x * 100, 0)[0] * (axis_x / 100.0) if xLabel in ("L*", "Y"): r_points += [[n, j]] self.point_grid[0][n] = j else: r_points += [[j, n]] self.point_grid[0][j] = n if g: n = float(data[1][i]) / (math.pow(256, vcgt['entrySize']) - 1) * axis_x if not detect_increments or not g_points or \ i == vcgt['entryCount'] - 1 or n != i: if detect_increments and n != i and \ len(g_points) == 1 and i > 1 and \ g_points[-1][0] == g_points[-1][1]: g_points += [[i - 1, i - 1]] if xLabel == "L*": n = colormath.XYZ2Lab(0, n / axis_x * 100, 0)[0] * (axis_x / 100.0) if xLabel in ("L*", "Y"): g_points += [[n, j]] self.point_grid[1][n] = j else: g_points += [[j, n]] self.point_grid[1][j] = n if b: n = float(data[2][i]) / (math.pow(256, vcgt['entrySize']) - 1) * axis_x if not detect_increments or not b_points or \ i == vcgt['entryCount'] - 1 or n != i: if detect_increments and n != i and \ len(b_points) == 1 and i > 1 and \ b_points[-1][0] == b_points[-1][1]: b_points += [[i - 1, i - 1]] if xLabel == "L*": n = colormath.XYZ2Lab(0, n / axis_x * 100, 0)[0] * (axis_x / 100.0) if xLabel in ("L*", "Y"): b_points += [[n, j]] self.point_grid[2][n] = j else: b_points += [[j, n]] self.point_grid[2][j] = n else: # formula irange = range(0, 256) step = 100.0 / axis_y r_points = [] g_points = [] b_points = [] for i in irange: # float2dec(v) fixes miniscule deviations in the calculated gamma # n = float2dec(n, 8) if not detect_increments: linear_points += [[i, (i)]] if r: vmin = float2dec(vcgt["redMin"] * axis_x) v = float2dec(math.pow(step * i / 100.0, vcgt["redGamma"])) vmax = float2dec(vcgt["redMax"] * axis_x) n = vmin + v * (vmax - vmin) if xLabel == "L*": n = colormath.XYZ2Lab(0, float(n) / axis_x * 100, 0)[0] * (axis_x / 100.0) if xLabel in ("L*", "Y"): r_points += [[n, i]] self.point_grid[0][n] = i else: r_points += [[i, n]] self.point_grid[0][i] = n if g: vmin = float2dec(vcgt["greenMin"] * axis_x) v = float2dec(math.pow(step * i / 100.0, vcgt["greenGamma"])) vmax = float2dec(vcgt["greenMax"] * axis_x) n = vmin + v * (vmax - vmin) if xLabel == "L*": n = colormath.XYZ2Lab(0, float(n) / axis_x * 100, 0)[0] * (axis_x / 100.0) if xLabel in ("L*", "Y"): g_points += [[n, i]] self.point_grid[1][n] = i else: g_points += [[i, n]] self.point_grid[1][i] = n if b: vmin = float2dec(vcgt["blueMin"] * axis_x) v = float2dec(math.pow(step * i / 100.0, vcgt["blueGamma"])) vmax = float2dec(vcgt["blueMax"] * axis_x) n = vmin + v * (vmax - vmin) if xLabel == "L*": n = colormath.XYZ2Lab(0, float(n) / axis_x * 100, 0)[0] * (axis_x / 100.0) if xLabel in ("L*", "Y"): b_points += [[n, i]] self.point_grid[2][n] = i else: b_points += [[i, n]] self.point_grid[2][i] = n #for n in sorted(self.point_grid[0].keys()): #print n, self.point_grid[0].get(n), self.point_grid[1].get(n), self.point_grid[2].get(n) self.entryCount = irange[-1] + 1 linear = [[0, 0], [irange[-1], irange[-1]]] if not vcgt: if detect_increments: r_points = g_points = b_points = linear else: r_points = g_points = b_points = linear_points self.r_unique = len(set(round(y) for x, y in r_points)) self.g_unique = len(set(round(y) for x, y in g_points)) self.b_unique = len(set(round(y) for x, y in b_points)) legend = [] colour = None if r and g and b and r_points == g_points == b_points: colour = 'white' points = r_points legend += ['R'] legend += ['G'] legend += ['B'] elif r and g and r_points == g_points: colour = 'yellow' points = r_points legend += ['R'] legend += ['G'] elif r and b and r_points == b_points: colour = 'magenta' points = b_points legend += ['R'] legend += ['B'] elif g and b and g_points == b_points: colour = 'cyan' points = b_points legend += ['G'] legend += ['B'] else: if r: legend += ['R'] if g: legend += ['G'] if b: legend += ['B'] if colour: suffix = ((', ' + lang.getstr('linear').capitalize()) if points == (linear if detect_increments else linear_points) else '') lines += [Plot(points, legend='='.join(legend) + suffix, colour=colour)] if colour != 'white': if r and colour not in ('yellow', 'magenta'): suffix = ((', ' + lang.getstr('linear').capitalize()) if r_points == (linear if detect_increments else linear_points) else '') lines += [Plot(r_points, legend='R' + suffix, colour='red')] if g and colour not in ('yellow', 'cyan'): suffix = ((', ' + lang.getstr('linear').capitalize()) if g_points == (linear if detect_increments else linear_points) else '') lines += [Plot(g_points, legend='G' + suffix, colour='green')] if b and colour not in ('cyan', 'magenta'): suffix = ((', ' + lang.getstr('linear').capitalize()) if b_points == (linear if detect_increments else linear_points) else '') lines += [Plot(b_points, legend='B' + suffix, colour='#0080FF')] if not lines: lines += [Plot([])] self.Draw(plot.PlotGraphics(lines, title, " ".join([xLabel, lang.getstr("in")]), " ".join([yLabel, lang.getstr("out")])), xAxis=(0, axis_x), yAxis=(0, axis_y)) def DrawPointLabel(self, dc, mDataDict): """ Draw point labels. dc - DC that will be passed mDataDict - Dictionary of data that you want to use for the pointLabel """ dc.SetPen(wx.Pen(wx.BLACK)) dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) ) sx, sy = mDataDict["scaledXY"] # Scaled x, y of closest point dc.DrawRectangle(sx - 3, sy - 3, 7, 7) # 7x7 square centered on point class LUTFrame(wx.Frame): def __init__(self, *args, **kwargs): if len(args) < 3 and not "title" in kwargs: kwargs["title"] = lang.getstr("calibration.lut_viewer.title") wx.Frame.__init__(self, *args, **kwargs) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.CreateStatusBar(1) self.profile = None self.xLabel = lang.getstr("in") self.yLabel = lang.getstr("out") self.sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer) self.client = LUTCanvas(self) self.sizer.Add(self.client, 1, wx.EXPAND) self.box_panel = wx.Panel(self) self.box_panel.SetBackgroundColour(BGCOLOUR) self.sizer.Add(self.box_panel, flag=wx.EXPAND) self.box_sizer = wx.FlexGridSizer(0, 3) self.box_sizer.AddGrowableCol(0) self.box_sizer.AddGrowableCol(2) self.box_panel.SetSizer(self.box_sizer) self.box_sizer.Add((0, 0)) self.cbox_sizer = wx.BoxSizer(wx.HORIZONTAL) self.box_sizer.Add(self.cbox_sizer, flag=wx.ALL | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL, border=8) self.box_sizer.Add((0, 0)) self.plot_mode_select = wx.Choice(self.box_panel, -1, size=(-1, -1), choices=[]) self.plot_mode_select.SetMaxFontSize(11) self.cbox_sizer.Add(self.plot_mode_select, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHOICE, self.DrawLUT, id=self.plot_mode_select.GetId()) self.reload_vcgt_btn = wx.BitmapButton(self.box_panel, -1, geticon(16, "stock_refresh"), style=wx.NO_BORDER) self.reload_vcgt_btn.SetBackgroundColour(BGCOLOUR) self.cbox_sizer.Add(self.reload_vcgt_btn, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=20) self.reload_vcgt_btn.Bind(wx.EVT_BUTTON, self.reload_vcgt_handler) self.reload_vcgt_btn.SetToolTipString( lang.getstr("calibration.load_from_display_profile")) self.reload_vcgt_btn.SetBitmapDisabled(geticon(16, "empty")) self.reload_vcgt_btn.Disable() self.apply_bpc_btn = wx.BitmapButton(self.box_panel, -1, geticon(16, "black_point"), style=wx.NO_BORDER) self.apply_bpc_btn.SetBackgroundColour(BGCOLOUR) self.cbox_sizer.Add(self.apply_bpc_btn, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=16) self.apply_bpc_btn.Bind(wx.EVT_BUTTON, self.apply_bpc_handler) self.apply_bpc_btn.SetToolTipString(lang.getstr("black_point_compensation")) self.apply_bpc_btn.SetBitmapDisabled(geticon(16, "empty")) self.apply_bpc_btn.Disable() self.install_vcgt_btn = wx.BitmapButton(self.box_panel, -1, geticon(16, "install"), style=wx.NO_BORDER) self.install_vcgt_btn.SetBackgroundColour(BGCOLOUR) self.cbox_sizer.Add(self.install_vcgt_btn, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=16) self.install_vcgt_btn.Bind(wx.EVT_BUTTON, self.install_vcgt_handler) self.install_vcgt_btn.SetToolTipString(lang.getstr("apply_cal")) self.install_vcgt_btn.SetBitmapDisabled(geticon(16, "empty")) self.install_vcgt_btn.Disable() self.save_vcgt_btn = wx.BitmapButton(self.box_panel, -1, geticon(16, "media-floppy"), style=wx.NO_BORDER) self.save_vcgt_btn.SetBackgroundColour(BGCOLOUR) self.cbox_sizer.Add(self.save_vcgt_btn, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=16) self.save_vcgt_btn.Bind(wx.EVT_BUTTON, self.SaveFile) self.save_vcgt_btn.SetToolTipString(lang.getstr("save_as") + " " + "(*.cal)") self.save_vcgt_btn.SetBitmapDisabled(geticon(16, "empty")) self.save_vcgt_btn.Disable() self.cbox_sizer.Add((20, 0)) self.show_as_L = wx.CheckBox(self.box_panel, -1, u"L* \u2192") self.show_as_L.SetForegroundColour(FGCOLOUR) self.show_as_L.SetMaxFontSize(11) self.show_as_L.SetValue(True) self.cbox_sizer.Add(self.show_as_L, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=4) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.show_as_L.GetId()) self.toggle_red = wx.CheckBox(self.box_panel, -1, "R") self.toggle_red.SetForegroundColour(FGCOLOUR) self.toggle_red.SetMaxFontSize(11) self.toggle_red.SetValue(True) self.cbox_sizer.Add(self.toggle_red, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.toggle_red.GetId()) self.cbox_sizer.Add((4, 0)) self.toggle_green = wx.CheckBox(self.box_panel, -1, "G") self.toggle_green.SetForegroundColour(FGCOLOUR) self.toggle_green.SetMaxFontSize(11) self.toggle_green.SetValue(True) self.cbox_sizer.Add(self.toggle_green, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.toggle_green.GetId()) self.cbox_sizer.Add((4, 0)) self.toggle_blue = wx.CheckBox(self.box_panel, -1, "B") self.toggle_blue.SetForegroundColour(FGCOLOUR) self.toggle_blue.SetMaxFontSize(11) self.toggle_blue.SetValue(True) self.cbox_sizer.Add(self.toggle_blue, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.toggle_blue.GetId()) self.toggle_clut = wx.CheckBox(self.box_panel, -1, "LUT") self.toggle_clut.SetForegroundColour(FGCOLOUR) self.toggle_clut.SetMaxFontSize(11) xicclu = get_argyll_util("xicclu") self.toggle_clut.SetValue(bool(xicclu)) self.toggle_clut.Enable(bool(xicclu)) self.cbox_sizer.Add(self.toggle_clut, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=16) self.Bind(wx.EVT_CHECKBOX, self.toggle_clut_handler, id=self.toggle_clut.GetId()) self.save_plot_btn = wx.BitmapButton(self.box_panel, -1, geticon(16, "media-floppy"), style=wx.NO_BORDER) self.save_plot_btn.SetBackgroundColour(BGCOLOUR) self.cbox_sizer.Add(self.save_plot_btn, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=16) self.save_plot_btn.Bind(wx.EVT_BUTTON, self.SaveFile) self.save_plot_btn.SetToolTipString(lang.getstr("save_as") + " " + "(*.bmp, *.xbm, *.xpm, *.jpg, *.png)") self.save_plot_btn.SetBitmapDisabled(geticon(16, "empty")) self.save_plot_btn.Disable() self.box_sizer.Add((0, 6)) self.box_sizer.Add((0, 6)) self.box_sizer.Add((0, 6)) self.box_sizer.Add((0, 0)) self.show_actual_lut_cb = wx.CheckBox(self.box_panel, -1, lang.getstr("calibration.show_actual_lut")) self.show_actual_lut_cb.SetForegroundColour(FGCOLOUR) self.show_actual_lut_cb.SetMaxFontSize(11) self.box_sizer.Add(self.show_actual_lut_cb, flag=wx.ALIGN_CENTER | wx.BOTTOM, border=16) self.Bind(wx.EVT_CHECKBOX, self.show_actual_lut_handler, id=self.show_actual_lut_cb.GetId()) self.box_sizer.Add((0, 0)) self.client.canvas.Bind(wx.EVT_MOTION, self.OnMotion) self.droptarget = FileDrop() self.droptarget.drophandlers = { ".cal": self.drop_handler, ".icc": self.drop_handler, ".icm": self.drop_handler } self.droptarget.unsupported_handler = self.drop_unsupported_handler self.client.SetDropTarget(self.droptarget) self.SetSaneGeometry( getcfg("position.lut_viewer.x"), getcfg("position.lut_viewer.y"), getcfg("size.lut_viewer.w"), getcfg("size.lut_viewer.h")) self.Bind(wx.EVT_MOVE, self.OnMove) self.Bind(wx.EVT_SIZE, self.OnSize) self.display_no = -1 self.display_rects = get_display_rects() def apply_bpc_handler(self, event): cal = vcgt_to_cal(self.profile) cal.filename = self.profile.fileName or "" cal.apply_bpc(True) self.LoadProfile(cal_to_fake_profile(cal)) self.DrawLUT() def drop_handler(self, path): """ Drag'n'drop handler for .cal/.icc/.icm files. """ filename, ext = os.path.splitext(path) if ext == ".cal": profile = cal_to_fake_profile(path) if not profile: InfoDialog(self, msg=lang.getstr("calibration.file.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return else: try: profile = ICCP.ICCProfile(path) except ICCP.ICCProfileInvalidError, exception: InfoDialog(self, msg=lang.getstr("profile.invalid") + "\n" + path, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return self.LoadProfile(profile) self.DrawLUT() def drop_unsupported_handler(self): """ Drag'n'drop handler for unsupported files. Shows an error message. """ files = self.droptarget._filenames InfoDialog(self, msg=lang.getstr("error.file_type_unsupported") + "\n\n" + "\n".join(files), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) get_display = MeasureFrame.__dict__["get_display"] def install_vcgt_handler(self, event): cwd = self.worker.create_tempdir() if isinstance(cwd, Exception): show_result_dialog(cwd, self) else: cal = os.path.join(cwd, re.sub(r"[\\/:*?\"<>|]+", "", make_argyll_compatible_path( config.get_display_name( include_geometry=True) or "Video LUT"))) vcgt_to_cal(self.profile).write(cal) cmd, args = self.worker.prepare_dispwin(cal) if isinstance(cmd, Exception): show_result_dialog(cmd, self) elif cmd: result = self.worker.exec_cmd(cmd, args, capture_output=True, skip_scripts=True) if isinstance(result, Exception): show_result_dialog(result, self) elif not result: show_result_dialog(Error("".join(self.worker.errors)), self) # Important: # Make sure to only delete the temporary cal file we created # (which hasn't an extension, so we can use ext_filter to # exclude files which should not be deleted) self.worker.wrapup(copy=False, ext_filter=[".app", ".cal", ".ccmx", ".ccss", ".cmd", ".command", ".gam", ".gz", ".icc", ".icm", ".log", ".sh", ".ti1", ".ti3", ".wrl", ".wrz"]) def toggle_clut_handler(self, event): try: self.lookup_tone_response_curves() except Exception, exception: show_result_dialog(exception, self) else: self.trc = None self.DrawLUT() def show_actual_lut_handler(self, event): setcfg("lut_viewer.show_actual_lut", int(self.show_actual_lut_cb.GetValue())) if hasattr(self, "current_cal"): profile = self.current_cal else: profile = None self.load_lut(profile=profile) def load_lut(self, profile=None): self.current_cal = profile if (getcfg("lut_viewer.show_actual_lut") and (self.worker.argyll_version[0:3] > [1, 1, 0] or (self.worker.argyll_version[0:3] == [1, 1, 0] and not "Beta" in self.worker.argyll_version_string)) and not config.get_display_name() in ("Web", "Untethered")): tmp = self.worker.create_tempdir() if isinstance(tmp, Exception): show_result_dialog(tmp, self) return cmd, args = (get_argyll_util("dispwin"), ["-d" + self.worker.get_display(), "-s", os.path.join(tmp, re.sub(r"[\\/:*?\"<>|]+", "", make_argyll_compatible_path( config.get_display_name( include_geometry=True) or "Video LUT")))]) result = self.worker.exec_cmd(cmd, args, capture_output=True, skip_scripts=True, silent=not __name__ == "__main__") if not isinstance(result, Exception) and result: profile = cal_to_fake_profile(args[-1]) else: if isinstance(result, Exception): safe_print(result) # Important: lut_viewer_load_lut is called after measurements, # so make sure to only delete the temporary cal file we created # (which hasn't an extension, so we can use ext_filter to # exclude files which should not be deleted) self.worker.wrapup(copy=False, ext_filter=[".app", ".cal", ".ccmx", ".ccss", ".cmd", ".command", ".gam", ".gz", ".icc", ".icm", ".log", ".sh", ".ti1", ".ti3", ".wrl", ".wrz"]) if profile and (profile.is_loaded or not profile.fileName or os.path.isfile(profile.fileName)): if not self.profile or \ self.profile.fileName != profile.fileName or \ not self.profile.isSame(profile): self.LoadProfile(profile) self.DrawLUT() else: self.LoadProfile(None) self.DrawLUT() def lookup_tone_response_curves(self, intent="r"): """ Lookup Y -> RGB tone values through TRC tags or LUT """ mult = 2 size = 256 * mult # Final number of coordinates if (intent == "r" and (not "B2A0" in self.profile.tags or not self.toggle_clut.GetValue()) and isinstance(self.profile.tags.get("rTRC"), ICCP.CurveType) and isinstance(self.profile.tags.get("gTRC"), ICCP.CurveType) and isinstance(self.profile.tags.get("bTRC"), ICCP.CurveType)): #self.rTRC = self.profile.tags.rTRC #self.gTRC = self.profile.tags.gTRC #self.bTRC = self.profile.tags.bTRC #return # Use TRC tags if no LUT if (len(self.profile.tags.rTRC) == 1 and len(self.profile.tags.gTRC) == 1 and len(self.profile.tags.bTRC) == 1): # Gamma, convert to curves trc = {"rTRC": [], "gTRC": [], "bTRC": []} for sig in ("rTRC", "gTRC", "bTRC"): gamma = self.profile.tags[sig][0] setattr(self, sig, CoordinateType()) for i in xrange(256): trc[sig].append(math.pow(i / 255.0, gamma) * 65535) else: trc = {"rTRC": self.profile.tags.rTRC, "gTRC": self.profile.tags.gTRC, "bTRC": self.profile.tags.bTRC} # Curves for sig in ("rTRC", "gTRC", "bTRC"): x, xp, y, yp = [], [], [], [] # First, get actual values for i, Y in enumerate(trc[sig]): xp.append(i / (len(trc[sig]) - 1.0) * 255) yp.append(Y / 65535.0 * 100) # Second, interpolate to given size and use the same Y axis # for all channels for i in xrange(size): x.append(i / (size - 1.0) * 255) y.append(colormath.Lab2XYZ(i / (size - 1.0) * 100, 0, 0)[1] * 100) yi = interp(x, xp, yp) xi = interp(y, yi, x) setattr(self, sig, CoordinateType()) for v, Y in zip(xi, y): if Y <= yp[0]: Y = yp[0] getattr(self, sig).append([Y, v]) return profile = self.profile channels = {'XYZ': 3, 'Lab': 3, 'Luv': 3, 'YCbr': 3, 'Yxy': 3, 'RGB': 3, 'GRAY': 1, 'HSV': 3, 'HLS': 3, 'CMYK': 4, 'CMY': 3, '2CLR': 2, '3CLR': 3, '4CLR': 4, '5CLR': 5, '6CLR': 6, '7CLR': 7, '8CLR': 8, '9CLR': 9, 'ACLR': 10, 'BCLR': 11, 'CCLR': 12, 'DCLR': 13, 'ECLR': 14, 'FCLR': 15}.get(profile.colorSpace) if not channels: raise Error(lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace))) # Setup xicclu xicclu = get_argyll_util("xicclu") if not xicclu: return xicclu = xicclu.encode(fs_enc) cwd = self.client.worker.create_tempdir() if isinstance(cwd, Exception): raise cwd if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None # Prepare profile profile.write(os.path.join(cwd, "profile.icc")) # Prepare input Lab values XYZ_triplets = [] Lab_triplets = [] for i in xrange(0, size): if intent == "a": # Experimental - basically this makes the resulting # response match relative colorimetric X, Y, Z = colormath.Lab2XYZ(i * (100.0 / (size - 1)), 0, 0) L, a, b = colormath.XYZ2Lab(*[v * 100 for v in colormath.adapt(X, Y, Z, whitepoint_destination=profile.tags.wtpt.values())]) else: a = b = 0 Lab_triplets.append(" ".join([str(i * (100.0 / (size - 1))), str(a), str(b)])) # Lookup Lab -> RGB values through 'input' profile using xicclu stderr = tempfile.SpooledTemporaryFile() p = sp.Popen([xicclu, "-fb", "-i" + intent, "-pl", "profile.icc"], stdin=sp.PIPE, stdout=sp.PIPE, stderr=stderr, cwd=cwd.encode(fs_enc), startupinfo=startupinfo) self.client.worker.subprocess = p if p.poll() not in (0, None): stderr.seek(0) raise Error(stderr.read().strip()) try: odata = p.communicate("\n".join(Lab_triplets))[0].splitlines() except IOError: stderr.seek(0) raise Error(stderr.read().strip()) if p.wait() != 0: raise IOError(''.join(odata)) stderr.close() # Remove temporary files self.client.worker.wrapup(False) rgb_triplets = [] for i, line in enumerate(odata): line = "".join(line.strip().split("->")).split() rgb_triplet = [float(n) for n in line[channels + 2:channels + 5]] rgb_triplets.append(rgb_triplet) self.rTRC = CoordinateType() self.gTRC = CoordinateType() self.bTRC = CoordinateType() for j, rgb in enumerate(rgb_triplets): for i, v in enumerate(rgb): v *= 255 y = colormath.Lab2XYZ(float(Lab_triplets[j].split()[0]), 0, 0)[1] * 100 if i == 0: self.rTRC.append([y, v]) elif i == 1: self.gTRC.append([y, v]) elif i == 2: self.bTRC.append([y, v]) def move_handler(self, event): if not self.IsShownOnScreen(): return display_no, geometry, client_area = self.get_display() if display_no != self.display_no: self.display_no = display_no # Translate from wx display index to Argyll display index geometry = "%i, %i, %ix%i" % tuple(geometry) for i, display in enumerate(getcfg("displays").split(os.pathsep)): if display.find("@ " + geometry) > -1: if debug: safe_print("[D] Found display %s at index %i" % (geometry, i)) # Save Argyll display index to configuration setcfg("display.number", i + 1) self.load_lut(get_display_profile(i)) break event.Skip() def reload_vcgt_handler(self, event): cmd, args = self.worker.prepare_dispwin(True) if isinstance(cmd, Exception): show_result_dialog(cmd, self) elif cmd: result = self.worker.exec_cmd(cmd, args, capture_output=True, skip_scripts=True) if isinstance(result, Exception): show_result_dialog(result, self) elif not result: show_result_dialog(Error("".join(self.worker.errors)), self) else: self.load_lut(get_display_profile()) def LoadProfile(self, profile): if not profile: profile = ICCP.ICCProfile() profile._data = "\0" * 128 profile._tags.desc = ICCP.TextDescriptionType("", "desc") profile.size = len(profile.data) profile.is_loaded = True elif not isinstance(profile, ICCP.ICCProfile): profile = ICCP.ICCProfile(profile) self.profile = profile self.rTRC = profile.tags.get("rTRC") self.gTRC = profile.tags.get("gTRC") self.bTRC = profile.tags.get("bTRC") self.trc = None curves = [] curves.append(lang.getstr('vcgt')) if ((isinstance(self.rTRC, ICCP.CurveType) and isinstance(self.gTRC, ICCP.CurveType) and isinstance(self.bTRC, ICCP.CurveType)) or ("B2A0" in profile.tags and profile.colorSpace == "RGB")): try: self.lookup_tone_response_curves() except Exception, exception: show_result_dialog(exception, self) else: curves.append(lang.getstr('[rgb]TRC')) selection = self.plot_mode_select.GetSelection() if curves and (selection < 0 or selection > len(curves) - 1): selection = 0 self.plot_mode_select.SetItems(curves) self.plot_mode_select.Enable(len(curves) > 1) self.plot_mode_select.SetSelection(selection) self.cbox_sizer.Layout() self.box_sizer.Layout() def add_tone_values(self, legend): if not self.profile: return colorants = legend[0] if (self.plot_mode_select.GetSelection() == 0 and 'vcgt' in self.profile.tags): if 'R' in colorants or 'G' in colorants or 'B' in colorants: legend.append(lang.getstr("tone_values")) if '=' in colorants: unique = [] if 'R' in colorants: unique.append(self.client.r_unique) if 'G' in colorants: unique.append(self.client.g_unique) if 'B' in colorants: unique.append(self.client.b_unique) unique = min(unique) legend[-1] += " %.1f%% (%i/%i) @ 8 Bit" % (unique / (self.client.entryCount / 100.0), unique, self.client.entryCount) else: if 'R' in colorants: legend[-1] += " %.1f%% (%i/%i) @ 8 Bit" % (self.client.r_unique / (self.client.entryCount / 100.0), self.client.r_unique, self.client.entryCount) if 'G' in colorants: legend[-1] += " %.1f%% (%i/%i) @ 8 Bit" % (self.client.g_unique / (self.client.entryCount / 100.0), self.client.g_unique, self.client.entryCount) if 'B' in colorants: legend[-1] += " %.1f%% (%i/%i) @ 8 Bit" % (self.client.b_unique / (self.client.entryCount / 100.0), self.client.b_unique, self.client.entryCount) unique = [] unique.append(self.client.r_unique) unique.append(self.client.g_unique) unique.append(self.client.b_unique) if not 0 in unique: unique = min(unique) legend[-1] += ", %s %.1f%% (%i/%i) @ 8 Bit" % (lang.getstr("grayscale"), unique / (self.client.entryCount / 100.0), unique, self.client.entryCount) elif (self.plot_mode_select.GetSelection() == 1 and isinstance(self.rTRC, (ICCP.CurveType, CoordinateType)) and len(self.rTRC) > 1 and isinstance(self.gTRC, (ICCP.CurveType, CoordinateType)) and len(self.gTRC) > 1 and isinstance(self.bTRC, (ICCP.CurveType, CoordinateType)) and len(self.bTRC) > 1): transfer_function = None if (not getattr(self, "trc", None) and len(self.rTRC) == len(self.gTRC) == len(self.bTRC)): if isinstance(self.rTRC, ICCP.CurveType): self.trc = ICCP.CurveType() for i in xrange(len(self.rTRC)): self.trc.append(int(round((self.rTRC[i] + self.gTRC[i] + self.bTRC[i]) / 3.0))) else: self.trc = CoordinateType() for i in xrange(len(self.rTRC)): self.trc.append([(self.rTRC[i][0] + self.gTRC[i][0] + self.bTRC[i][0]) / 3.0, (self.rTRC[i][1] + self.gTRC[i][1] + self.bTRC[i][1]) / 3.0]) if getattr(self, "trc", None): transfer_function = self.trc.get_transfer_function(slice=(0.00, 1.00)) #if "R" in colorants and "G" in colorants and "B" in colorants: #if self.profile.tags.rTRC == self.profile.tags.gTRC == self.profile.tags.bTRC: #transfer_function = self.profile.tags.rTRC.get_transfer_function() #elif ("R" in colorants and #(not "G" in colorants or #self.profile.tags.rTRC == self.profile.tags.gTRC) and #(not "B" in colorants or #self.profile.tags.rTRC == self.profile.tags.bTRC)): #transfer_function = self.profile.tags.rTRC.get_transfer_function() #elif ("G" in colorants and #(not "R" in colorants or #self.profile.tags.gTRC == self.profile.tags.rTRC) and #(not "B" in colorants or #self.profile.tags.gTRC == self.profile.tags.bTRC)): #transfer_function = self.profile.tags.gTRC.get_transfer_function() #elif ("B" in colorants and #(not "G" in colorants or #self.profile.tags.bTRC == self.profile.tags.gTRC) and #(not "R" in colorants or #self.profile.tags.bTRC == self.profile.tags.rTRC)): #transfer_function = self.profile.tags.bTRC.get_transfer_function() if transfer_function and transfer_function[1] >= .95: if self.rTRC == self.gTRC == self.bTRC: label = lang.getstr("rgb.trc") else: label = lang.getstr("rgb.trc.averaged") if round(transfer_function[1], 2) == 1.0: value = u"%s" % (transfer_function[0][0]) else: value = u"≈ %s (Δ %.2f%%)" % (transfer_function[0][0], 100 - transfer_function[1] * 100) legend.append(" ".join([label, value])) def DrawLUT(self, event=None): self.SetStatusText('') self.Freeze() curves = None if self.profile: yLabel = [] if self.toggle_red.GetValue(): yLabel.append("R") if self.toggle_green.GetValue(): yLabel.append("G") if self.toggle_blue.GetValue(): yLabel.append("B") if self.plot_mode_select.GetSelection() == 0: if 'vcgt' in self.profile.tags: curves = self.profile.tags['vcgt'] else: curves = None self.xLabel = "".join(yLabel) self.yLabel = "".join(yLabel) elif (self.plot_mode_select.GetSelection() == 1 and isinstance(self.rTRC, (ICCP.CurveType, CoordinateType)) and isinstance(self.gTRC, (ICCP.CurveType, CoordinateType)) and isinstance(self.bTRC, (ICCP.CurveType, CoordinateType))): if (len(self.rTRC) == 1 and len(self.gTRC) == 1 and len(self.bTRC) == 1): # gamma curves = { 'redMin': 0.0, 'redGamma': self.rTRC[0], 'redMax': 1.0, 'greenMin': 0.0, 'greenGamma': self.gTRC[0], 'greenMax': 1.0, 'blueMin': 0.0, 'blueGamma': self.bTRC[0], 'blueMax': 1.0 } else: # curves curves = { 'data': [self.rTRC, self.gTRC, self.bTRC], 'entryCount': len(self.rTRC), 'entrySize': 2 } if self.show_as_L.GetValue(): self.xLabel = "L*" else: self.xLabel = "Y" self.yLabel = "".join(yLabel) self.toggle_red.Enable(bool(curves)) self.toggle_green.Enable(bool(curves)) self.toggle_blue.Enable(bool(curves)) self.show_as_L.Enable(bool(curves)) self.show_as_L.Show(self.plot_mode_select.GetSelection() != 0) self.toggle_clut.Show(self.plot_mode_select.GetSelection() == 1 and "B2A0" in self.profile.tags and isinstance(self.profile.tags.get("rTRC"), ICCP.CurveType) and isinstance(self.profile.tags.get("gTRC"), ICCP.CurveType) and isinstance(self.profile.tags.get("bTRC"), ICCP.CurveType)) self.save_plot_btn.Enable(bool(curves)) if hasattr(self, "reload_vcgt_btn"): self.reload_vcgt_btn.Enable(not(self.plot_mode_select.GetSelection()) and bool(self.profile)) self.reload_vcgt_btn.Show(not(self.plot_mode_select.GetSelection())) if hasattr(self, "apply_bpc_btn"): enable_bpc = (not(self.plot_mode_select.GetSelection()) and bool(self.profile) and "vcgt" in self.profile.tags) if enable_bpc: values = self.profile.tags.vcgt.getNormalizedValues() self.apply_bpc_btn.Enable(enable_bpc and values[0] != (0, 0, 0)) self.apply_bpc_btn.Show(not(self.plot_mode_select.GetSelection())) if hasattr(self, "install_vcgt_btn"): self.install_vcgt_btn.Enable(not(self.plot_mode_select.GetSelection()) and bool(self.profile) and "vcgt" in self.profile.tags) self.install_vcgt_btn.Show(not(self.plot_mode_select.GetSelection())) if hasattr(self, "save_vcgt_btn"): self.save_vcgt_btn.Enable(not(self.plot_mode_select.GetSelection()) and bool(self.profile) and "vcgt" in self.profile.tags) self.save_vcgt_btn.Show(not(self.plot_mode_select.GetSelection())) self.show_as_L.GetContainingSizer().Layout() if hasattr(self, "show_actual_lut_cb"): self.show_actual_lut_cb.Show(self.plot_mode_select.GetSelection() == 0) if hasattr(self, "cbox_sizer"): self.cbox_sizer.Layout() if hasattr(self, "box_sizer"): self.box_sizer.Layout() if self.client.last_PointLabel != None: pointXY = self.client.last_PointLabel["pointXY"] self.client._drawPointLabel(self.client.last_PointLabel) #erase old self.client.last_PointLabel = None else: pointXY = (127.5, 127.5) self.client.DrawLUT(curves, title=self.profile.getDescription() if self.profile else None, xLabel=self.xLabel, yLabel=self.yLabel, r=self.toggle_red.GetValue() if hasattr(self, "toggle_red") else False, g=self.toggle_green.GetValue() if hasattr(self, "toggle_green") else False, b=self.toggle_blue.GetValue() if hasattr(self, "toggle_blue") else False) self.Thaw() wx.CallLater(125, self.UpdatePointLabel, pointXY) def OnClose(self, event): config.writecfg() if self.worker.tempdir and os.path.isdir(self.worker.tempdir): self.worker.wrapup(False) wx.GetApp().ExitMainLoop() def OnMotion(self, event): if isinstance(event, wx.MouseEvent): xy = self.client._getXY(event) else: xy = event self.UpdatePointLabel(xy) if isinstance(event, wx.MouseEvent): event.Skip() # Go to next handler def OnMove(self, event=None): if self.IsShownOnScreen() and not \ self.IsMaximized() and not self.IsIconized(): x, y = self.GetScreenPosition() setcfg("position.lut_viewer.x", x) setcfg("position.lut_viewer.y", y) if event: event.Skip() def OnSize(self, event=None): if self.IsShownOnScreen() and not \ self.IsMaximized() and not self.IsIconized(): w, h = self.GetSize() setcfg("size.lut_viewer.w", w) setcfg("size.lut_viewer.h", h) if event: event.Skip() def SaveFile(self, event=None): """Saves the file to the type specified in the extension. If no file name is specified a dialog box is provided. Returns True if sucessful, otherwise False. .bmp Save a Windows bitmap file. .xbm Save an X bitmap file. .xpm Save an XPM bitmap file. .png Save a Portable Network Graphics file. .jpg Save a Joint Photographic Experts Group file. """ fileName = " ".join([self.plot_mode_select.GetStringSelection(), os.path.basename(os.path.splitext(self.profile.fileName or lang.getstr("unnamed"))[0])]) if (event and hasattr(self, "save_vcgt_btn") and event.GetId() == self.save_vcgt_btn.GetId()): extensions = {"cal": 1} else: extensions = { "bmp": wx.BITMAP_TYPE_BMP, # Save a Windows bitmap file. "xbm": wx.BITMAP_TYPE_XBM, # Save an X bitmap file. "xpm": wx.BITMAP_TYPE_XPM, # Save an XPM bitmap file. "jpg": wx.BITMAP_TYPE_JPEG, # Save a JPG file. "png": wx.BITMAP_TYPE_PNG, # Save a PNG file. } fType = fileName[-3:].lower() dlg1 = None while fType not in extensions: if dlg1: # FileDialog exists: Check for extension InfoDialog(self, msg=lang.getstr("error.file_type_unsupported"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) else: # FileDialog doesn't exist: just check one dlg1 = wx.FileDialog( self, lang.getstr("save_as"), ".", fileName, "|".join(["%s (*.%s)|*.%s" % (ext.upper(), ext, ext) for ext in extensions.keys()]), wx.SAVE|wx.OVERWRITE_PROMPT ) if dlg1.ShowModal() == wx.ID_OK: fileName = dlg1.GetPath() if not waccess(fileName, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", fileName)), self) return fType = fileName[-3:].lower() else: # exit without saving dlg1.Destroy() return False if dlg1: dlg1.Destroy() # Save Bitmap if (event and hasattr(self, "save_vcgt_btn") and event.GetId() == self.save_vcgt_btn.GetId()): res = vcgt_to_cal(self.profile) res.write(fileName) else: res= self.client._Buffer.SaveFile(fileName, extensions.get(fType, ".png")) return res def UpdatePointLabel(self, xy): if self.client.GetEnablePointLabel(): # Show closest point (when enbled) # Make up dict with info for the point label dlst = self.client.GetClosestPoint(xy, pointScaled=True) if dlst != []: curveNum, legend, pIndex, pointXY, scaledXY, distance = dlst legend = legend.split(", ") R, G, B = (self.client.point_grid[0].get(pointXY[0], 0 if self.toggle_red.GetValue() else None), self.client.point_grid[1].get(pointXY[0], 0 if self.toggle_green.GetValue() else None), self.client.point_grid[2].get(pointXY[0], 0 if self.toggle_blue.GetValue() else None)) if (self.plot_mode_select.GetSelection() == 0 or R == G == B or ((R == G or G == B or R == B) and None in (R, G ,B))): rgb = "" else: rgb = legend[0] + " " if self.plot_mode_select.GetSelection() == 1: joiner = u" \u2192 " if self.show_as_L.GetValue(): format = "L* %.4f", "%s %.2f" else: format = "Y %.4f", "%s %.2f" axis_y = 100.0 if R == G == B or ((R == G or G == B or R == B) and None in (R, G ,B)): #if R is None: RGB = " ".join(["=".join(["%s" % v for v, s in filter(lambda v: v[1] is not None, (("R", R), ("G", G), ("B", B)))]), "%.2f" % pointXY[1]]) #else: #RGB = "R=G=B %.2f" % R else: RGB = " ".join([format[1] % (v, s) for v, s in filter(lambda v: v[1] is not None, (("R", R), ("G", G), ("B", B)))]) legend[0] = joiner.join([format[0] % pointXY[0], RGB]) pointXY = pointXY[1], pointXY[0] else: joiner = u" \u2192 " format = "%.2f", "%.2f" axis_y = 255.0 legend[0] += " " + joiner.join([format[i] % point for i, point in enumerate(pointXY)]) if (len(legend) == 1 and pointXY[0] > 0 and pointXY[0] < 255 and pointXY[1] > 0): y = pointXY[1] if (self.plot_mode_select.GetSelection() == 1 and self.show_as_L.GetValue()): y = colormath.Lab2XYZ(y, 0, 0)[1] * 100 legend.append(rgb + "Gamma %.2f" % (math.log(y / axis_y) / math.log(pointXY[0] / 255.0))) self.add_tone_values(legend) self.SetStatusText(", ".join(legend)) # Make up dictionary to pass to DrawPointLabel mDataDict= {"curveNum": curveNum, "legend": legend, "pIndex": pIndex, "pointXY": pointXY, "scaledXY": scaledXY} # Pass dict to update the point label self.client.UpdatePointLabel(mDataDict) def update_controls(self): self.show_actual_lut_cb.Enable((self.worker.argyll_version[0:3] > [1, 1, 0] or (self.worker.argyll_version[0:3] == [1, 1, 0] and not "Beta" in self.worker.argyll_version_string)) and not config.get_display_name() in ("Web", "Untethered")) self.show_actual_lut_cb.SetValue(bool(getcfg("lut_viewer.show_actual_lut")) and not config.get_display_name() in ("Web", "Untethered")) @property def worker(self): return self.client.worker class LUTViewer(wx.App): def OnInit(self): self.frame = LUTFrame(None, -1) self.frame.Bind(wx.EVT_CLOSE, self.frame.OnClose, self.frame) return True def main(profile=None): config.initcfg() lang.init() lang.update_defaults() app = LUTViewer(0) app.frame.worker.enumerate_displays_and_ports(check_lut_access=False, enumerate_ports=False) app.frame.Bind(wx.EVT_MOVE, app.frame.move_handler, app.frame) app.frame.Show(True) app.frame.update_controls() if profile: app.frame.drop_handler(profile) else: app.frame.load_lut(get_display_profile()) app.MainLoop() if __name__ == '__main__': main(*sys.argv[1:2])dispcalGUI-1.7.1.6/dispcalGUI/wxMeasureFrame.py000644 000765 000000 00000051154 12266411534 021121 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import re import sys import config import localization as lang from config import (btn_width_correction, defaults, getcfg, geticon, get_bitmap_as_icon, get_data_path, get_display_number, get_display_rects, scale_adjustment_factor, setcfg, writecfg) from debughelpers import handle_error from log import safe_print from meta import name as appname from options import debug from util_list import floatlist, strlist from util_str import safe_unicode from wxaddons import CustomEvent, wx from wxwindows import ConfirmDialog, InfoDialog, InvincibleFrame try: import RealDisplaySizeMM as RDSMM except ImportError, exception: RDSMM = None handle_error(u"Error - couldn't import RealDisplaySizeMM: " + safe_unicode(exception), silent=True) def get_default_size(): """ Get and return the default size for the window in pixels. The default size is always equivalent to 100 x 100 mm according to the display's size as returned by the RealDisplaySizeMM function, which uses the same code as Argyll to determine that size. This function is used internally. """ display_sizes = [] display_sizes_mm = [] for display_no in xrange(len(getcfg("displays").split(os.pathsep))): display_size = wx.Display(get_display_number(display_no)).Geometry[2:] display_size_mm = [] if RDSMM: try: display_size_mm = RDSMM.RealDisplaySizeMM(display_no) except Exception, exception: handle_error(u"Error - RealDisplaySizeMM() failed: " + safe_unicode(exception), silent=True) else: display_size_mm = floatlist(display_size_mm) if debug: safe_print("[D] display_size_mm:", display_size_mm) if not len(display_size_mm) or 0 in display_size_mm: if sys.platform == "darwin": ppi_def = 72.0 else: ppi_def = 96.0 method = 1 if method == 0: # use configurable screen diagonal inch = 20.0 mm = inch * 25.4 f = mm / math.sqrt(math.pow(display_size[0], 2) + \ math.pow(display_size[1], 2)) w_mm = math.sqrt(math.pow(mm, 2) - \ math.pow(display_size[1] * f, 2)) h_mm = math.sqrt(math.pow(mm, 2) - \ math.pow(display_size[0] * f, 2)) display_size_mm = w_mm, h_mm elif method == 1: # use the first display display_size_1st = wx.DisplaySize() display_size_mm = floatlist(wx.DisplaySizeMM()) if 0 in display_size_mm: # bogus display_size_mm = [display_size_1st[0] / ppi_def * 25.4, display_size_1st[1] / ppi_def * 25.4] if display_no > 0: display_size_mm[0] = display_size[0] / ( display_size_1st[0] / display_size_mm[0]) display_size_mm[1] = display_size[1] / ( display_size_1st[1] / display_size_mm[1]) else: # use assumed ppi display_size_mm = (display_size[0] / ppi_def * 25.4, display_size[1] / ppi_def * 25.4) display_sizes += [display_size] display_sizes_mm += [display_size_mm] if sum(mm[0] for mm in display_sizes_mm) / \ len(display_sizes_mm) == display_sizes_mm[0][0] and \ sum(mm[1] for mm in display_sizes_mm) / \ len(display_sizes_mm) == display_sizes_mm[0][1]: # display_size_mm is the same for all screens, use the 1st one display_size = display_sizes[0] display_size_mm = display_sizes_mm[0] else: if getcfg("display_lut.link"): display_no = getcfg("display.number") - 1 else: display_no = getcfg("display_lut.number") - 1 display_size = display_sizes[display_no] display_size_mm = display_sizes_mm[display_no] px_per_mm = (display_size[0] / display_size_mm[0], display_size[1] / display_size_mm[1]) if debug: safe_print("[D] H px_per_mm:", px_per_mm[0]) safe_print("[D] V px_per_mm:", px_per_mm[1]) return round(100.0 * max(px_per_mm)) class MeasureFrame(InvincibleFrame): """ A rectangular window to set the measure area size for dispcal/dispread. """ exitcode = 0 def __init__(self, parent=None, id=-1): InvincibleFrame.__init__(self, parent, id, lang.getstr("measureframe.title"), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX)) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.Bind(wx.EVT_CLOSE, self.close_handler, self) self.Bind(wx.EVT_MOVE, self.move_handler, self) self.Bind(wx.EVT_SIZE, self.size_handler, self) self.panel = wx.Panel(self, -1) self.sizer = wx.GridSizer(3, 1) self.panel.SetSizer(self.sizer) self.hsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(self.hsizer, flag=wx.ALIGN_CENTER_HORIZONTAL | wx.ALL | wx.ALIGN_TOP, border=10) self.zoommaxbutton = wx.BitmapButton(self.panel, -1, geticon(32, "zoom-best-fit"), style=wx.NO_BORDER) self.Bind(wx.EVT_BUTTON, self.zoommax_handler, self.zoommaxbutton) self.hsizer.Add(self.zoommaxbutton, flag=wx.ALIGN_CENTER) self.zoommaxbutton.SetToolTipString(lang.getstr("measureframe.zoommax")) self.hsizer.Add((2, 1)) self.zoominbutton = wx.BitmapButton(self.panel, -1, geticon(32, "zoom-in"), style=wx.NO_BORDER) self.Bind(wx.EVT_BUTTON, self.zoomin_handler, self.zoominbutton) self.hsizer.Add(self.zoominbutton, flag=wx.ALIGN_CENTER) self.zoominbutton.SetToolTipString(lang.getstr("measureframe.zoomin")) self.hsizer.Add((2, 1)) self.zoomnormalbutton = wx.BitmapButton(self.panel, -1, geticon(32, "zoom-original"), style=wx.NO_BORDER) self.Bind(wx.EVT_BUTTON, self.zoomnormal_handler, self.zoomnormalbutton) self.hsizer.Add(self.zoomnormalbutton, flag=wx.ALIGN_CENTER) self.zoomnormalbutton.SetToolTipString(lang.getstr("measureframe." "zoomnormal")) self.hsizer.Add((2, 1)) self.zoomoutbutton = wx.BitmapButton(self.panel, -1, geticon(32, "zoom-out"), style=wx.NO_BORDER) self.Bind(wx.EVT_BUTTON, self.zoomout_handler, self.zoomoutbutton) self.hsizer.Add(self.zoomoutbutton, flag=wx.ALIGN_CENTER) self.zoomoutbutton.SetToolTipString(lang.getstr("measureframe.zoomout")) self.centerbutton = wx.BitmapButton(self.panel, -1, geticon(32, "window-center"), style=wx.NO_BORDER) self.Bind(wx.EVT_BUTTON, self.center_handler, self.centerbutton) self.sizer.Add(self.centerbutton, flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, border=10) self.centerbutton.SetToolTipString(lang.getstr("measureframe.center")) self.vsizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.vsizer, flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL) self.measure_darken_background_cb = wx.CheckBox(self.panel, -1, lang.getstr("measure.darken_background")) self.measure_darken_background_cb.SetValue( bool(int(getcfg("measure.darken_background")))) self.Bind(wx.EVT_CHECKBOX, self.measure_darken_background_ctrl_handler, id=self.measure_darken_background_cb.GetId()) self.vsizer.Add(self.measure_darken_background_cb, flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL | wx.LEFT | wx.RIGHT | wx.TOP, border=10) self.measurebutton = wx.Button(self.panel, -1, lang.getstr("measureframe.measurebutton")) self.Bind(wx.EVT_BUTTON, self.measure_handler, self.measurebutton) self.vsizer.Add(self.measurebutton, flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, border=10) self.measurebutton.SetMaxFontSize(11) self.measurebutton.SetInitialSize((self.measurebutton.GetSize()[0] + btn_width_correction, -1)) min_size = max(self.sizer.GetMinSize()) # Make sure the min size is quadratic and large enough to accomodate # all controls self.SetMinSize((min_size, min_size)) self.SetMaxSize((20000, 20000)) self.display_no = wx.Display.GetFromWindow(self) self.display_rects = get_display_rects() def measure_darken_background_ctrl_handler(self, event): if self.measure_darken_background_cb.GetValue() and \ getcfg("measure.darken_background.show_warning"): dlg = ConfirmDialog(self, msg=lang.getstr("measure.darken_background." "warning"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) chk = wx.CheckBox(dlg, -1, lang.getstr("dialog.do_not_show_again")) dlg.Bind(wx.EVT_CHECKBOX, self.measure_darken_background_warning_handler, id=chk.GetId()) dlg.sizer3.Add(chk, flag=wx.TOP | wx.ALIGN_LEFT, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() rslt = dlg.ShowModal() if rslt == wx.ID_CANCEL: self.measure_darken_background_cb.SetValue(False) setcfg("measure.darken_background", int(self.measure_darken_background_cb.GetValue())) def measure_darken_background_warning_handler(self, event): setcfg("measure.darken_background.show_warning", int(not event.GetEventObject().GetValue())) def info_handler(self, event): InfoDialog(self, msg=lang.getstr("measureframe.info"), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-information"), log=False) def measure_handler(self, event): if self.Parent and hasattr(self.Parent, "call_pending_function"): self.Parent.call_pending_function() else: MeasureFrame.exitcode = 255 self.Close() def Show(self, show=True): if show: self.measure_darken_background_cb.SetValue( bool(int(getcfg("measure.darken_background")))) if self.Parent and hasattr(self.Parent, "display_ctrl"): display_no = self.Parent.display_ctrl.GetSelection() else: display_no = getcfg('display.number') - 1 if display_no < 0 or display_no > wx.Display.GetCount() - 1: display_no = 0 else: display_no = get_display_number(display_no) x, y = wx.Display(display_no).Geometry[:2] self.SetPosition((x, y)) # place measure frame on correct display self.place_n_zoom( *floatlist(getcfg("dimensions.measureframe").split(","))) self.display_no = wx.Display.GetFromWindow(self) elif self.IsShownOnScreen(): setcfg("dimensions.measureframe", self.get_dimensions()) if self.Parent and hasattr(self.Parent, "get_set_display"): self.Parent.get_set_display() wx.CallAfter(wx.Frame.Show, self, show) def Hide(self): self.Show(False) def place_n_zoom(self, x=None, y=None, scale=None): """ Place and scale the window. x, y and scale need to be in Argyll coordinates (0.0...1.0) if given. Without arguments, they are read from the user configuration. """ if debug: safe_print("[D] measureframe.place_n_zoom") if None in (x, y, scale): cur_x, cur_y, cur_scale = floatlist(self.get_dimensions().split(",")) if x is None: x = cur_x if y is None: y = cur_y if scale is None: scale = cur_scale if scale > 50.0: # Argyll max scale = 50 if debug: safe_print(" x:", x) if debug: safe_print(" y:", y) if debug: safe_print(" scale:", scale) if debug: safe_print("[D] scale_adjustment_factor:", scale_adjustment_factor) scale /= scale_adjustment_factor if debug: safe_print("[D] scale / scale_adjustment_factor:", scale) display = self.get_display(getcfg("display.number") - 1) display_client_rect = display[2] if debug: safe_print("[D] display_client_rect:", display_client_rect) display_client_size = display_client_rect[2:] if debug: safe_print("[D] display_client_size:", display_client_size) measureframe_min_size = list(self.GetMinSize()) if debug: safe_print("[D] measureframe_min_size:", measureframe_min_size) default_measureframe_size = get_default_size() size = [min(display_client_size[0], default_measureframe_size * scale), min(display_client_size[1], default_measureframe_size * scale)] if measureframe_min_size[0] > size[0]: size = measureframe_min_size if size[0] > display_client_size[0]: size[0] = display_client_size[0] if size[1] > display_client_size[1]: size[1] = display_client_size[1] if max(size) >= max(display_client_size): scale = 50 if debug: safe_print("[D] measureframe_size:", size) self.SetSize(size) display_rect = display[1] if debug: safe_print("[D] display_rect:", display_rect) display_size = display_rect[2:] if debug: safe_print("[D] display_size:", display_size) if sys.platform in ("darwin", "win32"): titlebar = 0 # size already includes window decorations else: titlebar = 25 # assume titlebar height of 25px measureframe_pos = [display_rect[0] + round((display_size[0] - size[0]) * x), display_rect[1] + round((display_size[1] - size[1]) * y) - titlebar] if measureframe_pos[0] < display_client_rect[0]: measureframe_pos[0] = display_client_rect[0] if measureframe_pos[1] < display_client_rect[1]: measureframe_pos[1] = display_client_rect[1] if debug: safe_print("[D] measureframe_pos:", measureframe_pos) setcfg("dimensions.measureframe", ",".join(strlist((x, y, scale)))) wx.CallAfter(self.SetPosition, measureframe_pos) def zoomin_handler(self, event): if debug: safe_print("[D] measureframe_zoomin_handler") # We can't use self.get_dimensions() here because if we are near # fullscreen, next magnification step will be larger than normal display_size = self.get_display()[1][2:] default_measureframe_size = get_default_size() size = floatlist(self.GetSize()) x, y = None, None self.place_n_zoom(x, y, scale=(display_size[0] / default_measureframe_size) / (display_size[0] / size[0]) + .125) def zoomout_handler(self, event): if debug: safe_print("[D] measureframe_zoomout_handler") # We can't use self.get_dimensions() here because if we are # fullscreen, scale will be 50, thus changes won't be visible quickly display_size = self.get_display()[1][2:] default_measureframe_size = get_default_size() size = floatlist(self.GetSize()) x, y = None, None self.place_n_zoom(x, y, scale=(display_size[0] / default_measureframe_size) / (display_size[0] / size[0]) - .125) def zoomnormal_handler(self, event): if debug: safe_print("[D] measureframe_zoomnormal_handler") x, y = None, None scale = floatlist(defaults["dimensions.measureframe"].split(","))[2] self.place_n_zoom(x, y, scale=scale) def zoommax_handler(self, event): if debug: safe_print("[D] measureframe_zoommax_handler") display_client_rect = self.get_display()[2] if debug: safe_print("[D] display_client_rect:", display_client_rect) display_client_size = display_client_rect[2:] if debug: safe_print("[D] display_client_size:", display_client_size) size = self.GetSize() if debug: safe_print(" size:", size) if max(size) >= max(display_client_size) - 50: dim = getcfg("dimensions.measureframe.unzoomed") self.place_n_zoom(*floatlist(dim.split(","))) else: setcfg("dimensions.measureframe.unzoomed", self.get_dimensions()) self.place_n_zoom(x=.5, y=.5, scale=50.0) def center_handler(self, event): if debug: safe_print("[D] measureframe_center_handler") x, y = floatlist(defaults["dimensions.measureframe"].split(","))[:2] self.place_n_zoom(x, y) def close_handler(self, event): if debug: safe_print("[D] measureframe_close_handler") self.Hide() if self.Parent: self.Parent.Show() if getattr(self.Parent, "restore_testchart"): self.Parent.restore_testchart() else: writecfg() self.Destroy() def get_display(self, display_no=None): """ Get the display number, geometry and client area, taking into account separate X screens, TwinView and similar """ if wx.Display.GetCount() == 1 and len(self.display_rects) > 1: # Separate X screens, TwinView or similar display = wx.Display(0) geometry = display.Geometry union = wx.Rect() xy = [] for rect in self.display_rects: if rect[:2] in xy or rect[2:] == geometry[2:]: # Overlapping x y coordinates or screen filling whole # reported geometry, so assume separate X screens union = None break xy.append(rect[:2]) union = union.Union(rect) if union == geometry: # Assume TwinView or similar where Argyll enumerates 1+n # displays but wx only 'sees' one that is the union of them framerect = self.Rect if display_no is not None: geometry = self.display_rects[display_no] else: display_no = 0 for i, coord in enumerate(framerect[:2]): if coord < 0: framerect[i] = 0 elif coord > geometry[i + 2]: framerect[i] = geometry[i] for i, display_rect in enumerate(self.display_rects): if display_rect.Contains(framerect[:2]): display_no = i geometry = display_rect break elif display_no is None: # Assume separate X screens display_no = 0 client_rect = wx.Rect(*tuple(geometry)).Intersect(display.GetRealClientArea()) else: display_no = wx.Display.GetFromWindow(self) display = self.GetDisplay() geometry = display.Geometry client_rect = display.GetRealClientArea() return display_no, geometry, client_rect def move_handler(self, event): if not self.IsShownOnScreen(): return display_no, geometry, client_area = self.get_display() if display_no != self.display_no: self.display_no = display_no # Translate from wx display index to Argyll display index geometry = "%i, %i, %ix%i" % tuple(geometry) for i, display in enumerate(getcfg("displays").split(os.pathsep)): if display.find("@ " + geometry) > -1: if debug: safe_print("[D] Found display %s at index %i" % (geometry, i)) # Save Argyll display index to configuration setcfg("display.number", i + 1) break def size_handler(self, event): if debug: safe_print("[D] measureframe_size_handler") display_client_size = self.get_display()[2][2:] size = self.GetSize() if debug: safe_print("[D] display_client_size:", display_client_size) safe_print("[D] measureframe_size:", size) measureframe_pos = self.GetScreenPosition() safe_print("[D] measureframe_pos:", measureframe_pos) if min(size) < min(display_client_size) - 50 and \ size[0] != size[1]: if sys.platform != "win32": wx.CallAfter(self.SetSize, (min(size), min(size))) else: self.SetSize((min(size), min(size))) if debug: wx.CallAfter(self.get_dimensions) event.Skip() def get_dimensions(self): """ Calculate and return the relative dimensions from the pixel values. Returns x, y and scale in Argyll coordinates (0.0...1.0). """ if debug: safe_print("[D] measureframe.get_dimensions") display = self.get_display() display_rect = display[1] display_size = display_rect[2:] display_client_rect = display[2] display_client_size = display_client_rect[2:] if debug: safe_print("[D] display_size:", display_size) if debug: safe_print("[D] display_client_size:", display_client_size) default_measureframe_size = get_default_size() if debug: safe_print("[D] default_measureframe_size:", default_measureframe_size) measureframe_pos = floatlist(self.GetScreenPosition()) measureframe_pos[0] -= display_rect[0] measureframe_pos[1] -= display_rect[1] if debug: safe_print("[D] measureframe_pos:", measureframe_pos) size = floatlist(self.GetSize()) if debug: safe_print(" size:", size) if max(size) >= max(display_client_size) - 50: # Fullscreen? scale = 50.0 # Argyll max is 50 measureframe_pos = [.5, .5] else: scale = (display_size[0] / default_measureframe_size) / \ (display_size[0] / size[0]) if debug: safe_print("[D] scale:", scale) if debug: safe_print("[D] scale_adjustment_factor:", scale_adjustment_factor) scale *= scale_adjustment_factor if size[0] >= display_client_size[0]: measureframe_pos[0] = .5 elif measureframe_pos[0] != 0: if display_size[0] - size[0] < measureframe_pos[0]: measureframe_pos[0] = display_size[0] - size[0] measureframe_pos[0] = 1.0 / ((display_size[0] - size[0]) / (measureframe_pos[0])) if size[1] >= display_client_size[1]: measureframe_pos[1] = .5 elif measureframe_pos[1] != 0: if display_size[1] - size[1] < measureframe_pos[1]: measureframe_pos[1] = display_size[1] - size[1] if sys.platform in ("darwin", "win32"): titlebar = 0 # size already includes window decorations else: titlebar = 25 # assume titlebar height of 25px measureframe_pos[1] = 1.0 / ((display_size[1] - size[1]) / (measureframe_pos[1] + titlebar)) if debug: safe_print("[D] scale:", scale) if debug: safe_print("[D] measureframe_pos:", measureframe_pos) measureframe_dimensions = ",".join(str(max(0, n)) for n in measureframe_pos + [scale]) if debug: safe_print("[D] measureframe_dimensions:", measureframe_dimensions) return measureframe_dimensions def main(): config.initcfg() lang.init() app = wx.App(0) app.measureframe = MeasureFrame() app.measureframe.Show() app.MainLoop() if __name__ == "__main__": main() sys.exit(MeasureFrame.exitcode) dispcalGUI-1.7.1.6/dispcalGUI/wxProfileInfo.py000644 000765 000000 00000131070 12266411534 020755 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import re import subprocess as sp import math import os import sys import tempfile from config import (defaults, fs_enc, get_bitmap_as_icon, get_data_path, get_display_profile, getbitmap, getcfg, geticon, setcfg, writecfg) from meta import name as appname from ordereddict import OrderedDict from util_str import safe_unicode, universal_newlines, wrap from worker import (Error, check_set_argyll_bin, get_argyll_util, show_result_dialog) from wxaddons import get_platform_window_decoration_size, wx from wxenhancedplot import _Numeric from wxLUTViewer import LUTCanvas, LUTFrame from wxwindows import (BitmapBackgroundPanelText, FileDrop, InfoDialog, SimpleBook, TwoWaySplitter) import colormath import config import wxenhancedplot as plot import localization as lang import ICCProfile as ICCP BGCOLOUR = "#333333" FGCOLOUR = "#999999" TEXTCOLOUR = "#333333" if sys.platform == "darwin": FONTSIZE_LARGE = 11 FONTSIZE_MEDIUM = 11 FONTSIZE_SMALL = 10 else: FONTSIZE_LARGE = 10 FONTSIZE_MEDIUM = 8 FONTSIZE_SMALL = 8 class GamutCanvas(LUTCanvas): def __init__(self, *args, **kwargs): LUTCanvas.__init__(self, *args, **kwargs) self.SetEnableTitle(False) self.SetFontSizeAxis(FONTSIZE_SMALL) self.SetFontSizeLegend(FONTSIZE_SMALL) self.spec_x = 8 self.spec_y = 8 self.SetXSpec(self.spec_x) self.SetYSpec(self.spec_y) self.pcs_data = [] self.profiles = {} self.colorspace = "a*b*" self.intent = "" self.reset() self.resetzoom() self.HandCursor = wx.StockCursor(wx.CURSOR_CROSS) self.GrabHandCursor = wx.StockCursor(wx.CURSOR_SIZING) def _DrawCanvas(self, graphics): """ Draw proportionally correct, center and zoom """ w = float(self.GetSize()[0] or 1) h = float(self.GetSize()[1] or 1) if w > 45: w -= 45 if h > 20: h -= 20 ratio = [w / h, h / w] axis_x, axis_y = self.axis, self.axis if ratio[0] > ratio[1]: self.SetXSpec(self.spec_x * ratio[0]) else: self.SetXSpec(self.spec_x) if ratio[0] > 1: axis_x=tuple([v * ratio[0] for v in self.axis]) if ratio[1] > ratio[0]: self.SetYSpec(self.spec_y * ratio[1]) else: self.SetYSpec(self.spec_y) if ratio[1] > 1: axis_y=tuple([v * ratio[1] for v in self.axis]) x, y = self.center_x, self.center_y w = (axis_x[1] - axis_x[0]) * self._zoomfactor h = (axis_y[1] - axis_y[0]) * self._zoomfactor axis_x = (x - w / 2, x + w / 2) axis_y = (y - h / 2, y + h / 2) self.Draw(graphics, axis_x, axis_y) def _set_center(self): """ Set center position from current X and Y axis """ axis_x = self.GetXCurrentRange() axis_y = self.GetYCurrentRange() if axis_x[0] < 0: if axis_x[1] < 0: x = axis_x[0] + (abs(axis_x[0]) - abs(axis_x[1])) / 2.0 else: x = axis_x[0] + (abs(axis_x[1]) + abs(axis_x[0])) / 2.0 else: x = axis_x[0] + (abs(axis_x[1]) - abs(axis_x[0])) / 2.0 if axis_y[0] < 0: if axis_y[1] < 0: y = axis_y[0] + (abs(axis_y[0]) - abs(axis_y[1])) / 2.0 else: y = axis_y[0] + (abs(axis_y[1]) + abs(axis_y[0])) / 2.0 else: y = axis_y[0] + (abs(axis_y[1]) - abs(axis_y[0])) / 2.0 self.center_x, self.center_y = x, y def DrawCanvas(self, title=None, colorspace=None, whitepoint=None, center=False, show_outline=True): if not title: title = "" if colorspace: self.colorspace = colorspace # Defaults poly = plot.PolyLine poly._attributes["width"] = 3 polys = [] if self.colorspace == "xy": self.spec_x = 8 self.spec_y = 8 label_x = "x" label_y = "y" if show_outline: polys.append(plot.PolySpline([(0.173, 0.003), (0.165, 0.010), (0.157, 0.017), (0.144, 0.029), (0.135, 0.039), (0.124, 0.057), (0.109, 0.086), (0.090, 0.131), (0.068, 0.200), (0.045, 0.295), (0.023, 0.413), (0.007, 0.538), (0.003, 0.655), (0.013, 0.750), (0.039, 0.814), (0.074, 0.835), (0.115, 0.827), (0.156, 0.807), (0.194, 0.783), (0.230, 0.755), (0.266, 0.725), (0.303, 0.693), (0.338, 0.660), (0.374, 0.626), (0.513, 0.488), (0.740, 0.260)], colour=wx.Colour(102, 102, 102, 153), width=1.75)) polys.append(plot.PolyLine([(0.173, 0.003), (0.740, 0.260)], colour=wx.Colour(102, 102, 102, 153), width=1.75)) max_x = 0.84 max_y = 0.84 min_x = 0 min_y = 0 step = .1 elif self.colorspace == "u'v'": self.spec_x = 6 self.spec_y = 6 label_x = "u'" label_y = "v'" if show_outline: polys.append(plot.PolySpline([(0.260, 0.018), (0.254, 0.016), (0.232, 0.038), (0.213, 0.059), (0.186, 0.090), (0.142, 0.154), (0.082, 0.272), (0.028, 0.410), (0.005, 0.501), (0.001, 0.543), (0.002, 0.559), (0.006, 0.570), (0.012, 0.577), (0.021, 0.583), (0.036, 0.586), (0.052, 0.587), (0.081, 0.586), (0.115, 0.582), (0.156, 0.577), (0.207, 0.569), (0.264, 0.561), (0.334, 0.550), (0.408, 0.539), (0.472, 0.530), (0.624, 0.507)], colour=wx.Colour(102, 102, 102, 153), width=1.75)) polys.append(plot.PolyLine([(0.260, 0.018), (0.624, 0.507)], colour=wx.Colour(102, 102, 102, 153), width=1.75)) max_x = 0.6 max_y = 0.6 min_x = 0 min_y = 0 step = .1 elif self.colorspace == "u*v*": # Not used, hard to present gamut projection appropriately in 2D # because blue tones 'cave in' towards the center label_x = "u*" label_y = "v*" max_x = 50.0 max_y = 50.0 min_x = -50.0 min_y = -50.0 step = 50 else: label_x = "a*" label_y = "b*" if show_outline: # Very rough polys.append(plot.PolySpline([(102, -131), (119, -134), (128, -133), (127, -123), (124, -118), (114, -108), (115, -94), (116, -77), (114, -63), (110, -46), (104, -27), (97, -1), (92, 32), (90, 53), (89, 73), (88, 90), (84, 102), (75, 114), (64, 124), (50, 133), (35, 141), (17, 145), (-6, 140), (-46, 129), (-81, 116), (-113, 97), (-144, 68), (-160, 39), (-163, 26), (-162, 16), (-155, 4), (-135, -12), (-89, -46), (-58, -67), (-29, -83), (17, -103), (67, -121), (102, -131)], colour=wx.Colour(102, 102, 102, 153), width=1.75)) max_x = 130.0 max_y = 146.0 min_x = -166.0 min_y = -136.0 step = 50 convert2coords = {"a*b*": lambda X, Y, Z: colormath.XYZ2Lab(*[v * 100 for v in X, Y, Z])[1:], "xy": lambda X, Y, Z: colormath.XYZ2xyY(X, Y, Z)[:2], "u*v*": lambda X, Y, Z: colormath.XYZ2Luv(*[v * 100 for v in X, Y, Z])[1:], "u'v'": lambda X, Y, Z: colormath.XYZ2Lu_v_(X, Y, Z)[1:]}[self.colorspace] # Add color temp graph from 4000 to 9000K if whitepoint == 1: colortemps = [] for kelvin in xrange(4000, 25001, 100): colortemps.append(convert2coords(*colormath.CIEDCCT2XYZ(kelvin))) polys.append(plot.PolySpline(colortemps, colour=wx.Colour(255, 255, 255, 204), width=1.5)) elif whitepoint == 2: colortemps = [] for kelvin in xrange(1667, 25001, 100): colortemps.append(convert2coords(*colormath.planckianCT2XYZ(kelvin))) polys.append(plot.PolySpline(colortemps, colour=wx.Colour(255, 255, 255, 204), width=1.5)) kwargs = {"scale": 255} amount = len(self.pcs_data) for i, pcs_triplets in enumerate(reversed(self.pcs_data)): if not pcs_triplets or len(pcs_triplets) == 1: amount -= 1 continue # Convert xicclu output to coordinates coords = [] for pcs_triplet in pcs_triplets: coords.append(convert2coords(*pcs_triplet)) xy = [] for x, y in coords[:-1]: xy.append((x, y)) if i == 0 or amount == 1: if x > max_x: max_x = x if y > max_y: max_y = y if x < min_x: min_x = x if y < min_y: min_y = y xy2 = [] for j, (x, y) in enumerate(xy): xy2.append((x, y)) if len(xy2) == self.size: xy3 = [] for k, (x, y) in enumerate(xy2): xy3.append((x, y)) if len(xy3) == 2: if i == 1: # Draw comparison profile with grey outline RGBA = 102, 102, 102, 255 w = 2 else: RGBA = colormath.XYZ2RGB(*pcs_triplets[j - len(xy2) + k], **kwargs) w = 3 polys.append(poly(list(xy3), colour=wx.Colour(*RGBA), width=w)) if i == 1: xy3 = [] else: xy3 = xy3[1:] xy2 = xy2[self.size:] # Add whitepoint x, y = coords[-1] if i == 1: # Draw comparison profile with grey outline RGBA = 204, 204, 204, 102 marker="cross" s = 1.5 w = 1.75 else: RGBA = colormath.XYZ2RGB(*pcs_triplets[-1], **kwargs) marker = "plus" s = 2 w = 1.75 polys.append(plot.PolyMarker([(x, y)], colour=wx.Colour(*RGBA), size=s, marker=marker, width=w)) max_abs_x = max(abs(min_x), max_x) max_abs_y = max(abs(min_y), max_y) if center: self.axis = (min(min_x, min_y), max(max_x, max_y)) self.center_x = 0 + (min_x + max_x) / 2 self.center_y = 0 + (min_y + max_y) / 2 self.ratio = [max(max_abs_x, max_abs_y) / max(max_abs_x, max_abs_y)] * 2 if colorspace == "ab": ab_range = max(abs(min_x), abs(min_y)) + max(max_x, max_y) self.spec_x = ab_range / step self.spec_y = ab_range / step if polys: self._DrawCanvas(plot.PlotGraphics(polys, title, label_x, label_y)) def OnMouseDoubleClick(self, event): self.resetzoom() if self.last_draw: self.center() def OnMouseLeftUp(self, event): if self._dragEnabled: self.SetCursor(self.HandCursor) if self.canvas.HasCapture(): self.canvas.ReleaseMouse() self._set_center() def center(self): """ Center the current graphic """ min_x, max_x = self.GetXMaxRange() min_y, max_y = self.GetYMaxRange() self.axis = (min(min_x, min_y), max(max_x, max_y)) self.center_x = 0 + sum((min_x, max_x)) / 2 self.center_y = 0 + sum((min_y, max_y)) / 2 self._DrawCanvas(self.last_draw[0]) def reset(self): self.axis = -128, 128 self.ratio = 1.0, 1.0 def resetzoom(self): self.center_x = 0 self.center_y = 0 self._zoomfactor = 1.0 def set_pcs_data(self, i): if len(self.pcs_data) < i + 1: self.pcs_data.append([]) else: self.pcs_data[i] = [] def setup(self, profiles=None, profile_no=None, intent="a"): self.size = 40 # Number of segments from one primary to the next secondary color if not check_set_argyll_bin(): return # Setup xicclu xicclu = get_argyll_util("xicclu") if not xicclu: return xicclu = xicclu.encode(fs_enc) cwd = self.worker.create_tempdir() if isinstance(cwd, Exception): raise cwd if sys.platform == "win32": startupinfo = sp.STARTUPINFO() startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW startupinfo.wShowWindow = sp.SW_HIDE else: startupinfo = None if not profiles: profiles = [ICCP.ICCProfile(get_data_path("ref/sRGB.icm")), get_display_profile()] for i, profile in enumerate(profiles): if profile_no is not None and i != profile_no: continue if not profile or profile.profileClass == "link": self.set_pcs_data(i) self.profiles[i] = "" continue id = profile.calculateID(False) if self.profiles.get(i) == id and intent == self.intent: continue self.profiles[i] = id self.set_pcs_data(i) channels = {'XYZ': 3, 'Lab': 3, 'Luv': 3, 'YCbr': 3, 'Yxy': 3, 'RGB': 3, 'GRAY': 1, 'HSV': 3, 'HLS': 3, 'CMYK': 4, 'CMY': 3, '2CLR': 2, '3CLR': 3, '4CLR': 4, '5CLR': 5, '6CLR': 6, '7CLR': 7, '8CLR': 8, '9CLR': 9, 'ACLR': 10, 'BCLR': 11, 'CCLR': 12, 'DCLR': 13, 'ECLR': 14, 'FCLR': 15}.get(profile.colorSpace) if not channels: raise Error(lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace))) # Create input values device_values = [] step = 1.0 / (self.size - 1) for j in xrange(min(3, channels)): for k in xrange(min(3, channels)): device_value = [0.0] * channels device_value[j] = 1.0 if j != k: for l in xrange(self.size): device_value[k] = step * l device_values.append(list(device_value)) # Add white if profile.colorSpace in ("RGB", "GRAY"): device_values.append([1.0] * channels) else: device_values.append([0.0] * channels) # Convert RGB triplets to list of strings for j, device_value in enumerate(device_values): device_values[j] = " ".join(str(n) for n in device_value) # Prepare profile profile.write(os.path.join(cwd, "profile.icc")) # Lookup RGB -> XYZ values through profile using xicclu stderr = tempfile.SpooledTemporaryFile() try: p = sp.Popen([xicclu, "-ff", "-i" + intent, "-px", "profile.icc"], stdin=sp.PIPE, stdout=sp.PIPE, stderr=stderr, cwd=cwd.encode(fs_enc), startupinfo=startupinfo) except Exception, exception: raise Error("\n".join([safe_unicode(v) for v in (xicclu, exception)])) self.worker.subprocess = p if p.poll() not in (0, None): stderr.seek(0) raise Error(stderr.read().strip()) try: odata = p.communicate("\n".join(device_values))[0].splitlines() except IOError: stderr.seek(0) raise Error(stderr.read().strip()) if p.wait() != 0: raise IOError(''.join(odata)) stderr.close() pcs_triplets = [] for line in odata: line = "".join(line.strip().split("->")).split() pcs_triplets.append([float(n) for n in line[channels + 2:channels + 5]]) if len(self.pcs_data) < i + 1: self.pcs_data.append(pcs_triplets) else: self.pcs_data[i] = pcs_triplets # Remove temporary files self.worker.wrapup(False) self.intent = intent def zoom(self, direction=1): _zoomfactor = .025 * direction if (self._zoomfactor + _zoomfactor > 0 and self._zoomfactor + _zoomfactor <= 5): self._zoomfactor += _zoomfactor self._set_center() self._DrawCanvas(self.last_draw[0]) class GamutViewOptions(wx.Panel): def __init__(self, *args, **kwargs): wx.Panel.__init__(self, *args, **kwargs) self.SetBackgroundColour(BGCOLOUR) self.sizer = wx.FlexGridSizer(0, 3, 4) self.sizer.AddGrowableCol(0) self.sizer.AddGrowableCol(2) self.SetSizer(self.sizer) self.sizer.Add((0, 0)) legendsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(legendsizer) # Whitepoint legend legendsizer.Add(wx.StaticBitmap(self, -1, getbitmap("theme/cross-2px-12x12-fff")), flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=2) self.whitepoint_legend = wx.StaticText(self, -1, lang.getstr("whitepoint")) self.whitepoint_legend.SetMaxFontSize(11) self.whitepoint_legend.SetForegroundColour(FGCOLOUR) legendsizer.Add(self.whitepoint_legend, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=10) # Comparison profile whitepoint legend self.comparison_whitepoint_bmp = wx.StaticBitmap(self, -1, getbitmap("theme/x-2px-12x12-999")) legendsizer.Add(self.comparison_whitepoint_bmp, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=20) self.comparison_whitepoint_legend = wx.StaticText(self, -1, "%s (%s)" % (lang.getstr("whitepoint"), lang.getstr("comparison_profile"))) self.comparison_whitepoint_legend.SetMaxFontSize(11) self.comparison_whitepoint_legend.SetForegroundColour(FGCOLOUR) legendsizer.Add(self.comparison_whitepoint_legend, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=8) self.sizer.Add((0, 0)) # Empty 'row' self.sizer.Add((0, 0)) self.sizer.Add((0, 0)) self.sizer.Add((0, 0)) self.sizer.Add((0, 0)) self.options_sizer = wx.FlexGridSizer(0, 3, 4, 8) self.sizer.Add(self.options_sizer) # Colorspace select self.colorspace_outline_bmp = wx.StaticBitmap(self, -1, getbitmap("theme/solid-16x2-666")) self.options_sizer.Add(self.colorspace_outline_bmp, flag=wx.ALIGN_CENTER_VERTICAL) self.colorspace_label = wx.StaticText(self, -1, lang.getstr("colorspace")) self.colorspace_label.SetMaxFontSize(11) self.colorspace_label.SetForegroundColour(FGCOLOUR) self.options_sizer.Add(self.colorspace_label, flag=wx.ALIGN_CENTER_VERTICAL) self.colorspace_select = wx.Choice(self, -1, size=(150, -1), choices=["CIE a*b*", #"CIE u*v*", "CIE u'v'", "CIE xy"]) self.options_sizer.Add(self.colorspace_select, flag=wx.ALIGN_CENTER_VERTICAL) self.colorspace_select.Bind(wx.EVT_CHOICE, self.generic_select_handler) self.colorspace_select.SetSelection(0) # Colorspace outline self.options_sizer.Add((0, 0)) self.options_sizer.Add((0, 0)) self.draw_gamut_outline_cb = wx.CheckBox(self, -1, lang.getstr("colorspace.show_outline")) self.draw_gamut_outline_cb.Bind(wx.EVT_CHECKBOX, self.draw_gamut_outline_handler) self.draw_gamut_outline_cb.SetMaxFontSize(11) self.draw_gamut_outline_cb.SetForegroundColour(FGCOLOUR) self.draw_gamut_outline_cb.SetValue(True) self.options_sizer.Add(self.draw_gamut_outline_cb, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=4) # Colortemperature curve select self.whitepoint_bmp = wx.StaticBitmap(self, -1, getbitmap("theme/solid-16x1-fff")) self.options_sizer.Add(self.whitepoint_bmp, flag=wx.ALIGN_CENTER_VERTICAL) self.whitepoint_label = wx.StaticText(self, -1, lang.getstr("whitepoint.colortemp.locus.curve")) self.whitepoint_label.SetMaxFontSize(11) self.whitepoint_label.SetForegroundColour(FGCOLOUR) self.options_sizer.Add(self.whitepoint_label, flag=wx.ALIGN_CENTER_VERTICAL) self.whitepoint_select = wx.Choice(self, -1, size=(150, -1), choices=[lang.getstr("calibration.file.none"), lang.getstr("whitepoint.colortemp.locus.daylight"), lang.getstr("whitepoint.colortemp.locus.blackbody")]) self.options_sizer.Add(self.whitepoint_select, flag=wx.ALIGN_CENTER_VERTICAL) self.whitepoint_select.Bind(wx.EVT_CHOICE, self.generic_select_handler) self.whitepoint_select.SetSelection(0) self.whitepoint_bmp.Hide() # Comparison profile select self.comparison_profile_bmp = wx.StaticBitmap(self, -1, getbitmap("theme/dashed-16x2-666")) self.options_sizer.Add(self.comparison_profile_bmp, flag=wx.ALIGN_CENTER_VERTICAL) self.comparison_profile_label = wx.StaticText(self, -1, lang.getstr("comparison_profile")) self.comparison_profile_label.SetMaxFontSize(11) self.comparison_profile_label.SetForegroundColour(FGCOLOUR) self.options_sizer.Add(self.comparison_profile_label, flag=wx.ALIGN_CENTER_VERTICAL) self.comparison_profiles = OrderedDict([(lang.getstr("calibration.file.none"), None)]) for name in ["sRGB", "ClayRGB1998", "DCI_P3", "Rec601_525_60", "Rec601_625_50", "Rec709", "SMPTE240M"]: path = get_data_path("ref/%s.icm" % name) if path: profile = ICCP.ICCProfile(path) self.comparison_profiles[profile.getDescription()] = profile for path in ["AdobeRGB1998.icc", "ECI-RGB.V1.0.icc", "eciRGB_v2.icc", "GRACoL2006_Coated1v2.icc", "ISOcoated.icc", "ISOcoated_v2_eci.icc", #"ISOnewspaper26v4.icc", #"ISOuncoated.icc", #"ISOuncoatedyellowish.icc", "ISOwebcoated.icc", "LStar-RGB.icc", "LStar-RGB-v2.icc", "ProPhoto.icm", "PSO_Coated_300_NPscreen_ISO12647_eci.icc", "PSO_Coated_NPscreen_ISO12647_eci.icc", "PSO_LWC_Improved_eci.icc", "PSO_LWC_Standard_eci.icc", "PSO_MFC_Paper_eci.icc", #"PSO_Uncoated_ISO12647_eci.icc", #"PSO_Uncoated_NPscreen_ISO12647_eci.icc", #"PSO_SNP_Paper_eci.icc", "SC_paper_eci.icc", "SWOP2006_Coated3v2.icc", "SWOP2006_Coated5v2.icc"]: try: profile = ICCP.ICCProfile(path) except IOError: pass else: self.comparison_profiles[profile.getDescription()] = profile comparison_profiles = self.comparison_profiles[2:] def cmp(x, y): if x.lower() > y.lower(): return 1 if x.lower() < y.lower(): return -1 return 0 comparison_profiles.sort(cmp) self.comparison_profiles = self.comparison_profiles[:2] self.comparison_profiles.update(comparison_profiles) self.comparison_profile_select = wx.Choice(self, -1, size=(150, -1), choices=self.comparison_profiles.keys()[:2] + comparison_profiles.keys()) self.options_sizer.Add(self.comparison_profile_select, flag=wx.ALIGN_CENTER_VERTICAL) self.comparison_profile_select.Bind(wx.EVT_CHOICE, self.comparison_profile_select_handler) self.comparison_profile_select.SetSelection(1) # Rendering intent select self.options_sizer.Add((0, 0)) self.rendering_intent_label = wx.StaticText(self, -1, lang.getstr("rendering_intent")) self.rendering_intent_label.SetMaxFontSize(11) self.rendering_intent_label.SetForegroundColour(FGCOLOUR) self.options_sizer.Add(self.rendering_intent_label, flag=wx.ALIGN_CENTER_VERTICAL) self.rendering_intent_select = wx.Choice(self, -1, size=(150, -1), choices=[lang.getstr("gamap.intents.a"), lang.getstr("gamap.intents.r"), lang.getstr("gamap.intents.p"), lang.getstr("gamap.intents.s")]) self.options_sizer.Add(self.rendering_intent_select, flag=wx.ALIGN_CENTER_VERTICAL) self.rendering_intent_select.Bind(wx.EVT_CHOICE, self.rendering_intent_select_handler) self.rendering_intent_select.SetSelection(0) self.sizer.Add((0, 0)) def DrawCanvas(self, profile_no=None, reset=True): # Gamut plot parent = self.Parent.Parent.Parent.Parent parent.client.SetEnableCenterLines(False) parent.client.SetEnableDiagonals(False) parent.client.SetEnableDrag(True) parent.client.SetEnableGrid(True) parent.client.SetEnablePointLabel(False) try: parent.client.setup([self.comparison_profiles.values()[self.comparison_profile_select.GetSelection()], parent.profile], profile_no, intent={0: "a", 1: "r", 2: "p", 3: "s"}.get(self.rendering_intent_select.GetSelection())) except Exception, exception: show_result_dialog(exception, parent) if reset: parent.client.reset() parent.client.resetzoom() self.draw(center=reset) def comparison_profile_select_handler(self, event): self.comparison_whitepoint_bmp.Show(self.comparison_profile_select.GetSelection() > 0) self.comparison_whitepoint_legend.Show(self.comparison_profile_select.GetSelection() > 0) self.comparison_profile_bmp.Show(self.comparison_profile_select.GetSelection() > 0) self.DrawCanvas(0, reset=False) def draw(self, center=False): colorspace = {0: "a*b*", 1: "u'v'", 2: "xy"}.get(self.colorspace_select.GetSelection(), "a*b*") parent = self.Parent.Parent.Parent.Parent parent.client.DrawCanvas("%s %s" % (colorspace, lang.getstr("colorspace")), colorspace, whitepoint=self.whitepoint_select.GetSelection(), center=center, show_outline=self.draw_gamut_outline_cb.GetValue()) def draw_gamut_outline_handler(self, event): self.colorspace_outline_bmp.Show(self.draw_gamut_outline_cb.GetValue()) self.draw() def generic_select_handler(self, event): self.whitepoint_bmp.Show(self.whitepoint_select.GetSelection() > 0) parent = self.Parent.Parent.Parent.Parent if parent.client.profiles: self.draw(center=event.GetId() == self.colorspace_select.GetId()) else: self.DrawCanvas() def rendering_intent_select_handler(self, event): self.DrawCanvas(reset=False) class ProfileInfoFrame(LUTFrame): def __init__(self, *args, **kwargs): if len(args) < 3 and not "title" in kwargs: kwargs["title"] = lang.getstr("profile.info") wx.Frame.__init__(self, *args, **kwargs) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.CreateStatusBar(1) self.profile = None self.xLabel = lang.getstr("in") self.yLabel = lang.getstr("out") self.sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer) self.title_panel = BitmapBackgroundPanelText(self) self.title_panel.SetForegroundColour(TEXTCOLOUR) self.title_panel.SetBitmap(getbitmap("theme/gradient")) self.sizer.Add(self.title_panel, flag=wx.EXPAND) self.title_sizer = wx.BoxSizer(wx.HORIZONTAL) self.title_panel.SetSizer(self.title_sizer) self.title_txt = self.title_panel font = wx.Font(FONTSIZE_LARGE, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) self.title_txt.SetFont(font) self.title_sizer.Add((0, 32)) gridbgcolor = wx.Colour(234, 234, 234) self.splitter = TwoWaySplitter(self, -1, agwStyle = wx.SP_LIVE_UPDATE | wx.SP_NOSASH) self.splitter.SetBackgroundColour(wx.Colour(204, 204, 204)) self.sizer.Add(self.splitter, 1, flag=wx.EXPAND) p1 = wx.Panel(self.splitter) p1.SetBackgroundColour(BGCOLOUR) p1.sizer = wx.BoxSizer(wx.VERTICAL) p1.SetSizer(p1.sizer) self.splitter.AppendWindow(p1) self.plot_mode_sizer = wx.BoxSizer(wx.HORIZONTAL) p1.sizer.Add(self.plot_mode_sizer, flag=wx.ALIGN_CENTER | wx.TOP, border=12) # The order of the choice items is significant for compatibility # with LUTFrame: # 0 = vcgt, # 1 = [rgb]TRC # 2 = gamut self.plot_mode_select = wx.Choice(p1, -1, choices=[lang.getstr("vcgt"), lang.getstr("[rgb]TRC"), lang.getstr("gamut")]) self.plot_mode_sizer.Add(self.plot_mode_select, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=20) self.plot_mode_select.Bind(wx.EVT_CHOICE, self.plot_mode_select_handler) self.plot_mode_select.SetSelection(2) self.plot_mode_select.Disable() self.tooltip_btn = wx.StaticBitmap(p1, -1, geticon(16, "dialog-information"), style=wx.NO_BORDER) self.tooltip_btn.SetBackgroundColour(BGCOLOUR) self.tooltip_btn.SetToolTipString(lang.getstr("gamut_plot.tooltip")) self.tooltip_btn.SetCursor(wx.StockCursor(wx.CURSOR_QUESTION_ARROW)) self.plot_mode_sizer.Add(self.tooltip_btn, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=8) self.save_plot_btn = wx.BitmapButton(p1, -1, geticon(16, "media-floppy"), style=wx.NO_BORDER) self.save_plot_btn.SetBackgroundColour(BGCOLOUR) self.save_plot_btn.Bind(wx.EVT_BUTTON, self.SaveFile) self.save_plot_btn.SetToolTipString(lang.getstr("save_as")) self.save_plot_btn.SetBitmapDisabled(geticon(16, "empty")) self.save_plot_btn.Disable() self.plot_mode_sizer.Add(self.save_plot_btn, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=8) self.client = GamutCanvas(p1) p1.sizer.Add(self.client, 1, flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP | wx.BOTTOM, border=4) self.options_panel = SimpleBook(p1) self.options_panel.SetBackgroundColour(BGCOLOUR) p1.sizer.Add(self.options_panel, flag=wx.EXPAND | wx.BOTTOM, border=12) # Gamut view options self.options_panel.AddPage(GamutViewOptions(p1), "") # Curve view options self.lut_view_options = wx.Panel(p1) self.lut_view_options.SetBackgroundColour(BGCOLOUR) self.lut_view_options_sizer = wx.FlexGridSizer(0, 8, 4, 4) self.lut_view_options_sizer.AddGrowableCol(0) self.lut_view_options_sizer.AddGrowableCol(7) self.lut_view_options.SetSizer(self.lut_view_options_sizer) self.options_panel.AddPage(self.lut_view_options, "") self.lut_view_options_sizer.Add((0, 0)) self.lut_view_options_sizer.Add((26, 0)) self.show_as_L = wx.CheckBox(self.lut_view_options, -1, u"L* \u2192") self.show_as_L.SetForegroundColour(FGCOLOUR) self.show_as_L.SetValue(True) self.lut_view_options_sizer.Add(self.show_as_L, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.show_as_L.GetId()) self.toggle_red = wx.CheckBox(self.lut_view_options, -1, "R") self.toggle_red.SetForegroundColour(FGCOLOUR) self.toggle_red.SetValue(True) self.lut_view_options_sizer.Add(self.toggle_red, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.toggle_red.GetId()) self.toggle_green = wx.CheckBox(self.lut_view_options, -1, "G") self.toggle_green.SetForegroundColour(FGCOLOUR) self.toggle_green.SetValue(True) self.lut_view_options_sizer.Add(self.toggle_green, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.toggle_green.GetId()) self.toggle_blue = wx.CheckBox(self.lut_view_options, -1, "B") self.toggle_blue.SetForegroundColour(FGCOLOUR) self.toggle_blue.SetValue(True) self.lut_view_options_sizer.Add(self.toggle_blue, flag=wx.ALIGN_CENTER_VERTICAL) self.Bind(wx.EVT_CHECKBOX, self.DrawLUT, id=self.toggle_blue.GetId()) self.toggle_clut = wx.CheckBox(self.lut_view_options, -1, "LUT") self.toggle_clut.SetForegroundColour(FGCOLOUR) self.toggle_clut.SetValue(True) self.lut_view_options_sizer.Add(self.toggle_clut, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=16) self.Bind(wx.EVT_CHECKBOX, self.toggle_clut_handler, id=self.toggle_clut.GetId()) self.lut_view_options_sizer.Add((0, 0)) p2 = wx.Panel(self.splitter) p2.SetBackgroundColour(gridbgcolor) p2.sizer = wx.BoxSizer(wx.VERTICAL) p2.SetSizer(p2.sizer) self.splitter.AppendWindow(p2) self.grid = wx.grid.Grid(p2, -1) self.grid.CreateGrid(0, 2) self.grid.SetCellHighlightColour(gridbgcolor) self.grid.SetCellHighlightPenWidth(0) self.grid.SetCellHighlightROPenWidth(0) self.grid.SetDefaultCellBackgroundColour(gridbgcolor) self.grid.SetDefaultCellTextColour(TEXTCOLOUR) font = wx.Font(FONTSIZE_MEDIUM, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) self.grid.SetDefaultCellFont(font) self.grid.SetDefaultRowSize(20) self.grid.SetLabelBackgroundColour(gridbgcolor) self.grid.SetRowLabelSize(0) self.grid.SetColLabelSize(0) self.grid.DisableDragRowSize() self.grid.EnableDragColSize() self.grid.EnableEditing(False) self.grid.EnableGridLines(False) self.grid.Bind(wx.grid.EVT_GRID_COL_SIZE, self.resize_grid) p2.sizer.Add(self.grid, 1, flag=wx.EXPAND, border=12) drophandlers = { ".icc": self.drop_handler, ".icm": self.drop_handler } droptarget = FileDrop(drophandlers, parent=self) self.title_panel.SetDropTarget(droptarget) droptarget = FileDrop(drophandlers, parent=self) self.title_txt.SetDropTarget(droptarget) droptarget = FileDrop(drophandlers, parent=self) self.client.SetDropTarget(droptarget) droptarget = FileDrop(drophandlers, parent=self) self.grid.SetDropTarget(droptarget) self.splitter.SetMinimumPaneSize(defaults["size.profile_info.w"] - self.splitter._GetSashSize()) self.splitter.SetHSplit(0) border, titlebar = get_platform_window_decoration_size() self.SetSaneGeometry( getcfg("position.profile_info.x"), getcfg("position.profile_info.y"), getcfg("size.profile_info.w") + border * 2, getcfg("size.profile_info.h") + titlebar + border) self.SetMinSize((defaults["size.profile_info.w"] + border * 2, defaults["size.profile_info.h"] + titlebar + border)) self.splitter.SetSplitSize((getcfg("size.profile_info.split.w") + border * 2, self.GetSize()[1])) self.splitter.SetExpandedSize(self.GetSize()) self.splitter.SetExpanded(0) self.client.canvas.Bind(wx.EVT_MOTION, self.OnMotion) self.Bind(wx.EVT_MOVE, self.OnMove) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGING, self.OnSashPosChanging) children = self.GetAllChildren() for child in children: if isinstance(child, wx.Choice): child.SetMaxFontSize(11) child.Bind(wx.EVT_KEY_DOWN, self.key_handler) child.Bind(wx.EVT_MOUSEWHEEL, self.OnWheel) def DrawCanvas(self, profile_no=None, reset=True): self.SetStatusText('') if self.plot_mode_select.GetSelection() == self.plot_mode_select.GetCount() - 1: # Gamut plot self.plot_mode_sizer.Show(self.tooltip_btn) self.options_panel.GetCurrentPage().DrawCanvas(reset=reset) self.save_plot_btn.Enable() else: # Curves plot self.plot_mode_sizer.Hide(self.tooltip_btn) self.client.SetEnableCenterLines(True) self.client.SetEnableDiagonals('Bottomleft-Topright') self.client.SetEnableDrag(False) self.client.SetEnableGrid(False) self.client.SetEnablePointLabel(True) self.client.SetXSpec(5) self.client.SetYSpec(5) if ("vcgt" in self.profile.tags or ("rTRC" in self.profile.tags and "gTRC" in self.profile.tags and "bTRC" in self.profile.tags) or ("B2A0" in self.profile.tags and self.profile.colorSpace == "RGB")): self.toggle_red.Enable() self.toggle_green.Enable() self.toggle_blue.Enable() self.DrawLUT() else: self.toggle_red.Disable() self.toggle_green.Disable() self.toggle_blue.Disable() self.client.DrawLUT() self.splitter.GetTopLeft().sizer.Layout() self.splitter.GetTopLeft().Refresh() def LoadProfile(self, profile): if not isinstance(profile, ICCP.ICCProfile): try: profile = ICCP.ICCProfile(profile) except ICCP.ICCProfileInvalidError, exception: show_result_dialog(Error(lang.getstr("profile.invalid") + "\n" + profile), self) return self.profile = profile self.rTRC = profile.tags.get("rTRC") self.gTRC = profile.tags.get("gTRC") self.bTRC = profile.tags.get("bTRC") self.trc = None plot_mode = self.plot_mode_select.GetSelection() plot_mode_count = self.plot_mode_select.GetCount() choice = [] info = profile.get_info() if (("rTRC" in self.profile.tags and "gTRC" in self.profile.tags and "bTRC" in self.profile.tags) or ("B2A0" in self.profile.tags and self.profile.colorSpace == "RGB")): # vcgt needs to be in here for compatibility with LUTFrame choice.append(lang.getstr("vcgt")) try: self.lookup_tone_response_curves() except Exception, exception: show_result_dialog(exception, self) else: choice.append(lang.getstr("[rgb]TRC")) choice.append(lang.getstr("gamut")) self.Freeze() self.plot_mode_select.SetItems(choice) if plot_mode_count != self.plot_mode_select.GetCount(): plot_mode = self.plot_mode_select.GetCount() - 1 self.plot_mode_select.SetSelection(min(plot_mode, self.plot_mode_select.GetCount() - 1)) self.select_current_page() self.plot_mode_select.Enable() self.title_txt.SetLabel(profile.getDescription()) border, titlebar = get_platform_window_decoration_size() titlewidth = self.title_txt.GetTextExtent(self.title_txt.GetLabel())[0] + 30 if titlewidth > defaults["size.profile_info.w"]: defaults["size.profile_info.w"] = titlewidth if titlewidth > defaults["size.profile_info.split.w"]: defaults["size.profile_info.split.w"] = titlewidth if titlewidth + border * 2 > self.GetMinSize()[0]: self.SetMinSize((titlewidth + border * 2, defaults["size.profile_info.h"] + titlebar + border)) if titlewidth + border * 2 > self.GetSize()[0]: self.SetSize((self.get_platform_window_size()[0], self.GetSize()[1])) self.splitter.SetExpandedSize(self.get_platform_window_size()) rows = [("", "")] lines = [] for label, value in info: label = label.replace("\0", "") value = wrap(universal_newlines(value.strip()), 52).replace("\0", "").split("\n") linecount = len(value) for i, line in enumerate(value): value[i] = line.strip() label = universal_newlines(label).split("\n") while len(label) < linecount: label.append("") lines.extend(zip(label, value)) for i, line in enumerate(lines): line = list(line) indent = re.match("\s+", line[0]) if indent: #if i + 1 < len(lines) and lines[i + 1][0].startswith(" "): #marker = u" ├ " #else: #marker = u" └ " line[0] = indent.group() + lang.getstr(line[0].strip()) elif line[0]: #if i + 1 < len(lines) and lines[i + 1][0].startswith(" "): #marker = u"▼ " #else: #marker = u"► " line[0] = lang.getstr(line[0]) line[1] = lang.getstr(line[1]) rows.append(line) rows.append(("", "")) if self.grid.GetNumberRows(): self.grid.DeleteRows(0, self.grid.GetNumberRows()) self.grid.AppendRows(len(rows)) labelcolor = wx.Colour(0x80, 0x80, 0x80) altcolor = wx.Colour(230, 230, 230) for i, (label, value) in enumerate(rows): self.grid.SetCellValue(i, 0, " " * 4 + label) if i % 2: self.grid.SetCellBackgroundColour(i, 0, altcolor) self.grid.SetCellBackgroundColour(i, 1, altcolor) self.grid.SetCellTextColour(i, 0, labelcolor) self.grid.SetCellValue(i, 1, value) self.grid.AutoSizeColumn(0) self.resize_grid() self.DrawCanvas() self.Thaw() def OnMotion(self, event): if isinstance(event, wx.MouseEvent): xy = self.client._getXY(event) else: xy = event if self.plot_mode_select.GetSelection() < self.plot_mode_select.GetCount() - 1: # Curves plot self.UpdatePointLabel(xy) else: # Gamut plot if self.options_panel.GetCurrentPage().colorspace_select.GetSelection() == 0: format = "%.2f %.2f" else: format = "%.4f %.4f" page = self.options_panel.GetCurrentPage() colorspace_no = page.colorspace_select.GetSelection() whitepoint_no = page.whitepoint_select.GetSelection() if whitepoint_no > 0: if colorspace_no == 0: # a*b* x, y, Y = colormath.Lab2xyY(100.0, xy[0], xy[1]) elif colorspace_no == 1: # u' v' x, y = colormath.u_v_2xy(xy[0], xy[1]) else: x, y = xy cct, delta = colormath.xy_CCT_delta(x, y, daylight=whitepoint_no == 1) status = format % xy if cct: if delta: locus = {"Blackbody": "blackbody", "Daylight": "daylight"}.get(page.whitepoint_select.GetStringSelection(), page.whitepoint_select.GetStringSelection()) status = u"%s, CCT %i (%s %.2f)" % ( format % xy, cct, lang.getstr("delta_e_to_locus", locus), delta["E"]) else: status = u"%s, CCT %i" % (format % xy, cct) self.SetStatusText(status) else: self.SetStatusText(format % xy) if isinstance(event, wx.MouseEvent): event.Skip() # Go to next handler def OnMove(self, event=None): if self.IsShownOnScreen() and not \ self.IsMaximized() and not self.IsIconized(): x, y = self.GetScreenPosition() setcfg("position.profile_info.x", x) setcfg("position.profile_info.y", y) if event: event.Skip() def OnSashPosChanging(self, event): border, titlebar = get_platform_window_decoration_size() self.splitter.SetExpandedSize((self.splitter._splitx + self.splitter._GetSashSize() + border * 2, self.GetSize()[1])) setcfg("size.profile_info.w", self.splitter._splitx + self.splitter._GetSashSize()) wx.CallAfter(self.redraw) wx.CallAfter(self.resize_grid) def OnSize(self, event=None): if self.IsShownOnScreen() and self.IsMaximized(): self.splitter.AdjustLayout() self.splitter.Refresh() wx.CallAfter(self.redraw) wx.CallAfter(self.resize_grid) if self.IsShownOnScreen() and not self.IsIconized(): wx.CallAfter(self._setsize) if event: event.Skip() def OnWheel(self, event): xy = wx.GetMousePosition() if not self.client.GetClientRect().Contains(self.client.ScreenToClient(xy)): if self.grid.GetClientRect().Contains(self.grid.ScreenToClient(xy)): self.grid.SetFocus() event.Skip() elif self.client.GetEnableDrag() and self.client.last_draw: if event.WheelRotation < 0: direction = 1.0 else: direction = -1.0 self.client.zoom(direction) def _setsize(self): if not self.IsMaximized(): w, h = self.GetSize() border, titlebar = get_platform_window_decoration_size() if self.splitter._expanded < 0: self.splitter.SetExpandedSize((self.splitter._splitx + self.splitter._GetSashSize() + border * 2, self.GetSize()[1])) self.splitter.SetSplitSize((w, self.GetSize()[1])) setcfg("size.profile_info.w", self.splitter._splitx + self.splitter._GetSashSize()) setcfg("size.profile_info.split.w", w - border * 2) else: self.splitter.SetExpandedSize((w, self.GetSize()[1])) setcfg("size.profile_info.w", w - border * 2) setcfg("size.profile_info.h", h - titlebar - border) def drop_handler(self, path): """ Drag'n'drop handler for .cal/.icc/.icm files. """ self.LoadProfile(path) def get_platform_window_size(self, defaultwidth=None, defaultheight=None, split=False): if split: name = ".split" else: name = "" if not defaultwidth: defaultwidth = defaults["size.profile_info%s.w" % name] if not defaultheight: defaultheight = defaults["size.profile_info.h"] border, titlebar = get_platform_window_decoration_size() #return (max(max(getcfg("size.profile_info%s.w" % name), #defaultwidth) + border * 2, self.GetMinSize()[0]), #max(getcfg("size.profile_info.h"), #defaultheight) + titlebar + border) if split: w, h = self.splitter.GetSplitSize() else: w, h = self.splitter.GetExpandedSize() return (max(w, defaultwidth + border * 2, self.GetMinSize()[0]), max(h, defaultheight + titlebar + border)) def key_handler(self, event): # AltDown # CmdDown # ControlDown # GetKeyCode # GetModifiers # GetPosition # GetRawKeyCode # GetRawKeyFlags # GetUniChar # GetUnicodeKey # GetX # GetY # HasModifiers # KeyCode # MetaDown # Modifiers # Position # RawKeyCode # RawKeyFlags # ShiftDown # UnicodeKey # X # Y key = event.GetKeyCode() if (event.ControlDown() or event.CmdDown()): # CTRL (Linux/Mac/Windows) / CMD (Mac) focus = self.FindFocus() if self.grid in (focus, focus.GetParent(), focus.GetGrandParent()): if key == 65: # A self.grid.SelectAll() return elif key in (67, 88): # C / X clip = [] cells = self.grid.GetSelection() i = -1 start_col = self.grid.GetNumberCols() for cell in cells: row = cell[0] col = cell[1] if i < row: clip += [[]] i = row if col < start_col: start_col = col while len(clip[-1]) - 1 < col: clip[-1] += [""] clip[-1][col] = self.grid.GetCellValue(row, col) for i, row in enumerate(clip): clip[i] = "\t".join(row[start_col:]) clipdata = wx.TextDataObject() clipdata.SetText("\n".join(clip)) wx.TheClipboard.Open() wx.TheClipboard.SetData(clipdata) wx.TheClipboard.Close() return if key == 83 and self.profile: # S self.SaveFile() return else: event.Skip() elif key in (43, wx.WXK_NUMPAD_ADD) and self.client.GetEnableDrag(): # + key zoom in self.client.zoom(-1) elif key in (45, wx.WXK_NUMPAD_SUBTRACT) and self.client.GetEnableDrag(): # - key zoom out self.client.zoom(1) else: event.Skip() def plot_mode_select_handler(self, event): self.Freeze() self.select_current_page() self.DrawCanvas(reset=False) self.Thaw() def redraw(self): if self.plot_mode_select.GetSelection() == self.plot_mode_select.GetCount() - 1 and self.client.last_draw: # Update gamut plot self.client.Parent.Freeze() self.client._DrawCanvas(self.client.last_draw[0]) self.client.Parent.Thaw() def resize_grid(self, event=None): self.grid.SetColSize(1, max(self.grid.GetSize()[0] - self.grid.GetColSize(0) - wx.SystemSettings_GetMetric(wx.SYS_VSCROLL_X), 0)) self.grid.SetMargins(0 - wx.SystemSettings_GetMetric(wx.SYS_VSCROLL_X), 0 - wx.SystemSettings_GetMetric(wx.SYS_HSCROLL_Y)) self.grid.ForceRefresh() def select_current_page(self): if self.plot_mode_select.GetSelection() == self.plot_mode_select.GetCount() - 1: # Gamut plot self.options_panel.SetSelection(0) else: # Curves plot self.options_panel.SetSelection(1) self.splitter.GetTopLeft().Layout() class ProfileInfoViewer(wx.App): def OnInit(self): check_set_argyll_bin() self.frame = ProfileInfoFrame(None, -1) return True def main(profile=None): config.initcfg() lang.init() lang.update_defaults() app = ProfileInfoViewer(0) app.frame.LoadProfile(profile or get_display_profile()) app.frame.Show(True) app.MainLoop() writecfg() if __name__ == "__main__": main(*sys.argv[1:2]) dispcalGUI-1.7.1.6/dispcalGUI/wxReportFrame.py000644 000765 000000 00000046727 12266603364 021011 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys from config import get_data_path, initcfg, getcfg, geticon, hascfg, setcfg from log import safe_print from meta import name as appname from util_str import strtr from worker import Error, get_current_profile_path, show_result_dialog import CGATS import ICCProfile as ICCP import config import localization as lang import worker from wxTestchartEditor import TestchartEditor from wxaddons import FileDrop from wxwindows import (BaseFrame, FileBrowseBitmapButtonWithChoiceHistory as FileBrowse, InfoDialog, wx) from wx import xrc class ReportFrame(BaseFrame): """ Measurement report creation window """ def __init__(self, parent=None): self.res = xrc.XmlResource(get_data_path(os.path.join("xrc", "report.xrc"))) pre = wx.PreFrame() self.res.LoadOnFrame(pre, parent, "reportframe") self.PostCreate(pre) self.Bind(wx.EVT_CLOSE, self.OnClose) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.set_child_ctrls_as_attrs(self) self.panel = self.FindWindowByName("panel") self.worker = worker.Worker(self) self.worker.set_argyll_version("xicclu") # Bind event handlers self.fields_ctrl.Bind(wx.EVT_CHOICE, self.fields_ctrl_handler) self.chart_btn.SetBitmapDisabled(geticon(16, "empty")) self.chart_btn.Bind(wx.EVT_BUTTON, self.chart_btn_handler) self.simulation_profile_cb.Bind(wx.EVT_CHECKBOX, self.use_simulation_profile_ctrl_handler) self.use_simulation_profile_as_output_cb.Bind(wx.EVT_CHECKBOX, self.use_simulation_profile_as_output_handler) self.enable_3dlut_cb.Bind(wx.EVT_CHECKBOX, self.enable_3dlut_handler) self.apply_bt1886_cb.Bind(wx.EVT_CHECKBOX, self.apply_bt1886_ctrl_handler) self.bt1886_gamma_ctrl.Bind(wx.EVT_KILL_FOCUS, self.bt1886_gamma_ctrl_handler) self.bt1886_gamma_type_ctrl.Bind(wx.EVT_CHOICE, self.bt1886_gamma_type_ctrl_handler) self.simulate_whitepoint_cb.Bind(wx.EVT_CHECKBOX, self.simulate_whitepoint_ctrl_handler) self.simulate_whitepoint_relative_cb.Bind(wx.EVT_CHECKBOX, self.simulate_whitepoint_relative_ctrl_handler) self.devlink_profile_cb.Bind(wx.EVT_CHECKBOX, self.use_devlink_profile_ctrl_handler) self.output_profile_current_btn.Bind(wx.EVT_BUTTON, self.output_profile_current_ctrl_handler) self.setup_language() self.update_controls() self.update_layout() config.defaults.update({ "position.reportframe.x": self.GetDisplay().ClientArea[0] + 40, "position.reportframe.y": self.GetDisplay().ClientArea[1] + 60, "size.reportframe.w": self.GetMinSize()[0], "size.reportframe.h": self.GetMinSize()[1]}) if (hascfg("position.reportframe.x") and hascfg("position.reportframe.y") and hascfg("size.reportframe.w") and hascfg("size.reportframe.h")): self.SetSaneGeometry(int(getcfg("position.reportframe.x")), int(getcfg("position.reportframe.y")), int(getcfg("size.reportframe.w")), int(getcfg("size.reportframe.h"))) else: self.Center() def OnClose(self, event=None): if (self.IsShownOnScreen() and not self.IsMaximized() and not self.IsIconized()): x, y = self.GetScreenPosition() setcfg("position.reportframe.x", x) setcfg("position.reportframe.y", y) setcfg("size.reportframe.w", self.GetSize()[0]) setcfg("size.reportframe.h", self.GetSize()[1]) config.writecfg() if event: event.Skip() def apply_bt1886_ctrl_handler(self, event): v = self.apply_bt1886_cb.GetValue() setcfg("measurement_report.apply_bt1886_gamma_mapping", int(v)) config.writecfg() self.update_main_controls() def bt1886_gamma_ctrl_handler(self, event): try: v = float(self.bt1886_gamma_ctrl.GetValue().replace(",", ".")) if (v < config.valid_ranges["measurement_report.bt1886_gamma"][0] or v > config.valid_ranges["measurement_report.bt1886_gamma"][1]): raise ValueError() except ValueError: wx.Bell() self.bt1886_gamma_ctrl.SetValue(str(getcfg("measurement_report.bt1886_gamma"))) else: if str(v) != self.bt1886_gamma_ctrl.GetValue(): self.bt1886_gamma_ctrl.SetValue(str(v)) setcfg("measurement_report.bt1886_gamma", v) config.writecfg() event.Skip() def bt1886_gamma_type_ctrl_handler(self, event): setcfg("measurement_report.bt1886_gamma_type", self.bt1886_gamma_types_ab[self.bt1886_gamma_type_ctrl.GetSelection()]) config.writecfg() def chart_btn_handler(self, event): if self.Parent: parent = self.Parent else: parent = self chart = getcfg("measurement_report.chart") if not hasattr(parent, "tcframe"): parent.tcframe = TestchartEditor(parent, path=chart, cfg="measurement_report.chart", target=self) elif (not hasattr(parent.tcframe, "ti1") or chart != parent.tcframe.ti1.filename): parent.tcframe.tc_load_cfg_from_ti1(None, chart, "measurement_report.chart", self) setcfg("tc.show", 1) parent.tcframe.Show() parent.tcframe.Raise() def chart_ctrl_handler(self, event): chart = self.chart_ctrl.GetPath() values = [] try: cgats = CGATS.CGATS(chart) except (IOError, CGATS.CGATSInvalidError), exception: show_result_dialog(exception, self) else: data_format = cgats.queryv1("DATA_FORMAT") if data_format: for column in data_format.itervalues(): column_prefix = column.split("_")[0] if (column_prefix in ("CMYK", "LAB", "RGB", "XYZ") and column_prefix not in values): values.append(column_prefix) if values: self.panel.Freeze() self.fields_ctrl.SetItems(values) self.fields_ctrl.GetContainingSizer().Layout() self.panel.Thaw() fields = getcfg("measurement_report.chart.fields") try: index = values.index(fields) except ValueError: index = 0 self.fields_ctrl.SetSelection(index) setcfg("measurement_report.chart", chart) config.writecfg() self.chart_patches_amount.Freeze() self.chart_patches_amount.SetLabel( str(cgats.queryv1("NUMBER_OF_SETS") or "")) self.chart_patches_amount.GetContainingSizer().Layout() self.chart_patches_amount.Thaw() self.chart_white = cgats.get_white_cie() if event: v = int(not self.chart_white or not "RGB" in values) setcfg("measurement_report.whitepoint.simulate", v) setcfg("measurement_report.whitepoint.simulate.relative", v) if not values: if chart: show_result_dialog(lang.getstr("error.testchart.missing_fields", (chart, "RGB/CMYK %s LAB/XYZ" % lang.getstr("or"))), self) self.chart_ctrl.SetPath(getcfg("measurement_report.chart")) else: self.chart_btn.Enable("RGB" in values and "XYZ" in values) self.fields_ctrl.Enable(self.fields_ctrl.GetCount() > 1) self.fields_ctrl_handler(None) def chart_drop_handler(self, path): if not self.worker.is_working(): self.chart_ctrl.SetPath(path) self.chart_ctrl_handler(True) def chart_drop_unsupported_handler(self): self.drop_unsupported("chart") def devlink_profile_ctrl_handler(self, event): self.set_profile("devlink") def devlink_profile_drop_handler(self, path): if not self.worker.is_working(): self.devlink_profile_ctrl.SetPath(path) self.set_profile("devlink") def devlink_profile_drop_unsupported_handler(self): self.drop_unsupported("devlink_profile") def drop_unsupported(self, which): if not self.worker.is_working(): files = getattr(self, "%s_droptarget" % which)._filenames InfoDialog(self, msg=lang.getstr("error.file_type_unsupported") + "\n\n" + "\n".join(files), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) def enable_3dlut_handler(self, event): setcfg("3dlut.madVR.enable", int(self.enable_3dlut_cb.GetValue())) setcfg("measurement_report.use_devlink_profile", 0) config.writecfg() self.update_main_controls() def fields_ctrl_handler(self, event): setcfg("measurement_report.chart.fields", self.fields_ctrl.GetStringSelection()) self.update_main_controls() def output_profile_ctrl_handler(self, event): self.set_profile("output") def output_profile_current_ctrl_handler(self, event): profile_path = get_current_profile_path() if profile_path and os.path.isfile(profile_path): self.output_profile_ctrl.SetPath(profile_path) self.set_profile("output") def output_profile_drop_handler(self, path): if not self.worker.is_working(): self.output_profile_ctrl.SetPath(path) self.set_profile("output") def output_profile_drop_unsupported_handler(self): self.drop_unsupported("output_profile") def set_profile(self, which, profile_path=None, silent=False): path = getattr(self, "%s_profile_ctrl" % which).GetPath() if which == "output": if profile_path is None: profile_path = get_current_profile_path() self.output_profile_current_btn.Enable(self.output_profile_ctrl.IsShown() and bool(profile_path) and os.path.isfile(profile_path) and profile_path != path) if path: if not os.path.isfile(path): if not silent: show_result_dialog(Error(lang.getstr("file.missing", path)), parent=self) return try: profile = ICCP.ICCProfile(path) except ICCP.ICCProfileInvalidError: if not silent: show_result_dialog(Error(lang.getstr("profile.invalid")), parent=self) except IOError, exception: if not silent: show_result_dialog(exception, parent=self) else: if ((which == "simulation" and (profile.profileClass not in ("mntr", "prtr") or profile.colorSpace not in ("CMYK", "RGB"))) or (which == "output" and (profile.profileClass != "mntr" or profile.colorSpace != "RGB")) or (which == "devlink" and profile.profileClass != "link")): show_result_dialog(NotImplementedError(lang.getstr("profile.unsupported", (profile.profileClass, profile.colorSpace))), parent=self) else: setattr(self, "%s_profile" % which, profile) getattr(self, "%s_profile_desc" % which).SetLabel(profile.getDescription()) if not silent: setcfg("measurement_report.%s_profile" % which, profile.fileName) if which == "simulation": self.use_simulation_profile_ctrl_handler(None) else: self.update_main_controls() return profile getattr(self, "%s_profile_ctrl" % which).SetPath(getcfg("measurement_report.%s_profile" % which)) else: getattr(self, "%s_profile_desc" % which).SetLabel("") if not silent: setattr(self, "%s_profile" % which, None) setcfg("measurement_report.%s_profile" % which, None) self.update_main_controls() def setup_language(self): BaseFrame.setup_language(self) # Create the file picker ctrls dynamically to get translated strings for which in ("chart", "simulation_profile", "devlink_profile", "output_profile"): origpickerctrl = self.FindWindowByName("%s_ctrl" % which) hsizer = origpickerctrl.GetContainingSizer() if which.endswith("_profile"): wildcard = lang.getstr("filetype.icc") + "|*.icc;*.icm" else: wildcard = (lang.getstr("filetype.ti1_ti3_txt") + "|*.cgats;*.cie;*.ti1;*.ti2;*.ti3;*.txt") msg = {"chart": "measurement_report_choose_chart_or_reference", "output_profile": "measurement_report_choose_profile"}.get(which, which) kwargs = dict(toolTip=lang.getstr(msg).rstrip(":"), dialogTitle=lang.getstr(msg), fileMask=wildcard, changeCallback=getattr(self, "%s_ctrl_handler" % which), name="%s_ctrl" % which) if which not in ("devlink_profile", "output_profile"): if which == "chart": wildcard = "\.(cie|ti1|ti3)$" else: wildcard = "\.(icc|icm)$" kwargs["history"] = get_data_path("ref", wildcard) setattr(self, "%s_ctrl" % which, FileBrowse(self.panel, -1, **kwargs)) getattr(self, "%s_ctrl" % which).SetMaxFontSize(11) hsizer.Replace(origpickerctrl, getattr(self, "%s_ctrl" % which)) origpickerctrl.Destroy() hsizer.Layout() # Drop targets setattr(self, "%s_droptarget" % which, FileDrop()) droptarget = getattr(self, "%s_droptarget" % which) handler = getattr(self, "%s_drop_handler" % which) if which.endswith("_profile"): droptarget.drophandlers = {".icc": handler, ".icm": handler} else: droptarget.drophandlers = {".cgats": handler, ".cie": handler, ".ti1": handler, ".ti2": handler, ".ti3": handler, ".txt": handler} droptarget.unsupported_handler = getattr(self, "%s_drop_unsupported_handler" % which) getattr(self, "%s_ctrl" % which).SetDropTarget(droptarget) self.bt1886_gamma_types_ab = {0: "b", 1: "B"} self.bt1886_gamma_types_ba = {"b": 0, "B": 1} self.bt1886_gamma_type_ctrl.SetItems([lang.getstr("trc.type.relative"), lang.getstr("trc.type.absolute")]) def simulate_whitepoint_ctrl_handler(self, event): v = self.simulate_whitepoint_cb.GetValue() setcfg("measurement_report.whitepoint.simulate", int(v)) config.writecfg() self.update_main_controls() def simulate_whitepoint_relative_ctrl_handler(self, event): setcfg("measurement_report.whitepoint.simulate.relative", int(self.simulate_whitepoint_relative_cb.GetValue())) config.writecfg() def simulation_profile_ctrl_handler(self, event): self.set_profile("simulation") def simulation_profile_drop_handler(self, path): if not self.worker.is_working(): self.simulation_profile_ctrl.SetPath(path) self.set_profile("simulation") def simulation_profile_drop_unsupported_handler(self): self.drop_unsupported("simulation_profile") def update_controls(self): """ Update controls with values from the configuration """ self.simulation_profile_ctrl.SetPath(getcfg("measurement_report.simulation_profile")) self.set_profile("simulation", silent=True) self.bt1886_gamma_ctrl.SetValue(str(getcfg("measurement_report.bt1886_gamma"))) self.bt1886_gamma_type_ctrl.SetSelection(self.bt1886_gamma_types_ba[getcfg("measurement_report.bt1886_gamma_type")]) self.devlink_profile_ctrl.SetPath(getcfg("measurement_report.devlink_profile")) self.set_profile("devlink", silent=True) self.output_profile_ctrl.SetPath(getcfg("measurement_report.output_profile")) self.set_profile("output", silent=True) self.set_testchart(getcfg("measurement_report.chart")) def set_testchart(self, path): self.chart_ctrl.SetPath(path) self.chart_ctrl_handler(None) def update_main_controls(self): chart_has_white = bool(getattr(self, "chart_white", None)) color = getcfg("measurement_report.chart.fields") sim_profile_color = (getattr(self, "simulation_profile", None) and self.simulation_profile.colorSpace) if getcfg("measurement_report.use_simulation_profile"): setcfg("measurement_report.use_simulation_profile", int(sim_profile_color == color)) self.simulation_profile_cb.Enable(sim_profile_color == color) enable1 = bool(getcfg("measurement_report.use_simulation_profile")) enable2 = (sim_profile_color == "RGB" and bool(getcfg("measurement_report.use_simulation_profile_as_output"))) self.simulation_profile_cb.SetValue(enable1) self.simulation_profile_ctrl.Enable(color in ("CMYK", "RGB")) self.simulation_profile_desc.Enable(color in ("CMYK", "RGB")) self.use_simulation_profile_as_output_cb.Enable(enable1 and sim_profile_color == "RGB") self.use_simulation_profile_as_output_cb.SetValue(enable1 and enable2) self.enable_3dlut_cb.Enable(enable1 and enable2) self.enable_3dlut_cb.SetValue(enable1 and enable2 and bool(getcfg("3dlut.madVR.enable"))) self.enable_3dlut_cb.Show(config.get_display_name() == "madVR") enable5 = (sim_profile_color == "RGB" and isinstance(self.simulation_profile.tags.get("rXYZ"), ICCP.XYZType) and isinstance(self.simulation_profile.tags.get("gXYZ"), ICCP.XYZType) and isinstance(self.simulation_profile.tags.get("bXYZ"), ICCP.XYZType)) self.apply_bt1886_cb.Enable(enable1 and enable5) enable6 = (enable1 and enable5 and bool(getcfg("measurement_report.apply_bt1886_gamma_mapping"))) self.apply_bt1886_cb.SetValue(enable6) self.bt1886_gamma_ctrl.Enable(enable6) self.bt1886_gamma_type_ctrl.Enable(enable6) self.simulate_whitepoint_cb.Enable((enable1 and not enable2) or (color in ("LAB", "XYZ") and chart_has_white)) enable3 = bool(getcfg("measurement_report.whitepoint.simulate")) self.simulate_whitepoint_cb.SetValue(((enable1 and not enable2) or color in ("LAB", "XYZ")) and enable3) self.simulate_whitepoint_relative_cb.Enable(((enable1 and not enable2) or color in ("LAB", "XYZ")) and enable3) self.simulate_whitepoint_relative_cb.SetValue( ((enable1 and not enable2) or color in ("LAB", "XYZ")) and enable3 and bool(getcfg("measurement_report.whitepoint.simulate.relative"))) self.devlink_profile_cb.Enable(enable1 and enable2) enable4 = bool(getcfg("measurement_report.use_devlink_profile")) self.devlink_profile_cb.SetValue(enable1 and enable2 and enable4) self.devlink_profile_ctrl.Enable(enable1 and enable2 and enable4) self.devlink_profile_desc.Enable(enable1 and enable2 and enable4) self.output_profile_label.Enable((color in ("LAB", "RGB", "XYZ") or enable1) and (not enable1 or not enable2 or self.apply_bt1886_cb.GetValue())) self.output_profile_ctrl.Enable((color in ("LAB", "RGB", "XYZ") or enable1) and (not enable1 or not enable2 or self.apply_bt1886_cb.GetValue())) self.output_profile_desc.Enable((color in ("LAB", "RGB", "XYZ") or enable1) and (not enable1 or not enable2 or self.apply_bt1886_cb.GetValue())) output_profile = (bool(getcfg("measurement_report.output_profile")) and os.path.isfile(getcfg("measurement_report.output_profile"))) self.measure_btn.Enable(((enable1 and enable2 and (not enable6 or output_profile) and (not enable4 or (bool(getcfg("measurement_report.devlink_profile")) and os.path.isfile(getcfg("measurement_report.devlink_profile"))))) or (((not enable1 and color in ("LAB", "RGB", "XYZ")) or (enable1 and sim_profile_color == color and not enable2)) and output_profile)) and bool(getcfg("measurement_report.chart")) and os.path.isfile(getcfg("measurement_report.chart"))) def use_devlink_profile_ctrl_handler(self, event): setcfg("3dlut.madVR.enable", 0) setcfg("measurement_report.use_devlink_profile", int(self.devlink_profile_cb.GetValue())) config.writecfg() self.update_main_controls() def use_simulation_profile_ctrl_handler(self, event): use_sim_profile = self.simulation_profile_cb.GetValue() setcfg("measurement_report.use_simulation_profile", int(use_sim_profile)) sim_profile = getattr(self, "simulation_profile", None) if use_sim_profile and sim_profile: v = int(sim_profile.profileClass == "prtr") setcfg("measurement_report.whitepoint.simulate", v) setcfg("measurement_report.whitepoint.simulate.relative", v) config.writecfg() self.update_main_controls() def use_simulation_profile_as_output_handler(self, event): setcfg("measurement_report.use_simulation_profile_as_output", int(self.use_simulation_profile_as_output_cb.GetValue())) config.writecfg() self.update_main_controls() if __name__ == "__main__": config.initcfg() lang.init() lang.update_defaults() app = wx.App(0) frame = ReportFrame() frame.Show() app.MainLoop() dispcalGUI-1.7.1.6/dispcalGUI/wxSynthICCFrame.py000644 000765 000000 00000025313 12266411534 021142 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import os import sys from ICCProfile import ICCProfile from config import (get_data_path, get_verified_path, getcfg, geticon, hascfg, setcfg) from log import safe_print from meta import name as appname from util_os import waccess from worker import Error, show_result_dialog import ICCProfile as ICCP import colormath import config import localization as lang import worker from wxaddons import FileDrop from wxwindows import BaseFrame, InfoDialog, wx from wx import xrc class SynthICCFrame(BaseFrame): """ 3D LUT creation window """ def __init__(self, parent=None): self.res = xrc.XmlResource(get_data_path(os.path.join("xrc", "synthicc.xrc"))) pre = wx.PreFrame() self.res.LoadOnFrame(pre, parent, "synthiccframe") self.PostCreate(pre) self.Bind(wx.EVT_CLOSE, self.OnClose) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.set_child_ctrls_as_attrs(self) self.panel = self.FindWindowByName("panel") self._updating_ctrls = False # Presets presets = [""] + sorted(colormath.rgb_spaces.keys()) self.preset_ctrl.SetItems(presets) # Bind event handlers self.preset_ctrl.Bind(wx.EVT_CHOICE, self.preset_ctrl_handler) for color in ("red", "green", "blue", "white"): for component in "XYZxy": if component in "xy": handler = "xy" else: handler = "XYZ" self.Bind(wx.EVT_TEXT, getattr(self, "%s_%s_ctrl_handler" % (color, handler)), getattr(self, "%s_%s" % (color, component))) self.trc_ctrl.Bind(wx.EVT_CHOICE, self.trc_ctrl_handler) self.trc_textctrl.Bind(wx.EVT_COMBOBOX, self.trc_textctrl_handler) self.trc_textctrl.Bind(wx.EVT_TEXT, self.trc_textctrl_handler) self.profile_name_textctrl.Bind(wx.EVT_TEXT, self.profile_name_ctrl_handler) self.save_as_btn.Bind(wx.EVT_BUTTON, self.save_as_btn_handler) self.save_as_btn.SetDefault() self.save_as_btn.Disable() self.setup_language() self.update_controls() self.save_btn.Hide() self.update_layout() config.defaults.update({ "position.synthiccframe.x": self.GetDisplay().ClientArea[0] + 40, "position.synthiccframe.y": self.GetDisplay().ClientArea[1] + 60, "size.synthiccframe.w": self.GetMinSize()[0], "size.synthiccframe.h": self.GetMinSize()[1]}) if (hascfg("position.synthiccframe.x") and hascfg("position.synthiccframe.y") and hascfg("size.synthiccframe.w") and hascfg("size.synthiccframe.h")): self.SetSaneGeometry(int(getcfg("position.synthiccframe.x")), int(getcfg("position.synthiccframe.y")), int(getcfg("size.synthiccframe.w")), int(getcfg("size.synthiccframe.h"))) else: self.Center() def OnClose(self, event=None): if (self.IsShownOnScreen() and not self.IsMaximized() and not self.IsIconized()): x, y = self.GetScreenPosition() setcfg("position.synthiccframe.x", x) setcfg("position.synthiccframe.y", y) setcfg("size.synthiccframe.w", self.GetSize()[0]) setcfg("size.synthiccframe.h", self.GetSize()[1]) config.writecfg() if event: event.Skip() def blue_XYZ_ctrl_handler(self, event): self.parse_XYZ("blue") def blue_xy_ctrl_handler(self, event): self.parse_xy("blue") def drop_handler(self, path): pass def drop_unsupported_handler(self): pass def enable_save_as_btn(self): self.save_as_btn.Enable(bool(self.get_XYZ() and self.profile_name_textctrl.Value)) def get_XYZ(self): XYZ = {} for color in ("white", "red", "green", "blue"): for component in "XYZ": try: XYZ[color[0] + component] = float(getattr(self, "%s_%s" % (color, component)).Value.replace(",", ".")) / 100.0 except ValueError: pass if ("wX" in XYZ and "wY" in XYZ and "wZ" in XYZ and "rX" in XYZ and "rY" in XYZ and "rZ" in XYZ and "gX" in XYZ and "gY" in XYZ and "gZ" in XYZ and "bX" in XYZ and "bY" in XYZ and "bZ" in XYZ): return XYZ def green_XYZ_ctrl_handler(self, event): self.parse_XYZ("green") def green_xy_ctrl_handler(self, event): self.parse_xy("green") def parse_XYZ(self, name): if not self._updating_ctrls: self.preset_ctrl.SetSelection(0) XYZ = {} for component in "XYZ": try: XYZ[component] = float(getattr(self, "%s_%s" % (name, component)).Value.replace(",", ".")) except ValueError: pass if "X" in XYZ and "Y" in XYZ and "Z" in XYZ: xyY = colormath.XYZ2xyY(XYZ["X"], XYZ["Y"], XYZ["Z"]) for i, component in enumerate("xy"): getattr(self, "%s_%s" % (name, component)).ChangeValue(str(xyY[i])) self.enable_save_as_btn() def parse_xy(self, name): if not self._updating_ctrls: self.preset_ctrl.SetSelection(0) xy = {} for color in ("white", "red", "green", "blue"): for component in "xy": try: xy[color[0] + component] = float(getattr(self, "%s_%s" % (color, component)).Value.replace(",", ".")) except ValueError: pass if "wx" in xy and "wy" in xy: wXYZ = colormath.xyY2XYZ(xy["wx"], xy["wy"], 1.0) for i, component in enumerate("XYZ"): getattr(self, "white_%s" % component).ChangeValue(str(wXYZ[i] * 100)) has_rgb_xy = ("rx" in xy and "ry" in xy and "gx" in xy and "gy" in xy and "bx" in xy and "by" in xy) if name != "white" and has_rgb_xy: # Calculate RGB to XYZ matrix from chromaticities and white mtx = colormath.rgb_to_xyz_matrix(xy["rx"], xy["ry"], xy["gx"], xy["gy"], xy["bx"], xy["by"], wXYZ) rgb = {"r": (1.0, 0.0, 0.0), "g": (0.0, 1.0, 0.0), "b": (0.0, 0.0, 1.0)} XYZ = {} for color in ("red", "green", "blue"): # Calculate XYZ for primaries XYZ[color[0]] = mtx * rgb[color[0]] for i, component in enumerate("XYZ"): getattr(self, "%s_%s" % (color, component)).ChangeValue(str(XYZ[color[0]][i] * 100)) self.enable_save_as_btn() def preset_ctrl_handler(self, event): preset_name = self.preset_ctrl.GetStringSelection() if preset_name: gamma, white, red, green, blue = colormath.rgb_spaces[preset_name] white = colormath.get_whitepoint(white) self._updating_ctrls = True for i, component in enumerate("XYZ"): getattr(self, "white_%s" % component).SetValue(str(white[i] * 100)) for color in ("red", "green", "blue"): for i, component in enumerate("xy"): getattr(self, "%s_%s" % (color, component)).SetValue(str(locals()[color][i])) if gamma == -3.0: # L* self.trc_ctrl.SetSelection(1) elif gamma == -709: # Rec. 709 self.trc_ctrl.SetSelection(2) elif gamma == -240: # SMPTE 240M self.trc_ctrl.SetSelection(3) elif gamma == -2.4: # sRGB self.trc_ctrl.SetSelection(4) else: # Gamma self.trc_ctrl.SetSelection(0) self.trc_textctrl.SetValue(str(gamma)) self.trc_ctrl_handler() self._updating_ctrls = False self.profile_name_textctrl.SetValue(preset_name) def profile_ctrl_handler(self, event): pass def profile_name_ctrl_handler(self, event): self.enable_save_as_btn() def red_XYZ_ctrl_handler(self, event): self.parse_XYZ("red") def red_xy_ctrl_handler(self, event): self.parse_xy("red") def save_as_btn_handler(self, event): XYZ = self.get_XYZ() if self.trc_ctrl.GetSelection() == 0: # Gamma try: trc = float(self.trc_textctrl.Value) except ValueError: wx.Bell() trc = 2.2 self.trc_textctrl.Value = str(trc) elif self.trc_ctrl.GetSelection() == 1: # L* trc = -3.0 elif self.trc_ctrl.GetSelection() == 2: # Rec. 709 trc = -709 elif self.trc_ctrl.GetSelection() == 3: # SMPTE 240M trc = -240 elif self.trc_ctrl.GetSelection() == 4: # sRGB trc = -2.4 defaultDir, defaultFile = get_verified_path("last_icc_path") defaultFile = self.profile_name_textctrl.Value profile = ICCP.ICCProfile.from_XYZ((XYZ["rX"], XYZ["rY"], XYZ["rZ"]), (XYZ["gX"], XYZ["gY"], XYZ["gZ"]), (XYZ["bX"], XYZ["bY"], XYZ["bZ"]), (XYZ["wX"], XYZ["wY"], XYZ["wZ"]), trc, defaultFile, getcfg("copyright")) path = None dlg = wx.FileDialog(self, lang.getstr("save_as"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard="*.icc", style=wx.SAVE | wx.FD_OVERWRITE_PROMPT) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if os.path.splitext(path)[1].lower() not in (".icc", ".icm"): path += ".icc" if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return setcfg("last_icc_path", path) config.writecfg() try: profile.write(path) except Exception, exception: show_result_dialog(exception, self) def setup_language(self): BaseFrame.setup_language(self) # Create the file picker ctrls dynamically to get translated strings if sys.platform in ("darwin", "win32"): origpickerctrl = self.FindWindowByName("profile_ctrl") sizer = origpickerctrl.GetContainingSizer() self.profile_ctrl = wx.FilePickerCtrl(self.panel, -1, "", message=lang.getstr("profile"), wildcard=lang.getstr("filetype.icc") + "|*.icc;*.icm", name="profile_ctrl") self.profile_ctrl.PickerCtrl.Label = lang.getstr("browse") self.profile_ctrl.PickerCtrl.SetMaxFontSize(11) sizer.Replace(origpickerctrl, self.profile_ctrl) origpickerctrl.Destroy() sizer.Layout() self.profile_ctrl.Bind(wx.EVT_FILEPICKER_CHANGED, self.profile_ctrl_handler) self.profile_ctrl_label.Hide() self.profile_ctrl.Hide() # Drop targets self.droptarget = FileDrop() self.droptarget.drophandlers = {".icc": self.drop_handler, ".icm": self.drop_handler} self.droptarget.unsupported_handler = self.drop_unsupported_handler self.profile_ctrl.SetDropTarget(self.droptarget) items = [] for item in self.trc_ctrl.Items: items.append(lang.getstr(item)) self.trc_ctrl.SetItems(items) self.trc_ctrl.SetSelection(0) def trc_ctrl_handler(self, event=None): if not self._updating_ctrls: self.preset_ctrl.SetSelection(0) self.panel.Freeze() self.trc_textctrl.Show(self.trc_ctrl.GetSelection() == 0) self.panel.GetSizer().Layout() self.panel.Thaw() def trc_textctrl_handler(self, event=None): if not self._updating_ctrls: self.preset_ctrl.SetSelection(0) def update_controls(self): """ Update controls with values from the configuration """ pass def white_XYZ_ctrl_handler(self, event): self.parse_XYZ("white") def white_xy_ctrl_handler(self, event): self.parse_xy("white") def main(): config.initcfg() lang.init() lang.update_defaults() app = wx.App(0) app.synthiccframe = SynthICCFrame() app.synthiccframe.Show() app.MainLoop() if __name__ == "__main__": main() dispcalGUI-1.7.1.6/dispcalGUI/wxTestchartEditor.py000644 000765 000000 00000320710 12266603364 021656 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import math import os import re import shutil import sys import CGATS import ICCProfile as ICCP import colormath import config import localization as lang from argyll_RGB2XYZ import RGB2XYZ as argyll_RGB2XYZ, XYZ2RGB as argyll_XYZ2RGB from argyll_cgats import ti3_to_ti1, verify_ti1_rgb_xyz from config import (btn_width_correction, defaults, getcfg, geticon, get_bitmap_as_icon, get_current_profile, get_data_path, get_total_patches, get_verified_path, hascfg, setcfg, writecfg) from debughelpers import handle_error from log import safe_print from meta import name as appname from options import debug, tc_use_alternate_preview, test, verbose from ordereddict import OrderedDict from util_io import StringIOu as StringIO from util_os import waccess from util_str import safe_str, safe_unicode from worker import (Error, Worker, check_file_isfile, check_set_argyll_bin, get_argyll_util, show_result_dialog) from wxaddons import CustomEvent, CustomGridCellEvent, FileDrop, wx from wxwindows import (ConfirmDialog, FileBrowseBitmapButtonWithChoiceHistory, InfoDialog) try: import wx.lib.agw.floatspin as floatspin except ImportError: import floatspin from wxMeasureFrame import get_default_size def swap_dict_keys_values(mydict): return dict([(v, k) for (k, v) in mydict.iteritems()]) class TestchartEditor(wx.Frame): def __init__(self, parent = None, id = -1, path=None, cfg=None, target=None): wx.Frame.__init__(self, parent, id, lang.getstr("testchart.edit")) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.Bind(wx.EVT_CLOSE, self.tc_close_handler) self.tc_algos_ab = { "": lang.getstr("tc.ofp"), "t": lang.getstr("tc.t"), "r": lang.getstr("tc.r"), "R": lang.getstr("tc.R"), "q": lang.getstr("tc.q"), "i": lang.getstr("tc.i"), "I": lang.getstr("tc.I") } self.worker = Worker() self.worker.set_argyll_version("targen") if self.worker.argyll_version >= [1, 1, 0]: self.tc_algos_ab["Q"] = lang.getstr("tc.Q") self.tc_algos_ba = swap_dict_keys_values(self.tc_algos_ab) self.droptarget = FileDrop() self.droptarget.drophandlers = { ".cgats": self.ti1_drop_handler, ".icc": self.ti1_drop_handler, ".icm": self.ti1_drop_handler, ".ti1": self.ti1_drop_handler, ".ti3": self.ti1_drop_handler, ".txt": self.ti1_drop_handler } self.droptarget.unsupported_handler = self.drop_unsupported_handler if tc_use_alternate_preview: # splitter splitter = self.splitter = wx.SplitterWindow(self, -1, style = wx.SP_LIVE_UPDATE | wx.SP_3D) self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.tc_sash_handler, splitter) self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGING, self.tc_sash_handler, splitter) p1 = wx.Panel(splitter) p1.sizer = wx.BoxSizer(wx.VERTICAL) p1.SetSizer(p1.sizer) p2 = wx.Panel(splitter) # Setting a droptarget seems to cause crash when destroying ##p2.SetDropTarget(self.droptarget) p2.sizer = wx.BoxSizer(wx.VERTICAL) p2.SetSizer(p2.sizer) splitter.SetMinimumPaneSize(20) splitter.SplitHorizontally(p1, p2, -150) # splitter end panel = self.panel = p1 else: panel = self.panel = wx.Panel(self) panel.SetDropTarget(self.droptarget) self.sizer = wx.BoxSizer(wx.VERTICAL) panel.SetSizer(self.sizer) border = 4 sizer = wx.FlexGridSizer(0, 4) self.sizer.Add(sizer, flag = (wx.ALL & ~wx.BOTTOM), border = 12) # white patches sizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.white")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_white_patches = wx.SpinCtrl(panel, -1, size = (65, -1), min = 0, name = "tc_white_patches") self.Bind(wx.EVT_TEXT, self.tc_white_patches_handler, id = self.tc_white_patches.GetId()) sizer.Add(self.tc_white_patches, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # single channel patches sizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.single")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, border = border) self.tc_single_channel_patches = wx.SpinCtrl(panel, -1, size = (65, -1), min = 0, max = 256, name = "tc_single_channel_patches") self.tc_single_channel_patches.Bind(wx.EVT_KILL_FOCUS, self.tc_single_channel_patches_handler) self.Bind(wx.EVT_SPINCTRL, self.tc_single_channel_patches_handler, id = self.tc_single_channel_patches.GetId()) hsizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(hsizer) hsizer.Add(self.tc_single_channel_patches, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) hsizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.single.perchannel")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # black patches if self.worker.argyll_version >= [1, 6]: hsizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.black")), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, border=border) self.tc_black_patches = wx.SpinCtrl(panel, -1, size=(65, -1), min=0, name="tc_black_patches") self.Bind(wx.EVT_TEXT, self.tc_black_patches_handler, id=self.tc_black_patches.GetId()) hsizer.Add(self.tc_black_patches, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # gray axis patches sizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.gray")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_gray_patches = wx.SpinCtrl(panel, -1, size = (65, -1), min = 0, max = 256, name = "tc_gray_patches") self.tc_gray_patches.Bind(wx.EVT_KILL_FOCUS, self.tc_gray_handler) self.Bind(wx.EVT_SPINCTRL, self.tc_gray_handler, id = self.tc_gray_patches.GetId()) sizer.Add(self.tc_gray_patches, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # multidim steps sizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.multidim")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, border = border) hsizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(hsizer) self.tc_multi_steps = wx.SpinCtrl(panel, -1, size = (65, -1), min = 0, max = 21, name = "tc_multi_steps") # 16 multi dim steps = 4096 patches self.tc_multi_steps.Bind(wx.EVT_KILL_FOCUS, self.tc_multi_steps_handler) self.Bind(wx.EVT_SPINCTRL, self.tc_multi_steps_handler, id = self.tc_multi_steps.GetId()) hsizer.Add(self.tc_multi_steps, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) if self.worker.argyll_version >= [1, 6, 0]: self.tc_multi_bcc_cb = wx.CheckBox(panel, -1, lang.getstr("centered")) self.tc_multi_bcc_cb.Bind(wx.EVT_CHECKBOX, self.tc_multi_bcc_cb_handler) hsizer.Add(self.tc_multi_bcc_cb, flag=wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=border) self.tc_multi_patches = wx.StaticText(panel, -1, "", name = "tc_multi_patches") hsizer.Add(self.tc_multi_patches, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # full spread patches sizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.fullspread")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_fullspread_patches = wx.SpinCtrl(panel, -1, size = (65, -1), min = 0, max = 9999, name = "tc_fullspread_patches") self.Bind(wx.EVT_TEXT, self.tc_fullspread_handler, id = self.tc_fullspread_patches.GetId()) sizer.Add(self.tc_fullspread_patches, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # algo algos = self.tc_algos_ab.values() algos.sort() sizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.algo")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, border = border) self.tc_algo = wx.Choice(panel, -1, choices = algos, name = "tc_algo") self.tc_algo.Disable() self.Bind(wx.EVT_CHOICE, self.tc_algo_handler, id = self.tc_algo.GetId()) sizer.Add(self.tc_algo, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # adaption hsizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(hsizer, 1, flag = wx.EXPAND) hsizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.adaption")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_adaption_slider = wx.Slider(panel, -1, 0, 0, 100, size = (64, -1), name = "tc_adaption_slider") self.tc_adaption_slider.Disable() self.Bind(wx.EVT_SLIDER, self.tc_adaption_handler, id = self.tc_adaption_slider.GetId()) hsizer.Add(self.tc_adaption_slider, flag = wx.ALIGN_CENTER_VERTICAL) self.tc_adaption_intctrl = wx.SpinCtrl(panel, -1, size = (65, -1), min = 0, max = 100, name = "tc_adaption_intctrl") self.tc_adaption_intctrl.Disable() self.Bind(wx.EVT_TEXT, self.tc_adaption_handler, id = self.tc_adaption_intctrl.GetId()) sizer.Add(self.tc_adaption_intctrl, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) hsizer = wx.GridSizer(0, 2) sizer.Add(hsizer, 1, flag = wx.EXPAND) hsizer.Add(wx.StaticText(panel, -1, "%"), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) hsizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.angle")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, border = border) # angle hsizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(hsizer, 1, flag = wx.EXPAND) self.tc_angle_slider = wx.Slider(panel, -1, 0, 0, 5000, size = (128, -1), name = "tc_angle_slider") self.tc_angle_slider.Disable() self.Bind(wx.EVT_SLIDER, self.tc_angle_handler, id = self.tc_angle_slider.GetId()) hsizer.Add(self.tc_angle_slider, flag = wx.ALIGN_CENTER_VERTICAL) self.tc_angle_intctrl = wx.SpinCtrl(panel, -1, size = (75, -1), min = 0, max = 5000, name = "tc_angle_intctrl") self.tc_angle_intctrl.Disable() self.Bind(wx.EVT_TEXT, self.tc_angle_handler, id = self.tc_angle_intctrl.GetId()) hsizer.Add(self.tc_angle_intctrl, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # gamma if (self.worker.argyll_version == [1, 1, "RC2"] or self.worker.argyll_version >= [1, 1]): sizer.Add(wx.StaticText(panel, -1, lang.getstr("trc.gamma")), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.tc_gamma_floatctrl = floatspin.FloatSpin(panel, -1, size=(65, -1), min_val=0.0, max_val=9.9, increment=0.05, digits=2, name="tc_gamma_floatctrl") self.Bind(floatspin.EVT_FLOATSPIN, self.tc_gamma_handler, id=self.tc_gamma_floatctrl.GetId()) sizer.Add(self.tc_gamma_floatctrl, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # neutral axis emphasis if self.worker.argyll_version >= [1, 3, 3]: sizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.neutral_axis_emphasis")), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, border=border) hsizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(hsizer, 1, flag = wx.EXPAND) self.tc_neutral_axis_emphasis_slider = wx.Slider(panel, -1, 0, 0, 100, size=(64, -1), name="tc_neutral_axis_emphasis_slider") self.tc_neutral_axis_emphasis_slider.Disable() self.Bind(wx.EVT_SLIDER, self.tc_neutral_axis_emphasis_handler, id=self.tc_neutral_axis_emphasis_slider.GetId()) hsizer.Add(self.tc_neutral_axis_emphasis_slider, flag=wx.ALIGN_CENTER_VERTICAL) self.tc_neutral_axis_emphasis_intctrl = wx.SpinCtrl(panel, -1, size=(65, -1), min=0, max=100, name="tc_neutral_axis_emphasis_intctrl") self.tc_neutral_axis_emphasis_intctrl.Disable() self.Bind(wx.EVT_TEXT, self.tc_neutral_axis_emphasis_handler, id=self.tc_neutral_axis_emphasis_intctrl.GetId()) hsizer.Add(self.tc_neutral_axis_emphasis_intctrl, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) hsizer.Add(wx.StaticText(panel, -1, "%"), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # dark patch emphasis if self.worker.argyll_version >= [1, 6, 2]: hsizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.dark_emphasis")), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, border=border) self.tc_dark_emphasis_slider = wx.Slider(panel, -1, 0, 0, 100, size=(64, -1), name="tc_dark_emphasis_slider") self.tc_dark_emphasis_slider.Disable() self.Bind(wx.EVT_SLIDER, self.tc_dark_emphasis_handler, id=self.tc_dark_emphasis_slider.GetId()) hsizer.Add(self.tc_dark_emphasis_slider, flag=wx.ALIGN_CENTER_VERTICAL) self.tc_dark_emphasis_intctrl = wx.SpinCtrl(panel, -1, size=(65, -1), min=0, max=100, name="tc_dark_emphasis_intctrl") self.tc_dark_emphasis_intctrl.Disable() self.Bind(wx.EVT_TEXT, self.tc_dark_emphasis_handler, id=self.tc_dark_emphasis_intctrl.GetId()) hsizer.Add(self.tc_dark_emphasis_intctrl, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) hsizer.Add(wx.StaticText(panel, -1, "%"), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # precond profile hsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(hsizer, flag = wx.ALL & ~(wx.BOTTOM | wx.TOP) | wx.EXPAND, border = 12) self.tc_precond = wx.CheckBox(panel, -1, lang.getstr("tc.precond"), name = "tc_precond") self.tc_precond.Disable() self.Bind(wx.EVT_CHECKBOX, self.tc_precond_handler, id = self.tc_precond.GetId()) hsizer.Add(self.tc_precond, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_precond_profile = FileBrowseBitmapButtonWithChoiceHistory( panel, -1, toolTip=lang.getstr("tc.precond"), dialogTitle=lang.getstr("tc.precond"), fileMask=lang.getstr("filetype.icc_mpp") + "|*.icc;*.icm;*.mpp", changeCallback=self.tc_precond_profile_handler, history=get_data_path("ref", "\.(icm|icc)$")) self.tc_precond_profile.SetMaxFontSize(11) hsizer.Add(self.tc_precond_profile, 1, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_precond_profile_current_btn = wx.Button(panel, -1, lang.getstr("profile.current"), name="tc_precond_profile_current") self.Bind(wx.EVT_BUTTON, self.tc_precond_profile_current_ctrl_handler, id=self.tc_precond_profile_current_btn.GetId()) hsizer.Add(self.tc_precond_profile_current_btn, 0, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # limit samples to lab sphere hsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(hsizer, flag = wx.ALL & ~(wx.BOTTOM | wx.TOP), border = 12) self.tc_filter = wx.CheckBox(panel, -1, lang.getstr("tc.limit.sphere"), name = "tc_filter") self.Bind(wx.EVT_CHECKBOX, self.tc_filter_handler, id = self.tc_filter.GetId()) hsizer.Add(self.tc_filter, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # L hsizer.Add(wx.StaticText(panel, -1, "L"), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_filter_L = wx.SpinCtrl(panel, -1, initial = 50, size = (65, -1), min = 0, max = 100, name = "tc_filter_L") self.Bind(wx.EVT_TEXT, self.tc_filter_handler, id = self.tc_filter_L.GetId()) hsizer.Add(self.tc_filter_L, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # a hsizer.Add(wx.StaticText(panel, -1, "a"), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_filter_a = wx.SpinCtrl(panel, -1, initial = 0, size = (65, -1), min = -128, max = 127, name = "tc_filter_a") self.Bind(wx.EVT_TEXT, self.tc_filter_handler, id = self.tc_filter_a.GetId()) hsizer.Add(self.tc_filter_a, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # b hsizer.Add(wx.StaticText(panel, -1, "b"), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_filter_b = wx.SpinCtrl(panel, -1, initial = 0, size = (65, -1), min = -128, max = 127, name = "tc_filter_b") self.Bind(wx.EVT_TEXT, self.tc_filter_handler, id = self.tc_filter_b.GetId()) hsizer.Add(self.tc_filter_b, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # radius hsizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.limit.sphere_radius")), flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.tc_filter_rad = wx.SpinCtrl(panel, -1, initial = 255, size = (65, -1), min = 1, max = 255, name = "tc_filter_rad") self.Bind(wx.EVT_TEXT, self.tc_filter_handler, id = self.tc_filter_rad.GetId()) hsizer.Add(self.tc_filter_rad, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # diagnostic VRML files hsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(hsizer, flag = wx.ALL & ~(wx.BOTTOM | wx.TOP), border = 12 + border) self.tc_vrml_label = wx.StaticText(panel, -1, lang.getstr("tc.vrml"), name = "tc_vrml_label") hsizer.Add(self.tc_vrml_label, flag = (wx.ALL & ~wx.LEFT) | wx.ALIGN_CENTER_VERTICAL, border = border * 2) self.tc_vrml_lab = wx.CheckBox(panel, -1, lang.getstr("tc.vrml.lab"), name = "tc_vrml_lab", style = wx.RB_GROUP) self.Bind(wx.EVT_CHECKBOX, self.tc_vrml_handler, id = self.tc_vrml_lab.GetId()) hsizer.Add(self.tc_vrml_lab, flag = (wx.ALL & ~wx.LEFT) | wx.ALIGN_CENTER_VERTICAL, border = border * 2) self.tc_vrml_device = wx.CheckBox(panel, -1, lang.getstr("tc.vrml.device"), name = "tc_vrml_device") self.Bind(wx.EVT_CHECKBOX, self.tc_vrml_handler, id = self.tc_vrml_device.GetId()) hsizer.Add(self.tc_vrml_device, flag = (wx.ALL & ~wx.LEFT) | wx.ALIGN_CENTER_VERTICAL, border = border * 2) hsizer.Add(wx.StaticText(panel, -1, lang.getstr("tc.vrml.black_offset")), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.tc_vrml_black_offset_intctrl = wx.SpinCtrl(panel, -1, size=(55, -1), min=0, max=40, name="tc_vrml_black_offset_intctrl") self.Bind(wx.EVT_TEXT, self.tc_vrml_black_offset_ctrl_handler, id=self.tc_vrml_black_offset_intctrl.GetId()) hsizer.Add(self.tc_vrml_black_offset_intctrl, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.tc_vrml_use_D50_cb = wx.CheckBox(panel, -1, lang.getstr("tc.vrml.use_D50"), name="tc_vrml_use_D50_cb") self.Bind(wx.EVT_CHECKBOX, self.tc_vrml_use_D50_handler, id=self.tc_vrml_use_D50_cb.GetId()) hsizer.Add(self.tc_vrml_use_D50_cb, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.tc_vrml_compress_cb = wx.CheckBox(panel, -1, lang.getstr("compression.gzip"), name="tc_vrml_compress_cb") self.Bind(wx.EVT_CHECKBOX, self.tc_vrml_compress_handler, id=self.tc_vrml_compress_cb.GetId()) hsizer.Add(self.tc_vrml_compress_cb, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # buttons hsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(hsizer, flag = (wx.ALL & ~wx.BOTTOM) | wx.ALIGN_CENTER, border = 12) self.preview_btn = wx.Button(panel, -1, lang.getstr("testchart.create"), name = "tc_create") self.preview_btn.SetInitialSize((self.preview_btn.GetSize()[0] + btn_width_correction, -1)) self.Bind(wx.EVT_BUTTON, self.tc_preview_handler, id = self.preview_btn.GetId()) hsizer.Add(self.preview_btn, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.save_btn = wx.Button(panel, -1, lang.getstr("testchart.save")) self.save_btn.SetInitialSize((self.save_btn.GetSize()[0] + btn_width_correction, -1)) self.save_btn.Disable() self.Bind(wx.EVT_BUTTON, self.tc_save_handler, id = self.save_btn.GetId()) hsizer.Add(self.save_btn, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.save_as_btn = wx.Button(panel, -1, lang.getstr("testchart.save_as")) self.save_as_btn.SetInitialSize((self.save_as_btn.GetSize()[0] + btn_width_correction, -1)) self.save_as_btn.Disable() self.Bind(wx.EVT_BUTTON, self.tc_save_as_handler, id = self.save_as_btn.GetId()) hsizer.Add(self.save_as_btn, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.export_btn = wx.Button(panel, -1, lang.getstr("export"), name = "tc_export") self.export_btn.SetInitialSize((self.export_btn.GetSize()[0] + btn_width_correction, -1)) self.export_btn.Disable() self.Bind(wx.EVT_BUTTON, self.tc_export_handler, id = self.export_btn.GetId()) hsizer.Add(self.export_btn, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.vrml_save_as_btn = wx.Button(panel, -1, lang.getstr("tc.vrml.save_as")) self.vrml_save_as_btn.SetInitialSize((self.vrml_save_as_btn.GetSize()[0] + btn_width_correction, -1)) self.vrml_save_as_btn.Disable() self.Bind(wx.EVT_BUTTON, self.tc_vrml_save_as_handler, id = self.vrml_save_as_btn.GetId()) hsizer.Add(self.vrml_save_as_btn, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) self.clear_btn = wx.Button(panel, -1, lang.getstr("testchart.discard"), name = "tc_clear") self.clear_btn.SetInitialSize((self.clear_btn.GetSize()[0] + btn_width_correction, -1)) self.clear_btn.Disable() self.Bind(wx.EVT_BUTTON, self.tc_clear_handler, id = self.clear_btn.GetId()) hsizer.Add(self.clear_btn, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = border) # buttons row 2 hsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(hsizer, flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, border=12) hsizer.Add(wx.StaticText(panel, -1, lang.getstr("testchart.add_saturation_sweeps")), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.saturation_sweeps_intctrl = wx.SpinCtrl(panel, -1, size=(50, -1), initial=getcfg("tc.saturation_sweeps"), min=2, max=255) self.saturation_sweeps_intctrl.Disable() hsizer.Add(self.saturation_sweeps_intctrl, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) for color in ("R", "G", "B", "C", "M", "Y"): name = "saturation_sweeps_%s_btn" % color setattr(self, name, wx.Button(panel, -1, color, size=(30, -1))) getattr(self, "saturation_sweeps_%s_btn" % color).Disable() self.Bind(wx.EVT_BUTTON, self.tc_add_saturation_sweeps_handler, id=getattr(self, name).GetId()) hsizer.Add(getattr(self, name), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.saturation_sweeps_custom_btn = wx.Button(panel, -1, lang.getstr("color.custom")) self.saturation_sweeps_custom_btn.Disable() self.Bind(wx.EVT_BUTTON, self.tc_add_saturation_sweeps_handler, id=self.saturation_sweeps_custom_btn.GetId()) hsizer.Add(self.saturation_sweeps_custom_btn, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) for component in ("R", "G", "B"): hsizer.Add(wx.StaticText(panel, -1, component), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) name = "saturation_sweeps_custom_%s_ctrl" % component setattr(self, name, floatspin.FloatSpin(panel, -1, size=(65, -1), value=getcfg("tc.saturation_sweeps.custom.%s" % component), min_val=0, max_val=100, increment=100.0 / 255, digits=2)) getattr(self, "saturation_sweeps_custom_%s_ctrl" % component).Disable() self.Bind(floatspin.EVT_FLOATSPIN, self.tc_algo_handler, id=getattr(self, name).GetId()) hsizer.Add(getattr(self, name), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # buttons row 3 hsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(hsizer, flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, border=12) self.add_ti3_btn = wx.Button(panel, -1, lang.getstr("testchart.add_ti3_patches")) self.add_ti3_btn.SetInitialSize((self.add_ti3_btn.GetSize()[0] + btn_width_correction, -1)) self.add_ti3_btn.Disable() self.Bind(wx.EVT_BUTTON, self.tc_add_ti3_handler, id=self.add_ti3_btn.GetId()) hsizer.Add(self.add_ti3_btn, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.add_ti3_relative_cb = wx.CheckBox(panel, -1, lang.getstr("whitepoint.simulate.relative")) self.add_ti3_relative_cb.Disable() self.Bind(wx.EVT_CHECKBOX, self.tc_add_ti3_relative_handler, id=self.add_ti3_relative_cb.GetId()) hsizer.Add(self.add_ti3_relative_cb, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) hsizer.Add((50, 1)) hsizer.Add(wx.StaticText(panel, -1, lang.getstr("testchart.change_patch_order")), flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) patch_order_choices = [] for lstr in ("testchart.sort_RGB_gray_to_top", "testchart.sort_RGB_white_to_top", "testchart.sort_by_HSV", "testchart.sort_by_L", "testchart.sort_by_RGB", "testchart.sort_by_RGB_sum", "testchart.optimize_for_untethered_auto_mode"): patch_order_choices.append(lang.getstr(lstr)) self.change_patch_order_ctrl = wx.Choice(panel, -1, choices=patch_order_choices) self.change_patch_order_ctrl.SetSelection(0) hsizer.Add(self.change_patch_order_ctrl, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) self.change_patch_order_btn = wx.Button(panel, -1, lang.getstr("apply")) self.Bind(wx.EVT_BUTTON, self.tc_sort_handler, id=self.change_patch_order_btn.GetId()) hsizer.Add(self.change_patch_order_btn, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=border) # grid self.grid = wx.grid.Grid(panel, -1, size = (-1, 150), style = wx.BORDER_STATIC) self.grid.select_in_progress = False self.sizer.Add(self.grid, 1, flag = wx.ALL | wx.EXPAND, border = 12 + border) self.grid.CreateGrid(0, 0) self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.tc_grid_cell_change_handler) self.grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK, self.tc_grid_label_left_click_handler) self.grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_DCLICK, self.tc_grid_label_left_dclick_handler) self.grid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.tc_grid_cell_left_click_handler) self.grid.Bind(wx.grid.EVT_GRID_RANGE_SELECT, self.tc_grid_range_select_handler) self.grid.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.tc_grid_cell_select_handler) self.grid.DisableDragRowSize() # preview area if tc_use_alternate_preview: hsizer = wx.StaticBoxSizer(wx.StaticBox(p2, -1, lang.getstr("preview")), wx.VERTICAL) p2.sizer.Add(hsizer, 1, flag = wx.ALL | wx.ALIGN_CENTER | wx.EXPAND, border = 12) preview = self.preview = wx.ScrolledWindow(p2, -1, style = wx.VSCROLL) preview.Bind(wx.EVT_ENTER_WINDOW, self.tc_set_default_status, id = preview.GetId()) hsizer.Add(preview, 1, wx.EXPAND) preview.sizer = wx.BoxSizer(wx.VERTICAL) preview.SetSizer(preview.sizer) self.patchsizer = wx.GridSizer(0, 0) preview.sizer.Add(self.patchsizer) preview.SetMinSize((-1, 100)) panel.Bind(wx.EVT_ENTER_WINDOW, self.tc_set_default_status, id = panel.GetId()) # status status = wx.StatusBar(self, -1) self.SetStatusBar(status) # layout self.sizer.SetSizeHints(self) self.sizer.Layout() if tc_use_alternate_preview: self.SetMinSize((self.GetMinSize()[0], self.GetMinSize()[1] + 150)) defaults.update({ "position.tcgen.x": self.GetDisplay().ClientArea[0] + 40, "position.tcgen.y": self.GetDisplay().ClientArea[1] + 60, "size.tcgen.w": self.GetMinSize()[0], "size.tcgen.h": self.GetMinSize()[1] }) if hascfg("position.tcgen.x") and hascfg("position.tcgen.y") and hascfg("size.tcgen.w") and hascfg("size.tcgen.h"): self.SetSaneGeometry(int(getcfg("position.tcgen.x")), int(getcfg("position.tcgen.y")), int(getcfg("size.tcgen.w")), int(getcfg("size.tcgen.h"))) else: self.Center() self.tc_size_handler() children = self.GetAllChildren() for child in children: if hasattr(child, "SetFont"): child.SetMaxFontSize(11) child.Bind(wx.EVT_KEY_DOWN, self.tc_key_handler) self.Bind(wx.EVT_MOVE, self.tc_move_handler) self.Bind(wx.EVT_SIZE, self.tc_size_handler, self) self.Bind(wx.EVT_MAXIMIZE, self.tc_size_handler, self) self.Children[0].Bind(wx.EVT_WINDOW_DESTROY, self.tc_destroy_handler) wx.CallAfter(self.tc_load_cfg_from_ti1, None, path, cfg, target) def ti1_drop_handler(self, path): self.tc_load_cfg_from_ti1(None, path) def drop_unsupported_handler(self): if not self.worker.is_working(): files = self.droptarget._filenames InfoDialog(self, msg = lang.getstr("error.file_type_unsupported") + "\n\n" + "\n".join(files), ok = lang.getstr("ok"), bitmap = geticon(32, "dialog-error")) def tc_grid_cell_left_click_handler(self, event): event.Skip() def tc_grid_cell_select_handler(self, event): if debug: safe_print("[D] tc_grid_cell_select_handler") row, col = event.GetRow(), event.GetCol() if event.Selecting(): pass self.grid.SelectBlock(row, col, row, col) self.tc_grid_anchor_row = row event.Skip() def tc_grid_range_select_handler(self, event): if debug: safe_print("[D] tc_grid_range_select_handler") if not self.grid.select_in_progress: wx.CallAfter(self.tc_set_default_status) event.Skip() def tc_grid_label_left_click_handler(self, event): row, col = event.GetRow(), event.GetCol() if row == -1 and col > -1: # col label clicked self.grid.SetFocus() self.grid.SetGridCursor(max(self.grid.GetGridCursorRow(), 0), col) self.grid.MakeCellVisible(max(self.grid.GetGridCursorRow(), 0), col) elif col == -1 and row > -1: # row label clicked if self.tc_grid_select_row_handler(row, event.ShiftDown(), event.ControlDown() or event.CmdDown()): return event.Skip() def tc_grid_label_left_dclick_handler(self, event): row, col = event.GetRow(), event.GetCol() if col == -1: # row label clicked data = self.ti1.queryv1("DATA") wp = self.ti1.queryv1("APPROX_WHITE_POINT") if wp: wp = [float(v) for v in wp.split()] wp = [CGATS.rpad((v / wp[1]) * 100.0, data.vmaxlen) for v in wp] else: wp = colormath.get_standard_illuminant("D65", scale=100) newdata = { "SAMPLE_ID": row + 2, "RGB_R": 100.0, "RGB_G": 100.0, "RGB_B": 100.0, "XYZ_X": wp[0], "XYZ_Y": 100, "XYZ_Z": wp[2] } self.tc_add_data(row, [newdata]) event.Skip() def tc_grid_select_row_handler(self, row, shift = False, ctrl = False): if debug: safe_print("[D] tc_grid_select_row_handler") self.grid.SetFocus() if not shift and not ctrl: self.grid.SetGridCursor(row, max(self.grid.GetGridCursorCol(), 0)) self.grid.MakeCellVisible(row, max(self.grid.GetGridCursorCol(), 0)) self.grid.SelectRow(row) self.tc_grid_anchor_row = row if self.grid.IsSelection(): if shift: self.grid.select_in_progress = True rows = self.grid.GetSelectionRows() sel = range(min(self.tc_grid_anchor_row, row), max(self.tc_grid_anchor_row, row)) desel = [] add = [] for i in rows: if i not in sel: desel += [i] for i in sel: if i not in rows: add += [i] if len(desel) >= len(add): # in this case deselecting rows will take as long or longer than selecting, so use SelectRow to speed up the operation self.grid.SelectRow(row) else: for i in desel: self.grid.DeselectRow(i) for i in add: self.grid.SelectRow(i, True) self.grid.select_in_progress = False return False elif ctrl: if self.grid.IsInSelection(row, 0): self.grid.select_in_progress = True self.grid.DeselectRow(row) self.grid.select_in_progress = False self.tc_set_default_status() return True else: self.grid.SelectRow(row, True) return False def tc_key_handler(self, event): # AltDown # CmdDown # ControlDown # GetKeyCode # GetModifiers # GetPosition # GetRawKeyCode # GetRawKeyFlags # GetUniChar # GetUnicodeKey # GetX # GetY # HasModifiers # KeyCode # MetaDown # Modifiers # Position # RawKeyCode # RawKeyFlags # ShiftDown # UnicodeKey # X # Y if debug: safe_print("[D] event.KeyCode", event.GetKeyCode(), "event.RawKeyCode", event.GetRawKeyCode(), "event.UniChar", event.GetUniChar(), "event.UnicodeKey", event.GetUnicodeKey(), "CTRL/CMD:", event.ControlDown() or event.CmdDown(), "ALT:", event.AltDown(), "SHIFT:", event.ShiftDown()) if (event.ControlDown() or event.CmdDown()): # CTRL (Linux/Mac/Windows) / CMD (Mac) key = event.GetKeyCode() focus = self.FindFocus() if self.grid in (focus, focus.GetParent(), focus.GetGrandParent()): if key in (8, 127): # BACKSPACE / DEL rows = self.grid.GetSelectionRows() if rows and len(rows) and min(rows) >= 0 and max(rows) + 1 <= self.grid.GetNumberRows(): if len(rows) == self.grid.GetNumberRows(): self.tc_check_save_ti1() else: self.tc_delete_rows(rows) return elif key == 65: # A self.grid.SelectAll() return elif key in (67, 88): # C / X clip = [] cells = self.grid.GetSelection() i = -1 start_col = self.grid.GetNumberCols() for cell in cells: row = cell[0] col = cell[1] if i < row: clip += [[]] i = row if col < start_col: start_col = col while len(clip[-1]) - 1 < col: clip[-1] += [""] clip[-1][col] = self.grid.GetCellValue(row, col) for i, row in enumerate(clip): clip[i] = "\t".join(row[start_col:]) clipdata = wx.TextDataObject() clipdata.SetText("\n".join(clip)) wx.TheClipboard.Open() wx.TheClipboard.SetData(clipdata) wx.TheClipboard.Close() return elif key == 86: # V do = wx.TextDataObject() wx.TheClipboard.Open() success = wx.TheClipboard.GetData(do) wx.TheClipboard.Close() if success: txt = StringIO(do.GetText()) lines = txt.readlines() txt.close() for i, line in enumerate(lines): lines[i] = re.sub(" +", "\t", line).split("\t") # translate from selected cells into a grid with None values for not selected cells grid = [] cells = self.grid.GetSelection() i = -1 start_col = self.grid.GetNumberCols() for cell in cells: row = cell[0] col = cell[1] # Skip read-only cells if (self.grid.IsReadOnly(row, col) or not self.grid.GetColLabelValue(col)): continue if i < row: grid += [[]] i = row if col < start_col: start_col = col while len(grid[-1]) - 1 < col: grid[-1] += [None] grid[-1][col] = cell for i, row in enumerate(grid): grid[i] = row[start_col:] # 'paste' values from clipboard for i, row in enumerate(grid): for j, cell in enumerate(row): if cell != None and len(lines) > i and len(lines[i]) > j and self.grid.GetColLabelValue(j): self.grid.SetCellValue(cell[0], cell[1], lines[i][j]) self.tc_grid_cell_change_handler(CustomGridCellEvent(wx.grid.EVT_GRID_CELL_CHANGE.evtType[0], self.grid, cell[0], cell[1])) return if key == 83: # S if (hasattr(self, "ti1")): if event.ShiftDown() or event.AltDown() or not os.path.exists(self.ti1.filename): self.tc_save_as_handler() elif self.ti1.modified: self.tc_save_handler() return else: event.Skip() else: event.Skip() def tc_sash_handler(self, event): if event.GetSashPosition() < self.sizer.GetMinSize()[1]: self.splitter.SetSashPosition(self.sizer.GetMinSize()[1]) event.Skip() def tc_size_handler(self, event = None): if hasattr(self, "preview"): safe_margin = 5 scrollbarwidth = 20 self.patchsizer.SetCols((self.preview.GetSize()[0] - scrollbarwidth - safe_margin) / 20) if self.IsShownOnScreen() and not self.IsMaximized() and not self.IsIconized(): w, h = self.GetSize() setcfg("size.tcgen.w", w) setcfg("size.tcgen.h", h) if event: event.Skip() def tc_sort_handler(self, event): idx = self.change_patch_order_ctrl.GetSelection() if idx == 0: self.ti1.sort_RGB_gray_to_top() elif idx == 1: self.ti1.sort_RGB_white_to_top() elif idx == 2: self.ti1.sort_by_HSV() elif idx == 3: self.ti1.sort_by_L() elif idx == 4: self.ti1.sort_by_RGB() elif idx == 5: self.ti1.sort_by_RGB_sum() elif idx == 6: self.ti1.checkerboard() self.tc_clear(False) self.tc_preview(True) def tc_enable_sort_controls(self): enable = hasattr(self, "ti1") self.change_patch_order_ctrl.Enable(enable) self.change_patch_order_btn.Enable(enable) def tc_grid_cell_change_handler(self, event, save_check=True): data = self.ti1[0]["DATA"] sample = data[event.GetRow()] label = self.grid.GetColLabelValue(event.GetCol()) value = self.grid.GetCellValue(event.GetRow(), event.GetCol()).replace(",", ".") value_set = False try: value = float(value) except ValueError, exception: if label in self.ti1[0]["DATA_FORMAT"].values(): value = sample[label] else: value = "" else: if label in ("RGB_R", "RGB_G", "RGB_B"): if value > 100: value = 100.0 elif value < 0: value = 0.0 sample[label] = value # If the same RGB combo is already in the ti1, use its XYZ # TODO: Implement proper lookup when using precond profile # This costs too much performance when updating multiple cells! # (e.g. paste operation from spreadsheet) ##ref = data.queryi({"RGB_R": sample["RGB_R"], ##"RGB_G": sample["RGB_G"], ##"RGB_B": sample["RGB_B"]}) ##if ref: ##for i in ref: ##if ref[i] != sample: ##ref = ref[i] ##break ##if "XYZ_X" in ref: ##XYZ = [component / 100.0 for component in (ref["XYZ_X"], ref["XYZ_Y"], ref["XYZ_Z"])] ##else: # Fall back to default D65-ish values XYZ = argyll_RGB2XYZ(*[component / 100.0 for component in (sample["RGB_R"], sample["RGB_G"], sample["RGB_B"])]) sample["XYZ_X"], sample["XYZ_Y"], sample["XYZ_Z"] = [component * 100.0 for component in XYZ] for label in ("XYZ_X", "XYZ_Y", "XYZ_Z"): for col in range(self.grid.GetNumberCols()): if self.grid.GetColLabelValue(col) == label: self.grid.SetCellValue(event.GetRow(), col, str(round(sample[label], 4))) value_set = True elif label in ("XYZ_X", "XYZ_Y", "XYZ_Z"): # FIXME: Should this be removed? There are no XYZ fields in the editor if value < 0: value = 0.0 sample[label] = value RGB = argyll_XYZ2RGB(*[component / 100.0 for component in (sample["XYZ_X"], sample["XYZ_Y"], sample["XYZ_Z"])]) sample["RGB_R"], sample["RGB_G"], sample["RGB_B"] = [component * 100.0 for component in RGB] for label in ("RGB_R", "RGB_G", "RGB_B"): for col in range(self.grid.GetNumberCols()): if self.grid.GetColLabelValue(col) == label: self.grid.SetCellValue(event.GetRow(), col, str(round(sample[label], 4))) value_set = True self.tc_grid_setcolorlabel(event.GetRow()) if save_check: self.tc_save_check() if hasattr(self, "preview"): patch = self.patchsizer.GetItem(event.GetRow()).GetWindow() self.tc_patch_setcolorlabel(patch) patch.Refresh() if not value_set: self.grid.SetCellValue(event.GetRow(), event.GetCol(), CGATS.rcut(value, sample.parent.vmaxlen)) def tc_white_patches_handler(self, event = None): setcfg("tc_white_patches", self.tc_white_patches.GetValue()) self.tc_check() if event: event.Skip() def tc_black_patches_handler(self, event = None): setcfg("tc_black_patches", self.tc_black_patches.GetValue()) self.tc_check() if event: event.Skip() def tc_single_channel_patches_handler(self, event = None): if event: event = CustomEvent(event.GetEventType(), event.GetEventObject()) if event and event.GetEventType() == wx.EVT_TEXT.evtType[0]: wx.CallLater(3000, self.tc_single_channel_patches_handler2, event) # 3 seconds delay to allow user to finish keying in a value before it is validated else: wx.CallAfter(self.tc_single_channel_patches_handler2, event) def tc_single_channel_patches_handler2(self, event = None): if self.tc_single_channel_patches.GetValue() == 1: if event and event.GetEventType() in (0, wx.EVT_SPINCTRL.evtType[0]) and getcfg("tc_single_channel_patches") == 2: # decrease self.tc_single_channel_patches.SetValue(0) else: # increase self.tc_single_channel_patches.SetValue(2) setcfg("tc_single_channel_patches", self.tc_single_channel_patches.GetValue()) self.tc_check() def tc_gray_handler(self, event = None): if event: event = CustomEvent(event.GetEventType(), event.GetEventObject()) if event and event.GetEventType() == wx.EVT_TEXT.evtType[0]: wx.CallLater(3000, self.tc_gray_handler2, event) # 3 seconds delay to allow user to finish keying in a value before it is validated else: wx.CallAfter(self.tc_gray_handler2, event) def tc_gray_handler2(self, event = None): if self.tc_gray_patches.GetValue() == 1: if event and event.GetEventType() in (0, wx.EVT_SPINCTRL.evtType[0]) and getcfg("tc_gray_patches") == 2: # decrease self.tc_gray_patches.SetValue(0) else: # increase self.tc_gray_patches.SetValue(2) setcfg("tc_gray_patches", self.tc_gray_patches.GetValue()) self.tc_check() def tc_fullspread_handler(self, event = None): setcfg("tc_fullspread_patches", self.tc_fullspread_patches.GetValue()) self.tc_algo_handler() self.tc_check() def tc_gamma_handler(self, event): setcfg("tc_gamma", self.tc_gamma_floatctrl.GetValue()) def tc_get_total_patches(self, white_patches = None, black_patches=None, single_channel_patches = None, gray_patches = None, multi_steps = None, multi_bcc_steps=None, fullspread_patches = None): if hasattr(self, "ti1") and [white_patches, black_patches, single_channel_patches, gray_patches, multi_steps, multi_bcc_steps, fullspread_patches] == [None] * 7: return self.ti1.queryv1("NUMBER_OF_SETS") if white_patches is None: white_patches = self.tc_white_patches.GetValue() if black_patches is None: if self.worker.argyll_version >= [1, 6]: black_patches = self.tc_black_patches.GetValue() elif hasattr(self, "ti1"): black_patches = self.ti1.queryv1("BLACK_COLOR_PATCHES") if single_channel_patches is None: single_channel_patches = self.tc_single_channel_patches.GetValue() single_channel_patches_total = single_channel_patches * 3 if gray_patches is None: gray_patches = self.tc_gray_patches.GetValue() if (gray_patches == 0 and (single_channel_patches > 0 or black_patches > 0) and white_patches > 0): gray_patches = 2 if multi_steps is None: multi_steps = self.tc_multi_steps.GetValue() if multi_bcc_steps is None and getcfg("tc_multi_bcc") and self.worker.argyll_version >= [1, 6]: multi_bcc_steps = self.tc_multi_steps.GetValue() if fullspread_patches is None: fullspread_patches = self.tc_fullspread_patches.GetValue() return get_total_patches(white_patches, black_patches, single_channel_patches, gray_patches, multi_steps, multi_bcc_steps, fullspread_patches) def tc_get_black_patches(self): if self.worker.argyll_version >= [1, 6]: black_patches = self.tc_black_patches.GetValue() else: black_patches = 0 single_channel_patches = self.tc_single_channel_patches.GetValue() gray_patches = self.tc_gray_patches.GetValue() if gray_patches == 0 and single_channel_patches > 0 and black_patches > 0: gray_patches = 2 multi_steps = self.tc_multi_steps.GetValue() if multi_steps > 1 or gray_patches > 1: # black always in multi channel or gray patches black_patches -= 1 return max(0, black_patches) def tc_get_white_patches(self): white_patches = self.tc_white_patches.GetValue() single_channel_patches = self.tc_single_channel_patches.GetValue() gray_patches = self.tc_gray_patches.GetValue() if gray_patches == 0 and single_channel_patches > 0 and white_patches > 0: gray_patches = 2 multi_steps = self.tc_multi_steps.GetValue() if multi_steps > 1 or gray_patches > 1: # white always in multi channel or gray patches white_patches -= 1 return max(0, white_patches) def tc_multi_steps_handler(self, event = None): if event: event = CustomEvent(event.GetEventType(), event.GetEventObject()) if event and event.GetEventType() == wx.EVT_TEXT.evtType[0]: wx.CallLater(3000, self.tc_multi_steps_handler2, event) # 3 seconds delay to allow user to finish keying in a value before it is validated else: wx.CallAfter(self.tc_multi_steps_handler2, event) def tc_multi_steps_handler2(self, event = None): if self.tc_multi_steps.GetValue() == 1: if event and event.GetEventType() in (0, wx.EVT_SPINCTRL.evtType[0]) and getcfg("tc_multi_steps") == 2: # decrease self.tc_multi_steps.SetValue(0) else: # increase self.tc_multi_steps.SetValue(2) multi_steps = self.tc_multi_steps.GetValue() multi_patches = int(math.pow(multi_steps, 3)) if getcfg("tc_multi_bcc") and self.worker.argyll_version >= [1, 6]: pref = "tc_multi_bcc_steps" if multi_steps: multi_patches += int(math.pow(multi_steps - 1, 3)) multi_steps += multi_steps - 1 setcfg("tc_multi_steps", self.tc_multi_steps.GetValue()) else: pref = "tc_multi_steps" setcfg("tc_multi_bcc_steps", 0) self.tc_multi_patches.SetLabel(lang.getstr("tc.multidim.patches", (multi_patches, multi_steps))) setcfg(pref, self.tc_multi_steps.GetValue()) self.tc_check() def tc_neutral_axis_emphasis_handler(self, event=None): if event.GetId() == self.tc_neutral_axis_emphasis_slider.GetId(): self.tc_neutral_axis_emphasis_intctrl.SetValue(self.tc_neutral_axis_emphasis_slider.GetValue()) else: self.tc_neutral_axis_emphasis_slider.SetValue(self.tc_neutral_axis_emphasis_intctrl.GetValue()) setcfg("tc_neutral_axis_emphasis", self.tc_neutral_axis_emphasis_intctrl.GetValue() / 100.0) self.tc_algo_handler() def tc_dark_emphasis_handler(self, event=None): if event.GetId() == self.tc_dark_emphasis_slider.GetId(): self.tc_dark_emphasis_intctrl.SetValue(self.tc_dark_emphasis_slider.GetValue()) else: self.tc_dark_emphasis_slider.SetValue(self.tc_dark_emphasis_intctrl.GetValue()) setcfg("tc_dark_emphasis", self.tc_dark_emphasis_intctrl.GetValue() / 100.0) self.tc_algo_handler() def tc_algo_handler(self, event = None): tc_algo_enable = self.tc_fullspread_patches.GetValue() > 0 self.tc_algo.Enable(tc_algo_enable) tc_algo = self.tc_algos_ba[self.tc_algo.GetStringSelection()] self.tc_adaption_slider.Enable(tc_algo_enable and tc_algo == "") self.tc_adaption_intctrl.Enable(tc_algo_enable and tc_algo == "") tc_precond_enable = (tc_algo in ("I", "Q", "R", "t") or (tc_algo == "" and self.tc_adaption_slider.GetValue() > 0)) if self.worker.argyll_version >= [1, 3, 3]: self.tc_neutral_axis_emphasis_slider.Enable(tc_algo_enable and tc_precond_enable) self.tc_neutral_axis_emphasis_intctrl.Enable(tc_algo_enable and tc_precond_enable) self.tc_precond.Enable(bool(getcfg("tc_precond_profile"))) if not getcfg("tc_precond_profile"): self.tc_precond.SetValue(False) else: self.tc_precond.SetValue(bool(int(getcfg("tc_precond")))) if self.worker.argyll_version >= [1, 6, 2]: tc_dark_emphasis_enable = (self.worker.argyll_version >= [1, 6, 3] or (tc_precond_enable and bool(int(getcfg("tc_precond"))) and bool(getcfg("tc_precond_profile")))) self.tc_dark_emphasis_slider.Enable(tc_dark_emphasis_enable) self.tc_dark_emphasis_intctrl.Enable(tc_dark_emphasis_enable) self.tc_angle_slider.Enable(tc_algo_enable and tc_algo in ("i", "I")) self.tc_angle_intctrl.Enable(tc_algo_enable and tc_algo in ("i", "I")) setcfg("tc_algo", tc_algo) self.tc_enable_add_precond_controls() def tc_enable_add_precond_controls(self): tc_algo = getcfg("tc_algo") add_preconditioned_enable = (hasattr(self, "ti1") and bool(getcfg("tc_precond_profile")) and (tc_algo in ("I", "Q", "R", "t") or (tc_algo == "" and getcfg("tc_adaption") == 1))) self.saturation_sweeps_intctrl.Enable(add_preconditioned_enable) for color in ("R", "G", "B", "C", "M", "Y"): getattr(self, "saturation_sweeps_%s_btn" % color).Enable( add_preconditioned_enable) RGB = {} for component in ("R", "G", "B"): ctrl = getattr(self, "saturation_sweeps_custom_%s_ctrl" % component) ctrl.Enable(add_preconditioned_enable) RGB[component] = ctrl.GetValue() self.saturation_sweeps_custom_btn.Enable( add_preconditioned_enable and not (RGB["R"] == RGB["G"] == RGB["B"])) self.add_ti3_btn.Enable(add_preconditioned_enable) self.add_ti3_relative_cb.Enable(add_preconditioned_enable) def tc_adaption_handler(self, event = None): if event.GetId() == self.tc_adaption_slider.GetId(): self.tc_adaption_intctrl.SetValue(self.tc_adaption_slider.GetValue()) else: self.tc_adaption_slider.SetValue(self.tc_adaption_intctrl.GetValue()) setcfg("tc_adaption", self.tc_adaption_intctrl.GetValue() / 100.0) self.tc_algo_handler() def tc_add_saturation_sweeps_handler(self, event): try: profile = ICCP.ICCProfile(getcfg("tc_precond_profile")) except (IOError, ICCP.ICCProfileInvalidError), exception: show_result_dialog(exception, self) else: rgb_space = profile.get_rgb_space() if not rgb_space: show_result_dialog(Error( lang.getstr("profile.required_tags_missing", lang.getstr("profile.type.shaper_matrix"))), self) return R, G, B = {self.saturation_sweeps_R_btn.GetId(): (1, 0, 0), self.saturation_sweeps_G_btn.GetId(): (0, 1, 0), self.saturation_sweeps_B_btn.GetId(): (0, 0, 1), self.saturation_sweeps_C_btn.GetId(): (0, 1, 1), self.saturation_sweeps_M_btn.GetId(): (1, 0, 1), self.saturation_sweeps_Y_btn.GetId(): (1, 1, 0), self.saturation_sweeps_custom_btn.GetId(): (self.saturation_sweeps_custom_R_ctrl.GetValue() / 100.0, self.saturation_sweeps_custom_G_ctrl.GetValue() / 100.0, self.saturation_sweeps_custom_B_ctrl.GetValue() / 100.0)}[event.GetId()] maxv = self.saturation_sweeps_intctrl.GetValue() newdata = [] row = self.grid.GetSelectionRows()[-1] for i in xrange(maxv): saturation = 1.0 / (maxv - 1) * i RGB, xyY = colormath.RGBsaturation(R, G, B, 1.0 / (maxv - 1) * i, rgb_space) X, Y, Z = colormath.xyY2XYZ(*xyY) newdata.append({ "SAMPLE_ID": row + 2, "RGB_R": round(RGB[0] * 100, 4), "RGB_G": round(RGB[1] * 100, 4), "RGB_B": round(RGB[2] * 100, 4), "XYZ_X": X * 100, "XYZ_Y": Y * 100, "XYZ_Z": Z * 100 }) self.tc_add_data(row, newdata) def tc_add_ti3_handler(self, event): try: profile = ICCP.ICCProfile(getcfg("tc_precond_profile")) except (IOError, ICCP.ICCProfileInvalidError), exception: show_result_dialog(exception, self) return defaultDir, defaultFile = get_verified_path("testchart.reference") dlg = wx.FileDialog(self, lang.getstr("testchart_or_reference"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=(lang.getstr("filetype.ti1_ti3_txt") + "|*.cgats;*.cie;*.gam;*.jpg;*.jpeg;*.png;*.ti1;*.ti2;*.ti3;*.tif;*.tiff;*.txt"), style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) dlg.Center(wx.BOTH) result = dlg.ShowModal() if result == wx.ID_OK: path = dlg.GetPath() setcfg("testchart.reference", path) dlg.Destroy() if result != wx.ID_OK: return use_gamut = False # Determine if this is an image filename, ext = os.path.splitext(path) if ext.lower() in (".jpg", ".jpeg", ".png", ".tif", ".tiff"): llevel = wx.Log.GetLogLevel() wx.Log.SetLogLevel(0) # Suppress TIFF library related message popups try: img = wx.Image(path, wx.BITMAP_TYPE_ANY) if not img.IsOk(): raise Error(lang.getstr("error.file_type_unsupported")) except Exception, exception: show_result_dialog(exception, self) return finally: wx.Log.SetLogLevel(llevel) if test: dlg = ConfirmDialog(self, msg=lang.getstr("gamut"), ok="L*a*b*", alt="RGB", bitmap=geticon(32, "dialog-question")) result = dlg.ShowModal() if result == wx.ID_CANCEL: return use_gamut = result == wx.ID_OK else: img = None self.worker.start(self.tc_add_ti3_consumer, self.tc_add_ti3, cargs=(profile, ), wargs=(path, img, use_gamut, profile), wkwargs={}, progress_msg=lang.getstr("testchart.add_ti3_patches"), parent=self, progress_start=500) def tc_add_ti3_consumer(self, result, profile=None): if isinstance(result, Exception): show_result_dialog(result, self) else: chart = result data_format = chart.queryv1("DATA_FORMAT").values() if getcfg("tc_add_ti3_relative"): intent = "r" else: intent = "a" if not (chart[0].type.strip() == "GAMUT" and "RGB_R" in data_format and "RGB_G" in data_format and "RGB_B" in data_format): as_ti3 = ("LAB_L" in data_format and "LAB_A" in data_format and "LAB_B" in data_format) or ("XYZ_X" in data_format and "XYZ_Y" in data_format and "XYZ_Z" in data_format) if getcfg("tc_add_ti3_relative"): adapted = chart.adapt() ti1, ti3, void = self.worker.chart_lookup(chart, profile, as_ti3, intent=intent, add_white_patches=False) if not ti1 or not ti3: return if as_ti3: chart = ti1 else: chart = ti3 dataset = chart.queryi1("DATA") data_format = dataset.queryv1("DATA_FORMAT").values() # Returned CIE values are always either XYZ or Lab if ("LAB_L" in data_format and "LAB_A" in data_format and "LAB_B" in data_format): cie = "Lab" else: cie = "XYZ" newdata = [] row = self.grid.GetSelectionRows()[-1] for i in dataset.DATA: if cie == "Lab": (dataset.DATA[i]["XYZ_X"], dataset.DATA[i]["XYZ_Y"], dataset.DATA[i]["XYZ_Z"]) = colormath.Lab2XYZ( dataset.DATA[i]["LAB_L"], dataset.DATA[i]["LAB_A"], dataset.DATA[i]["LAB_B"], scale=100) if intent == "r": (dataset.DATA[i]["XYZ_X"], dataset.DATA[i]["XYZ_Y"], dataset.DATA[i]["XYZ_Z"]) = colormath.adapt( dataset.DATA[i]["XYZ_X"], dataset.DATA[i]["XYZ_Y"], dataset.DATA[i]["XYZ_Z"], "D50", profile.tags.wtpt.values()) entry = {"SAMPLE_ID": row + 2 + i} for label in ("RGB_R", "RGB_G", "RGB_B", "XYZ_X", "XYZ_Y", "XYZ_Z"): entry[label] = round(dataset.DATA[i][label], 4) newdata.append(entry) self.tc_add_data(row, newdata) def tc_add_ti3(self, path, img=None, use_gamut=True, profile=None): if img: cwd = self.worker.create_tempdir() if isinstance(cwd, Exception): return cwd size = 70.0 scale = math.sqrt((img.Width * img.Height) / (size * size)) w, h = int(round(img.Width / scale)), int(round(img.Height / scale)) loresimg = img.Scale(w, h, wx.IMAGE_QUALITY_NORMAL) if loresimg.CountColours() < img.CountColours(size * size): # Assume a photo quality = wx.IMAGE_QUALITY_HIGH else: # Assume a target quality = wx.IMAGE_QUALITY_NORMAL img.Rescale(w, h, quality) imgpath = os.path.join(cwd, "image.tif") outpath = os.path.join(cwd, "imageout.tif") img.SaveFile(imgpath, wx.BITMAP_TYPE_TIF) # Process image to get colors # Two ways to do this: Convert image using cctiff # or use tiffgamut # In both cases, a profile embedded in the image will be used # with the preconditioning profile as fallback if there is no # image profile if not use_gamut: # Use cctiff cmdname = "cctiff" else: # Use tiffgamut cmdname = "tiffgamut" gam = os.path.join(cwd, "image.gam") cmd = get_argyll_util(cmdname) if cmd: ppath = getcfg("tc_precond_profile") intent = "r" if getcfg("tc_add_ti3_relative") else "a" for n in xrange(2 if ppath else 1): if use_gamut: res = 10 if imgpath == path else 1 args = ["-d%s" % res, "-O", gam] #if self.worker.argyll_version >= [1, 0, 4]: #args.append("-f100") else: args = ["-a"] args.append("-i%s" % intent) if n == 0 or imgpath == path: # Try to use embedded profile args.append(path) else: # Fall back to preconditioning profile args.append(ppath) if not use_gamut: # Target args.append("-i%s" % intent) args.append(ppath) args.append(imgpath) if not use_gamut: args.append(outpath) result = self.worker.exec_cmd(cmd, ["-v"] + args, capture_output=True, skip_scripts=True) if not result: errors = "".join(self.worker.errors) if ("Error - Can't open profile in file" in errors or "Error - Can't read profile" in errors): # Try again? if not use_gamut: # No sense converting when input profile is # same as output. Use image as-is. outpath = imgpath result = True break continue elif ("Error - TIFF Input file has 3 input " "chanels and is mismatched" in errors or "Error - Last colorspace RGB from file" in errors): # Try again? imgpath = path continue break if isinstance(result, Exception) or not result: self.worker.wrapup(False) if isinstance(result, Exception): return result elif result: if use_gamut: chart = path = gam else: path = outpath else: return Error("\n".join(self.worker.errors or self.worker.output)) else: return Error(lang.getstr("argyll.util.not_found", cmdname)) if not use_gamut: llevel = wx.Log.GetLogLevel() wx.Log.SetLogLevel(0) # Suppress TIFF library related message popups try: img = wx.Image(path, wx.BITMAP_TYPE_ANY) if not img.IsOk(): raise Error(lang.getstr("error.file_type_unsupported")) except Exception, exception: return exception finally: wx.Log.SetLogLevel(llevel) self.worker.wrapup(False) if img.Width > w or img.Height > h: img.Rescale(w, h, quality) # Select RGB colors and fill chart chart = ["TI1 ", "BEGIN_DATA_FORMAT", "RGB_R RGB_G RGB_B", "END_DATA_FORMAT", "BEGIN_DATA", "END_DATA"] for y in xrange(h): for x in xrange(w): R, G, B = (img.GetRed(x, y) / 2.55, img.GetGreen(x, y) / 2.55, img.GetBlue(x, y) / 2.55) chart.insert(-1, "%.4f %.4f %.4f" % (R, G, B)) chart = "\n".join(chart) else: chart = path try: chart = CGATS.CGATS(chart) except CGATS.CGATSError, exception: return exception finally: if os.path.dirname(path) == self.worker.tempdir: self.worker.wrapup(False) if img: if use_gamut: threshold = 2 else: threshold = 4 try: void, ti3, void = self.worker.chart_lookup(chart, profile, intent=intent, add_white_patches=False) except Exception, exception: return exception if ti3: chart = ti3 else: return Error(lang.getstr("error.generic", (-1, lang.getstr("unknown")))) colorsets = OrderedDict() weights = {} demph = getcfg("tc_dark_emphasis") # Select Lab color data = chart.queryv1("DATA") for sample in data.itervalues(): if not use_gamut: RGB = sample["RGB_R"], sample["RGB_G"], sample["RGB_B"] L, a, b = (sample["LAB_L"], sample["LAB_A"], sample["LAB_B"]) color = round(L / 10), round(a / 15), round(b / 15) if not color in colorsets: weights[color] = 0 colorsets[color] = [] if L >= 50: weights[color] += L / 50 - demph else: weights[color] += L / 50 + demph colorsets[color].append((L, a, b)) if not use_gamut: colorsets[color][-1] += RGB # Fill chart data_format = "LAB_L LAB_A LAB_B" if not use_gamut: data_format += " RGB_R RGB_G RGB_B" chart = ["GAMUT ", "BEGIN_DATA_FORMAT", data_format, "END_DATA_FORMAT", "BEGIN_DATA", "END_DATA"] weight = bool(filter(lambda color: weights[color] >= threshold, colorsets.iterkeys())) for color, colors in colorsets.iteritems(): if weight and weights[color] < threshold: continue L, a, b = 0, 0, 0 R, G, B = 0, 0, 0 for v in colors: L += v[0] a += v[1] b += v[2] if len(v) == 6: R += v[3] G += v[4] B += v[5] L /= len(colors) a /= len(colors) b /= len(colors) R /= len(colors) G /= len(colors) B /= len(colors) chart.insert(-1, "%.4f %.4f %.4f" % (L, a, b)) if not use_gamut: chart[-2] += " %.4f %.4f %.4f" % (R, G, B) chart = CGATS.CGATS("\n".join(chart)) else: chart.fix_device_values_scaling() return chart def tc_add_ti3_relative_handler(self, event): setcfg("tc_add_ti3_relative", int(self.add_ti3_relative_cb.GetValue())) def tc_angle_handler(self, event = None): if event.GetId() == self.tc_angle_slider.GetId(): self.tc_angle_intctrl.SetValue(self.tc_angle_slider.GetValue()) else: self.tc_angle_slider.SetValue(self.tc_angle_intctrl.GetValue()) setcfg("tc_angle", self.tc_angle_intctrl.GetValue() / 10000.0) def tc_multi_bcc_cb_handler(self, event=None): setcfg("tc_multi_bcc", int(self.tc_multi_bcc_cb.GetValue())) self.tc_multi_steps_handler2() def tc_precond_handler(self, event = None): setcfg("tc_precond", int(self.tc_precond.GetValue())) self.tc_algo_handler() def tc_precond_profile_handler(self, event = None): tc_precond_enable = bool(self.tc_precond_profile.GetPath()) self.tc_precond.Enable(tc_precond_enable) setcfg("tc_precond_profile", self.tc_precond_profile.GetPath()) self.tc_algo_handler() def tc_precond_profile_current_ctrl_handler(self, event): profile = get_current_profile(include_display_profile=True) if profile: self.tc_precond_profile.SetPath(profile.fileName) self.tc_precond_profile_handler() else: wx.Bell() def tc_filter_handler(self, event = None): setcfg("tc_filter", int(self.tc_filter.GetValue())) setcfg("tc_filter_L", self.tc_filter_L.GetValue()) setcfg("tc_filter_a", self.tc_filter_a.GetValue()) setcfg("tc_filter_b", self.tc_filter_b.GetValue()) setcfg("tc_filter_rad", self.tc_filter_rad.GetValue()) def tc_vrml_black_offset_ctrl_handler(self, event): setcfg("tc_vrml_black_offset", self.tc_vrml_black_offset_intctrl.GetValue()) def tc_vrml_compress_handler(self, event): setcfg("vrml.compress", int(self.tc_vrml_compress_cb.GetValue())) def tc_vrml_handler(self, event = None): d = self.tc_vrml_device.GetValue() l = self.tc_vrml_lab.GetValue() if event: setcfg("tc_vrml_device", int(d)) setcfg("tc_vrml_lab", int(l)) self.vrml_save_as_btn.Enable(hasattr(self, "ti1") and (d or l)) def tc_vrml_use_D50_handler(self, event): setcfg("tc_vrml_use_D50", int(self.tc_vrml_use_D50_cb.GetValue())) def tc_update_controls(self): self.tc_algo.SetStringSelection(self.tc_algos_ab.get(getcfg("tc_algo"), self.tc_algos_ab.get(defaults["tc_algo"]))) self.tc_white_patches.SetValue(getcfg("tc_white_patches")) if self.worker.argyll_version >= [1, 6]: self.tc_black_patches.SetValue(getcfg("tc_black_patches")) self.tc_single_channel_patches.SetValue(getcfg("tc_single_channel_patches")) self.tc_gray_patches.SetValue(getcfg("tc_gray_patches")) if getcfg("tc_multi_bcc_steps"): setcfg("tc_multi_bcc", 1) self.tc_multi_steps.SetValue(getcfg("tc_multi_bcc_steps")) else: setcfg("tc_multi_bcc", 0) self.tc_multi_steps.SetValue(getcfg("tc_multi_steps")) if hasattr(self, "tc_multi_bcc_cb"): self.tc_multi_bcc_cb.SetValue(bool(getcfg("tc_multi_bcc"))) self.tc_multi_steps_handler2() self.tc_fullspread_patches.SetValue(getcfg("tc_fullspread_patches")) self.tc_angle_slider.SetValue(getcfg("tc_angle") * 10000) self.tc_angle_handler(self.tc_angle_slider) self.tc_adaption_slider.SetValue(getcfg("tc_adaption") * 100) self.tc_adaption_handler(self.tc_adaption_slider) if (self.worker.argyll_version == [1, 1, "RC2"] or self.worker.argyll_version >= [1, 1]): self.tc_gamma_floatctrl.SetValue(getcfg("tc_gamma")) if self.worker.argyll_version >= [1, 3, 3]: self.tc_neutral_axis_emphasis_slider.SetValue(getcfg("tc_neutral_axis_emphasis") * 100) self.tc_neutral_axis_emphasis_handler(self.tc_neutral_axis_emphasis_slider) if self.worker.argyll_version >= [1, 6, 2]: self.tc_dark_emphasis_slider.SetValue(getcfg("tc_dark_emphasis") * 100) self.tc_dark_emphasis_handler(self.tc_dark_emphasis_slider) self.tc_precond_profile.SetPath(getcfg("tc_precond_profile")) self.tc_filter.SetValue(bool(int(getcfg("tc_filter")))) self.tc_filter_L.SetValue(getcfg("tc_filter_L")) self.tc_filter_a.SetValue(getcfg("tc_filter_a")) self.tc_filter_b.SetValue(getcfg("tc_filter_b")) self.tc_filter_rad.SetValue(getcfg("tc_filter_rad")) self.tc_vrml_lab.SetValue(bool(int(getcfg("tc_vrml_lab")))) self.tc_vrml_device.SetValue(bool(int(getcfg("tc_vrml_device")))) self.tc_vrml_black_offset_intctrl.SetValue(getcfg("tc_vrml_black_offset")) self.tc_vrml_use_D50_cb.SetValue(bool(getcfg("tc_vrml_use_D50"))) self.tc_vrml_handler() self.tc_vrml_compress_cb.SetValue(bool(getcfg("vrml.compress"))) self.add_ti3_relative_cb.SetValue(bool(getcfg("tc_add_ti3_relative"))) self.tc_enable_sort_controls() def tc_check(self, event = None): white_patches = self.tc_white_patches.GetValue() self.tc_amount = self.tc_get_total_patches(white_patches) self.preview_btn.Enable(self.tc_amount - max(0, self.tc_get_white_patches()) - max(0, self.tc_get_black_patches()) >= 8) self.clear_btn.Enable(hasattr(self, "ti1")) self.tc_save_check() self.save_as_btn.Enable(hasattr(self, "ti1")) self.export_btn.Enable(hasattr(self, "ti1")) self.tc_vrml_handler() self.tc_enable_add_precond_controls() self.tc_enable_sort_controls() self.tc_set_default_status() def tc_save_check(self): self.save_btn.Enable(hasattr(self, "ti1") and self.ti1.modified and os.path.exists(self.ti1.filename) and get_data_path(os.path.join("ref", os.path.basename(self.ti1.filename))) != self.ti1.filename and get_data_path(os.path.join("ti1", os.path.basename(self.ti1.filename))) != self.ti1.filename) def tc_save_cfg(self): setcfg("tc_white_patches", self.tc_white_patches.GetValue()) if self.worker.argyll_version >= [1, 6]: setcfg("tc_black_patches", self.tc_black_patches.GetValue()) setcfg("tc_single_channel_patches", self.tc_single_channel_patches.GetValue()) setcfg("tc_gray_patches", self.tc_gray_patches.GetValue()) setcfg("tc_multi_steps", self.tc_multi_steps.GetValue()) setcfg("tc_fullspread_patches", self.tc_fullspread_patches.GetValue()) tc_algo = self.tc_algos_ba[self.tc_algo.GetStringSelection()] setcfg("tc_algo", tc_algo) setcfg("tc_angle", self.tc_angle_intctrl.GetValue() / 10000.0) setcfg("tc_adaption", self.tc_adaption_intctrl.GetValue() / 100.0) tc_precond_enable = tc_algo in ("I", "Q", "R", "t") or (tc_algo == "" and self.tc_adaption_slider.GetValue() > 0) if tc_precond_enable: setcfg("tc_precond", int(self.tc_precond.GetValue())) setcfg("tc_precond_profile", self.tc_precond_profile.GetPath()) setcfg("tc_filter", int(self.tc_filter.GetValue())) setcfg("tc_filter_L", self.tc_filter_L.GetValue()) setcfg("tc_filter_a", self.tc_filter_a.GetValue()) setcfg("tc_filter_b", self.tc_filter_b.GetValue()) setcfg("tc_filter_rad", self.tc_filter_rad.GetValue()) setcfg("tc_vrml_lab", int(self.tc_vrml_lab.GetValue())) setcfg("tc_vrml_device", int(self.tc_vrml_device.GetValue())) def tc_preview_handler(self, event = None): if self.worker.is_working(): return if not self.tc_check_save_ti1(): return if not check_set_argyll_bin(): return # if sys.platform == "win32": # sp.call("cls", shell = True) # else: # sp.call('clear', shell = True) safe_print("-" * 80) safe_print(lang.getstr("testchart.create")) #self.tc_create() self.worker.interactive = False self.worker.start(self.tc_preview, self.tc_create, wargs = (), wkwargs = {}, progress_msg = lang.getstr("testchart.create"), parent = self, progress_start = 500) def tc_clear_handler(self, event): self.tc_check_save_ti1() def tc_clear(self, clear_ti1=True): grid = self.grid if grid.GetNumberRows() > 0: grid.DeleteRows(0, grid.GetNumberRows()) if grid.GetNumberCols() > 0: grid.DeleteCols(0, grid.GetNumberCols()) if hasattr(self, "preview"): self.preview.Freeze() self.patchsizer.Clear(True) self.preview.Layout() self.preview.FitInside() self.preview.SetScrollbars(20, 20, 0, 0) self.preview.Thaw() if clear_ti1: if hasattr(self, "ti1"): del self.ti1 self.tc_update_controls() self.tc_check() # UGLY HACK: This 'safe_print' call fixes a GTK assertion and # segfault under Arch Linux when setting the window title safe_print("") self.SetTitle(lang.getstr("testchart.edit")) def tc_export_handler(self, event): if not hasattr(self, "ti1"): return dlg = ConfirmDialog(self, msg=lang.getstr("testchart.export.repeat_patch"), ok=lang.getstr("ok"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-question")) sizer = wx.BoxSizer(wx.HORIZONTAL) dlg.sizer3.Add(sizer, 0, flag=wx.TOP | wx.ALIGN_LEFT, border=12) intctrl = wx.SpinCtrl(dlg, -1, size=(60, -1), min=config.valid_ranges["tc_export_repeat_patch_max"][0], max=config.valid_ranges["tc_export_repeat_patch_max"][1], value=str(getcfg("tc_export_repeat_patch_max"))) sizer.Add(intctrl, 0, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=4) sizer.Add(wx.StaticText(dlg, -1, u"× " + lang.getstr("max")), 0, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=12) intctrl2 = wx.SpinCtrl(dlg, -1, size=(60, -1), min=config.valid_ranges["tc_export_repeat_patch_min"][0], max=config.valid_ranges["tc_export_repeat_patch_min"][1], value=str(getcfg("tc_export_repeat_patch_min"))) sizer.Add(intctrl2, 0, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=4) sizer.Add(wx.StaticText(dlg, -1, u"× " + lang.getstr("min")), 0, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=12) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() result = dlg.ShowModal() repeatmax = intctrl.GetValue() repeatmin = intctrl2.GetValue() dlg.Destroy() if result != wx.ID_OK: return setcfg("tc_export_repeat_patch_max", repeatmax) setcfg("tc_export_repeat_patch_min", repeatmin) writecfg() path = None (defaultDir, defaultFile) = (get_verified_path("last_testchart_export_path")[0], os.path.basename(os.path.splitext(self.ti1.filename or getcfg("last_testchart_export_path"))[0])) dlg = wx.FileDialog(self, lang.getstr("export"), defaultDir=defaultDir, defaultFile=defaultFile, # Disable JPEG as it introduces slight color errors wildcard=##lang.getstr("filetype.jpg") + "|*.jpg|" + lang.getstr("filetype.png") + "|*.png|" + lang.getstr("filetype.tif") + "|*.tif", style=wx.SAVE | wx.OVERWRITE_PROMPT) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: filter_index = dlg.GetFilterIndex() path = dlg.GetPath() dlg.Destroy() if path: if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return setcfg("last_testchart_export_path", path) writecfg() if sys.platform not in ("darwin", "win32"): # Linux segfaults if running the export threaded self.tc_export(path, filter_index) else: self.worker.start(lambda result: None, self.tc_export, wargs=(path, filter_index), wkwargs={}, progress_msg=lang.getstr("export"), parent=self, progress_start=500) def tc_export(self, path, filter_index): name, ext = os.path.splitext(path)[0], {0: ".png", 1: ".tif"}.get(filter_index) ext2type = {".jpg": wx.BITMAP_TYPE_JPEG, ".png": wx.BITMAP_TYPE_PNG, ".tif": wx.BITMAP_TYPE_TIF} repeatmax = getcfg("tc_export_repeat_patch_max") repeatmin = getcfg("tc_export_repeat_patch_min") maxlen = len(self.ti1[0].DATA) maxcount = maxlen * repeatmax filenameformat = "%%s-%%0%id%%s" % len(str(maxcount)) size = int(round(get_default_size() * float(getcfg("dimensions.measureframe").split(",")[-1]))) count = 0 bitmap = wx.EmptyBitmap(size, size) dc = wx.MemoryDC() dc.SelectObject(bitmap) for i in xrange(maxlen): if self.worker.thread_abort: break self.worker.lastmsg.write("%d%%\n" % (100.0 / maxlen * (i + 1))) R, G, B = (self.ti1[0].DATA[i]["RGB_R"], self.ti1[0].DATA[i]["RGB_G"], self.ti1[0].DATA[i]["RGB_B"]) X, Y, Z = colormath.RGB2XYZ(R / 100.0, G / 100.0, B / 100.0, scale=100.0) L, a, b = colormath.XYZ2Lab(X, Y, Z) # Careful when rounding floats! # Incorrect: int(round(50 * 2.55)) = 127 (127.499999) # Correct: int(round(float(str(50 * 2.55)))) = 128 (127.5) color = wx.Colour(int(round(float(str(R * 2.55)))), int(round(float(str(G * 2.55)))), int(round(float(str(B * 2.55))))) dc.SetBackground(wx.Brush(color)) dc.Clear() count += 1 filename = filenameformat % (name, count, ext) bitmap.SaveFile(filename, ext2type.get(ext, ext2type[".png"])) repeat = int(round(repeatmin + ((repeatmax - repeatmin) / 100.0 * (100 - L)))) ##safe_print("RGB", R, G, B, "L* %.2f" % L, "repeat", repeat) if repeat > 1: for j in xrange(repeat - 1): count += 1 filecopyname = filenameformat % (name, count, ext) shutil.copyfile(filename, filecopyname) def tc_save_handler(self, event = None): self.tc_save_as_handler(event, path = self.ti1.filename) def tc_save_as_handler(self, event = None, path = None): if path is None or not os.path.exists(path): path = None if (hasattr(self, "ti1") and self.ti1.filename and os.path.isfile(self.ti1.filename)): defaultDir = os.path.dirname(self.ti1.filename) defaultFile = os.path.basename(self.ti1.filename) else: defaultDir = get_verified_path("last_ti1_path")[0] defaultFile = os.path.basename(config.defaults["last_ti1_path"]) dlg = wx.FileDialog(self, lang.getstr("testchart.save_as"), defaultDir = defaultDir, defaultFile = defaultFile, wildcard = lang.getstr("filetype.ti1") + "|*.ti1", style = wx.SAVE | wx.OVERWRITE_PROMPT) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return filename, ext = os.path.splitext(path) if ext.lower() != ".ti1": path += ".ti1" if os.path.exists(path): dlg = ConfirmDialog(self, msg = lang.getstr("dialog.confirm_overwrite", (path)), ok = lang.getstr("overwrite"), cancel = lang.getstr("cancel"), bitmap = geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return setcfg("last_ti1_path", path) try: file_ = open(path, "w") file_.write(str(self.ti1)) file_.close() self.ti1.filename = path self.ti1.root.setmodified(False) if not self.IsBeingDeleted(): # UGLY HACK: This 'safe_print' call fixes a GTK assertion and # segfault under Arch Linux when setting the window title safe_print("") self.SetTitle(lang.getstr("testchart.edit").rstrip(".") + ": " + os.path.basename(path)) except Exception, exception: handle_error(u"Error - testchart could not be saved: " + safe_unicode(exception), parent = self) else: self.tc_vrml_save(path) if path != getcfg(self.cfg): dlg = ConfirmDialog(self, msg = lang.getstr("testchart.confirm_select"), ok = lang.getstr("testchart.select"), cancel = lang.getstr("testchart.dont_select"), bitmap = geticon(32, "dialog-question")) result = dlg.ShowModal() dlg.Destroy() if result == wx.ID_OK: setcfg(self.cfg, path) writecfg() if path == getcfg(self.cfg) and self.target and hasattr(self.target, "set_testchart"): self.target.set_testchart(path) if not self.IsBeingDeleted(): self.save_btn.Disable() return True return False def tc_vrml_save_as_handler(self, event): path = None if (hasattr(self, "ti1") and self.ti1.filename and os.path.isfile(self.ti1.filename)): defaultDir = os.path.dirname(self.ti1.filename) defaultFile = os.path.splitext(os.path.basename(self.ti1.filename))[0] else: defaultDir = get_verified_path("last_vrml_path")[0] defaultFile = os.path.basename(config.defaults["last_vrml_path"]) wildcard = lang.getstr("filetype.vrml") + "|*.wrl" vrmlext = ".wrl" if getcfg("vrml.compress"): vrmlext = ".wrz" wildcard = wildcard.replace(".wrl", vrmlext) dlg = wx.FileDialog(self, lang.getstr("testchart.save_as"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=wildcard, style=wx.SAVE | wx.OVERWRITE_PROMPT) dlg.Center(wx.BOTH) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if path: if not waccess(path, os.W_OK): show_result_dialog(Error(lang.getstr("error.access_denied.write", path)), self) return filename, ext = os.path.splitext(path) if ext.lower() != vrmlext: path += vrmlext setcfg("last_vrml_path", path) self.tc_vrml_save(path) def tc_vrml_save(self, path): if getcfg("tc_vrml_device") or getcfg("tc_vrml_lab"): opath = path vrml_types = [] if getcfg("tc_vrml_device"): vrml_types.append("d") if getcfg("tc_vrml_lab"): vrml_types.append("l") for vrml_type in vrml_types: wrlsuffix = "%s.wrl" % vrml_type if getcfg("vrml.compress"): wrlsuffix = wrlsuffix.replace(".wrl", ".wrz") path = os.path.splitext(opath)[0] + wrlsuffix if os.path.exists(path): dlg = ConfirmDialog(self, msg=lang.getstr("dialog.confirm_overwrite", (path)), ok=lang.getstr("overwrite"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: continue try: self.ti1[0].export_vrml(path, wrlsuffix in ("d.wrl", "d.wrz"), RGB_black_offset=getcfg("tc_vrml_black_offset"), normalize_RGB_white=getcfg("tc_vrml_use_D50"), compress=getcfg("vrml.compress")) except Exception, exception: handle_error(u"Warning - VRML file could not be saved: " + safe_unicode(exception), parent = self) def tc_check_save_ti1(self, clear = True): if hasattr(self, "ti1"): if self.ti1.root.modified or not os.path.exists(self.ti1.filename): if os.path.exists(self.ti1.filename): ok = lang.getstr("testchart.save") else: ok = lang.getstr("testchart.save_as") dlg = ConfirmDialog(self, msg = lang.getstr("testchart.save_or_discard"), ok = ok, cancel = lang.getstr("cancel"), bitmap = geticon(32, "dialog-warning")) if self.IsBeingDeleted(): dlg.sizer2.Hide(0) if os.path.exists(self.ti1.filename): dlg.save_as = wx.Button(dlg, -1, lang.getstr("testchart.save_as")) dlg.save_as.SetInitialSize((dlg.save_as.GetSize()[0] + btn_width_correction, -1)) ID_SAVE_AS = dlg.save_as.GetId() dlg.Bind(wx.EVT_BUTTON, dlg.OnClose, id = ID_SAVE_AS) dlg.sizer2.Add((12, 12)) dlg.sizer2.Add(dlg.save_as) else: ID_SAVE_AS = wx.ID_OK dlg.discard = wx.Button(dlg, -1, lang.getstr("testchart.discard")) dlg.discard.SetInitialSize((dlg.discard.GetSize()[0] + btn_width_correction, -1)) ID_DISCARD = dlg.discard.GetId() dlg.Bind(wx.EVT_BUTTON, dlg.OnClose, id = ID_DISCARD) dlg.sizer2.Add((12, 12)) dlg.sizer2.Add(dlg.discard) dlg.sizer0.SetSizeHints(dlg) dlg.sizer0.Layout() result = dlg.ShowModal() dlg.Destroy() if result in (wx.ID_OK, ID_SAVE_AS): if result == ID_SAVE_AS: path = None else: path = self.ti1.filename if not self.tc_save_as_handler(event = None, path = path): return False elif result == wx.ID_CANCEL: return False clear = True if clear and not self.IsBeingDeleted(): self.tc_clear() return True def tc_close_handler(self, event = None): if (not event or self.IsShownOnScreen()) and self.tc_check_save_ti1(False): setcfg("tc.saturation_sweeps", self.saturation_sweeps_intctrl.GetValue()) for component in ("R", "G", "B"): setcfg("tc.saturation_sweeps.custom.%s" % component, getattr(self, "saturation_sweeps_custom_%s_ctrl" % component).GetValue()) self.Hide() if self.Parent: setcfg("tc.show", 0) return True else: writecfg() self.Destroy() def tc_move_handler(self, event = None): if self.IsShownOnScreen() and not self.IsMaximized() and not self.IsIconized(): x, y = self.GetScreenPosition() setcfg("position.tcgen.x", x) setcfg("position.tcgen.y", y) if event: event.Skip() def tc_destroy_handler(self, event): event.Skip() def tc_load_cfg_from_ti1(self, event = None, path = None, cfg=None, target=None): if self.worker.is_working(): return self.cfg = cfg or "testchart.file" self.target = target or self.Parent if path is None: path = getcfg(self.cfg) try: filename, ext = os.path.splitext(path) if ext.lower() not in (".icc", ".icm"): if ext.lower() == ".ti3": ti1 = CGATS.CGATS(ti3_to_ti1(open(path, "rU"))) ti1.filename = filename + ".ti1" else: ti1 = CGATS.CGATS(path) ti1.filename = path if ext.lower() not in (".ti1", ".ti3"): ti1.fix_device_values_scaling() else: # icc or icm profile profile = ICCP.ICCProfile(path) ti1 = CGATS.CGATS(ti3_to_ti1(profile.tags.get("CIED", "") or profile.tags.get("targ", ""))) ti1.filename = filename + ".ti1" try: ti1_1 = verify_ti1_rgb_xyz(ti1) except CGATS.CGATSError, exception: msg = {CGATS.CGATSKeyError: lang.getstr("error.testchart.missing_fields", (path, "RGB_R, RGB_G, RGB_B, " " XYZ_X, XYZ_Y, XYZ_Z"))}.get(exception.__class__, lang.getstr("error.testchart.invalid", path) + "\n" + lang.getstr(safe_str(exception))) InfoDialog(self, msg=msg, ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return False else: if not self.tc_check_save_ti1(): return ti1.root.setmodified(False) self.ti1 = ti1 # UGLY HACK: This 'safe_print' call fixes a GTK assertion and # segfault under Arch Linux when setting the window title safe_print("") self.SetTitle(lang.getstr("testchart.edit").rstrip(".") + ": " + os.path.basename(ti1.filename)) except Exception, exception: InfoDialog(self, msg = lang.getstr("error.testchart.read", path) + "\n\n" + safe_unicode(exception), ok = lang.getstr("ok"), bitmap = geticon(32, "dialog-error")) return False safe_print(lang.getstr("testchart.read")) self.worker.interactive = False self.worker.start(self.tc_load_cfg_from_ti1_finish, self.tc_load_cfg_from_ti1_worker, wargs = (), wkwargs = {}, progress_msg = lang.getstr("testchart.read"), parent = self, progress_start = 500) def tc_load_cfg_from_ti1_worker(self): white_patches = self.ti1.queryv1("WHITE_COLOR_PATCHES") or None black_patches = self.ti1.queryv1("BLACK_COLOR_PATCHES") or None single_channel_patches = self.ti1.queryv1("SINGLE_DIM_STEPS") or 0 gray_patches = self.ti1.queryv1("COMP_GREY_STEPS") or 0 multi_bcc_steps = self.ti1.queryv1("MULTI_DIM_BCC_STEPS") or 0 multi_steps = self.ti1.queryv1("MULTI_DIM_STEPS") or multi_bcc_steps fullspread_patches = self.ti1.queryv1("NUMBER_OF_SETS") gamma = self.ti1.queryv1("EXTRA_DEV_POW") or 1.0 dark_emphasis = ((self.ti1.queryv1("DARK_REGION_EMPHASIS") or 1.0) - 1.0) / 3.0 if None in (white_patches, single_channel_patches, gray_patches, multi_steps): if None in (single_channel_patches, gray_patches, multi_steps): white_patches = 0 black_patches = 0 R = [] G = [] B = [] gray_channel = [0] data = self.ti1.queryv1("DATA") multi = { "R": [], "G": [], "B": [] } if multi_steps is None: multi_steps = 0 uniqueRGB = [] vmaxlen = 4 for i in data: if self.worker.thread_abort: return False patch = [round(float(str(v * 2.55)), vmaxlen) for v in (data[i]["RGB_R"], data[i]["RGB_G"], data[i]["RGB_B"])] # normalize to 0...255 range strpatch = [str(int(round(round(v, 1)))) for v in patch] if patch[0] == patch[1] == patch[2] == 255: # white white_patches += 1 if 255 not in gray_channel: gray_channel += [255] elif patch[0] == patch[1] == patch[2] == 0: # black black_patches += 1 if 0 not in R and 0 not in G and 0 not in B: R += [0] G += [0] B += [0] if 0 not in gray_channel: gray_channel += [0] elif patch[2] == patch[1] == 0 and patch[0] not in R: # red R += [patch[0]] elif patch[0] == patch[2] == 0 and patch[1] not in G: # green G += [patch[1]] elif patch[0] == patch[1] == 0 and patch[2] not in B: # blue B += [patch[2]] elif patch[0] == patch[1] == patch[2]: # gray if patch[0] not in gray_channel: gray_channel += [patch[0]] elif multi_steps == 0: multi_steps = None if debug >= 9: safe_print("[D]", strpatch) if strpatch not in uniqueRGB: uniqueRGB += [strpatch] if patch[0] not in multi["R"]: multi["R"] += [patch[0]] if patch[1] not in multi["G"]: multi["G"] += [patch[1]] if patch[2] not in multi["B"]: multi["B"] += [patch[2]] if single_channel_patches is None: R_inc = self.tc_get_increments(R, vmaxlen) G_inc = self.tc_get_increments(G, vmaxlen) B_inc = self.tc_get_increments(B, vmaxlen) if debug: safe_print("[D] R_inc:") for i in R_inc: if self.worker.thread_abort: return False safe_print("[D] %s: x%s" % (i, R_inc[i])) safe_print("[D] G_inc:") for i in G_inc: if self.worker.thread_abort: return False safe_print("[D] %s: x%s" % (i, G_inc[i])) safe_print("[D] B_inc:") for i in B_inc: if self.worker.thread_abort: return False safe_print("[D] %s: x%s" % (i, B_inc[i])) RGB_inc = {"0": 0} for inc in R_inc: if self.worker.thread_abort: return False if inc in G_inc and inc in B_inc and R_inc[inc] == G_inc[inc] == B_inc[inc]: RGB_inc[inc] = R_inc[inc] for inc in G_inc: if self.worker.thread_abort: return False if inc in R_inc and inc in B_inc and R_inc[inc] == G_inc[inc] == B_inc[inc]: RGB_inc[inc] = G_inc[inc] for inc in B_inc: if self.worker.thread_abort: return False if inc in R_inc and inc in G_inc and R_inc[inc] == G_inc[inc] == B_inc[inc]: RGB_inc[inc] = B_inc[inc] if False: RGB_inc_max = max(RGB_inc.values()) if RGB_inc_max > 0: single_channel_patches = RGB_inc_max + 1 else: single_channel_patches = 0 else: single_inc = {"0": 0} for inc in RGB_inc: if self.worker.thread_abort: return False if inc != "0": finc = float(inc) n = int(round(float(str(255.0 / finc)))) finc = 255.0 / n n += 1 if debug >= 9: safe_print("[D] inc:", inc) safe_print("[D] n:", n) for i in range(n): if self.worker.thread_abort: return False v = str(int(round(float(str(i * finc))))) if debug >= 9: safe_print("[D] Searching for", v) if [v, "0", "0"] in uniqueRGB and ["0", v, "0"] in uniqueRGB and ["0", "0", v] in uniqueRGB: if not inc in single_inc: single_inc[inc] = 0 single_inc[inc] += 1 else: if debug >= 9: safe_print("[D] Not found!") break single_channel_patches = max(single_inc.values()) if debug: safe_print("[D] single_channel_patches:", single_channel_patches) if 0 in R + G + B: fullspread_patches += 3 # black in single channel patches elif single_channel_patches >= 2: fullspread_patches += 3 # black always in SINGLE_DIM_STEPS if gray_patches is None: RGB_inc = self.tc_get_increments(gray_channel, vmaxlen) if debug: safe_print("[D] RGB_inc:") for i in RGB_inc: if self.worker.thread_abort: return False safe_print("[D] %s: x%s" % (i, RGB_inc[i])) if False: RGB_inc_max = max(RGB_inc.values()) if RGB_inc_max > 0: gray_patches = RGB_inc_max + 1 else: gray_patches = 0 else: gray_inc = {"0": 0} for inc in RGB_inc: if self.worker.thread_abort: return False if inc != "0": finc = float(inc) n = int(round(float(str(255.0 / finc)))) finc = 255.0 / n n += 1 if debug >= 9: safe_print("[D] inc:", inc) safe_print("[D] n:", n) for i in range(n): if self.worker.thread_abort: return False v = str(int(round(float(str(i * finc))))) if debug >= 9: safe_print("[D] Searching for", v) if [v, v, v] in uniqueRGB: if not inc in gray_inc: gray_inc[inc] = 0 gray_inc[inc] += 1 else: if debug >= 9: safe_print("[D] Not found!") break gray_patches = max(gray_inc.values()) if debug: safe_print("[D] gray_patches:", gray_patches) if 0 in gray_channel: fullspread_patches += 1 # black in gray patches if 255 in gray_channel: fullspread_patches += 1 # white in gray patches elif gray_patches >= 2: fullspread_patches += 2 # black and white always in COMP_GREY_STEPS if multi_steps is None: R_inc = self.tc_get_increments(multi["R"], vmaxlen) G_inc = self.tc_get_increments(multi["G"], vmaxlen) B_inc = self.tc_get_increments(multi["B"], vmaxlen) RGB_inc = {"0": 0} for inc in R_inc: if self.worker.thread_abort: return False if inc in G_inc and inc in B_inc and R_inc[inc] == G_inc[inc] == B_inc[inc]: RGB_inc[inc] = R_inc[inc] for inc in G_inc: if self.worker.thread_abort: return False if inc in R_inc and inc in B_inc and R_inc[inc] == G_inc[inc] == B_inc[inc]: RGB_inc[inc] = G_inc[inc] for inc in B_inc: if self.worker.thread_abort: return False if inc in R_inc and inc in G_inc and R_inc[inc] == G_inc[inc] == B_inc[inc]: RGB_inc[inc] = B_inc[inc] if debug: safe_print("[D] RGB_inc:") for i in RGB_inc: if self.worker.thread_abort: return False safe_print("[D] %s: x%s" % (i, RGB_inc[i])) multi_inc = {"0": 0} for inc in RGB_inc: if self.worker.thread_abort: return False if inc != "0": finc = float(inc) n = int(round(float(str(255.0 / finc)))) finc = 255.0 / n n += 1 if debug >= 9: safe_print("[D] inc:", inc) safe_print("[D] n:", n) for i in range(n): if self.worker.thread_abort: return False r = str(int(round(float(str(i * finc))))) for j in range(n): if self.worker.thread_abort: return False g = str(int(round(float(str(j * finc))))) for k in range(n): if self.worker.thread_abort: return False b = str(int(round(float(str(k * finc))))) if debug >= 9: safe_print("[D] Searching for", i, j, k, [r, g, b]) if [r, g, b] in uniqueRGB: if not inc in multi_inc: multi_inc[inc] = 0 multi_inc[inc] += 1 else: if debug >= 9: safe_print("[D] Not found! (b loop)") break if [r, g, b] not in uniqueRGB: if debug >= 9: safe_print("[D] Not found! (g loop)") break if [r, g, b] not in uniqueRGB: if debug >= 9: safe_print("[D] Not found! (r loop)") break multi_patches = max(multi_inc.values()) multi_steps = int(float(str(math.pow(multi_patches, 1 / 3.0)))) if debug: safe_print("[D] multi_patches:", multi_patches) safe_print("[D] multi_steps:", multi_steps) elif multi_steps >= 2: fullspread_patches += 2 # black and white always in MULTI_DIM_STEPS else: white_patches = len(self.ti1[0].queryi({"RGB_R": 100, "RGB_G": 100, "RGB_B": 100})) black_patches = len(self.ti1[0].queryi({"RGB_R": 0, "RGB_G": 0, "RGB_B": 0})) if single_channel_patches >= 2: fullspread_patches += 3 # black always in SINGLE_DIM_STEPS if gray_patches >= 2: fullspread_patches += 2 # black and white always in COMP_GREY_STEPS if multi_steps >= 2: fullspread_patches += 2 # black and white always in MULTI_DIM_STEPS fullspread_patches -= white_patches if self.worker.argyll_version >= [1, 6]: fullspread_patches -= black_patches fullspread_patches -= single_channel_patches * 3 fullspread_patches -= gray_patches fullspread_patches -= int(float(str(math.pow(multi_steps, 3)))) - single_channel_patches * 3 return (white_patches, black_patches, single_channel_patches, gray_patches, multi_steps, multi_bcc_steps, fullspread_patches, gamma, dark_emphasis) def tc_load_cfg_from_ti1_finish(self, result): if result: safe_print(lang.getstr("success")) (white_patches, black_patches, single_channel_patches, gray_patches, multi_steps, multi_bcc_steps, fullspread_patches, gamma, dark_emphasis) = result fullspread_ba = { "ERROR_OPTIMISED_PATCHES": "", # OFPS in older Argyll CMS versions #"ERROR_OPTIMISED_PATCHES": "R", # Perc. space random - same keyword as OFPS in older Argyll CMS versions, don't use "IFP_PATCHES": "t", # Inc. far point "INC_FAR_PATCHES": "t", # Inc. far point in older Argyll CMS versions "OFPS_PATCHES": "", # OFPS "RANDOM_DEVICE_PATCHES": "r", # Dev. space random "RANDOM_PATCHES": "r", # Dev. space random in older Argyll CMS versions "RANDOM_PERCEPTUAL_PATCHES": "R", # Perc. space random #"RANDOM_PERCEPTUAL_PATCHES": "Q", # Perc. space filling quasi-random - same keyword as perc. space random, don't use "SIMPLEX_DEVICE_PATCHES": "i", # Dev. space body centered cubic grid "SIMPLEX_PERCEPTUAL_PATCHES": "I", # Perc. space body centered cubic grid "SPACEFILING_RANDOM_PATCHES": "q", # Device space filling quasi-random, typo in older Argyll CMS versions "SPACEFILLING_RANDOM_PATCHES": "q", # Device space filling quasi-random } algo = None for key in fullspread_ba.keys(): if self.ti1.queryv1(key) > 0: algo = fullspread_ba[key] break if white_patches != None: setcfg("tc_white_patches", white_patches) if black_patches != None: setcfg("tc_black_patches", black_patches) if single_channel_patches != None: setcfg("tc_single_channel_patches", single_channel_patches) if gray_patches != None: setcfg("tc_gray_patches", gray_patches) if multi_steps != None: setcfg("tc_multi_steps", multi_steps) if multi_bcc_steps != None: setcfg("tc_multi_bcc_steps", multi_bcc_steps) setcfg("tc_fullspread_patches", self.ti1.queryv1("NUMBER_OF_SETS") - self.tc_get_total_patches(white_patches, black_patches, single_channel_patches, gray_patches, multi_steps, multi_bcc_steps, 0)) if gamma != None: setcfg("tc_gamma", gamma) if dark_emphasis != None: setcfg("tc_dark_emphasis", dark_emphasis) if algo != None: setcfg("tc_algo", algo) writecfg() self.tc_update_controls() self.tc_preview(True) return True else: safe_print(lang.getstr("aborted")) self.tc_update_controls() self.tc_check() if self.Parent and hasattr(self.Parent, "start_timers"): self.Parent.start_timers() def tc_get_increments(self, channel, vmaxlen = 4): channel.sort() increments = {"0": 0} for i, v in enumerate(channel): for j in reversed(xrange(i, len(channel))): inc = round(float(str(channel[j] - v)), vmaxlen) if inc > 0: inc = str(inc) if not inc in increments: increments[inc] = 0 increments[inc] += 1 return increments def tc_create(self): writecfg() cmd, args = self.worker.prepare_targen() if not isinstance(cmd, Exception): result = self.worker.exec_cmd(cmd, args, low_contrast = False, skip_scripts = True, silent = False, parent = self) else: result = cmd if not isinstance(result, Exception) and result: tmp = self.worker.create_tempdir() if isinstance(tmp, Exception): result = tmp if not isinstance(result, Exception): path = os.path.join(self.worker.tempdir, "temp.ti1") result = check_file_isfile(path, silent = False) if not isinstance(result, Exception) and result: try: self.ti1 = CGATS.CGATS(path) safe_print(lang.getstr("success")) except Exception, exception: return Error(u"Error - testchart file could not be read: " + safe_unicode(exception)) self.worker.wrapup(False) return result def tc_preview(self, result): self.tc_check() if isinstance(result, Exception): show_result_dialog(result, self) elif result: if verbose >= 1: safe_print(lang.getstr("tc.preview.create")) data = self.ti1.queryv1("DATA") if hasattr(self, "preview"): self.preview.Freeze() grid = self.grid data_format = self.ti1.queryv1("DATA_FORMAT") for i in data_format: if data_format[i] in ("RGB_R", "RGB_G", "RGB_B"): grid.AppendCols(1) grid.SetColLabelValue(grid.GetNumberCols() - 1, data_format[i]) grid.AppendCols(1) grid.SetColLabelValue(grid.GetNumberCols() - 1, "") colwidth = 100 for i in range(grid.GetNumberCols() - 1): grid.SetColSize(i, colwidth) grid.SetColSize(grid.GetNumberCols() - 1, 20) self.tc_amount = self.ti1.queryv1("NUMBER_OF_SETS") grid.AppendRows(self.tc_amount) grid.SetRowLabelSize(colwidth) attr = wx.grid.GridCellAttr() attr.SetAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER) attr.SetReadOnly() grid.SetColAttr(grid.GetNumberCols() - 1, attr) for i in data: sample = data[i] for j in range(grid.GetNumberCols()): label = grid.GetColLabelValue(j) if label in ("RGB_R", "RGB_G", "RGB_B"): grid.SetCellValue(i, j, str(sample[label])) self.tc_grid_setcolorlabel(i, data) self.tc_add_patch(i, sample) if hasattr(self, "preview"): self.patchsizer.Layout() self.preview.sizer.Layout() self.preview.FitInside() self.preview.SetScrollRate(20, 20) self.preview.Thaw() self.tc_set_default_status() if verbose >= 1: safe_print(lang.getstr("success")) if self.Parent and hasattr(self.Parent, "start_timers"): self.Parent.start_timers() def tc_add_data(self, row, newdata): self.grid.InsertRows(row + 1, len(newdata)) data = self.ti1.queryv1("DATA") if hasattr(self, "preview"): self.preview.Freeze() data_format = self.ti1.queryv1("DATA_FORMAT") for i in xrange(len(newdata)): for label in data_format.itervalues(): if not label in newdata[i]: newdata[i][label] = 0.0 data.add_data(newdata[i], row + 1 + i) for label in ("RGB_R", "RGB_G", "RGB_B"): for col in range(self.grid.GetNumberCols()): if self.grid.GetColLabelValue(col) == label: self.grid.SetCellValue(row + 1 + i, col, str(round(float(newdata[i][label]), 4))) self.tc_grid_setcolorlabel(row + 1 + i, data) if hasattr(self, "preview"): self.tc_add_patch(row + 1 + i, data[row + 1 + i]) self.tc_amount = self.ti1.queryv1("NUMBER_OF_SETS") self.tc_set_default_status() self.tc_save_check() if hasattr(self, "preview"): self.preview.Layout() self.preview.FitInside() self.preview.Thaw() def tc_add_patch(self, before, sample): if hasattr(self, "preview"): patch = wx.Panel(self.preview, -1) patch.Bind(wx.EVT_ENTER_WINDOW, self.tc_mouseover_handler, id = patch.GetId()) patch.Bind(wx.EVT_LEFT_DOWN, self.tc_mouseclick_handler, id = patch.GetId()) patch.SetMinSize((20,20)) patch.sample = sample self.patchsizer.Insert(before, patch) self.tc_patch_setcolorlabel(patch) def tc_grid_setcolorlabel(self, row, data=None): grid = self.grid col = grid.GetNumberCols() - 1 if data is None: data = self.ti1.queryv1("DATA") sample = data[row] style, colour, labeltext, labelcolour = self.tc_getcolorlabel(sample) grid.SetCellBackgroundColour(row, col, colour) grid.SetCellValue(row, col, labeltext) if labelcolour: grid.SetCellTextColour(row, col, labelcolour) self.grid.Refresh() def tc_getcolorlabel(self, sample): scale = 2.55 colour = wx.Colour(*[round(value * scale) for value in (sample.RGB_R, sample.RGB_G, sample.RGB_B)]) # mark patches: # W = white (R/G/B == 100) # K = black (R/G/B == 0) # k = light black (R == G == B > 0) # R = red # r = light red (R == 100 and G/B > 0) # G = green # g = light green (G == 100 and R/B > 0) # B = blue # b = light blue (B == 100 and R/G > 0) # C = cyan # c = light cyan (G/B == 100 and R > 0) # M = magenta # m = light magenta (R/B == 100 and G > 0) # Y = yellow # y = light yellow (R/G == 100 and B > 0) # border = 50% value style = wx.NO_BORDER if sample.RGB_R == sample.RGB_G == sample.RGB_B: # Neutral / black / white if sample.RGB_R < 50: labelcolour = wx.Colour(255, 255, 255) else: if sample.RGB_R == 50: style = wx.SIMPLE_BORDER labelcolour = wx.Colour(0, 0, 0) if sample.RGB_R <= 50: labeltext = "K" elif sample.RGB_R == 100: labeltext = "W" else: labeltext = "k" elif (sample.RGB_G == 0 and sample.RGB_B == 0) or (sample.RGB_R == 100 and sample.RGB_G == sample.RGB_B): # Red if sample.RGB_R > 75: labelcolour = wx.Colour(0, 0, 0) else: labelcolour = wx.Colour(255, 255, 255) if sample.RGB_R == 50: style = wx.SIMPLE_BORDER if sample.RGB_R == 100 and sample.RGB_G > 0: labeltext = "r" else: labeltext = "R" elif (sample.RGB_R == 0 and sample.RGB_B == 0) or (sample.RGB_G == 100 and sample.RGB_R == sample.RGB_B): # Green if sample.RGB_G > 75: labelcolour = wx.Colour(0, 0, 0) else: labelcolour = wx.Colour(255, 255, 255) if sample.RGB_G == 50: style = wx.SIMPLE_BORDER if sample.RGB_G == 100 and sample.RGB_R > 0: labeltext = "g" else: labeltext = "G" elif (sample.RGB_R == 0 and sample.RGB_G == 0) or (sample.RGB_B == 100 and sample.RGB_R == sample.RGB_G): # Blue if sample.RGB_R > 25: labelcolour = wx.Colour(0, 0, 0) else: labelcolour = wx.Colour(255, 255, 255) if sample.RGB_B == 50: style = wx.SIMPLE_BORDER if sample.RGB_B == 100 and sample.RGB_R > 0: labeltext = "b" else: labeltext = "B" elif (sample.RGB_R == 0 or sample.RGB_B == 100) and sample.RGB_G == sample.RGB_B: # Cyan if sample.RGB_G > 75: labelcolour = wx.Colour(0, 0, 0) else: labelcolour = wx.Colour(255, 255, 255) if sample.RGB_G == 50: style = wx.SIMPLE_BORDER if sample.RGB_G == 100 and sample.RGB_R > 0: labeltext = "c" else: labeltext = "C" elif (sample.RGB_G == 0 or sample.RGB_R == 100) and sample.RGB_R == sample.RGB_B: # Magenta if sample.RGB_R > 75: labelcolour = wx.Colour(0, 0, 0) else: labelcolour = wx.Colour(255, 255, 255) if sample.RGB_R == 50: style = wx.SIMPLE_BORDER if sample.RGB_R == 100 and sample.RGB_G > 0: labeltext = "m" else: labeltext = "M" elif (sample.RGB_B == 0 or sample.RGB_G == 100) and sample.RGB_R == sample.RGB_G: # Yellow if sample.RGB_G > 75: labelcolour = wx.Colour(0, 0, 0) else: labelcolour = wx.Colour(255, 255, 255) if sample.RGB_R == 100 and sample.RGB_G == 50: style = wx.SIMPLE_BORDER if sample.RGB_B > 0: labeltext = "y" else: labeltext = "Y" else: labeltext = "" labelcolour = None return style, colour, labeltext, labelcolour def tc_patch_setcolorlabel(self, patch): if hasattr(self, "preview"): sample = patch.sample style, colour, labeltext, labelcolour = self.tc_getcolorlabel(sample) patch.SetBackgroundColour(colour) if style: patch.SetWindowStyle(style) if labeltext: if not hasattr(patch, "label"): label = patch.label = wx.StaticText(patch, -1, "") label.SetMaxFontSize(11) label.patch = patch label.Bind(wx.EVT_ENTER_WINDOW, self.tc_mouseover_handler, id = label.GetId()) label.Bind(wx.EVT_LEFT_DOWN, self.tc_mouseclick_handler, id = label.GetId()) else: label = patch.label label.SetLabel(labeltext) label.SetForegroundColour(labelcolour) label.Center() else: if hasattr(patch, "label"): patch.label.Destroy() del patch.label def tc_set_default_status(self, event = None): if hasattr(self, "tc_amount"): statustxt = "%s: %s" % (lang.getstr("tc.patches.total"), self.tc_amount) sel = self.grid.GetSelectionRows() if sel: statustxt += " / %s: %s" % (lang.getstr("tc.patches.selected"), len(sel)) self.SetStatusText(statustxt) def tc_mouseover_handler(self, event): patch = self.preview.FindWindowById(event.GetId()) if hasattr(patch, "patch"): patch = patch.patch colour = patch.GetBackgroundColour() sample = patch.sample patchinfo = "%s %s: R=%s G=%s B=%s" % (lang.getstr("tc.patch"), sample.key + 1, colour[0], colour[1], colour[2]) self.SetStatusText("%s: %s / %s" % (lang.getstr("tc.patches.total"), self.tc_amount, patchinfo)) event.Skip() def tc_mouseclick_handler(self, event): patch = self.preview.FindWindowById(event.GetId()) if hasattr(patch, "patch"): patch = patch.patch sample = patch.sample self.tc_grid_select_row_handler(sample.key, event.ShiftDown(), event.ControlDown() or event.CmdDown()) return def tc_delete_rows(self, rows): self.grid.Freeze() if hasattr(self, "preview"): self.preview.Freeze() rows.sort() rows.reverse() self.grid.DeleteRows(rows[-1], len(rows)) if hasattr(self, "preview"): for row in rows: patch = self.patchsizer.GetItem(row).GetWindow() if self.patchsizer.Detach(patch): patch.Destroy() data = self.ti1.queryv1("DATA") if rows[0] != len(data) - 1: data.moveby1(rows[-1] + len(rows), -len(rows)) for row in rows: dict.pop(data, len(data) - 1) data.setmodified() self.tc_amount = self.ti1.queryv1("NUMBER_OF_SETS") row = min(rows[-1], self.grid.GetNumberRows() - 1) self.grid.SelectRow(row) self.grid.SetGridCursor(row, 0) self.grid.MakeCellVisible(row, 0) self.grid.Thaw() self.tc_save_check() if hasattr(self, "preview"): self.preview.Layout() self.preview.FitInside() self.preview.Thaw() self.tc_set_default_status() def main(testchart=None): config.initcfg() lang.init() lang.update_defaults() app = wx.App(0) app.tcframe = TestchartEditor(path=testchart) app.tcframe.Show() app.MainLoop() if __name__ == "__main__": argv = [] for arg in sys.argv: if arg[0] != "-": argv.append(arg) main(*argv[1:2]) dispcalGUI-1.7.1.6/dispcalGUI/wxUntetheredFrame.py000644 000765 000000 00000057742 12266603364 021644 0ustar00svpwheel000000 000000 # -*- coding: UTF-8 -*- """ Interactive display calibration UI """ import os import re import sys import time from wxaddons import wx from config import (getbitmap, getcfg, geticon, get_data_path, get_icon_bundle, setcfg) from log import get_file_logger, safe_print from meta import name as appname from options import debug, test, verbose from wxwindows import BitmapBackgroundPanel, FlatShadedButton, numpad_keycodes import CGATS import colormath import config import localization as lang BGCOLOUR = wx.Colour(0x33, 0x33, 0x33) FGCOLOUR = wx.Colour(0x99, 0x99, 0x99) if sys.platform == "darwin": FONTSIZE_LARGE = 11 FONTSIZE_MEDIUM = 11 FONTSIZE_SMALL = 10 else: FONTSIZE_LARGE = 10 FONTSIZE_MEDIUM = 8 FONTSIZE_SMALL = 8 class UntetheredFrame(wx.Frame): def __init__(self, parent=None, handler=None, keyhandler=None, start_timer=True): wx.Frame.__init__(self, parent, wx.ID_ANY, lang.getstr("measurement.untethered"), style=wx.DEFAULT_FRAME_STYLE) self.SetIcons(get_icon_bundle([256, 48, 32, 16], appname)) self.sizer = wx.FlexGridSizer(2, 1) self.sizer.AddGrowableCol(0) self.sizer.AddGrowableRow(0) self.sizer.AddGrowableRow(1) self.panel = wx.Panel(self) self.SetSizer(self.sizer) self.sizer.Add(self.panel, 1, wx.EXPAND) self.panel.SetBackgroundColour(BGCOLOUR) panelsizer = wx.FlexGridSizer(3, 2, 8, 8) panelsizer.AddGrowableCol(0) panelsizer.AddGrowableCol(1) panelsizer.AddGrowableRow(1) self.panel.SetSizer(panelsizer) self.label_RGB = wx.StaticText(self.panel, wx.ID_ANY, " ") self.label_RGB.SetForegroundColour(FGCOLOUR) panelsizer.Add(self.label_RGB, 0, wx.TOP | wx.LEFT | wx.EXPAND, border=8) self.label_XYZ = wx.StaticText(self.panel, wx.ID_ANY, " ") self.label_XYZ.SetForegroundColour(FGCOLOUR) panelsizer.Add(self.label_XYZ, 0, wx.TOP | wx.RIGHT | wx.EXPAND, border=8) self.panel_RGB = BitmapBackgroundPanel(self.panel, size=(256, 256), style=wx.BORDER_SIMPLE) self.panel_RGB.scalebitmap = (True, True) self.panel_RGB.SetBitmap(getbitmap("theme/checkerboard-32x32x5-333-444")) panelsizer.Add(self.panel_RGB, 1, wx.LEFT | wx.EXPAND, border=8) self.panel_XYZ = BitmapBackgroundPanel(self.panel, size=(256, 256), style=wx.BORDER_SIMPLE) self.panel_XYZ.scalebitmap = (True, True) self.panel_XYZ.SetBitmap(getbitmap("theme/checkerboard-32x32x5-333-444")) panelsizer.Add(self.panel_XYZ, 1, wx.RIGHT | wx.EXPAND, border=8) sizer = wx.BoxSizer(wx.HORIZONTAL) self.back_btn = FlatShadedButton(self.panel, bitmap=geticon(10, "back"), label="", fgcolour=FGCOLOUR) self.back_btn.Bind(wx.EVT_BUTTON, self.back_btn_handler) sizer.Add(self.back_btn, 0, wx.LEFT | wx.RIGHT, border=8) self.label_index = wx.StaticText(self.panel, wx.ID_ANY, " ") self.label_index.SetForegroundColour(FGCOLOUR) sizer.Add(self.label_index, 0, wx.ALIGN_CENTER_VERTICAL) self.next_btn = FlatShadedButton(self.panel, bitmap=geticon(10, "play"), label="", fgcolour=FGCOLOUR) self.next_btn.Bind(wx.EVT_BUTTON, self.next_btn_handler) sizer.Add(self.next_btn, 0, wx.LEFT, border=8) sizer.Add((12, 1), 1) self.measure_auto_cb = wx.CheckBox(self.panel, wx.ID_ANY, lang.getstr("auto")) self.measure_auto_cb.SetForegroundColour(FGCOLOUR) self.measure_auto_cb.Bind(wx.EVT_CHECKBOX, self.measure_auto_ctrl_handler) sizer.Add(self.measure_auto_cb, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT) panelsizer.Add(sizer, 0, wx.BOTTOM | wx.EXPAND, border=8) sizer = wx.BoxSizer(wx.HORIZONTAL) self.measure_btn = FlatShadedButton(self.panel, bitmap=geticon(10, "play"), label=" " + lang.getstr("measure"), fgcolour=FGCOLOUR) self.measure_btn.Bind(wx.EVT_BUTTON, self.measure_btn_handler) sizer.Add(self.measure_btn, 0, wx.RIGHT, border=6) # Sound when measuring # Needs to be stereo! try: self.measurement_sound = wx.Sound(get_data_path("beep.wav") or "") self.commit_sound = wx.Sound(get_data_path("camera_shutter.wav") or "") except NotImplementedError: pass if getcfg("measurement.play_sound"): bitmap = geticon(16, "sound_volume_full") else: bitmap = geticon(16, "sound_off") self.sound_on_off_btn = FlatShadedButton(self.panel, bitmap=bitmap, fgcolour=FGCOLOUR) self.sound_on_off_btn.SetToolTipString(lang.getstr("measurement.play_sound")) self.sound_on_off_btn.Bind(wx.EVT_BUTTON, self.measurement_play_sound_handler) sizer.Add(self.sound_on_off_btn, 0) sizer.Add((12, 1), 1) self.finish_btn = FlatShadedButton(self.panel, label=lang.getstr("finish"), fgcolour=FGCOLOUR) self.finish_btn.Bind(wx.EVT_BUTTON, self.finish_btn_handler) sizer.Add(self.finish_btn, 0, wx.RIGHT, border=8) panelsizer.Add(sizer, 0, wx.BOTTOM | wx.EXPAND, border=8) self.grid = wx.grid.Grid(self, -1, size=(536, 256)) self.grid.CreateGrid(0, 8) self.grid.SetRowLabelSize(62) for i in xrange(8): if i in (3, 4): size = 20 else: size = 62 self.grid.SetColSize(i, size) for i, label in enumerate(["R", "G", "B", "", "", "L*", "a*", "b*"]): self.grid.SetColLabelValue(i, label) gridbgcolor = wx.Colour(234, 234, 234) if sys.version_info >= (2, 6): self.grid.SetCellHighlightColour(gridbgcolor) self.grid.SetCellHighlightROPenWidth(0) self.grid.SetCellHighlightPenWidth(0) self.grid.SetDefaultCellBackgroundColour(gridbgcolor) self.grid.SetDefaultCellTextColour(BGCOLOUR) font = wx.Font(FONTSIZE_MEDIUM, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) self.grid.SetDefaultCellFont(font) self.grid.SetDefaultRowSize(20) self.grid.SetLabelBackgroundColour(gridbgcolor) self.grid.SetSelectionMode(wx.grid.Grid.wxGridSelectRows) self.grid.EnableDragColSize() self.grid.EnableEditing(False) self.grid.EnableGridLines(True) self.grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK, self.grid_left_click_handler) self.grid.Bind(wx.grid.EVT_GRID_CELL_LEFT_CLICK, self.grid_left_click_handler) self.sizer.Add(self.grid, 1, wx.EXPAND) self.Fit() self.SetMinSize(self.GetSize()) self.keyhandler = keyhandler if sys.platform in ("darwin", "win32"): # Use an accelerator table for space, 0-9, A-Z, numpad keycodes = [ord(" ")] + range(ord("0"), ord("9")) + range(ord("A"), ord("Z")) + numpad_keycodes self.id_to_keycode = {} for keycode in keycodes: self.id_to_keycode[wx.NewId()] = keycode accels = [] for id, keycode in self.id_to_keycode.iteritems(): self.Bind(wx.EVT_MENU, self.key_handler, id=id) accels += [(wx.ACCEL_NORMAL, keycode, id)] self.SetAcceleratorTable(wx.AcceleratorTable(accels)) else: self.Bind(wx.EVT_CHAR_HOOK, self.key_handler) self.Bind(wx.EVT_KEY_DOWN, self.key_handler) # Event handlers self.Bind(wx.EVT_CLOSE, self.OnClose, self) self.Bind(wx.EVT_MOVE, self.OnMove, self) self.timer = wx.Timer(self) if handler: self.Bind(wx.EVT_TIMER, handler, self.timer) self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy, self) # Final initialization steps self.logger = get_file_logger("untethered") self._setup() self.Show() if start_timer: self.start_timer() def EndModal(self, returncode=wx.ID_OK): return returncode def MakeModal(self, makemodal=False): pass def OnClose(self, event): config.writecfg() if not self.timer.IsRunning(): self.Destroy() else: self.keepGoing = False def OnDestroy(self, event): self.stop_timer() del self.timer def OnMove(self, event): if self.IsShownOnScreen() and not self.IsIconized() and \ (not self.GetParent() or not self.GetParent().IsShownOnScreen()): prev_x = getcfg("position.progress.x") prev_y = getcfg("position.progress.y") x, y = self.GetScreenPosition() if x != prev_x or y != prev_y: setcfg("position.progress.x", x) setcfg("position.progress.y", y) def Pulse(self, msg=""): if msg == lang.getstr("instrument.initializing"): self.label_RGB.SetLabel(msg) return self.keepGoing, False def Resume(self): self.keepGoing = True def Update(self, value, msg=""): return self.Pulse(msg) def UpdatePulse(self, msg=""): return self.Pulse(msg) def back_btn_handler(self, event): if self.index > 0: self.update(self.index - 1) def enable_btns(self, enable=True, enable_measure_button=False): self.is_measuring = not enable and enable_measure_button self.back_btn.Enable(enable and self.index > 0) self.next_btn.Enable(enable and self.index < self.index_max) self.measure_btn._bitmap = geticon(10, {True: "play", False: "pause"}.get(enable)) self.measure_btn.Enable(enable or enable_measure_button) def finish_btn_handler(self, event): self.finish_btn.Disable() self.cgats[0].type = "CTI3" self.cgats[0].add_keyword("COLOR_REP", "RGB_XYZ") if self.white_XYZ[1] > 0: # Normalize to Y = 100 query = self.cgats[0].DATA for i in query: XYZ = query[i]["XYZ_X"], query[i]["XYZ_Y"], query[i]["XYZ_Z"] XYZ = [v / self.white_XYZ[1] * 100 for v in XYZ] query[i]["XYZ_X"], query[i]["XYZ_Y"], query[i]["XYZ_Z"] = XYZ normalized = "YES" else: normalized = "NO" self.cgats[0].add_keyword("NORMALIZED_TO_Y_100", normalized) self.cgats[0].add_keyword("DEVICE_CLASS", "DISPLAY") self.cgats[0].add_keyword("INSTRUMENT_TYPE_SPECTRAL", "NO") if hasattr(self.cgats[0], "APPROX_WHITE_POINT"): self.cgats[0].remove_keyword("APPROX_WHITE_POINT") self.cgats[0].write(os.path.splitext(self.cgats.filename)[0] + ".ti3") self.safe_send("Q") time.sleep(.5) self.safe_send("Q") def flush(self): pass def get_Lab_RGB(self): row = self.cgats[0].DATA[self.index] XYZ = row["XYZ_X"], row["XYZ_Y"], row["XYZ_Z"] self.last_XYZ = XYZ Lab = colormath.XYZ2Lab(*XYZ) if self.white_XYZ[1] > 0: XYZ = [v / self.white_XYZ[1] * 100 for v in XYZ] white_XYZ_Y100 = [v / self.white_XYZ[1] * 100 for v in self.white_XYZ] white_CCT = colormath.XYZ2CCT(*white_XYZ_Y100) if white_CCT: DXYZ = colormath.CIEDCCT2XYZ(white_CCT, scale=100.0) if DXYZ: white_CIEDCCT_Lab = colormath.XYZ2Lab(*DXYZ) PXYZ = colormath.planckianCT2XYZ(white_CCT, scale=100.0) if PXYZ: white_planckianCCT_Lab = colormath.XYZ2Lab(*PXYZ) white_Lab = colormath.XYZ2Lab(*white_XYZ_Y100) if (DXYZ and PXYZ and (colormath.delta(*white_CIEDCCT_Lab + white_Lab)["E"] < 6 or colormath.delta(*white_planckianCCT_Lab + white_Lab)["E"] < 6)): # Is white close enough to daylight or planckian locus? XYZ = colormath.adapt(XYZ[0], XYZ[1], XYZ[2], white_XYZ_Y100, "D65") X, Y, Z = [v / 100.0 for v in XYZ] color = [int(round(v)) for v in colormath.XYZ2RGB(X, Y, Z, scale=255)] return Lab, color def grid_left_click_handler(self, event): if not self.is_measuring: row, col = event.GetRow(), event.GetCol() if row == -1 and col > -1: # col label clicked pass elif row > -1: # row clicked self.update(row) def has_worker_subprocess(self): return bool(getattr(self, "worker", None) and getattr(self.worker, "subprocess", None)) def isatty(self): return True def key_handler(self, event): keycode = None if event.GetEventType() in (wx.EVT_CHAR.typeId, wx.EVT_CHAR_HOOK.typeId, wx.EVT_KEY_DOWN.typeId): keycode = event.GetKeyCode() elif event.GetEventType() == wx.EVT_MENU.typeId: keycode = self.id_to_keycode.get(event.GetId()) if keycode is not None: if event.GetEventType() == wx.EVT_KEY_DOWN.typeId: if event.ControlDown() or event.CmdDown(): # CTRL (Linux/Mac/Windows) / CMD (Mac) if keycode == 65: # A self.grid.SelectAll() elif keycode in (67, 88): # C / X clip = [] cells = self.grid.GetSelection() i = -1 start_col = self.grid.GetNumberCols() for cell in cells: row = cell[0] col = cell[1] if i < row: clip += [[]] i = row if col < start_col: start_col = col while len(clip[-1]) - 1 < col: clip[-1] += [""] clip[-1][col] = self.grid.GetCellValue(row, col) for i, row in enumerate(clip): clip[i] = "\t".join(row[start_col:]) clipdata = wx.TextDataObject() clipdata.SetText("\n".join(clip)) wx.TheClipboard.Open() wx.TheClipboard.SetData(clipdata) wx.TheClipboard.Close() elif keycode in (wx.WXK_UP, wx.WXK_NUMPAD_UP): self.back_btn_handler(None) elif keycode in (wx.WXK_DOWN, wx.WXK_NUMPAD_DOWN): self.next_btn_handler(None) elif keycode in (wx.WXK_HOME, wx.WXK_NUMPAD_HOME): if self.index > -1: self.update(0) elif keycode in (wx.WXK_END, wx.WXK_NUMPAD_END): if self.index_max > -1: self.update(self.index_max) elif keycode in (wx.WXK_PAGEDOWN, wx.WXK_NUMPAD_PAGEDOWN): if self.index > -1: self.grid.MovePageDown() self.update(self.grid.GetGridCursorRow()) elif keycode in (wx.WXK_PAGEUP, wx.WXK_NUMPAD_PAGEUP): if self.index > -1: self.grid.MovePageUp() self.update(self.grid.GetGridCursorRow()) return elif self.has_worker_subprocess() and keycode < 255: if keycode == 27 or chr(keycode) == "Q": # ESC or Q self.worker.abort_subprocess() elif (not isinstance(self.FindFocus(), wx.Control) or keycode != 32): self.measure_btn_handler(None) return event.Skip() def measure(self, event=None): self.enable_btns(False, True) # Use a delay to allow for TFT lag wx.CallLater(200, self.safe_send, " ") def measure_auto_ctrl_handler(self, event): auto = self.measure_auto_cb.GetValue() setcfg("untethered.measure.auto", int(auto)) def measure_btn_handler(self, event): if self.is_measuring: self.is_measuring = False else: self.last_XYZ = (-1, -1, -1) self.measure_count = 1 self.measure() def measurement_play_sound_handler(self, event): setcfg("measurement.play_sound", int(not(bool(getcfg("measurement.play_sound"))))) if getcfg("measurement.play_sound"): bitmap = geticon(16, "sound_volume_full") else: bitmap = geticon(16, "sound_off") self.sound_on_off_btn._bitmap = bitmap def next_btn_handler(self, event): if self.index < self.index_max: self.update(self.index + 1) def parse_txt(self, txt): if not txt or not self.keepGoing: return self.logger.info("%r" % txt) data_len = len(self.cgats[0].DATA) if (self.grid.GetNumberRows() < data_len): self.index = 0 self.index_max = data_len - 1 self.grid.AppendRows(data_len - self.grid.GetNumberRows()) for i in self.cgats[0].DATA: self.grid.SetRowLabelValue(i, "%i" % (i + 1)) row = self.cgats[0].DATA[i] RGB = [] for j, label in enumerate("RGB"): value = int(round(float(str(row["RGB_%s" % label] * 2.55)))) self.grid.SetCellValue(row.SAMPLE_ID - 1, j, "%i" % value) RGB.append(value) self.grid.SetCellBackgroundColour(row.SAMPLE_ID - 1, 3, wx.Colour(*RGB)) if "Connecting to the instrument" in txt: self.Pulse(lang.getstr("instrument.initializing")) if "Spot read failed" in txt: self.last_error = txt if "Result is XYZ:" in txt: self.last_error = None if (getattr(self, "measurement_sound", None) and getcfg("measurement.play_sound") and self.measurement_sound.IsOk()): self.measurement_sound.Play(wx.SOUND_ASYNC) # Result is XYZ: d.dddddd d.dddddd d.dddddd, D50 Lab: d.dddddd d.dddddd d.dddddd XYZ = re.search("XYZ:\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)", txt) if not XYZ: return XYZ = [float(v) for v in XYZ.groups()] row = self.cgats[0].DATA[self.index] if (row["RGB_R"] == 100 and row["RGB_G"] == 100 and row["RGB_B"] == 100): # White if XYZ[1] > 0: self.cgats[0].add_keyword("LUMINANCE_XYZ_CDM2", "%.6f %.6f %.6f" % tuple(XYZ)) self.white_XYZ = XYZ Lab1 = colormath.XYZ2Lab(*self.last_XYZ) Lab2 = colormath.XYZ2Lab(*XYZ) delta = colormath.delta(*Lab1 + Lab2) if debug or test or verbose > 1: safe_print("Last recorded Lab: %.4f %.4f %.4f" % Lab1) safe_print("Current Lab: %.4f %.4f %.4f" % Lab2) safe_print("Delta E to last recorded Lab: %.4f" % delta["E"]) safe_print("Abs. delta L to last recorded Lab: %.4f" % abs(delta["L"])) safe_print("Abs. delta C to last recorded Lab: %.4f" % abs(delta["C"])) if (delta["E"] > getcfg("untethered.min_delta") or (abs(delta["L"]) > getcfg("untethered.min_delta.lightness") and abs(delta["C"]) < getcfg("untethered.max_delta.chroma"))): self.measure_count += 1 if self.measure_count == 2: if (getattr(self, "commit_sound", None) and getcfg("measurement.play_sound") and self.commit_sound.IsOk()): self.commit_sound.Play(wx.SOUND_ASYNC) self.measure_count = 0 # Reset row label self.grid.SetRowLabelValue(self.index, "%i" % (self.index + 1)) # Update CGATS query = self.cgats[0].queryi({"RGB_R": row["RGB_R"], "RGB_G": row["RGB_G"], "RGB_B": row["RGB_B"]}) for i in query: index = query[i].SAMPLE_ID - 1 if index not in self.measured: self.measured.append(index) if index == self.index + 1: # Increment the index if we have consecutive patches self.index = index query[i]["XYZ_X"], query[i]["XYZ_Y"], query[i]["XYZ_Z"] = XYZ if getcfg("untethered.measure.auto"): self.show_RGB(False, False) self.show_XYZ() Lab, color = self.get_Lab_RGB() for i in query: row = query[i] self.grid.SetCellBackgroundColour(query[i].SAMPLE_ID - 1, 4, wx.Colour(*color)) for j in xrange(3): self.grid.SetCellValue(query[i].SAMPLE_ID - 1, 5 + j, "%.2f" % Lab[j]) self.grid.MakeCellVisible(self.index, 0) self.grid.ForceRefresh() if len(self.measured) == data_len: self.finished = True self.finish_btn.Enable() else: # Jump to the next or previous unmeasured patch, if any index = self.index for i in xrange(self.index + 1, data_len): if (getcfg("untethered.measure.auto") or not i in self.measured): self.index = i break if self.index == index: for i in xrange(self.index - 1, -1, -1): if not i in self.measured: self.index = i break if self.index != index: # Mark the row containing the next/previous patch self.grid.SetRowLabelValue(self.index, u"\u25ba %i" % (self.index + 1)) self.grid.MakeCellVisible(self.index, 0) if "key to take a reading" in txt and not self.last_error: if getcfg("untethered.measure.auto") and self.is_measuring: if not self.finished: self.measure() else: self.enable_btns() else: show_XYZ = self.index in self.measured delay = getcfg("untethered.measure.manual.delay") * 1000 wx.CallLater(delay, self.show_RGB, not show_XYZ) if show_XYZ: wx.CallLater(delay, self.show_XYZ) wx.CallLater(delay, self.enable_btns) def pause_continue_handler(self, event=None): if not event: self.parse_txt(self.worker.lastmsg.read()) @property def paused(self): return False def reset(self): self._setup() def _setup(self): self.logger.info("-" * 80) self.is_measuring = False self.keepGoing = True self.last_error = None self.index = -1 self.index_max = -1 self.last_XYZ = (-1, -1, -1) self.white_XYZ = (-1, -1, -1) self.measure_count = 0 self.measured = [] self.finished = False self.label_RGB.SetLabel(" ") self.label_XYZ.SetLabel(" ") self.panel_RGB.SetBackgroundColour(BGCOLOUR) self.panel_RGB.Refresh() self.panel_RGB.Update() self.panel_XYZ.SetBackgroundColour(BGCOLOUR) self.panel_XYZ.Refresh() self.panel_XYZ.Update() self.label_index.SetLabel(" ") self.enable_btns(False) self.measure_auto_cb.SetValue(bool(getcfg("untethered.measure.auto"))) self.finish_btn.Disable() if self.grid.GetNumberRows(): self.grid.DeleteRows(0, self.grid.GetNumberRows()) # Set position placed = False if self.GetParent(): if self.GetParent().IsShownOnScreen(): self.Center() placed = True else: x = getcfg("position.progress.x", False) or self.GetParent().GetScreenPosition()[0] y = getcfg("position.progress.y", False) or self.GetParent().GetScreenPosition()[1] else: x = getcfg("position.progress.x") y = getcfg("position.progress.y") if not placed: self.SetSaneGeometry(x, y) def safe_send(self, bytes): if self.has_worker_subprocess() and not self.worker.subprocess_abort: self.worker.safe_send(bytes) def show_RGB(self, clear_XYZ=True, mark_current_row=True): row = self.cgats[0].DATA[self.index] self.label_RGB.SetLabel("RGB %i %i %i" % (round(row["RGB_R"] * 2.55), round(row["RGB_G"] * 2.55), round(row["RGB_B"] * 2.55))) color = [int(round(v * 2.55)) for v in (row["RGB_R"], row["RGB_G"], row["RGB_B"])] self.panel_RGB.SetBackgroundColour(wx.Colour(*color)) self.panel_RGB.SetBitmap(None) self.panel_RGB.Refresh() self.panel_RGB.Update() if clear_XYZ: self.label_XYZ.SetLabel(" ") self.panel_XYZ.SetBackgroundColour(BGCOLOUR) self.panel_XYZ.SetBitmap(getbitmap("theme/checkerboard-32x32x5-333-444")) self.panel_XYZ.Refresh() self.panel_XYZ.Update() if mark_current_row: self.grid.SetRowLabelValue(self.index, u"\u25ba %i" % (self.index + 1)) self.grid.MakeCellVisible(self.index, 0) self.grid.SelectRow(self.index) self.grid.SetGridCursor(self.index, 0) self.label_index.SetLabel("%i/%i" % (self.index + 1, len(self.cgats[0].DATA))) self.label_index.GetContainingSizer().Layout() def show_XYZ(self): Lab, color = self.get_Lab_RGB() self.label_XYZ.SetLabel("L*a*b* %.2f %.2f %.2f" % Lab) self.panel_XYZ.SetBackgroundColour(wx.Colour(*color)) self.panel_XYZ.SetBitmap(None) self.panel_XYZ.Refresh() self.panel_XYZ.Update() def start_timer(self, ms=50): self.timer.Start(ms) def stop_timer(self): self.timer.Stop() def update(self, index): # Reset row label self.grid.SetRowLabelValue(self.index, "%i" % (self.index + 1)) self.index = index show_XYZ = self.index in self.measured self.show_RGB(not show_XYZ) if show_XYZ: self.show_XYZ() self.enable_btns() def write(self, txt): wx.CallAfter(self.parse_txt, txt) if __name__ == "__main__": from thread import start_new_thread from time import sleep class Subprocess(): def send(self, bytes): start_new_thread(test, (bytes,)) class Worker(object): def __init__(self): self.subprocess = Subprocess() self.subprocess_abort = False def abort_subprocess(self): self.subprocess.send("Q") def safe_send(self, bytes): self.subprocess.send(bytes) return True config.initcfg() print "untethered.min_delta", getcfg("untethered.min_delta") print "untethered.min_delta.lightness", getcfg("untethered.min_delta.lightness") print "untethered.max_delta.chroma", getcfg("untethered.max_delta.chroma") lang.init() lang.update_defaults() app = wx.App(0) frame = UntetheredFrame(start_timer=False) frame.cgats = CGATS.CGATS(getcfg("testchart.file")) frame.worker = Worker() frame.Show() def test(bytes=None): menu = r"""Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""" if not bytes: txt = menu elif bytes == " ": i = frame.index row = frame.cgats[0].DATA[i] txt = """ Result is XYZ: %.6f %.6f %.6f Place instrument on spot to be measured, and hit [A-Z] to read white and setup FWA compensation (keyed to letter) [a-z] to read and make FWA compensated reading from keyed reference 'r' to set reference, 's' to save spectrum, 'h' to toggle high res., 'k' to do a calibration Hit ESC or Q to exit, any other key to take a reading:""" % (row.XYZ_X, row.XYZ_Y, row.XYZ_Z) elif bytes in ("Q", "q"): wx.CallAfter(frame.Close) return else: return for line in txt.split("\n"): sleep(.03125) if frame: wx.CallAfter(frame.write, line) print line start_new_thread(test, tuple()) app.MainLoop() dispcalGUI-1.7.1.6/dispcalGUI/wxwindows.py000644 000765 000000 00000140612 12266701714 020237 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from time import gmtime, strftime, time import math import os import sys import config from config import (btn_width_correction, defaults, getbitmap, getcfg, geticon, get_bitmap_as_icon, get_data_path, get_verified_path, setcfg) from debughelpers import getevtobjname, getevttype from log import log as log_, safe_print from meta import name as appname from options import debug from thread import start_new_thread from util_os import waccess from util_str import safe_unicode, wrap from wxaddons import (CustomEvent, FileDrop as _FileDrop, get_dc_font_size, get_platform_window_decoration_size, wx) from wxfixes import GTKMenuItemGetFixedLabel from lib.agw import labelbook from lib.agw.gradientbutton import GradientButton, HOVER from lib.agw.fourwaysplitter import (_TOLERANCE, FLAG_CHANGED, FLAG_PRESSED, NOWHERE, FourWaySplitter, FourWaySplitterEvent) import localization as lang import util_str try: import wx.lib.agw.floatspin as floatspin except ImportError: import floatspin import wx.lib.filebrowsebutton as filebrowse numpad_keycodes = [wx.WXK_NUMPAD0, wx.WXK_NUMPAD1, wx.WXK_NUMPAD2, wx.WXK_NUMPAD3, wx.WXK_NUMPAD4, wx.WXK_NUMPAD5, wx.WXK_NUMPAD6, wx.WXK_NUMPAD7, wx.WXK_NUMPAD8, wx.WXK_NUMPAD9, wx.WXK_NUMPAD_ADD, wx.WXK_NUMPAD_ENTER, wx.WXK_NUMPAD_EQUAL, wx.WXK_NUMPAD_DIVIDE, wx.WXK_NUMPAD_MULTIPLY, wx.WXK_NUMPAD_SUBTRACT] class AboutDialog(wx.Dialog): def __init__(self, *args, **kwargs): kwargs["style"] = wx.DEFAULT_DIALOG_STYLE & ~(wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX) wx.Dialog.__init__(self, *args, **kwargs) self.set_properties() self.sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer) def set_properties(self): icon = wx.EmptyIcon() self.SetIcon(icon) def OnClose(self, event): self.Hide() def Layout(self): self.sizer.SetSizeHints(self) self.sizer.Layout() def add_items(self, items): self.closebtn = wx.Button(self, -1, lang.getstr("ok")) self.Bind(wx.EVT_BUTTON, self.OnClose, id=self.closebtn.GetId()) items += [self.closebtn, (1, 16)] pointsize = 10 for item in items: if isinstance(item, wx.Window): font = item.GetFont() if item.GetLabel() and font.GetPointSize() > pointsize: font.SetPointSize(pointsize) item.SetFont(font) self.sizer.Add(item, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 0) class BaseFrame(wx.Frame): """ Main frame base class. """ def __init__(self, *args, **kwargs): wx.Frame.__init__(self, *args, **kwargs) def focus_handler(self, event): if debug and hasattr(self, "last_focused_ctrl"): safe_print("[D] Last focused control: %s" % self.last_focused_ctrl) if hasattr(self, "last_focused_ctrl") and self.last_focused_ctrl and \ self.last_focused_ctrl != event.GetEventObject(): catchup_event = wx.FocusEvent(wx.EVT_KILL_FOCUS.evtType[0], self.last_focused_ctrl.GetId()) if debug: safe_print("[D] Last focused control ID %s %s processing " "catchup event type %s %s" % (self.last_focused_ctrl.GetId(), self.last_focused_ctrl.GetName(), catchup_event.GetEventType(), getevttype(catchup_event))) if self.last_focused_ctrl.ProcessEvent(catchup_event): if debug: safe_print("[D] Last focused control processed catchup " "event") event.Skip() if hasattr(event.GetEventObject(), "GetId") and \ callable(event.GetEventObject().GetId): event = CustomEvent(event.GetEventType(), event.GetEventObject(), self.last_focused_ctrl) if hasattr(event.GetEventObject(), "GetId") and \ callable(event.GetEventObject().GetId): if debug: safe_print("[D] Setting last focused control to %s " % event.GetEventObject()) self.last_focused_ctrl = event.GetEventObject() if debug: if hasattr(event, "GetWindow") and event.GetWindow(): safe_print("[D] Focus moving from control ID %s %s to %s %s, " "event type %s %s" % (event.GetWindow().GetId(), event.GetWindow().GetName(), event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) else: safe_print("[D] Focus moving to control ID %s %s, event type " "%s %s" % (event.GetId(), getevtobjname(event, self), event.GetEventType(), getevttype(event))) event.Skip() def setup_language(self): """ Substitute translated strings for menus, controls, labels and tooltips. """ # Title if not hasattr(self, "_Title"): # Backup un-translated label title = self._Title = self.Title else: # Restore un-translated label title = self._Title translated = lang.getstr(title) if translated != title: self.Title = translated # Menus menubar = self.menubar if hasattr(self, "menubar") else self.GetMenuBar() if menubar: for menu, label in menubar.GetMenus(): menu_pos = menubar.FindMenu(label) if not hasattr(menu, "_Label"): # Backup un-translated label menu._Label = label menubar.SetMenuLabel(menu_pos, "&" + lang.getstr( GTKMenuItemGetFixedLabel(menu._Label))) if not hasattr(menu, "_Items"): # Backup un-translated labels menu._Items = [(item, item.Label) for item in menu.GetMenuItems()] for item, label in menu._Items: if item.Label: label = GTKMenuItemGetFixedLabel(label) if item.Accel: item.Text = lang.getstr(label) + "\t" + \ item.Accel.ToString() else: item.Text = lang.getstr(label) if sys.platform == "darwin": wx.GetApp().SetMacHelpMenuTitleName(lang.getstr("menu.help")) self.SetMenuBar(menubar) # Controls and labels for child in self.GetAllChildren(): if (isinstance(child, wx.StaticText) or isinstance(child, wx.Control)): if not hasattr(child, "_Label"): # Backup un-translated label label = child._Label = child.Label else: # Restore un-translated label label = child._Label translated = lang.getstr(label) if translated != label: child.Label = translated if child.ToolTip: if not hasattr(child, "_ToolTipString"): # Backup un-translated tooltip tooltipstr = child._ToolTipString = child.ToolTip.Tip else: # Restore un-translated tooltip tooltipstr = child._ToolTipString translated = lang.getstr(tooltipstr) if translated != tooltipstr: child.SetToolTipString(wrap(translated, 72)) def update_layout(self): """ Update main window layout. """ self.GetSizer().SetSizeHints(self) self.GetSizer().Layout() def set_child_ctrls_as_attrs(self, parent=None): """ Set child controls and labels as attributes of the frame. Will also set a maximum font size of 11 pt. parent is the window over which children will be iterated and defaults to self. """ if not parent: parent = self for child in parent.GetAllChildren(): if debug: safe_print(child.__class__, child.Name) if isinstance(child, (wx.StaticText, wx.Control, floatspin.FloatSpin)): child.SetMaxFontSize(11) if sys.platform == "darwin" or debug: # Work around ComboBox issues on Mac OS X # (doesn't receive EVT_KILL_FOCUS) if isinstance(child, wx.ComboBox): if child.IsEditable(): if debug: safe_print("[D]", child.Name, "binds EVT_TEXT to focus_handler") child.Bind(wx.EVT_TEXT, self.focus_handler) else: child.Bind(wx.EVT_SET_FOCUS, self.focus_handler) if not hasattr(self, child.Name): setattr(self, child.Name, child) class BaseInteractiveDialog(wx.Dialog): """ Base class for informational and confirmation dialogs """ def __init__(self, parent=None, id=-1, title=appname, msg="", ok="OK", bitmap=None, pos=(-1, -1), size=(400, -1), show=True, log=True, print_=False, style=wx.DEFAULT_DIALOG_STYLE, nowrap=False, wrap=70): if print_: safe_print(msg, log=False) if log: log_(msg) if parent: pos = list(pos) i = 0 for coord in pos: if coord > -1: pos[i] += parent.GetScreenPosition()[i] i += 1 pos = tuple(pos) wx.Dialog.__init__(self, parent, id, title, pos, size, style) self.SetPosition(pos) # yes, this is needed self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.Bind(wx.EVT_SHOW, self.OnShow, self) margin = 12 self.sizer0 = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer0) if bitmap: self.sizer1 = wx.FlexGridSizer(1, 2) else: self.sizer1 = wx.BoxSizer(wx.HORIZONTAL) self.sizer2 = wx.BoxSizer(wx.HORIZONTAL) self.sizer3 = wx.FlexGridSizer(0, 1) self.sizer0.Add(self.sizer1, flag = wx.ALIGN_LEFT | wx.TOP | wx.RIGHT | wx.LEFT, border = margin) self.sizer0.Add(self.sizer2, flag = wx.ALIGN_RIGHT | wx.ALL, border = margin) if bitmap: self.bitmap = wx.StaticBitmap(self, -1, bitmap, size=(32, 32)) self.sizer1.Add(self.bitmap, flag=wx.RIGHT, border=margin) self.sizer1.Add(self.sizer3, flag=wx.ALIGN_LEFT) msg = msg.replace("&", "&&") self.message = wx.StaticText(self, -1, msg if nowrap else util_str.wrap(msg, wrap)) self.sizer3.Add(self.message) btnwidth = 80 self.ok = wx.Button(self, wx.ID_OK, ok) self.ok.SetInitialSize((self.ok.GetSize()[0] + btn_width_correction, -1)) self.sizer2.Add(self.ok) self.Bind(wx.EVT_BUTTON, self.OnClose, id=wx.ID_OK) self.sizer0.SetSizeHints(self) self.sizer0.Layout() if parent and parent.IsIconized(): parent.Restore() if not pos or pos == (-1, -1): self.Center(wx.BOTH) elif pos[0] == -1: self.Center(wx.HORIZONTAL) elif pos[1] == -1: self.Center(wx.VERTICAL) if not wx.GetApp().IsActive() and wx.GetApp().GetTopWindow(): wx.CallAfter(wx.GetApp().GetTopWindow().RequestUserAttention) if show: self.ok.SetDefault() self.ShowModalThenDestroy(parent) def ShowModalThenDestroy(self, parent=None): if parent: if getattr(parent, "modaldlg", None): wx.CallLater(250, self.ShowModalThenDestroy, parent) return parent.modaldlg = self self.ShowModal() if parent: parent.modaldlg = None del parent.modaldlg self.Destroy() def OnShow(self, event): self.SetFocus() def OnClose(self, event): if event.GetEventObject() == self: id = wx.ID_OK else: id = event.GetId() self.EndModal(id) class BitmapBackgroundBitmapButton(wx.BitmapButton): """ A BitmapButton that will use its parent bitmap background. The parent needs to have a GetBitmap() method. """ def __init__(self, *args, **kwargs): wx.BitmapButton.__init__(self, *args, **kwargs) self.Bind(wx.EVT_PAINT, self.OnPaint) def OnPaint(self, dc): dc = wx.PaintDC(self) try: dc = wx.GCDC(dc) except Exception, exception: pass dc.DrawBitmap(self.Parent.GetBitmap(), 0, -self.GetPosition()[1]) dc.DrawBitmap(self.GetBitmapLabel(), 0, 0) class BitmapBackgroundPanel(wx.Panel): """ A panel with a background bitmap """ def __init__(self, *args, **kwargs): wx.Panel.__init__(self, *args, **kwargs) self._bitmap = None self.scalebitmap = (True, False) self.scalequality = wx.IMAGE_QUALITY_NORMAL self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_SIZE, self.OnSize) def GetBitmap(self): return self._bitmap def SetBitmap(self, bitmap): self._bitmap = bitmap def OnPaint(self, event): dc = wx.BufferedPaintDC(self) self._draw(dc) def OnSize(self,event): self.Refresh() def _draw(self, dc): bbr = wx.Brush(self.GetBackgroundColour(), wx.SOLID) dc.SetBackground(bbr) dc.SetBackgroundMode(wx.SOLID) dc.Clear() dc.SetTextForeground(self.GetForegroundColour()) dc.SetTextBackground(self.GetBackgroundColour()) bmp = self._bitmap if bmp: if True in self.scalebitmap: img = bmp.ConvertToImage() bmp = wx.BitmapFromImage(img.Rescale(self.GetSize()[0] if self.scalebitmap[0] else img.GetSize()[0], self.GetSize()[1] if self.scalebitmap[1] else img.GetSize()[1], quality=self.scalequality)) dc.DrawBitmap(bmp, 0, 0) class BitmapBackgroundPanelText(BitmapBackgroundPanel): """ A panel with a background bitmap and text label """ def __init__(self, *args, **kwargs): BitmapBackgroundPanel.__init__(self, *args, **kwargs) self._label = "" def _set_font(self, dc): try: dc = wx.GCDC(dc) except Exception, exception: pass font = self.GetFont() font.SetPointSize(get_dc_font_size(font.GetPointSize(), dc)) dc.SetFont(font) return dc def GetLabel(self): return self._label def SetLabel(self, label): self._label = label def _draw(self, dc): BitmapBackgroundPanel._draw(self, dc) pen = wx.Pen(wx.Colour(0x66, 0x66, 0x66), 1, wx.SOLID) pen.SetCap(wx.CAP_BUTT) dc.SetPen(pen) dc.DrawLine(0, self.GetSize()[1] - 1, self.GetSize()[0], self.GetSize()[1] - 1) dc = self._set_font(dc) w1, h1 = self.GetTextExtent(self.GetLabel()) w2, h2 = dc.GetTextExtent(self.GetLabel()) w = (max(w1, w2) - min(w1, w2)) / 2.0 + min(w1, w2) h = (max(h1, h2) - min(h1, h2)) / 2.0 + min(h1, h2) x, y = (self.GetSize()[0] / 2.0 - w / 2.0, self.GetSize()[1] / 2.0 - h / 2.0) dc.SetTextForeground(wx.Colour(214, 214, 214)) dc.DrawText(self.GetLabel(), x + 1, y + 1) dc.SetTextForeground(self.GetForegroundColour()) dc.DrawText(self.GetLabel(), x, y) class ConfirmDialog(BaseInteractiveDialog): """ Confirmation dialog with OK and Cancel buttons """ def __init__(self, parent=None, id=-1, title=appname, msg="", ok="OK", cancel="Cancel", bitmap=None, pos=(-1, -1), size=(400, -1), alt=None, log=False, print_=False, style=wx.DEFAULT_DIALOG_STYLE, nowrap=False, wrap=70): BaseInteractiveDialog.__init__(self, parent, id, title, msg, ok, bitmap, pos, size, show=False, log=log, print_=print_, style=style, nowrap=nowrap, wrap=wrap) self.Bind(wx.EVT_CLOSE, self.OnClose, self) margin = 12 if alt: self.alt = wx.Button(self, -1, alt) self.alt.SetInitialSize((self.alt.GetSize()[0] + btn_width_correction, -1)) self.sizer2.Prepend((margin, margin)) self.sizer2.Prepend(self.alt) self.Bind(wx.EVT_BUTTON, self.OnClose, id=self.alt.GetId()) self.cancel = wx.Button(self, wx.ID_CANCEL, cancel) self.cancel.SetInitialSize((self.cancel.GetSize()[0] + btn_width_correction, -1)) self.sizer2.Prepend((margin, margin)) self.sizer2.Prepend(self.cancel) self.Bind(wx.EVT_BUTTON, self.OnClose, id=wx.ID_CANCEL) self.Fit() def OnClose(self, event): if hasattr(self, "OnCloseIntercept"): self.OnCloseIntercept(event) return if event.GetEventObject() == self: id = wx.ID_CANCEL else: id = event.GetId() self.EndModal(id) class FileBrowseBitmapButtonWithChoiceHistory(filebrowse.FileBrowseButtonWithHistory): def __init__(self, *arguments, **namedarguments): self.history = namedarguments.get("history") or [] if 'history' in namedarguments: del namedarguments["history"] self.historyCallBack = None if callable(self.history): self.historyCallBack = self.history self.history = [] name = namedarguments.get('name', 'fileBrowseButtonWithHistory') if 'name' in namedarguments: del namedarguments['name'] filebrowse.FileBrowseButton.__init__(self, *arguments, **namedarguments) self.SetName(name) def Disable(self): self.Enable(False) def Enable(self, enable=True): self.textControl.Enable(enable and self.history != [""]) self.browseButton.Enable(enable) def GetValue(self): """ retrieve current value of text control """ if self.textControl.GetSelection() > -1: return self.history[self.textControl.GetSelection()] return "" GetPath = GetValue def OnChanged(self, evt): self.textControl.SetToolTipString(self.history[self.textControl.GetSelection()]) if self.callCallback and self.changeCallback: self.changeCallback(evt) def SetBackgroundColour(self,color): wx.Panel.SetBackgroundColour(self,color) def SetHistory(self, value=(), selectionIndex=None, control=None): """Set the current history list""" if control is None: control = self.textControl if self.history == value: return index = control.GetSelection() if self.history and index > -1: tempValue = self.history[index] else: tempValue = None self.history = value control.Clear() for path in value: control.Append(os.path.basename(path)) if tempValue: self.history.append(tempValue) control.Append(os.path.basename(tempValue)) self.setupControl(selectionIndex, control) def SetMaxFontSize(self, pointsize=11): self.textControl.SetMaxFontSize(pointsize) def SetValue(self, value, callBack=1, clear_on_empty_value=False): if not value: if clear_on_empty_value and self.history: index = self.textControl.GetSelection() if index > -1: self.history.pop(index) self.textControl.Delete(index) if not value in self.history: self.history.append(value) self.textControl.Append(os.path.basename(value)) self.setupControl(self.history.index(value)) if callBack: self.changeCallback(CustomEvent(wx.EVT_CHOICE.typeId, self.textControl)) def SetPath(self, path): self.SetValue(path, 0, clear_on_empty_value=True) def createBrowseButton(self): """Create the browse-button control""" button = wx.BitmapButton(self, -1, geticon(16, "document-open"), style=wx.NO_BORDER) button.SetBitmapDisabled(geticon(16, "empty")) button.SetToolTipString(self.toolTip) button.Bind(wx.EVT_BUTTON, self.OnBrowse) return button def createDialog(self, parent, id, pos, size, style, name=None): """Setup the graphic representation of the dialog""" wx.Panel.__init__ (self, parent, id, pos, size, style) self.SetMinSize(size) # play nice with sizers box = wx.BoxSizer(wx.HORIZONTAL) self.textControl = self.createTextControl() if self.history: history = self.history self.history = [] self.SetHistory(history) box.Add(self.textControl, 1, wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM, 4) self.browseButton = self.createBrowseButton() box.Add(self.browseButton, 0, wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 8) self.SetAutoLayout(True) self.SetSizer(box) self.Layout() def createLabel(self): return (0, 0) def createTextControl(self): """Create the text control""" textControl = wx.Choice(self, -1) textControl.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus) if self.changeCallback: textControl.Bind(wx.EVT_CHOICE, self.OnChanged) return textControl def setupControl(self, selectionIndex=None, control=None): if control is None: control = self.textControl if selectionIndex is None: selectionIndex = len(self.history) - 1 control.SetSelection(selectionIndex) toolTip = (self.history[selectionIndex] if selectionIndex > -1 else self.toolTip) control.SetToolTipString(toolTip) control.Enable(control.Enabled and self.history != [""]) class FileDrop(_FileDrop): def __init__(self, *args, **kwargs): self.parent = kwargs.pop("parent") _FileDrop.__init__(self, *args, **kwargs) self.unsupported_handler = self.drop_unsupported_handler def drop_unsupported_handler(self): """ Drag'n'drop handler for unsupported files. Shows an error message. """ files = self._filenames InfoDialog(self.parent, msg=lang.getstr("error.file_type_unsupported") + "\n\n" + "\n".join(files), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) class FlatShadedButton(GradientButton): def __init__(self, parent, id=wx.ID_ANY, bitmap=None, label="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER, validator=wx.DefaultValidator, name="gradientbutton", bgcolour=None, fgcolour=None): GradientButton.__init__(self, parent, id, bitmap, label, pos, size, style, validator, name) if sys.platform != "win32": self.SetFont(wx.Font(11, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self._setcolours(bgcolour, fgcolour) def _setcolours(self, bgcolour=None, fgcolour=None): self.SetTopStartColour(bgcolour or wx.Colour(0x22, 0x22, 0x22)) self.SetTopEndColour(bgcolour or wx.Colour(0x22, 0x22, 0x22)) self.SetBottomStartColour(bgcolour or wx.Colour(0x22, 0x22, 0x22)) self.SetBottomEndColour(bgcolour or wx.Colour(0x22, 0x22, 0x22)) self.SetForegroundColour(fgcolour or wx.Colour(0xdd, 0xdd, 0xdd)) self.SetPressedBottomColour(bgcolour or wx.Colour(0x22, 0x22, 0x22)) self.SetPressedTopColour(bgcolour or wx.Colour(0x22, 0x22, 0x22)) def Disable(self): self.Enable(False) def DoGetBestSize(self): """ Overridden base class virtual. Determines the best size of the button based on the label and bezel size. """ if not getattr(self, "_lastBestSize", None): label = self.GetLabel() or u"\u200b" dc = wx.ClientDC(self) dc.SetFont(self.GetFont()) retWidth, retHeight = dc.GetTextExtent(label) bmpWidth = bmpHeight = 0 constant = 15 if self._bitmap: if label != u"\u200b": constant = 10 else: constant = 0 # Pin the bitmap height to 10 bmpWidth, bmpHeight = self._bitmap.GetWidth()+constant, 10 retWidth += bmpWidth retHeight = max(bmpHeight, retHeight) constant = 15 self._lastBestSize = wx.Size(retWidth+constant, retHeight+constant) return self._lastBestSize def OnGainFocus(self, event): """ Handles the ``wx.EVT_SET_FOCUS`` event for L{GradientButton}. :param `event`: a `wx.FocusEvent` event to be processed. """ self._hasFocus = True self._mouseAction = HOVER self.Refresh() self.Update() def OnLoseFocus(self, event): """ Handles the ``wx.EVT_LEAVE_WINDOW`` event for L{GradientButton}. :param `event`: a `wx.MouseEvent` event to be processed. """ self._hasFocus = False self._mouseAction = None self.Refresh() event.Skip() def Enable(self, enable=True): if enable: self._setcolours() else: self._setcolours(wx.Colour(0x66, 0x66, 0x66)) GradientButton.Enable(self, enable) def SetBitmap(self, bitmap): self._bitmap = bitmap self.Refresh() class InfoDialog(BaseInteractiveDialog): """ Informational dialog with OK button """ def __init__(self, parent=None, id=-1, title=appname, msg="", ok="OK", bitmap=None, pos=(-1, -1), size=(400, -1), show=True, log=True, print_=False): BaseInteractiveDialog.__init__(self, parent, id, title, msg, ok, bitmap, pos, size, show, log, print_) class InvincibleFrame(wx.Frame): """ A frame that won't be destroyed when closed """ def __init__(self, parent=None, id=-1, title="", pos=None, size=None, style=wx.DEFAULT_FRAME_STYLE): wx.Frame.__init__(self, parent, id, title, pos, size, style) self.Bind(wx.EVT_CLOSE, self.OnClose, self) def OnClose(self, event): self.Hide() class LogWindow(InvincibleFrame): """ A log-type window with Clear and Save As buttons """ def __init__(self, parent=None, id=-1): InvincibleFrame.__init__(self, parent, id, lang.getstr("infoframe.title"), pos=(int(getcfg("position.info.x")), int(getcfg("position.info.y"))), style=wx.DEFAULT_FRAME_STYLE) self.last_visible = False self.panel = wx.Panel(self, -1) self.sizer = wx.BoxSizer(wx.VERTICAL) self.panel.SetSizer(self.sizer) self.log_txt = wx.TextCtrl(self.panel, -1, "", style=wx.TE_MULTILINE | wx.TE_READONLY) if sys.platform == "win32": font = wx.Font(9, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, face="Consolas") elif sys.platform == "darwin": font = wx.Font(11, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, face="Monaco") else: font = wx.Font(10, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) self.log_txt.SetFont(font) self.sizer.Add(self.log_txt, 1, flag=wx.ALL | wx.EXPAND, border=4) self.btnsizer = wx.BoxSizer(wx.HORIZONTAL) self.sizer.Add(self.btnsizer) self.save_as_btn = wx.BitmapButton(self.panel, -1, geticon(16, "media-floppy"), style = wx.NO_BORDER) self.save_as_btn.Bind(wx.EVT_BUTTON, self.OnSaveAs) self.save_as_btn.SetToolTipString(lang.getstr("save_as")) self.btnsizer.Add(self.save_as_btn, flag=wx.ALL, border=4) self.clear_btn = wx.BitmapButton(self.panel, -1, geticon(16, "edit-delete"), style = wx.NO_BORDER) self.clear_btn.Bind(wx.EVT_BUTTON, self.OnClear) self.clear_btn.SetToolTipString(lang.getstr("clear")) self.btnsizer.Add(self.clear_btn, flag=wx.ALL, border=4) self.SetMinSize((defaults["size.info.w"], defaults["size.info.h"])) self.SetSaneGeometry(int(getcfg("position.info.x")), int(getcfg("position.info.y")), int(getcfg("size.info.w")), int(getcfg("size.info.h"))) self.Bind(wx.EVT_MOVE, self.OnMove) self.Bind(wx.EVT_SIZE, self.OnSize) self.Children[0].Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy) def Log(self, txt): self.log_txt.AppendText(txt + os.linesep) def ScrollToBottom(self): self.log_txt.ScrollLines(self.log_txt.GetNumberOfLines()) def OnClear(self, event): self.log_txt.SetValue("") def OnClose(self, event): setcfg("log.show", 0) self.Hide() def OnDestroy(self, event): event.Skip() def OnMove(self, event=None): if self.IsShownOnScreen() and not self.IsMaximized() and not \ self.IsIconized(): x, y = self.GetScreenPosition() setcfg("position.info.x", x) setcfg("position.info.y", y) if event: event.Skip() def OnSaveAs(self, event): defaultDir, defaultFile = (get_verified_path("last_filedialog_path")[0], appname) dlg = wx.FileDialog(self, lang.getstr("save_as"), defaultDir=defaultDir, defaultFile=defaultFile, wildcard=lang.getstr("filetype.log") + "|*.log", style=wx.SAVE | wx.OVERWRITE_PROMPT) dlg.Center(wx.BOTH) result = dlg.ShowModal() path = dlg.GetPath() dlg.Destroy() if result == wx.ID_OK: if not waccess(path, os.W_OK): InfoDialog(self, msg=lang.getstr("error.access_denied.write", path), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) return filename, ext = os.path.splitext(path) if ext.lower() != ".log": path += ".log" if os.path.exists(path): dlg = ConfirmDialog(self, msg=lang.getstr("dialog." "confirm_overwrite", (path)), ok=lang.getstr("overwrite"), cancel=lang.getstr("cancel"), bitmap=geticon(32, "dialog-warning")) result = dlg.ShowModal() dlg.Destroy() if result != wx.ID_OK: return setcfg("last_filedialog_path", path) try: file_ = open(path, "w") file_.write(self.log_txt.GetValue().encode("UTF-8", "replace")) file_.close() except Exception, exception: InfoDialog(self, msg=safe_unicode(exception), ok=lang.getstr("ok"), bitmap=geticon(32, "dialog-error")) def OnSize(self, event=None): if self.IsShownOnScreen() and not self.IsMaximized() and not \ self.IsIconized(): w, h = self.GetSize() setcfg("size.info.w", w) setcfg("size.info.h", h) if event: event.Skip() class ProgressDialog(wx.Dialog): """ A progress dialog. """ def __init__(self, title=appname, msg="", maximum=100, parent=None, style=None, handler=None, keyhandler=None, start_timer=True, pos=None, pauseable=False): if style is None: style = wx.PD_APP_MODAL | wx.PD_ELAPSED_TIME | wx.PD_CAN_ABORT | wx.PD_SMOOTH wx.Dialog.__init__(self, parent, wx.ID_ANY, title) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.Bind(wx.EVT_CLOSE, self.OnClose, self) if not pos: self.Bind(wx.EVT_MOVE, self.OnMove, self) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, handler or self.OnTimer, self.timer) self.keepGoing = True self.skip = False self.paused = False margin = 12 self.sizer0 = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.sizer0) self.sizer1 = wx.BoxSizer(wx.VERTICAL) self.sizer2 = wx.BoxSizer(wx.HORIZONTAL) self.sizer0.Add(self.sizer1, flag = wx.ALIGN_LEFT | wx.TOP | wx.RIGHT | wx.LEFT, border = margin) self.sizer0.Add(self.sizer2, flag = wx.ALIGN_RIGHT | wx.ALL, border = margin) self.msg = wx.StaticText(self, -1, "") self.sizer1.Add(self.msg, flag=wx.EXPAND | wx.BOTTOM, border=margin) gauge_style = wx.GA_HORIZONTAL if style & wx.PD_SMOOTH: gauge_style |= wx.GA_SMOOTH self.gauge = wx.Gauge(self, wx.ID_ANY, range=maximum, style=gauge_style) self.sizer1.Add(self.gauge, flag=wx.EXPAND | wx.BOTTOM, border=margin) if style & wx.PD_ELAPSED_TIME: self.sizer3 = wx.BoxSizer(wx.HORIZONTAL) self.sizer1.Add(self.sizer3, flag=wx.ALIGN_CENTER) self.sizer3.Add(wx.StaticText(self, -1, lang.getstr("elapsed_time"))) self.time = time() self.elapsed_time = wx.StaticText(self, -1, "") self.elapsed_time_handler(None) self.sizer3.Add(self.elapsed_time, flag=wx.LEFT, border=margin) self.elapsed_timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.elapsed_time_handler, self.elapsed_timer) if style & wx.PD_CAN_ABORT: self.cancel = wx.Button(self, wx.ID_ANY, lang.getstr("cancel")) self.sizer2.Add(self.cancel) self.Bind(wx.EVT_BUTTON, self.OnClose, id=self.cancel.GetId()) self.pause_continue = wx.Button(self, wx.ID_ANY, lang.getstr("pause")) self.sizer2.Prepend((margin, margin)) self.sizer2.Prepend(self.pause_continue) self.Bind(wx.EVT_BUTTON, self.pause_continue_handler, id=self.pause_continue.GetId()) self.pause_continue.Show(pauseable) # Use an accelerator table for 0-9, a-z, numpad keycodes = range(48, 58) + range(97, 123) + numpad_keycodes self.id_to_keycode = {} for keycode in keycodes: self.id_to_keycode[wx.NewId()] = keycode accels = [] for id, keycode in self.id_to_keycode.iteritems(): self.Bind(wx.EVT_MENU, keyhandler or self.key_handler, id=id) accels += [(wx.ACCEL_NORMAL, keycode, id)] self.SetAcceleratorTable(wx.AcceleratorTable(accels)) text_extent = self.msg.GetTextExtent("E") w, h = (text_extent[0] * 80, text_extent[1] * 4) self.msg.SetMinSize((w, h)) self.msg.SetSize((w, h)) self.Fit() self.SetMinSize(self.GetSize()) self.msg.SetLabel(msg.replace("&", "&&")) self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy, self) # set position placed = False if pos: x, y = pos else: if parent: if parent.IsShownOnScreen(): self.Center() placed = True else: x = getcfg("position.progress.x", False) or parent.GetScreenPosition()[0] y = getcfg("position.progress.y", False) or parent.GetScreenPosition()[1] else: x = getcfg("position.progress.x") y = getcfg("position.progress.y") if not placed: self.SetSaneGeometry(x, y) if start_timer: self.start_timer() self.Show() if style & wx.PD_APP_MODAL: self.MakeModal() def OnClose(self, event): self.keepGoing = False if hasattr(self, "cancel"): self.cancel.Disable() self.pause_continue.Disable() if not self.timer.IsRunning(): self.Destroy() elif self.gauge.GetValue() == self.gauge.GetRange(): event.Skip() def OnDestroy(self, event): self.stop_timer() del self.timer def OnMove(self, event): if self.IsShownOnScreen() and not self.IsIconized() and \ (not self.GetParent() or not self.GetParent().IsShownOnScreen()): prev_x = getcfg("position.progress.x") prev_y = getcfg("position.progress.y") x, y = self.GetScreenPosition() if x != prev_x or y != prev_y: setcfg("position.progress.x", x) setcfg("position.progress.y", y) def OnTimer(self, event): if self.keepGoing: if self.gauge.GetValue() < self.gauge.GetRange(): self.Update(self.gauge.GetValue() + 1) else: self.stop_timer() self.Update(self.gauge.GetRange(), "Finished. You may now close this window.") else: self.Pulse("Aborting...") if not hasattr(self, "delayed_stop"): self.delayed_stop = wx.CallLater(3000, self.stop_timer) wx.CallLater(3000, self.Pulse, "Aborted. You may now close this window.") def Pulse(self, msg=None): if msg and msg != self.msg.Label: self.msg.SetLabel(msg) self.msg.Refresh() self.msg.Update() self.gauge.Pulse() return self.keepGoing, self.skip def Resume(self): self.keepGoing = True if hasattr(self, "cancel"): self.cancel.Enable() self.pause_continue.Enable() def Update(self, value, msg=None): if msg and msg != self.msg.Label: self.msg.SetLabel(msg) self.msg.Refresh() self.msg.Update() self.gauge.SetValue(value) return self.keepGoing, self.skip UpdatePulse = Pulse def elapsed_time_handler(self, event): self.elapsed_time.Label = strftime("%H:%M:%S", gmtime(time() - self.time)) def key_handler(self, event): pass def pause_continue_handler(self, event=None): self.paused = not self.paused if self.paused: self.pause_continue.Label = lang.getstr("continue") else: self.pause_continue.Label = lang.getstr("pause") self.pause_continue.Enable(not event) self.Layout() def start_timer(self, ms=50): self.timer.Start(ms) if hasattr(self, "elapsed_timer"): self.elapsed_timer.Start(1000) def stop_timer(self): self.timer.Stop() if hasattr(self, "elapsed_timer"): self.elapsed_timer.Stop() class SimpleBook(labelbook.FlatBookBase): def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="SimpleBook"): labelbook.FlatBookBase.__init__(self, parent, id, pos, size, style, agwStyle, name) self._pages = self.CreateImageContainer() # Label book specific initialization self._mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.SetSizer(self._mainSizer) def CreateImageContainer(self): """ Creates the image container (LabelContainer) class for L{FlatImageBook}. """ return labelbook.ImageContainerBase(self, wx.ID_ANY, agwStyle=self.GetAGWWindowStyleFlag()) class SimpleTerminal(InvincibleFrame): """ A simple terminal-like window. """ def __init__(self, parent=None, id=-1, title=appname, handler=None, keyhandler=None, start_timer=True): wx.Frame.__init__(self, parent, id, title, style=wx.DEFAULT_FRAME_STYLE) self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) self.Bind(wx.EVT_CLOSE, self.OnClose, self) self.Bind(wx.EVT_MOVE, self.OnMove, self) self.timer = wx.Timer(self) if handler: self.Bind(wx.EVT_TIMER, handler, self.timer) self.panel = wx.Panel(self, -1) self.sizer = wx.BoxSizer(wx.VERTICAL) self.panel.SetSizer(self.sizer) self.console = wx.TextCtrl(self.panel, -1, "", style=wx.TE_MULTILINE | wx.TE_READONLY | wx.VSCROLL | wx.NO_BORDER) self.console.SetBackgroundColour(wx.BLACK) self.console.SetForegroundColour("#808080") if sys.platform == "win32": font = wx.Font(9, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, face="Terminal") elif sys.platform == "darwin": font = wx.Font(11, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, face="Monaco") else: font = wx.Font(10, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) self.console.SetFont(font) self.sizer.Add(self.console, 1, flag=wx.ALL | wx.EXPAND, border=0) if sys.platform == "win32": # Mac: TextCtrls don't receive EVT_KEY_DOWN self.console.Bind(wx.EVT_KEY_DOWN, keyhandler or self.key_handler, self.console) else: # Windows: EVT_CHAR_HOOK only receives "special" keys e.g. ESC, Tab self.Bind(wx.EVT_CHAR_HOOK, keyhandler or self.key_handler) # Use an accelerator table for space, 0-9, a-z, numpad keycodes = [32] + range(48, 58) + range(97, 123) + numpad_keycodes self.id_to_keycode = {} for keycode in keycodes: self.id_to_keycode[wx.NewId()] = keycode # set size text_extent = self.console.GetTextExtent(" ") vscroll_w = self.console.GetSize()[0] - self.console.GetClientRect()[2] w, h = (text_extent[0] * 80 + vscroll_w, text_extent[1] * 24) self.console.SetSize((w, h)) self.sizer.SetSizeHints(self) self.sizer.Layout() # set position placed = False if parent: if parent.IsShownOnScreen(): self.Center() placed = True else: x = getcfg("position.progress.x", False) or parent.GetScreenPosition()[0] y = getcfg("position.progress.y", False) or parent.GetScreenPosition()[1] else: x = getcfg("position.progress.x") y = getcfg("position.progress.y") if not placed: self.SetSaneGeometry(x, y, w, h) self.lastmsg = "" self.keepGoing = True self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy, self) if start_timer: self.start_timer() self.Show() self.console.SetFocus() def EndModal(self, returncode=wx.ID_OK): return returncode def MakeModal(self, makemodal=False): pass def OnClose(self, event): if not self.timer.IsRunning(): self.Destroy() else: self.keepGoing = False def OnDestroy(self, event): self.stop_timer() del self.timer def OnMove(self, event): if self.IsShownOnScreen() and not self.IsIconized() and \ (not self.GetParent() or not self.GetParent().IsShownOnScreen()): prev_x = getcfg("position.progress.x") prev_y = getcfg("position.progress.y") x, y = self.GetScreenPosition() if x != prev_x or y != prev_y: setcfg("position.progress.x", x) setcfg("position.progress.y", y) def Pulse(self, msg=""): self.lastmsg = msg return self.keepGoing, False def Resume(self): self.keepGoing = True def Update(self, value, msg=""): return self.Pulse(msg) def UpdatePulse(self, msg=""): return self.Pulse(msg) def add_text(self, txt): pos = self.console.GetLastPosition() if txt.startswith("\r"): txt = txt.lstrip("\r") numlines = self.console.GetNumberOfLines() start = pos - self.console.GetLineLength(numlines - 1) self.console.Replace(start, pos, txt) else: self.console.AppendText(txt) def flush(self): pass def isatty(self): return True def key_handler(self, event): pass def start_timer(self, ms=50): self.timer.Start(ms) def stop_timer(self): self.timer.Stop() def write(self, txt): wx.CallAfter(self.add_text, txt) class TooltipWindow(InvincibleFrame): """ A tooltip-style window """ def __init__(self, parent=None, id=-1, title=appname, msg="", bitmap=None, pos=(-1, -1), size=(400, -1), style=wx.DEFAULT_FRAME_STYLE | wx.FRAME_TOOL_WINDOW, wrap=70): InvincibleFrame.__init__(self, parent, id, title, pos, size, style) self.SetPosition(pos) # yes, this is needed self.SetIcons(config.get_icon_bundle([256, 48, 32, 16], appname)) margin = 12 self.panel = wx.Panel(self, -1) self.sizer0 = wx.BoxSizer(wx.VERTICAL) self.panel.SetSizer(self.sizer0) if bitmap: self.sizer1 = wx.FlexGridSizer(1, 2) else: self.sizer1 = wx.BoxSizer(wx.HORIZONTAL) self.sizer0.Add(self.sizer1, flag = wx.ALIGN_CENTER | wx.ALL, border = margin) if bitmap: self.bitmap = wx.StaticBitmap(self.panel, -1, bitmap, size = (32, 32)) self.sizer1.Add(self.bitmap, flag=wx.RIGHT, border=margin) self.message = wx.StaticText(self.panel, -1, util_str.wrap(msg, wrap)) self.sizer1.Add(self.message) self.sizer0.SetSizeHints(self) self.sizer0.Layout() if not pos or pos == (-1, -1): self.Center(wx.BOTH) elif pos[0] == -1: self.Center(wx.HORIZONTAL) elif pos[1] == -1: self.Center(wx.VERTICAL) self.Show() self.Raise() class TwoWaySplitter(FourWaySplitter): def __init__(self, *args, **kwargs): FourWaySplitter.__init__(self, *args, **kwargs) self._minimum_pane_size = 0 self._sashbitmap = getbitmap("theme/sash") self._splitsize = (800, 400) self._expandedsize = (400, 400) self._handcursor = wx.StockCursor(wx.CURSOR_HAND) self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDClick) def _GetSashSize(self): """ Used internally. """ if self.HasFlag(wx.SP_NOSASH): return 0 return self._sashbitmap.GetSize()[0] # Recompute layout def _SizeWindows(self): """ Recalculate the layout based on split positions and split fractions. :see: L{SetHSplit} and L{SetVSplit} for more information about split fractions. """ win0 = self.GetTopLeft() win1 = self.GetTopRight() width, height = self.GetSize() barSize = self._GetSashSize() border = self._GetBorderSize() if self._expanded < 0: totw = width - barSize - 2*border self._splitx = max((self._fhor*totw)/10000, self._minimum_pane_size) self._splity = height rightw = totw - self._splitx if win0: win0.SetDimensions(0, 0, self._splitx, self._splity) win0.Show() if win1: win1.SetDimensions(self._splitx + barSize, 0, rightw, self._splity) win1.Show() else: if self._expanded < len(self._windows): for ii, win in enumerate(self._windows): if ii == self._expanded: win.SetDimensions(0, 0, width - barSize - 2*border, height-2*border) win.Show() else: win.Hide() # Draw the horizontal split def DrawSplitter(self, dc): """ Actually draws the sashes. :param `dc`: an instance of `wx.DC`. """ backColour = self.GetBackgroundColour() dc.SetBrush(wx.Brush(backColour, wx.SOLID)) dc.SetPen(wx.Pen(backColour)) dc.Clear() width, height = self.GetSize() if self._expanded > -1: splitx = width - self._GetSashSize() - 2*self._GetBorderSize() else: splitx = self._splitx if self._expanded < 0: if splitx <= self._minimum_pane_size: self._sashbitmap = getbitmap("theme/sash-right") else: self._sashbitmap = getbitmap("theme/sash") else: self._sashbitmap = getbitmap("theme/sash-left") sashwidth, sashheight = self._sashbitmap.GetSize() dc.DrawRectangle(splitx, 0, sashwidth, height) dc.DrawBitmap(self._sashbitmap, splitx, height / 2 - sashheight / 2, True) dc.SetPen(wx.Pen(wx.Colour(178, 178, 178), 1)) dc.DrawLine(splitx, 0, splitx, height) dc.DrawLine(splitx + self._GetSashSize() - 1, 0, splitx + self._GetSashSize() - 1, height) def GetExpandedSize(self): return self._expandedsize # Determine split mode def GetMode(self, pt): """ Determines the split mode for L{FourWaySplitter}. :param `pt`: the point at which the mouse has been clicked, an instance of `wx.Point`. :return: One of the following 3 split modes: ================= ============================== Split Mode Description ================= ============================== ``wx.HORIZONTAL`` the user has clicked on the horizontal sash ``wx.VERTICAL`` The user has clicked on the vertical sash ``wx.BOTH`` The user has clicked at the intersection between the 2 sashes ================= ============================== """ barSize = self._GetSashSize() flag = wx.BOTH width, height = self.GetSize() if self._expanded > -1: splitx = width - self._GetSashSize() - 2*self._GetBorderSize() else: splitx = self._splitx if pt.x < splitx - _TOLERANCE: flag &= ~wx.VERTICAL if pt.y < self._splity - _TOLERANCE: flag &= ~wx.HORIZONTAL if pt.x >= splitx + barSize + _TOLERANCE: flag &= ~wx.VERTICAL if pt.y >= self._splity + barSize + _TOLERANCE: flag &= ~wx.HORIZONTAL return flag def GetSplitSize(self): return self._splitsize def OnLeftDClick(self, event): if not self.IsEnabled(): return pt = event.GetPosition() if self.GetMode(pt): width, height = self.GetSize() barSize = self._GetSashSize() border = self._GetBorderSize() totw = width - barSize - 2*border winborder, titlebar = get_platform_window_decoration_size() winwidth, winheight = self.Parent.GetSize() self.Freeze() self.SetExpanded(-1 if self._expanded > -1 else 0) if self._expanded < 0: if self.GetExpandedSize()[0] < self.GetSplitSize()[0]: self._fhor = int(math.ceil((self.GetExpandedSize()[0] - barSize - winborder * 2) / float(self.GetSplitSize()[0] - barSize - winborder * 2) * 10000)) else: self._fhor = int(math.ceil(self._minimum_pane_size / float(self.GetSplitSize()[0] - barSize - winborder * 2) * 10000)) self.Parent.SetMinSize((defaults["size.profile_info.split.w"] + winborder * 2, self.Parent.GetMinSize()[1])) if (not self.Parent.IsMaximized() and self.Parent.GetSize()[0] < self.GetSplitSize()[0]): self.Parent.SetSize((self.GetSplitSize()[0], self.Parent.GetSize()[1])) else: self.Parent.SetMinSize((defaults["size.profile_info.w"] + winborder * 2, self.Parent.GetMinSize()[1])) w = max(self.GetExpandedSize()[0], self._splitx + barSize + winborder * 2) if (not self.Parent.IsMaximized() and self.Parent.GetSize()[0] > w): self.Parent.SetSize((w, self.Parent.GetSize()[1])) #wx.CallLater(25, self.Parent.redraw) self.Parent.idle = False self.Parent.resize_grid() self.Thaw() # Button being released def OnLeftUp(self, event): """ Handles the ``wx.EVT_LEFT_UP`` event for L{FourWaySplitter}. :param `event`: a `wx.MouseEvent` event to be processed. """ if not self.IsEnabled(): return if self.HasCapture(): self.ReleaseMouse() flgs = self._flags self._flags &= ~FLAG_CHANGED self._flags &= ~FLAG_PRESSED if flgs & FLAG_PRESSED: if not self.GetAGWWindowStyleFlag() & wx.SP_LIVE_UPDATE: self.DrawTrackSplitter(self._splitx, self._splity) self.DrawSplitter(wx.ClientDC(self)) self.AdjustLayout() if flgs & FLAG_CHANGED: event = FourWaySplitterEvent(wx.wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, self) event.SetSashIdx(self._mode) event.SetSashPosition(wx.Point(self._splitx, self._splity)) self.GetEventHandler().ProcessEvent(event) else: self.OnLeftDClick(event) self._mode = NOWHERE def OnMotion(self, event): """ Handles the ``wx.EVT_MOTION`` event for L{FourWaySplitter}. :param `event`: a `wx.MouseEvent` event to be processed. """ if self.HasFlag(wx.SP_NOSASH): return pt = event.GetPosition() # Moving split if self._flags & FLAG_PRESSED: width, height = self.GetSize() barSize = self._GetSashSize() border = self._GetBorderSize() totw = width - barSize - 2*border if pt.x > totw - _TOLERANCE: self._expanded = 0 self._offx += 1 elif self._expanded > -1 and pt.x > self._minimum_pane_size: self._fhor = int((pt.x - barSize - 2*border) / float(totw) * 10000) self._splitx = (self._fhor*totw)/10000 self._offx = pt.x - self._splitx + 1 self._expanded = -1 oldsplitx = self._splitx oldsplity = self._splity if self._mode == wx.BOTH: self.MoveSplit(pt.x - self._offx, pt.y - self._offy) elif self._mode == wx.VERTICAL: self.MoveSplit(pt.x - self._offx, self._splity) elif self._mode == wx.HORIZONTAL: self.MoveSplit(self._splitx, pt.y - self._offy) # Send a changing event if not self.DoSendChangingEvent(wx.Point(self._splitx, self._splity)): self._splitx = oldsplitx self._splity = oldsplity return if oldsplitx != self._splitx or oldsplity != self._splity: if not self.GetAGWWindowStyleFlag() & wx.SP_LIVE_UPDATE: self.DrawTrackSplitter(oldsplitx, oldsplity) self.DrawTrackSplitter(self._splitx, self._splity) else: self.AdjustLayout() self._flags |= FLAG_CHANGED self.Refresh() # Change cursor based on position ff = self.GetMode(pt) if self._expanded > -1 and self._splitx <= self._minimum_pane_size: self.SetCursor(self._handcursor) elif ff == wx.BOTH: self.SetCursor(self._sashCursorSIZING) elif ff == wx.VERTICAL: self.SetCursor(self._sashCursorWE) elif ff == wx.HORIZONTAL: self.SetCursor(self._sashCursorNS) else: self.SetCursor(self._handcursor) event.Skip() def SetExpandedSize(self, size): self._expandedsize = size def SetMinimumPaneSize(self, size=0): self._minimum_pane_size = size def SetSplitSize(self, size): self._splitsize = size def test(): def key_handler(self, event): if event.GetEventType() == wx.EVT_CHAR_HOOK.typeId: print "Received EVT_CHAR_HOOK", event.GetKeyCode(), repr(unichr(event.GetKeyCode())) elif event.GetEventType() == wx.EVT_KEY_DOWN.typeId: print "Received EVT_KEY_DOWN", event.GetKeyCode(), repr(unichr(event.GetKeyCode())) elif event.GetEventType() == wx.EVT_MENU.typeId: print "Received EVT_MENU", self.id_to_keycode.get(event.GetId()), repr(unichr(self.id_to_keycode.get(event.GetId()))) event.Skip() ProgressDialog.key_handler = key_handler SimpleTerminal.key_handler = key_handler app = wx.App(0) p = ProgressDialog(msg="".join(("Test " * 5))) t = SimpleTerminal(start_timer=False) app.MainLoop() if __name__ == "__main__": test() dispcalGUI-1.7.1.6/dispcalGUI/xh_filebrowsebutton.py000644 000765 000000 00000004665 12263672717 022300 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import wx import wx.xrc as xrc import wx.lib.filebrowsebutton as filebrowse class FileBrowseButtonXmlHandler(xrc.XmlResourceHandler): def __init__(self): xrc.XmlResourceHandler.__init__(self) # Standard styles self.AddWindowStyles() def CanHandle(self,node): return self.IsOfClass(node, 'FileBrowseButton') # Process XML parameters and create the object def DoCreateResource(self): w = filebrowse.FileBrowseButton(parent=self.GetParentAsWindow(), id=self.GetID(), pos=self.GetPosition(), size=self.GetSize(), style=self.GetStyle(), labelText=self.GetText('labelText') or 'File Entry:', buttonText=self.GetText('buttonText') or 'Browse', toolTip=self.GetText('toolTip') or 'Type filename or click browse to choose file', dialogTitle=self.GetText('dialogTitle') or 'Choose a file', startDirectory=self.GetText('startDirectory') or '.', initialValue=self.GetText('initialValue') or '', fileMask=self.GetText('fileMask') or '*.*', fileMode=self.GetLong('fileMode') or wx.OPEN, labelWidth=self.GetLong('labelWidth') or 0, name=self.GetName()) self.SetupWindow(w) return w class FileBrowseButtonWithHistoryXmlHandler(FileBrowseButtonXmlHandler): def __init__(self): FileBrowseButtonXmlHandler.__init__(self) def CanHandle(self,node): return self.IsOfClass(node, 'FileBrowseButtonWithHistory') # Process XML parameters and create the object def DoCreateResource(self): w = filebrowse.FileBrowseButtonWithHistory(parent=self.GetParentAsWindow(), id=self.GetID(), pos=self.GetPosition(), size=self.GetSize(), style=self.GetStyle(), labelText=self.GetText('labelText') or 'File Entry:', buttonText=self.GetText('buttonText') or 'Browse', toolTip=self.GetText('toolTip') or 'Type filename or click browse to choose file', dialogTitle=self.GetText('dialogTitle') or 'Choose a file', startDirectory=self.GetText('startDirectory') or '.', initialValue=self.GetText('initialValue') or '', fileMask=self.GetText('fileMask') or '*.*', fileMode=self.GetLong('fileMode') or wx.OPEN, labelWidth=self.GetLong('labelWidth') or 0, name=self.GetName()) self.SetupWindow(w) return w dispcalGUI-1.7.1.6/dispcalGUI/xh_floatspin.py000644 000765 000000 00000002551 12025152312 020646 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- import wx import wx.xrc as xrc try: import wx.lib.agw.floatspin as floatspin except ImportError: import floatspin class FloatSpinCtrlXmlHandler(xrc.XmlResourceHandler): def __init__(self): xrc.XmlResourceHandler.__init__(self) # Standard styles self.AddWindowStyles() # Custom styles self.AddStyle('FS_LEFT', floatspin.FS_LEFT) self.AddStyle('FS_RIGHT', floatspin.FS_RIGHT) self.AddStyle('FS_CENTRE', floatspin.FS_CENTRE) self.AddStyle('FS_READONLY', floatspin.FS_READONLY) def CanHandle(self,node): return self.IsOfClass(node, 'FloatSpin') # Process XML parameters and create the object def DoCreateResource(self): try: min_val = float(self.GetText('min_val')) except: min_val = None try: max_val = float(self.GetText('max_val')) except: max_val = None try: increment = float(self.GetText('increment')) except: increment = 1.0 w = floatspin.FloatSpin(parent=self.GetParentAsWindow(), id=self.GetID(), pos=self.GetPosition(), size=self.GetSize(), style=self.GetStyle(), min_val=min_val, max_val=max_val, increment=increment, name=self.GetName()) try: w.SetValue(float(self.GetText('value'))) except: w.SetValue(0.0) try: w.SetDigits(int(self.GetText('digits'))) except: pass self.SetupWindow(w) return w dispcalGUI-1.7.1.6/dispcalGUI/xrandr.py000644 000765 000000 00000011567 12266411534 017470 0ustar00svpwheel000000 000000 # -*- coding: utf-8 -*- from ctypes import POINTER, Structure, c_int, c_long, c_ubyte, c_ulong, cdll, pointer, util libx11pth = util.find_library("X11") if not libx11pth: raise ImportError("Couldn't find libX11") try: libx11 = cdll.LoadLibrary(libx11pth) except OSError: raise ImportError("Couldn't load libX11") libxrandrpth = util.find_library("Xrandr") if not libxrandrpth: raise ImportError("Couldn't find libXrandr") try: libxrandr = cdll.LoadLibrary(libxrandrpth) except OSError: raise ImportError("Couldn't load libXrandr") import os import sys import RealDisplaySizeMM as RDSMM from options import debug from util_x import get_display XA_CARDINAL = 6 XA_INTEGER = 19 Atom = c_ulong class Display(Structure): __slots__ = [] Display._fields_ = [('_opaque_struct', c_int)] try: libx11.XInternAtom.restype = Atom libx11.XOpenDisplay.restype = POINTER(Display) libx11.XRootWindow.restype = c_ulong libx11.XGetWindowProperty.restype = c_int libx11.XGetWindowProperty.argtypes = [POINTER(Display), c_ulong, Atom, c_long, c_long, c_int, c_ulong, POINTER(c_ulong), POINTER(c_int), POINTER(c_ulong), POINTER(c_ulong), POINTER(POINTER(c_ubyte))] except AttributeError, exception: raise ImportError("libX11: %s" % exception) try: libxrandr.XRRGetOutputProperty.restype = c_int libxrandr.XRRGetOutputProperty.argtypes = [POINTER(Display), c_ulong, Atom, c_long, c_long, c_int, c_int, c_ulong, POINTER(c_ulong), POINTER(c_int), POINTER(c_ulong), POINTER(c_ulong), POINTER(POINTER(c_ubyte))] except AttributeError, exception: raise ImportError("libXrandr: %s" % exception) def get_atom(atom_name=None, atom_type=XA_CARDINAL, x_hostname="", x_display_no=0, x_screen_no=0): display = get_display() if not x_hostname: x_hostname = display[0] if not x_display_no: x_display_no = display[1] if not x_screen_no: x_screen_no = display[2] display = "%s:%i.%i" % (x_hostname, x_display_no, x_screen_no) x_display = libx11.XOpenDisplay(display) if not x_display: libx11.XCloseDisplay(x_display) raise ValueError("Invalid X display %r" % display) x_window = libx11.XRootWindow(x_display, x_screen_no) if not x_window: libx11.XCloseDisplay(x_display) raise ValueError("Invalid X screen %r" % x_screen_no) x_atom = libx11.XInternAtom(x_display, atom_name, True) if not x_atom: libx11.XCloseDisplay(x_display) raise ValueError("Invalid atom name %r" % atom_name) ret_type, ret_format, ret_len, ret_togo, atomv = (c_ulong(), c_int(), c_ulong(), c_ulong(), pointer(c_ubyte())) property = None if libx11.XGetWindowProperty(x_display, x_window, x_atom, 0, 0x7ffffff, False, atom_type, ret_type, ret_format, ret_len, ret_togo, atomv) == 0 and ret_len.value > 0: if debug: print "ret_type:", ret_type.value print "ret_format:", ret_format.value print "ret_len:", ret_len.value print "ret_togo:", ret_togo.value property = [atomv[i] for i in xrange(ret_len.value)] libx11.XCloseDisplay(x_display) return property def get_output_property(display_no=0, property_name=None, property_type=XA_CARDINAL, x_hostname="", x_display_no=0, x_screen_no=0): xrandr_output_xid = RDSMM.GetXRandROutputXID(display_no) if not xrandr_output_xid: raise ValueError("Invalid display number %r specified or XrandR " "unsupported" % display_no) display = get_display() if not x_hostname: x_hostname = display[0] if not x_display_no: x_display_no = display[1] if not x_screen_no: x_screen_no = display[2] display = "%s:%i.%i" % (x_hostname, x_display_no, x_screen_no) x_display = libx11.XOpenDisplay(display) if not x_display: libx11.XCloseDisplay(x_display) raise ValueError("Invalid X display %r" % display) x_atom = libx11.XInternAtom(x_display, property_name, False) if not x_atom: libx11.XCloseDisplay(x_display) raise ValueError("Invalid property name %r" % property_name) ret_type, ret_format, ret_len, ret_togo, atomv = (c_ulong(), c_int(), c_ulong(), c_ulong(), pointer(c_ubyte())) property = None if libxrandr.XRRGetOutputProperty(x_display, xrandr_output_xid, x_atom, 0, 0x7ffffff, False, False, property_type, ret_type, ret_format, ret_len, ret_togo, atomv) == 0 and \ ret_len.value > 0: if debug: print "ret_type:", ret_type.value print "ret_format:", ret_format.value print "ret_len:", ret_len.value print "ret_togo:", ret_togo.value property = [atomv[i] for i in xrange(ret_len.value)] libx11.XCloseDisplay(x_display) return property if __name__ == "__main__": property = get_output_property(int(sys.argv[1]), sys.argv[2], int(sys.argv[3])) print "%s for display %s: %r" % (sys.argv[2], sys.argv[1], property) dispcalGUI-1.7.1.6/dispcalGUI/xrc/000755 000765 000000 00000000000 12266723171 016405 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/xrc/3dlut.xrc000644 000765 000000 00000026566 12263702502 020165 0ustar00svpwheel000000 000000 wxVERTICAL wxVERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 profile.input filetype.icc|*.icc;*.icm wxEXPAND|wxALIGN_CENTRE_VERTICAL wxLEFT|wxEXPAND 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 profile.abstract filetype.icc|*.icc;*.icm wxEXPAND|wxALIGN_CENTRE_VERTICAL wxLEFT|wxEXPAND 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 gamap.profile filetype.icc|*.icc;*.icm wxALIGN_CENTRE_VERTICAL wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxEXPAND wxBOTTOM|wxLEFT|wxEXPAND 4 wxBOTTOM|wxLEFT 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 4 wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 4 wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 75,-1 2.2 2.4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 0 wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 0 wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 4 wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 4 wxALIGN_CENTRE_VERTICAL 8, 1 wxALIGN_CENTRE_VERTICAL wxALIGN_RIGHT|wxALIGN_BOTTOM wxHORIZONTAL wxEXPAND|wxALIGN_CENTRE_VERTICAL 2 0 8 1 wxALL|wxEXPAND 12 wxEXPAND -1,100 3dlut.frame.title EVT_CLOSE dispcalGUI-1.7.1.6/dispcalGUI/xrc/extra.xrc000644 000765 000000 00000010624 12237536421 020247 0ustar00svpwheel000000 000000 wxVERTICAL wxVERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 320,-1 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 320,-1 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 320,-1 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 320,-1 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 320,-1 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 320,-1 wxEXPAND|wxALIGN_CENTRE_VERTICAL 2 8 1 wxALL|wxEXPAND 12 400, -1 wxEXPAND -1,100 400,-1 extra_args 1 EVT_CLOSE dispcalGUI-1.7.1.6/dispcalGUI/xrc/gamap.xrc000644 000765 000000 00000013241 12072027110 020172 0ustar00svpwheel000000 000000 wxVERTICAL wxVERTICAL wxHORIZONTAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 gamap.profile filetype.icc|*.icc;*.icm EVT_FILEPICKER_CHANGED wxALIGN_CENTRE_VERTICAL wxTOP|wxLEFT|wxRIGHT|wxEXPAND 12 EVT_CHECKBOX wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxEXPAND|wxALIGN_CENTRE_VERTICAL EVT_CHECKBOX wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxEXPAND|wxALIGN_CENTRE_VERTICAL 2 0 8 1 wxLEFT|wxRIGHT|wxTOP|wxEXPAND 12 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxEXPAND|wxALIGN_CENTRE_VERTICAL 2 0 8 1 wxALL|wxEXPAND 12 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxEXPAND|wxALIGN_CENTRE_VERTICAL 2 0 8 1 wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND 12 wxEXPAND -1,100 gamapframe.title EVT_CLOSE dispcalGUI-1.7.1.6/dispcalGUI/xrc/main.xrc000644 000765 000000 00000171173 12253365512 020056 0ustar00svpwheel000000 000000 wxVERTICAL wxHORIZONTAL 480,60 480,60 wxEXPAND 2 0 1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/document-open.png calibration.load EVT_BUTTON wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/edit-delete.png delete EVT_BUTTON wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/install.png profile.install EVT_BUTTON wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/info.png profile.info EVT_BUTTON wxALIGN_CENTRE_VERTICAL wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTRE_VERTICAL 8 EVT_CHECKBOX wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 4 wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTRE_VERTICAL 18 8,-1 wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 2 wxALIGN_CENTRE_VERTICAL wxHORIZONTAL wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTRE_VERTICAL 4 wxALIGN_CENTRE_VERTICAL wxEXPAND|wxALIGN_CENTRE_VERTICAL wxALIGN_CENTRE_VERTICAL wxEXPAND|wxALIGN_CENTRE_VERTICAL 2 2 8 8 1 wxTOP|wxBOTTOM 4 ../theme/icons/16x16/stock_lock-open.png display_lut.link wxLEFT|wxALIGN_CENTRE_VERTICAL 8 ../theme/refresh_lr.png detect_displays_and_ports wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxLEFT|wxEXPAND 18 wxVERTICAL drift_compensation.whitelevel.info EVT_CHECKBOX wxTOP|wxALIGN_CENTRE_VERTICAL 6 wxHORIZONTAL wxLEFT|wxRIGHT|wxEXPAND 18 wxBOTTOM|wxRIGHT|wxEXPAND 2 wxRIGHT|wxALIGN_CENTRE_VERTICAL 2 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTRE_VERTICAL 4 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxALIGN_CENTRE_VERTICAL wxHORIZONTAL wxEXPAND 1 2 8 8 0 wxTOP|wxBOTTOM|wxRIGHT 4 wxHORIZONTAL wxRIGHT|wxEXPAND 14 wxVERTICAL drift_compensation.blacklevel.info EVT_CHECKBOX wxTOP|wxALIGN_CENTRE_VERTICAL 6 wxHORIZONTAL wxRIGHT|wxEXPAND 18 wxBOTTOM 2 wxHORIZONTAL wxTOP|wxEXPAND 4 wxLEFT|wxALIGN_CENTRE_VERTICAL 18 wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/document-open.png colorimeter_correction_matrix_file.choose EVT_BUTTON wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/web.png colorimeter_correction.web_check EVT_BUTTON wxRIGHT|wxALIGN_CENTRE_VERTICAL 42 wxHORIZONTAL wxTOP 8 wxHORIZONTAL wxEXPAND|wxALIGN_CENTRE_VERTICAL 1,12 wxHORIZONTAL 8,-1 wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 2 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTRE_VERTICAL 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 native whitepoint.colortemp whitepoint.xy 0 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 90,-1 EVT_COMBOBOX|EVT_KILL_FOCUS wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 75,-1 EVT_KILL_FOCUS wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 75,-1 EVT_KILL_FOCUS wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 wxLEFT|wxALIGN_CENTRE_VERTICAL 4 wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 native other 0 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 75,-1 EVT_KILL_FOCUS wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 wxHORIZONTAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 native other 0 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 75,-1 EVT_KILL_FOCUS wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 wxHORIZONTAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 4 wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL trc.gamma trc.lstar trc.rec709 trc.smpte240m trc.srgb 0 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 75,-1 EVT_COMBOBOX|EVT_KILL_FOCUS wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 4 wxHORIZONTAL calibration.ambient_viewcond_adjust.info EVT_CHECKBOX wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 50,-1 EVT_KILL_FOCUS wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 0 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 ../theme/icons/16x16/dialog-information.png calibration.ambient_viewcond_adjust.info wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxALIGN_CENTRE_VERTICAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL 128,-1 0 100 EVT_SLIDER wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 65,-1 0 100 EVT_TEXT wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 wxALIGN_CENTRE_VERTICAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 3 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 128,-1 0 100 EVT_SLIDER wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 65,-1 0 100 EVT_TEXT wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 wxALIGN_CENTRE_VERTICAL wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 9 75,-1 400 5 2000 EVT_SLIDER wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 65,-1 4.0 0.05 20 0.01 2 EVT_TEXT wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 24,1 wxHORIZONTAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 2 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL 75,-1 2 1 4 EVT_SLIDER wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 64,-1 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 1 EVT_CHECKBOX wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 24,1 wxTOP|wxALIGN_CENTRE_VERTICAL 3 2 0 wxLEFT|wxRIGHT 18 8,-1 wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxLEFT|wxRIGHT|wxALIGN_CENTRE_VERTICAL 2 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxTOP|wxEXPAND|wxALIGN_CENTRE_VERTICAL 12 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL 75,-1 2 1 3 EVT_SLIDER wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 64,-1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 20 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 EVT_BUTTON wxALIGN_CENTRE_VERTICAL wxTOP|wxBOTTOM|wxALIGN_CENTRE_VERTICAL 2 black_point_compensation.info wxRIGHT|wxALIGN_CENTRE_VERTICAL 20 profile.quality.b2a.low.info wxALIGN_CENTRE_VERTICAL wxHORIZONTAL wxTOP|wxBOTTOM 5 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/document-open.png testchart.set EVT_BUTTON wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/rgbsquares.png testchart.edit EVT_BUTTON wxALIGN_CENTRE_VERTICAL 48,-1 testchart.info wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTRE_VERTICAL 5 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL EVT_TEXT wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/dialog-information.png wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/media-floppy.png profile.set_save_path EVT_BUTTON wxALIGN_CENTRE_VERTICAL 48,-1 wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTRE_VERTICAL 4 1,1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxBOTTOM|wxRIGHT|wxALIGN_CENTRE_VERTICAL 4 wxTOP|wxEXPAND|wxALIGN_CENTRE_VERTICAL 4 2 0 1 wxTOP|wxLEFT|wxRIGHT|wxEXPAND 5 wxVERTICAL wxLEFT|wxRIGHT|wxEXPAND 13 wxVERTICAL wxEXPAND wxHORIZONTAL EVT_BUTTON wxALIGN_CENTRE_VERTICAL 16,1 EVT_BUTTON wxALIGN_CENTRE_VERTICAL 16,1 EVT_BUTTON wxALIGN_CENTRE_VERTICAL wxTOP|wxBOTTOM|wxALIGN_CENTRE 16 wxEXPAND wxVERTICAL window.title EVT_CLOSE|EVT_MOVE|EVT_SHOW|EVT_TIMER|EVT_TIMER dispcalGUI-1.7.1.6/dispcalGUI/xrc/mainmenu.xrc000644 000765 000000 00000015630 12263672715 020745 0ustar00svpwheel000000 000000 CTRL+O 1 1 1 1 1 1 1 1 1 1 1 1 1 dispcalGUI-1.7.1.6/dispcalGUI/xrc/report.xrc000644 000765 000000 00000025022 12265441404 020432 0ustar00svpwheel000000 000000 wxVERTICAL wxVERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL measurement_report_choose_chart_or_reference filetype.ti1_ti3_txt|*.cgats;*.cie;*.ti1;*.ti2;*.ti3;*.txt wxALIGN_CENTRE_VERTICAL wxLEFT|wxALIGN_CENTRE_VERTICAL 8 ../theme/icons/16x16/rgbsquares.png testchart.edit EVT_BUTTON wxLEFT|wxALIGN_CENTRE_VERTICAL 8 48,-1 wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxEXPAND wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxALIGN_CENTRE_VERTICAL wxHORIZONTAL wxLEFT|wxEXPAND 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 simulation_profile filetype.icc|*.icc;*.icm wxEXPAND|wxALIGN_CENTRE_VERTICAL wxBOTTOM|wxLEFT|wxEXPAND 4 wxHORIZONTAL wxLEFT 8 wxLEFT 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 75,-1 2.2 2.4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 wxALIGN_CENTRE_VERTICAL wxHORIZONTAL wxLEFT 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 devlink_profile filetype.icc|*.icc;*.icm wxEXPAND|wxALIGN_CENTRE_VERTICAL wxLEFT|wxEXPAND 4 wxRIGHT|wxALIGN_CENTRE_VERTICAL 8 measurement_report_choose_profile filetype.icc|*.icc;*.icm wxALIGN_CENTRE_VERTICAL wxLEFT|wxALIGN_CENTRE_VERTICAL 8 wxHORIZONTAL wxEXPAND wxLEFT|wxEXPAND 4 2 0 8 1 wxALIGN_RIGHT|wxALIGN_BOTTOM wxALL|wxEXPAND 12 wxEXPAND -1,100 measurement_report EVT_CLOSE dispcalGUI-1.7.1.6/dispcalGUI/xrc/synthicc.xrc000644 000765 000000 00000036023 12147653626 020760 0ustar00svpwheel000000 000000 wxVERTICAL wxVERTICAL 2 8 1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxEXPAND|wxALIGN_CENTRE_VERTICAL wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxALIGN_CENTRE_VERTICAL 0, 0 0, 0 0, 0 wxALIGN_CENTRE_VERTICAL wxHORIZONTAL 75, -1 75, -1 75, -1 75, -1 65, -1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxHORIZONTAL 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxHORIZONTAL 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxHORIZONTAL 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxHORIZONTAL 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 wxRIGHT 10 65, -1 0, 0 0, 0 wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxHORIZONTAL trc.gamma trc.lstar trc.rec709 trc.smpte240m trc.srgb 0 wxRIGHT|wxALIGN_CENTRE 8 75, -1 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 6 0, 0 0, 0 wxRIGHT|wxALIGN_CENTRE_VERTICAL 10 wxEXPAND wxHORIZONTAL wxRIGHT 10 wxEXPAND wxALL|wxEXPAND 12 wxEXPAND -1,100 synthicc.create EVT_CLOSE dispcalGUI-1.7.1.6/dispcalGUI/ti1/ccxx.ti1000644 000765 000000 00000001154 12025152303 017655 0ustar00svpwheel000000 000000 CTI1 DESCRIPTOR "Argyll Calibration Target chart information 1 for creating .ti3 for ccxxmake" ORIGINATOR "Argyll targen" CREATED "Thu Apr 19 13:24:37 2012" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 4 BEGIN_DATA 1 100.00 100.00 100.00 95.046 100.00 108.91 2 100.00 0.0000 0.0000 41.238 21.260 1.9306 3 0.0000 100.00 0.0000 35.757 71.520 11.921 4 0.0000 0.0000 100.00 18.050 7.2205 95.055 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s0-g25-m3-b3-f0-crossover.ti1000644 000765 000000 00000014474 12251072570 023625 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" CREATED "Fri Oct 18 17:54:11 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "25" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 73 BEGIN_DATA 1 100.0000 100.0000 100.0000 95.10649 100.0000 108.8440 2 100.0000 100.0000 100.0000 95.10649 100.0000 108.8440 3 100.0000 100.0000 100.0000 95.10649 100.0000 108.8440 4 100.0000 100.0000 100.0000 95.10649 100.0000 108.8440 5 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 6 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 7 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 8 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 9 4.166700 4.166700 4.166700 1.303726 1.319519 1.348063 10 8.333300 8.333300 8.333300 1.717853 1.755181 1.822644 11 12.50000 12.50000 12.50000 2.350416 2.420638 2.547548 12 16.66700 16.66700 16.66700 3.225924 3.341671 3.550861 13 20.83300 20.83300 20.83300 4.365228 4.540219 4.856479 14 25.00000 25.00000 25.00000 5.787770 6.036733 6.486682 15 29.16700 29.16700 29.16700 7.510475 7.849018 8.460866 16 33.33300 33.33300 33.33300 9.548618 9.993144 10.79653 17 37.50000 37.50000 37.50000 11.91787 12.48560 13.51165 18 41.66700 41.66700 41.66700 14.63156 15.34039 16.62147 19 45.83300 45.83300 45.83300 17.70189 18.57038 20.14001 20 50.00000 50.00000 50.00000 21.14266 22.19007 24.08306 21 54.16700 54.16700 54.16700 24.96491 26.21108 28.46327 22 58.33300 58.33300 58.33300 29.17879 30.64408 33.29229 23 62.50000 62.50000 62.50000 33.79707 35.50251 38.58474 24 66.66700 66.66700 66.66700 38.82914 40.79624 44.35138 25 70.83300 70.83300 70.83300 44.28359 46.53432 50.60207 26 75.00000 75.00000 75.00000 50.17267 52.72963 57.35083 27 79.16700 79.16700 79.16700 56.50443 59.39065 64.60690 28 83.33300 83.33300 83.33300 63.28623 66.52510 72.37869 29 87.50000 87.50000 87.50000 70.53008 74.14563 80.67999 30 91.66700 91.66700 91.66700 78.24293 82.25955 89.51875 31 95.83300 95.83300 95.83300 86.43106 90.87346 98.90218 32 0.000000 0.000000 50.00000 4.825152 2.529819 21.14747 33 0.000000 0.000000 100.0000 18.87111 8.147314 95.12896 34 0.000000 50.00000 0.000000 8.578171 16.15422 3.526078 35 0.000000 50.00000 50.00000 12.40332 17.68404 23.67355 36 0.000000 50.00000 100.0000 26.44928 23.30154 97.65504 37 0.000000 100.0000 0.000000 36.40521 71.80052 12.80184 38 0.000000 100.0000 50.00000 40.23036 73.33034 32.94931 39 0.000000 100.0000 100.0000 54.27632 78.94783 106.9308 40 25.00000 25.00000 75.00000 14.21660 9.407731 50.88218 41 25.00000 75.00000 25.00000 22.48648 39.42948 12.05296 42 25.00000 75.00000 75.00000 30.91530 42.80047 56.44846 43 50.00000 0.000000 0.000000 9.739336 5.506030 1.409510 44 50.00000 0.000000 50.00000 13.56449 7.035849 21.55698 45 50.00000 0.000000 100.0000 27.61044 12.65334 95.53847 46 50.00000 50.00000 0.000000 17.31751 20.66025 3.935588 47 50.00000 50.00000 100.0000 35.18861 27.80757 98.06455 48 50.00000 100.0000 0.000000 45.14454 76.30655 13.21135 49 50.00000 100.0000 50.00000 48.96970 77.83637 33.35882 50 50.00000 100.0000 100.0000 63.01565 83.45386 107.3403 51 75.00000 25.00000 25.00000 25.04513 15.96589 7.389049 52 75.00000 25.00000 75.00000 33.47396 19.33689 51.78455 53 75.00000 75.00000 25.00000 41.74384 49.35864 12.95533 54 100.0000 0.000000 0.000000 41.83017 22.05217 2.913230 55 100.0000 0.000000 50.00000 45.65532 23.58199 23.06070 56 100.0000 0.000000 100.0000 59.70128 29.19948 97.04219 57 100.0000 50.00000 0.000000 49.40834 37.20639 5.439309 58 100.0000 50.00000 50.00000 53.23349 38.73621 25.58678 59 100.0000 50.00000 100.0000 67.27945 44.35371 99.56827 60 100.0000 100.0000 0.000000 77.23538 92.85269 14.71507 61 100.0000 100.0000 50.00000 81.06053 94.38251 34.86254 62 0.000000 12.50000 100.0000 19.37917 9.163293 95.29831 63 12.50000 0.000000 100.0000 19.45702 8.449410 95.15641 64 0.000000 100.0000 12.50000 36.66166 71.90308 14.15257 65 12.50000 100.0000 0.000000 36.99112 72.10261 12.82929 66 100.0000 0.000000 12.50000 42.08662 22.15473 4.263969 67 100.0000 12.50000 0.000000 42.33823 23.06815 3.082585 68 0.000000 25.00000 100.0000 20.67239 11.74937 95.72939 69 25.00000 0.000000 100.0000 20.94839 9.218366 95.22630 70 0.000000 100.0000 25.00000 37.31442 72.16414 17.59075 71 25.00000 100.0000 0.000000 38.48249 72.87157 12.89917 72 100.0000 0.000000 25.00000 42.73938 22.41580 7.702144 73 100.0000 25.00000 0.000000 43.63145 25.65422 3.513662 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.0460 100.000 108.910 1 0.00000 46.3070 100.000 24.5380 20.1970 97.2170 2 100.000 0.00000 76.4350 51.0790 25.1960 53.7500 3 0.00000 0.00000 55.4170 4.83100 1.93250 25.4410 4 100.000 64.4300 0.00000 54.5660 47.9170 6.37360 5 0.00000 34.0820 0.00000 3.40060 6.80170 1.13370 6 78.9890 0.00000 0.00000 24.2000 12.4760 1.13290 7 5.02670 4.49050 3.59250 0.33816 0.35379 0.31287 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.00 100.00 100.00 95.046 100.00 108.91 1 0.0000 100.00 100.00 53.807 78.740 106.98 2 100.00 0.0000 100.00 59.288 28.480 96.985 3 0.0000 0.0000 100.00 18.050 7.2205 95.055 4 100.00 100.00 0.0000 76.996 92.780 13.851 5 0.0000 100.00 0.0000 35.757 71.520 11.921 6 100.00 0.0000 0.0000 41.238 21.260 1.9306 7 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 8 50.000 50.000 50.000 20.344 21.405 23.311 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s0-g49-m3-b3-f0-crossover.ti1000644 000765 000000 00000014760 12251072570 023631 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" CREATED "Fri Oct 18 17:57:02 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "49" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 97 BEGIN_DATA 1 100.00 100.00 100.00 95.106 100.00 108.84 2 100.00 100.00 100.00 95.106 100.00 108.84 3 100.00 100.00 100.00 95.106 100.00 108.84 4 100.00 100.00 100.00 95.106 100.00 108.84 5 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 6 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 7 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 8 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 9 2.0833 2.0833 2.0833 1.1517 1.1596 1.1739 10 4.1667 4.1667 4.1667 1.3037 1.3195 1.3481 11 6.2500 6.2500 6.2500 1.4852 1.5104 1.5560 12 8.3333 8.3333 8.3333 1.7179 1.7552 1.8226 13 10.417 10.417 10.417 2.0053 2.0575 2.1520 14 12.500 12.500 12.500 2.3504 2.4206 2.5475 15 14.583 14.583 14.583 2.7563 2.8476 3.0127 16 16.667 16.667 16.667 3.2259 3.3417 3.5509 17 18.750 18.750 18.750 3.7614 3.9049 4.1645 18 20.833 20.833 20.833 4.3652 4.5402 4.8565 19 22.917 22.917 22.917 5.0402 5.2503 5.6300 20 25.000 25.000 25.000 5.7878 6.0367 6.4867 21 27.083 27.083 27.083 6.6104 6.9021 7.4294 22 29.167 29.167 29.167 7.5105 7.8490 8.4609 23 31.250 31.250 31.250 8.4891 8.8786 9.5824 24 33.333 33.333 33.333 9.5486 9.9931 10.797 25 35.417 35.417 35.417 10.691 11.195 12.106 26 37.500 37.500 37.500 11.918 12.486 13.512 27 39.583 39.583 39.583 13.231 13.866 15.016 28 41.667 41.667 41.667 14.632 15.340 16.621 29 43.750 43.750 43.750 16.121 16.908 18.329 30 45.833 45.833 45.833 17.702 18.570 20.140 31 47.917 47.917 47.917 19.376 20.331 22.058 32 50.000 50.000 50.000 21.143 22.190 24.083 33 52.083 52.083 52.083 23.005 24.149 26.217 34 54.167 54.167 54.167 24.965 26.211 28.463 35 56.250 56.250 56.250 27.022 28.375 30.821 36 58.333 58.333 58.333 29.179 30.644 33.292 37 60.417 60.417 60.417 31.437 33.020 35.881 38 62.500 62.500 62.500 33.797 35.503 38.585 39 64.583 64.583 64.583 36.260 38.094 41.407 40 66.667 66.667 66.667 38.829 40.796 44.351 41 68.750 68.750 68.750 41.503 43.609 47.415 42 70.833 70.833 70.833 44.284 46.534 50.602 43 72.917 72.917 72.917 47.174 49.575 53.915 44 75.000 75.000 75.000 50.173 52.730 57.351 45 77.083 77.083 77.083 53.282 56.001 60.914 46 79.167 79.167 79.167 56.504 59.391 64.607 47 81.250 81.250 81.250 59.838 62.898 68.427 48 83.333 83.333 83.333 63.286 66.525 72.379 49 85.417 85.417 85.417 66.851 70.275 76.464 50 87.500 87.500 87.500 70.530 74.146 80.680 51 89.583 89.583 89.583 74.326 78.139 85.031 52 91.667 91.667 91.667 78.243 82.260 89.519 53 93.750 93.750 93.750 82.277 86.503 94.142 54 95.833 95.833 95.833 86.431 90.873 98.902 55 97.917 97.917 97.917 90.709 95.373 103.80 56 0.0000 0.0000 50.000 4.8252 2.5298 21.147 57 0.0000 0.0000 100.00 18.871 8.1473 95.129 58 0.0000 50.000 0.0000 8.5782 16.154 3.5261 59 0.0000 50.000 50.000 12.403 17.684 23.674 60 0.0000 50.000 100.00 26.449 23.302 97.655 61 0.0000 100.00 0.0000 36.405 71.801 12.802 62 0.0000 100.00 50.000 40.230 73.330 32.949 63 0.0000 100.00 100.00 54.276 78.948 106.93 64 25.000 25.000 75.000 14.217 9.4077 50.882 65 25.000 75.000 25.000 22.486 39.429 12.053 66 25.000 75.000 75.000 30.915 42.800 56.448 67 50.000 0.0000 0.0000 9.7393 5.5060 1.4095 68 50.000 0.0000 50.000 13.564 7.0358 21.557 69 50.000 0.0000 100.00 27.610 12.653 95.538 70 50.000 50.000 0.0000 17.318 20.660 3.9356 71 50.000 50.000 100.00 35.189 27.808 98.065 72 50.000 100.00 0.0000 45.145 76.307 13.211 73 50.000 100.00 50.000 48.970 77.836 33.359 74 50.000 100.00 100.00 63.016 83.454 107.34 75 75.000 25.000 25.000 25.045 15.966 7.3890 76 75.000 25.000 75.000 33.474 19.337 51.785 77 75.000 75.000 25.000 41.744 49.359 12.955 78 100.00 0.0000 0.0000 41.830 22.052 2.9132 79 100.00 0.0000 50.000 45.655 23.582 23.061 80 100.00 0.0000 100.00 59.701 29.199 97.042 81 100.00 50.000 0.0000 49.408 37.206 5.4393 82 100.00 50.000 50.000 53.233 38.736 25.587 83 100.00 50.000 100.00 67.279 44.354 99.568 84 100.00 100.00 0.0000 77.235 92.853 14.715 85 100.00 100.00 50.000 81.061 94.383 34.863 86 0.0000 12.500 100.00 19.379 9.1633 95.298 87 12.500 0.0000 100.00 19.457 8.4494 95.156 88 0.0000 100.00 12.500 36.662 71.903 14.153 89 12.500 100.00 0.0000 36.991 72.103 12.829 90 100.00 0.0000 12.500 42.087 22.155 4.2640 91 100.00 12.500 0.0000 42.338 23.068 3.0826 92 0.0000 25.000 100.00 20.672 11.749 95.729 93 25.000 0.0000 100.00 20.948 9.2184 95.226 94 0.0000 100.00 25.000 37.314 72.164 17.591 95 25.000 100.00 0.0000 38.482 72.872 12.899 96 100.00 0.0000 25.000 42.739 22.416 7.7021 97 100.00 25.000 0.0000 43.631 25.654 3.5137 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.00 100.00 100.00 95.106 100.00 108.84 1 0.0000 47.361 100.00 25.613 21.629 97.376 2 100.00 0.0000 79.351 52.426 26.290 58.722 3 0.0000 0.0000 58.997 6.4858 3.1940 29.894 4 100.00 66.659 0.0000 56.059 50.505 7.6561 5 0.0000 35.601 0.0000 4.6856 8.3702 2.2286 6 84.444 0.0000 0.0000 28.843 15.356 2.3047 7 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.00 100.00 100.00 95.106 100.00 108.84 1 0.0000 100.00 100.00 54.276 78.948 106.93 2 100.00 0.0000 100.00 59.701 29.199 97.042 3 0.0000 0.0000 100.00 18.871 8.1473 95.129 4 100.00 100.00 0.0000 77.235 92.853 14.715 5 0.0000 100.00 0.0000 36.405 71.801 12.802 6 100.00 0.0000 0.0000 41.830 22.052 2.9132 7 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 8 50.000 50.000 50.000 21.143 22.190 24.083 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s0-g9-m3-b3-f0-crossover.ti1000644 000765 000000 00000012105 12251072570 023534 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" CREATED "Wed Oct 16 19:18:48 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 16, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.0460 100.000 108.910 1 0.00000 46.3070 100.000 24.5380 20.1970 97.2170 2 100.000 0.00000 76.4350 51.0790 25.1960 53.7500 3 0.00000 0.00000 55.4170 4.83100 1.93250 25.4410 4 100.000 64.4300 0.00000 54.5660 47.9170 6.37360 5 0.00000 34.0820 0.00000 3.40060 6.80170 1.13370 6 78.9890 0.00000 0.00000 24.2000 12.4760 1.13290 7 5.02670 4.49050 3.59250 0.33816 0.35379 0.31287 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 16, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.00 100.00 100.00 95.046 100.00 108.91 1 0.0000 100.00 100.00 53.807 78.740 106.98 2 100.00 0.0000 100.00 59.288 28.480 96.985 3 0.0000 0.0000 100.00 18.050 7.2205 95.055 4 100.00 100.00 0.0000 76.996 92.780 13.851 5 0.0000 100.00 0.0000 35.757 71.520 11.921 6 100.00 0.0000 0.0000 41.238 21.260 1.9306 7 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 8 50.000 50.000 50.000 20.344 21.405 23.311 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s0-g97-m3-b3-f0-crossover.ti1000644 000765 000000 00000023045 12251072570 023630 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" CREATED "Fri Oct 18 17:57:51 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 145 BEGIN_DATA 1 100.000 100.000 100.000 95.1060 100.000 108.840 2 100.000 100.000 100.000 95.1060 100.000 108.840 3 100.000 100.000 100.000 95.1060 100.000 108.840 4 100.000 100.000 100.000 95.1060 100.000 108.840 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 1.04170 1.04170 1.04170 1.07588 1.07982 1.08695 10 2.08330 2.08330 2.08330 1.15174 1.15963 1.17389 11 3.12500 3.12500 3.12500 1.22762 1.23945 1.26085 12 4.16670 4.16670 4.16670 1.30373 1.31952 1.34806 13 5.20830 5.20830 5.20830 1.38828 1.40847 1.44496 14 6.25000 6.25000 6.25000 1.48518 1.51041 1.55601 15 7.29170 7.29170 7.29170 1.59490 1.62583 1.68174 16 8.33330 8.33330 8.33330 1.71785 1.75518 1.82264 17 9.37500 9.37500 9.37500 1.85450 1.89893 1.97923 18 10.4170 10.4170 10.4170 2.00527 2.05754 2.15201 19 11.4580 11.4580 11.4580 2.17034 2.23120 2.34119 20 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 21 13.5420 13.5420 13.5420 2.54569 2.62607 2.77133 22 14.5830 14.5830 14.5830 2.75631 2.84764 3.01270 23 15.6250 15.6250 15.6250 2.98301 3.08613 3.27249 24 16.6670 16.6670 16.6670 3.22592 3.34167 3.55086 25 17.7080 17.7080 17.7080 3.48510 3.61433 3.84787 26 18.7500 18.7500 18.7500 3.76135 3.90494 4.16445 27 19.7920 19.7920 19.7920 4.05473 4.21358 4.50066 28 20.8330 20.8330 20.8330 4.36523 4.54022 4.85648 29 21.8750 21.8750 21.8750 4.69372 4.88579 5.23292 30 22.9170 22.9170 22.9170 5.04019 5.25028 5.62997 31 23.9580 23.9580 23.9580 5.40455 5.63358 6.04752 32 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 33 26.0420 26.0420 26.0420 6.18977 6.45963 6.94736 34 27.0830 27.0830 27.0830 6.61038 6.90212 7.42937 35 28.1250 28.1250 28.1250 7.05067 7.36530 7.93393 36 29.1670 29.1670 29.1670 7.51048 7.84902 8.46087 37 30.2080 30.2080 30.2080 7.98958 8.35303 9.00991 38 31.2500 31.2500 31.2500 8.48913 8.87856 9.58238 39 32.2920 32.2920 32.2920 9.00891 9.42537 10.1780 40 33.3330 33.3330 33.3330 9.54862 9.99314 10.7965 41 34.3750 34.3750 34.3750 10.1095 10.5832 11.4393 42 35.4170 35.4170 35.4170 10.6913 11.1953 12.1060 43 36.4580 36.4580 36.4580 11.2936 11.8289 12.7963 44 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 45 38.5420 38.5420 38.5420 12.5636 13.1649 14.2517 46 39.5830 39.5830 39.5830 13.2305 13.8665 15.0159 47 40.6250 40.6250 40.6250 13.9200 14.5918 15.8060 48 41.6670 41.6670 41.6670 14.6316 15.3404 16.6215 49 42.7080 42.7080 42.7080 15.3648 16.1118 17.4618 50 43.7500 43.7500 43.7500 16.1213 16.9076 18.3287 51 44.7920 44.7920 44.7920 16.9005 17.7273 19.2216 52 45.8330 45.8330 45.8330 17.7019 18.5704 20.1400 53 46.8750 46.8750 46.8750 18.5272 19.4386 21.0857 54 47.9170 47.9170 47.9170 19.3757 20.3313 22.0582 55 48.9580 48.9580 48.9580 20.2469 21.2478 23.0566 56 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 57 51.0420 51.0420 51.0420 22.0622 23.1575 25.1369 58 52.0830 52.0830 52.0830 23.0049 24.1492 26.2172 59 53.1250 53.1250 53.1250 23.9727 25.1673 27.3263 60 54.1670 54.1670 54.1670 24.9649 26.2111 28.4633 61 55.2080 55.2080 55.2080 25.9807 27.2796 29.6273 62 56.2500 56.2500 56.2500 27.0221 28.3752 30.8208 63 57.2920 57.2920 57.2920 28.0884 29.4970 32.0428 64 58.3330 58.3330 58.3330 29.1788 30.6441 33.2923 65 59.3750 59.3750 59.3750 30.2954 31.8187 34.5719 66 60.4170 60.4170 60.4170 31.4374 33.0201 35.8806 67 61.4580 61.4580 61.4580 32.6038 34.2472 37.2173 68 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 69 63.5420 63.5420 63.5420 35.0162 36.7850 39.9818 70 64.5830 64.5830 64.5830 36.2601 38.0937 41.4074 71 65.6250 65.6250 65.6250 37.5315 39.4311 42.8643 72 66.6670 66.6670 66.6670 38.8291 40.7962 44.3514 73 67.7080 67.7080 67.7080 40.1520 42.1879 45.8674 74 68.7500 68.7500 68.7500 41.5028 43.6089 47.4154 75 69.7920 69.7920 69.7920 42.8804 45.0582 48.9940 76 70.8330 70.8330 70.8330 44.2836 46.5343 50.6021 77 71.8750 71.8750 71.8750 45.7152 48.0404 52.2427 78 72.9170 72.9170 72.9170 47.1741 49.5751 53.9145 79 73.9580 73.9580 73.9580 48.6589 51.1371 55.6161 80 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 81 76.0420 76.0420 76.0420 51.7141 54.3512 59.1173 82 77.0830 77.0830 77.0830 53.2819 56.0005 60.9139 83 78.1250 78.1250 78.1250 54.8791 57.6808 62.7443 84 79.1670 79.1670 79.1670 56.5044 59.3906 64.6069 85 80.2080 80.2080 80.2080 58.1564 61.1285 66.5000 86 81.2500 81.2500 81.2500 59.8383 62.8979 68.4275 87 82.2920 82.2920 82.2920 61.5488 64.6973 70.3876 88 83.3330 83.3330 83.3330 63.2862 66.5251 72.3787 89 84.3750 84.3750 84.3750 65.0541 68.3849 74.4046 90 85.4170 85.4170 85.4170 66.8509 70.2752 76.4638 91 86.4580 86.4580 86.4580 68.6750 72.1941 78.5541 92 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 93 88.5420 88.5420 88.5420 72.4145 76.1280 82.8394 94 89.5830 89.5830 89.5830 74.3264 78.1394 85.0305 95 90.6250 90.6250 90.6250 76.2698 80.1838 87.2576 96 91.6670 91.6670 91.6670 78.2429 82.2595 89.5188 97 92.7080 92.7080 92.7080 80.2440 84.3646 91.8119 98 93.7500 93.7500 93.7500 82.2769 86.5032 94.1415 99 94.7920 94.7920 94.7920 84.3399 88.6735 96.5057 100 95.8330 95.8330 95.8330 86.4311 90.8735 98.9022 101 96.8750 96.8750 96.8750 88.5546 93.1074 101.336 102 97.9170 97.9170 97.9170 90.7086 95.3735 103.804 103 98.9580 98.9580 98.9580 92.8912 97.6695 106.305 104 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 105 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 106 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 107 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 108 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 109 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 110 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 111 0.00000 100.000 100.000 54.2763 78.9478 106.931 112 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 113 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 114 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 115 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 116 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 117 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 118 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 119 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 120 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 121 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 122 50.0000 100.000 100.000 63.0157 83.4539 107.340 123 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 124 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 125 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 126 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 127 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 128 100.000 0.00000 100.000 59.7013 29.1995 97.0422 129 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 130 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 131 100.000 50.0000 100.000 67.2794 44.3537 99.5683 132 100.000 100.000 0.00000 77.2354 92.8527 14.7151 133 100.000 100.000 50.0000 81.0605 94.3825 34.8625 134 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 135 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 136 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 137 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 138 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 139 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 140 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 141 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 142 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 143 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 144 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 145 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.00 100.00 100.00 95.106 100.00 108.84 1 0.0000 47.361 100.00 25.613 21.629 97.376 2 100.00 0.0000 79.351 52.426 26.290 58.722 3 0.0000 0.0000 58.997 6.4858 3.1940 29.894 4 100.00 66.659 0.0000 56.059 50.505 7.6561 5 0.0000 35.601 0.0000 4.6856 8.3702 2.2286 6 84.444 0.0000 0.0000 28.843 15.356 2.3047 7 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.00 100.00 100.00 95.106 100.00 108.84 1 0.0000 100.00 100.00 54.276 78.948 106.93 2 100.00 0.0000 100.00 59.701 29.199 97.042 3 0.0000 0.0000 100.00 18.871 8.1473 95.129 4 100.00 100.00 0.0000 77.235 92.853 14.715 5 0.0000 100.00 0.0000 36.405 71.801 12.802 6 100.00 0.0000 0.0000 41.830 22.052 2.9132 7 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 8 50.000 50.000 50.000 21.143 22.190 24.083 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s13-g37-m4-b4-f0.ti1000644 000765 000000 00000024151 12237536424 021673 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "4" CREATED "Sat Oct 19 14:08:23 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "37" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "4" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "13" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 154 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 16.6667 50.0000 83.3333 21.3724 21.3828 65.8730 3 16.6667 83.3333 83.3333 37.2280 53.0897 71.1583 4 16.6667 16.6667 50.0000 6.62830 4.70235 21.4719 5 16.6667 16.6667 83.3333 14.6316 7.90317 63.6261 6 100.000 33.3333 100.000 62.9175 35.6311 98.1143 7 33.3333 0.00000 66.6667 11.8929 5.78548 39.0116 8 33.3333 33.3333 66.6667 15.1091 12.2171 40.0837 9 50.0000 50.0000 83.3333 29.1460 25.3909 66.2373 10 50.0000 83.3333 83.3333 45.0016 57.0978 71.5225 11 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 12 33.3333 0.00000 0.00000 4.70908 2.91242 1.17380 13 41.6667 0.00000 0.00000 6.91425 4.04941 1.27713 14 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 15 58.3333 0.00000 0.00000 13.2261 7.30384 1.57290 16 66.6667 0.00000 0.00000 17.4128 9.46250 1.76908 17 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 18 83.3333 0.00000 0.00000 28.0245 14.9339 2.26632 19 5.55556 5.55556 5.55556 1.41919 1.44098 1.48038 20 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 21 11.1111 11.1111 11.1111 2.11371 2.17162 2.27628 22 0.00000 16.6667 0.00000 1.83742 2.67460 1.27914 23 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 24 0.00000 33.3333 0.00000 4.21627 7.43164 2.07210 25 0.00000 41.6667 0.00000 6.12844 11.2555 2.70950 26 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 27 0.00000 58.3333 0.00000 11.6017 22.2004 4.53393 28 0.00000 66.6667 0.00000 15.2321 29.4602 5.74408 29 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 30 0.00000 83.3333 0.00000 24.4338 47.8611 8.81135 31 0.00000 91.6667 0.00000 30.0605 59.1128 10.6869 32 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 33 33.3333 100.000 66.6667 47.2981 76.5860 50.8134 34 100.000 100.000 66.6667 84.4192 95.7257 52.5528 35 0.00000 0.00000 16.6667 1.42269 1.16905 3.22637 36 0.00000 0.00000 41.6667 3.58863 2.03529 14.6346 37 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 38 0.00000 0.00000 58.3333 6.35130 3.14018 29.1859 39 0.00000 0.00000 66.6667 8.18379 3.87306 38.8378 40 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 41 8.33333 0.00000 0.00000 1.31146 1.16059 1.01459 42 66.6667 0.00000 100.000 35.2839 16.6098 95.8980 43 100.000 0.00000 100.000 59.7013 29.1995 97.0422 44 100.000 66.6667 100.000 73.9334 57.6597 101.786 45 2.77778 2.77778 2.77778 1.20233 1.21285 1.23186 46 0.00000 0.00000 8.33333 1.13632 1.05452 1.71803 47 0.00000 8.33333 0.00000 1.27008 1.54008 1.09003 48 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 49 13.8889 13.8889 13.8889 2.61414 2.69807 2.84977 50 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 51 19.4444 19.4444 19.4444 3.95495 4.10861 4.38632 52 22.2222 22.2222 22.2222 4.80716 5.00513 5.36292 53 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 54 27.7778 27.7778 27.7778 6.90179 7.20869 7.76333 55 30.5556 30.5556 30.5556 8.15397 8.52597 9.19829 56 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 57 36.1111 36.1111 36.1111 11.0906 11.6153 12.5636 58 38.8889 38.8889 38.8889 12.7834 13.3962 14.5036 59 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 60 44.4444 44.4444 44.4444 16.6381 17.4512 18.9209 61 47.2222 47.2222 47.2222 18.8073 19.7333 21.4068 62 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 63 66.6667 66.6667 100.000 49.5160 45.0701 100.642 64 100.000 100.000 100.000 95.1065 100.000 108.844 65 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 66 61.1111 61.1111 61.1111 32.2123 33.8353 36.7686 67 63.8889 63.8889 63.8889 35.4278 37.2181 40.4535 68 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 69 69.4444 69.4444 69.4444 42.4179 44.5716 48.4641 70 72.2222 72.2222 72.2222 46.1983 48.5486 52.7963 71 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 72 77.7778 77.7778 77.7778 54.3438 57.1176 62.1308 73 80.5556 80.5556 80.5556 58.7142 61.7154 67.1393 74 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 75 86.1111 86.1111 86.1111 68.0640 71.5513 77.8539 76 88.8889 88.8889 88.8889 73.0483 76.7948 83.5658 77 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 78 94.4444 94.4444 94.4444 83.6484 87.9461 95.7133 79 0.00000 66.6667 33.3333 16.8555 30.1095 14.2949 80 0.00000 100.000 66.6667 43.5890 74.6736 50.6396 81 66.6667 33.3333 0.00000 20.6291 15.8941 2.84118 82 100.000 33.3333 0.00000 45.0464 28.4838 3.98533 83 100.000 66.6667 0.00000 56.0623 50.5124 7.65731 84 66.6667 66.6667 0.00000 31.6449 37.9227 6.51315 85 33.3333 66.6667 0.00000 18.9412 31.3726 5.91788 86 33.3333 100.000 0.00000 40.1143 73.7129 12.9756 87 66.6667 100.000 0.00000 52.8180 80.2630 13.5709 88 100.000 100.000 0.00000 77.2354 92.8527 14.7151 89 33.3333 0.00000 33.3333 6.33252 3.56169 9.72464 90 66.6667 0.00000 33.3333 19.0363 10.1118 10.3199 91 83.3333 16.6667 50.0000 32.6871 18.1383 22.6929 92 50.0000 16.6667 16.6667 10.9994 7.34968 3.91503 93 83.3333 16.6667 16.6667 29.2846 16.7776 4.77184 94 83.3333 50.0000 16.6667 36.0254 30.2572 7.01877 95 33.3333 33.3333 0.00000 7.92535 9.34406 2.24590 96 33.3333 66.6667 33.3333 20.5646 32.0219 14.4687 97 66.6667 66.6667 33.3333 33.2684 38.5720 15.0640 98 100.000 66.6667 33.3333 57.6857 51.1617 16.2081 99 0.00000 100.000 33.3333 38.0287 72.4498 21.3527 100 33.3333 100.000 33.3333 41.7377 74.3622 21.5265 101 66.6667 100.000 33.3333 54.4415 80.9123 22.1217 102 100.000 100.000 33.3333 78.8588 93.5020 23.2659 103 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 104 100.000 0.00000 33.3333 43.4536 22.7014 11.4641 105 100.000 0.00000 66.6667 49.0140 24.9252 40.7510 106 97.2222 97.2222 97.2222 89.2690 93.8590 102.154 107 100.000 100.000 100.000 95.1065 100.000 108.844 108 66.6667 33.3333 33.3333 22.2525 16.5434 11.3920 109 83.3333 50.0000 50.0000 39.4278 31.6180 24.9399 110 16.6667 50.0000 16.6667 9.96660 16.8212 5.79771 111 16.6667 50.0000 50.0000 13.3691 18.1820 23.7188 112 33.3333 66.6667 66.6667 26.1250 34.2457 43.7556 113 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 114 91.6667 0.00000 0.00000 34.5133 18.2796 2.57037 115 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 116 100.000 33.3333 33.3333 46.6699 29.1331 12.5362 117 100.000 66.6667 66.6667 63.2461 53.3855 45.4951 118 0.00000 0.00000 83.3333 12.8285 5.73063 63.3017 119 0.00000 0.00000 91.6667 15.6685 6.86649 78.2607 120 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 121 0.00000 66.6667 100.000 33.1032 36.6075 99.8730 122 100.000 100.000 100.000 95.1065 100.000 108.844 123 33.3333 0.00000 100.000 22.5802 10.0597 95.3028 124 33.3333 33.3333 100.000 25.7965 16.4914 96.3749 125 33.3333 66.6667 100.000 36.8123 38.5200 100.047 126 0.00000 33.3333 66.6667 11.4001 10.3047 39.9098 127 0.00000 66.6667 66.6667 22.4159 32.3333 43.5818 128 0.00000 100.000 100.000 54.2763 78.9478 106.931 129 33.3333 100.000 100.000 57.9854 80.8602 107.105 130 66.6667 100.000 100.000 70.6891 87.4103 107.700 131 66.6667 0.00000 66.6667 24.5966 12.3356 39.6068 132 66.6667 33.3333 66.6667 27.8129 18.7672 40.6789 133 100.000 33.3333 66.6667 52.2302 31.3569 41.8231 134 16.6667 83.3333 16.6667 25.8223 48.5281 11.0830 135 50.0000 83.3333 16.6667 33.5959 52.5362 11.4472 136 50.0000 50.0000 16.6667 17.7402 20.8293 6.16196 137 83.3333 83.3333 16.6667 51.8810 61.9641 12.3040 138 83.3333 83.3333 50.0000 55.2835 63.3249 30.2251 139 16.6667 0.00000 0.00000 1.96573 1.49793 1.04525 140 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 141 66.6667 33.3333 100.000 38.5002 23.0415 96.9701 142 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 143 0.00000 0.00000 33.3333 2.62344 1.64927 9.55084 144 16.6667 83.3333 50.0000 29.2247 49.8889 29.0041 145 50.0000 83.3333 50.0000 36.9983 53.8970 29.3683 146 66.6667 100.000 66.6667 60.0018 83.1361 51.4087 147 50.0000 16.6667 50.0000 14.4019 8.71045 21.8361 148 50.0000 16.6667 83.3333 22.4052 11.9113 63.9903 149 83.3333 16.6667 83.3333 40.6904 21.3392 64.8471 150 83.3333 50.0000 83.3333 47.4311 34.8188 67.0941 151 52.7778 52.7778 52.7778 23.6475 24.8252 26.9536 152 55.5556 55.5556 55.5556 26.3253 27.6422 30.0222 153 0.00000 33.3333 33.3333 5.83971 8.08091 10.6229 154 0.00000 33.3333 100.000 22.0874 14.5790 96.2011 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s17-g49-m5-b5-f0.ti1000644 000765 000000 00000040242 12237536424 021703 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "5" CREATED "Sat Oct 19 13:37:24 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "49" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "5" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "17" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 271 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 12.5000 37.5000 12.5000 5.94993 9.61866 3.74740 3 12.5000 62.5000 12.5000 14.1814 26.0794 6.49125 4 12.5000 87.5000 87.5000 40.9488 58.8934 79.2939 5 37.5000 87.5000 87.5000 45.0999 61.0337 79.4884 6 0.00000 25.0000 25.0000 3.71049 4.96568 6.38934 7 0.00000 25.0000 50.0000 6.62643 6.13187 21.7479 8 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 9 50.0000 75.0000 75.0000 37.5774 46.2355 56.7606 10 12.5000 0.00000 0.00000 1.58591 1.30210 1.02745 11 10.4167 10.4167 10.4167 2.00521 2.05749 2.15195 12 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 13 31.2500 0.00000 0.00000 4.24932 2.67536 1.15226 14 37.5000 0.00000 0.00000 5.73696 3.44239 1.22197 15 43.7500 0.00000 0.00000 7.56070 4.38272 1.30742 16 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 17 62.5000 37.5000 62.5000 25.5656 19.0418 35.8409 18 87.5000 37.5000 62.5000 41.5030 27.2592 36.5877 19 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 20 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 21 81.2500 0.00000 0.00000 26.5283 14.1625 2.19621 22 87.5000 0.00000 0.00000 31.1672 16.5543 2.41358 23 93.7500 0.00000 0.00000 36.2638 19.1821 2.65240 24 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 25 62.5000 62.5000 12.5000 27.8253 33.1142 7.13058 26 75.0000 75.0000 50.0000 44.6598 50.5248 28.3139 27 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 28 0.00000 12.5000 0.00000 1.50806 2.01598 1.16935 29 0.00000 43.7500 0.00000 6.68900 12.3764 2.89635 30 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 31 0.00000 56.2500 0.00000 10.7902 20.5776 4.26342 32 0.00000 62.5000 0.00000 13.3391 25.6747 5.11306 33 12.5000 62.5000 37.5000 15.9983 26.8060 16.0610 34 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 35 0.00000 6.25000 0.00000 1.18254 1.36502 1.06085 36 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 37 0.00000 81.2500 0.00000 23.1365 45.2667 8.37888 38 0.00000 87.5000 0.00000 27.1590 53.3106 9.71972 39 0.00000 93.7500 0.00000 31.5784 62.1482 11.1929 40 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 41 6.25000 6.25000 6.25000 1.48518 1.51041 1.55601 42 0.00000 0.00000 12.5000 1.25645 1.10256 2.35074 43 0.00000 0.00000 18.7500 1.52439 1.20972 3.76201 44 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 45 0.00000 0.00000 31.2500 2.42221 1.56879 8.49092 46 0.00000 0.00000 37.5000 3.07334 1.82920 11.9205 47 0.00000 0.00000 43.7500 3.87158 2.14845 16.1249 48 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 49 0.00000 0.00000 56.2500 5.94168 2.97636 27.0283 50 0.00000 0.00000 62.5000 7.22826 3.49091 33.8049 51 0.00000 0.00000 68.7500 8.69161 4.07616 41.5125 52 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 53 0.00000 0.00000 81.2500 12.1736 5.46873 59.8524 54 0.00000 0.00000 87.5000 14.2040 6.28076 70.5467 55 0.00000 0.00000 93.7500 16.4347 7.17291 82.2963 56 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 57 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 58 75.0000 50.0000 100.000 47.7839 34.3017 98.6547 59 0.00000 0.00000 6.25000 1.09214 1.03685 1.48530 60 2.08333 2.08333 2.08333 1.15175 1.15964 1.17390 61 4.16667 4.16667 4.16667 1.30372 1.31952 1.34806 62 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 63 14.5833 14.5833 14.5833 2.75638 2.84772 3.01278 64 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 65 18.7500 18.7500 18.7500 3.76135 3.90494 4.16445 66 20.8333 20.8333 20.8333 4.36533 4.54033 4.85660 67 22.9167 22.9167 22.9167 5.04007 5.25016 5.62984 68 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 69 27.0833 27.0833 27.0833 6.61052 6.90226 7.42953 70 29.1667 29.1667 29.1667 7.51032 7.84886 8.46069 71 31.2500 31.2500 31.2500 8.48913 8.87856 9.58238 72 6.25000 0.00000 0.00000 1.21051 1.10854 1.00986 73 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 74 35.4167 35.4167 35.4167 10.6911 11.1951 12.1058 75 39.5833 39.5833 39.5833 13.2307 13.8667 15.0161 76 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 77 43.7500 43.7500 43.7500 16.1213 16.9076 18.3287 78 45.8333 45.8333 45.8333 17.7021 18.5707 20.1403 79 47.9167 47.9167 47.9167 19.3754 20.3310 22.0579 80 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 81 52.0833 52.0833 52.0833 23.0052 24.1495 26.2175 82 54.1667 54.1667 54.1667 24.9646 26.2107 28.4629 83 56.2500 56.2500 56.2500 27.0221 28.3752 30.8208 84 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 85 60.4167 60.4167 60.4167 31.4370 33.0197 35.8802 86 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 87 64.5833 64.5833 64.5833 36.2605 38.0941 41.4078 88 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 89 68.7500 68.7500 68.7500 41.5028 43.6089 47.4154 90 70.8333 70.8333 70.8333 44.2840 46.5348 50.6026 91 72.9167 72.9167 72.9167 47.1736 49.5746 53.9140 92 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 93 77.0833 77.0833 77.0833 53.2824 56.0011 60.9145 94 79.1667 79.1667 79.1667 56.5039 59.3901 64.6063 95 81.2500 81.2500 81.2500 59.8383 62.8979 68.4275 96 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 97 85.4167 85.4167 85.4167 66.8503 70.2745 76.4631 98 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 99 89.5833 89.5833 89.5833 74.3270 78.1400 85.0312 100 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 101 93.7500 93.7500 93.7500 82.2769 86.5032 94.1415 102 95.8333 95.8333 95.8333 86.4317 90.8742 98.9029 103 97.9167 97.9167 97.9167 90.7080 95.3727 103.803 104 25.0000 25.0000 0.00000 4.87856 5.67311 1.69777 105 50.0000 25.0000 0.00000 11.5406 9.10808 2.00994 106 75.0000 25.0000 0.00000 24.1359 15.6023 2.60014 107 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 108 100.000 75.0000 0.00000 60.3302 59.0470 9.07994 109 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 110 75.0000 50.0000 0.00000 29.9128 27.1544 4.52578 111 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 112 100.000 100.000 100.000 95.1065 100.000 108.844 113 50.0000 75.0000 0.00000 28.2393 42.5008 7.57622 114 75.0000 75.0000 0.00000 40.8346 48.9950 8.16642 115 25.0000 75.0000 0.00000 21.5773 39.0658 7.26405 116 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 117 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 118 75.0000 100.000 0.00000 57.7399 82.8007 13.8015 119 100.000 100.000 0.00000 77.2354 92.8527 14.7151 120 25.0000 0.00000 25.0000 3.98649 2.43468 5.88625 121 50.0000 0.00000 25.0000 10.6485 5.86966 6.19842 122 75.0000 0.00000 25.0000 23.2439 12.3638 6.78862 123 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 124 87.5000 37.5000 37.5000 37.3481 25.5975 14.7033 125 56.2500 0.00000 0.00000 12.2903 6.82130 1.52904 126 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 127 100.000 25.0000 25.0000 44.5407 26.0178 8.30257 128 100.000 25.0000 50.0000 47.4566 27.1840 23.6611 129 50.0000 25.0000 25.0000 12.4498 9.47171 6.79885 130 50.0000 50.0000 25.0000 18.2267 21.0239 8.72450 131 75.0000 50.0000 25.0000 30.8220 27.5181 9.31470 132 100.000 50.0000 25.0000 50.3176 37.5700 10.2282 133 25.0000 50.0000 25.0000 11.5647 17.5889 8.41233 134 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 135 50.0000 75.0000 25.0000 29.1485 42.8645 12.3651 136 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 137 100.000 75.0000 25.0000 61.2394 59.4106 13.8689 138 25.0000 50.0000 0.00000 10.6555 17.2253 3.62342 139 25.0000 100.000 25.0000 39.3917 73.2352 17.6881 140 50.0000 100.000 25.0000 46.0538 76.6702 18.0003 141 75.0000 100.000 25.0000 58.6491 83.1644 18.5905 142 100.000 100.000 25.0000 78.1446 93.2163 19.5040 143 25.0000 0.00000 50.0000 6.90243 3.60087 21.2448 144 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 145 75.0000 0.00000 50.0000 26.1598 13.5300 22.1472 146 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 147 100.000 50.0000 75.0000 58.7464 40.9410 54.6237 148 100.000 50.0000 100.000 67.2794 44.3537 99.5683 149 50.0000 25.0000 50.0000 15.3658 10.6379 22.1574 150 75.0000 25.0000 50.0000 27.9611 17.1321 22.7476 151 100.000 25.0000 75.0000 52.9695 29.3888 52.6981 152 25.0000 25.0000 50.0000 8.70371 7.20292 21.8452 153 25.0000 50.0000 50.0000 14.4806 18.7551 23.7709 154 75.0000 50.0000 50.0000 33.7380 28.6843 24.6733 155 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 156 100.000 75.0000 50.0000 64.1553 60.5768 29.2274 157 87.5000 62.5000 62.5000 49.7345 43.7199 39.3315 158 87.5000 87.5000 62.5000 63.5544 71.3558 43.9382 159 100.000 100.000 75.0000 86.5734 96.5873 63.8995 160 0.00000 68.7500 0.00000 16.2382 31.4721 6.07943 161 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 162 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 163 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 164 75.0000 100.000 50.0000 61.5650 84.3305 33.9490 165 100.000 100.000 50.0000 81.0605 94.3825 34.8625 166 25.0000 0.00000 75.0000 12.4153 5.80568 50.2817 167 50.0000 0.00000 75.0000 19.0774 9.24066 50.5939 168 75.0000 0.00000 75.0000 31.6727 15.7348 51.1841 169 100.000 0.00000 75.0000 51.1682 25.7868 52.0976 170 100.000 0.00000 100.000 59.7013 29.1995 97.0422 171 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 172 50.0000 25.0000 75.0000 20.8787 12.8427 51.1944 173 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 174 0.00000 31.2500 0.00000 3.81760 6.63441 1.93921 175 0.00000 37.5000 0.00000 5.10758 9.21400 2.36920 176 25.0000 50.0000 75.0000 19.9935 20.9599 52.8078 177 50.0000 50.0000 75.0000 26.6555 24.3949 53.1200 178 75.0000 50.0000 75.0000 39.2509 30.8891 53.7102 179 100.000 75.0000 75.0000 69.6682 62.7816 58.2644 180 100.000 75.0000 100.000 78.2013 66.1943 103.209 181 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 182 12.5000 37.5000 37.5000 7.76682 10.3453 13.3171 183 25.0000 75.0000 50.0000 25.4024 40.5957 27.4115 184 25.0000 100.000 50.0000 42.3076 74.4014 33.0466 185 25.0000 100.000 75.0000 47.8205 76.6062 62.0836 186 50.0000 100.000 75.0000 54.4826 80.0412 62.3958 187 75.0000 100.000 75.0000 67.0779 86.5354 62.9859 188 100.000 100.000 100.000 95.1065 100.000 108.844 189 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 190 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 191 75.0000 0.00000 100.000 40.2058 19.1475 96.1287 192 75.0000 75.0000 100.000 58.7057 56.1423 102.295 193 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 194 25.0000 25.0000 100.000 22.7497 12.8204 95.8267 195 50.0000 25.0000 100.000 29.4117 16.2554 96.1389 196 75.0000 25.0000 100.000 42.0070 22.7496 96.7291 197 100.000 25.0000 100.000 61.5026 32.8015 97.6426 198 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 199 25.0000 50.0000 100.000 28.5266 24.3726 97.7524 200 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 201 50.0000 75.0000 100.000 46.1104 49.6481 101.705 202 12.5000 62.5000 62.5000 20.1532 28.4677 37.9454 203 12.5000 62.5000 87.5000 27.1290 31.2576 74.6872 204 25.0000 75.0000 100.000 39.4484 46.2132 101.393 205 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 206 0.00000 75.0000 75.0000 28.8380 41.7294 56.3511 207 0.00000 100.000 75.0000 45.7432 75.5351 61.9862 208 0.00000 100.000 100.000 54.2763 78.9478 106.931 209 25.0000 100.000 100.000 56.3536 80.0189 107.028 210 50.0000 100.000 100.000 63.0157 83.4539 107.340 211 75.0000 100.000 100.000 75.6110 89.9480 107.930 212 62.5000 0.00000 0.00000 15.2297 8.33690 1.66678 213 68.7500 0.00000 0.00000 18.5730 10.0607 1.82344 214 100.000 100.000 100.000 95.1065 100.000 108.844 215 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 216 37.5000 37.5000 12.5000 10.1010 11.7590 3.94191 217 62.5000 37.5000 12.5000 19.5938 16.6535 4.38672 218 87.5000 37.5000 12.5000 35.5312 24.8708 5.13352 219 37.5000 12.5000 12.5000 6.50147 4.56093 2.74206 220 62.5000 12.5000 12.5000 15.9942 9.45544 3.18687 221 87.5000 12.5000 12.5000 31.9317 17.6728 3.93367 222 87.5000 62.5000 12.5000 43.7627 41.3315 7.87738 223 37.5000 62.5000 12.5000 18.3325 28.2197 6.68576 224 37.5000 87.5000 12.5000 32.1524 55.8555 11.2924 225 62.5000 87.5000 12.5000 41.6451 60.7500 11.7372 226 87.5000 87.5000 12.5000 57.5826 68.9674 12.4840 227 12.5000 12.5000 37.5000 4.16730 3.14728 12.1173 228 37.5000 12.5000 37.5000 8.31836 5.28757 12.3118 229 62.5000 12.5000 37.5000 17.8111 10.1821 12.7566 230 87.5000 12.5000 37.5000 33.7486 18.3995 13.5034 231 87.5000 62.5000 37.5000 45.5796 42.0582 17.4471 232 62.5000 37.5000 37.5000 21.4106 17.3801 13.9565 233 62.5000 62.5000 37.5000 29.6421 33.8408 16.7003 234 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 235 37.5000 62.5000 37.5000 20.1494 28.9463 16.2555 236 50.0000 75.0000 50.0000 32.0645 44.0306 27.7237 237 12.5000 87.5000 12.5000 28.0013 53.7152 11.0979 238 12.5000 87.5000 37.5000 29.8182 54.4419 20.6677 239 37.5000 87.5000 37.5000 33.9692 56.5822 20.8622 240 62.5000 87.5000 37.5000 43.4620 61.4767 21.3070 241 87.5000 87.5000 37.5000 59.3994 69.6941 22.0538 242 18.7500 0.00000 0.00000 2.19807 1.61773 1.05614 243 37.5000 12.5000 62.5000 12.4733 6.94928 34.1962 244 62.5000 12.5000 62.5000 21.9661 11.8438 34.6410 245 87.5000 12.5000 62.5000 37.9035 20.0612 35.3878 246 87.5000 12.5000 87.5000 44.8792 22.8510 72.1296 247 87.5000 37.5000 87.5000 48.4787 30.0490 73.3295 248 87.5000 62.5000 87.5000 56.7102 46.5097 76.0733 249 0.00000 18.7500 0.00000 2.03889 3.07749 1.34630 250 0.00000 50.0000 25.0000 9.48738 16.5179 8.31499 251 0.00000 75.0000 25.0000 20.4092 38.3584 11.9556 252 0.00000 75.0000 50.0000 23.3251 39.5246 27.3142 253 12.5000 87.5000 62.5000 33.9731 56.1036 42.5521 254 37.5000 87.5000 62.5000 38.1242 58.2439 42.7466 255 62.5000 87.5000 62.5000 47.6169 63.1384 43.1914 256 12.5000 12.5000 62.5000 8.32223 4.80899 34.0017 257 12.5000 12.5000 87.5000 15.2979 7.59883 70.7435 258 37.5000 12.5000 87.5000 19.4490 9.73913 70.9380 259 62.5000 12.5000 87.5000 28.9418 14.6336 71.3828 260 12.5000 37.5000 62.5000 11.9217 12.0070 35.2016 261 12.5000 37.5000 87.5000 18.8975 14.7969 71.9433 262 37.5000 37.5000 87.5000 23.0485 16.9371 72.1379 263 62.5000 37.5000 87.5000 32.5413 21.8317 72.5827 264 37.5000 37.5000 62.5000 16.0728 14.1473 35.3961 265 37.5000 62.5000 62.5000 24.3043 30.6080 38.1399 266 37.5000 62.5000 87.5000 31.2800 33.3978 74.8817 267 62.5000 62.5000 87.5000 40.7728 38.2924 75.3265 268 62.5000 87.5000 87.5000 54.5927 65.9282 79.9332 269 0.00000 25.0000 75.0000 12.1393 8.33668 50.7848 270 0.00000 50.0000 75.0000 17.9162 19.8888 52.7105 271 0.00000 75.0000 100.000 37.3711 45.1421 101.296 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s21-g61-m6-b6-f0.ti1000644 000765 000000 00000062011 12237536424 021670 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "6" CREATED "Sat Oct 19 05:04:19 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "61" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "6" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "21" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 442 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 20.0000 20.0000 100.000 21.3949 11.1881 95.5830 3 40.0000 40.0000 100.000 29.0004 20.3516 96.9513 4 0.00000 20.0000 60.0000 7.86486 5.62059 31.3752 5 0.00000 20.0000 80.0000 12.9631 7.65958 58.2283 6 0.00000 20.0000 100.000 20.0432 10.4911 95.5197 7 20.0000 40.0000 100.000 24.9270 18.2514 96.7604 8 20.0000 60.0000 100.000 31.5010 31.3975 98.9517 9 20.0000 80.0000 100.000 41.6014 51.5955 102.319 10 40.0000 80.0000 100.000 45.6748 53.6958 102.509 11 10.0000 30.0000 30.0000 5.31114 6.91982 8.77744 12 0.00000 40.0000 40.0000 8.07873 11.3568 15.0748 13 10.0000 50.0000 50.0000 12.8126 17.8950 23.6927 14 90.0000 50.0000 50.0000 44.5535 34.2608 25.1800 15 40.0000 0.00000 0.00000 6.42504 3.79717 1.25421 16 45.0000 0.00000 0.00000 7.96746 4.59245 1.32648 17 50.0000 10.0000 10.0000 10.2733 6.28729 2.47124 18 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 19 55.0000 0.00000 0.00000 11.7495 6.54248 1.50370 20 60.0000 0.00000 0.00000 14.0063 7.70610 1.60945 21 70.0000 10.0000 10.0000 19.8254 11.2124 2.91883 22 70.0000 0.00000 0.00000 19.2914 10.4311 1.85711 23 80.0000 0.00000 0.00000 25.6544 13.7119 2.15526 24 85.0000 0.00000 0.00000 29.2574 15.5696 2.32409 25 90.0000 10.0000 10.0000 33.6842 18.3580 3.56823 26 90.0000 0.00000 0.00000 33.1502 17.5767 2.50650 27 95.0000 0.00000 0.00000 37.3391 19.7365 2.70279 28 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 29 0.00000 15.0000 0.00000 1.69418 2.38816 1.23139 30 0.00000 10.0000 0.00000 1.35486 1.70962 1.11829 31 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 32 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 33 10.0000 30.0000 10.0000 4.18139 6.46799 2.82697 34 0.00000 30.0000 0.00000 3.59304 6.18536 1.86435 35 0.00000 40.0000 0.00000 5.70423 10.4071 2.56809 36 0.00000 45.0000 0.00000 7.04172 13.0817 3.01392 37 10.0000 50.0000 10.0000 9.16652 16.4369 4.48869 38 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 39 0.00000 55.0000 0.00000 10.3212 19.6399 4.10711 40 0.00000 60.0000 0.00000 12.2782 23.5533 4.75944 41 10.0000 70.0000 10.0000 17.4495 33.0004 7.24970 42 0.00000 70.0000 0.00000 16.8611 32.7178 6.28709 43 0.00000 80.0000 0.00000 22.3786 43.7513 8.12627 44 0.00000 85.0000 0.00000 25.5029 49.9990 9.16771 45 10.0000 90.0000 10.0000 29.4668 57.0318 11.2555 46 0.00000 90.0000 0.00000 28.8785 56.7492 10.2929 47 0.00000 95.0000 0.00000 32.5108 64.0128 11.5037 48 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 49 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 50 0.00000 0.00000 10.0000 1.17912 1.07164 1.94344 51 0.00000 0.00000 15.0000 1.35039 1.14013 2.84555 52 0.00000 0.00000 20.0000 1.59162 1.23661 4.11612 53 10.0000 10.0000 30.0000 3.07296 2.44409 8.03137 54 0.00000 0.00000 30.0000 2.30886 1.52346 7.89391 55 80.0000 40.0000 40.0000 32.7331 24.0687 16.2301 56 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 57 10.0000 10.0000 50.0000 5.58925 3.45044 21.2849 58 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 59 0.00000 0.00000 60.0000 6.69278 3.27675 30.9845 60 0.00000 0.00000 65.0000 7.79203 3.71638 36.7743 61 10.0000 10.0000 70.0000 9.77014 5.12254 43.3061 62 0.00000 0.00000 70.0000 9.00605 4.20191 43.1687 63 0.00000 0.00000 80.0000 11.7911 5.31574 57.8376 64 0.00000 0.00000 85.0000 13.3681 5.94645 66.1439 65 10.0000 10.0000 90.0000 15.8360 7.54851 75.2558 66 0.00000 0.00000 90.0000 15.0719 6.62788 75.1183 67 0.00000 0.00000 95.0000 16.9054 7.36115 84.7753 68 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 69 50.0000 50.0000 90.0000 31.3894 26.2881 78.0539 70 70.0000 70.0000 90.0000 49.2245 47.7768 81.2625 71 10.0000 10.0000 10.0000 1.94321 1.99226 2.08090 72 0.00000 5.00000 0.00000 1.13935 1.27867 1.04645 73 1.66667 1.66667 1.66667 1.12140 1.12771 1.13912 74 0.00000 0.00000 5.00000 1.07034 1.02813 1.37049 75 6.66667 6.66667 6.66667 1.52750 1.55493 1.60451 76 13.3333 13.3333 13.3333 2.50535 2.58363 2.72510 77 15.0000 15.0000 15.0000 2.84511 2.94106 3.11446 78 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 79 18.3333 18.3333 18.3333 3.64885 3.78659 4.03552 80 20.0000 20.0000 20.0000 4.11537 4.27737 4.57015 81 21.6667 21.6667 21.6667 4.62661 4.81519 5.15602 82 23.3333 23.3333 23.3333 5.18371 5.40126 5.79444 83 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 84 26.6667 26.6667 26.6667 6.43987 6.72274 7.23397 85 28.3333 28.3333 28.3333 7.14103 7.46036 8.03749 86 30.0000 30.0000 30.0000 7.89226 8.25066 8.89838 87 31.6667 31.6667 31.6667 8.69453 9.09465 9.81777 88 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 89 35.0000 35.0000 35.0000 10.4560 10.9477 11.8363 90 36.6667 36.6667 36.6667 11.4169 11.9586 12.9376 91 38.3333 38.3333 38.3333 12.4326 13.0271 14.1015 92 40.0000 40.0000 40.0000 13.5038 14.1540 15.3291 93 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 94 43.3333 43.3333 43.3333 15.8161 16.5865 17.9789 95 45.0000 45.0000 45.0000 17.0588 17.8938 19.4030 96 46.6667 46.6667 46.6667 18.3603 19.2630 20.8945 97 48.3333 48.3333 48.3333 19.7213 20.6948 22.4542 98 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 99 51.6667 51.6667 51.6667 22.6250 23.7495 25.7818 100 53.3333 53.3333 53.3333 24.1691 25.3739 27.5513 101 55.0000 55.0000 55.0000 25.7757 27.0641 29.3925 102 56.6667 56.6667 56.6667 27.4455 28.8207 31.3060 103 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 104 60.0000 60.0000 60.0000 30.9773 32.5361 35.3534 105 61.6667 61.6667 61.6667 32.8407 34.4964 37.4888 106 63.3333 63.3333 63.3333 34.7700 36.5260 39.6997 107 65.0000 65.0000 65.0000 36.7658 38.6256 41.9868 108 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 109 68.3333 68.3333 68.3333 40.9595 43.0373 46.7927 110 70.0000 70.0000 70.0000 43.1586 45.3509 49.3129 111 71.6667 71.6667 71.6667 45.4268 47.7370 51.9122 112 73.3333 73.3333 73.3333 47.7646 50.1964 54.5913 113 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 114 76.6667 76.6667 76.6667 52.6515 55.3374 60.1916 115 78.3333 78.3333 78.3333 55.2018 58.0203 63.1141 116 81.6667 81.6667 81.6667 60.5189 63.6138 69.2074 117 5.00000 0.00000 0.00000 1.16071 1.08286 1.00753 118 70.0000 30.0000 70.0000 29.8905 18.8184 44.8901 119 80.0000 40.0000 80.0000 41.1497 27.4348 60.5610 120 86.6667 86.6667 86.6667 69.0442 72.5825 78.9772 121 88.3333 88.3333 88.3333 72.0347 75.7285 82.4043 122 90.0000 90.0000 90.0000 75.1006 78.9538 85.9177 123 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 124 93.3333 93.3333 93.3333 81.4603 85.6443 93.2058 125 95.0000 95.0000 95.0000 84.7553 89.1105 96.9818 126 96.6667 96.6667 96.6667 88.1276 92.6582 100.846 127 20.0000 80.0000 20.0000 24.3219 44.6848 11.3057 128 20.0000 100.000 20.0000 38.3485 72.7341 15.9813 129 40.0000 20.0000 0.00000 7.59712 6.14100 1.64490 130 60.0000 20.0000 0.00000 15.1784 10.0499 2.00015 131 80.0000 20.0000 0.00000 26.8265 16.0557 2.54596 132 100.000 20.0000 0.00000 43.0023 24.3960 3.30393 133 100.000 40.0000 0.00000 46.5344 31.4593 4.48132 134 100.000 60.0000 0.00000 53.1084 44.6054 6.67267 135 60.0000 40.0000 0.00000 18.7105 17.1132 3.17754 136 80.0000 40.0000 0.00000 30.3586 23.1190 3.72335 137 90.0000 50.0000 10.0000 40.9075 32.8026 5.97602 138 30.0000 50.0000 10.0000 11.7476 17.7677 4.60964 139 40.0000 60.0000 0.00000 17.7033 26.3504 5.01364 140 50.0000 70.0000 10.0000 25.7796 37.2955 7.64003 141 20.0000 40.0000 0.00000 7.05590 11.1041 2.63143 142 20.0000 60.0000 0.00000 13.6299 24.2502 4.82277 143 20.0000 80.0000 0.00000 23.7303 44.4482 8.18961 144 40.0000 80.0000 0.00000 27.8037 46.5485 8.38048 145 60.0000 80.0000 0.00000 35.3850 50.4574 8.73572 146 80.0000 80.0000 0.00000 47.0330 56.4632 9.28153 147 20.0000 20.0000 0.00000 3.52375 4.04076 1.45403 148 20.0000 100.000 0.00000 37.7569 72.4974 12.8652 149 40.0000 100.000 0.00000 41.8302 74.5977 13.0560 150 60.0000 100.000 0.00000 49.4115 78.5066 13.4113 151 80.0000 100.000 0.00000 61.0596 84.5124 13.9571 152 100.000 100.000 0.00000 77.2354 92.8527 14.7151 153 30.0000 0.00000 0.00000 3.99036 2.54184 1.14012 154 30.0000 10.0000 10.0000 4.52434 3.32310 2.20185 155 60.0000 0.00000 20.0000 14.5979 7.94271 4.72557 156 80.0000 0.00000 20.0000 26.2460 13.9485 5.27138 157 100.000 0.00000 20.0000 42.4218 22.2888 6.02935 158 100.000 0.00000 40.0000 44.2047 23.0018 15.4200 159 40.0000 20.0000 20.0000 8.18874 6.37761 4.76102 160 60.0000 20.0000 20.0000 15.7700 10.2865 5.11627 161 80.0000 20.0000 20.0000 27.4181 16.2923 5.66208 162 80.0000 20.0000 60.0000 32.5192 18.3325 32.5304 163 0.00000 20.0000 0.00000 2.17208 3.34383 1.39070 164 0.00000 35.0000 0.00000 4.55757 8.11414 2.18587 165 40.0000 40.0000 20.0000 11.7209 13.4409 5.93842 166 60.0000 40.0000 20.0000 19.3022 17.3499 6.29366 167 80.0000 40.0000 20.0000 30.9502 23.3556 6.83947 168 80.0000 60.0000 80.0000 47.7237 40.5809 62.7523 169 20.0000 40.0000 20.0000 7.64752 11.3407 5.74754 170 20.0000 60.0000 20.0000 14.2215 24.4868 7.93889 171 40.0000 60.0000 20.0000 18.2949 26.5871 8.12976 172 60.0000 60.0000 20.0000 25.8762 30.4960 8.48501 173 80.0000 60.0000 20.0000 37.5242 36.5018 9.03081 174 100.000 80.0000 40.0000 65.5833 65.7531 22.5463 175 100.000 80.0000 60.0000 68.9016 67.0802 40.0240 176 100.000 100.000 60.0000 82.9282 95.1294 44.6995 177 40.0000 80.0000 20.0000 28.3953 46.7851 11.4966 178 60.0000 80.0000 20.0000 35.9766 50.6940 11.8518 179 80.0000 80.0000 20.0000 47.6246 56.6998 12.3976 180 100.000 80.0000 20.0000 63.8004 65.0401 13.1556 181 98.3333 98.3333 98.3333 91.5778 96.2879 104.800 182 100.000 100.000 100.000 95.1065 100.000 108.844 183 40.0000 100.000 20.0000 42.4219 74.8343 16.1722 184 60.0000 100.000 20.0000 50.0031 78.7432 16.5274 185 80.0000 100.000 20.0000 61.6512 84.7490 17.0732 186 100.000 100.000 20.0000 77.8270 93.0893 17.8312 187 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 188 0.00000 0.00000 35.0000 2.79572 1.71817 10.4582 189 60.0000 0.00000 40.0000 16.3808 8.65575 14.1162 190 80.0000 0.00000 40.0000 28.0289 14.6615 14.6620 191 90.0000 10.0000 50.0000 37.3302 19.8162 22.7723 192 90.0000 10.0000 70.0000 41.5111 21.4883 44.7935 193 90.0000 30.0000 70.0000 43.7493 25.9640 45.5395 194 100.000 40.0000 80.0000 57.3255 35.7751 61.3190 195 60.0000 20.0000 40.0000 17.5529 10.9996 14.5069 196 80.0000 20.0000 40.0000 29.2010 17.0054 15.0527 197 100.000 60.0000 60.0000 58.8012 46.8822 36.6571 198 100.000 60.0000 80.0000 63.8994 48.9212 63.5103 199 100.000 80.0000 80.0000 73.9999 69.1192 66.8771 200 100.000 100.000 80.0000 88.0264 97.1684 71.5527 201 0.00000 40.0000 20.0000 6.29585 10.6438 5.68421 202 10.0000 50.0000 30.0000 10.2963 16.8887 10.4392 203 0.00000 60.0000 40.0000 14.6527 24.5029 17.2662 204 20.0000 60.0000 40.0000 16.0044 25.1999 17.3295 205 40.0000 60.0000 40.0000 20.0778 27.3001 17.5204 206 60.0000 60.0000 40.0000 27.6590 31.2090 17.8756 207 70.0000 70.0000 50.0000 38.9777 43.6788 27.2917 208 0.00000 65.0000 0.00000 14.4560 27.9082 5.48536 209 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 210 20.0000 80.0000 40.0000 26.1048 45.3979 20.6964 211 40.0000 80.0000 40.0000 30.1782 47.4981 20.8872 212 60.0000 80.0000 40.0000 37.7595 51.4070 21.2425 213 60.0000 80.0000 60.0000 41.0777 52.7341 38.7202 214 10.0000 90.0000 30.0000 30.5966 57.4837 17.2060 215 0.00000 100.000 40.0000 38.7797 72.7502 25.3086 216 20.0000 100.000 40.0000 40.1314 73.4471 25.3719 217 40.0000 100.000 40.0000 44.2047 75.5473 25.5628 218 60.0000 100.000 40.0000 51.7860 79.4563 25.9180 219 80.0000 100.000 40.0000 63.4341 85.4620 26.4639 220 100.000 100.000 40.0000 79.6099 93.8023 27.2218 221 20.0000 0.00000 40.0000 4.72618 2.64658 13.5701 222 40.0000 0.00000 60.0000 12.1178 6.07392 31.2387 223 60.0000 0.00000 60.0000 19.6991 9.98285 31.5939 224 80.0000 0.00000 60.0000 31.3472 15.9886 32.1397 225 100.000 0.00000 60.0000 47.5230 24.3289 32.8977 226 40.0000 0.00000 40.0000 8.79954 4.74682 13.7610 227 40.0000 20.0000 40.0000 9.97162 7.09065 14.1517 228 40.0000 20.0000 60.0000 13.2899 8.41775 31.6294 229 50.0000 30.0000 90.0000 26.4043 16.3193 76.3922 230 0.00000 20.0000 40.0000 4.54659 4.29349 13.8975 231 10.0000 30.0000 50.0000 7.82743 7.92618 22.0310 232 0.00000 40.0000 60.0000 11.3970 12.6839 32.5526 233 20.0000 40.0000 60.0000 12.7487 13.3808 32.6159 234 40.0000 40.0000 60.0000 16.8221 15.4811 32.8068 235 60.0000 40.0000 60.0000 24.4033 19.3900 33.1620 236 80.0000 40.0000 60.0000 36.0514 25.3958 33.7078 237 90.0000 50.0000 70.0000 48.7344 35.9329 47.2013 238 0.00000 0.00000 40.0000 3.37450 1.94965 13.5068 239 0.00000 60.0000 60.0000 17.9710 25.8300 34.7439 240 40.0000 60.0000 60.0000 23.3960 28.6272 34.9981 241 50.0000 70.0000 70.0000 33.6065 40.4258 48.8653 242 20.0000 40.0000 40.0000 9.43041 12.0537 15.1382 243 20.0000 60.0000 60.0000 19.3227 26.5270 34.8073 244 20.0000 80.0000 60.0000 29.4231 46.7250 38.1741 245 20.0000 80.0000 80.0000 34.5214 48.7640 65.0272 246 10.0000 70.0000 30.0000 18.5792 33.4523 13.2002 247 0.00000 80.0000 40.0000 24.7531 44.7009 20.6330 248 10.0000 90.0000 50.0000 33.1129 58.4900 30.4596 249 0.00000 100.000 60.0000 42.0980 74.0773 42.7863 250 20.0000 100.000 60.0000 43.4497 74.7742 42.8496 251 40.0000 100.000 60.0000 47.5230 76.8744 43.0405 252 60.0000 100.000 60.0000 55.1043 80.7834 43.3958 253 80.0000 100.000 60.0000 66.7524 86.7891 43.9416 254 20.0000 0.00000 60.0000 8.04446 3.97368 31.0478 255 20.0000 0.00000 80.0000 13.1427 6.01267 57.9010 256 40.0000 0.00000 80.0000 17.2161 8.11291 58.0918 257 60.0000 0.00000 80.0000 24.7974 12.0218 58.4471 258 100.000 0.00000 80.0000 52.6212 26.3679 59.7509 259 100.000 0.00000 100.000 59.7013 29.1995 97.0422 260 20.0000 20.0000 60.0000 9.21654 6.31752 31.4385 261 20.0000 20.0000 80.0000 14.3148 8.35651 58.2917 262 40.0000 20.0000 80.0000 18.3882 10.4567 58.4825 263 60.0000 20.0000 80.0000 25.9695 14.3657 58.8378 264 80.0000 20.0000 80.0000 37.6175 20.3715 59.3836 265 80.0000 20.0000 100.000 44.6976 23.2030 96.6749 266 20.0000 20.0000 40.0000 5.89826 4.99041 13.9608 267 20.0000 40.0000 80.0000 17.8470 15.4198 59.4691 268 40.0000 40.0000 80.0000 21.9203 17.5201 59.6599 269 60.0000 40.0000 80.0000 29.5016 21.4290 60.0152 270 60.0000 40.0000 100.000 36.5817 24.2606 97.3065 271 10.0000 50.0000 70.0000 16.9935 19.5671 45.7139 272 0.00000 60.0000 80.0000 23.0693 27.8690 61.5971 273 20.0000 60.0000 80.0000 24.4210 28.5659 61.6604 274 40.0000 60.0000 80.0000 28.4943 30.6662 61.8513 275 60.0000 60.0000 80.0000 36.0756 34.5751 62.2065 276 60.0000 80.0000 80.0000 46.1760 54.7731 65.5734 277 0.00000 60.0000 20.0000 12.8698 23.7899 7.87555 278 0.00000 80.0000 20.0000 22.9703 43.9879 11.2424 279 40.0000 80.0000 60.0000 33.4965 48.8252 38.3650 280 40.0000 80.0000 80.0000 38.5947 50.8642 65.2181 281 0.00000 20.0000 20.0000 2.76370 3.58044 4.50681 282 10.0000 90.0000 70.0000 37.2938 60.1621 52.4808 283 0.00000 100.000 80.0000 47.1963 76.1163 69.6395 284 20.0000 100.000 80.0000 48.5479 76.8132 69.7028 285 40.0000 100.000 80.0000 52.6213 78.9134 69.8937 286 60.0000 100.000 80.0000 60.2026 82.8224 70.2489 287 80.0000 100.000 80.0000 71.8506 88.8281 70.7947 288 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 289 20.0000 0.00000 100.000 20.2228 8.84424 95.1923 290 40.0000 0.00000 100.000 24.2961 10.9445 95.3832 291 60.0000 0.00000 100.000 31.8774 14.8534 95.7384 292 80.0000 0.00000 100.000 43.5255 20.8592 96.2842 293 100.000 40.0000 100.000 64.4055 38.6066 98.6103 294 100.000 60.0000 100.000 70.9795 51.7528 100.802 295 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 296 40.0000 20.0000 100.000 25.4682 13.2883 95.7739 297 60.0000 20.0000 100.000 33.0495 17.1972 96.1291 298 60.0000 60.0000 100.000 43.1556 37.4067 99.4978 299 10.0000 30.0000 90.0000 18.0742 12.0242 76.0018 300 0.00000 40.0000 100.000 23.5753 17.5545 96.6970 301 0.00000 60.0000 100.000 30.1493 30.7006 98.8884 302 40.0000 60.0000 100.000 35.5744 33.4978 99.1426 303 60.0000 80.0000 100.000 53.2561 57.6047 102.865 304 80.0000 80.0000 100.000 64.9041 63.6105 103.410 305 100.000 80.0000 100.000 81.0799 71.9508 104.168 306 100.000 100.000 100.000 95.1065 100.000 108.844 307 30.0000 50.0000 70.0000 19.5746 20.8980 45.8349 308 30.0000 50.0000 90.0000 25.6405 23.3239 77.7845 309 10.0000 30.0000 70.0000 12.0083 9.59827 44.0522 310 0.00000 40.0000 80.0000 16.4953 14.7229 59.4057 311 10.0000 50.0000 90.0000 23.0593 21.9931 77.6636 312 10.0000 70.0000 90.0000 31.3423 38.5567 80.4246 313 0.00000 80.0000 100.000 40.2497 50.8986 102.255 314 10.0000 70.0000 50.0000 21.0955 34.4586 26.4537 315 0.00000 80.0000 60.0000 28.0714 46.0280 38.1107 316 0.00000 80.0000 80.0000 33.1697 48.0670 64.9639 317 10.0000 90.0000 90.0000 43.3597 62.5881 84.4304 318 0.00000 100.000 100.000 54.2763 78.9478 106.931 319 20.0000 100.000 100.000 55.6280 79.6448 106.994 320 40.0000 100.000 100.000 59.7014 81.7450 107.185 321 60.0000 100.000 100.000 67.2826 85.6539 107.540 322 5.00000 5.00000 5.00000 1.37040 1.38966 1.42447 323 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 324 35.0000 0.00000 0.00000 5.10268 3.11535 1.19224 325 65.0000 0.00000 0.00000 16.5178 9.00101 1.72714 326 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 327 100.000 20.0000 20.0000 43.5939 24.6326 6.42004 328 100.000 40.0000 20.0000 47.1260 31.6959 7.59744 329 50.0000 30.0000 10.0000 12.5115 10.7630 3.21730 330 70.0000 30.0000 10.0000 22.0636 15.6881 3.66490 331 90.0000 30.0000 10.0000 35.9223 22.8337 4.31429 332 100.000 60.0000 20.0000 53.7000 44.8421 9.78878 333 40.0000 40.0000 0.00000 11.1293 13.2043 2.82230 334 50.0000 50.0000 10.0000 17.4966 20.7319 4.87903 335 60.0000 60.0000 0.00000 25.2845 30.2594 5.36889 336 80.0000 60.0000 0.00000 36.9326 36.2652 5.91470 337 90.0000 70.0000 10.0000 49.1904 49.3662 8.73702 338 100.000 80.0000 0.00000 63.2088 64.8035 10.0395 339 70.0000 50.0000 10.0000 27.0487 25.6570 5.32662 340 70.0000 70.0000 10.0000 35.3317 42.2206 8.08763 341 30.0000 30.0000 10.0000 6.76252 7.79883 2.94792 342 30.0000 70.0000 10.0000 20.0306 34.3313 7.37065 343 30.0000 90.0000 10.0000 32.0480 58.3627 11.3765 344 50.0000 90.0000 10.0000 37.7970 61.3269 11.6459 345 70.0000 90.0000 10.0000 47.3491 66.2520 12.0935 346 90.0000 90.0000 10.0000 61.2078 73.3976 12.7428 347 90.0000 90.0000 70.0000 69.0347 76.5278 53.9681 348 80.0000 80.0000 80.0000 57.8241 60.7789 66.1192 349 80.0000 100.000 100.000 78.9307 91.6597 108.086 350 100.000 100.000 100.000 95.1065 100.000 108.844 351 40.0000 0.00000 20.0000 7.01666 4.03378 4.37032 352 50.0000 10.0000 30.0000 11.4031 6.73911 8.42170 353 70.0000 10.0000 30.0000 20.9552 11.6642 8.86930 354 70.0000 30.0000 30.0000 23.1933 16.1399 9.61537 355 90.0000 30.0000 30.0000 37.0521 23.2856 10.2648 356 100.000 40.0000 40.0000 48.9089 32.4090 16.9881 357 100.000 60.0000 40.0000 55.4829 45.5551 19.1794 358 50.0000 30.0000 30.0000 13.6412 11.2148 9.16777 359 70.0000 50.0000 30.0000 28.1785 26.1088 11.2771 360 90.0000 50.0000 30.0000 42.0372 33.2544 11.9265 361 90.0000 70.0000 30.0000 50.3202 49.8180 14.6875 362 50.0000 50.0000 30.0000 18.6264 21.1837 10.8295 363 50.0000 70.0000 30.0000 26.9093 37.7473 13.5905 364 70.0000 70.0000 30.0000 36.4614 42.6724 14.0381 365 80.0000 80.0000 40.0000 49.4075 57.4128 21.7883 366 80.0000 80.0000 60.0000 52.7258 58.7399 39.2660 367 30.0000 90.0000 30.0000 33.1777 58.8145 17.3269 368 50.0000 90.0000 30.0000 38.9267 61.7787 17.5963 369 70.0000 90.0000 30.0000 48.4788 66.7038 18.0439 370 90.0000 90.0000 30.0000 62.3375 73.8494 18.6933 371 90.0000 90.0000 50.0000 64.8538 74.8558 31.9469 372 20.0000 0.00000 0.00000 2.35167 1.69693 1.06334 373 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 374 90.0000 10.0000 30.0000 34.8139 18.8098 9.51870 375 100.000 20.0000 40.0000 45.3768 25.3457 15.8107 376 100.000 20.0000 60.0000 48.6950 26.6728 33.2884 377 50.0000 10.0000 50.0000 13.9193 7.74547 21.6753 378 70.0000 10.0000 50.0000 23.4715 12.6706 22.1229 379 70.0000 30.0000 50.0000 25.7096 17.1463 22.8689 380 90.0000 30.0000 50.0000 39.5684 24.2919 23.5183 381 100.000 40.0000 60.0000 52.2272 33.7361 34.4658 382 60.0000 40.0000 40.0000 21.0851 18.0629 15.6843 383 80.0000 60.0000 40.0000 39.3071 37.2148 18.4215 384 90.0000 70.0000 50.0000 52.8365 50.8244 27.9411 385 90.0000 70.0000 70.0000 57.0173 52.4965 49.9623 386 90.0000 70.0000 90.0000 63.0832 54.9224 81.9119 387 50.0000 70.0000 50.0000 29.4256 38.7537 26.8441 388 30.0000 50.0000 30.0000 12.8774 18.2195 10.5601 389 30.0000 70.0000 30.0000 21.1603 34.7831 13.3211 390 30.0000 70.0000 50.0000 23.6766 35.7895 26.5747 391 30.0000 90.0000 50.0000 35.6940 59.8209 30.5805 392 50.0000 90.0000 50.0000 41.4430 62.7850 30.8499 393 70.0000 90.0000 50.0000 50.9951 67.7101 31.2975 394 0.00000 0.00000 45.0000 4.04961 2.21965 17.0626 395 0.00000 0.00000 55.0000 5.70499 2.88170 25.7817 396 30.0000 10.0000 70.0000 12.3513 6.45337 43.4271 397 50.0000 10.0000 70.0000 18.1002 9.41757 43.6965 398 70.0000 10.0000 70.0000 27.6524 14.3427 44.1441 399 80.0000 0.00000 80.0000 36.4454 18.0276 58.9929 400 100.000 20.0000 80.0000 53.7933 28.7117 60.1416 401 100.000 20.0000 100.000 60.8734 31.5433 97.4329 402 60.0000 20.0000 60.0000 20.8712 12.3267 31.9846 403 30.0000 10.0000 30.0000 5.65408 3.77492 8.15232 404 30.0000 10.0000 50.0000 8.17037 4.78128 21.4059 405 30.0000 30.0000 50.0000 10.4086 9.25701 22.1519 406 30.0000 30.0000 70.0000 14.5894 10.9291 44.1732 407 30.0000 30.0000 90.0000 20.6553 13.3551 76.1228 408 50.0000 70.0000 90.0000 39.6724 42.8517 80.8149 409 50.0000 90.0000 90.0000 51.6898 66.8831 84.8207 410 30.0000 50.0000 50.0000 15.3937 19.2259 23.8137 411 30.0000 70.0000 70.0000 27.8575 37.4616 48.5959 412 30.0000 70.0000 90.0000 33.9234 39.8875 80.5455 413 30.0000 90.0000 90.0000 45.9408 63.9189 84.5513 414 10.0000 70.0000 70.0000 25.2764 36.1307 48.4749 415 30.0000 90.0000 70.0000 39.8749 61.4930 52.6017 416 50.0000 90.0000 70.0000 45.6239 64.4571 52.8711 417 70.0000 90.0000 70.0000 55.1760 69.3822 53.3187 418 70.0000 90.0000 90.0000 61.2419 71.8082 85.2683 419 20.0000 0.00000 20.0000 2.94329 1.93354 4.17945 420 30.0000 10.0000 90.0000 18.4171 8.87934 75.3767 421 50.0000 10.0000 90.0000 24.1661 11.8435 75.6461 422 70.0000 10.0000 90.0000 33.7182 16.7686 76.0937 423 90.0000 10.0000 90.0000 47.5770 23.9142 76.7431 424 90.0000 30.0000 90.0000 49.8151 28.3900 77.4892 425 50.0000 30.0000 50.0000 16.1575 12.2212 22.4213 426 50.0000 30.0000 70.0000 20.3384 13.8933 44.4425 427 70.0000 30.0000 90.0000 35.9564 21.2444 76.8398 428 80.0000 40.0000 100.000 48.2297 30.2663 97.8523 429 80.0000 60.0000 100.000 54.8037 43.4125 100.044 430 50.0000 50.0000 70.0000 25.3236 23.8622 46.1043 431 70.0000 50.0000 70.0000 34.8757 28.7873 46.5519 432 70.0000 50.0000 90.0000 40.9415 31.2132 78.5015 433 90.0000 50.0000 90.0000 54.8003 38.3588 79.1509 434 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 435 85.0000 85.0000 85.0000 66.1284 69.5150 75.6357 436 70.0000 50.0000 50.0000 30.6948 27.1152 24.5307 437 80.0000 60.0000 60.0000 42.6254 38.5419 35.8992 438 11.6667 11.6667 11.6667 2.20520 2.26787 2.38114 439 15.0000 0.00000 0.00000 1.80054 1.41276 1.03751 440 10.0000 0.00000 0.00000 1.40923 1.21100 1.01918 441 3.33333 3.33333 3.33333 1.24279 1.25542 1.27824 442 0.00000 100.000 20.0000 36.9968 72.0371 15.9180 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s25-g73-m7-b7-f0.ti1000644 000765 000000 00000112432 12237536424 021704 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "7" CREATED "Sat Oct 19 04:53:33 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "73" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "7" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "25" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 679 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 0.00000 16.6667 33.3333 3.46086 3.32388 9.82998 3 0.00000 16.6667 50.0000 5.66257 4.20442 21.4266 4 0.00000 16.6667 66.6667 9.02121 5.54766 39.1169 5 0.00000 50.0000 16.6667 9.00087 16.3233 5.75245 6 0.00000 66.6667 16.6667 15.6548 29.6293 7.97045 7 0.00000 83.3333 16.6667 24.8565 48.0302 11.0377 8 41.6667 75.0000 8.33333 25.5506 41.0987 8.16187 9 58.3333 91.6667 25.0000 43.1958 65.7803 16.0487 10 0.00000 8.33333 0.00000 1.27008 1.54008 1.09003 11 2.77778 2.77778 2.77778 1.20233 1.21285 1.23186 12 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 13 25.0000 8.33333 8.33333 3.48368 2.66565 1.90539 14 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 15 29.1667 0.00000 0.00000 3.82465 2.45640 1.13236 16 33.3333 0.00000 0.00000 4.70908 2.91242 1.17380 17 37.5000 0.00000 0.00000 5.73696 3.44239 1.22197 18 41.6667 0.00000 0.00000 6.91425 4.04941 1.27713 19 45.8333 0.00000 0.00000 8.24660 4.73637 1.33956 20 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 21 54.1667 0.00000 0.00000 11.3976 6.36102 1.48721 22 58.3333 0.00000 0.00000 13.2261 7.30384 1.57290 23 62.5000 0.00000 0.00000 15.2297 8.33690 1.66678 24 66.6667 0.00000 0.00000 17.4128 9.46250 1.76908 25 70.8333 0.00000 0.00000 19.7797 10.6829 1.87999 26 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 27 79.1667 0.00000 0.00000 25.0816 13.4165 2.12842 28 83.3333 0.00000 0.00000 28.0245 14.9339 2.26632 29 87.5000 0.00000 0.00000 31.1672 16.5543 2.41358 30 91.6667 0.00000 0.00000 34.5133 18.2796 2.57037 31 95.8333 0.00000 0.00000 38.0664 20.1116 2.73687 32 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 33 100.000 66.6667 50.0000 59.8874 52.0422 27.8048 34 100.000 83.3333 50.0000 69.0892 70.4431 30.8720 35 0.00000 12.5000 0.00000 1.50806 2.01598 1.16935 36 0.00000 16.6667 0.00000 1.83742 2.67460 1.27914 37 0.00000 20.8333 0.00000 2.26612 3.53189 1.42204 38 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 39 0.00000 29.1667 0.00000 3.44935 5.89801 1.81646 40 0.00000 33.3333 0.00000 4.21627 7.43164 2.07210 41 0.00000 37.5000 0.00000 5.10758 9.21400 2.36920 42 0.00000 41.6667 0.00000 6.12844 11.2555 2.70950 43 0.00000 45.8333 0.00000 7.28377 13.5658 3.09461 44 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 45 0.00000 54.1667 0.00000 10.0161 19.0296 4.00538 46 0.00000 58.3333 0.00000 11.6017 22.2004 4.53393 47 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 48 0.00000 66.6667 0.00000 15.2321 29.4602 5.74408 49 0.00000 70.8333 0.00000 17.2845 33.5645 6.42822 50 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 51 0.00000 79.1667 0.00000 21.8820 42.7581 7.96071 52 0.00000 83.3333 0.00000 24.4338 47.8611 8.81135 53 0.00000 87.5000 0.00000 27.1590 53.3106 9.71972 54 0.00000 91.6667 0.00000 30.0605 59.1128 10.6869 55 0.00000 95.8333 0.00000 33.1416 65.2741 11.7139 56 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 57 83.3333 100.000 16.6667 63.8524 85.9035 16.2945 58 9.72222 9.72222 9.72222 1.90315 1.95012 2.03499 59 0.00000 0.00000 12.5000 1.25645 1.10256 2.35074 60 0.00000 0.00000 16.6667 1.42269 1.16905 3.22637 61 0.00000 0.00000 20.8333 1.63909 1.25559 4.36613 62 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 63 0.00000 0.00000 29.1667 2.23633 1.49445 7.51188 64 0.00000 0.00000 33.3333 2.62344 1.64927 9.55084 65 0.00000 0.00000 37.5000 3.07334 1.82920 11.9205 66 0.00000 0.00000 41.6667 3.58863 2.03529 14.6346 67 0.00000 0.00000 45.8333 4.17179 2.26852 17.7061 68 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 69 0.00000 0.00000 54.1667 5.55095 2.82009 24.9703 70 0.00000 0.00000 58.3333 6.35130 3.14018 29.1859 71 0.00000 0.00000 62.5000 7.22826 3.49091 33.8049 72 0.00000 0.00000 66.6667 8.18379 3.87306 38.8378 73 0.00000 0.00000 70.8333 9.21977 4.28739 44.2944 74 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 75 0.00000 0.00000 79.1667 11.5404 5.21548 56.5172 76 0.00000 0.00000 83.3333 12.8285 5.73063 63.3017 77 0.00000 0.00000 87.5000 14.2040 6.28076 70.5467 78 0.00000 0.00000 91.6667 15.6685 6.86649 78.2607 79 0.00000 0.00000 95.8333 17.2237 7.48847 86.4521 80 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 81 33.3333 66.6667 100.000 36.8123 38.5200 100.047 82 0.00000 0.00000 8.33333 1.13632 1.05452 1.71803 83 0.00000 4.16667 0.00000 1.11427 1.22850 1.03809 84 0.00000 0.00000 4.16667 1.05768 1.02307 1.30380 85 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 86 1.38889 1.38889 1.38889 1.10116 1.10642 1.11593 87 4.16667 4.16667 4.16667 1.30372 1.31952 1.34806 88 5.55556 5.55556 5.55556 1.41919 1.44098 1.48038 89 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 90 13.8889 13.8889 13.8889 2.61414 2.69807 2.84977 91 15.2778 15.2778 15.2778 2.90569 3.00478 3.18388 92 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 93 18.0556 18.0556 18.0556 3.57536 3.70928 3.95131 94 19.4444 19.4444 19.4444 3.95495 4.10861 4.38632 95 20.8333 20.8333 20.8333 4.36533 4.54033 4.85660 96 22.2222 22.2222 22.2222 4.80716 5.00513 5.36292 97 23.6111 23.6111 23.6111 5.28109 5.50371 5.90604 98 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 99 26.3889 26.3889 26.3889 6.32780 6.60485 7.10555 100 27.7778 27.7778 27.7778 6.90179 7.20869 7.76333 101 29.1667 29.1667 29.1667 7.51032 7.84886 8.46069 102 30.5556 30.5556 30.5556 8.15397 8.52597 9.19829 103 31.9444 31.9444 31.9444 8.83328 9.24060 9.97677 104 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 105 34.7222 34.7222 34.7222 10.3011 10.7847 11.6588 106 36.1111 36.1111 36.1111 11.0906 11.6153 12.5636 107 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 108 38.8889 38.8889 38.8889 12.7834 13.3962 14.5036 109 40.2778 40.2778 40.2778 13.6878 14.3475 15.5399 110 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 111 43.0556 43.0556 43.0556 15.6146 16.3746 17.7480 112 44.4444 44.4444 44.4444 16.6381 17.4512 18.9209 113 45.8333 45.8333 45.8333 17.7021 18.5707 20.1403 114 47.2222 47.2222 47.2222 18.8073 19.7333 21.4068 115 48.6111 48.6111 48.6111 19.9540 20.9396 22.7209 116 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 117 51.3889 51.3889 51.3889 22.3737 23.4851 25.4938 118 52.7778 52.7778 52.7778 23.6475 24.8252 26.9536 119 54.1667 54.1667 54.1667 24.9646 26.2107 28.4629 120 55.5556 55.5556 55.5556 26.3253 27.6422 30.0222 121 56.9444 56.9444 56.9444 27.7300 29.1199 31.6320 122 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 123 59.7222 59.7222 59.7222 30.6731 32.2161 35.0048 124 61.1111 61.1111 61.1111 32.2123 33.8353 36.7686 125 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 126 63.8889 63.8889 63.8889 35.4278 37.2181 40.4535 127 65.2778 65.2778 65.2778 37.1049 38.9824 42.3755 128 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 129 68.0556 68.0556 68.0556 40.5996 42.6588 46.3803 130 69.4444 69.4444 69.4444 42.4179 44.5716 48.4641 131 70.8333 70.8333 70.8333 44.2840 46.5348 50.6026 132 72.2222 72.2222 72.2222 46.1983 48.5486 52.7963 133 73.6111 73.6111 73.6111 48.1611 50.6134 55.0456 134 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 135 76.3889 76.3889 76.3889 52.2335 54.8976 59.7124 136 77.7778 77.7778 77.7778 54.3438 57.1176 62.1308 137 79.1667 79.1667 79.1667 56.5039 59.3901 64.6063 138 80.5556 80.5556 80.5556 58.7142 61.7154 67.1393 139 81.9444 81.9444 81.9444 60.9751 64.0938 69.7302 140 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 141 84.7222 84.7222 84.7222 65.6496 69.0114 75.0871 142 86.1111 86.1111 86.1111 68.0640 71.5513 77.8539 143 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 144 88.8889 88.8889 88.8889 73.0483 76.7948 83.5658 145 90.2778 90.2778 90.2778 75.6189 79.4991 86.5117 146 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 147 93.0556 93.0556 93.0556 80.9187 85.0744 92.5851 148 94.4444 94.4444 94.4444 83.6484 87.9461 95.7133 149 95.8333 95.8333 95.8333 86.4317 90.8742 98.9029 150 97.2222 97.2222 97.2222 89.2690 93.8590 102.154 151 16.6667 0.00000 0.00000 1.96573 1.49793 1.04525 152 12.5000 0.00000 0.00000 1.58591 1.30210 1.02745 153 33.3333 16.6667 0.00000 5.54650 4.58702 1.45294 154 50.0000 16.6667 0.00000 10.5768 7.18063 1.68865 155 66.6667 16.6667 0.00000 18.2502 11.1371 2.04822 156 83.3333 16.6667 0.00000 28.8619 16.6085 2.54546 157 100.000 16.6667 0.00000 42.6676 23.7268 3.19237 158 100.000 66.6667 33.3333 57.6857 51.1617 16.2081 159 100.000 83.3333 33.3333 66.8875 69.5626 19.2754 160 50.0000 33.3333 0.00000 12.9556 11.9377 2.48161 161 66.6667 33.3333 0.00000 20.6291 15.8941 2.84118 162 83.3333 33.3333 0.00000 31.2408 21.3656 3.33842 163 100.000 33.3333 0.00000 45.0464 28.4838 3.98533 164 33.3333 33.3333 0.00000 7.92535 9.34406 2.24590 165 33.3333 50.0000 0.00000 12.2873 18.0666 3.69988 166 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 167 66.6667 50.0000 0.00000 24.9910 24.6167 4.29515 168 83.3333 50.0000 0.00000 35.6027 30.0881 4.79240 169 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 170 100.000 100.000 16.6667 77.6581 93.0217 16.9414 171 33.3333 66.6667 0.00000 18.9412 31.3726 5.91788 172 50.0000 66.6667 0.00000 23.9714 33.9663 6.15359 173 66.6667 66.6667 0.00000 31.6449 37.9227 6.51315 174 83.3333 66.6667 0.00000 42.2566 43.3942 7.01040 175 100.000 66.6667 0.00000 56.0623 50.5124 7.65731 176 100.000 83.3333 0.00000 65.2640 68.9133 10.7246 177 50.0000 83.3333 0.00000 33.1732 52.3672 9.22086 178 66.6667 83.3333 0.00000 40.8467 56.3236 9.58042 179 4.16667 0.00000 0.00000 1.13178 1.06794 1.00617 180 6.94444 6.94444 6.94444 1.55687 1.58583 1.63816 181 16.6667 83.3333 0.00000 25.3996 48.3591 8.85660 182 16.6667 100.000 0.00000 37.3709 72.2985 12.8471 183 33.3333 100.000 0.00000 40.1143 73.7129 12.9756 184 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 185 66.6667 100.000 0.00000 52.8180 80.2630 13.5709 186 83.3333 100.000 0.00000 63.4297 85.7344 14.0682 187 100.000 100.000 0.00000 77.2354 92.8527 14.7151 188 100.000 100.000 50.0000 81.0605 94.3825 34.8625 189 98.6111 98.6111 98.6111 92.1605 96.9008 105.468 190 20.8333 0.00000 0.00000 2.46012 1.75284 1.06842 191 66.6667 0.00000 16.6667 17.8355 9.63156 3.99545 192 83.3333 0.00000 16.6667 28.4472 15.1030 4.49270 193 100.000 0.00000 16.6667 42.2529 22.2212 5.13961 194 100.000 33.3333 50.0000 48.8716 30.0136 24.1328 195 33.3333 16.6667 16.6667 5.96919 4.75607 3.67932 196 50.0000 16.6667 16.6667 10.9994 7.34968 3.91503 197 66.6667 16.6667 16.6667 18.6729 11.3062 4.27459 198 83.3333 16.6667 16.6667 29.2846 16.7776 4.77184 199 100.000 16.6667 16.6667 43.0903 23.8958 5.41875 200 8.33333 0.00000 0.00000 1.31146 1.16059 1.01459 201 11.1111 11.1111 11.1111 2.11371 2.17162 2.27628 202 0.00000 33.3333 16.6667 4.63896 7.60069 4.29847 203 50.0000 33.3333 16.6667 13.3783 12.1067 4.70798 204 66.6667 33.3333 16.6667 21.0518 16.0632 5.06755 205 83.3333 33.3333 16.6667 31.6635 21.5346 5.56479 206 100.000 33.3333 16.6667 45.4691 28.6529 6.21170 207 100.000 83.3333 16.6667 65.6867 69.0824 12.9510 208 33.3333 33.3333 16.6667 8.34805 9.51311 4.47227 209 33.3333 50.0000 16.6667 12.7099 18.2357 5.92625 210 50.0000 50.0000 16.6667 17.7402 20.8293 6.16196 211 66.6667 50.0000 16.6667 25.4137 24.7858 6.52153 212 83.3333 50.0000 16.6667 36.0254 30.2572 7.01877 213 100.000 50.0000 16.6667 49.8310 37.3754 7.66568 214 16.6667 50.0000 16.6667 9.96660 16.8212 5.79771 215 16.6667 66.6667 16.6667 16.6205 30.1272 8.01570 216 33.3333 66.6667 16.6667 19.3639 31.5417 8.14425 217 50.0000 66.6667 16.6667 24.3941 34.1353 8.37996 218 66.6667 66.6667 16.6667 32.0676 38.0918 8.73953 219 83.3333 66.6667 16.6667 42.6793 43.5632 9.23677 220 100.000 66.6667 16.6667 56.4850 50.6815 9.88368 221 16.6667 33.3333 16.6667 5.60470 8.09863 4.34373 222 16.6667 83.3333 16.6667 25.8223 48.5281 11.0830 223 33.3333 83.3333 16.6667 28.5656 49.9426 11.2115 224 50.0000 83.3333 16.6667 33.5959 52.5362 11.4472 225 66.6667 83.3333 16.6667 41.2694 56.4927 11.8068 226 83.3333 83.3333 16.6667 51.8810 61.9641 12.3040 227 0.00000 62.5000 0.00000 13.3391 25.6747 5.11306 228 0.00000 100.000 16.6667 36.8279 71.9696 15.0282 229 16.6667 100.000 16.6667 37.7936 72.4675 15.0735 230 33.3333 100.000 16.6667 40.5370 73.8820 15.2020 231 50.0000 100.000 16.6667 45.5672 76.4756 15.4377 232 66.6667 100.000 16.6667 53.2407 80.4321 15.7973 233 83.3333 100.000 33.3333 65.0531 86.3837 22.6190 234 100.000 100.000 33.3333 78.8588 93.5020 23.2659 235 16.6667 0.00000 16.6667 2.38843 1.66699 3.27163 236 33.3333 0.00000 16.6667 5.13178 3.08147 3.40018 237 50.0000 0.00000 16.6667 10.1620 5.67508 3.63588 238 66.6667 0.00000 33.3333 19.0363 10.1118 10.3199 239 83.3333 0.00000 33.3333 29.6479 15.5832 10.8172 240 100.000 0.00000 33.3333 43.4536 22.7014 11.4641 241 100.000 0.00000 66.6667 49.0140 24.9252 40.7510 242 0.00000 16.6667 16.6667 2.26011 2.84365 3.50552 243 33.3333 16.6667 33.3333 7.16994 5.23629 10.0038 244 50.0000 16.6667 33.3333 12.2002 7.82991 10.2395 245 66.6667 16.6667 33.3333 19.8737 11.7864 10.5991 246 83.3333 16.6667 33.3333 30.4854 17.2578 11.0963 247 100.000 16.6667 33.3333 44.2910 24.3760 11.7432 248 100.000 16.6667 50.0000 46.4927 25.2566 23.3398 249 50.0000 0.00000 33.3333 11.3628 6.15530 9.96035 250 50.0000 33.3333 33.3333 14.5790 12.5869 11.0324 251 66.6667 33.3333 33.3333 22.2525 16.5434 11.3920 252 83.3333 33.3333 33.3333 32.8642 22.0148 11.8893 253 100.000 33.3333 33.3333 46.6699 29.1331 12.5362 254 100.000 50.0000 33.3333 51.0318 37.8557 13.9901 255 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 256 33.3333 50.0000 33.3333 13.9107 18.7159 12.2507 257 50.0000 50.0000 33.3333 18.9409 21.3095 12.4864 258 66.6667 50.0000 33.3333 26.6144 25.2660 12.8460 259 83.3333 50.0000 33.3333 37.2261 30.7374 13.3432 260 16.6667 33.3333 33.3333 6.80544 8.57885 10.6682 261 16.6667 50.0000 33.3333 11.1673 17.3014 12.1222 262 16.6667 66.6667 33.3333 17.8213 30.6074 14.3402 263 33.3333 66.6667 33.3333 20.5646 32.0219 14.4687 264 50.0000 66.6667 33.3333 25.5949 34.6155 14.7044 265 66.6667 66.6667 33.3333 33.2684 38.5720 15.0640 266 83.3333 66.6667 33.3333 43.8800 44.0434 15.5612 267 16.6667 50.0000 0.00000 9.54390 16.6522 3.57133 268 16.6667 66.6667 0.00000 16.1978 29.9582 5.78933 269 16.6667 83.3333 33.3333 27.0230 49.0083 17.4074 270 33.3333 83.3333 33.3333 29.7664 50.4228 17.5360 271 50.0000 83.3333 33.3333 34.7966 53.0164 17.7717 272 66.6667 83.3333 33.3333 42.4701 56.9729 18.1313 273 66.6667 100.000 33.3333 54.4415 80.9123 22.1217 274 0.00000 83.3333 33.3333 26.0573 48.5104 17.3622 275 0.00000 100.000 33.3333 38.0287 72.4498 21.3527 276 16.6667 100.000 33.3333 38.9944 72.9477 21.3979 277 33.3333 100.000 33.3333 41.7377 74.3622 21.5265 278 50.0000 100.000 33.3333 46.7680 76.9558 21.7622 279 100.000 100.000 100.000 95.1065 100.000 108.844 280 33.3333 83.3333 0.00000 28.1429 49.7736 8.98515 281 83.3333 83.3333 0.00000 51.4583 61.7951 10.0777 282 83.3333 83.3333 33.3333 53.0818 62.4443 18.6285 283 16.6667 0.00000 33.3333 3.58917 2.14721 9.59609 284 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 285 66.6667 0.00000 50.0000 21.2380 10.9923 21.9165 286 83.3333 0.00000 50.0000 31.8496 16.4637 22.4138 287 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 288 33.3333 0.00000 33.3333 6.33252 3.56169 9.72464 289 33.3333 0.00000 50.0000 8.53423 4.44223 21.3213 290 33.3333 16.6667 50.0000 9.37165 6.11684 21.6004 291 50.0000 16.6667 50.0000 14.4019 8.71045 21.8361 292 66.6667 16.6667 50.0000 22.0754 12.6669 22.1957 293 83.3333 16.6667 50.0000 32.6871 18.1383 22.6929 294 83.3333 83.3333 50.0000 55.2835 63.3249 30.2251 295 16.6667 16.6667 0.00000 2.80315 3.17254 1.32439 296 16.6667 33.3333 0.00000 5.18200 7.92957 2.11735 297 33.3333 33.3333 50.0000 11.7505 10.8739 22.3934 298 50.0000 33.3333 50.0000 16.7808 13.4675 22.6291 299 66.6667 33.3333 50.0000 24.4542 17.4240 22.9886 300 83.3333 33.3333 50.0000 35.0659 22.8954 23.4859 301 0.00000 33.3333 33.3333 5.83971 8.08091 10.6229 302 0.00000 33.3333 50.0000 8.04142 8.96146 22.2196 303 16.6667 33.3333 50.0000 9.00715 9.45939 22.2648 304 33.3333 50.0000 50.0000 16.1124 19.5965 23.8473 305 66.6667 50.0000 50.0000 28.8161 26.1465 24.4426 306 83.3333 50.0000 50.0000 39.4278 31.6180 24.9399 307 83.3333 66.6667 50.0000 46.0818 44.9240 27.1579 308 16.6667 50.0000 50.0000 13.3691 18.1820 23.7188 309 16.6667 66.6667 50.0000 20.0230 31.4880 25.9368 310 33.3333 66.6667 50.0000 22.7663 32.9025 26.0653 311 50.0000 66.6667 50.0000 27.7966 35.4961 26.3011 312 66.6667 66.6667 50.0000 35.4701 39.4526 26.6606 313 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 314 0.00000 66.6667 50.0000 19.0573 30.9901 25.8915 315 0.00000 83.3333 50.0000 28.2590 49.3910 28.9588 316 16.6667 83.3333 50.0000 29.2247 49.8889 29.0041 317 33.3333 83.3333 50.0000 31.9681 51.3034 29.1326 318 50.0000 83.3333 50.0000 36.9983 53.8970 29.3683 319 66.6667 83.3333 50.0000 44.6718 57.8535 29.7279 320 0.00000 50.0000 33.3333 10.2016 16.8035 12.0769 321 0.00000 66.6667 33.3333 16.8555 30.1095 14.2949 322 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 323 16.6667 100.000 50.0000 41.1961 73.8283 32.9946 324 33.3333 100.000 50.0000 43.9394 75.2428 33.1231 325 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 326 66.6667 100.000 50.0000 56.6432 81.7928 33.7184 327 83.3333 100.000 50.0000 67.2549 87.2643 34.2156 328 16.6667 0.00000 50.0000 5.79088 3.02775 21.1927 329 16.6667 0.00000 66.6667 9.14952 4.37100 38.8830 330 33.3333 0.00000 66.6667 11.8929 5.78548 39.0116 331 50.0000 0.00000 66.6667 16.9231 8.37909 39.2473 332 66.6667 0.00000 66.6667 24.5966 12.3356 39.6068 333 83.3333 0.00000 66.6667 35.2083 17.8070 40.1041 334 16.6667 16.6667 33.3333 4.42659 3.82181 9.87523 335 16.6667 16.6667 50.0000 6.62830 4.70235 21.4719 336 16.6667 16.6667 66.6667 9.98694 6.04560 39.1621 337 33.3333 16.6667 66.6667 12.7303 7.46008 39.2907 338 50.0000 16.6667 66.6667 17.7605 10.0537 39.5264 339 66.6667 16.6667 66.6667 25.4340 14.0102 39.8860 340 83.3333 16.6667 66.6667 36.0457 19.4816 40.3832 341 83.3333 33.3333 66.6667 38.4246 24.2386 41.1762 342 83.3333 33.3333 83.3333 43.0692 26.0962 65.6401 343 83.3333 66.6667 100.000 60.1277 50.5415 101.139 344 33.3333 33.3333 66.6667 15.1091 12.2171 40.0837 345 50.0000 33.3333 66.6667 20.1394 14.8107 40.3194 346 66.6667 33.3333 66.6667 27.8129 18.7672 40.6789 347 66.6667 33.3333 100.000 38.5002 23.0415 96.9701 348 8.33333 41.6667 58.3333 11.7912 13.5562 30.9100 349 0.00000 50.0000 66.6667 15.7620 19.0273 41.3638 350 16.6667 50.0000 66.6667 16.7277 19.5252 41.4091 351 33.3333 50.0000 66.6667 19.4710 20.9397 41.5376 352 50.0000 50.0000 66.6667 24.5013 23.5333 41.7733 353 66.6667 50.0000 66.6667 32.1748 27.4898 42.1329 354 8.33333 41.6667 8.33333 6.57623 11.4706 3.44212 355 8.33333 58.3333 58.3333 17.2645 24.5012 32.7344 356 0.00000 66.6667 66.6667 22.4159 32.3333 43.5818 357 16.6667 66.6667 66.6667 23.3816 32.8312 43.6271 358 33.3333 66.6667 66.6667 26.1250 34.2457 43.7556 359 50.0000 66.6667 66.6667 31.1552 36.8393 43.9913 360 58.3333 75.0000 75.0000 41.0642 48.0333 56.9240 361 8.33333 41.6667 41.6667 9.02853 12.4513 16.3587 362 8.33333 58.3333 41.6667 14.5018 23.3963 18.1831 363 16.6667 83.3333 66.6667 32.5834 51.2321 46.6943 364 33.3333 83.3333 66.6667 35.3267 52.6466 46.8229 365 50.0000 83.3333 66.6667 40.3570 55.2402 47.0586 366 50.0000 83.3333 83.3333 45.0016 57.0978 71.5225 367 8.33333 91.6667 25.0000 31.2812 59.6371 15.4904 368 8.33333 91.6667 58.3333 35.7232 61.4136 38.8874 369 0.00000 100.000 66.6667 43.5890 74.6736 50.6396 370 16.6667 100.000 66.6667 44.5547 75.1715 50.6848 371 33.3333 100.000 66.6667 47.2981 76.5860 50.8134 372 50.0000 100.000 66.6667 52.3283 79.1796 51.0491 373 66.6667 100.000 66.6667 60.0018 83.1361 51.4087 374 83.3333 100.000 66.6667 70.6135 88.6075 51.9059 375 100.000 100.000 66.6667 84.4192 95.7257 52.5528 376 25.0000 8.33333 58.3333 8.69866 4.75131 29.3732 377 33.3333 0.00000 83.3333 16.5375 7.64305 63.4755 378 50.0000 0.00000 83.3333 21.5678 10.2367 63.7112 379 66.6667 0.00000 83.3333 29.2413 14.1931 64.0707 380 83.3333 0.00000 83.3333 39.8529 19.6646 64.5680 381 91.6667 8.33333 91.6667 49.4519 24.6861 79.9211 382 0.00000 16.6667 83.3333 13.6659 7.40523 63.5808 383 16.6667 16.6667 83.3333 14.6316 7.90317 63.6261 384 33.3333 16.6667 83.3333 17.3750 9.31765 63.7546 385 50.0000 16.6667 83.3333 22.4052 11.9113 63.9903 386 66.6667 16.6667 83.3333 30.0787 15.8677 64.3499 387 83.3333 16.6667 83.3333 40.6904 21.3392 64.8471 388 83.3333 83.3333 100.000 69.3294 68.9424 104.207 389 16.6667 33.3333 66.6667 12.3658 10.8026 39.9551 390 16.6667 33.3333 83.3333 17.0105 12.6602 64.4190 391 33.3333 33.3333 83.3333 19.7538 14.0747 64.5476 392 50.0000 33.3333 83.3333 24.7841 16.6683 64.7833 393 66.6667 33.3333 83.3333 32.4575 20.6248 65.1428 394 75.0000 41.6667 91.6667 42.1316 28.1222 80.9699 395 8.33333 25.0000 58.3333 8.46404 6.90283 29.8009 396 8.33333 25.0000 75.0000 12.4508 8.49727 50.7994 397 16.6667 50.0000 83.3333 21.3724 21.3828 65.8730 398 33.3333 50.0000 83.3333 24.1157 22.7973 66.0015 399 50.0000 50.0000 83.3333 29.1460 25.3909 66.2373 400 66.6667 50.0000 83.3333 36.8194 29.3474 66.5968 401 66.6667 66.6667 100.000 49.5160 45.0701 100.642 402 8.33333 58.3333 75.0000 21.2512 26.0956 53.7329 403 0.00000 66.6667 83.3333 27.0606 34.1909 68.0457 404 16.6667 66.6667 83.3333 28.0263 34.6888 68.0910 405 33.3333 66.6667 83.3333 30.7696 36.1033 68.2195 406 50.0000 66.6667 83.3333 35.7999 38.6969 68.4553 407 66.6667 66.6667 83.3333 43.4734 42.6534 68.8148 408 66.6667 83.3333 83.3333 52.6751 61.0543 71.8821 409 8.33333 75.0000 75.0000 29.1495 41.8900 56.3657 410 0.00000 83.3333 83.3333 36.2623 52.5918 71.1130 411 16.6667 83.3333 83.3333 37.2280 53.0897 71.1583 412 33.3333 83.3333 83.3333 39.9714 54.5042 71.2868 413 8.33333 75.0000 58.3333 25.1627 40.2956 35.3672 414 0.00000 83.3333 66.6667 31.6176 50.7342 46.6491 415 8.33333 91.6667 75.0000 39.7100 63.0080 59.8859 416 0.00000 100.000 83.3333 48.2337 76.5312 75.1035 417 16.6667 100.000 83.3333 49.1994 77.0291 75.1488 418 33.3333 100.000 83.3333 51.9427 78.4436 75.2773 419 50.0000 100.000 83.3333 56.9730 81.0372 75.5130 420 66.6667 100.000 83.3333 64.6465 84.9937 75.8726 421 100.000 100.000 83.3333 89.0638 97.5833 77.0167 422 16.6667 0.00000 83.3333 13.7942 6.22857 63.3469 423 16.6667 0.00000 100.000 19.8368 8.64525 95.1742 424 33.3333 0.00000 100.000 22.5802 10.0597 95.3028 425 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 426 66.6667 0.00000 100.000 35.2839 16.6098 95.8980 427 83.3333 0.00000 100.000 45.8956 22.0812 96.3953 428 100.000 0.00000 100.000 59.7013 29.1995 97.0422 429 100.000 83.3333 100.000 83.1351 76.0606 104.854 430 16.6667 16.6667 100.000 20.6743 10.3198 95.4534 431 33.3333 16.6667 100.000 23.4176 11.7343 95.5819 432 50.0000 16.6667 100.000 28.4479 14.3279 95.8176 433 66.6667 16.6667 100.000 36.1213 18.2844 96.1772 434 66.6667 83.3333 100.000 58.7178 63.4710 103.709 435 0.00000 33.3333 83.3333 16.0447 12.1623 64.3738 436 0.00000 33.3333 100.000 22.0874 14.5790 96.2011 437 16.6667 33.3333 100.000 23.0531 15.0769 96.2463 438 33.3333 33.3333 100.000 25.7965 16.4914 96.3749 439 50.0000 33.3333 100.000 30.8267 19.0850 96.6106 440 0.00000 33.3333 66.6667 11.4001 10.3047 39.9098 441 8.33333 41.6667 75.0000 15.7779 15.1507 51.9085 442 8.33333 41.6667 91.6667 21.1084 17.2825 79.9848 443 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 444 16.6667 50.0000 100.000 27.4150 23.7995 97.7003 445 33.3333 50.0000 100.000 30.1584 25.2140 97.8288 446 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 447 50.0000 66.6667 100.000 41.8426 41.1136 100.283 448 0.00000 50.0000 83.3333 20.4066 20.8849 65.8277 449 8.33333 58.3333 91.6667 26.5817 28.2275 81.8093 450 0.00000 66.6667 100.000 33.1032 36.6075 99.8730 451 16.6667 100.000 100.000 55.2420 79.4458 106.976 452 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 453 83.3333 16.6667 100.000 46.7330 23.7558 96.6744 454 83.3333 33.3333 100.000 49.1119 28.5129 97.4674 455 83.3333 50.0000 100.000 53.4738 37.2355 98.9214 456 0.00000 16.6667 100.000 19.7085 9.82192 95.4081 457 16.6667 66.6667 100.000 34.0689 37.1055 99.9183 458 16.6667 83.3333 100.000 43.2707 55.5064 102.986 459 33.3333 83.3333 100.000 46.0140 56.9209 103.114 460 50.0000 83.3333 100.000 51.0443 59.5145 103.350 461 8.33333 25.0000 41.6667 5.70137 5.79793 15.2496 462 8.33333 25.0000 91.6667 17.7813 10.6291 78.8758 463 8.33333 75.0000 91.6667 34.4800 44.0219 84.4421 464 0.00000 83.3333 100.000 42.3050 55.0085 102.940 465 0.00000 100.000 100.000 54.2763 78.9478 106.931 466 33.3333 100.000 100.000 57.9854 80.8602 107.105 467 50.0000 100.000 100.000 63.0157 83.4539 107.340 468 66.6667 100.000 100.000 70.6891 87.4103 107.700 469 83.3333 100.000 100.000 81.3008 92.8817 108.197 470 100.000 100.000 100.000 95.1065 100.000 108.844 471 41.6667 8.33333 8.33333 7.32065 4.64400 2.08519 472 58.3333 8.33333 8.33333 13.6325 7.89843 2.38095 473 75.0000 8.33333 8.33333 22.7410 12.5948 2.80776 474 91.6667 8.33333 8.33333 34.9197 18.8741 3.37843 475 91.6667 41.6667 25.0000 40.5509 28.8986 9.06878 476 91.6667 58.3333 25.0000 46.0242 39.8436 10.8932 477 41.6667 25.0000 8.33333 8.85185 7.70598 2.59559 478 58.3333 25.0000 8.33333 15.1637 10.9604 2.89136 479 75.0000 25.0000 8.33333 24.2722 15.6568 3.31816 480 91.6667 25.0000 8.33333 36.4509 21.9361 3.88883 481 91.6667 75.0000 25.0000 53.9225 55.6380 13.5260 482 91.6667 91.6667 25.0000 64.4830 76.7560 17.0462 483 41.6667 41.6667 8.33333 12.1790 14.3594 3.70466 484 58.3333 41.6667 8.33333 18.4909 17.6138 4.00042 485 75.0000 41.6667 8.33333 27.5994 22.3102 4.42723 486 91.6667 41.6667 8.33333 39.7780 28.5895 4.99790 487 25.0000 25.0000 8.33333 5.01488 5.72763 2.41580 488 25.0000 41.6667 8.33333 8.34205 12.3810 3.52486 489 41.6667 58.3333 8.33333 17.6523 25.3044 5.52909 490 58.3333 58.3333 8.33333 23.9642 28.5588 5.82485 491 75.0000 58.3333 8.33333 33.0727 33.2552 6.25166 492 91.6667 58.3333 8.33333 45.2513 39.5345 6.82233 493 91.6667 75.0000 8.33333 53.1496 55.3289 9.45512 494 91.6667 75.0000 75.0000 62.3513 59.0090 57.9215 495 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 496 58.3333 75.0000 8.33333 31.8624 44.3532 8.45764 497 75.0000 75.0000 8.33333 40.9710 49.0495 8.88445 498 25.0000 58.3333 8.33333 13.8153 23.3260 5.34929 499 25.0000 75.0000 8.33333 21.7136 39.1204 7.98208 500 25.0000 91.6667 8.33333 32.2741 60.2384 11.5023 501 41.6667 91.6667 8.33333 36.1111 62.2168 11.6821 502 58.3333 91.6667 8.33333 42.4229 65.4712 11.9778 503 75.0000 91.6667 8.33333 51.5314 70.1676 12.4046 504 91.6667 91.6667 8.33333 63.7101 76.4469 12.9753 505 8.33333 8.33333 25.0000 2.49075 2.06429 5.89353 506 25.0000 8.33333 25.0000 4.25657 2.97476 5.97628 507 41.6667 8.33333 25.0000 8.09354 4.95311 6.15607 508 58.3333 8.33333 25.0000 14.4054 8.20754 6.45183 509 75.0000 8.33333 25.0000 23.5139 12.9039 6.87864 510 91.6667 8.33333 25.0000 35.6926 19.1833 7.44931 511 91.6667 25.0000 41.6667 38.9032 22.9169 16.8054 512 41.6667 25.0000 25.0000 9.62474 8.01509 6.66648 513 58.3333 25.0000 25.0000 15.9366 11.2695 6.96224 514 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 515 91.6667 25.0000 25.0000 37.2238 22.2452 7.95972 516 8.33333 25.0000 25.0000 4.02195 5.12627 6.40394 517 8.33333 41.6667 25.0000 7.34912 11.7797 7.51300 518 41.6667 41.6667 25.0000 12.9519 14.6685 7.77554 519 58.3333 41.6667 25.0000 19.2638 17.9229 8.07130 520 75.0000 41.6667 25.0000 28.3723 22.6193 8.49811 521 75.0000 58.3333 25.0000 33.8456 33.5643 10.3225 522 25.0000 41.6667 25.0000 9.11494 12.6901 7.59575 523 25.0000 58.3333 25.0000 14.5882 23.6351 9.42018 524 41.6667 58.3333 25.0000 18.4252 25.6135 9.59997 525 58.3333 58.3333 25.0000 24.7370 28.8679 9.89574 526 75.0000 75.0000 41.6667 43.4233 50.0303 21.8010 527 91.6667 75.0000 41.6667 55.6019 56.3096 22.3717 528 8.33333 25.0000 8.33333 3.24906 4.81716 2.33305 529 8.33333 58.3333 25.0000 12.8224 22.7246 9.33744 530 8.33333 75.0000 25.0000 20.7207 38.5190 11.9702 531 58.3333 75.0000 25.0000 32.6353 44.6623 12.5285 532 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 533 75.0000 91.6667 25.0000 52.3043 70.4767 16.4755 534 8.33333 75.0000 41.6667 22.4001 39.1907 20.8159 535 8.33333 91.6667 41.6667 32.9606 60.3087 24.3361 536 8.33333 91.6667 91.6667 45.0405 65.1399 87.9622 537 100.000 100.000 100.000 95.1065 100.000 108.844 538 91.6667 41.6667 41.6667 42.2303 29.5703 17.9145 539 91.6667 58.3333 41.6667 47.7036 40.5153 19.7389 540 91.6667 58.3333 75.0000 54.4530 43.2146 55.2887 541 91.6667 58.3333 91.6667 59.7835 45.3465 83.3650 542 100.000 66.6667 100.000 73.9334 57.6597 101.786 543 58.3333 8.33333 41.6667 16.0848 8.87920 15.2975 544 75.0000 8.33333 41.6667 25.1933 13.5756 15.7243 545 91.6667 8.33333 41.6667 37.3720 19.8549 16.2950 546 91.6667 8.33333 58.3333 40.1347 20.9598 30.8463 547 41.6667 8.33333 41.6667 9.77296 5.62477 15.0017 548 41.6667 25.0000 41.6667 11.3042 8.68675 15.5121 549 58.3333 25.0000 41.6667 17.6160 11.9412 15.8079 550 75.0000 25.0000 41.6667 26.7246 16.6376 16.2347 551 83.3333 50.0000 66.6667 42.7865 32.9612 42.6301 552 83.3333 50.0000 83.3333 47.4311 34.8188 67.0941 553 100.000 50.0000 83.3333 61.2368 41.9370 67.7410 554 58.3333 41.6667 41.6667 20.9432 18.5946 16.9170 555 75.0000 41.6667 41.6667 30.0517 23.2910 17.3438 556 75.0000 91.6667 58.3333 56.7464 72.2532 39.8725 557 25.0000 41.6667 41.6667 10.7944 13.3618 16.4414 558 25.0000 58.3333 41.6667 16.2676 24.3068 18.2658 559 41.6667 58.3333 41.6667 20.1046 26.2851 18.4456 560 58.3333 58.3333 41.6667 26.4165 29.5396 18.7414 561 75.0000 58.3333 41.6667 35.5250 34.2359 19.1682 562 83.3333 66.6667 66.6667 49.4404 46.2672 44.8481 563 83.3333 83.3333 66.6667 58.6421 64.6681 47.9154 564 25.0000 75.0000 41.6667 24.1659 40.1011 20.8986 565 41.6667 75.0000 41.6667 28.0029 42.0795 21.0784 566 41.6667 75.0000 58.3333 30.7655 43.1844 35.6297 567 66.6667 83.3333 66.6667 48.0305 59.1967 47.4182 568 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 569 25.0000 91.6667 25.0000 33.0470 60.5475 15.5732 570 25.0000 91.6667 41.6667 34.7264 61.2192 24.4188 571 41.6667 91.6667 41.6667 38.5634 63.1975 24.5986 572 58.3333 91.6667 41.6667 44.8752 66.4520 24.8944 573 75.0000 91.6667 41.6667 53.9838 71.1483 25.3212 574 91.6667 91.6667 41.6667 66.1624 77.4277 25.8919 575 91.6667 91.6667 58.3333 68.9251 78.5326 40.4431 576 8.33333 8.33333 41.6667 4.17016 2.73595 14.7392 577 41.6667 8.33333 58.3333 12.5356 6.72967 29.5530 578 58.3333 8.33333 58.3333 18.8475 9.98410 29.8488 579 75.0000 8.33333 58.3333 27.9560 14.6805 30.2756 580 100.000 16.6667 66.6667 49.8514 26.5998 41.0301 581 100.000 16.6667 83.3333 54.4960 28.4574 65.4940 582 100.000 16.6667 100.000 60.5387 30.8741 97.3213 583 100.000 33.3333 100.000 62.9175 35.6311 98.1143 584 58.3333 25.0000 58.3333 20.3787 13.0461 30.3592 585 75.0000 25.0000 58.3333 29.4872 17.7424 30.7860 586 91.6667 25.0000 58.3333 41.6659 24.0218 31.3567 587 100.000 33.3333 66.6667 52.2302 31.3569 41.8231 588 100.000 33.3333 83.3333 56.8749 33.2144 66.2870 589 100.000 50.0000 100.000 67.2794 44.3537 99.5683 590 58.3333 41.6667 58.3333 23.7059 19.6995 31.4683 591 75.0000 41.6667 58.3333 32.8144 24.3959 31.8951 592 91.6667 41.6667 58.3333 44.9930 30.6752 32.4657 593 100.000 50.0000 66.6667 56.5921 40.0795 43.2771 594 100.000 66.6667 83.3333 67.8907 55.2430 69.9590 595 100.000 83.3333 83.3333 77.0925 73.6439 73.0262 596 75.0000 58.3333 58.3333 38.2876 35.3408 33.7195 597 91.6667 58.3333 58.3333 50.4663 41.6202 34.2902 598 100.000 66.6667 66.6667 63.2461 53.3855 45.4951 599 100.000 83.3333 66.6667 72.4478 71.7864 48.5623 600 58.3333 75.0000 41.6667 34.3148 45.3339 21.3742 601 58.3333 75.0000 58.3333 37.0774 46.4388 35.9255 602 75.0000 75.0000 58.3333 46.1859 51.1352 36.3523 603 91.6667 75.0000 58.3333 58.3646 57.4145 36.9230 604 41.6667 75.0000 25.0000 26.3234 41.4078 12.2328 605 41.6667 91.6667 25.0000 36.8839 62.5259 15.7530 606 41.6667 91.6667 58.3333 41.3260 64.3024 39.1499 607 58.3333 91.6667 58.3333 47.6379 67.5569 39.4457 608 91.6667 91.6667 75.0000 72.9118 80.1270 61.4417 609 8.33333 8.33333 58.3333 6.93284 3.84085 29.2905 610 8.33333 8.33333 75.0000 10.9196 5.43529 50.2890 611 25.0000 8.33333 75.0000 12.6854 6.34575 50.3718 612 41.6667 8.33333 75.0000 16.5224 8.32411 50.5516 613 58.3333 8.33333 75.0000 22.8343 11.5785 50.8473 614 75.0000 8.33333 75.0000 31.9428 16.2749 51.2741 615 91.6667 8.33333 75.0000 44.1214 22.5543 51.8448 616 100.000 0.00000 83.3333 53.6586 26.7828 65.2149 617 41.6667 25.0000 58.3333 14.0668 9.79164 30.0634 618 41.6667 25.0000 75.0000 18.0536 11.3861 51.0620 619 58.3333 25.0000 75.0000 24.3655 14.6405 51.3577 620 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 621 91.6667 25.0000 75.0000 45.6526 25.6162 52.3552 622 91.6667 41.6667 91.6667 54.3103 34.4015 81.5406 623 41.6667 41.6667 58.3333 17.3940 16.4450 31.1725 624 41.6667 41.6667 75.0000 21.3807 18.0395 52.1710 625 58.3333 41.6667 75.0000 27.6926 21.2939 52.4668 626 75.0000 41.6667 75.0000 36.8011 25.9903 52.8936 627 91.6667 41.6667 75.0000 48.9798 32.2696 53.4643 628 25.0000 8.33333 41.6667 5.93599 3.64642 14.8219 629 25.0000 25.0000 41.6667 7.46719 6.70839 15.3324 630 41.6667 58.3333 75.0000 26.8540 28.9845 53.9955 631 58.3333 58.3333 75.0000 33.1659 32.2389 54.2912 632 75.0000 58.3333 75.0000 42.2744 36.9353 54.7180 633 83.3333 66.6667 83.3333 54.0851 48.1248 69.3121 634 91.6667 75.0000 91.6667 67.6818 61.1408 85.9978 635 41.6667 58.3333 58.3333 22.8672 27.3900 32.9969 636 41.6667 75.0000 75.0000 34.7523 44.7788 56.6283 637 41.6667 75.0000 91.6667 40.0828 46.9107 84.7046 638 25.0000 58.3333 58.3333 19.0303 25.4117 32.8171 639 25.0000 75.0000 58.3333 26.9286 41.2060 35.4499 640 25.0000 91.6667 58.3333 37.4891 62.3241 38.9701 641 41.6667 91.6667 75.0000 45.3128 65.8969 60.1484 642 58.3333 91.6667 75.0000 51.6247 69.1513 60.4442 643 75.0000 91.6667 75.0000 60.7332 73.8477 60.8710 644 83.3333 100.000 83.3333 75.2582 90.4651 76.3698 645 8.33333 8.33333 91.6667 16.2501 7.56716 78.3654 646 25.0000 8.33333 91.6667 18.0159 8.47762 78.4481 647 41.6667 8.33333 91.6667 21.8529 10.4560 78.6279 648 58.3333 8.33333 91.6667 28.1648 13.7104 78.9237 649 75.0000 8.33333 91.6667 37.2733 18.4068 79.3505 650 25.0000 25.0000 58.3333 10.2299 7.81329 29.8836 651 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 652 25.0000 25.0000 91.6667 19.5471 11.5396 78.9585 653 41.6667 25.0000 91.6667 23.3841 13.5180 79.1383 654 58.3333 25.0000 91.6667 29.6960 16.7724 79.4341 655 75.0000 25.0000 91.6667 38.8045 21.4688 79.8609 656 91.6667 25.0000 91.6667 50.9831 27.7481 80.4315 657 25.0000 41.6667 75.0000 17.5438 16.0611 51.9912 658 25.0000 41.6667 91.6667 22.8743 18.1930 80.0676 659 41.6667 41.6667 91.6667 26.7112 20.1714 80.2474 660 58.3333 41.6667 91.6667 33.0231 23.4258 80.5431 661 66.6667 50.0000 100.000 42.8621 31.7640 98.4241 662 25.0000 41.6667 58.3333 13.5570 14.4667 30.9927 663 25.0000 58.3333 75.0000 23.0170 27.0061 53.8157 664 25.0000 58.3333 91.6667 28.3475 29.1380 81.8920 665 41.6667 58.3333 91.6667 32.1845 31.1163 82.0718 666 58.3333 58.3333 91.6667 38.4964 34.3708 82.3676 667 75.0000 58.3333 91.6667 47.6049 39.0671 82.7944 668 75.0000 75.0000 91.6667 55.5032 54.8615 85.4272 669 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 670 25.0000 75.0000 91.6667 36.2458 44.9323 84.5248 671 58.3333 75.0000 91.6667 46.3947 50.1651 85.0004 672 8.33333 58.3333 8.33333 12.0495 22.4155 5.26655 673 8.33333 75.0000 8.33333 19.9478 38.2099 7.89934 674 8.33333 91.6667 8.33333 30.5083 59.3279 11.4195 675 25.0000 91.6667 75.0000 41.4758 63.9185 59.9687 676 25.0000 91.6667 91.6667 46.8063 66.0504 88.0450 677 41.6667 91.6667 91.6667 50.6433 68.0287 88.2248 678 58.3333 91.6667 91.6667 56.9552 71.2832 88.5205 679 75.0000 91.6667 91.6667 66.0637 75.9795 88.9474 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s29-g85-m0-f994-caRGB.ti1000644 000765 000000 00000231767 12261120515 022500 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "819" CREATED "Wed Dec 18 02:20:47 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "85" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045794 99.996943 108.895612" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "29" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 994 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 2 0.000000000 14.00000000 58.15340000 5.958960000 3.116250000 30.18480000 3 0.000000000 38.48960000 63.41670000 9.184900000 10.44860000 37.27320000 4 32.63590000 53.96280000 80.33710000 21.32070000 23.34020000 63.29650000 5 32.99660000 53.96290000 89.20130000 24.45070000 24.60610000 79.15430000 6 28.54580000 40.40200000 33.77810000 7.918890000 11.12790000 10.24540000 7 41.53190000 68.81910000 32.48440000 18.09440000 32.51950000 11.85920000 8 85.88890000 82.91330000 46.02920000 56.97790000 64.19410000 24.60810000 9 100.0000000 88.41340000 50.57940000 76.02710000 79.26710000 30.23160000 10 60.97130000 58.77510000 40.58590000 27.78290000 30.54700000 16.74960000 11 64.61980000 74.48940000 59.18590000 37.72250000 46.58260000 36.01080000 12 75.96190000 90.68070000 72.97640000 55.87950000 70.59850000 56.75430000 13 92.46580000 92.46580000 92.46580000 80.00510000 84.17270000 91.66320000 14 48.29500000 39.13190000 44.88630000 17.22520000 15.26120000 18.46880000 15 68.42840000 45.06970000 61.06900000 34.61640000 26.32720000 35.90690000 16 100.0000000 66.34370000 71.19750000 74.11320000 58.74720000 52.52800000 17 100.0000000 66.59850000 84.82800000 78.36700000 60.63860000 74.62150000 18 100.0000000 80.68890000 86.87270000 83.05690000 74.39490000 79.85180000 19 100.0000000 91.23340000 87.13080000 86.73650000 86.56680000 81.69510000 20 16.55080000 0.000000000 12.04510000 1.283130000 0.640895000 0.995106000 21 13.15790000 0.000000000 0.000000000 0.666598000 0.343709000 0.031225600 22 11.02940000 0.000000000 0.000000000 0.452198000 0.233161000 0.021182400 23 31.25000000 0.000000000 0.000000000 4.467150000 2.303340000 0.209256000 24 34.40370000 0.000000000 0.000000000 5.518970000 2.845680000 0.258527000 25 41.26210000 0.000000000 0.000000000 8.231510000 4.244310000 0.385591000 26 45.00000000 0.000000000 0.000000000 9.961020000 5.136080000 0.466607000 27 48.96910000 0.000000000 0.000000000 11.99600000 6.185340000 0.561931000 28 53.19150000 0.000000000 0.000000000 14.38910000 7.419250000 0.674030000 29 57.69230000 0.000000000 0.000000000 17.20330000 8.870320000 0.805858000 30 62.50000000 0.000000000 0.000000000 20.51450000 10.57760000 0.960966000 31 67.64710000 0.000000000 0.000000000 24.41440000 12.58850000 1.143650000 32 73.17070000 0.000000000 0.000000000 29.01440000 14.96030000 1.359130000 33 79.11390000 0.000000000 0.000000000 34.45100000 17.76350000 1.613800000 34 100.0000000 25.71080000 0.000000000 58.60780000 32.90050000 3.057990000 35 100.0000000 52.93700000 23.68930000 63.04530000 45.54120000 8.621740000 36 100.0000000 78.83870000 29.22870000 69.92890000 67.42770000 13.51930000 37 26.21190000 24.08310000 10.43040000 3.975580000 4.356900000 1.138260000 38 26.90610000 24.63570000 30.41620000 5.439680000 5.086880000 7.709800000 39 31.54100000 30.99830000 39.74280000 8.444400000 8.113580000 13.77920000 40 11.72840000 11.72840000 11.72840000 0.853071000 0.897509000 0.977378000 41 8.992810000 0.000000000 0.000000000 0.288637000 0.148826000 0.013520700 42 0.000000000 7.042250000 0.000000000 0.054236200 0.183382000 0.020660400 43 0.000000000 13.15790000 0.000000000 0.214448000 0.725087000 0.081690500 44 0.000000000 15.38460000 0.000000000 0.302447000 1.022630000 0.115212000 45 0.000000000 17.71650000 0.000000000 0.412519000 1.394800000 0.157143000 46 0.000000000 20.16130000 0.000000000 0.548160000 1.853430000 0.208813000 47 11.85400000 21.71120000 0.000000000 1.175030000 2.454530000 0.270575000 48 0.000000000 21.52430000 12.18010000 0.816536000 2.213630000 1.207920000 49 0.000000000 22.72730000 0.000000000 0.713396000 2.412120000 0.271756000 50 0.000000000 25.42370000 0.000000000 0.912882000 3.086620000 0.347748000 51 0.000000000 28.26090000 0.000000000 1.152020000 3.895190000 0.438844000 52 0.000000000 37.73580000 0.000000000 2.175770000 7.356680000 0.828825000 53 0.000000000 41.26210000 0.000000000 2.648120000 8.953770000 1.008760000 54 0.000000000 45.00000000 0.000000000 3.204510000 10.83500000 1.220710000 55 0.000000000 48.96910000 0.000000000 3.859170000 13.04850000 1.470090000 56 0.000000000 47.88620000 54.85750000 8.699130000 14.43230000 27.86700000 57 24.53330000 50.22570000 55.69420000 11.89920000 17.22710000 29.04060000 58 45.62750000 100.0000000 73.13920000 38.28190000 71.81090000 57.37120000 59 90.67220000 100.0000000 100.0000000 83.87260000 94.23580000 108.3720000 60 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 61 0.000000000 21.01080000 100.0000000 19.42060000 9.557350000 99.35510000 62 26.05410000 56.26910000 100.0000000 27.05360000 26.78450000 101.2620000 63 46.22560000 75.12810000 100.0000000 39.27980000 46.42330000 103.3900000 64 52.28300000 83.71820000 100.0000000 45.22570000 57.10930000 104.5570000 65 0.000000000 0.000000000 11.02940000 0.147567000 0.059024500 0.777236000 66 0.000000000 5.172410000 0.000000000 0.027514000 0.093029800 0.010481000 67 0.000000000 0.000000000 1.655630000 0.002278960 0.000911548 0.012003300 68 0.000000000 0.000000000 3.378380000 0.010937900 0.004374990 0.057609900 69 0.000000000 0.000000000 5.172410000 0.027909800 0.011163500 0.147001000 70 0.000000000 0.000000000 7.042250000 0.055016500 0.022005700 0.289771000 71 0.000000000 0.000000000 13.15790000 0.217533000 0.087009700 1.145740000 72 0.000000000 0.000000000 15.38460000 0.306798000 0.122714000 1.615900000 73 0.000000000 0.000000000 17.71650000 0.418454000 0.167375000 2.203990000 74 0.000000000 0.000000000 20.16130000 0.556046000 0.222409000 2.928690000 75 0.000000000 0.000000000 22.72730000 0.723659000 0.289452000 3.811500000 76 0.000000000 0.000000000 25.42370000 0.926015000 0.370391000 4.877310000 77 0.000000000 10.66330000 25.84780000 1.095390000 0.840798000 5.109490000 78 10.50950000 13.29160000 24.53500000 1.482230000 1.293580000 4.612780000 79 0.000000000 11.28730000 38.71990000 2.488690000 1.451740000 12.36010000 80 0.000000000 0.000000000 37.73580000 2.207070000 0.882794000 11.62460000 81 0.000000000 0.000000000 41.26210000 2.686220000 1.074440000 14.14830000 82 0.000000000 0.000000000 45.00000000 3.250610000 1.300190000 17.12100000 83 0.000000000 0.000000000 48.96910000 3.914690000 1.565810000 20.61860000 84 0.000000000 0.000000000 53.19150000 4.695630000 1.878180000 24.73180000 85 0.000000000 0.000000000 57.69230000 5.614010000 2.245510000 29.56890000 86 0.000000000 0.000000000 62.50000000 6.694570000 2.677720000 35.26020000 87 0.000000000 0.000000000 67.64710000 7.967230000 3.186760000 41.96330000 88 0.000000000 0.000000000 73.17070000 9.468370000 3.787200000 49.86980000 89 0.000000000 0.000000000 79.11390000 11.24250000 4.496820000 59.21410000 90 0.000000000 0.000000000 85.52630000 13.34440000 5.337550000 70.28490000 91 0.000000000 0.000000000 92.46580000 15.84210000 6.336570000 83.44000000 92 48.51590000 17.12230000 100.0000000 30.95620000 14.88190000 99.82280000 93 11.17850000 13.84170000 0.000000000 0.705469000 1.050690000 0.113136000 94 8.333330000 8.333330000 8.333330000 0.402325000 0.423283000 0.460951000 95 3.378380000 0.000000000 0.000000000 0.033517600 0.017282300 0.001570070 96 7.683220000 7.683220000 7.683220000 0.336510000 0.354040000 0.385545000 97 0.000000000 3.378380000 0.000000000 0.010782800 0.036458600 0.004107530 98 0.000000000 11.02940000 0.000000000 0.145474000 0.491875000 0.055416100 99 0.544662000 0.544662000 0.544662000 0.000998117 0.001050110 0.001143560 100 1.096490000 1.096490000 1.096490000 0.004650240 0.004892480 0.005327860 101 1.655630000 1.655630000 1.655630000 0.011509100 0.012108700 0.013186200 102 2.222220000 2.222220000 2.222220000 0.021986500 0.023131900 0.025190400 103 2.796420000 2.796420000 2.796420000 0.036447900 0.038346500 0.041758900 104 3.378380000 3.378380000 3.378380000 0.055238300 0.058115800 0.063287500 105 7.042250000 0.000000000 0.000000000 0.168590000 0.086927900 0.007897300 106 0.000000000 0.000000000 8.992810000 0.094191900 0.037675300 0.496108000 107 3.968250000 3.968250000 3.968250000 0.078694900 0.082794300 0.090162100 108 4.566210000 4.566210000 4.566210000 0.107153000 0.112735000 0.122767000 109 5.787040000 5.787040000 5.787040000 0.180428000 0.189827000 0.206719000 110 0.000000000 1.655630000 0.000000000 0.002246640 0.007596300 0.000855822 111 7.042250000 7.042250000 7.042250000 0.277843000 0.292316000 0.318329000 112 5.172410000 5.172410000 5.172410000 0.140949000 0.148292000 0.161488000 113 6.410260000 6.410260000 6.410260000 0.225939000 0.237709000 0.258862000 114 12.43780000 12.43780000 12.43780000 0.970682000 1.021250000 1.112130000 115 13.15790000 13.15790000 13.15790000 1.098580000 1.155810000 1.258660000 116 13.88890000 13.88890000 13.88890000 1.237290000 1.301740000 1.417580000 117 16.14990000 16.14990000 16.14990000 1.723950000 1.813750000 1.975150000 118 16.92710000 16.92710000 16.92710000 1.911680000 2.011270000 2.190250000 119 17.71650000 17.71650000 17.71650000 2.113260000 2.223350000 2.421200000 120 18.51850000 18.51850000 18.51850000 2.329370000 2.450710000 2.668800000 121 19.33330000 19.33330000 19.33330000 2.560740000 2.694130000 2.933880000 122 20.16130000 20.16130000 20.16130000 2.808130000 2.954410000 3.217320000 123 21.00270000 21.00270000 21.00270000 3.072330000 3.232380000 3.520020000 124 21.85790000 21.85790000 21.85790000 3.354200000 3.528920000 3.842960000 125 22.72730000 22.72730000 22.72730000 3.654600000 3.844980000 4.187140000 126 23.61110000 23.61110000 23.61110000 3.974470000 4.181500000 4.553610000 127 24.50980000 24.50980000 24.50980000 4.314770000 4.539540000 4.943510000 128 25.42370000 25.42370000 25.42370000 4.676530000 4.920140000 5.357980000 129 26.35330000 26.35330000 26.35330000 5.060830000 5.324460000 5.798280000 130 27.29890000 27.29890000 27.29890000 5.468790000 5.753670000 6.265680000 131 28.26090000 28.26090000 28.26090000 5.901600000 6.209030000 6.761570000 132 29.23980000 29.23980000 29.23980000 6.360520000 6.691850000 7.287360000 133 30.23600000 30.23600000 30.23600000 6.846870000 7.203540000 7.844570000 134 31.25000000 31.25000000 31.25000000 7.362030000 7.745540000 8.434810000 135 32.28230000 32.28230000 32.28230000 7.907480000 8.319390000 9.059730000 136 33.33330000 33.33330000 33.33330000 8.484750000 8.926740000 9.721120000 137 34.40370000 34.40370000 34.40370000 9.095480000 9.569280000 10.42080000 138 35.49380000 35.49380000 35.49380000 9.741380000 10.24880000 11.16090000 139 36.60440000 36.60440000 36.60440000 10.42430000 10.96730000 11.94330000 140 37.73580000 37.73580000 37.73580000 11.14610000 11.72670000 12.77030000 141 38.88890000 38.88890000 38.88890000 11.90880000 12.52920000 13.64420000 142 40.06410000 40.06410000 40.06410000 12.71470000 13.37700000 14.56740000 143 41.26210000 41.26210000 41.26210000 13.56580000 14.27250000 15.54260000 144 42.48370000 42.48370000 42.48370000 14.46480000 15.21830000 16.57250000 145 43.72940000 43.72940000 43.72940000 15.41400000 16.21690000 17.66010000 146 45.00000000 45.00000000 45.00000000 16.41620000 17.27130000 18.80830000 147 46.29630000 46.29630000 46.29630000 17.47410000 18.38440000 20.02040000 148 47.61900000 47.61900000 47.61900000 18.59100000 19.55940000 21.30000000 149 48.96910000 48.96910000 48.96910000 19.76980000 20.79970000 22.65070000 150 50.34720000 50.34720000 50.34720000 21.01420000 22.10880000 24.07630000 151 51.75440000 51.75440000 51.75440000 22.32750000 23.49060000 25.58100000 152 53.19150000 53.19150000 53.19150000 23.71370000 24.94900000 27.16920000 153 54.65950000 54.65950000 54.65950000 25.17690000 26.48840000 28.84560000 154 56.15940000 56.15940000 56.15940000 26.72140000 28.11330000 30.61510000 155 57.69230000 57.69230000 57.69230000 28.35170000 29.82860000 32.48300000 156 59.25930000 59.25930000 59.25930000 30.07280000 31.63940000 34.45490000 157 60.86140000 60.86140000 60.86140000 31.89000000 33.55120000 36.53690000 158 62.50000000 62.50000000 62.50000000 33.80870000 35.56990000 38.73520000 159 64.17620000 64.17620000 64.17620000 35.83500000 37.70170000 41.05670000 160 65.89150000 65.89150000 65.89150000 37.97510000 39.95330000 43.50870000 161 67.64710000 67.64710000 67.64710000 40.23580000 42.33180000 46.09890000 162 69.44440000 69.44440000 69.44440000 42.62450000 44.84490000 48.83560000 163 71.28510000 71.28510000 71.28510000 45.14870000 47.50060000 51.72770000 164 73.17070000 73.17070000 73.17070000 47.81690000 50.30780000 54.78460000 165 75.10290000 75.10290000 75.10290000 50.63780000 53.27560000 58.01660000 166 77.08330000 77.08330000 77.08330000 53.62090000 56.41420000 61.43440000 167 79.11390000 79.11390000 79.11390000 56.77650000 59.73410000 65.04990000 168 81.19660000 81.19660000 81.19660000 60.11550000 63.24710000 68.87540000 169 83.33330000 83.33330000 83.33330000 63.64970000 66.96530000 72.92450000 170 85.52630000 85.52630000 85.52630000 67.39150000 70.90210000 77.21170000 171 87.77780000 87.77780000 87.77780000 71.35480000 75.07180000 81.75240000 172 90.09010000 90.09010000 90.09010000 75.55410000 79.48980000 86.56360000 173 64.86670000 0.000000000 30.26300000 23.62020000 12.02190000 8.197660000 174 80.29150000 0.000000000 30.19060000 36.94010000 18.89070000 8.784390000 175 100.0000000 0.000000000 83.16280000 70.21890000 34.75520000 68.78550000 176 25.01080000 15.34650000 21.52600000 3.680260000 2.685310000 3.625260000 177 24.81240000 67.14180000 100.0000000 29.23590000 35.03700000 102.1950000 178 28.76510000 78.58970000 100.0000000 33.46550000 46.37740000 103.4610000 179 18.88590000 0.000000000 42.88650000 4.400100000 1.930620000 15.47130000 180 24.86480000 0.000000000 82.35450000 14.98240000 6.305190000 64.80610000 181 33.97470000 0.000000000 100.0000000 24.18910000 10.29600000 99.37790000 182 60.46290000 0.000000000 100.0000000 37.89300000 17.36200000 100.0200000 183 86.61590000 59.93900000 100.0000000 66.88630000 49.56060000 103.3890000 184 37.91720000 36.77140000 0.000000000 8.890290000 10.47370000 1.103120000 185 38.55930000 35.51480000 15.94410000 9.327980000 10.22740000 2.805480000 186 69.75410000 49.13430000 29.31670000 31.27270000 27.11920000 9.376500000 187 85.22530000 57.98190000 30.33900000 47.53780000 40.38810000 11.22670000 188 100.0000000 71.91290000 40.21600000 69.19560000 61.13150000 19.49560000 189 29.18690000 18.45430000 0.000000000 4.295360000 3.507830000 0.351965000 190 38.05630000 16.13450000 0.000000000 7.226010000 4.688170000 0.450684000 191 65.88550000 29.73660000 12.31920000 24.51470000 16.31060000 2.561240000 192 65.74700000 37.24520000 39.78570000 27.52500000 19.96360000 14.93830000 193 64.87240000 43.58520000 100.0000000 44.07350000 29.10860000 101.3070000 194 82.02740000 43.01700000 100.0000000 59.02540000 36.57450000 101.9790000 195 77.48440000 40.06810000 69.66690000 43.89190000 28.76240000 47.25550000 196 77.57870000 53.58080000 76.13320000 48.03370000 37.05150000 57.75600000 197 34.94440000 32.95860000 48.13530000 11.09670000 9.915330000 20.73740000 198 38.69940000 65.01920000 63.41160000 21.25890000 30.79090000 39.47830000 199 11.02940000 11.02940000 11.02940000 0.745240000 0.784061000 0.853834000 200 5.172410000 0.000000000 0.000000000 0.085525500 0.044098400 0.004006290 201 0.000000000 8.992810000 0.000000000 0.092856100 0.313963000 0.035372000 202 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 203 36.28230000 0.000000000 68.83000000 14.48030000 6.509240000 43.88460000 204 45.77710000 0.000000000 86.51790000 24.03030000 10.80770000 72.57400000 205 79.81570000 0.000000000 100.0000000 53.94690000 25.63970000 100.7720000 206 100.0000000 0.000000000 100.0000000 76.49240000 37.26460000 101.8280000 207 64.35830000 0.000000000 52.86780000 26.51290000 13.13480000 25.42690000 208 100.0000000 27.38270000 58.31320000 64.49460000 35.66970000 33.38430000 209 100.0000000 47.34540000 59.41440000 67.24460000 44.24820000 35.61140000 210 100.0000000 90.21350000 71.61310000 81.49580000 83.36660000 55.90160000 211 77.76970000 61.65120000 20.74230000 40.17280000 38.99680000 7.111180000 212 100.0000000 66.90630000 22.33310000 66.03470000 55.93650000 9.289520000 213 50.54140000 28.46690000 0.000000000 14.03000000 10.58840000 1.048290000 214 66.51720000 36.12820000 0.000000000 25.50370000 18.81570000 1.855210000 215 70.72430000 64.81580000 33.98110000 35.82580000 38.75670000 13.21630000 216 83.69400000 75.63230000 33.39890000 50.71600000 54.72130000 14.53780000 217 31.23330000 49.68310000 0.000000000 8.445910000 15.77130000 1.726650000 218 46.36540000 65.49880000 0.000000000 17.95390000 30.22210000 3.285260000 219 61.75950000 82.53570000 0.000000000 32.14850000 51.43500000 5.570050000 220 100.0000000 100.0000000 24.73320000 77.09710000 92.81770000 14.35990000 221 100.0000000 100.0000000 44.33050000 79.37070000 93.72710000 26.33490000 222 100.0000000 100.0000000 61.83040000 82.76330000 95.08420000 44.20400000 223 24.76390000 25.00370000 18.51240000 4.019140000 4.540860000 2.888320000 224 29.19250000 50.23120000 31.85580000 9.447690000 16.39080000 9.744110000 225 75.06370000 56.60320000 67.76900000 43.99690000 36.96880000 45.58920000 226 74.49680000 63.11590000 77.05890000 47.53710000 42.60800000 59.86680000 227 13.54080000 0.000000000 28.09030000 1.863140000 0.827325000 6.106810000 228 14.44150000 23.91640000 30.71800000 3.019850000 3.681670000 7.735900000 229 8.496800000 26.83970000 32.55490000 2.878240000 4.246720000 8.804630000 230 0.000000000 37.20770000 37.38730000 4.271860000 7.997110000 12.19330000 231 0.000000000 66.54020000 36.69600000 9.649900000 26.44050000 13.81710000 232 0.000000000 82.15600000 51.18260000 16.35640000 42.44170000 27.31120000 233 38.76910000 80.88630000 57.91030000 24.47440000 45.30980000 34.58410000 234 100.0000000 79.87880000 57.72190000 74.61250000 70.26000000 36.61610000 235 100.0000000 81.17490000 100.0000000 88.22030000 76.91880000 106.2960000 236 100.0000000 91.16240000 100.0000000 91.62970000 88.44670000 107.5940000 237 0.000000000 57.69230000 0.000000000 5.534390000 18.71280000 2.108240000 238 0.000000000 62.50000000 0.000000000 6.599620000 22.31450000 2.514020000 239 84.11890000 68.01540000 0.000000000 47.37530000 47.20470000 4.874760000 240 42.78500000 24.43210000 57.98930000 15.42870000 9.695510000 30.64100000 241 51.75180000 35.12240000 64.22120000 22.51130000 16.10980000 38.77350000 242 58.42270000 53.30290000 68.15250000 30.43510000 28.08230000 45.25600000 243 65.02790000 68.76850000 89.08710000 45.12390000 44.91430000 81.03200000 244 69.50390000 100.0000000 90.69400000 59.64810000 82.16600000 88.24570000 245 0.000000000 54.76820000 19.79770000 5.470400000 16.90380000 4.694140000 246 0.000000000 84.04050000 24.37560000 13.50190000 43.13580000 9.267780000 247 0.000000000 100.0000000 26.11310000 19.53550000 63.12520000 12.24050000 248 76.32300000 100.0000000 42.26390000 53.21970000 80.27950000 23.47360000 249 87.87550000 100.0000000 90.85440000 77.19750000 91.20790000 89.37630000 250 0.000000000 16.96270000 14.09670000 0.628032000 1.368850000 1.476070000 251 0.000000000 32.42800000 17.51970000 1.967240000 5.434370000 2.744360000 252 0.000000000 62.73130000 46.30040000 10.11420000 23.88080000 20.76240000 253 0.000000000 80.30410000 61.72200000 17.96570000 41.32980000 38.66500000 254 22.09880000 84.89860000 75.55230000 25.18800000 48.90380000 58.53770000 255 23.28340000 93.32100000 88.79170000 32.76610000 60.88710000 82.50240000 256 16.69560000 34.59460000 0.000000000 2.922600000 6.656990000 0.737339000 257 19.49970000 49.02020000 0.000000000 5.451400000 13.89490000 1.547630000 258 21.70100000 65.83630000 0.000000000 9.402550000 26.05120000 2.912480000 259 42.20840000 100.0000000 24.53330000 28.06200000 67.53620000 11.98240000 260 43.96000000 100.0000000 45.49450000 31.34480000 68.94290000 25.04830000 261 0.000000000 31.25000000 0.000000000 1.437100000 4.859110000 0.547442000 262 0.000000000 92.46580000 0.000000000 15.61740000 52.80520000 5.949190000 263 0.000000000 100.0000000 0.000000000 18.55340000 62.73240000 7.067620000 264 24.53470000 100.0000000 22.54430000 21.88830000 64.36970000 10.93490000 265 28.46110000 100.0000000 57.19950000 27.69950000 66.81120000 36.25420000 266 26.91840000 100.0000000 73.07310000 31.21150000 68.16750000 56.94190000 267 0.000000000 29.74890000 44.92630000 4.528570000 5.656040000 17.55060000 268 0.000000000 32.97950000 100.0000000 20.43820000 12.99810000 99.74270000 269 0.000000000 42.37020000 100.0000000 21.62740000 17.01890000 100.1960000 270 0.000000000 42.81450000 80.87690000 14.67300000 14.43150000 63.24910000 271 61.66180000 44.77690000 83.59700000 35.77530000 26.06180000 68.98550000 272 73.19440000 57.69150000 100.0000000 53.38960000 41.21100000 102.5950000 273 69.67570000 56.18470000 49.92940000 35.36040000 32.72200000 24.72780000 274 74.92970000 75.35460000 57.97140000 46.20210000 51.70110000 35.10960000 275 89.59080000 100.0000000 79.84720000 75.31430000 90.67260000 69.61690000 276 100.0000000 100.0000000 90.42320000 91.30810000 98.50190000 89.20920000 277 74.98290000 16.44130000 64.22990000 38.07710000 19.81420000 39.00980000 278 100.0000000 26.50370000 72.08130000 67.83350000 36.78340000 51.33400000 279 22.72730000 0.000000000 0.000000000 2.217540000 1.143400000 0.103877000 280 20.16130000 0.000000000 0.000000000 1.703920000 0.878571000 0.079817200 281 23.95640000 24.31100000 43.31030000 6.305410000 5.276360000 16.17060000 282 28.81750000 26.63590000 52.80090000 9.369400000 7.194870000 24.89450000 283 28.70920000 33.66740000 52.23090000 9.911250000 9.440150000 24.57870000 284 28.52340000 68.34090000 64.91660000 18.96410000 31.95440000 41.55930000 285 35.60770000 74.73560000 77.40880000 26.44790000 40.41940000 60.44750000 286 33.62910000 37.24530000 64.51860000 14.54270000 12.72630000 38.86460000 287 42.42600000 51.26720000 86.53870000 26.71380000 24.42290000 74.16350000 288 54.42800000 60.18500000 90.46570000 36.30710000 34.38000000 82.54490000 289 79.89870000 30.78010000 39.38310000 39.02160000 23.82300000 14.94860000 290 86.08320000 37.20470000 52.50820000 48.15280000 30.34410000 26.78500000 291 63.83290000 34.43700000 51.49770000 27.64130000 18.84530000 24.71730000 292 74.20950000 41.73690000 50.55610000 36.84270000 26.29290000 24.55320000 293 82.10270000 48.74280000 62.91970000 47.99210000 34.90660000 38.98920000 294 100.0000000 0.000000000 31.68130000 59.17450000 30.33770000 10.61460000 295 100.0000000 25.72290000 31.43400000 60.08550000 33.49450000 10.83630000 296 37.73580000 0.000000000 0.000000000 6.763250000 3.487250000 0.316813000 297 56.22600000 19.83020000 0.000000000 16.78490000 10.16920000 0.962843000 298 77.13730000 25.40340000 0.000000000 33.49760000 19.88330000 1.873590000 299 100.0000000 29.81380000 45.79330000 62.34590000 35.46930000 20.98700000 300 61.63080000 23.28350000 23.36380000 21.41360000 13.10830000 5.268630000 301 100.0000000 33.82090000 20.70430000 59.97160000 35.75440000 6.457930000 302 100.0000000 44.35520000 37.57580000 62.96300000 41.10780000 15.40060000 303 28.26090000 0.000000000 0.000000000 3.580980000 1.846420000 0.167745000 304 49.72080000 0.000000000 26.41340000 13.41180000 6.798920000 5.885700000 305 49.28500000 36.68790000 28.27010000 15.38140000 13.65600000 7.508400000 306 53.86930000 68.77980000 67.68900000 30.91990000 38.36420000 45.81680000 307 53.24500000 89.97410000 83.04590000 41.63580000 62.16500000 72.15770000 308 26.62880000 60.64760000 30.21840000 10.67300000 23.04740000 9.631950000 309 25.35170000 67.44140000 48.38390000 14.43440000 29.35830000 23.18470000 310 0.000000000 27.69460000 22.55140000 1.813270000 4.010150000 4.166690000 311 0.000000000 49.86520000 30.76360000 5.424530000 14.14280000 8.947620000 312 10.93260000 75.29220000 33.91040000 12.12790000 34.53420000 12.99650000 313 0.000000000 100.0000000 44.01420000 21.64950000 63.97080000 23.37450000 314 52.65040000 40.13620000 0.000000000 16.56090000 15.67950000 1.608250000 315 87.06700000 58.61390000 0.000000000 48.26020000 41.30540000 4.175230000 316 100.0000000 70.13210000 59.58320000 72.20150000 60.89680000 37.68280000 317 100.0000000 80.67660000 74.40640000 79.06580000 72.78690000 58.84970000 318 33.82140000 20.20840000 28.37040000 7.045190000 5.075210000 6.666470000 319 46.30170000 28.85500000 26.59200000 12.83390000 9.954900000 6.340030000 320 60.58390000 80.27930000 25.92180000 31.56840000 48.96260000 10.34720000 321 69.81430000 80.02030000 27.13960000 38.60100000 52.34460000 11.18550000 322 78.76810000 80.29030000 100.0000000 64.38970000 63.83120000 105.0860000 323 0.000000000 0.000000000 31.25000000 1.457780000 0.583088000 7.678110000 324 0.000000000 0.000000000 34.40370000 1.801020000 0.720380000 9.485980000 325 0.000000000 0.000000000 100.0000000 18.82030000 7.527820000 99.12640000 326 44.47400000 57.33520000 100.0000000 33.98640000 30.99180000 101.6610000 327 45.44630000 67.13770000 100.0000000 36.72470000 38.89540000 102.5460000 328 84.78760000 91.82960000 100.0000000 74.32170000 80.22360000 106.8650000 329 15.38460000 15.38460000 15.38460000 1.549380000 1.630090000 1.775150000 330 18.20120000 10.79960000 20.25030000 2.061050000 1.395790000 3.073830000 331 36.76930000 16.44700000 17.27170000 7.134100000 4.636490000 2.516790000 332 37.09460000 26.82640000 20.69420000 8.129270000 7.067370000 3.798080000 333 25.51780000 18.75460000 39.08400000 5.712540000 4.009590000 12.86970000 334 27.33520000 20.64430000 100.0000000 22.72590000 11.19630000 99.50230000 335 47.34010000 45.70100000 100.0000000 33.27150000 24.47940000 100.9110000 336 72.69930000 68.53870000 100.0000000 55.50890000 49.60950000 103.5460000 337 51.56140000 60.10030000 71.14460000 28.39360000 30.96230000 49.81930000 338 66.73860000 80.78550000 100.0000000 54.12400000 58.98470000 104.6570000 339 71.59810000 90.67160000 100.0000000 61.43970000 72.36810000 106.1200000 340 76.22120000 100.0000000 100.0000000 69.11500000 86.62660000 107.6810000 341 16.75780000 22.74710000 16.91260000 2.227210000 3.152900000 2.315440000 342 19.80140000 36.69300000 27.17170000 4.755290000 8.190100000 6.501310000 343 46.53740000 90.01660000 29.16650000 26.69940000 55.80890000 12.70760000 344 57.41510000 37.87230000 11.37400000 19.37300000 16.25530000 2.464440000 345 74.30470000 69.78030000 0.000000000 38.42180000 43.90820000 4.609260000 346 77.74280000 86.42850000 0.000000000 46.61380000 62.61180000 6.681150000 347 38.67110000 46.73790000 0.000000000 10.62040000 15.45680000 1.661130000 348 50.44520000 48.77810000 0.000000000 16.63180000 19.53970000 2.057370000 349 69.29800000 49.35480000 0.000000000 29.67030000 26.54970000 2.701610000 350 48.51100000 0.000000000 38.91620000 14.11230000 7.003470000 12.98970000 351 49.13540000 0.000000000 52.48680000 16.64570000 8.055520000 24.58310000 352 49.99560000 0.000000000 67.70190000 20.53740000 9.666530000 42.62630000 353 65.28100000 0.000000000 66.72040000 30.30490000 14.73200000 41.76710000 354 100.0000000 0.000000000 68.16060000 65.77290000 32.97690000 45.36870000 355 57.14620000 30.58480000 28.17860000 19.37900000 13.78570000 7.426950000 356 74.80690000 46.54030000 41.39260000 36.61600000 28.45530000 16.98820000 357 85.87730000 63.31210000 54.45970000 52.99700000 46.21060000 30.56640000 358 56.74700000 46.86570000 38.86320000 22.44810000 21.34320000 14.51400000 359 66.70930000 55.96870000 38.25030000 31.12730000 30.62260000 15.05720000 360 80.98850000 100.0000000 56.99070000 60.29010000 83.62060000 37.55060000 361 90.81880000 100.0000000 65.21090000 72.56760000 89.73320000 47.96500000 362 100.0000000 100.0000000 77.38150000 86.93370000 96.75220000 66.16910000 363 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 364 30.39740000 39.51180000 24.80990000 7.488380000 10.65810000 5.736020000 365 38.72000000 42.55920000 25.88700000 10.95540000 13.66020000 6.490000000 366 49.91420000 53.90190000 32.68380000 18.88610000 23.20940000 10.87580000 367 54.68160000 90.30800000 45.06210000 33.37810000 59.32130000 23.53730000 368 0.000000000 21.97950000 31.25550000 2.121140000 2.824320000 7.933580000 369 0.000000000 19.81900000 49.74170000 4.579720000 3.405590000 21.54200000 370 0.000000000 58.70950000 77.01410000 16.34790000 23.68450000 58.00350000 371 0.000000000 70.80800000 83.19180000 21.24050000 34.38460000 69.44270000 372 0.000000000 32.68660000 40.45510000 4.158440000 6.392710000 14.15120000 373 28.64420000 32.50730000 76.93320000 15.82830000 11.43010000 56.45360000 374 27.02440000 34.41750000 100.0000000 23.84280000 15.20970000 99.95540000 375 49.67160000 32.89290000 100.0000000 32.80660000 19.34870000 100.3190000 376 24.47990000 21.37350000 63.63280000 10.19870000 6.239320000 37.04070000 377 35.46050000 27.26590000 77.05490000 17.57250000 10.88490000 56.55960000 378 30.90700000 14.96690000 36.92610000 6.748960000 4.052330000 11.39580000 379 41.02860000 15.22230000 39.04290000 10.80360000 6.142150000 13.02190000 380 51.91390000 17.55460000 60.66040000 20.31300000 10.90730000 33.81090000 381 24.13580000 0.000000000 20.72490000 3.121880000 1.541380000 3.230340000 382 23.68790000 0.000000000 31.70570000 3.933850000 1.854340000 8.040300000 383 33.31960000 0.000000000 50.08030000 9.256460000 4.297220000 21.90260000 384 32.19610000 12.94520000 65.15630000 12.31320000 6.093440000 38.94240000 385 91.89670000 39.36390000 90.24650000 65.29650000 38.77320000 82.25190000 386 35.16760000 0.000000000 17.00670000 6.174530000 3.139470000 2.285760000 387 43.99910000 0.000000000 14.33630000 9.742940000 4.993250000 1.827680000 388 78.48560000 37.25380000 13.83140000 36.21000000 24.70340000 3.670160000 389 88.54510000 100.0000000 22.41300000 63.38870000 85.76910000 12.83150000 390 0.000000000 26.36570000 48.81810000 4.877130000 4.898950000 20.85580000 391 0.000000000 30.83960000 64.65330000 8.608240000 7.604690000 38.51890000 392 0.000000000 33.45560000 82.82940000 14.10610000 10.61980000 66.13880000 393 0.000000000 69.65890000 100.0000000 27.19750000 35.85240000 102.3180000 394 0.000000000 79.06370000 100.0000000 29.88790000 44.94940000 103.3420000 395 37.14710000 79.31540000 90.70230000 32.86380000 47.12660000 84.53190000 396 46.10140000 86.13990000 89.53740000 38.62830000 56.50500000 83.32140000 397 94.90740000 94.90740000 94.90740000 84.72490000 89.13840000 97.07070000 398 97.41780000 97.41780000 97.41780000 89.73180000 94.40620000 102.8070000 399 14.63100000 14.63100000 14.63100000 1.387360000 1.459640000 1.589530000 400 10.34060000 10.34060000 10.34060000 0.646705000 0.680394000 0.740941000 401 60.07620000 0.000000000 17.42670000 19.20900000 9.857820000 3.006370000 402 64.99130000 27.45420000 83.98400000 36.25780000 20.31010000 68.98650000 403 34.05730000 74.01720000 45.08950000 18.23560000 36.45770000 21.09550000 404 58.13580000 76.79610000 54.87390000 32.90540000 46.13390000 31.25910000 405 63.16330000 100.0000000 74.33340000 49.35220000 77.47930000 59.68040000 406 18.70330000 35.46280000 19.33380000 3.849620000 7.364870000 3.461480000 407 25.89860000 43.38580000 19.56920000 6.433400000 11.73080000 4.007770000 408 49.46870000 60.32530000 30.79420000 19.78340000 27.53200000 10.33420000 409 59.56480000 64.75250000 31.36390000 27.05870000 34.22500000 11.32190000 410 39.93670000 49.08660000 20.35140000 12.10840000 17.29480000 4.826500000 411 41.07040000 59.99740000 44.41420000 17.33830000 25.86080000 19.31420000 412 48.19600000 76.53800000 56.15020000 27.17760000 42.93100000 32.32660000 413 0.000000000 34.40370000 0.000000000 1.775480000 6.003220000 0.676341000 414 0.000000000 53.19150000 0.000000000 4.629040000 15.65160000 1.763360000 415 64.29740000 57.00730000 0.000000000 27.22530000 29.48580000 3.076370000 416 39.01960000 27.89010000 0.000000000 8.398640000 7.537170000 0.767281000 417 44.73110000 27.14920000 35.84160000 12.85600000 9.423250000 11.24210000 418 67.14270000 25.13390000 35.85700000 26.87860000 16.18180000 11.85370000 419 67.18770000 27.10410000 44.87760000 28.33330000 17.24680000 18.54560000 420 68.20810000 24.98730000 100.0000000 44.56100000 23.31830000 100.6260000 421 86.02510000 23.87680000 100.0000000 61.03380000 31.57240000 101.3700000 422 100.0000000 31.11260000 100.0000000 77.91560000 42.07680000 102.3700000 423 9.661840000 9.661840000 9.661840000 0.557002000 0.586018000 0.638167000 424 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 425 0.000000000 42.89730000 33.78270000 4.614710000 10.44480000 10.21230000 426 0.000000000 52.85810000 48.26330000 8.357160000 16.95330000 21.70990000 427 0.000000000 61.02520000 66.28040000 13.87950000 24.21980000 42.50680000 428 0.000000000 15.92770000 20.30960000 0.891507000 1.329730000 3.100620000 429 0.000000000 23.47150000 25.66580000 1.711300000 2.967430000 5.271740000 430 0.000000000 44.28010000 59.99380000 9.211200000 12.90470000 33.40340000 431 0.000000000 52.29940000 80.79110000 16.23330000 19.78920000 63.70900000 432 0.000000000 51.43290000 100.0000000 23.11940000 22.06390000 100.7640000 433 0.000000000 60.60580000 100.0000000 24.98800000 28.38200000 101.4760000 434 0.000000000 18.66660000 36.73820000 2.543510000 2.396880000 11.13570000 435 23.51160000 29.64040000 40.78640000 6.287240000 6.605000000 14.39130000 436 30.62460000 49.68600000 41.46900000 10.97330000 16.76190000 16.02270000 437 58.46090000 100.0000000 42.15630000 39.08070000 72.99100000 22.72860000 438 34.90260000 71.66810000 25.03880000 15.50970000 33.44780000 8.380290000 439 35.04580000 91.44350000 31.99190000 22.52320000 55.10750000 14.15950000 440 0.000000000 67.64710000 0.000000000 7.854230000 26.55660000 2.991940000 441 0.000000000 73.17070000 0.000000000 9.334090000 31.56020000 3.555670000 442 0.000000000 79.11390000 0.000000000 11.08310000 37.47380000 4.221910000 443 0.000000000 85.52630000 0.000000000 13.15520000 44.48000000 5.011250000 444 0.000000000 84.49370000 40.06620000 15.32630000 44.31460000 18.14120000 445 0.000000000 79.41630000 82.48970000 23.50100000 42.71910000 69.17080000 446 0.000000000 89.01930000 100.0000000 33.18610000 56.10100000 104.5990000 447 0.000000000 100.0000000 100.0000000 37.37370000 70.26020000 106.1940000 448 30.96530000 100.0000000 100.0000000 41.75190000 72.51770000 106.3990000 449 30.97460000 42.08160000 47.21720000 10.75950000 13.05370000 20.28970000 450 33.37550000 48.56090000 59.06940000 14.86450000 17.83760000 32.82850000 451 37.95250000 59.08290000 68.44050000 20.85510000 26.52000000 45.59570000 452 15.38460000 0.000000000 0.000000000 0.940137000 0.484751000 0.044039100 453 17.71650000 0.000000000 0.000000000 1.282290000 0.661171000 0.060066600 454 13.76360000 9.407320000 0.000000000 0.838478000 0.726139000 0.073531300 455 8.992810000 8.992810000 8.992810000 0.475685000 0.500465000 0.545001000 456 85.52630000 0.000000000 0.000000000 40.89200000 21.08460000 1.915510000 457 92.46580000 0.000000000 0.000000000 48.54560000 25.03100000 2.274040000 458 100.0000000 0.000000000 0.000000000 57.67210000 29.73670000 2.701550000 459 100.0000000 44.09100000 0.000000000 60.73600000 40.09630000 3.868680000 460 100.0000000 60.35340000 0.000000000 63.78340000 50.40040000 5.029580000 461 100.0000000 75.46010000 0.000000000 67.66050000 63.50940000 6.506480000 462 100.0000000 87.00010000 0.000000000 71.33090000 75.91980000 7.904670000 463 22.76450000 11.02190000 0.000000000 2.370800000 1.638670000 0.159585000 464 25.42370000 0.000000000 0.000000000 2.837640000 1.463130000 0.132924000 465 81.60630000 0.000000000 43.93740000 39.96720000 20.25110000 17.97220000 466 80.64530000 0.000000000 56.28940000 41.25270000 20.65570000 29.69400000 467 81.36540000 0.000000000 69.26350000 45.03600000 22.25090000 45.91660000 468 42.89840000 11.27580000 60.99070000 15.46340000 7.677220000 33.89290000 469 64.37420000 0.000000000 81.52770000 33.90250000 16.09190000 64.28560000 470 82.32600000 0.000000000 85.21530000 50.84010000 24.68330000 71.48550000 471 19.15730000 16.20490000 0.000000000 1.861910000 1.931600000 0.200491000 472 18.60620000 22.32660000 0.000000000 2.114200000 3.055970000 0.328231000 473 18.68080000 25.60970000 12.22420000 2.553450000 3.953400000 1.395360000 474 24.96730000 33.12060000 0.000000000 4.359920000 6.927830000 0.749839000 475 36.05680000 68.36980000 0.000000000 14.15900000 30.33960000 3.349330000 476 49.16990000 100.0000000 0.000000000 30.65790000 68.97370000 7.634630000 477 66.64580000 100.0000000 29.65080000 43.47880000 75.43420000 15.01480000 478 28.31360000 83.02700000 0.000000000 15.92020000 43.52540000 4.863250000 479 28.22560000 100.0000000 0.000000000 22.12460000 64.57370000 7.234900000 480 66.40940000 100.0000000 0.000000000 41.99620000 74.81990000 8.165760000 481 83.57900000 100.0000000 0.000000000 57.42570000 82.77560000 8.888520000 482 100.0000000 100.0000000 0.000000000 76.22550000 92.46910000 9.769170000 483 0.000000000 0.000000000 28.26090000 1.168590000 0.467419000 6.154980000 484 0.000000000 100.0000000 59.36660000 24.53200000 65.12370000 38.55670000 485 0.000000000 100.0000000 73.62370000 28.15120000 66.57130000 57.61890000 486 0.000000000 100.0000000 87.02060000 32.41590000 68.27720000 80.08150000 487 28.20150000 100.0000000 87.03160000 35.98420000 70.11660000 80.26880000 488 51.76220000 100.0000000 87.26910000 46.05560000 75.29990000 81.17560000 489 55.31410000 100.0000000 100.0000000 53.05590000 78.34620000 106.9290000 490 61.65240000 73.78870000 66.66740000 37.13160000 45.50020000 45.19300000 491 84.17250000 77.10810000 75.21300000 60.01570000 59.79720000 58.82180000 492 78.02510000 0.000000000 17.64080000 33.83140000 17.39610000 3.748680000 493 100.0000000 0.000000000 18.04200000 58.10760000 29.91090000 4.995560000 494 100.0000000 0.000000000 43.84520000 60.74210000 30.96470000 18.87110000 495 100.0000000 0.000000000 56.06870000 62.94450000 31.84560000 30.47120000 496 100.0000000 49.58330000 72.31070000 70.86380000 46.83790000 52.80230000 497 100.0000000 48.92550000 85.51720000 74.86500000 48.09610000 74.43720000 498 100.0000000 49.68610000 100.0000000 80.47690000 50.73700000 103.3460000 499 9.402700000 6.208700000 21.09590000 0.973793000 0.548878000 3.266180000 500 14.28330000 0.000000000 19.35560000 1.306800000 0.615027000 2.714840000 501 10.75720000 10.05140000 18.07260000 0.983790000 0.796580000 2.367800000 502 33.39290000 56.08370000 24.60740000 11.23120000 20.59420000 6.762740000 503 45.56870000 64.19190000 23.76070000 18.03690000 29.26370000 7.348880000 504 46.02010000 85.70260000 71.49480000 32.67720000 53.67650000 52.91640000 505 18.87940000 35.77900000 32.50380000 4.999540000 7.939830000 9.178270000 506 18.52290000 34.46480000 38.32060000 5.479550000 7.669000000 12.76970000 507 23.13410000 51.17230000 64.65990000 13.77110000 18.44900000 39.72320000 508 31.08310000 63.10960000 69.38170000 19.58030000 28.44160000 47.14120000 509 14.30030000 31.06670000 40.71960000 4.828330000 6.253040000 14.32030000 510 25.80520000 39.33690000 74.34750000 15.12250000 13.49490000 52.69610000 511 25.07550000 44.09830000 88.51620000 20.20980000 17.53920000 77.09850000 512 26.86140000 45.55740000 100.0000000 25.31530000 20.31150000 100.5310000 513 9.068440000 30.84390000 30.38450000 3.060810000 5.421070000 7.763890000 514 58.80910000 43.71920000 29.23570000 22.21060000 19.92430000 8.617720000 515 84.43100000 47.02930000 49.42540000 47.27540000 34.03220000 24.25060000 516 89.10610000 55.77550000 49.17390000 53.83970000 42.02720000 24.86230000 517 89.87960000 88.09380000 100.0000000 78.46930000 78.51450000 106.6110000 518 0.000000000 18.55460000 79.08870000 11.69130000 6.037690000 59.34650000 519 12.03300000 21.43160000 90.48280000 16.27920000 8.443930000 79.81980000 520 7.675180000 30.22020000 87.52420000 15.57830000 10.23450000 74.46440000 521 21.06140000 36.61740000 89.66690000 18.71870000 13.77520000 78.84970000 522 40.04730000 43.86710000 88.87790000 25.25920000 20.02690000 78.00020000 523 58.57320000 73.41490000 87.89330000 41.35910000 46.63100000 79.04890000 524 72.14380000 78.64290000 95.34270000 56.01120000 58.26560000 94.74050000 525 52.95820000 59.78190000 79.66200000 31.65000000 32.14930000 63.06740000 526 64.61380000 61.33380000 81.02250000 40.25080000 37.52830000 65.84710000 527 11.50680000 18.36220000 27.96730000 2.084740000 2.221790000 6.208520000 528 0.000000000 15.20380000 25.85200000 1.255350000 1.380630000 5.172090000 529 55.02720000 12.56890000 25.24530000 16.60950000 9.014350000 5.602480000 530 81.20020000 19.77810000 42.28510000 39.84090000 21.72080000 16.84020000 531 83.34290000 25.91930000 63.59030000 46.53780000 25.92090000 38.79960000 532 87.51240000 56.06370000 75.31490000 58.29530000 43.78260000 57.13460000 533 38.58640000 30.65550000 38.03170000 10.72600000 9.218670000 12.68350000 534 51.07150000 35.74310000 37.07190000 17.21150000 14.16270000 12.53150000 535 89.78150000 36.19770000 36.97500000 49.59600000 31.01810000 14.00310000 536 54.08340000 26.04710000 32.82070000 17.51170000 11.60060000 9.618420000 537 57.07320000 46.90870000 48.88190000 24.21030000 22.09350000 22.66240000 538 58.07540000 60.89580000 48.11200000 27.45400000 31.58090000 23.02530000 539 68.11580000 67.77160000 58.04800000 38.36440000 41.72140000 34.13660000 540 67.28720000 84.84200000 75.19990000 47.10990000 60.16470000 59.01570000 541 12.86350000 43.05350000 26.88680000 4.589060000 10.57690000 6.653260000 542 11.59870000 59.32430000 31.07870000 7.829930000 20.73320000 9.851120000 543 17.53970000 58.99770000 60.91730000 13.39520000 22.83420000 35.59960000 544 45.26480000 58.53600000 62.21710000 22.43250000 27.17380000 37.55950000 545 58.66030000 63.12840000 68.23080000 32.71010000 35.25930000 46.16970000 546 23.48550000 60.04390000 11.32730000 8.582650000 21.72290000 3.237650000 547 34.53460000 90.80680000 61.40930000 27.01340000 56.18970000 39.89880000 548 92.17620000 90.95840000 62.03520000 69.86040000 78.42350000 42.68250000 549 52.96690000 15.16510000 10.24260000 14.67420000 8.391490000 1.439900000 550 52.59320000 10.69570000 16.06930000 14.50910000 7.831750000 2.487550000 551 63.29070000 0.000000000 40.47900000 23.66490000 11.90430000 14.55230000 552 65.93270000 81.43110000 80.31520000 46.50520000 56.47590000 66.78910000 553 67.71130000 81.37770000 90.36080000 51.31760000 58.51100000 84.95780000 554 77.89580000 92.02840000 92.76140000 64.70420000 75.80620000 91.47490000 555 48.21840000 48.88570000 57.39380000 20.99030000 21.19850000 31.24130000 556 61.66690000 48.49100000 64.96280000 30.98320000 25.95530000 40.76000000 557 68.24290000 47.48470000 77.79940000 39.33210000 29.36220000 59.61170000 558 63.51850000 40.96810000 65.29950000 31.23550000 22.72310000 40.81590000 559 76.34300000 65.98860000 68.14570000 47.38690000 44.80830000 46.97170000 560 40.94450000 32.53420000 33.75880000 11.39060000 10.17290000 10.07650000 561 72.49990000 33.88910000 33.01570000 31.79530000 21.12590000 10.65080000 562 82.11770000 64.37920000 47.45910000 48.09130000 44.55890000 23.68110000 563 81.86400000 67.08980000 62.08240000 51.44890000 47.86620000 39.42190000 564 85.75650000 68.69070000 79.34550000 60.57260000 53.20140000 64.61720000 565 45.31310000 36.12500000 7.292950000 12.15020000 11.92240000 1.539720000 566 84.22670000 44.91520000 0.000000000 42.72910000 31.17660000 3.067740000 567 87.09930000 79.63280000 11.72110000 53.97650000 60.03080000 7.165380000 568 86.65720000 83.88610000 0.000000000 54.69720000 64.32810000 6.773980000 569 42.91690000 41.96390000 58.32300000 17.47310000 16.21960000 31.75170000 570 43.78200000 51.31120000 58.09340000 19.35470000 21.57590000 32.09140000 571 57.55920000 54.22480000 60.41720000 28.15900000 27.63890000 35.36900000 572 21.95830000 21.65290000 33.83260000 4.433130000 3.922820000 9.483750000 573 21.17400000 33.22870000 60.97350000 9.882940000 9.076110000 34.10940000 574 27.75220000 81.45970000 65.17000000 22.59910000 44.67080000 43.32140000 575 19.70850000 48.13600000 23.23100000 6.096550000 13.70480000 5.491340000 576 52.82230000 86.11890000 21.05280000 28.13830000 52.71160000 8.972770000 577 71.76890000 91.14470000 29.10490000 44.18350000 65.99610000 13.63290000 578 82.79230000 92.27470000 30.83920000 55.03470000 72.76260000 15.16350000 579 26.09350000 35.22020000 12.56410000 5.070640000 7.948890000 1.888000000 580 24.89190000 37.76380000 50.58130000 9.091780000 10.44670000 23.09820000 581 26.79820000 42.69810000 64.60600000 13.24170000 14.17630000 39.16290000 582 20.12430000 9.073140000 27.10410000 2.857720000 1.621570000 5.730050000 583 17.95530000 13.64900000 28.64270000 2.756640000 1.948280000 6.489740000 584 17.01950000 9.087910000 37.16050000 3.402720000 1.780080000 11.32960000 585 38.77170000 23.88210000 37.84920000 10.19550000 7.279780000 12.34090000 586 49.13650000 41.78010000 39.41800000 17.23740000 16.40640000 14.39780000 587 52.67440000 56.06150000 49.63760000 23.31260000 26.44390000 23.88180000 588 56.86050000 64.85230000 55.59190000 28.99510000 34.86440000 30.76030000 589 43.23650000 39.73090000 28.39750000 12.74050000 13.41540000 7.576190000 590 52.47270000 46.14780000 29.80180000 18.66530000 19.17800000 8.861630000 591 60.63450000 50.70080000 58.29870000 29.10230000 26.27840000 32.74260000 592 29.90980000 21.50360000 33.89410000 6.431160000 4.924490000 9.610370000 593 89.38560000 19.25960000 37.68070000 47.75580000 25.78970000 13.88690000 594 95.02470000 18.70980000 48.21610000 55.79790000 29.66560000 22.51970000 595 88.59890000 14.59930000 80.61830000 56.18010000 28.38480000 63.89150000 596 92.40700000 13.91400000 93.38620000 64.91120000 32.29200000 87.64080000 597 43.69110000 21.47710000 73.77760000 19.60680000 10.79980000 51.46120000 598 46.14500000 64.57880000 78.65610000 28.71890000 33.84710000 61.65790000 599 14.60860000 8.539020000 14.65450000 1.197530000 0.823037000 1.522890000 600 10.39080000 0.000000000 12.26780000 0.583088000 0.279087000 1.000760000 601 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 602 51.69650000 36.50120000 49.47760000 19.54150000 15.40780000 22.49590000 603 64.63530000 44.46260000 52.16280000 29.70670000 23.74050000 25.91570000 604 65.11350000 87.85970000 67.26440000 44.27440000 61.91460000 47.81150000 605 11.83970000 35.83860000 12.55670000 2.667190000 6.918700000 1.798450000 606 12.71670000 34.46920000 57.83660000 8.046300000 8.605160000 30.44000000 607 15.72280000 42.42700000 73.84510000 13.46290000 13.89200000 52.00490000 608 37.59210000 65.47970000 88.61090000 28.44400000 33.94940000 79.07990000 609 41.02160000 92.56610000 90.36250000 38.84140000 63.14520000 85.66680000 610 53.80680000 72.02450000 59.08850000 29.69030000 40.45920000 35.29110000 611 67.73100000 72.94380000 65.45530000 41.16220000 46.93230000 43.70940000 612 77.82630000 77.61650000 70.06720000 52.46440000 56.50840000 50.94070000 613 39.15790000 38.27500000 74.09890000 19.31570000 15.26630000 52.47040000 614 49.13100000 38.34710000 88.09940000 28.58070000 19.54880000 76.44390000 615 22.83870000 18.08740000 49.47470000 6.677410000 4.217180000 21.35920000 616 32.31590000 14.91800000 54.12260000 9.970050000 5.386560000 26.02690000 617 41.91270000 24.39750000 89.90530000 24.24670000 13.16920000 79.15950000 618 70.65270000 42.23470000 92.02910000 45.32910000 29.54690000 84.89610000 619 71.96010000 61.32380000 92.33260000 50.09060000 42.13930000 86.89720000 620 12.14710000 30.17150000 69.76000000 10.41420000 8.195990000 45.43290000 621 9.859530000 38.63590000 82.51260000 14.97700000 12.86290000 65.84240000 622 12.90590000 46.70480000 89.71460000 18.94030000 18.01700000 79.43200000 623 11.64000000 70.50490000 88.76430000 23.59240000 35.14110000 79.57100000 624 0.000000000 68.90710000 62.31780000 14.83130000 30.31720000 38.15050000 625 3.626780000 90.79130000 88.32090000 29.36350000 56.47390000 81.15140000 626 19.93050000 89.26820000 94.35710000 32.67900000 56.35410000 92.82350000 627 29.54740000 88.93940000 100.0000000 37.10700000 58.04150000 104.7730000 628 0.000000000 23.72250000 68.63370000 9.008920000 5.940400000 43.61970000 629 15.95020000 24.13020000 73.38940000 11.36240000 7.088700000 50.55590000 630 22.12750000 27.83700000 88.20520000 17.48620000 10.55810000 75.74000000 631 20.46850000 49.67820000 99.63830000 24.41560000 21.84410000 99.93950000 632 55.72050000 35.05070000 19.99750000 18.33260000 14.69000000 4.327780000 633 72.11190000 43.70960000 16.90770000 31.48250000 24.80280000 4.450030000 634 93.94690000 70.52280000 13.00920000 59.09170000 55.10890000 6.751180000 635 53.51860000 42.12570000 19.68880000 17.88370000 17.10220000 4.518820000 636 54.97980000 66.55730000 20.32450000 23.61910000 33.83010000 6.592930000 637 78.45870000 72.48370000 89.91900000 57.86730000 54.31280000 83.53640000 638 86.76820000 75.11430000 100.0000000 70.91760000 62.72490000 104.8700000 639 57.76150000 15.75480000 34.41140000 19.36930000 10.69200000 10.42010000 640 58.43770000 14.08120000 43.67190000 20.98820000 11.18330000 16.95310000 641 62.17370000 15.52170000 68.47530000 28.77150000 14.77260000 44.16900000 642 67.82410000 29.80810000 68.24010000 33.97210000 20.28920000 44.42030000 643 91.33470000 46.00480000 74.26220000 60.39510000 39.64930000 55.01530000 644 16.99440000 30.03670000 8.382350000 2.568090000 5.089470000 0.981643000 645 19.73750000 44.05050000 10.71100000 4.822200000 11.23240000 1.969690000 646 73.89380000 57.42590000 29.25780000 36.38820000 34.31510000 10.11830000 647 75.99160000 77.81260000 35.67100000 44.16770000 53.16970000 15.81920000 648 75.32540000 89.14160000 43.36090000 48.33170000 65.86470000 22.71700000 649 46.99060000 45.95540000 24.50830000 15.16620000 17.33810000 6.291030000 650 57.70370000 72.67260000 34.06430000 28.16790000 40.66870000 13.59030000 651 69.29610000 77.33870000 42.43990000 39.14360000 50.06570000 20.27390000 652 68.79190000 77.18890000 53.54420000 40.59530000 50.46520000 30.27990000 653 12.07240000 18.46860000 54.46050000 5.949150000 3.790890000 26.24610000 654 11.86590000 15.00040000 69.67540000 9.319210000 4.641820000 44.91410000 655 22.29430000 10.79930000 73.95510000 11.95760000 5.442690000 51.20560000 656 20.19410000 68.82670000 77.60720000 20.64560000 32.77800000 59.95020000 657 15.73630000 70.37960000 57.63760000 15.15930000 31.72340000 32.81780000 658 50.22060000 89.08970000 58.21110000 32.79700000 57.48620000 36.23280000 659 62.09130000 91.65380000 59.65430000 41.58050000 64.63370000 38.60770000 660 34.74110000 46.91270000 34.95080000 11.01510000 15.52700000 11.42280000 661 87.96790000 56.02010000 38.70950000 51.02520000 40.90530000 16.30850000 662 92.78210000 67.02850000 46.00510000 60.02120000 52.61010000 23.19650000 663 82.62510000 58.89350000 64.65700000 50.90740000 42.00910000 41.97350000 664 93.71120000 64.23400000 75.11790000 67.03560000 53.48950000 57.84690000 665 100.0000000 66.89390000 100.0000000 84.15560000 63.17520000 104.7470000 666 41.93890000 53.10690000 70.73370000 21.93290000 23.51120000 48.44660000 667 45.58220000 71.30090000 76.52070000 29.51220000 39.27610000 58.86810000 668 36.27570000 55.18660000 56.05250000 16.48960000 22.27670000 29.95460000 669 48.90600000 75.53090000 65.80150000 29.46810000 43.00890000 43.85980000 670 54.75850000 92.56710000 72.48000000 40.26580000 64.55010000 55.52240000 671 21.24640000 30.58590000 20.70020000 3.872180000 5.856510000 3.715380000 672 22.45210000 30.28970000 26.21000000 4.490870000 6.046000000 5.827470000 673 37.92290000 29.52830000 44.04990000 11.20750000 9.055700000 17.13960000 674 90.19430000 34.96770000 76.83810000 58.34520000 34.13760000 58.38650000 675 36.97180000 0.000000000 26.63330000 7.491400000 3.744100000 5.705090000 676 35.69730000 0.000000000 36.75410000 8.068440000 3.919390000 11.25030000 677 39.23270000 12.00510000 47.27560000 11.16570000 5.840580000 19.49480000 678 57.58700000 15.03630000 75.99160000 27.71160000 13.92290000 55.10820000 679 74.20790000 13.49240000 78.24750000 41.12670000 20.58610000 59.28550000 680 74.37890000 17.48020000 91.09090000 45.80770000 22.99440000 82.29740000 681 1.655630000 0.000000000 0.000000000 0.006983540 0.003600840 0.000327132 682 47.83540000 43.35030000 13.53220000 14.57690000 15.94800000 2.876810000 683 75.46810000 59.68060000 6.363630000 37.06230000 36.19090000 3.957970000 684 9.628340000 19.20280000 12.06330000 1.007590000 1.909980000 1.149840000 685 11.22560000 26.30100000 13.28770000 1.675950000 3.656990000 1.567450000 686 24.23380000 79.48350000 28.83870000 14.97270000 39.66540000 10.82020000 687 23.81310000 85.87140000 44.43940000 18.89160000 47.40740000 21.82630000 688 38.65260000 89.89050000 49.84960000 25.87780000 54.92940000 27.36760000 689 22.28810000 50.82110000 38.18260000 8.576800000 16.15980000 13.62410000 690 19.35040000 57.71510000 37.25210000 9.241360000 20.38990000 13.48240000 691 78.62690000 58.72220000 90.60060000 54.88800000 43.03810000 83.56710000 692 36.07460000 27.47210000 63.54930000 14.15240000 9.596180000 37.27450000 693 53.26200000 27.10340000 72.22680000 24.68370000 14.67440000 49.54210000 694 58.39430000 34.07820000 88.65390000 33.84690000 20.76470000 77.55160000 695 87.93660000 50.03740000 89.49980000 62.26200000 41.99450000 81.24450000 696 95.43640000 72.90260000 89.11140000 75.90650000 63.98210000 82.89250000 697 29.97630000 45.10490000 11.64510000 7.463720000 13.05910000 2.293790000 698 30.69590000 55.57700000 12.08900000 9.573260000 19.52370000 3.094120000 699 44.68770000 63.93370000 38.51350000 19.05510000 29.43700000 15.26010000 700 56.89620000 76.32130000 44.32990000 30.07150000 44.48750000 21.24800000 701 82.85070000 75.46980000 62.78070000 54.88340000 56.14770000 41.20170000 702 91.97170000 75.27310000 62.82480000 64.68240000 61.03510000 41.69610000 703 94.26290000 84.45740000 86.97950000 77.28920000 74.91890000 80.18480000 704 16.57390000 15.05020000 20.35330000 1.963350000 1.772470000 3.152040000 705 27.20130000 10.21380000 41.49730000 6.135180000 3.200950000 14.52720000 706 34.86860000 23.94010000 47.01620000 10.06370000 7.066980000 19.42440000 707 40.89550000 34.60330000 59.61660000 15.90380000 12.65540000 32.84440000 708 48.09940000 36.05440000 74.13960000 23.24700000 16.49970000 52.62360000 709 55.11040000 48.26320000 89.34510000 33.98330000 26.53490000 79.52440000 710 44.20600000 27.77180000 48.52490000 14.52420000 10.22210000 21.08060000 711 56.35500000 32.19680000 53.93140000 22.71360000 15.54930000 26.84470000 712 76.07290000 34.37430000 57.58160000 38.96820000 24.52440000 31.59990000 713 62.54340000 41.59670000 34.26350000 25.02640000 20.42200000 11.39040000 714 87.38480000 46.35990000 37.90040000 48.52130000 34.56490000 15.04800000 715 91.62620000 74.23890000 36.93380000 59.32320000 57.95830000 16.98790000 716 94.96350000 88.59660000 40.29590000 68.24230000 75.62930000 21.25660000 717 11.59730000 17.54410000 35.92540000 2.889600000 2.417810000 10.61070000 718 11.35670000 22.20100000 36.65720000 3.230510000 3.367880000 11.18710000 719 9.224960000 49.37530000 50.13390000 8.357620000 15.09410000 23.22400000 720 15.12220000 77.14930000 54.26150000 16.29790000 37.88670000 29.87630000 721 13.95990000 91.02680000 70.12990000 24.47160000 54.85590000 51.20820000 722 8.801540000 45.54630000 56.27190000 8.880510000 13.39410000 29.25790000 723 33.93570000 55.43200000 73.26890000 19.92020000 23.69780000 52.19870000 724 35.34000000 70.69750000 87.43490000 28.51700000 37.88340000 77.35140000 725 51.75030000 75.76710000 87.09130000 37.51090000 46.61460000 77.61790000 726 76.88510000 77.97290000 87.01470000 56.94750000 58.52090000 78.60770000 727 22.53600000 17.75750000 26.69910000 3.622580000 2.936730000 5.691510000 728 41.99390000 16.46160000 27.76110000 10.03060000 6.047750000 6.452640000 729 68.11960000 12.62490000 27.78040000 26.11220000 13.89490000 7.163070000 730 86.29470000 4.315910000 39.10640000 44.11000000 22.52080000 14.53400000 731 86.50680000 26.31410000 54.69100000 47.90640000 26.94580000 28.63030000 732 87.03620000 66.50670000 90.03470000 65.00290000 53.46980000 83.56420000 733 89.37220000 77.75840000 92.36590000 71.51950000 65.62390000 89.41650000 734 18.51640000 28.19380000 47.91700000 6.291200000 6.096290000 20.15970000 735 15.45590000 39.99650000 49.22940000 7.383120000 10.43480000 21.84690000 736 10.65030000 56.97550000 67.38310000 13.70200000 21.58060000 43.67470000 737 0.000000000 84.90430000 76.30550000 23.32910000 47.92480000 59.62090000 738 61.85190000 90.17980000 76.77430000 45.35470000 64.52410000 62.00090000 739 63.64750000 91.66300000 89.88960000 51.56030000 68.76650000 85.24910000 740 18.71060000 20.14780000 10.25200000 2.118870000 2.646480000 0.938053000 741 36.59640000 21.60570000 12.30120000 7.148110000 5.492960000 1.527340000 742 72.63070000 20.25670000 11.49780000 29.26120000 16.65610000 2.399830000 743 87.90050000 25.72380000 12.10560000 44.54790000 25.63300000 3.345080000 744 90.06040000 37.89740000 10.14770000 48.13080000 31.09650000 3.629710000 745 90.23640000 50.60140000 17.18570000 50.54790000 37.90380000 5.796580000 746 91.16460000 73.03130000 74.06500000 66.07570000 59.58070000 56.96510000 747 92.58780000 82.58100000 75.14070000 70.90410000 70.29940000 59.79060000 748 58.42590000 53.92620000 49.36390000 26.44330000 26.84500000 23.63200000 749 65.60650000 57.48070000 57.14160000 33.81070000 32.52920000 32.11220000 750 70.96160000 65.02630000 72.36270000 43.56320000 42.02710000 52.68010000 751 83.53550000 74.41220000 80.15630000 60.08460000 57.39830000 66.45210000 752 86.14380000 81.35410000 89.72810000 68.15790000 67.19930000 84.53850000 753 28.99590000 18.42700000 15.62640000 4.556300000 3.601460000 2.021100000 754 28.64070000 20.87310000 11.50500000 4.441240000 3.966600000 1.250970000 755 40.18270000 43.64920000 11.90920000 10.93680000 14.20640000 2.425470000 756 48.56570000 77.89640000 29.09000000 23.73650000 42.78910000 11.19130000 757 48.84430000 79.11500000 46.03620000 26.42970000 44.99260000 22.78080000 758 51.57780000 100.0000000 60.41780000 38.21370000 72.15110000 40.42580000 759 38.10780000 80.12550000 74.34330000 28.11310000 46.02090000 56.30960000 760 38.19260000 93.32050000 76.76190000 33.40170000 61.67340000 61.80760000 761 0.000000000 42.03920000 18.07970000 3.196590000 9.503830000 3.355590000 762 16.79660000 90.04700000 14.71190000 16.15150000 50.51420000 7.130300000 763 62.19030000 91.68230000 37.24080000 37.76330000 63.14640000 18.08130000 764 37.36260000 50.89790000 28.31910000 11.99230000 18.08700000 8.093300000 765 45.75160000 60.63760000 55.73790000 21.70960000 28.28640000 30.24680000 766 52.78780000 60.14890000 59.15890000 26.14860000 30.17900000 34.22080000 767 65.32970000 65.64960000 75.78480000 40.19420000 40.61320000 57.73240000 768 66.78700000 73.57140000 84.11060000 46.04730000 49.32590000 72.46230000 769 80.23890000 88.45360000 83.39270000 62.32650000 71.26980000 73.54730000 770 15.16630000 51.83780000 16.08190000 5.623170000 15.39400000 3.490210000 771 35.75920000 76.61460000 14.87850000 16.62110000 38.13150000 5.716890000 772 35.72520000 91.41890000 14.02160000 21.47730000 54.69100000 7.400610000 773 49.53730000 54.94350000 14.17350000 17.53140000 23.25450000 3.819280000 774 55.10710000 54.51690000 23.43230000 21.21380000 24.85130000 6.666370000 775 65.36630000 64.57530000 23.81870000 30.53410000 35.97130000 7.987500000 776 72.54500000 74.05460000 21.32070000 38.68420000 47.33670000 8.296430000 777 62.36270000 53.09380000 14.27730000 25.28620000 26.21920000 4.083670000 778 76.97140000 68.64020000 17.97140000 40.97430000 44.31700000 6.882950000 779 78.50870000 83.39640000 15.92500000 46.65040000 59.67860000 8.071000000 780 91.89650000 92.77870000 11.45040000 63.78490000 77.95640000 9.080890000 781 46.83040000 24.67000000 17.63840000 12.14270000 8.661460000 3.017520000 782 72.39240000 29.28660000 22.43880000 30.28960000 19.10690000 5.508090000 783 78.37780000 29.56640000 77.86800000 45.87910000 26.04650000 59.24830000 784 85.98830000 29.64980000 91.21030000 58.03240000 31.81350000 83.39470000 785 84.96000000 90.07760000 92.94480000 71.06600000 77.04000000 91.89790000 786 9.703500000 35.26060000 26.33170000 3.215700000 6.913040000 5.998550000 787 12.27040000 40.04490000 43.24450000 6.029290000 9.869170000 16.65760000 788 22.19740000 57.79360000 81.92670000 19.80160000 24.72660000 66.15810000 789 21.50360000 58.22550000 91.94430000 23.25720000 26.36580000 84.65200000 790 35.20390000 13.25330000 27.94300000 7.162990000 4.185910000 6.358670000 791 37.05120000 11.64790000 84.52180000 19.66250000 9.104860000 68.84900000 792 64.88370000 8.874620000 92.00050000 38.03210000 18.05680000 83.59720000 793 10.95300000 19.77060000 19.94000000 1.513120000 2.222050000 3.079340000 794 11.28070000 16.33190000 20.51580000 1.397870000 1.642350000 3.196800000 795 15.28540000 64.33040000 22.95540000 8.698760000 24.55080000 6.618350000 796 18.76440000 92.53490000 28.57800000 18.29570000 54.12130000 12.33500000 797 25.91470000 100.0000000 40.35810000 24.07140000 65.28170000 20.68170000 798 61.98710000 53.23050000 26.75320000 25.81840000 26.47880000 8.165760000 799 73.36640000 53.34810000 40.84590000 36.47140000 31.85240000 16.97820000 800 71.20630000 55.10220000 59.26900000 38.28840000 33.38860000 34.56110000 801 73.78790000 66.99200000 60.11990000 43.39000000 43.69220000 36.68750000 802 38.57210000 38.01570000 31.77340000 10.82070000 11.74150000 9.138610000 803 41.35360000 38.16750000 45.56630000 13.84380000 13.14450000 18.83560000 804 48.02590000 38.30230000 56.16430000 19.03420000 15.64490000 29.26880000 805 90.40200000 39.51290000 63.39320000 55.50890000 34.72150000 39.45890000 806 76.18840000 15.97430000 24.35890000 32.88270000 17.79880000 6.049920000 807 91.82920000 12.90640000 30.04040000 49.35570000 25.88310000 9.357650000 808 72.19690000 12.84680000 43.07090000 31.32740000 16.39460000 16.94540000 809 72.51470000 14.39610000 52.08300000 33.18980000 17.34380000 25.04450000 810 91.59580000 54.16980000 61.59830000 58.84920000 43.40120000 38.21380000 811 92.80020000 65.37240000 63.34730000 63.11350000 52.62100000 41.38740000 812 61.98590000 45.29900000 43.50890000 26.41520000 22.58850000 18.08030000 813 65.75150000 87.49490000 46.05500000 40.18600000 59.95650000 24.35890000 814 31.07790000 25.99000000 22.74650000 6.096420000 5.805350000 4.390330000 815 32.85770000 30.29580000 20.62760000 6.915300000 7.344670000 3.824730000 816 41.24240000 34.39390000 29.07880000 11.24150000 10.73700000 7.614640000 817 50.33930000 43.91510000 53.66930000 20.57260000 18.75670000 26.97700000 818 49.93970000 51.75240000 68.18170000 24.98960000 24.43600000 44.94300000 819 56.55530000 71.05650000 76.80580000 35.75140000 42.29310000 59.58620000 820 55.81640000 74.30050000 96.24750000 42.95300000 47.81070000 95.55640000 821 23.85520000 51.78770000 48.75790000 10.70910000 17.58050000 22.20180000 822 24.94430000 60.21300000 51.21310000 13.12150000 23.68920000 25.19740000 823 37.75150000 62.33180000 52.59570000 17.91080000 27.50530000 26.94290000 824 73.00520000 88.99990000 59.06180000 49.14030000 65.80030000 37.95680000 825 88.14240000 88.40700000 69.31240000 66.24760000 73.73240000 51.70550000 826 47.37390000 20.12120000 22.61040000 12.41460000 7.882380000 4.498870000 827 65.16550000 35.31430000 23.86430000 25.17410000 18.27570000 6.013240000 828 76.71660000 44.82590000 27.82970000 36.50380000 27.79620000 8.668910000 829 80.89490000 67.83500000 39.68450000 46.54740000 46.36010000 17.69090000 830 86.67850000 91.85180000 48.83290000 61.39430000 75.30770000 28.32810000 831 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 832 8.660330000 10.69900000 3.827460000 0.416141000 0.602798000 0.140082000 833 10.37070000 24.58310000 19.21070000 1.742750000 3.270240000 2.975020000 834 50.77640000 23.11490000 53.11050000 18.41160000 11.07390000 25.53970000 835 56.13120000 46.33710000 71.63880000 28.65160000 23.52170000 49.66300000 836 58.05390000 54.83770000 83.63620000 35.09570000 30.81130000 69.61680000 837 59.06910000 57.03510000 100.0000000 42.33610000 35.11750000 102.0310000 838 36.98100000 40.51770000 48.69020000 12.87930000 13.48430000 21.63350000 839 36.68260000 43.60460000 58.22160000 15.07300000 15.67770000 31.60550000 840 46.80190000 45.87020000 73.04490000 23.63430000 20.67330000 51.46340000 841 70.94440000 58.36300000 81.32850000 44.73130000 37.95030000 66.35300000 842 93.06580000 58.57740000 86.94020000 68.79830000 50.27310000 77.35220000 843 88.20300000 13.44390000 19.13490000 44.48000000 23.52160000 4.746250000 844 98.93980000 20.11190000 17.91510000 57.31000000 31.06280000 5.105330000 845 96.86660000 59.71980000 24.99580000 60.63560000 48.27230000 9.492070000 846 100.0000000 61.74210000 43.26300000 67.07800000 52.65280000 20.85010000 847 43.31380000 32.37320000 17.33790000 11.11070000 10.13340000 3.122400000 848 55.87030000 100.0000000 19.48380000 35.10020000 71.20460000 10.53520000 849 76.53350000 100.0000000 21.02260000 51.19100000 79.49040000 11.77880000 850 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 851 21.38680000 7.963480000 17.46710000 2.416720000 1.402870000 2.254290000 852 27.83800000 11.43760000 27.51660000 4.723770000 2.759780000 6.026410000 853 28.58130000 33.76820000 38.96940000 7.743900000 8.602330000 13.29790000 854 41.09140000 48.02940000 49.37480000 15.84140000 18.30450000 22.78710000 855 19.43960000 21.60990000 28.72100000 3.422020000 3.454180000 6.694420000 856 20.20120000 26.30470000 28.39330000 3.875910000 4.681380000 6.673540000 857 29.95070000 34.34460000 26.24270000 6.830490000 8.475670000 6.093920000 858 28.45830000 36.68660000 36.12450000 7.686280000 9.591230000 11.51020000 859 34.85580000 63.89090000 41.88510000 15.38290000 27.46020000 17.52700000 860 36.75810000 72.37240000 58.97170000 21.38690000 36.45600000 34.80020000 861 8.569360000 15.24060000 14.54930000 0.827198000 1.244080000 1.554230000 862 10.38260000 15.45460000 10.28590000 0.827969000 1.287660000 0.801553000 863 21.90150000 11.17080000 55.31820000 7.312260000 3.607170000 27.11160000 864 21.34910000 0.000000000 60.95750000 8.269100000 3.530970000 33.46520000 865 21.65740000 26.56270000 60.34000000 9.195940000 6.905680000 33.11200000 866 37.80410000 47.03300000 73.05680000 19.75770000 19.21620000 51.36260000 867 53.97300000 78.44220000 76.10370000 36.05840000 48.56780000 59.21140000 868 61.60920000 85.93580000 91.66180000 48.71170000 61.41460000 87.84800000 869 15.27910000 10.66890000 10.10430000 1.182950000 0.983362000 0.735917000 870 16.28190000 15.48940000 9.480960000 1.477760000 1.629440000 0.724100000 871 12.46810000 18.88070000 7.181910000 1.124090000 1.932650000 0.511049000 872 8.360830000 50.83270000 86.78270000 18.21480000 19.80400000 74.18310000 873 6.006670000 62.24280000 88.13610000 20.91520000 27.87660000 77.58490000 874 20.55770000 69.52030000 93.99820000 26.54420000 35.68760000 89.77190000 875 0.000000000 9.682960000 17.40900000 0.511898000 0.530456000 2.162350000 876 7.570760000 10.18100000 14.70240000 0.597340000 0.625469000 1.518240000 877 0.000000000 10.21480000 11.07820000 0.271892000 0.475100000 0.831626000 878 24.05340000 0.000000000 12.78910000 2.716460000 1.377020000 1.193990000 879 43.74150000 10.53090000 22.58730000 10.20390000 5.555320000 4.248510000 880 50.91970000 23.52890000 41.63140000 16.58130000 10.43910000 15.33380000 881 56.22820000 33.32380000 42.22970000 20.73970000 15.11000000 16.28030000 882 93.12320000 39.76930000 48.09600000 55.51270000 35.18590000 23.05880000 883 91.88290000 77.41010000 50.43590000 62.61730000 62.07790000 28.26850000 884 93.22800000 84.56150000 60.53730000 68.50200000 71.36720000 40.07410000 885 75.93660000 67.16390000 50.03690000 43.31750000 44.01540000 26.04020000 886 80.94940000 77.08240000 51.89030000 51.14670000 55.85120000 29.10520000 887 80.63670000 86.48480000 56.04190000 54.67460000 66.21440000 34.55890000 888 82.46040000 90.86680000 68.68860000 61.00640000 73.57150000 50.89030000 889 89.97120000 95.42920000 85.62610000 75.82990000 85.51980000 78.98320000 890 48.85480000 48.62770000 39.19980000 18.13450000 19.96280000 14.64620000 891 59.25110000 65.54470000 43.56220000 28.59610000 35.39180000 19.58670000 892 69.04460000 68.93590000 45.48180000 37.05220000 42.18060000 21.84170000 893 77.60800000 84.08870000 72.44190000 54.96120000 63.58540000 55.15870000 894 87.75750000 86.48710000 75.92430000 67.02690000 72.00720000 61.25350000 895 96.47080000 92.11490000 83.28750000 81.36600000 84.87810000 74.69800000 896 26.73620000 30.66660000 14.85970000 4.832820000 6.409940000 2.170830000 897 30.87670000 34.50150000 10.13130000 6.259670000 8.333070000 1.529190000 898 40.14280000 66.51260000 14.20570000 15.57330000 29.68510000 4.601700000 899 50.47520000 74.58690000 12.87680000 22.76580000 39.61360000 5.402010000 900 60.82000000 74.41880000 11.72400000 29.17790000 42.78620000 5.484450000 901 42.48670000 56.93360000 12.13160000 14.33590000 22.77490000 3.417310000 902 41.46320000 86.52800000 7.398420000 21.87770000 49.94810000 5.853940000 903 48.51760000 84.41980000 0.000000000 24.53790000 49.28480000 5.420370000 904 13.66290000 44.49140000 38.63770000 6.174300000 11.87080000 13.46890000 905 11.15760000 53.91770000 42.87160000 8.155050000 17.53330000 17.22890000 906 14.31810000 92.65150000 42.28050000 19.32340000 54.58620000 20.94070000 907 0.000000000 68.90300000 21.93690000 8.847980000 27.92080000 6.641540000 908 100.0000000 88.70410000 25.50600000 72.85880000 78.30550000 13.04350000 909 66.71040000 47.45780000 14.00580000 27.52880000 24.48750000 3.795680000 910 81.56990000 52.86740000 12.40930000 41.60540000 34.51810000 4.473110000 911 88.91860000 64.68850000 23.53560000 52.44390000 47.34930000 8.914270000 912 88.85380000 87.84970000 28.42960000 59.61050000 70.58510000 13.63490000 913 88.23820000 100.0000000 44.29140000 65.49030000 86.57090000 25.65290000 914 38.49560000 44.53080000 37.90410000 12.42660000 15.12310000 13.26280000 915 44.17700000 52.03220000 37.08200000 16.09860000 20.69240000 13.31420000 916 45.16240000 55.24690000 46.40530000 18.54990000 23.58070000 20.70590000 917 52.24730000 64.37280000 45.59850000 24.22210000 32.28270000 20.95640000 918 22.68600000 71.44120000 15.50750000 11.37660000 31.20660000 5.121330000 919 20.22930000 72.63260000 43.61120000 13.93440000 33.15070000 19.55920000 920 19.50830000 91.71480000 58.67980000 22.75220000 55.01480000 36.61120000 921 52.64230000 91.27820000 100.0000000 48.06440000 66.10480000 105.5680000 922 25.60590000 44.00930000 44.06520000 9.037920000 13.04520000 17.64600000 923 36.69790000 49.53280000 46.50910000 13.81360000 18.05900000 20.21460000 924 21.31600000 15.67340000 17.40370000 2.643380000 2.219310000 2.329560000 925 21.98250000 17.41330000 13.33350000 2.681980000 2.495030000 1.427470000 926 24.41790000 13.40140000 15.49620000 3.131570000 2.218460000 1.848470000 927 30.98780000 11.06770000 19.59140000 5.053780000 2.965510000 3.010960000 928 50.16750000 12.18140000 46.56370000 16.33630000 8.536750000 19.11830000 929 61.54650000 15.29710000 57.53120000 25.71080000 13.46760000 30.43040000 930 61.68510000 34.86810000 71.84490000 30.85460000 20.09750000 49.53430000 931 75.08890000 42.88900000 82.83460000 46.03480000 30.56000000 68.04880000 932 16.21680000 27.34160000 26.56410000 3.146660000 4.574170000 5.828900000 933 11.42810000 28.53680000 44.67100000 4.864410000 5.510800000 17.31810000 934 8.034720000 37.75720000 52.51270000 6.968640000 9.307880000 24.88350000 935 74.96250000 51.99590000 52.00620000 39.47180000 32.45350000 26.64680000 936 100.0000000 54.02040000 51.95070000 66.91930000 47.71290000 28.00670000 937 27.99270000 26.36380000 0.000000000 4.495440000 5.151300000 0.540919000 938 34.18010000 27.64220000 8.888750000 6.629500000 6.552000000 1.156410000 939 43.80540000 26.00140000 8.850810000 10.43880000 8.120320000 1.284200000 940 54.45910000 25.73010000 12.09940000 16.27210000 11.05500000 2.019660000 941 86.92000000 30.65760000 25.14230000 44.65330000 26.86790000 7.269050000 942 91.12060000 45.62400000 27.87240000 51.44260000 35.85880000 9.430620000 943 30.88270000 13.12880000 7.388920000 4.627060000 2.990260000 0.607250000 944 29.68040000 7.754330000 11.61760000 4.220990000 2.349370000 1.083680000 945 41.44840000 12.74490000 11.60410000 8.678400000 5.028550000 1.334670000 946 64.04730000 14.13150000 15.53330000 22.21230000 12.13580000 2.760080000 947 64.15370000 57.81270000 46.97670000 30.86000000 31.43080000 21.95430000 948 66.49910000 74.10940000 73.01570000 42.53620000 48.35050000 54.39580000 949 72.69260000 79.17640000 83.50970000 52.36360000 57.34970000 72.26070000 950 76.74820000 94.89060000 87.50250000 62.79010000 78.12740000 81.71330000 951 12.21670000 24.80550000 52.47360000 5.988360000 5.038780000 24.35960000 952 17.30790000 42.24270000 60.21580000 10.17490000 12.52370000 33.60740000 953 13.26820000 45.54960000 70.61140000 12.72540000 14.98020000 47.39940000 954 10.20210000 50.27100000 70.77810000 13.27010000 17.54030000 47.92900000 955 14.94530000 74.05330000 71.25920000 19.39850000 36.43130000 50.74140000 956 12.51740000 62.17700000 57.31250000 12.65520000 24.58280000 31.65610000 957 22.03970000 61.71320000 76.75420000 19.00910000 26.97720000 57.94130000 958 21.04090000 78.52650000 82.01840000 24.94480000 42.69760000 68.34160000 959 18.46580000 79.29200000 91.42310000 27.99440000 44.56420000 85.69340000 960 12.64610000 16.86070000 42.63270000 3.867210000 2.720380000 15.37190000 961 50.85410000 12.55150000 82.00080000 25.39290000 12.24030000 64.75460000 962 50.50150000 9.872880000 94.35540000 29.51390000 13.62940000 87.88090000 963 57.58850000 24.15710000 92.37520000 33.75910000 17.91670000 84.37380000 964 11.23620000 9.513660000 29.25780000 1.837320000 1.102680000 6.704710000 965 11.35360000 10.59410000 46.79200000 4.157200000 2.115470000 18.72960000 966 18.91110000 11.89700000 90.65470000 16.81970000 7.411020000 80.02280000 967 28.57410000 20.65150000 82.91760000 16.71240000 8.831760000 66.04830000 968 39.25230000 34.42930000 93.43190000 25.36220000 16.29900000 86.39240000 969 30.05070000 72.74180000 34.11010000 15.08040000 33.97520000 13.01080000 970 40.95820000 84.85890000 37.44420000 23.19890000 48.76380000 16.73300000 971 66.91250000 100.0000000 56.69210000 47.79070000 77.18300000 36.63740000 972 76.79960000 100.0000000 69.49560000 59.28070000 82.75450000 53.10590000 973 76.88960000 100.0000000 82.54010000 63.25120000 84.35230000 73.58390000 974 47.01340000 61.48230000 87.64320000 31.41480000 32.81070000 77.10630000 975 60.53600000 70.26050000 100.0000000 46.48080000 46.25360000 103.2740000 976 17.72340000 8.140680000 11.74050000 1.527280000 0.981683000 0.980252000 977 20.54990000 10.71190000 8.531340000 1.997290000 1.411070000 0.577046000 978 20.69560000 13.91400000 4.551370000 2.068370000 1.758920000 0.287871000 979 17.56410000 79.53510000 15.17550000 12.76910000 38.68180000 5.898430000 980 62.71980000 91.07340000 13.74630000 36.01790000 61.82760000 7.983820000 981 73.06440000 91.64350000 10.23060000 44.36050000 66.74060000 7.847040000 982 51.98020000 59.05790000 0.000000000 19.50490000 26.75350000 2.860280000 983 62.42770000 63.08860000 9.633070000 27.30900000 33.37380000 4.102020000 984 65.24060000 71.96730000 0.000000000 31.54480000 42.05450000 4.484410000 985 91.85180000 77.05180000 18.09680000 58.73570000 60.20150000 8.534010000 986 31.11870000 23.50340000 26.49910000 6.208380000 5.284810000 5.842440000 987 37.54550000 23.21220000 25.51450000 8.369060000 6.348750000 5.513650000 988 65.80910000 27.27240000 56.42350000 29.39060000 17.58870000 29.63990000 989 76.12730000 34.39270000 89.02560000 48.00430000 28.15070000 78.92340000 990 33.56520000 4.918180000 30.33540000 6.617690000 3.324860000 7.446810000 991 48.22250000 10.59260000 32.62960000 13.33360000 7.071110000 9.037350000 992 90.72770000 10.90690000 56.92310000 52.15410000 26.66800000 30.94400000 993 90.61200000 14.65930000 70.62380000 55.46150000 28.36350000 48.41030000 994 100.0000000 25.61520000 86.69390000 72.34850000 38.37380000 75.46740000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 99.99690 108.8960 1 0.000000 77.02890 94.93270 27.23730 42.05040 92.39530 2 100.0000 0.000000 75.91840 67.94000 33.84370 56.78280 3 0.000000 0.000000 53.88990 4.832290 1.932840 25.45160 4 100.0000 68.59390 0.000000 65.77010 57.11770 5.786370 5 0.000000 45.14720 0.000000 3.227610 10.91310 1.229510 6 67.33170 0.000000 0.000000 24.16480 12.45980 1.131960 7 7.958970 7.632930 6.909270 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 99.9969 108.896 1 0.00000 100.000 100.000 37.3737 70.2602 106.194 2 100.000 0.00000 100.000 76.4924 37.2646 101.828 3 0.00000 0.00000 100.000 18.8203 7.52782 99.1264 4 100.000 100.000 0.00000 76.2255 92.4691 9.76917 5 0.00000 100.000 0.00000 18.5534 62.7324 7.06762 6 100.000 0.00000 0.00000 57.6721 29.7367 2.70155 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7749 23.7126 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s29-g85-m0-f994-ceRGBv2.ti1000644 000765 000000 00000202440 12237536424 022753 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "819" CREATED "Sat Oct 19 13:03:52 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "85" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "96.415999 99.996948 82.488027" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "29" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 994 BEGIN_DATA 1 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 2 39.760700 14.575100 0.0000000 7.5484100 4.6597800 0.1242360 3 100.00000 30.982300 0.0000000 66.204800 36.025500 0.4507780 4 100.00000 64.840600 42.017400 72.748600 53.374900 11.767900 5 100.00000 74.177200 41.037800 75.002400 61.233600 12.186700 6 67.926600 49.991400 87.679600 37.605300 28.757000 55.302900 7 68.394900 49.246500 100.00000 41.796600 30.810700 76.911200 8 72.857200 77.722000 100.00000 52.204500 53.912900 79.282000 9 52.150500 56.718200 72.877000 23.683400 24.818500 35.720600 10 73.450000 64.743400 79.189600 43.328100 39.279500 44.120300 11 83.676200 87.930200 80.697300 61.930500 68.117500 48.730900 12 0.0000000 21.428600 0.0000000 0.5982110 2.0227000 0.2279090 13 17.119500 41.532600 0.0000000 3.6852800 8.0904600 0.8276410 14 72.668000 49.323300 10.945800 32.389100 25.151600 2.1607700 15 83.509300 54.708600 79.877000 52.751600 38.236500 44.281400 16 100.00000 57.935700 100.00000 83.220200 55.378700 77.460600 17 26.616900 7.8262400 32.540900 4.3740300 2.6782000 5.6057700 18 29.214800 23.551000 72.059400 10.500400 7.6792400 33.387500 19 27.276200 90.329700 100.00000 30.678100 55.797400 80.928900 20 0.0000000 36.934300 53.201500 4.5769100 7.3696300 16.717500 21 0.0000000 43.061900 67.643300 7.4445100 10.858000 29.277000 22 22.540500 47.571900 71.146800 11.077200 14.376800 33.216700 23 57.233800 67.063800 76.943900 29.888300 34.158300 41.432100 24 64.389100 78.619300 88.455500 41.226300 49.003100 58.958300 25 66.953700 91.791500 100.00000 51.654300 67.785300 81.147400 26 64.285700 0.0000000 0.0000000 21.557600 10.617700 1.1e-0600 27 67.857100 0.0000000 0.0000000 24.564400 12.098600 1.3e-0600 28 71.428600 0.0000000 0.0000000 27.838400 13.711100 1.4e-0600 29 75.000000 0.0000000 0.0000000 31.391700 15.461200 1.6e-0600 30 78.571400 0.0000000 0.0000000 35.234200 17.353800 1.8e-0600 31 82.142900 0.0000000 0.0000000 39.378400 19.394900 2e-060000 32 85.714300 0.0000000 0.0000000 43.835800 21.590300 2.2e-0600 33 89.285700 0.0000000 0.0000000 48.617600 23.945500 2.5e-0600 34 92.857100 0.0000000 0.0000000 53.734400 26.465600 2.8e-0600 35 100.00000 0.0000000 33.055100 66.049300 32.612100 5.7255500 36 12.933800 0.0000000 8.6294000 1.1392100 0.5713450 0.7245570 37 7.1428600 7.1428600 7.1428600 0.7628240 0.7911560 0.6526290 38 10.714300 10.714300 10.714300 1.1776500 1.2213900 1.0075300 39 14.776900 15.232500 28.147600 2.3109900 2.2011200 4.3057900 40 52.591500 30.381900 28.620200 15.354000 10.911200 4.7422100 41 87.868800 30.838800 32.381100 48.838800 27.518100 5.9388200 42 48.311400 18.150400 35.915600 12.752400 7.6894400 6.9594200 43 100.00000 20.314700 75.177800 72.166500 37.642600 36.971400 44 100.00000 22.792600 88.724200 75.685700 39.989300 55.957700 45 98.809500 98.809500 98.809500 93.478100 96.949900 79.974500 46 0.0000000 35.714300 0.0000000 1.5777700 5.3348200 0.6011060 47 0.0000000 39.285700 0.0000000 1.9277700 6.5182600 0.7344520 48 0.0000000 42.857100 0.0000000 2.3259600 7.8646500 0.8861580 49 0.0000000 46.428600 0.0000000 2.7756100 9.3850000 1.0574700 50 0.0000000 50.000000 0.0000000 3.2796900 11.089400 1.2495100 51 0.0000000 53.571400 0.0000000 3.8414900 12.989000 1.4635500 52 0.0000000 57.142900 0.0000000 4.4639800 15.093800 1.7007100 53 0.0000000 60.714300 0.0000000 5.1502400 17.414200 1.9621600 54 0.0000000 64.285700 0.0000000 5.9036800 19.961800 2.2492200 55 0.0000000 67.857100 0.0000000 6.7271200 22.746000 2.5629300 56 0.0000000 71.428600 0.0000000 7.6237100 25.777600 2.9045200 57 0.0000000 75.000000 0.0000000 8.5968100 29.067900 3.2752600 58 43.085700 100.00000 39.045400 27.851600 65.270300 14.873100 59 89.558000 100.00000 76.985400 73.800900 88.338900 45.777300 60 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 61 0.0000000 89.285700 0.0000000 13.314200 45.018700 5.0725300 62 0.0000000 92.857100 0.0000000 14.715500 49.756700 5.6063900 63 0.0000000 100.00000 49.866400 20.294000 61.629700 20.642800 64 59.715200 81.058500 67.359100 33.554300 47.055000 32.067700 65 70.702100 80.898300 76.392200 44.394600 52.389000 42.206100 66 24.184900 21.241900 29.712200 4.1236900 3.7986300 4.8577000 67 57.588700 38.534800 41.718200 20.124800 15.389000 10.030500 68 64.593900 47.852400 61.943100 28.898500 23.137600 24.097200 69 65.788400 100.00000 75.895900 47.352600 75.293200 44.423100 70 69.832100 100.00000 89.264400 54.301000 78.983400 63.354700 71 82.365700 100.00000 90.309200 67.912900 85.711700 65.055300 72 0.0000000 0.0000000 32.142900 0.9713320 0.5549900 5.4117600 73 0.0000000 0.0000000 35.714300 1.2039600 0.6879040 6.7078200 74 0.0000000 11.505300 39.502800 1.7256000 1.6526900 8.3825600 75 0.0000000 0.0000000 39.285700 1.4710300 0.8405050 8.1958400 76 0.0000000 0.0000000 42.857100 1.7748800 1.0141200 9.8887400 77 0.0000000 0.0000000 46.428600 2.1180000 1.2101600 11.800400 78 0.0000000 0.0000000 50.000000 2.5026500 1.4299400 13.943500 79 0.0000000 0.0000000 53.571400 2.9313500 1.6748800 16.331900 80 0.0000000 0.0000000 57.142900 3.4063500 1.9462900 18.978400 81 0.0000000 0.0000000 60.714300 3.9300200 2.2454900 21.896000 82 0.0000000 0.0000000 64.285700 4.5049500 2.5739900 25.099300 83 0.0000000 0.0000000 67.857100 5.1333000 2.9330100 28.600100 84 0.0000000 0.0000000 71.428600 5.8174600 3.3239200 32.411900 85 0.0000000 0.0000000 75.000000 6.5600100 3.7481900 36.549000 86 0.0000000 0.0000000 78.571400 7.3630000 4.2070000 41.022800 87 0.0000000 0.0000000 82.142900 8.2290100 4.7018100 45.847800 88 0.0000000 0.0000000 85.714300 9.1604900 5.2340300 51.037500 89 0.0000000 0.0000000 89.285700 10.159800 5.8049800 56.604900 90 0.0000000 0.0000000 92.857100 11.229000 6.4159300 62.562400 91 0.0000000 0.0000000 96.428600 12.371000 7.0684200 68.924800 92 0.0000000 0.0000000 100.00000 13.587800 7.7636400 75.704000 93 52.890900 0.0000000 100.00000 27.207500 14.471700 75.704000 94 9.7907000 5.2743700 11.679100 1.0032000 0.8090350 1.0680600 95 0.0000000 10.714300 0.0000000 0.2174950 0.7354040 0.0828624 96 1.1904800 1.1904800 1.1904800 0.1268920 0.1316050 0.1085620 97 7.2096800 0.0000000 11.587100 0.7019240 0.3601240 1.0181200 98 2.3809500 2.3809500 2.3809500 0.2537840 0.2632100 0.2171230 99 3.5714300 3.5714300 3.5714300 0.3806770 0.3948150 0.3256850 100 5.9523800 5.9523800 5.9523800 0.6359320 0.6595510 0.5440670 101 0.0000000 0.0000000 10.714300 0.1659650 0.0948274 0.9246710 102 0.0000000 0.0000000 14.285700 0.2418720 0.1381990 1.3475900 103 0.0000000 0.0000000 21.428600 0.4564800 0.2608190 2.5432700 104 0.0000000 42.762600 39.932400 3.8380800 8.6972900 9.3687500 105 69.961200 69.271500 38.806300 34.966400 37.767500 10.678800 106 89.466700 71.551200 41.599000 58.187800 50.905500 12.184500 107 19.047600 19.047600 19.047600 2.6597400 2.7585300 2.2755300 108 15.476200 15.476200 15.476200 1.9260800 1.9976200 1.6478500 109 17.857100 17.857100 17.857100 2.3973400 2.4863800 2.0510300 110 20.238100 20.238100 20.238100 2.9389100 3.0480600 2.5143600 111 21.428600 21.428600 21.428600 3.2390900 3.3593900 2.7711800 112 22.619000 22.619000 22.619000 3.5575000 3.6896300 3.0435900 113 23.809500 23.809500 23.809500 3.8970400 4.0417700 3.3340800 114 26.190500 26.190500 26.190500 4.6393700 4.8116800 3.9691800 115 27.381000 27.381000 27.381000 5.0425300 5.2298200 4.3141000 116 28.571400 28.571400 28.571400 5.4697600 5.6729100 4.6796200 117 29.761900 29.761900 29.761900 5.9195900 6.1394400 5.0644600 118 30.952400 30.952400 30.952400 6.3939000 6.6313700 5.4702500 119 32.142900 32.142900 32.142900 6.8923700 7.1483600 5.8967200 120 33.333300 33.333300 33.333300 7.4163900 7.6918400 6.3450400 121 34.523800 34.523800 34.523800 7.9662000 8.2620700 6.8154300 122 35.714300 35.714300 35.714300 8.5430200 8.8603200 7.3089200 123 36.904800 36.904800 36.904800 9.1468500 9.4865700 7.8255200 124 38.095200 38.095200 38.095200 9.7787400 10.141900 8.3661300 125 39.285700 39.285700 39.285700 10.438200 10.825800 8.9302900 126 40.476200 40.476200 40.476200 11.126600 11.539800 9.5192700 127 41.666700 41.666700 41.666700 11.845100 12.285000 10.134000 128 42.857100 42.857100 42.857100 12.594200 13.062000 10.774900 129 44.047600 44.047600 44.047600 13.374400 13.871100 11.442400 130 45.238100 45.238100 45.238100 14.185700 14.712500 12.136400 131 46.428600 46.428600 46.428600 15.028900 15.587100 12.857800 132 47.619000 47.619000 47.619000 15.905500 16.496200 13.607800 133 48.809500 48.809500 48.809500 16.815100 17.439600 14.386000 134 50.000000 50.000000 50.000000 17.758300 18.417800 15.193000 135 51.190500 51.190500 51.190500 18.737400 19.433300 16.030600 136 52.381000 52.381000 52.381000 19.750600 20.484200 16.897500 137 53.571400 53.571400 53.571400 20.800200 21.572800 17.795500 138 54.761900 54.761900 54.761900 21.886200 22.699100 18.724600 139 55.952400 55.952400 55.952400 23.010000 23.864600 19.686000 140 57.142900 57.142900 57.142900 24.170800 25.068500 20.679100 141 58.333300 58.333300 58.333300 25.370000 26.312200 21.705100 142 59.523800 59.523800 59.523800 26.608400 27.596600 22.764600 143 60.714300 60.714300 60.714300 27.886600 28.922300 23.858200 144 61.904800 61.904800 61.904800 29.205700 30.290400 24.986700 145 63.095200 63.095200 63.095200 30.565600 31.700800 26.150200 146 64.285700 64.285700 64.285700 31.966200 33.153500 27.348500 147 65.476200 65.476200 65.476200 33.409100 34.649900 28.582900 148 66.666700 66.666700 66.666700 34.895700 36.191800 29.854800 149 67.857100 67.857100 67.857100 36.424800 37.777700 31.163000 150 69.047600 69.047600 69.047600 37.998200 39.409500 32.509100 151 70.238100 70.238100 70.238100 39.616500 41.087900 33.893600 152 71.428600 71.428600 71.428600 41.279500 42.812700 35.316400 153 72.619000 72.619000 72.619000 42.988400 44.585100 36.778500 154 73.809500 73.809500 73.809500 44.744200 46.406100 38.280600 155 75.000000 75.000000 75.000000 46.548500 48.277300 39.824200 156 76.190500 76.190500 76.190500 48.398500 50.196100 41.407000 157 77.381000 77.381000 77.381000 50.297800 52.165900 43.031900 158 78.571400 78.571400 78.571400 52.246400 54.186800 44.699000 159 79.761900 79.761900 79.761900 54.243700 56.258300 46.407800 160 80.952400 80.952400 80.952400 56.292400 58.383200 48.160600 161 82.142900 82.142900 82.142900 58.391400 60.560100 49.956300 162 83.333300 83.333300 83.333300 60.542700 62.791200 51.796800 163 84.523800 84.523800 84.523800 62.745500 65.075900 53.681500 164 85.714300 85.714300 85.714300 65.001000 67.415100 55.611100 165 86.904800 86.904800 86.904800 67.310400 69.810400 57.587000 166 88.095200 88.095200 88.095200 69.673300 72.261000 59.608500 167 89.285700 89.285700 89.285700 72.091600 74.769100 61.677400 168 90.476200 90.476200 90.476200 74.564700 77.334100 63.793300 169 91.666700 91.666700 91.666700 77.093400 79.956700 65.956800 170 92.857100 92.857100 92.857100 79.678900 82.638300 68.168800 171 94.047600 94.047600 94.047600 82.321900 85.379400 70.429900 172 95.238100 95.238100 95.238100 85.022500 88.180300 72.740400 173 0.0000000 0.0000000 17.857100 0.3378540 0.1930400 1.8823500 174 62.163900 0.0000000 27.720100 20.620700 10.213600 4.0533000 175 66.622500 0.0000000 54.795100 26.584300 13.337000 17.208900 176 79.966200 0.0000000 55.631600 40.016000 19.961200 17.826500 177 100.00000 35.962200 69.666400 72.095000 40.563600 31.101500 178 100.00000 52.372200 72.004600 74.601100 47.743800 34.446300 179 100.00000 66.353100 78.403300 78.717000 57.753300 43.231700 180 100.00000 89.989000 84.589200 87.464400 83.014100 54.537700 181 100.00000 92.029500 93.731000 90.905800 87.227400 69.560800 182 7.2778600 13.816300 19.624400 1.2199300 1.5052700 2.3078500 183 0.0000000 16.299500 21.347500 0.8379390 1.5588400 2.6734200 184 0.0000000 19.652700 81.173100 8.5045100 6.3119200 44.699300 185 48.514100 26.710000 87.119200 21.619500 13.968400 53.520400 186 34.016900 53.576000 45.207700 11.051100 16.699500 12.585600 187 59.186000 76.519400 49.717200 29.210000 40.679500 17.207200 188 77.801300 100.00000 63.448800 56.552700 79.636100 31.106500 189 45.895100 51.454100 31.555500 14.315400 17.238700 6.5503900 190 57.776000 67.005400 50.750900 25.840400 31.777800 16.910200 191 63.528900 71.456400 66.757300 33.518800 38.941600 30.396700 192 96.428600 96.428600 96.428600 87.782100 91.042400 75.101300 193 97.619000 97.619000 97.619000 90.600600 93.965600 77.512700 194 50.149900 58.660900 27.508200 17.522400 22.401900 5.8032200 195 58.915300 75.190100 26.660000 26.840800 38.262500 7.0614500 196 62.143800 100.00000 44.414200 39.604000 71.095600 17.478700 197 65.368700 100.00000 61.130600 44.243100 73.544000 29.039200 198 70.289900 100.00000 100.00000 58.159100 81.154400 82.488000 199 37.513000 48.188500 51.300700 12.053600 14.861000 15.933700 200 37.503900 50.922000 63.985000 14.253500 17.248000 26.121100 201 58.409200 51.040600 64.594100 25.156200 22.679100 26.698900 202 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 203 0.0000000 0.0000000 7.1428600 0.1075040 0.0614244 0.5989550 204 4.7619000 4.7619000 4.7619000 0.5086200 0.5275100 0.4351460 205 11.684700 8.4932600 0.0000000 1.0515000 1.0022400 0.0638798 206 42.857100 0.0000000 0.0000000 8.4933700 4.1832100 4e-070000 207 46.428600 0.0000000 0.0000000 10.135300 4.9918900 5e-070000 208 50.000000 0.0000000 0.0000000 11.975900 5.8984700 6e-070000 209 63.625400 100.00000 0.0000000 38.836800 70.566400 6.7840500 210 30.649100 87.010000 0.0000000 16.698000 44.244400 4.7506100 211 30.081900 100.00000 100.00000 35.470400 69.979600 82.488000 212 29.162400 68.638500 66.667200 15.671900 28.087800 30.035300 213 30.996000 69.963400 78.010400 18.803800 30.765600 43.057900 214 64.387300 73.874500 91.520600 40.741800 44.842900 63.441500 215 27.443800 17.369200 17.944400 4.1795700 3.3097700 2.0582700 216 64.336500 41.927900 19.922300 24.219600 18.366700 3.0927100 217 100.00000 59.141300 22.834200 70.371400 48.681400 4.6841800 218 100.00000 58.774400 53.841500 72.756700 49.845800 18.340500 219 68.145800 79.448600 42.705100 36.500100 46.772700 13.592100 220 70.783800 85.541000 100.00000 52.758300 61.557700 80.254300 221 0.0000000 39.596300 46.959800 4.1328900 7.8696100 12.851300 222 0.0000000 52.199900 57.375800 7.0577900 14.200800 20.539400 223 0.0000000 73.578700 67.278000 13.227800 30.599300 31.135600 224 0.0000000 86.900500 73.128300 18.593200 45.549400 39.075300 225 51.823400 100.00000 77.555500 37.931000 70.682200 46.499200 226 100.00000 37.695100 27.702000 67.514300 38.411500 4.7210200 227 100.00000 42.968600 43.843700 69.226500 41.000500 11.285400 228 36.419000 43.539200 30.156800 9.2636500 11.585400 5.6865600 229 41.809500 44.971800 50.817400 13.230200 14.190700 15.452900 230 46.883500 59.519300 65.855900 20.046200 24.442800 28.472600 231 47.495100 100.00000 65.494000 33.181500 68.152400 33.033200 232 76.373200 71.806500 0.0000000 40.557000 42.285000 2.9423500 233 90.943500 88.054300 0.0000000 63.802800 68.551600 4.8965800 234 100.00000 87.214200 0.0000000 77.565300 74.438100 4.7789500 235 100.00000 100.00000 0.0000000 82.828200 92.233300 6.7840500 236 10.718600 16.809000 0.0000000 1.1973800 1.7533000 0.1534580 237 0.0000000 14.285700 0.0000000 0.3169710 1.0717500 0.1207610 238 0.0000000 17.857100 0.0000000 0.4427530 1.4970600 0.1686820 239 12.404400 23.708900 70.961100 7.3934100 6.1561800 32.167100 240 59.221000 49.059700 79.015700 28.338100 23.620800 42.800200 241 100.00000 60.529100 88.004800 79.928200 54.909400 56.511800 242 100.00000 73.510700 89.107400 83.311400 65.464400 59.434300 243 30.603900 45.116000 23.244300 7.3472100 11.183200 3.9239900 244 30.668200 88.468200 26.538800 17.910300 46.446300 8.6886000 245 42.578600 72.510600 26.789400 16.965500 31.260500 6.8134000 246 43.032000 83.362800 34.748800 20.898700 42.711200 10.602500 247 53.276000 81.685700 59.298100 28.199900 44.901000 24.757100 248 76.203600 80.453200 60.229600 46.746200 52.898800 25.384500 249 100.00000 91.651600 65.115200 83.899700 82.801400 31.307700 250 100.00000 100.00000 71.415400 88.643100 95.555700 39.181300 251 100.00000 100.00000 92.148400 93.839400 98.524700 68.132400 252 0.0000000 58.491600 51.440700 7.3857100 17.470100 16.673200 253 0.0000000 71.134100 53.599300 10.481900 27.195300 19.227000 254 29.406400 0.0000000 100.00000 17.487700 9.6844500 75.704000 255 43.948000 23.706300 100.00000 23.276500 14.598600 75.976100 256 59.998000 25.946400 100.00000 32.714600 19.616100 76.024700 257 61.975600 68.112800 100.00000 40.126400 40.445300 78.290400 258 0.0000000 32.404000 61.542100 5.3524200 6.6933400 23.106000 259 0.0000000 40.995700 80.597600 9.9585700 11.624800 44.521000 260 53.080100 40.215900 100.00000 29.346600 21.379800 76.476100 261 68.097200 27.016400 63.700400 30.090700 17.790800 24.900300 262 86.514100 31.616000 82.076100 54.321600 30.960300 46.223600 263 88.799000 47.208800 100.00000 64.415100 41.120000 76.801600 264 40.173400 0.0000000 45.589500 9.4174200 4.7986800 11.330900 265 47.252500 12.108800 56.994100 14.181100 7.9836000 18.959600 266 49.718500 0.0000000 80.949900 19.756100 10.355900 44.196300 267 38.528200 0.0000000 61.610100 10.823400 5.6516600 22.672600 268 45.497500 60.258500 75.969400 21.519700 25.747400 39.656900 269 50.596000 79.252700 75.230700 28.772800 43.173000 40.583200 270 61.886400 80.686000 75.967600 36.764300 48.426600 41.655500 271 34.176400 21.787400 0.0000000 5.8782400 4.6730100 0.2344730 272 51.519100 24.316700 0.0000000 13.569600 8.8427800 0.2847980 273 60.403000 40.144900 0.0000000 20.597700 15.977200 0.7692040 274 73.932200 41.585500 0.0000000 32.477400 22.288700 0.8299240 275 100.00000 55.938400 0.0000000 69.268800 46.385400 1.6180900 276 32.877200 0.0000000 82.769600 13.252000 7.1883000 46.732300 277 68.259800 0.0000000 84.742000 33.820400 17.359200 49.587700 278 70.248900 0.0000000 100.00000 40.314600 20.927300 75.704000 279 85.607400 0.0000000 100.00000 57.285800 29.286100 75.704000 280 85.657600 26.196800 100.00000 58.207700 32.216400 76.030600 281 89.434700 68.372100 100.00000 69.263800 54.978600 78.314400 282 36.401200 33.157200 54.291000 10.372000 9.2610600 17.360000 283 35.540200 40.787500 70.127200 13.353700 13.050600 31.782000 284 46.878600 66.034500 100.00000 30.241700 34.159100 78.103400 285 32.230100 52.725600 57.155100 11.784900 16.770100 20.398700 286 53.173000 62.470900 60.204000 23.152200 27.629900 23.562900 287 56.313700 72.420900 64.898100 28.247300 37.056800 28.682300 288 19.923000 35.843500 22.207200 4.0058000 6.6032000 3.3101400 289 19.836800 40.193800 46.061900 6.0219600 8.9776000 12.364700 290 88.937700 40.421700 48.212200 52.490900 31.953800 13.621200 291 93.392900 81.387600 48.116000 67.363600 63.798100 16.798000 292 100.00000 82.802300 59.287500 79.739400 71.351100 24.888900 293 84.928500 0.0000000 19.008900 43.201600 21.307400 2.0815200 294 100.00000 0.0000000 16.759500 65.327600 32.199700 1.7048600 295 100.00000 44.332000 13.247800 67.744600 40.620100 2.1676800 296 100.00000 80.270700 17.514600 75.528000 66.628600 5.7035900 297 100.00000 100.00000 22.787100 83.336200 92.523500 9.6142300 298 100.00000 100.00000 41.296400 84.465700 93.168900 15.907000 299 100.00000 100.00000 57.397900 86.270400 94.200100 25.962100 300 0.0000000 29.667400 13.014800 1.2991600 3.7953700 1.5984900 301 0.0000000 32.188200 24.851300 1.8700800 4.6555100 3.7931000 302 0.0000000 61.060400 37.154300 6.5277300 18.398600 9.2723600 303 0.0000000 75.838100 43.887800 10.706200 30.946700 13.783700 304 0.0000000 84.604100 84.885800 20.554400 44.383500 54.226100 305 0.0000000 89.176100 100.00000 26.860400 52.641500 80.760600 306 0.0000000 100.00000 100.00000 31.394400 67.972000 82.488000 307 9.5238100 9.5238100 9.5238100 1.0275400 1.0657000 0.8791030 308 14.285700 0.0000000 0.0000000 1.1574300 0.5700670 1e-070000 309 60.714300 0.0000000 0.0000000 18.806300 9.2626300 1e-060000 310 60.231900 20.231500 22.085300 19.478000 11.198400 2.8864200 311 72.241300 20.537300 24.424000 29.753100 16.306700 3.4154300 312 72.693200 82.581800 33.442000 41.045200 51.870800 10.025700 313 76.438100 100.00000 47.579900 52.947200 77.692500 19.249600 314 89.362100 100.00000 61.616500 70.600200 86.531600 29.462200 315 23.341500 36.642000 10.849200 4.3695800 6.9727800 1.5730500 316 32.361000 51.362300 0.0000000 8.1983300 14.110800 1.3284900 317 42.927400 44.980600 0.0000000 11.111000 12.945400 0.9855930 318 46.390400 56.850300 0.0000000 14.527200 19.896000 1.6803600 319 100.00000 70.748900 0.0000000 72.468900 57.206000 2.8373100 320 100.00000 70.470800 22.339500 72.888200 57.245100 5.5434100 321 100.00000 90.643300 23.426500 79.391100 79.112300 8.2439900 322 32.584800 30.901000 0.0000000 5.9540800 6.3321500 0.4483650 323 45.105300 33.523600 0.0000000 10.890200 9.3661900 0.5278790 324 44.952200 39.649400 19.863300 11.800500 11.522700 2.9856400 325 24.178500 33.955400 73.073400 10.275900 9.6545600 34.818000 326 23.857000 59.326300 100.00000 21.100800 25.548600 77.561600 327 25.757100 68.216100 100.00000 23.434700 32.297100 78.300000 328 26.992500 0.0000000 38.916000 4.7515600 2.4539300 8.0319900 329 53.742000 0.0000000 55.910300 17.368300 8.8095800 18.035200 330 54.921700 0.0000000 68.357500 20.086000 10.304900 29.115000 331 72.326800 0.0000000 69.862600 34.215400 17.286500 30.701100 332 12.097000 28.610800 0.0000000 1.9370400 3.8797600 0.3858650 333 0.0000000 28.571400 0.0000000 1.0101800 3.4156800 0.3848650 334 58.813100 100.00000 25.359400 35.865200 69.151300 10.215300 335 70.936500 100.00000 27.818200 45.910100 74.107900 10.864500 336 0.0000000 17.509900 11.970700 0.6197000 1.5601900 1.2246800 337 0.0000000 53.341100 68.471200 9.0503800 15.858300 30.682300 338 0.0000000 70.812900 84.370300 16.265900 30.266300 51.884400 339 0.0000000 79.513200 100.00000 23.528000 41.374100 79.491100 340 21.507500 78.503300 100.00000 25.414100 41.401800 79.372200 341 36.094000 0.0000000 29.760000 6.7235900 3.3773200 4.6473700 342 48.033100 0.0000000 28.493000 11.703700 5.8248500 4.2719000 343 52.353900 0.0000000 41.600900 14.967200 7.5029300 9.2686700 344 59.871200 55.371600 44.214800 24.241600 24.070500 12.168800 345 70.701400 61.167000 55.379800 35.557300 32.905500 19.636300 346 17.415100 18.295500 43.060200 3.8074500 3.3458400 10.167200 347 18.731100 29.531300 58.841600 6.4714500 6.5854200 20.741800 348 43.671500 47.495700 100.00000 25.358700 21.997200 76.816600 349 58.177500 57.885900 100.00000 35.191500 31.696100 77.457000 350 75.135400 66.634500 100.00000 51.556800 45.059700 78.156500 351 83.146500 78.886100 100.00000 63.932100 60.711900 79.416900 352 84.362600 87.726000 100.00000 68.430100 71.551800 80.554400 353 100.00000 89.612100 100.00000 92.047700 85.226800 80.823800 354 46.085100 37.112400 36.454000 12.934400 11.406900 7.6508400 355 48.251100 38.526200 44.461900 14.822300 12.794500 11.424600 356 53.248200 55.939800 47.934000 20.355100 22.474200 14.293000 357 0.0000000 20.396800 100.00000 14.137900 9.6236300 75.913600 358 0.0000000 32.691800 100.00000 14.904700 12.216400 76.205700 359 0.0000000 61.844400 100.00000 18.969000 25.959000 77.754200 360 0.0000000 70.414400 100.00000 20.949300 32.654700 78.508600 361 82.714800 100.00000 100.00000 71.465700 87.708200 82.488000 362 92.335700 100.00000 100.00000 84.360700 94.059400 82.488000 363 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 364 11.476900 0.0000000 26.540300 1.5340000 0.8083720 3.7336900 365 0.0000000 0.0000000 28.571400 0.7708460 0.4404380 4.2947500 366 80.460000 0.0000000 32.209800 38.363400 18.971900 5.4347100 367 84.945200 0.0000000 46.517000 44.976300 22.319700 11.850500 368 68.374200 0.0000000 40.960000 26.630300 13.243000 8.9627800 369 70.669900 26.536600 52.183200 30.756900 17.902400 15.708100 370 75.295200 36.359900 63.833400 37.764200 23.679500 25.300900 371 100.00000 66.886500 67.731100 76.627900 56.909600 30.945800 372 24.131000 33.520700 33.763200 5.1501500 6.6229600 6.5045500 373 33.377400 49.389800 35.326100 9.3814400 13.927000 7.7727400 374 100.00000 52.127800 35.107300 69.791000 44.886100 7.8487500 375 100.00000 72.487800 58.061800 76.462200 60.771400 22.714100 376 100.00000 81.381000 70.982800 81.285600 70.919600 35.932500 377 100.00000 92.367800 77.332500 86.617100 85.157700 44.962800 378 100.00000 100.00000 83.087100 91.297000 97.072100 53.967700 379 0.0000000 24.403100 36.368200 2.0024800 3.2581200 7.2518200 380 0.0000000 22.395000 43.894100 2.5161100 3.2522700 10.666400 381 72.283400 30.061000 84.035200 38.491800 22.865500 48.976100 382 73.906900 31.046800 100.00000 45.049500 26.691300 76.156600 383 81.436100 55.089300 100.00000 56.220700 40.600800 77.265400 384 27.642300 74.485800 49.471600 14.357500 31.679100 16.831400 385 28.012000 87.044300 55.544900 19.221300 45.774700 22.517400 386 26.357900 100.00000 72.359100 26.977900 65.199000 40.241700 387 0.0000000 78.571400 0.0000000 9.6491200 32.626000 3.6761700 388 0.0000000 82.142900 0.0000000 10.784000 36.463400 4.1085500 389 0.0000000 85.714300 0.0000000 12.004700 40.590800 4.5736100 390 35.714300 0.0000000 0.0000000 5.7613000 2.8375900 3e-070000 391 39.285700 0.0000000 0.0000000 7.0393500 3.4670700 4e-070000 392 63.194200 22.711000 0.0000000 21.352000 12.427900 0.2521020 393 81.025900 25.000300 0.0000000 38.835600 21.398900 0.2995630 394 80.105900 37.528500 37.620000 40.068800 24.894800 8.1436000 395 79.256000 44.532200 52.889500 41.381300 27.915000 16.820400 396 0.0000000 44.815600 18.458500 2.9221200 8.8797400 2.9617500 397 0.0000000 72.920100 27.046500 8.7147800 27.515800 6.9240800 398 0.0000000 100.00000 29.160800 18.608300 60.666500 11.251000 399 25.678400 100.00000 31.584900 21.760300 62.229700 12.010200 400 27.999800 100.00000 53.892800 24.327300 63.654400 23.343800 401 17.857100 0.0000000 0.0000000 1.6167400 0.7962860 1e-070000 402 23.055000 9.9331100 0.0000000 2.6804700 1.8946900 0.0757676 403 21.428600 0.0000000 0.0000000 2.1844000 1.0758700 1e-070000 404 25.000000 0.0000000 0.0000000 2.8710800 1.4140800 1e-070000 405 54.542700 48.175100 16.845300 17.946300 17.573000 2.8671000 406 61.243200 47.103400 34.985300 23.218700 19.807900 7.5204300 407 71.238100 49.654200 49.793200 33.364500 25.954500 15.042800 408 78.992800 57.957200 52.331100 43.099000 34.777300 17.231800 409 82.197700 76.534800 60.547400 52.388100 52.221400 25.197600 410 38.773200 63.013200 33.151900 13.506100 22.989700 7.9028600 411 38.267300 74.986800 37.166800 16.558800 33.081700 10.562400 412 55.235200 47.633900 0.0000000 17.997200 17.355700 1.1199300 413 70.886500 56.377200 0.0000000 31.649200 28.082300 1.6478300 414 84.150400 56.550500 0.0000000 46.201500 35.339900 1.6597300 415 21.100400 17.828500 0.0000000 2.5685500 2.5408500 0.1682570 416 21.030200 28.112600 0.0000000 3.0948200 4.3532100 0.3731000 417 21.171100 56.289800 0.0000000 6.4486100 15.625400 1.6419100 418 22.527500 72.258200 0.0000000 10.225200 27.691700 2.9879800 419 52.092600 72.206600 0.0000000 20.980900 32.949300 2.9827300 420 63.832400 73.111400 0.0000000 29.266600 37.733900 3.0755300 421 88.465500 72.468300 0.0000000 55.389300 50.098500 3.0093800 422 10.714300 0.0000000 0.0000000 0.7941940 0.3911620 0.0000000 423 0.0000000 0.0000000 3.5714300 0.0536482 0.0306530 0.2989000 424 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 425 0.0000000 3.5714300 0.0000000 0.0703053 0.2377190 0.0267853 426 7.1428600 0.0000000 0.0000000 0.5144380 0.2533750 0.0000000 427 0.0000000 7.1428600 0.0000000 0.1408820 0.4763570 0.0536740 428 8.3333300 8.3333300 8.3333300 0.8897170 0.9227610 0.7611910 429 13.095200 13.095200 13.095200 1.5207100 1.5771900 1.3010300 430 16.666700 16.666700 16.666700 2.1531200 2.2330900 1.8420900 431 70.863400 15.165500 39.372500 29.125500 15.459000 8.3663700 432 80.990600 66.346800 76.762300 51.326500 44.228900 41.140600 433 90.998300 81.866700 87.913300 71.489800 66.870800 58.493900 434 100.00000 83.180000 91.534400 86.975800 75.841200 64.549600 435 18.262700 0.0000000 45.985400 3.7485600 2.0097300 11.550800 436 23.519400 0.0000000 66.477100 7.4551900 4.0569500 27.211200 437 29.370600 35.474700 100.00000 19.034400 14.940600 76.296700 438 38.752600 56.565500 100.00000 24.784100 25.870400 77.364700 439 39.976300 83.418000 100.00000 32.104300 49.265700 79.974800 440 48.451000 91.662300 100.00000 38.976300 61.392800 81.127800 441 53.411100 100.00000 100.00000 45.325100 74.833300 82.488000 442 35.074400 59.267200 81.451100 18.470800 23.784000 46.739200 443 36.900600 100.00000 84.304000 32.758400 68.265200 55.727700 444 53.046800 100.00000 89.036500 41.606500 72.725800 62.987500 445 0.0000000 58.987100 21.154700 5.2565600 16.519400 4.3196900 446 12.700400 67.345200 20.109300 7.9990300 23.051300 4.7994900 447 47.640300 66.358400 28.191800 17.861300 27.265600 6.6138500 448 52.843300 82.385400 32.768300 25.465600 44.005800 9.7643100 449 11.677900 23.628400 14.316800 1.8357000 2.9739200 1.6220800 450 0.0000000 27.517700 29.825700 1.7778000 3.6575100 5.0251000 451 11.280600 29.942700 34.732800 3.0887600 4.8063600 6.7542300 452 40.618800 0.0000000 14.962700 7.8193100 3.8715800 1.4391300 453 53.130700 0.0000000 14.295700 14.004500 6.9166900 1.3488800 454 68.457600 0.0000000 16.226800 25.387400 12.526900 1.6230100 455 78.776700 63.969300 27.116100 41.996200 37.592600 6.1100500 456 80.869700 83.914800 29.041200 50.040300 57.578900 8.7667200 457 25.000000 25.000000 25.000000 4.2573300 4.4154400 3.6423200 458 42.209700 24.913500 38.792800 10.429300 7.5064500 8.2757900 459 52.643900 27.843100 61.520000 18.490000 12.203700 22.960100 460 55.005300 38.510900 81.687200 24.875800 18.229700 45.916400 461 0.0000000 22.263100 56.646900 3.9764900 4.0673700 18.838600 462 0.0000000 29.934900 77.330700 8.1826000 7.7819200 39.850500 463 0.0000000 42.712300 100.00000 15.896700 15.570700 76.583600 464 0.0000000 52.901500 100.00000 17.319300 20.381000 77.125600 465 58.441300 75.733300 100.00000 39.578200 46.003200 79.059000 466 0.0000000 96.428600 0.0000000 16.212000 54.816800 6.1765400 467 0.0000000 100.00000 0.0000000 17.806600 60.208400 6.7840500 468 26.876300 100.00000 0.0000000 21.090400 61.825800 6.7840500 469 47.056400 100.00000 0.0000000 28.251100 65.352600 6.7840500 470 14.285700 14.285700 14.285700 1.7162800 1.7800200 1.4683500 471 11.904800 11.904800 11.904800 1.3418500 1.3916900 1.1480100 472 0.0000000 0.0000000 25.000000 0.5999780 0.3428100 3.3427700 473 0.0000000 9.6770500 23.055800 0.7118020 0.9495090 2.9631000 474 32.631600 28.896900 43.188300 7.6284200 6.8816400 10.450300 475 44.538400 65.004000 55.476900 18.484800 26.870900 20.021600 476 45.200400 84.009100 68.758000 26.260500 46.315000 33.879000 477 37.336100 74.042300 0.0000000 14.648300 31.271900 3.1728500 478 49.273200 85.863300 0.0000000 23.642600 46.475900 4.5938000 479 60.265300 84.875700 0.0000000 30.188800 48.696400 4.4614300 480 72.989700 88.904900 0.0000000 42.526600 58.990700 5.0176800 481 75.750600 100.00000 0.0000000 49.981100 76.055200 6.7840500 482 87.920100 100.00000 0.0000000 64.556800 83.234100 6.7840500 483 88.120400 100.00000 44.064600 66.714000 84.445300 17.294200 484 0.0000000 25.000000 0.0000000 0.7862640 2.6585500 0.2995550 485 0.0000000 32.142900 0.0000000 1.2729200 4.3040500 0.4849630 486 0.0000000 100.00000 67.365600 22.850200 63.090200 34.884400 487 0.0000000 100.00000 84.822800 26.728300 65.306000 56.491200 488 28.571400 0.0000000 0.0000000 3.6887300 1.8168000 2e-070000 489 32.142900 0.0000000 0.0000000 4.6481200 2.2893300 2e-070000 490 53.571400 0.0000000 0.0000000 14.027400 6.9088700 7e-070000 491 57.142900 0.0000000 0.0000000 16.300400 8.0284100 8e-070000 492 96.428600 0.0000000 0.0000000 59.199000 29.157100 3e-060000 493 100.00000 0.0000000 0.0000000 65.021600 32.024900 3.3e-0600 494 100.00000 0.0000000 47.235800 67.222900 33.282600 12.264300 495 100.00000 0.0000000 64.485500 69.560300 34.618100 25.287000 496 100.00000 0.0000000 81.936500 73.198900 36.697200 45.559600 497 100.00000 0.0000000 100.00000 78.609400 39.788500 75.704000 498 100.00000 33.912900 100.00000 80.028000 44.585000 76.244400 499 56.046100 60.007300 43.069600 22.382100 25.635600 11.905100 500 66.543600 66.482100 47.609300 32.070400 34.464700 14.921900 501 74.948800 66.441500 51.352200 40.390400 38.568200 17.253400 502 84.035800 67.058900 56.520900 51.558200 44.538600 20.988800 503 64.686000 42.235000 37.554800 25.471300 19.158800 8.3076500 504 63.921300 61.585600 54.720300 29.672200 30.247800 19.184200 505 71.269500 63.493400 65.146100 38.068600 35.670700 28.098300 506 80.018100 80.958800 69.531700 52.721400 56.434300 34.309200 507 86.074000 81.534200 73.851300 61.202400 61.218200 39.214300 508 20.529200 24.166300 34.789600 3.9098700 4.1509000 6.6358800 509 26.139200 27.932600 47.731500 6.3380300 6.0935600 12.923600 510 63.285600 41.212600 74.214900 29.289800 21.101400 36.424400 511 75.092100 49.906300 82.978300 43.193900 31.373500 48.273500 512 86.877200 54.515500 91.220500 60.087000 41.995100 61.306700 513 93.219000 64.962100 91.506600 71.142600 53.381100 62.569400 514 49.013100 11.880200 18.089800 12.038600 6.6706300 2.0150800 515 54.174800 38.235000 15.627900 16.491200 13.401500 2.2280000 516 66.949800 54.452500 12.376500 27.963600 25.312300 2.6277900 517 81.757700 62.231000 12.132800 44.572500 37.746200 3.1610500 518 82.957900 77.933500 17.313200 50.145000 52.036200 5.3956400 519 88.934500 91.027200 17.329900 62.441000 71.180500 7.1243700 520 38.718100 63.813400 0.0000000 12.624300 22.972400 2.2097200 521 46.293600 73.174400 44.291900 20.067100 33.403000 13.711700 522 55.453700 84.295400 50.240100 29.236700 47.846300 18.481000 523 79.615500 87.277700 69.793500 54.478100 63.567100 35.414600 524 90.435400 92.557300 79.429800 72.387600 78.408300 47.710600 525 29.076900 63.928500 24.339600 10.211900 21.902100 5.4028400 526 31.572000 77.943700 22.275600 14.431300 34.468300 6.3225000 527 32.933200 81.111600 85.734300 24.494300 42.967200 55.048000 528 26.662900 52.445000 67.751100 12.006700 16.883700 29.884900 529 73.222500 55.513500 76.334200 40.613000 32.596100 39.769500 530 83.231700 64.235000 87.184000 56.159700 45.436100 55.527000 531 54.914100 30.706200 45.878400 18.080200 12.424900 11.934200 532 60.973500 50.182100 45.423000 24.322700 21.691300 12.499500 533 69.203800 53.488300 57.420400 33.039700 27.602100 20.653900 534 85.333800 60.723400 63.981700 52.951400 41.314100 26.778300 535 84.404000 73.526900 67.009400 55.328500 51.290400 30.860200 536 25.696700 34.050300 19.457500 4.8380400 6.5454400 2.7071500 537 28.794100 52.665900 27.127900 8.1355700 14.731000 5.2976100 538 29.903600 65.749000 36.979400 11.555700 23.796900 9.5866800 539 56.442500 76.812500 38.041000 26.331200 39.424400 11.129900 540 36.041400 34.776900 27.774200 8.0952800 8.3589600 4.6374800 541 43.208900 36.411300 28.678500 11.065700 10.255700 4.9512800 542 53.267500 39.288300 34.776200 16.912000 13.989000 7.0837700 543 90.334800 44.960300 38.912900 54.110800 34.230100 9.0152700 544 60.416900 34.080500 25.195500 20.630600 14.348600 3.9372500 545 88.465000 44.225500 24.253700 50.549400 32.140100 4.1125900 546 92.052700 64.068500 35.102200 59.569800 46.347600 8.7035400 547 92.334600 82.194400 68.867000 69.086800 65.647900 33.760500 548 13.295100 52.374600 28.235600 5.4470000 13.276200 5.5876600 549 12.473000 53.287800 53.518400 7.6808000 14.975400 17.740600 550 16.196900 64.330700 69.933500 12.827700 23.836200 33.030400 551 27.713900 87.399500 79.597800 23.696600 48.701600 47.177800 552 54.210000 89.492500 79.898700 35.487500 56.771900 47.876600 553 4.6797400 14.191300 10.444200 0.8113360 1.3189500 1.0166800 554 9.9688200 16.749200 7.9882900 1.2499300 1.7824200 0.8223580 555 28.889800 39.836300 0.0000000 5.7537400 8.5706600 0.7566110 556 36.712000 38.978900 9.6532800 8.1437200 9.4987400 1.5412800 557 66.221500 49.897200 20.368900 26.837900 22.681300 3.5771000 558 85.220900 51.491000 34.896200 47.855700 33.791500 7.7306900 559 89.898700 60.937300 56.849400 58.033000 43.856400 20.730100 560 92.719600 71.327700 64.745600 65.711700 54.672700 28.427400 561 38.003000 29.826100 37.081300 8.9606700 7.6871100 7.6722500 562 36.905200 70.014800 53.200100 16.313200 29.233700 18.837800 563 46.111200 74.565400 64.241300 22.953300 36.139300 28.286400 564 51.102500 45.889100 41.731700 16.965700 16.300100 10.362400 565 58.905700 45.137700 50.738500 22.702100 18.916400 15.409800 566 66.949600 36.736200 43.653300 27.296200 18.422900 10.932500 567 83.544200 37.597700 61.331800 46.871900 28.477000 23.098400 568 83.753600 41.420100 75.497200 50.176900 31.478200 37.973800 569 92.025900 46.245000 88.216400 65.117600 40.796200 55.945600 570 68.492900 40.556500 68.782400 32.496500 22.385500 30.343200 571 71.855100 75.256900 67.770300 42.034400 46.150600 31.814000 572 71.486400 88.945000 74.137100 47.454000 61.963900 40.541700 573 78.898900 100.00000 77.822500 60.597000 81.850700 46.840000 574 6.6849900 59.827700 44.731700 7.4047400 18.168800 12.759200 575 0.0000000 87.358600 45.113600 14.583400 43.726800 15.869700 576 0.0000000 86.698600 60.066600 16.188100 43.970300 26.054300 577 15.172300 80.299000 56.232900 14.730000 36.942700 22.160500 578 11.870000 81.326900 93.650900 22.895600 42.563300 67.948100 579 18.444800 29.408900 38.980400 4.2170800 5.2767700 8.4671200 580 15.251300 47.725100 93.235400 15.570000 17.091400 64.341700 581 25.014000 47.007600 100.00000 19.315500 18.828100 76.791200 582 7.3190300 9.9939200 30.682700 1.6127800 1.4427300 5.0100300 583 8.2644300 10.664500 46.225300 2.9087000 2.2226500 11.767600 584 0.0000000 13.363100 58.820800 3.9349300 3.0596900 20.424600 585 46.752800 38.026400 58.531800 15.697500 13.212700 20.765800 586 55.728300 38.912800 62.999200 21.553700 16.410700 24.631800 587 58.095000 54.987400 86.739900 30.466800 27.538600 54.152300 588 55.146800 63.492800 85.893900 29.941700 32.027000 53.492300 589 55.322400 83.713800 100.00000 40.011400 53.450000 80.013000 590 22.319600 32.543500 48.691000 6.0054100 6.9132400 13.627600 591 22.451600 48.428200 48.567200 7.7627200 12.821300 14.217900 592 31.280800 60.900100 53.858800 12.559200 21.406200 18.512200 593 43.388800 52.064000 46.276600 14.425100 17.661800 13.084700 594 47.431400 53.763900 54.831300 17.598300 20.101200 18.711300 595 58.528000 62.370600 68.318800 27.954000 30.042200 31.167000 596 73.113100 82.669100 71.292900 46.228100 54.881200 36.436200 597 50.616800 61.589900 52.642900 20.459500 25.692100 17.716400 598 76.079500 86.108200 56.749100 48.018200 58.997400 23.300700 599 89.002900 87.150300 68.842900 66.063500 69.125100 34.390200 600 93.040800 90.464100 83.938600 76.462600 78.111900 53.655700 601 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 602 74.413700 25.458400 7.4535600 31.713500 17.977200 0.9344070 603 94.556400 41.190800 5.2925700 58.504300 34.985500 1.2565800 604 93.626400 55.609700 28.159700 59.820700 41.623800 5.7728400 605 100.00000 83.158500 39.601500 77.640200 70.486900 12.573900 606 71.473100 57.873900 33.240900 33.519300 29.876600 7.5426100 607 75.319900 79.035500 42.111100 43.223500 49.709300 13.248500 608 86.327400 83.129600 44.305600 57.655000 60.648000 14.870600 609 89.522100 83.050200 57.483800 63.485900 63.564900 23.468700 610 46.963000 45.929600 59.515600 16.856300 16.425100 21.917900 611 46.413700 44.905100 79.998500 20.406700 18.103200 43.890100 612 52.416700 44.842000 90.303100 26.367000 21.232900 59.240200 613 75.148300 43.750600 91.311100 44.736100 29.911400 60.861800 614 38.395100 11.388800 39.634000 8.4374800 4.9508900 8.4403700 615 59.236400 10.749100 39.673300 19.460500 10.334100 8.4519300 616 91.438000 11.699100 39.950000 53.427500 27.134900 8.5872900 617 60.899000 26.348100 42.297100 21.534400 13.245200 9.9392200 618 60.891600 32.091700 55.866100 23.437600 15.463600 18.485200 619 69.149200 60.516500 84.302400 39.612100 34.965800 50.888400 620 76.722800 60.581800 93.037000 49.617000 40.128300 64.825500 621 82.210800 24.479400 38.352700 41.614800 22.792100 8.0758700 622 90.219000 31.374000 72.679300 57.205200 32.157300 34.284700 623 91.684200 49.046600 74.371300 61.580600 39.906000 36.992300 624 94.508400 81.058600 79.423200 74.211700 67.278700 46.115600 625 60.369200 69.481000 71.373900 31.486000 36.548700 35.065800 626 65.286000 69.227900 82.687300 37.802400 39.679500 49.306200 627 67.497300 79.013700 81.422400 42.083700 49.628200 48.574300 628 76.759500 84.604300 85.041300 53.843800 60.782900 54.456600 629 23.775100 16.882000 7.0938100 3.1338600 2.7236500 0.7494330 630 32.338000 27.257500 8.5736500 5.7572900 5.5132000 1.0714200 631 88.280400 53.190100 14.208000 51.256200 36.179500 2.7763500 632 88.765300 70.308800 72.911100 61.353000 51.887800 36.882700 633 90.890100 73.106500 81.913600 67.116700 57.016600 48.602700 634 90.648100 74.682200 90.237100 69.473800 59.614900 61.393800 635 91.699300 100.00000 89.044300 79.934700 91.603700 62.999900 636 63.305300 74.770700 61.975700 33.436200 41.439600 26.245100 637 67.728800 83.552500 62.607300 39.935100 52.516400 27.845400 638 20.711600 25.182100 16.384100 3.1533400 3.8784100 1.9507900 639 29.111500 34.556000 12.807200 5.5063800 6.9867200 1.7216000 640 42.727800 37.389200 7.1637700 10.281600 10.087300 1.2620800 641 54.785900 41.131900 6.5968600 17.001300 14.526500 1.3631000 642 57.748500 64.888700 7.5103600 22.859100 28.708700 2.9296200 643 68.520500 82.001200 13.053500 36.103200 48.816000 5.2799100 644 70.995400 93.008800 16.960800 42.515700 63.651700 7.3668000 645 55.460100 78.387500 88.658000 34.773500 45.624800 59.253200 646 58.746800 84.760700 88.028500 38.866600 53.627400 59.047200 647 36.988000 63.574200 63.914800 16.388600 25.026900 26.943000 648 38.153800 74.329100 92.388300 26.108700 38.021500 64.961200 649 42.844800 74.885500 100.00000 30.640100 40.902300 78.966900 650 22.433600 41.297900 58.923700 8.1724900 10.513000 21.216100 651 44.577300 53.075800 80.563300 20.858000 21.752500 45.102100 652 59.043300 59.141500 80.717300 30.319600 29.535700 45.722900 653 80.930000 71.220700 91.552300 56.336100 50.467000 63.223300 654 88.789100 83.187100 93.569400 70.515500 67.790400 68.039700 655 93.648700 91.713900 100.00000 82.759800 83.016500 81.135600 656 10.185700 41.393500 14.508200 3.1518100 7.8021000 2.1986900 657 14.256800 53.125300 10.243800 5.0795000 13.399000 2.3125100 658 79.889200 54.075900 42.656600 42.409900 32.366700 11.283600 659 90.278700 55.184500 46.369000 56.232600 39.749300 13.334300 660 20.427600 10.178700 86.418200 11.570300 7.0271800 52.182400 661 24.335800 19.688700 100.00000 16.839900 10.863500 75.901600 662 14.840100 17.298500 76.855100 8.6128300 6.0085100 38.990500 663 34.854200 17.972400 83.704600 14.554000 9.1404600 48.242100 664 31.865800 23.552800 17.252200 5.5945700 4.8198500 2.0523600 665 31.990700 31.984500 18.154700 6.2112800 6.7274100 2.4125900 666 40.938600 31.567800 17.600500 9.2475300 8.1278700 2.3077200 667 88.771200 31.557700 16.886300 49.445000 27.922300 2.1927100 668 27.673200 0.0000000 15.019900 3.7296800 1.8574500 1.4472500 669 31.112800 10.520100 10.854100 4.7376400 2.9612600 1.0206000 670 32.508000 13.433800 2.3424400 5.0807400 3.3455700 0.3069190 671 35.837600 61.673100 19.075600 11.524200 21.148200 4.1300400 672 39.132200 84.175900 59.907300 22.256500 44.390800 25.582200 673 53.936700 91.697000 67.161300 33.506500 58.062000 33.323000 674 62.540100 92.435000 76.056500 41.517500 63.000600 43.377900 675 29.688100 34.611900 27.049600 6.1465900 7.3546800 4.4327300 676 29.950700 44.884900 41.923400 8.3079200 11.662900 10.406900 677 30.201700 38.041400 43.108100 7.7069500 9.1390300 10.702300 678 33.627000 39.291600 50.760600 9.6094700 10.507700 15.165600 679 40.869900 56.933400 54.703100 15.163900 20.495900 18.828100 680 45.060200 73.378500 77.369300 24.714600 36.260800 42.581400 681 3.5714300 0.0000000 0.0000000 0.2567230 0.1264430 0.0000000 682 93.121100 18.456800 5.2663100 54.672400 28.281800 0.6191960 683 100.00000 23.935700 15.230200 66.013400 34.633300 1.7539100 684 35.069700 21.232300 11.394600 6.3162800 4.8257000 1.2213300 685 34.806000 39.491400 58.891600 11.068700 11.370700 21.115000 686 33.484700 50.433200 76.785800 15.346300 17.769000 40.017500 687 45.951700 67.827400 78.290900 23.922400 31.769900 43.218500 688 56.247700 73.750700 77.643900 31.105400 39.708200 42.970200 689 86.552200 78.818300 78.765900 62.061500 59.243500 44.981600 690 100.00000 78.233000 79.300700 82.102200 68.606800 45.616300 691 65.775900 73.666500 49.837700 33.488300 40.447200 16.973900 692 78.075800 77.439700 51.774400 46.699900 50.099200 18.644400 693 72.938100 69.615400 59.226200 40.170000 40.758200 23.373900 694 75.591400 71.391400 67.347600 44.661600 44.389100 30.983000 695 74.559200 82.349700 92.360300 52.866000 58.260800 65.844600 696 18.795200 28.262200 23.479700 3.2802400 4.5155900 3.3615600 697 16.744200 34.938700 30.893900 3.8677400 6.3315500 5.5755000 698 16.999200 92.437000 36.415500 17.296400 50.636700 12.526000 699 24.449100 75.503900 33.259700 12.537300 31.505300 9.1270400 700 83.677600 90.224300 50.297700 57.465000 68.001600 19.342200 701 89.482400 89.591500 58.221900 65.880400 71.525400 24.948100 702 47.822000 26.054900 15.572500 11.952000 8.3594600 1.8500500 703 66.900600 62.480700 14.616400 29.497100 30.476900 3.4925800 704 71.228000 72.106000 22.827700 35.959100 40.289400 5.8113500 705 77.789100 93.087800 33.998200 50.264600 67.622500 11.704300 706 37.254200 45.078300 18.657500 9.2530500 12.095000 3.0095800 707 40.075200 55.578900 20.827600 11.963500 18.012500 4.0165100 708 62.153100 67.546600 27.538900 27.256100 32.698500 6.5376200 709 68.558600 89.055800 35.519400 39.603700 57.808900 11.671100 710 13.846400 24.824600 6.7419400 1.9850300 3.2281800 0.8603940 711 7.6979200 26.848200 10.497600 1.6133300 3.3999800 1.2442600 712 0.0000000 85.939400 26.689500 12.762100 41.248500 8.3777500 713 65.658900 91.624900 64.357600 41.421000 61.838700 30.584900 714 78.922000 93.569300 67.086000 55.626200 71.139900 33.535600 715 88.609300 93.429000 67.723600 67.744000 76.951400 34.158400 716 24.705500 22.390300 15.467200 3.7263300 3.7215800 1.7569000 717 48.067300 64.217000 14.265300 17.084600 25.444100 3.5883200 718 49.060000 75.590300 15.142900 20.499300 35.437000 4.8040500 719 25.536700 42.393400 5.7848800 5.3438700 9.2003800 1.3499000 720 30.063800 52.302200 12.182300 7.9009900 14.407100 2.4702900 721 33.838700 61.729500 92.278900 21.565200 26.968900 63.612700 722 21.640600 42.592900 80.882100 12.432100 13.376100 44.978400 723 32.563600 43.371200 85.995700 16.395200 15.699900 52.372600 724 34.786600 52.250200 87.337900 18.689600 20.439000 54.902500 725 70.171000 68.976400 90.259100 44.098800 42.764500 60.855900 726 76.240000 77.104600 90.410300 52.388000 53.226000 61.946100 727 83.105900 83.246500 90.111000 62.101300 63.621500 62.194600 728 18.124000 24.643100 29.219900 3.2258800 3.8648900 4.7761700 729 17.483300 27.356100 88.789700 12.510100 9.6369500 56.162800 730 13.801100 36.443700 88.773800 12.760000 11.827300 56.410100 731 17.046400 54.026800 88.665900 15.401900 19.689200 57.103500 732 46.431400 65.080400 88.837000 26.247800 31.284200 58.200600 733 52.437300 71.988800 88.726900 31.122900 38.566300 58.669200 734 61.360000 92.160700 89.911500 44.062400 64.215500 63.120000 735 85.247800 91.530700 93.818200 68.948700 75.842000 69.638600 736 51.664700 12.229800 27.410800 13.873900 7.6304500 4.0651500 737 84.510800 12.101900 27.780800 43.282100 22.106700 4.1667700 738 86.748200 0.0000000 69.357800 50.600500 25.348900 30.162900 739 85.767300 0.0000000 85.318900 52.958500 26.797300 50.444300 740 37.822100 9.8215900 22.824600 7.2006400 4.1539900 2.9129900 741 41.946300 18.341900 21.409300 9.0233800 5.8149600 2.7154400 742 49.854400 15.979500 45.096900 14.255100 8.2553000 11.203700 743 65.896100 13.378400 68.661000 28.452700 15.265700 29.540900 744 47.624900 13.045600 72.302000 17.002400 9.6540100 33.499400 745 47.998800 86.750300 87.168800 32.853700 52.684100 57.973300 746 21.546800 44.638200 35.885800 5.9642900 10.381000 7.7437500 747 23.291800 54.671800 38.222400 7.9418200 15.653000 9.2663100 748 22.150500 67.174600 51.559900 11.561400 24.868000 17.456400 749 20.445100 80.358900 66.523200 17.115400 38.299500 31.145600 750 18.216500 62.285800 40.196500 8.6870400 20.211400 10.692600 751 14.809200 70.647200 39.703300 10.143900 26.552100 11.209700 752 18.519000 83.772900 40.583800 14.620600 40.055200 13.103700 753 14.802400 51.328800 42.874500 6.4757700 13.387400 11.224100 754 20.060800 56.448500 61.712800 10.376600 17.964100 24.415100 755 75.026500 57.163300 66.907400 40.847500 33.415500 29.341000 756 88.549000 62.447500 77.452500 60.215800 46.127000 41.681900 757 58.812700 24.356100 31.880200 19.147700 11.671800 5.6095300 758 69.600100 31.120400 35.388200 28.503500 17.579700 7.0365000 759 77.368500 31.232700 49.081500 37.508400 22.135700 13.827200 760 92.515000 36.510300 58.101400 58.423700 33.825900 20.363800 761 58.834900 49.744800 28.441200 21.463800 19.996400 5.4917500 762 59.077400 59.215200 30.948800 23.383200 25.610200 6.8685600 763 59.457500 68.842000 36.897200 26.152600 33.107600 9.8331400 764 89.804700 93.377000 42.537500 66.013800 75.772200 15.415600 765 100.00000 91.662100 49.320100 81.683900 81.547100 18.940800 766 41.912900 41.763800 27.304400 10.997000 11.823400 4.7761600 767 52.047400 45.592400 34.007400 16.880000 16.099700 7.0810700 768 53.290600 52.306800 34.177700 18.593700 19.747100 7.5130600 769 80.748400 62.032200 42.088100 44.850400 37.882600 11.571600 770 51.713700 36.411500 24.354500 15.148100 12.250300 3.8127500 771 55.733300 87.630100 21.952300 28.548100 50.773400 7.4884500 772 62.028700 83.084100 19.781400 31.286300 47.497600 6.4498000 773 81.093400 100.00000 25.260700 56.547000 79.337300 10.191000 774 90.845600 100.00000 22.965700 69.131800 85.528000 9.6533100 775 16.764900 7.7720100 38.234800 3.0068800 2.0327900 7.7957800 776 19.103000 10.371600 54.193000 5.0219800 3.3151300 16.853500 777 16.058300 10.334000 66.780100 6.5188200 4.2018300 27.591400 778 33.791500 91.770100 68.040400 24.588100 53.765900 34.227700 779 51.132300 19.343600 7.9693000 13.226600 7.9785500 0.8597750 780 61.048400 15.913800 8.5999800 19.554200 10.712200 0.8630600 781 72.471000 40.337400 31.030900 31.791500 21.622100 5.8229900 782 79.913100 47.626200 45.923400 41.760500 29.219700 12.635900 783 78.505400 49.785600 61.705200 42.492600 30.632800 23.993200 784 78.572700 64.570400 64.599500 45.760200 40.133400 27.667500 785 44.266300 46.110900 37.287800 13.168700 14.486100 8.3801000 786 45.269300 54.256800 40.740700 15.127500 19.004100 10.367500 787 51.569100 65.179200 40.049400 20.486200 27.840700 10.865100 788 52.245100 72.047800 53.455300 23.943800 34.517000 19.217500 789 48.958300 66.863900 66.492900 22.795300 30.362600 29.699800 790 68.231200 66.876300 76.041000 38.176300 38.096500 40.291400 791 69.519300 74.086800 78.915800 41.837900 45.286200 44.649600 792 82.061900 93.951300 78.753200 61.850300 74.850400 47.037000 793 17.341200 79.051300 16.203800 11.631500 34.051800 5.3519000 794 14.427600 77.347800 75.515000 17.124600 35.765900 40.707900 795 14.206400 75.034500 81.620800 17.853000 34.293500 48.399600 796 24.990000 75.777200 89.650400 21.953500 37.097300 60.554700 797 46.718400 81.542500 90.307200 31.323100 46.836300 62.301700 798 30.041100 43.267800 52.898800 9.2874200 11.659600 16.767600 799 59.286300 52.467800 53.131600 24.313300 22.779200 17.419100 800 62.256600 66.221800 57.871300 29.813900 33.278500 21.966600 801 68.276800 72.813500 58.502800 36.526800 41.360100 23.101800 802 21.492400 92.784200 14.668200 17.132500 50.882000 6.9937200 803 45.548800 100.00000 23.550700 28.057800 65.299900 9.7846700 804 45.587500 91.581500 29.237100 24.741100 53.281100 9.9011300 805 62.684200 92.362800 38.304500 36.202900 59.873500 13.297500 806 78.406000 93.514800 51.948000 52.764300 69.487400 20.923800 807 22.946600 24.872600 6.7751300 3.3415300 3.9040700 0.8641600 808 20.369100 48.049800 13.942000 5.2353500 11.256000 2.4437600 809 24.250600 66.966200 12.292000 9.4282400 23.479000 3.5800500 810 33.705100 65.612200 8.7651800 11.448800 23.562500 3.0991500 811 51.233800 92.849600 57.390700 30.814400 57.948300 24.777600 812 69.735100 91.794600 82.125400 48.765300 65.943100 51.267100 813 74.867500 92.572200 89.909000 56.196200 70.669900 63.179000 814 80.435300 91.403800 85.911500 60.707200 71.455700 56.720600 815 88.914400 96.572700 91.616500 75.228900 84.920100 66.647800 816 35.557200 42.423200 39.535400 9.4745500 11.355600 9.1735000 817 44.696000 61.143600 44.478600 16.477600 23.396700 12.724200 818 29.323800 40.560000 32.349200 6.9269900 9.4522600 6.2678300 819 40.451000 55.401000 32.276700 12.625700 18.291600 7.0395300 820 67.147600 60.333900 40.011800 30.550000 29.824800 10.456200 821 66.374400 87.051800 50.977200 38.384100 55.175700 19.328700 822 71.675700 88.075200 92.181900 51.956900 63.608500 66.304900 823 23.267900 17.311000 37.115600 4.2488700 3.4138400 7.4284900 824 28.137900 16.704900 48.371000 6.3030400 4.4401600 13.088300 825 28.767300 27.989300 58.186900 8.2629100 7.1551200 20.173100 826 43.095200 30.036800 76.917200 16.693600 11.987700 39.331800 827 38.592900 34.550800 70.632000 13.911800 11.555100 32.095200 828 49.033800 46.027000 69.533800 19.627200 17.960500 31.387000 829 60.518200 57.945500 72.135400 29.235200 28.193600 34.961300 830 0.0000000 7.7583200 10.179500 0.3090290 0.6060800 0.9283430 831 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 832 6.6057400 19.265400 28.881600 1.7625200 2.3753400 4.5750100 833 67.172300 58.349900 66.990300 33.631700 30.500700 29.508500 834 78.763100 71.067200 75.801700 49.713400 46.767000 40.392000 835 78.707700 74.056900 83.785800 52.367800 50.543500 51.363200 836 47.483800 28.185100 34.133700 12.739000 9.2036600 6.4867400 837 47.595100 27.112600 50.660600 14.207100 9.8413100 14.715000 838 46.615600 52.211800 61.777500 17.942700 19.619100 24.198300 839 55.199600 54.198800 61.490500 23.032200 23.063300 24.071500 840 66.882800 40.101200 53.515800 28.656300 20.163100 17.060500 841 91.121700 52.358000 59.346600 58.572900 39.668600 22.134100 842 90.254400 55.964800 68.517800 59.479000 41.991700 30.901700 843 28.459300 17.826900 33.084400 5.1315900 3.8842000 5.9038100 844 86.899000 21.219700 47.768700 48.231200 25.632000 12.801200 845 100.00000 20.752800 57.853300 69.094400 35.943100 19.752200 846 62.503400 14.635600 81.835200 28.632900 15.692500 45.543300 847 62.125400 32.424700 79.465100 28.733000 18.490900 42.690600 848 64.431200 37.246100 92.797900 34.608200 22.904000 63.116900 849 92.915000 81.049700 100.00000 77.835500 69.530200 79.676800 850 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 851 5.8348300 8.9226100 19.923000 1.0002800 1.0346200 2.3152300 852 13.131900 12.871900 19.790800 1.7033500 1.6637800 2.3282200 853 14.481800 6.8876200 23.751100 1.8620900 1.3524400 3.0984600 854 17.349900 20.334300 58.446300 5.6842600 4.6638600 20.220100 855 24.986700 38.885000 64.127300 9.2326800 10.348700 25.669900 856 51.118300 38.259700 69.618400 19.881400 15.487400 31.134900 857 30.427700 32.017700 39.215600 6.8968600 7.1607500 8.6455000 858 42.031400 31.782000 47.204700 11.583600 9.4738600 12.720400 859 42.258900 39.016500 48.524100 12.475100 11.816100 13.752700 860 42.357200 80.015200 50.105700 20.891300 39.657500 17.857500 861 50.483000 100.00000 52.993000 32.906500 67.870900 22.711500 862 11.765700 20.295600 20.459800 1.8589800 2.5246200 2.5584300 863 89.675400 17.510300 61.136800 53.583900 27.946500 22.424100 864 88.878200 14.465800 78.877100 55.812000 29.006600 41.544200 865 93.803000 16.016000 92.548100 66.655800 34.789200 62.174300 866 56.225800 23.984400 83.255100 24.936600 15.059900 47.702600 867 32.083400 16.907900 60.991500 9.0101900 5.9256300 22.290100 868 31.649700 64.671100 82.789900 18.889100 27.265700 49.042700 869 40.189100 93.136800 90.875100 32.845900 59.852800 64.856600 870 9.3925400 41.052000 27.965400 3.5404800 7.9215300 4.9288000 871 0.0000000 46.815700 32.208100 3.8028800 10.117900 6.5113800 872 75.784100 48.476200 68.161100 40.456800 29.168000 30.076900 873 35.772600 10.412000 70.239900 11.574500 6.7481700 31.188100 874 44.338200 11.130500 90.893100 20.010900 11.352600 59.323900 875 58.277800 10.470200 92.352600 28.356700 15.450900 61.777500 876 70.757700 17.649300 92.811400 38.852100 21.275500 62.649700 877 33.705800 11.999800 28.689400 6.1430800 3.8102300 4.4241900 878 69.893100 11.282400 30.031800 27.477900 14.269900 4.8185200 879 71.026600 50.132900 32.661600 31.758700 25.252400 6.8454300 880 80.885300 73.463500 32.475500 47.044600 46.845700 8.6367400 881 48.016400 48.940500 19.709300 14.449000 16.172800 3.3989800 882 52.693500 58.376700 16.716400 18.501000 22.694900 3.4864300 883 63.779600 73.544500 19.600400 29.735800 38.337600 5.3087000 884 68.247700 96.764000 51.962400 43.999600 69.138600 21.456900 885 9.2137300 19.859600 36.517600 2.4546400 2.8276500 7.2256100 886 10.440400 22.203100 47.228000 3.6065600 3.7868600 12.502100 887 7.9583600 30.500400 68.547200 6.9809500 7.1665700 29.749300 888 13.021400 41.215800 72.080600 9.1034100 11.125200 33.956500 889 16.446600 57.572900 83.637800 14.577200 20.982900 49.706200 890 91.966200 16.915300 22.028500 53.312000 27.470800 2.8226900 891 100.00000 22.898900 32.154900 66.665100 34.850300 5.6716700 892 100.00000 26.691400 46.688200 68.053900 36.251900 12.286600 893 100.00000 46.872400 58.657800 71.479400 43.681300 21.262900 894 14.976400 36.018900 9.2418400 2.9835900 6.1193400 1.3919500 895 11.019800 39.002500 39.031600 4.1709900 7.6518800 8.8060600 896 35.553900 62.018200 42.924300 12.906100 22.146600 11.986900 897 35.129800 84.550500 45.686100 19.208900 43.123700 15.803000 898 33.959000 93.490800 44.607200 22.106400 54.296700 16.502200 899 52.661700 92.495800 45.452900 30.073700 57.058800 16.807000 900 76.873600 44.133600 22.439800 36.345800 25.105900 3.7002200 901 80.465800 55.160700 25.720400 42.137400 32.678600 5.0878300 902 90.109300 67.652100 26.758100 57.125400 47.479800 6.3356300 903 91.847000 67.600000 48.306400 61.232800 49.595700 15.436700 904 79.601000 71.469200 44.347000 45.945000 44.833400 13.567500 905 89.250700 74.043600 54.683300 59.971900 53.838500 20.300700 906 41.058100 26.515600 23.279100 9.1422300 7.0769400 3.2736400 907 39.994300 30.129900 60.812900 12.378700 9.6425900 22.407700 908 40.076600 48.670200 68.280700 15.642400 17.028200 30.211200 909 33.968300 60.111900 69.416000 15.652100 22.666800 32.140500 910 34.762800 79.477100 75.216800 21.984900 40.031300 40.593100 911 42.295300 90.756200 78.995000 29.594500 55.259300 46.864000 912 18.615500 43.232600 24.245100 4.6661300 9.1916200 4.0644300 913 16.738700 59.013100 23.629400 6.8184400 17.310600 4.8527800 914 33.055100 74.685900 63.259600 17.760000 33.666200 27.390500 915 6.9871100 24.881700 22.960100 1.7976200 3.1776600 3.1649700 916 8.9129700 30.294800 20.728800 2.2073200 4.3908900 2.8339300 917 66.388100 28.873600 19.118600 24.703500 15.174300 2.4936500 918 79.194600 32.044600 22.165800 37.684200 22.253000 3.1779600 919 80.129600 90.561700 19.318300 51.192200 65.120000 7.3955400 920 40.390400 50.519800 10.017400 10.980700 15.120300 2.1333200 921 41.187300 82.306100 14.783700 18.882600 40.628100 5.5440200 922 48.517900 93.032800 11.127600 26.148100 55.607700 6.6022500 923 62.990900 93.681900 13.587300 35.809400 61.137500 6.9904600 924 74.473000 76.911600 9.5465700 40.144400 46.215300 4.2949600 925 79.731400 85.035100 0.0000000 48.312400 57.783200 4.4826000 926 83.467500 93.266200 100.00000 69.464700 78.274600 81.373800 927 11.729500 33.017900 45.296000 4.2364000 6.1260700 11.681700 928 10.120000 32.408800 52.915800 4.8856600 6.3691900 16.367400 929 38.527800 31.225400 90.987200 18.615700 13.480200 59.851600 930 58.142800 17.222500 56.966900 20.778600 11.709100 19.001200 931 75.961400 16.725100 60.656300 36.718000 19.548500 21.998800 932 76.208700 19.709800 70.977900 38.906300 21.114800 32.111400 933 53.094700 38.520400 52.807400 18.425600 14.639400 16.504500 934 53.690100 46.605400 54.462700 19.944300 18.149300 18.034000 935 63.517700 51.614400 72.772600 30.561000 25.718600 35.273000 936 66.214500 59.162900 96.859700 40.506700 34.930600 71.566200 937 16.836700 93.765800 58.017600 20.091900 53.756600 25.415700 938 16.789200 93.705700 74.969700 23.084000 55.397100 42.251000 939 20.248000 100.00000 90.479900 30.299700 67.190200 65.336900 940 16.252300 60.437500 55.364000 9.6560300 19.722800 19.568400 941 15.597000 60.596000 73.545200 12.691200 21.552700 36.776900 942 14.652600 46.491700 57.181100 7.3950600 11.953500 20.068500 943 10.083900 49.469700 68.629800 9.2172700 14.203400 30.617800 944 0.0000000 66.715200 70.968200 12.182100 25.101200 34.362400 945 14.461100 15.409200 6.4403500 1.6272800 1.8299800 0.6743260 946 20.892600 10.514500 6.8379700 2.4073100 1.8079500 0.6535820 947 25.209100 7.5645700 13.735600 3.2935700 2.0708800 1.3317300 948 62.810600 15.913400 50.684200 23.343100 12.771600 14.523100 949 76.128100 14.761100 49.665300 35.369900 18.574200 13.859200 950 78.314000 15.831800 85.341400 44.374800 23.633200 50.618000 951 83.573900 35.771900 90.546600 53.238700 31.624600 59.265900 952 34.427200 21.701000 44.079000 7.8408300 5.7766800 10.750500 953 41.064300 21.241800 53.375400 11.236200 7.4653100 16.418600 954 45.831000 25.003000 66.824400 15.579600 10.335100 27.855600 955 60.647300 23.986600 69.930500 25.010300 14.860900 31.052100 956 75.872000 37.100600 77.716200 41.175900 25.779300 40.571000 957 100.00000 43.693100 85.948900 76.672200 45.499600 52.316600 958 100.00000 76.017600 100.00000 87.497800 69.842300 79.090300 959 28.931400 19.867600 26.784600 4.9864100 4.0299800 3.9988800 960 36.435500 20.039300 26.777900 7.2209500 5.1525800 4.0000300 961 35.376900 27.556200 28.160300 7.3417100 6.3983800 4.5361500 962 68.245000 61.347200 27.382700 30.896600 30.522400 5.9709200 963 90.891600 76.145100 25.580400 60.427200 55.593900 6.8872000 964 92.490600 85.957000 33.568800 66.345200 67.687900 10.513200 965 44.965800 29.165900 6.5527500 10.589000 8.2592600 0.9494110 966 58.763100 31.742200 10.882900 18.818300 12.868300 1.4156000 967 70.018100 35.695500 8.5073900 28.216900 18.460400 1.3145900 968 71.425300 56.934000 45.524100 34.288300 29.832700 12.981100 969 16.919000 9.9499300 11.072400 1.8583700 1.5044900 1.0386700 970 19.148500 10.748100 19.591000 2.4198100 1.8534900 2.2695300 971 19.995200 0.0000000 21.733100 2.4101500 1.2239400 2.6056000 972 23.091300 6.4729300 19.480500 3.0050100 1.8792300 2.2148700 973 32.660900 7.9424900 51.517500 7.6354000 4.4239900 14.987100 974 32.465400 35.061000 84.245400 15.030100 12.481400 49.436600 975 45.168500 50.420100 91.318500 23.636600 22.146500 61.220700 976 51.316500 59.666600 92.441500 28.750100 29.312100 63.731900 977 0.0000000 51.125700 83.263400 11.964600 16.531500 48.751200 978 0.0000000 59.936900 83.879400 13.669000 21.846500 50.228100 979 11.826800 67.221300 85.691100 16.627300 27.905100 53.507800 980 17.948000 66.866000 92.473700 19.231800 29.099600 64.377200 981 20.341200 89.951000 91.734400 26.453100 53.082000 65.816000 982 13.700400 68.407500 62.861200 12.220900 26.173700 26.400300 983 8.9873300 89.608100 82.432700 22.388400 50.496600 51.374600 984 41.829700 14.117600 11.162600 8.5421100 5.1209800 1.0910600 985 74.924300 13.338700 15.390600 31.870500 16.550300 1.6095500 986 83.459000 12.042500 10.748000 41.402400 21.131700 1.0241100 987 82.502500 41.150400 10.536700 42.104700 26.901500 1.7172700 988 88.806600 42.265300 0.0000000 50.213200 31.249700 0.8596910 989 92.422300 64.659400 10.663600 59.244900 46.485800 3.2000200 990 91.573100 84.435600 12.889900 63.622800 64.739000 5.5730400 991 55.502800 54.218100 10.083600 19.332900 20.943400 2.3656200 992 60.813700 60.740600 0.0000000 24.035600 26.731100 1.9642000 993 76.210400 66.304000 10.532000 39.183300 37.684500 3.3287300 994 95.515900 75.041700 5.4883100 66.459700 57.607500 3.7395400 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 96.41600 99.99690 82.48800 1 0.000000 67.45460 100.0000 20.21840 30.18340 78.23010 2 100.0000 0.000000 69.46800 70.45640 35.13010 30.27950 3 0.000000 0.000000 70.02640 5.542030 3.166550 30.87730 4 100.0000 65.46120 0.000000 71.18840 52.87630 2.349460 5 0.000000 49.64810 0.000000 3.227580 10.91320 1.229660 6 100.0000 4.373660 4.349220 65.17320 32.35370 0.397234 7 3.095820 3.216760 3.448330 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 96.4160 99.9969 82.4880 1 0.00000 100.000 100.000 31.3944 67.9720 82.4880 2 100.000 0.00000 100.000 78.6094 39.7885 75.7040 3 0.00000 0.00000 100.000 13.5878 7.76364 75.7040 4 100.000 100.000 0.00000 82.8282 92.2333 6.78405 5 0.00000 100.000 0.00000 17.8066 60.2084 6.78405 6 100.000 0.00000 0.00000 65.0216 32.0249 0.00000 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 17.7583 18.4178 15.1930 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s29-g85-m0-f994-cRec709_Gamma22.ti1000644 000765 000000 00000231770 12261120515 024136 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "819" CREATED "Wed Dec 18 02:48:53 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "85" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "29" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 994 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 2 26.22540000 37.48160000 25.33730000 7.185300000 9.735960000 6.121070000 3 37.41140000 38.65910000 23.77100000 9.933380000 11.59780000 5.730660000 4 36.55590000 45.90030000 29.77120000 12.21740000 15.73050000 8.979860000 5 39.58760000 77.90240000 100.0000000 44.07060000 51.28810000 102.1890000 6 0.000000000 24.61680000 75.00350000 11.22750000 7.113710000 51.04150000 7 24.49580000 41.12590000 90.21410000 21.32820000 16.85500000 77.56670000 8 23.76120000 48.86620000 100.0000000 27.20200000 22.92970000 97.60460000 9 70.46060000 89.47280000 100.0000000 65.14200000 73.06380000 105.2820000 10 13.88890000 13.88890000 13.88890000 1.237290000 1.301780000 1.417720000 11 7.683220000 7.683220000 7.683220000 0.336510000 0.354051000 0.385581000 12 0.000000000 0.000000000 11.02940000 0.141527000 0.056614600 0.745309000 13 1.096490000 1.096490000 1.096490000 0.004650240 0.004892630 0.005328360 14 0.000000000 1.655630000 0.000000000 0.004329870 0.008660380 0.001443470 15 11.02940000 0.000000000 0.000000000 0.323345000 0.166694000 0.015137200 16 15.38460000 0.000000000 0.000000000 0.672246000 0.346563000 0.031470900 17 17.71650000 0.000000000 0.000000000 0.916902000 0.472690000 0.042924400 18 20.78020000 11.19350000 0.000000000 1.591780000 1.250590000 0.157513000 19 28.26090000 0.000000000 0.000000000 2.560590000 1.320060000 0.119873000 20 31.95960000 0.000000000 12.29460000 3.535640000 1.801970000 1.103470000 21 31.25000000 0.000000000 0.000000000 3.194240000 1.646720000 0.149537000 22 34.40370000 0.000000000 0.000000000 3.946350000 2.034460000 0.184746000 23 37.73580000 0.000000000 0.000000000 4.836070000 2.493130000 0.226398000 24 100.0000000 38.83070000 38.39630000 47.90310000 31.07100000 14.99990000 25 100.0000000 39.44600000 68.00850000 53.59230000 33.59820000 44.18550000 26 41.26210000 0.000000000 0.000000000 5.885950000 3.034380000 0.275548000 27 45.00000000 0.000000000 0.000000000 7.122640000 3.671930000 0.333443000 28 48.96910000 0.000000000 0.000000000 8.577740000 4.422080000 0.401563000 29 53.19150000 0.000000000 0.000000000 10.28890000 5.304240000 0.481671000 30 57.69230000 0.000000000 0.000000000 12.30120000 6.341650000 0.575877000 31 62.50000000 0.000000000 0.000000000 14.66890000 7.562260000 0.686719000 32 85.52630000 0.000000000 0.000000000 29.23980000 15.07400000 1.368850000 33 92.46580000 0.000000000 0.000000000 34.71260000 17.89540000 1.625050000 34 100.0000000 0.000000000 0.000000000 41.23850000 21.25960000 1.930560000 35 100.0000000 65.31220000 49.98980000 59.17910000 50.85710000 27.29120000 36 100.0000000 66.07890000 62.35450000 62.00240000 52.56940000 40.36220000 37 51.41660000 35.36570000 0.000000000 13.18470000 12.19490000 1.659110000 38 66.31430000 35.81260000 0.000000000 20.44770000 16.09030000 2.028290000 39 66.43970000 51.04490000 43.29780000 27.79240000 26.09470000 18.58490000 40 13.15790000 0.000000000 0.000000000 0.476651000 0.245728000 0.022314200 41 6.410260000 6.410260000 6.410260000 0.225939000 0.237716000 0.258886000 42 3.378380000 0.000000000 0.000000000 0.023966800 0.012355600 0.001122000 43 0.000000000 7.042250000 0.000000000 0.104528000 0.209070000 0.034846800 44 0.000000000 13.78340000 11.62290000 0.616563000 0.979090000 0.988962000 45 0.000000000 17.71650000 0.000000000 0.795033000 1.590180000 0.265044000 46 0.000000000 20.16130000 0.000000000 1.056450000 2.113050000 0.352193000 47 0.000000000 22.72730000 0.000000000 1.374900000 2.750010000 0.458357000 48 0.000000000 25.42370000 0.000000000 1.759360000 3.518990000 0.586527000 49 0.000000000 28.26090000 0.000000000 2.220250000 4.440830000 0.740174000 50 0.000000000 31.25000000 0.000000000 2.769680000 5.539770000 0.923340000 51 0.000000000 34.40370000 0.000000000 3.421820000 6.844150000 1.140750000 52 0.000000000 37.73580000 0.000000000 4.193290000 8.387190000 1.397930000 53 0.000000000 41.26210000 0.000000000 5.103630000 10.20800000 1.701420000 54 0.000000000 45.00000000 0.000000000 6.175940000 12.35280000 2.058900000 55 0.000000000 48.96910000 0.000000000 7.437640000 14.87640000 2.479520000 56 0.000000000 53.19150000 0.000000000 8.921370000 17.84410000 2.974160000 57 0.000000000 57.69230000 0.000000000 10.66620000 21.33400000 3.555850000 58 0.000000000 62.50000000 0.000000000 12.71920000 25.44030000 4.240260000 59 0.000000000 67.64710000 0.000000000 15.13720000 30.27660000 5.046350000 60 0.000000000 73.17070000 0.000000000 17.98920000 35.98120000 5.997150000 61 0.000000000 79.11390000 0.000000000 21.36000000 42.72310000 7.120870000 62 0.000000000 85.52630000 0.000000000 25.35350000 50.71070000 8.452190000 63 0.000000000 100.0000000 54.27240000 40.46450000 73.40290000 36.70930000 64 30.77680000 100.0000000 65.66020000 46.00240000 75.97500000 49.75130000 65 29.21710000 100.0000000 79.36150000 49.36900000 77.28310000 69.22290000 66 14.63100000 14.63100000 14.63100000 1.387360000 1.459680000 1.589680000 67 8.992810000 8.992810000 8.992810000 0.475685000 0.500480000 0.545052000 68 8.992810000 0.000000000 0.000000000 0.206390000 0.106400000 0.009662070 69 0.000000000 11.02940000 0.000000000 0.280368000 0.560777000 0.093467400 70 0.000000000 0.000000000 5.172410000 0.026767500 0.010707700 0.140962000 71 0.000000000 0.000000000 8.992810000 0.090336700 0.036137000 0.475729000 72 10.34060000 10.34060000 10.34060000 0.646705000 0.680414000 0.741010000 73 0.000000000 0.000000000 15.38460000 0.294241000 0.117704000 1.549530000 74 0.000000000 0.000000000 17.71650000 0.401326000 0.160541000 2.113460000 75 0.000000000 9.014750000 18.56920000 0.624956000 0.537892000 2.403620000 76 0.000000000 0.000000000 25.42370000 0.888113000 0.355268000 4.676970000 77 0.000000000 0.000000000 28.26090000 1.120760000 0.448334000 5.902150000 78 0.000000000 10.57420000 30.01720000 1.535220000 1.023030000 6.824180000 79 0.000000000 0.000000000 31.25000000 1.398110000 0.559281000 7.362710000 80 0.000000000 0.000000000 37.73580000 2.116740000 0.846749000 11.14710000 81 0.000000000 0.000000000 41.26210000 2.576270000 1.030570000 13.56710000 82 0.000000000 0.000000000 45.00000000 3.117570000 1.247110000 16.41770000 83 0.000000000 0.000000000 48.96910000 3.754460000 1.501880000 19.77170000 84 0.000000000 0.000000000 53.19150000 4.503440000 1.801490000 23.71590000 85 0.000000000 0.000000000 57.69230000 5.384230000 2.153830000 28.35430000 86 0.000000000 0.000000000 62.50000000 6.420560000 2.568390000 33.81180000 87 0.000000000 0.000000000 67.64710000 7.641130000 3.056650000 40.23960000 88 0.000000000 0.000000000 73.17070000 9.080830000 3.632560000 47.82130000 89 0.000000000 0.000000000 79.11390000 10.78230000 4.313210000 56.78180000 90 0.000000000 17.77730000 80.54840000 12.01800000 6.089290000 59.33780000 91 0.000000000 18.01650000 100.0000000 18.87490000 8.870460000 95.32960000 92 84.05790000 22.93540000 100.0000000 47.59990000 24.53680000 96.84000000 93 100.0000000 27.34320000 100.0000000 61.35330000 32.61000000 97.67350000 94 11.77880000 0.000000000 11.36630000 0.524847000 0.253109000 0.813788000 95 0.000000000 8.992810000 0.000000000 0.178958000 0.357943000 0.059660100 96 0.000000000 0.000000000 1.655630000 0.002185680 0.000874330 0.011510200 97 0.000000000 5.172410000 0.000000000 0.053026700 0.106061000 0.017677800 98 5.172410000 0.000000000 0.000000000 0.061155100 0.031527300 0.002862950 99 0.000000000 0.000000000 7.042250000 0.052764700 0.021107200 0.277868000 100 0.544662000 0.544662000 0.544662000 0.000998117 0.001050140 0.001143670 101 1.655630000 1.655630000 1.655630000 0.011509100 0.012109100 0.013187500 102 2.222220000 2.222220000 2.222220000 0.021986500 0.023132600 0.025192700 103 4.566210000 4.566210000 4.566210000 0.107153000 0.112738000 0.122778000 104 2.796420000 2.796420000 2.796420000 0.036447800 0.038347700 0.041762800 105 0.000000000 3.378380000 0.000000000 0.020781300 0.041565600 0.006927950 106 3.378380000 3.378380000 3.378380000 0.055238300 0.058117600 0.063293400 107 5.172410000 5.172410000 5.172410000 0.140949000 0.148296000 0.161503000 108 12.97010000 9.366860000 0.000000000 0.657553000 0.629584000 0.086873600 109 7.042250000 0.000000000 0.000000000 0.120550000 0.062147300 0.005643510 110 3.968250000 3.968250000 3.968250000 0.078694900 0.082796800 0.090170500 111 5.787040000 5.787040000 5.787040000 0.180428000 0.189833000 0.206739000 112 0.000000000 0.000000000 13.15790000 0.208629000 0.083457100 1.098680000 113 7.042250000 7.042250000 7.042250000 0.277843000 0.292325000 0.318359000 114 8.333330000 8.333330000 8.333330000 0.402325000 0.423296000 0.460994000 115 13.15790000 13.15790000 13.15790000 1.098580000 1.155840000 1.258780000 116 14.58310000 11.16310000 16.26600000 1.218110000 1.016970000 1.875450000 117 12.43780000 12.43780000 12.43780000 0.970682000 1.021280000 1.112230000 118 15.38460000 15.38460000 15.38460000 1.549380000 1.630140000 1.775320000 119 16.14990000 16.14990000 16.14990000 1.723940000 1.813800000 1.975340000 120 16.92710000 16.92710000 16.92710000 1.911680000 2.011330000 2.190450000 121 18.51850000 18.51850000 18.51850000 2.329370000 2.450790000 2.669050000 122 17.71650000 17.71650000 17.71650000 2.113260000 2.223420000 2.421430000 123 19.33330000 19.33330000 19.33330000 2.560740000 2.694220000 2.934160000 124 21.00270000 21.00270000 21.00270000 3.072330000 3.232480000 3.520350000 125 20.16130000 20.16130000 20.16130000 2.808130000 2.954500000 3.217620000 126 22.72730000 22.72730000 22.72730000 3.654600000 3.845090000 4.187530000 127 23.61110000 23.61110000 23.61110000 3.974470000 4.181630000 4.554040000 128 24.50980000 24.50980000 24.50980000 4.314770000 4.539670000 4.943970000 129 25.42370000 25.42370000 25.42370000 4.676530000 4.920290000 5.358480000 130 26.35330000 26.35330000 26.35330000 5.060830000 5.324620000 5.798820000 131 27.29890000 27.29890000 27.29890000 5.468790000 5.753840000 6.266270000 132 29.23980000 29.23980000 29.23980000 6.360520000 6.692060000 7.288040000 133 30.23600000 30.23600000 30.23600000 6.846870000 7.203760000 7.845300000 134 31.25000000 31.25000000 31.25000000 7.362030000 7.745770000 8.435590000 135 32.28230000 32.28230000 32.28230000 7.907470000 8.319650000 9.060570000 136 33.33330000 33.33330000 33.33330000 8.484750000 8.927010000 9.722030000 137 34.40370000 34.40370000 34.40370000 9.095470000 9.569570000 10.42180000 138 35.49380000 35.49380000 35.49380000 9.741380000 10.24910000 11.16190000 139 36.60440000 36.60440000 36.60440000 10.42430000 10.96760000 11.94440000 140 37.73580000 37.73580000 37.73580000 11.14610000 11.72710000 12.77150000 141 38.88890000 38.88890000 38.88890000 11.90880000 12.52960000 13.64540000 142 40.06410000 40.06410000 40.06410000 12.71470000 13.37740000 14.56880000 143 41.26210000 41.26210000 41.26210000 13.56580000 14.27300000 15.54410000 144 42.48370000 42.48370000 42.48370000 14.46480000 15.21870000 16.57410000 145 43.72940000 43.72940000 43.72940000 15.41400000 16.21740000 17.66170000 146 45.00000000 45.00000000 45.00000000 16.41610000 17.27180000 18.81000000 147 46.29630000 46.29630000 46.29630000 17.47410000 18.38500000 20.02230000 148 47.61900000 47.61900000 47.61900000 18.59100000 19.56000000 21.30200000 149 48.96910000 48.96910000 48.96910000 19.76980000 20.80030000 22.65280000 150 50.34720000 50.34720000 50.34720000 21.01410000 22.10950000 24.07850000 151 51.75440000 51.75440000 51.75440000 22.32750000 23.49130000 25.58340000 152 53.19150000 53.19150000 53.19150000 23.71370000 24.94980000 27.17180000 153 54.65950000 54.65950000 54.65950000 25.17690000 26.48920000 28.84830000 154 56.15940000 56.15940000 56.15940000 26.72130000 28.11420000 30.61800000 155 57.69230000 57.69230000 57.69230000 28.35170000 29.82950000 32.48600000 156 59.25930000 59.25930000 59.25930000 30.07280000 31.64030000 34.45820000 157 60.86140000 60.86140000 60.86140000 31.89000000 33.55220000 36.54030000 158 62.50000000 62.50000000 62.50000000 33.80870000 35.57100000 38.73880000 159 64.17620000 64.17620000 64.17620000 35.83490000 37.70280000 41.06060000 160 65.89150000 65.89150000 65.89150000 37.97510000 39.95450000 43.51280000 161 67.64710000 67.64710000 67.64710000 40.23580000 42.33310000 46.10320000 162 69.44440000 69.44440000 69.44440000 42.62450000 44.84630000 48.84020000 163 71.28510000 71.28510000 71.28510000 45.14870000 47.50210000 51.73250000 164 73.17070000 73.17070000 73.17070000 47.81690000 50.30930000 54.78970000 165 75.10290000 75.10290000 75.10290000 50.63780000 53.27720000 58.02200000 166 77.08330000 77.08330000 77.08330000 53.62090000 56.41590000 61.44010000 167 79.11390000 79.11390000 79.11390000 56.77650000 59.73600000 65.05590000 168 81.19660000 81.19660000 81.19660000 60.11550000 63.24900000 68.88180000 169 83.33330000 83.33330000 83.33330000 63.64960000 66.96740000 72.93130000 170 46.03800000 15.59940000 0.000000000 8.089920000 5.062760000 0.550931000 171 62.86500000 20.63810000 0.000000000 15.97010000 9.884230000 1.066340000 172 81.01480000 21.80740000 0.000000000 27.21010000 15.89150000 1.633600000 173 82.36840000 35.55480000 0.000000000 30.59660000 21.23490000 2.486520000 174 85.52630000 85.52630000 85.52630000 67.39150000 70.90430000 77.21890000 175 87.77780000 87.77780000 87.77780000 71.35480000 75.07410000 81.76000000 176 94.90740000 94.90740000 94.90740000 84.72490000 89.14110000 97.07980000 177 33.60600000 43.77720000 35.32490000 11.39140000 14.29110000 11.75390000 178 47.24930000 55.75830000 36.14910000 19.75070000 24.65090000 13.81240000 179 28.26090000 28.26090000 28.26090000 5.901600000 6.209220000 6.762200000 180 27.33360000 33.28650000 26.58810000 6.541670000 7.983570000 6.333250000 181 81.58200000 33.13780000 27.24480000 30.54110000 20.30340000 7.729800000 182 82.01590000 81.62830000 52.54740000 53.93110000 61.26680000 31.96530000 183 0.000000000 56.84430000 64.50530000 17.20680000 23.40360000 39.68550000 184 0.000000000 58.09190000 75.06510000 20.43530000 25.50290000 54.19670000 185 43.67600000 71.86740000 77.47850000 34.26020000 42.14480000 60.30940000 186 51.37300000 85.11280000 84.04710000 46.93230000 60.01350000 73.66960000 187 67.64710000 0.000000000 0.000000000 17.45750000 8.999870000 0.817266000 188 73.17070000 0.000000000 0.000000000 20.74680000 10.69560000 0.971251000 189 79.11390000 0.000000000 0.000000000 24.63420000 12.69970000 1.153240000 190 79.53570000 0.000000000 31.34090000 26.33110000 13.41190000 8.576700000 191 0.000000000 12.60860000 43.58540000 3.282390000 1.915160000 15.42950000 192 0.000000000 29.02500000 51.04770000 6.468300000 6.354840000 22.44940000 193 0.000000000 32.88780000 67.78570000 10.77460000 9.268860000 41.45420000 194 28.44030000 0.000000000 17.99680000 3.011910000 1.504740000 2.309240000 195 47.24210000 0.000000000 13.96390000 8.164270000 4.181460000 1.623230000 196 61.70510000 0.000000000 26.93590000 15.27020000 7.755750000 5.978300000 197 60.68460000 33.27010000 25.52690000 17.82300000 13.80400000 6.422150000 198 59.94890000 57.06200000 26.15340000 24.74100000 28.10290000 9.074790000 199 75.77880000 100.0000000 66.38270000 65.49580000 86.00430000 51.57360000 200 85.19420000 100.0000000 82.28110000 76.50250000 91.16760000 75.17900000 201 18.55150000 24.90170000 19.24130000 3.176750000 4.077610000 3.142120000 202 14.64250000 35.51950000 52.86090000 8.715750000 9.429660000 24.64490000 203 19.56350000 45.88050000 52.88230000 12.03130000 15.25700000 25.61580000 204 64.81700000 46.97090000 63.33490000 29.28870000 24.41090000 37.81950000 205 100.0000000 65.23770000 72.67840000 64.16220000 52.79420000 53.70660000 206 100.0000000 82.85800000 88.58780000 78.71220000 74.08710000 82.63130000 207 30.58590000 28.19880000 22.87710000 5.960530000 6.271830000 4.587360000 208 76.36120000 30.00260000 36.76780000 27.31990000 17.61290000 12.43890000 209 81.44770000 37.62650000 57.56940000 35.78630000 24.01570000 30.84000000 210 82.19860000 46.18940000 67.16910000 40.85960000 29.90570000 43.05190000 211 43.52300000 18.83610000 26.39070000 8.492420000 5.617330000 5.690250000 212 47.33310000 36.42590000 56.36170000 16.95480000 13.90990000 28.60200000 213 53.67070000 42.29270000 80.05790000 26.94930000 20.61420000 60.57000000 214 0.000000000 0.000000000 20.16130000 0.533287000 0.213328000 2.808390000 215 0.000000000 0.000000000 22.72730000 0.694039000 0.277634000 3.654940000 216 0.000000000 12.20800000 25.23150000 1.223920000 1.050460000 4.716400000 217 0.000000000 31.46770000 45.03950000 5.935880000 6.874520000 17.38690000 218 0.000000000 42.38310000 66.34400000 12.73470000 13.75650000 40.35930000 219 0.000000000 45.43710000 82.23860000 18.04980000 17.31490000 63.93410000 220 23.09670000 0.000000000 25.81900000 2.561660000 1.214490000 4.915280000 221 50.35350000 0.000000000 32.13740000 10.60710000 5.296510000 8.257320000 222 67.40540000 0.000000000 39.69130000 19.68620000 9.875570000 13.26800000 223 83.47830000 0.000000000 45.74940000 30.95500000 15.58480000 18.32280000 224 100.0000000 51.42550000 48.09850000 53.13060000 39.27050000 23.69880000 225 86.50770000 100.0000000 23.54510000 66.49030000 87.27700000 17.27460000 226 100.0000000 100.0000000 25.09420000 77.85880000 93.12480000 18.39580000 227 16.75790000 16.77710000 11.71670000 1.678230000 1.893550000 1.124370000 228 14.63590000 15.77330000 0.000000000 1.218170000 1.542190000 0.233484000 229 11.72840000 11.72840000 11.72840000 0.853070000 0.897536000 0.977469000 230 48.94720000 53.13580000 0.000000000 17.47020000 22.22070000 3.368480000 231 48.02670000 65.66280000 0.000000000 22.39670000 32.59480000 5.111290000 232 55.85190000 73.83070000 18.77040000 30.25840000 42.78630000 9.052840000 233 73.78440000 77.35410000 27.35010000 42.50320000 51.97190000 13.25830000 234 40.38440000 85.44560000 27.09840000 31.93680000 53.90840000 14.07880000 235 46.77950000 86.61530000 100.0000000 51.87570000 63.36090000 104.1080000 236 0.000000000 38.91430000 28.79250000 5.654340000 9.441120000 7.644840000 237 0.000000000 39.49860000 37.81880000 6.763150000 10.12390000 12.74670000 238 21.36550000 78.06450000 40.76000000 24.63380000 43.20350000 20.18620000 239 13.49520000 22.20580000 0.000000000 1.810410000 2.872930000 0.459136000 240 30.96250000 19.56860000 5.062820000 4.144850000 3.602650000 0.610828000 241 37.62350000 21.66600000 0.000000000 6.042120000 4.952320000 0.637518000 242 38.56640000 44.35910000 100.0000000 29.10740000 21.80510000 97.28710000 243 46.49670000 57.18470000 100.0000000 36.16500000 32.08970000 98.90030000 244 0.000000000 67.35590000 37.22080000 17.04800000 30.81220000 15.81400000 245 0.000000000 83.05940000 44.23940000 26.77580000 48.75060000 23.73880000 246 0.000000000 100.0000000 67.40020000 43.33720000 74.55210000 51.83790000 247 0.000000000 100.0000000 79.67230000 46.70770000 75.90030000 69.58750000 248 0.000000000 100.0000000 100.0000000 53.80730000 78.74040000 106.9750000 249 67.82400000 100.0000000 100.0000000 71.36540000 87.79210000 107.7970000 250 0.000000000 15.22840000 20.28230000 1.110310000 1.356160000 3.035600000 251 15.69110000 11.06660000 51.23530000 5.131710000 2.585860000 21.96700000 252 69.61430000 29.51780000 59.04040000 26.70160000 16.73840000 31.51680000 253 76.31810000 39.88450000 78.43290000 38.07580000 25.43890000 58.35700000 254 90.09010000 90.09010000 90.09010000 75.55400000 79.49230000 86.57160000 255 92.46580000 92.46580000 92.46580000 80.00510000 84.17530000 91.67170000 256 82.14970000 62.26550000 0.000000000 39.37550000 39.02690000 5.458150000 257 100.0000000 61.87020000 0.000000000 53.67750000 46.13960000 6.077420000 258 100.0000000 74.26070000 0.000000000 59.82230000 58.43010000 8.125930000 259 100.0000000 85.16920000 25.10980000 67.22380000 71.85150000 14.85620000 260 31.81050000 38.56440000 0.000000000 7.720020000 10.50990000 1.621830000 261 43.08620000 39.32740000 0.000000000 11.06550000 12.52210000 1.833930000 262 100.0000000 38.28150000 53.94040000 50.21030000 31.77360000 27.82980000 263 30.53970000 0.000000000 37.75500000 5.155830000 2.413220000 11.30170000 264 36.84520000 0.000000000 50.92650000 8.681050000 4.002650000 21.76640000 265 68.74610000 0.000000000 83.36060000 30.18370000 14.16340000 64.54820000 266 79.65370000 0.000000000 100.0000000 43.05540000 20.11150000 96.22520000 267 100.0000000 0.000000000 100.0000000 59.28850000 28.48010000 96.98520000 268 43.12290000 25.98700000 62.50400000 14.75320000 9.604950000 34.73570000 269 54.34290000 24.28560000 65.41690000 19.47390000 11.58130000 38.41490000 270 36.11460000 28.59640000 35.74030000 8.547830000 7.572610000 10.85690000 271 38.00120000 38.76970000 44.85250000 12.45640000 12.67080000 18.01300000 272 37.77920000 57.79170000 55.13900000 20.42900000 25.86410000 29.46380000 273 50.11550000 58.43910000 70.15100000 28.27480000 29.91010000 47.66850000 274 52.85010000 84.24690000 74.00590000 43.98140000 58.01140000 57.68150000 275 64.43270000 59.79430000 52.72390000 31.64150000 32.93380000 27.84110000 276 67.23960000 72.72430000 65.86090000 42.18030000 47.26320000 44.66340000 277 52.86810000 55.74670000 61.60660000 26.26340000 27.50560000 36.53070000 278 59.73310000 57.69870000 68.57790000 31.82160000 31.33460000 45.64560000 279 64.16240000 0.000000000 16.49320000 15.88360000 8.148850000 2.533280000 280 64.21190000 0.000000000 48.13470000 19.18230000 9.471460000 19.76710000 281 81.83620000 0.000000000 60.17550000 32.44400000 16.04360000 32.35010000 282 100.0000000 0.000000000 69.95550000 49.46480000 24.55040000 45.25200000 283 100.0000000 0.000000000 83.63170000 53.42150000 26.13320000 66.08840000 284 54.35480000 47.22000000 70.82260000 26.10840000 22.67660000 47.30520000 285 65.41910000 48.95950000 75.98510000 33.51920000 27.17780000 55.19770000 286 75.02130000 66.55250000 75.02490000 46.11660000 44.34720000 56.42150000 287 86.85650000 86.72010000 79.00190000 67.13630000 72.17450000 66.73510000 288 100.0000000 20.81920000 0.000000000 42.37220000 23.52730000 2.308520000 289 100.0000000 36.84420000 0.000000000 45.21690000 29.21720000 3.256880000 290 100.0000000 49.32720000 0.000000000 48.79630000 36.37640000 4.450140000 291 100.0000000 59.76770000 86.80200000 65.98860000 49.60710000 75.40230000 292 19.70410000 0.000000000 17.68110000 1.558020000 0.757052000 2.158410000 293 26.05530000 9.723280000 22.41970000 3.027600000 1.798490000 3.718140000 294 34.46750000 0.000000000 27.09560000 4.984110000 2.451450000 5.565650000 295 38.54900000 22.59380000 30.90050000 7.789380000 5.873040000 7.872530000 296 38.79100000 64.32410000 48.38360000 22.34480000 31.21360000 24.01330000 297 0.000000000 15.38460000 0.000000000 0.582895000 1.165880000 0.194322000 298 0.000000000 13.15790000 0.000000000 0.413298000 0.826656000 0.137783000 299 11.02940000 11.02940000 11.02940000 0.745240000 0.784085000 0.853914000 300 0.000000000 44.76450000 58.94060000 11.74890000 14.46870000 31.75640000 301 0.000000000 83.51470000 85.80570000 36.95080000 53.28100000 75.90400000 302 0.000000000 100.0000000 90.20380000 50.14550000 77.27550000 87.69150000 303 47.25460000 38.02650000 24.17630000 12.99090000 12.93670000 5.980130000 304 61.63640000 41.44250000 35.20400000 21.19660000 18.36760000 11.95210000 305 72.89300000 43.16620000 34.78590000 27.97980000 22.58720000 12.16210000 306 81.26790000 45.00800000 47.54650000 35.83050000 27.23780000 21.81360000 307 80.20980000 52.20290000 100.0000000 52.00170000 37.43300000 99.09720000 308 87.01120000 63.11130000 100.0000000 61.41230000 48.86680000 100.8080000 309 100.0000000 65.78080000 100.0000000 73.52240000 56.95000000 101.7300000 310 50.99840000 80.92980000 0.000000000 31.83200000 49.74460000 7.924340000 311 50.37990000 100.0000000 0.000000000 44.88800000 76.22700000 12.34800000 312 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 313 56.83140000 66.31670000 48.45630000 30.05990000 36.58550000 24.70700000 314 56.56100000 79.07660000 89.11780000 47.12480000 54.35450000 81.44410000 315 77.41930000 100.0000000 92.73080000 74.53550000 89.74520000 93.53800000 316 85.03880000 100.0000000 100.0000000 82.68190000 93.62600000 108.3270000 317 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 318 25.84740000 20.86400000 18.44890000 3.681990000 3.538660000 2.788630000 319 100.0000000 27.69320000 20.03560000 43.88780000 25.71710000 5.408440000 320 100.0000000 41.47290000 21.50640000 47.01430000 31.82850000 6.888160000 321 25.42370000 0.000000000 0.000000000 2.029050000 1.046040000 0.094989200 322 24.72470000 18.45040000 0.000000000 2.777650000 2.722490000 0.379132000 323 24.86740000 35.17240000 100.0000000 23.57490000 15.40180000 96.34270000 324 25.27560000 59.49820000 100.0000000 31.46750000 31.08340000 98.95360000 325 57.81510000 68.74110000 100.0000000 46.08970000 44.95570000 100.8610000 326 72.81730000 79.12780000 100.0000000 59.94520000 60.54230000 103.1390000 327 30.03290000 32.61790000 51.21500000 10.11390000 9.253590000 22.97260000 328 84.22060000 31.10790000 63.59360000 37.67940000 22.72530000 37.36410000 329 65.29460000 43.49430000 45.90610000 25.13800000 21.09090000 19.81990000 330 70.03760000 75.17480000 50.07880000 41.87790000 49.47600000 28.01690000 331 100.0000000 78.25250000 52.52220000 66.47000000 64.71840000 31.94670000 332 100.0000000 100.0000000 61.13420000 83.11180000 95.22610000 46.05930000 333 21.85790000 21.85790000 21.85790000 3.354200000 3.529030000 3.843320000 334 20.55860000 19.20510000 29.88700000 3.488700000 3.061600000 7.050930000 335 22.11410000 16.09180000 33.52790000 3.768620000 2.709600000 8.879260000 336 27.49300000 46.07520000 47.00720000 12.34680000 15.62640000 20.35280000 337 35.44050000 51.09340000 62.80930000 18.86900000 21.10080000 37.10040000 338 82.52710000 57.40300000 66.65700000 44.97840000 37.99440000 43.73800000 339 31.09820000 12.98060000 0.000000000 3.561360000 2.431540000 0.281676000 340 35.25980000 51.35830000 0.000000000 12.42470000 18.66690000 2.948390000 341 65.71640000 78.76430000 0.000000000 37.53340000 50.75360000 7.818690000 342 67.49490000 77.73760000 81.92920000 49.56680000 54.71900000 68.98510000 343 0.000000000 29.98820000 34.57980000 4.276490000 5.758490000 10.04240000 344 0.000000000 42.07870000 48.04940000 8.929510000 12.09810000 20.74060000 345 0.000000000 67.31260000 48.83240000 18.70450000 31.44100000 24.64220000 346 0.000000000 83.04010000 58.82600000 29.38040000 49.77310000 37.51530000 347 0.000000000 82.93170000 72.69030000 32.64280000 50.96910000 55.03200000 348 0.000000000 68.09120000 59.37670000 21.09260000 33.01000000 35.32630000 349 0.000000000 68.59300000 70.76820000 24.04460000 34.59100000 49.63880000 350 0.000000000 71.00480000 85.43750000 29.60790000 38.78820000 72.85770000 351 0.000000000 82.43470000 25.48960000 24.27470000 47.12370000 12.49850000 352 0.000000000 100.0000000 23.39230000 36.49680000 71.81570000 15.81480000 353 0.000000000 100.0000000 40.14810000 38.18310000 72.49030000 24.69520000 354 50.45350000 100.0000000 78.03890000 55.38010000 80.42750000 67.44820000 355 68.53630000 100.0000000 84.50720000 66.18870000 85.76840000 78.40590000 356 0.000000000 26.99920000 13.89260000 2.243200000 4.110520000 1.907580000 357 0.000000000 38.72880000 17.36360000 4.823730000 9.033810000 3.502070000 358 0.000000000 51.25640000 31.86460000 9.682440000 17.03130000 10.42630000 359 0.000000000 52.33360000 43.71980000 11.53380000 18.38760000 18.27760000 360 0.000000000 51.87670000 52.22370000 12.76880000 18.61860000 25.59220000 361 13.59330000 52.59660000 62.87770000 15.72160000 20.27470000 37.18830000 362 57.22150000 24.47460000 32.85640000 15.26080000 10.08940000 9.325880000 363 63.29490000 22.64500000 40.44160000 18.91130000 11.48960000 14.14160000 364 67.35090000 37.59920000 100.0000000 39.49980000 24.45440000 97.25090000 365 85.12970000 40.11880000 100.0000000 51.79030000 31.73740000 98.00900000 366 100.0000000 49.17090000 100.0000000 66.79370000 43.49160000 99.48720000 367 79.29270000 61.36290000 74.34060000 46.37580000 40.95780000 54.75030000 368 100.0000000 71.81980000 86.53680000 71.63850000 61.04960000 76.84840000 369 100.0000000 79.24280000 100.0000000 80.72510000 71.35640000 104.1320000 370 47.00410000 17.32790000 13.07760000 8.801960000 5.638020000 1.703390000 371 63.71910000 13.20950000 21.43900000 16.33290000 8.968450000 4.070220000 372 100.0000000 24.54590000 42.33740000 45.59320000 25.60750000 16.83030000 373 100.0000000 23.44060000 56.18340000 47.78940000 26.23490000 29.17010000 374 100.0000000 24.10150000 71.02300000 51.30780000 27.79080000 47.24060000 375 100.0000000 25.46000000 85.61410000 55.83050000 29.92090000 70.06890000 376 100.0000000 43.96590000 84.64000000 59.61490000 38.00040000 69.75810000 377 43.43020000 21.10300000 36.89310000 9.769780000 6.538030000 11.30470000 378 65.14090000 56.45680000 42.17340000 28.94010000 29.70630000 18.37750000 379 77.24280000 68.19080000 59.78870000 44.60100000 45.19250000 36.89980000 380 97.41780000 97.41780000 97.41780000 89.73180000 94.40900000 102.8170000 381 22.72730000 0.000000000 0.000000000 1.585660000 0.817453000 0.074231800 382 20.16130000 0.000000000 0.000000000 1.218390000 0.628116000 0.057038400 383 19.33810000 0.000000000 10.78840000 1.246470000 0.627020000 0.762000000 384 81.38680000 0.000000000 18.07570000 26.63690000 13.68370000 3.436190000 385 100.0000000 0.000000000 17.71100000 41.63950000 21.42010000 4.042580000 386 100.0000000 0.000000000 31.56120000 42.66740000 21.83120000 9.455480000 387 100.0000000 0.000000000 44.87440000 44.33690000 22.49910000 18.24760000 388 100.0000000 0.000000000 57.55700000 46.59500000 23.40240000 30.13890000 389 100.0000000 51.14260000 57.87080000 54.84240000 39.79540000 33.20620000 390 100.0000000 77.78830000 65.07610000 68.83620000 65.23120000 45.74430000 391 100.0000000 89.57980000 64.41020000 76.16990000 80.15090000 47.41500000 392 100.0000000 51.04320000 35.77950000 51.26950000 38.31030000 14.56250000 393 100.0000000 65.28310000 36.68270000 57.22560000 50.05370000 17.07160000 394 69.44540000 53.79760000 24.12610000 28.43240000 28.14530000 8.083020000 395 100.0000000 55.32140000 21.51510000 51.57960000 40.95910000 8.412830000 396 100.0000000 69.65370000 20.17690000 57.91500000 53.76030000 10.12520000 397 58.85450000 39.43740000 15.36010000 17.76640000 15.98470000 3.686110000 398 65.58010000 57.47560000 63.31720000 33.49080000 32.20710000 39.08160000 399 78.42400000 65.09070000 68.72460000 45.98320000 43.43930000 47.43030000 400 100.0000000 87.95090000 76.93980000 78.34090000 79.24250000 64.32520000 401 100.0000000 100.0000000 78.11540000 87.48110000 96.97390000 69.06880000 402 100.0000000 100.0000000 89.32870000 91.07880000 98.41310000 88.01500000 403 18.83020000 34.21190000 0.000000000 4.428470000 7.301050000 1.175900000 404 21.04500000 48.16510000 0.000000000 8.510660000 15.03480000 2.453550000 405 28.04050000 64.33120000 0.000000000 16.07010000 28.40600000 4.636120000 406 39.32840000 73.26640000 34.80540000 25.10930000 39.52390000 15.59390000 407 90.04240000 77.66560000 36.92520000 55.27070000 58.70930000 18.99740000 408 42.60620000 31.58260000 12.52780000 9.338060000 9.001190000 2.227040000 409 53.18100000 61.20630000 13.04560000 22.63660000 29.68040000 5.609250000 410 30.53320000 80.99500000 0.000000000 25.52820000 46.55380000 7.640630000 411 28.95790000 100.0000000 28.98580000 39.64380000 73.38660000 18.28730000 412 46.46360000 100.0000000 46.00160000 46.67160000 76.76860000 29.51040000 413 0.000000000 0.000000000 34.40370000 1.727310000 0.690968000 9.096320000 414 31.34550000 0.000000000 100.0000000 21.26570000 8.878280000 95.20520000 415 61.24020000 50.51780000 100.0000000 40.04130000 30.38230000 98.36650000 416 82.79970000 73.64530000 100.0000000 63.52570000 57.75410000 102.4120000 417 88.04380000 85.13010000 100.0000000 74.31200000 73.48300000 104.8800000 418 28.56990000 30.29320000 67.24530000 12.75080000 9.542450000 40.70100000 419 30.82930000 48.31350000 81.90300000 21.95690000 20.69500000 63.82970000 420 38.47260000 57.22740000 93.05300000 30.93090000 29.72230000 84.86370000 421 14.98750000 22.63630000 34.14120000 3.695960000 3.732480000 9.428470000 422 14.51980000 32.66550000 32.79400000 5.199570000 7.033660000 9.232070000 423 23.69650000 44.67120000 32.99970000 9.391390000 13.68170000 10.40720000 424 27.19520000 67.89320000 50.67590000 21.65990000 33.35190000 26.51600000 425 26.41880000 100.0000000 49.95030000 41.88700000 74.22690000 32.67730000 426 14.25050000 53.45560000 16.44250000 9.927720000 18.46860000 4.826880000 427 46.19290000 63.50760000 22.28860000 21.38400000 30.50640000 8.246820000 428 49.22750000 100.0000000 23.61070000 45.18970000 76.29540000 16.30150000 429 60.49690000 100.0000000 38.97970000 51.68540000 79.46870000 24.53100000 430 69.34440000 100.0000000 52.96940000 58.65490000 82.80890000 36.28230000 431 22.20150000 39.74640000 19.21970000 6.686510000 10.36990000 4.165480000 432 39.87070000 53.00560000 21.58920000 14.93110000 20.76900000 6.471330000 433 39.18370000 76.02830000 51.00940000 28.93120000 43.49540000 28.39900000 434 65.65700000 80.06840000 56.56480000 43.43430000 54.35510000 35.22640000 435 65.69940000 80.71480000 67.73890000 46.35720000 56.15310000 48.56790000 436 67.02180000 100.0000000 73.85680000 62.13110000 84.04570000 61.53430000 437 87.42100000 48.70780000 35.03740000 39.83210000 31.23980000 13.35580000 438 89.81950000 56.37090000 33.99560000 44.38420000 37.73560000 13.76440000 439 100.0000000 77.07160000 37.18000000 63.45330000 62.41430000 19.44260000 440 100.0000000 88.61710000 45.52460000 71.84870000 77.36740000 27.91060000 441 0.000000000 20.54590000 14.78690000 1.370960000 2.310600000 1.787340000 442 0.000000000 21.20140000 31.44650000 2.597550000 2.927270000 7.858310000 443 0.000000000 19.65930000 38.70260000 3.237300000 2.894260000 12.11800000 444 0.000000000 22.28070000 54.98350000 6.160040000 4.570240000 25.94740000 445 15.63580000 62.93980000 85.11890000 26.27800000 31.26090000 71.03250000 446 22.19620000 70.49690000 100.0000000 36.13050000 41.14930000 100.6510000 447 21.10710000 81.57770000 100.0000000 42.24790000 53.61920000 102.7350000 448 24.07990000 91.60450000 100.0000000 49.33630000 67.12450000 104.9690000 449 38.13850000 100.0000000 100.0000000 58.75760000 81.29240000 107.2070000 450 23.67510000 61.18790000 66.92970000 21.33820000 28.16060000 43.43530000 451 40.39940000 68.23580000 100.0000000 39.09710000 40.97620000 100.4610000 452 12.44600000 0.000000000 20.00000000 0.945722000 0.427029000 2.778970000 453 16.29570000 0.000000000 30.54560000 2.092660000 0.925239000 7.038360000 454 23.33000000 0.000000000 61.13690000 7.796240000 3.312700000 32.28990000 455 27.23430000 0.000000000 80.09830000 13.44010000 5.649020000 58.45770000 456 47.66890000 0.000000000 83.31330000 20.16600000 9.000760000 64.00040000 457 56.81440000 0.000000000 100.0000000 29.94330000 13.35180000 95.61140000 458 64.92730000 21.15830000 100.0000000 35.17580000 17.79340000 96.19300000 459 30.44440000 19.63940000 48.63330000 7.711270000 5.028760000 19.94840000 460 38.94450000 18.72590000 67.88730000 13.78230000 7.548950000 41.09660000 461 77.98540000 15.49250000 88.00730000 38.08880000 18.94050000 73.08720000 462 56.95050000 0.000000000 68.17550000 19.72910000 9.273120000 41.49380000 463 58.73270000 12.41150000 76.25160000 23.10090000 11.30040000 53.08180000 464 41.02680000 0.000000000 66.04320000 13.06080000 5.895990000 38.44330000 465 40.32860000 16.14350000 82.58610000 18.09560000 8.922060000 62.88500000 466 46.13910000 17.61080000 100.0000000 26.35980000 12.66930000 95.66850000 467 47.68930000 34.28750000 100.0000000 29.53890000 18.18580000 96.56580000 468 24.97910000 11.04330000 41.04840000 4.779980000 2.587420000 13.59810000 469 51.09210000 0.000000000 52.71320000 13.83180000 6.620770000 23.69040000 470 70.23540000 0.000000000 64.19270000 25.76950000 12.49840000 36.74610000 471 83.17460000 0.000000000 79.02490000 38.25640000 18.48000000 57.92880000 472 100.0000000 91.31070000 100.0000000 88.56660000 87.04070000 106.7460000 473 0.000000000 0.000000000 85.52630000 12.79820000 5.119620000 67.39780000 474 0.000000000 0.000000000 92.46580000 15.19360000 6.077850000 80.01250000 475 0.000000000 0.000000000 100.0000000 18.05000000 7.220460000 95.05460000 476 0.000000000 30.35160000 100.0000000 20.64760000 12.41600000 95.92060000 477 0.000000000 41.18880000 100.0000000 23.13370000 17.38860000 96.74940000 478 0.000000000 51.09330000 100.0000000 26.21570000 23.55310000 97.77690000 479 0.000000000 62.13830000 100.0000000 30.60790000 32.33810000 99.24110000 480 0.000000000 56.57480000 83.27400000 22.28580000 25.26350000 66.96210000 481 0.000000000 73.85240000 100.0000000 36.40990000 43.94300000 101.1750000 482 0.000000000 87.02220000 100.0000000 44.38890000 59.90220000 103.8350000 483 0.000000000 92.46580000 0.000000000 30.09880000 60.20210000 10.03420000 484 0.000000000 100.0000000 0.000000000 35.75730000 71.51990000 11.92060000 485 28.44270000 100.0000000 0.000000000 38.35430000 72.85870000 12.04210000 486 67.07250000 100.0000000 0.000000000 52.89040000 80.35250000 12.72260000 487 82.26020000 100.0000000 0.000000000 62.59750000 85.35680000 13.17710000 488 86.57730000 100.0000000 54.99280000 70.63890000 88.94270000 38.84480000 489 23.95130000 25.67420000 0.000000000 3.577270000 4.513090000 0.682618000 490 58.93940000 49.80810000 0.000000000 20.61440000 22.08970000 3.177520000 491 64.39160000 62.44320000 0.000000000 28.35690000 33.46430000 4.965050000 492 84.36680000 87.45080000 0.000000000 55.00020000 67.88220000 10.20450000 493 100.0000000 87.02440000 0.000000000 67.57890000 73.94440000 10.71180000 494 100.0000000 100.0000000 0.000000000 76.99580000 92.77950000 13.85110000 495 100.0000000 100.0000000 43.53850000 79.89500000 93.93930000 29.11890000 496 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 497 0.000000000 0.000000000 3.378380000 0.010490200 0.004196360 0.055243500 498 9.661840000 9.661840000 9.661840000 0.557002000 0.586036000 0.638227000 499 14.56630000 18.45620000 51.82010000 5.718010000 3.748100000 22.70990000 500 12.43760000 23.25080000 63.40950000 8.494500000 5.759660000 35.40500000 501 20.62390000 39.19530000 75.16330000 15.47250000 13.63110000 52.31160000 502 27.10560000 50.47420000 74.93410000 19.85480000 20.93270000 53.15210000 503 33.41820000 66.82230000 79.84580000 29.43920000 35.78070000 63.02870000 504 58.59340000 78.45780000 79.22170000 44.51480000 52.83550000 64.53950000 505 75.08040000 93.65490000 81.12170000 64.30620000 77.79460000 71.34730000 506 90.32310000 100.0000000 92.47500000 83.92240000 94.59510000 93.49410000 507 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 508 29.36760000 29.24350000 56.12580000 10.24780000 8.251200000 27.61700000 509 32.56350000 77.71340000 77.74700000 34.41100000 47.03120000 61.65690000 510 83.02430000 91.49330000 87.56060000 70.27590000 78.33090000 82.05970000 511 84.93260000 91.86450000 100.0000000 76.51540000 81.40980000 106.2940000 512 18.12020000 8.759800000 22.72020000 1.825950000 1.112000000 3.753850000 513 25.16840000 11.06710000 29.57870000 3.505910000 2.083670000 6.711480000 514 31.64980000 10.15040000 72.14500000 12.32160000 5.682090000 46.59100000 515 33.93930000 28.16590000 94.99660000 22.15720000 12.83230000 85.82190000 516 27.48240000 25.73630000 73.97040000 13.51580000 8.576700000 49.69350000 517 39.73500000 50.01550000 73.03530000 22.25310000 21.99510000 50.47810000 518 19.79300000 24.92170000 29.58010000 4.092890000 4.466790000 7.141200000 519 20.26220000 32.78380000 38.23250000 6.487790000 7.661890000 12.55590000 520 20.76630000 52.50040000 52.62170000 14.36670000 19.76780000 26.11150000 521 18.79320000 60.91290000 53.79610000 17.68040000 26.42620000 28.36870000 522 22.40550000 73.14030000 66.57290000 26.88640000 39.69140000 44.91130000 523 19.60490000 91.54220000 66.92900000 38.05110000 62.46390000 49.17490000 524 14.12480000 39.40050000 42.20930000 7.876090000 10.59300000 15.82470000 525 83.56490000 57.69820000 44.68300000 41.52340000 36.89090000 21.02180000 526 85.19920000 82.77250000 68.05810000 60.33080000 65.23400000 50.00180000 527 89.17040000 100.0000000 70.83230000 76.26200000 91.42470000 57.94550000 528 38.23520000 61.44650000 31.77460000 18.68070000 27.65320000 11.95500000 529 62.45390000 90.52520000 52.65890000 47.77710000 66.77040000 33.45940000 530 80.58650000 91.20490000 58.27480000 60.36190000 73.83870000 39.92440000 531 88.75750000 94.13720000 77.77450000 73.41780000 83.13040000 66.61160000 532 26.86410000 16.90310000 14.43810000 3.263340000 2.717200000 1.693820000 533 25.27210000 18.84070000 10.01170000 3.027150000 2.898700000 0.999574000 534 65.68370000 20.53470000 30.33070000 18.77180000 11.15920000 8.027470000 535 67.64820000 34.73660000 38.66160000 23.18590000 16.88400000 13.73990000 536 71.55610000 45.30550000 59.26700000 31.73450000 25.00660000 33.09870000 537 80.32660000 84.94580000 63.50870000 57.09950000 65.74900000 44.54260000 538 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 539 64.48700000 71.93170000 12.52560000 33.22750000 42.83080000 7.497640000 540 77.35040000 76.62470000 14.19270000 43.59890000 52.00650000 9.032580000 541 43.75310000 11.51490000 17.34440000 7.387060000 4.221610000 2.433280000 542 42.65660000 0.000000000 21.08960000 6.921090000 3.500020000 3.397070000 543 58.42000000 48.10260000 47.79060000 23.35500000 22.24610000 21.71640000 544 85.51900000 78.19650000 82.52500000 61.88460000 61.44510000 70.61470000 545 100.0000000 91.09110000 88.05910000 84.00850000 84.96990000 83.50490000 546 37.64610000 30.04650000 30.69160000 8.695060000 8.099020000 8.148620000 547 46.21280000 31.96630000 40.00230000 12.86930000 10.67860000 13.99680000 548 50.86520000 51.11200000 97.99870000 34.76250000 28.05960000 94.08200000 549 21.99710000 30.84150000 44.88670000 7.266790000 7.382780000 17.29300000 550 26.82250000 41.70590000 51.48580000 11.69970000 13.30470000 23.92430000 551 26.47880000 40.52160000 60.31130000 13.05960000 13.32800000 33.00120000 552 37.80950000 58.12810000 76.10100000 25.60090000 28.15410000 55.97700000 553 68.92330000 63.63160000 100.0000000 49.47120000 43.06230000 100.3170000 554 89.20550000 17.27980000 30.56770000 34.16210000 18.57500000 8.766380000 555 87.71050000 44.69970000 41.73350000 39.63440000 29.16250000 17.38600000 556 90.94260000 58.90280000 76.57660000 54.66850000 43.59920000 58.14240000 557 90.60550000 58.39470000 90.25000000 58.55360000 44.78470000 81.06220000 558 20.35570000 0.000000000 44.28910000 4.254660000 1.845700000 15.91090000 559 18.46970000 17.09360000 65.76260000 8.920470000 4.860320000 38.10750000 560 14.67270000 16.49030000 86.34540000 14.35410000 6.898480000 69.08020000 561 16.58880000 52.32460000 90.54300000 23.90560000 23.42320000 79.30480000 562 14.56920000 66.22870000 77.21770000 25.26650000 33.29460000 58.67620000 563 18.76070000 73.09700000 77.81940000 29.38750000 40.59720000 60.79100000 564 30.54870000 79.63820000 88.16310000 38.39330000 50.38800000 79.41940000 565 31.59730000 100.0000000 90.36290000 53.47420000 78.98510000 88.13900000 566 0.000000000 29.37930000 25.42860000 3.306570000 5.191940000 5.485060000 567 19.69570000 67.06690000 23.36360000 16.74800000 30.60010000 8.889620000 568 29.12460000 67.90340000 38.78090000 20.24730000 32.83910000 17.05390000 569 46.74190000 67.72810000 44.20920000 25.91850000 35.54760000 21.21200000 570 78.49180000 71.51050000 53.14170000 45.80810000 48.48890000 30.50250000 571 90.50940000 71.46270000 54.11600000 54.87390000 53.10420000 31.87590000 572 91.17950000 80.47190000 62.43810000 62.24070000 64.26770000 42.70650000 573 92.08500000 81.75000000 76.99260000 67.51220000 67.71300000 62.75060000 574 95.84090000 92.26280000 77.86710000 77.92620000 83.44040000 66.57650000 575 7.977260000 19.34570000 11.17350000 1.268940000 2.069620000 1.095930000 576 11.75220000 16.83480000 7.654050000 1.145760000 1.638330000 0.588040000 577 14.18710000 41.75820000 12.55270000 5.990160000 10.84510000 2.763660000 578 59.93160000 56.98270000 13.00890000 23.95910000 27.73820000 5.158050000 579 67.63410000 61.66830000 83.59800000 41.97230000 38.56700000 69.03500000 580 79.79450000 64.05990000 85.03270000 51.16680000 44.85370000 72.19700000 581 67.39930000 56.49080000 72.08450000 36.28800000 32.81160000 50.47960000 582 67.54900000 67.19670000 73.68220000 41.53940000 42.49500000 54.34690000 583 77.53610000 85.21440000 73.19270000 57.80400000 66.08910000 57.34070000 584 54.74370000 55.25510000 44.37990000 23.68500000 26.26230000 19.67120000 585 66.58800000 64.95700000 49.11420000 34.48590000 37.89630000 25.30570000 586 67.97130000 72.95280000 58.43200000 41.05090000 47.05600000 35.94390000 587 36.97860000 38.68760000 32.82700000 10.61260000 11.86710000 9.897820000 588 42.50100000 45.80790000 35.70610000 14.57840000 16.83400000 12.30600000 589 52.38470000 48.12340000 42.64430000 19.87680000 20.55420000 17.43870000 590 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 591 30.25070000 18.83970000 11.67250000 4.044320000 3.417610000 1.286860000 592 38.79070000 16.40700000 10.16290000 5.928080000 4.039360000 1.086980000 593 61.90150000 70.12500000 26.57540000 31.72420000 40.56480000 11.28970000 594 61.40920000 89.42440000 33.25080000 43.67880000 63.84910000 18.42260000 595 23.27600000 32.27150000 14.88700000 4.917490000 6.916810000 2.510690000 596 29.84900000 33.80510000 10.67590000 6.311750000 8.126410000 1.926520000 597 11.28650000 16.54660000 31.45940000 2.443070000 2.111260000 7.715650000 598 10.92040000 26.12420000 30.22400000 3.483230000 4.418520000 7.478980000 599 10.59020000 27.36260000 39.52800000 4.707850000 5.226480000 13.04790000 600 12.18050000 35.42560000 44.64090000 7.114680000 8.731900000 17.36630000 601 10.14720000 41.34270000 58.13470000 10.87020000 12.58100000 30.55600000 602 61.54530000 89.52320000 61.77210000 48.47030000 65.88260000 42.96100000 603 74.89850000 91.55590000 67.84880000 58.98210000 73.24260000 51.34470000 604 19.38170000 14.86410000 7.471590000 1.717680000 1.680860000 0.548948000 605 53.20320000 10.83250000 12.63290000 10.75410000 5.922110000 1.576320000 606 68.36930000 11.92780000 71.59010000 26.85810000 13.34090000 46.52640000 607 67.58420000 25.44520000 89.79160000 33.42850000 18.20500000 76.41470000 608 16.53230000 17.93810000 22.97380000 2.315260000 2.324520000 4.051960000 609 14.56130000 14.01500000 22.94750000 1.779400000 1.540390000 3.919460000 610 33.49820000 64.43370000 22.44540000 17.99750000 29.39210000 8.264330000 611 39.83360000 38.43200000 11.68020000 9.972940000 11.60360000 2.555740000 612 41.08410000 48.24740000 10.86010000 13.16570000 17.45890000 3.393190000 613 46.48090000 47.15610000 24.68750000 15.32630000 17.96790000 7.024420000 614 49.26800000 46.41730000 32.22440000 16.80090000 18.30460000 10.48830000 615 48.48170000 61.59960000 55.26060000 25.60860000 30.92640000 30.29220000 616 52.40820000 60.80800000 60.27190000 27.86080000 31.45550000 35.67560000 617 53.28660000 73.20300000 65.81200000 35.52880000 44.21840000 44.36450000 618 61.62500000 72.11770000 70.28380000 39.95730000 45.50830000 50.24450000 619 29.98930000 38.28070000 65.87530000 14.45320000 13.04330000 39.53750000 620 35.79210000 38.64030000 80.32250000 19.87050000 15.51450000 60.38120000 621 41.31490000 48.72310000 87.45510000 26.69980000 23.13250000 73.51440000 622 87.49790000 49.85420000 93.25750000 53.96050000 37.51580000 85.54540000 623 51.97510000 23.66960000 76.40830000 21.26990000 12.04360000 53.55750000 624 58.35680000 33.27780000 76.74440000 25.88020000 16.89880000 54.75950000 625 83.71540000 32.77170000 84.59920000 43.46560000 25.52970000 68.13250000 626 94.38000000 39.64350000 90.86440000 55.60730000 33.91700000 80.25470000 627 57.85390000 21.39770000 54.32470000 18.29850000 10.67630000 25.82220000 628 66.46910000 30.02960000 67.42430000 26.91920000 16.76850000 41.58090000 629 34.55610000 14.35140000 28.44040000 5.621630000 3.509530000 6.338260000 630 33.71990000 9.814310000 33.78850000 5.652910000 3.044490000 8.991500000 631 35.22300000 12.86290000 47.94750000 8.133560000 4.362830000 19.20160000 632 41.67250000 88.75120000 66.88080000 40.97110000 61.09330000 48.69450000 633 45.09730000 91.97360000 77.35480000 47.16630000 67.29410000 64.29430000 634 4.903490000 19.03790000 44.66600000 4.052590000 3.117620000 16.46390000 635 28.47430000 20.96250000 82.84920000 15.68800000 8.418000000 63.35070000 636 39.35270000 29.80740000 84.58230000 20.28940000 12.72320000 66.85300000 637 32.66150000 17.98150000 38.78300000 6.589640000 4.356980000 12.27740000 638 51.82950000 25.27470000 37.55570000 13.54970000 9.321800000 12.06440000 639 55.77670000 26.16600000 47.20360000 16.75830000 11.02200000 19.39730000 640 71.60710000 56.86570000 55.18820000 35.00090000 32.82050000 30.08900000 641 84.87990000 57.82970000 54.96620000 44.31870000 38.20690000 30.41170000 642 87.33530000 67.29710000 66.35830000 52.90740000 48.64740000 44.99530000 643 90.30510000 75.05980000 67.06470000 59.47740000 58.04340000 47.36730000 644 91.05790000 76.71150000 78.53150000 64.12880000 61.46710000 64.09170000 645 35.35000000 26.81700000 16.93140000 6.530650000 6.261950000 2.768590000 646 38.62390000 34.20670000 25.16440000 9.337100000 9.729610000 5.937420000 647 82.53340000 66.07540000 31.15710000 42.80020000 43.24500000 13.37250000 648 90.19110000 67.33050000 41.98880000 50.52120000 47.97830000 20.63110000 649 93.02440000 82.21470000 51.24020000 62.56800000 66.28570000 31.24040000 650 34.92030000 42.38570000 19.82790000 10.00620000 13.13720000 4.703130000 651 72.83490000 59.08130000 17.31140000 32.15850000 33.22040000 6.716940000 652 75.87330000 87.51590000 19.69710000 49.64470000 65.12760000 12.61070000 653 52.57430000 59.57560000 27.97450000 22.57110000 28.50390000 10.05700000 654 69.05590000 59.73120000 35.37760000 31.61660000 33.17930000 14.36550000 655 71.72920000 69.14430000 38.59350000 37.96630000 42.89720000 17.93680000 656 81.05030000 80.40960000 41.00620000 50.65780000 58.68690000 21.97880000 657 45.45590000 74.75670000 20.93050000 26.71930000 41.70450000 9.677090000 658 54.77320000 75.96830000 33.58010000 32.14810000 45.38850000 15.65100000 659 72.44500000 87.95470000 35.73650000 49.13850000 65.14610000 19.82850000 660 81.30700000 100.0000000 39.55670000 64.26620000 85.94590000 25.50960000 661 54.41720000 46.20260000 24.97930000 18.21660000 19.00890000 7.187290000 662 63.04730000 47.17760000 29.89240000 23.07320000 21.92160000 9.661920000 663 72.86800000 47.97020000 44.48180000 30.70570000 26.03140000 19.33680000 664 91.03770000 55.25490000 48.24790000 46.87860000 38.14870000 23.94110000 665 47.00870000 28.51590000 32.17820000 11.59620000 9.167970000 8.974260000 666 76.17540000 28.50590000 44.40250000 27.95670000 17.42230000 17.75750000 667 86.57290000 39.87130000 51.58180000 38.97460000 26.63300000 25.14990000 668 91.08250000 55.79340000 60.15470000 49.39280000 39.49320000 35.95980000 669 24.13250000 15.63840000 24.70430000 3.247330000 2.474870000 4.676980000 670 24.42840000 11.10870000 92.15140000 17.22350000 7.560260000 79.59740000 671 26.36240000 20.88100000 100.0000000 21.38860000 10.63580000 95.53790000 672 10.75380000 8.206010000 38.26050000 2.634150000 1.323180000 11.55390000 673 0.000000000 14.43270000 61.21180000 6.639630000 3.466490000 32.46700000 674 23.56630000 55.94890000 70.98320000 20.18190000 24.22510000 48.13750000 675 42.38530000 75.32090000 70.16580000 33.69720000 44.87910000 50.29220000 676 23.82270000 32.06220000 31.30430000 6.092530000 7.329380000 8.450150000 677 27.44860000 31.68980000 38.16590000 7.427780000 7.818830000 12.49300000 678 37.33630000 32.07520000 44.20630000 10.65520000 9.501280000 16.98650000 679 82.16820000 70.66460000 43.63300000 46.34930000 48.29470000 22.14890000 680 51.63650000 25.21450000 13.34780000 11.58200000 8.510920000 2.161070000 681 68.10310000 43.34430000 10.45450000 23.53040000 20.55940000 3.387930000 682 70.00550000 50.13920000 0.000000000 26.65820000 25.37370000 3.492930000 683 73.18050000 62.11420000 4.672030000 33.32150000 35.80350000 5.267150000 684 80.51970000 73.43100000 0.000000000 43.73740000 49.46450000 7.242960000 685 90.83540000 89.92210000 18.41320000 62.12550000 74.00340000 13.30040000 686 59.39920000 46.49570000 11.81430000 19.91690000 20.10130000 3.693380000 687 84.47550000 49.21330000 18.24300000 36.40300000 29.88090000 6.092960000 688 77.69510000 52.29250000 25.78020000 33.18190000 29.75800000 8.795370000 689 91.67160000 63.11510000 26.73790000 48.04870000 43.95020000 11.15230000 690 91.52200000 67.47980000 59.26880000 54.70630000 49.89370000 36.69400000 691 93.41570000 91.83240000 62.25750000 71.51490000 80.14770000 45.06960000 692 74.10900000 49.59280000 33.32310000 30.59420000 26.94000000 12.02820000 693 77.24090000 59.91960000 40.85170000 37.48280000 36.24330000 18.23090000 694 77.78790000 61.31840000 51.93930000 40.20520000 38.34030000 27.68250000 695 38.48580000 27.94240000 23.67020000 7.974480000 7.238490000 4.955100000 696 49.50610000 31.65000000 24.24340000 12.43420000 10.54630000 5.573540000 697 56.95510000 37.67070000 23.29950000 16.86860000 14.81340000 5.812840000 698 58.52760000 58.38080000 37.24510000 25.70110000 29.26600000 15.07500000 699 65.92800000 74.12540000 39.43840000 37.33870000 46.45930000 19.22610000 700 65.31380000 85.43310000 77.98520000 51.90030000 63.09950000 64.20390000 701 27.90550000 40.60220000 37.70880000 9.529540000 11.98170000 12.88830000 702 26.47320000 80.00240000 59.75420000 29.92540000 47.25550000 38.03260000 703 30.30580000 85.32360000 74.61820000 37.68790000 55.77840000 58.47440000 704 41.83100000 91.65030000 86.69510000 48.77000000 67.44250000 79.56450000 705 53.25200000 94.62930000 100.0000000 60.03410000 75.88150000 106.0950000 706 32.24900000 54.46250000 60.51120000 18.79990000 22.95210000 34.78370000 707 31.06170000 64.67550000 63.74910000 23.57150000 31.73620000 40.03500000 708 16.99790000 43.47270000 40.11950000 8.983380000 12.84990000 14.70210000 709 25.38410000 53.44480000 45.84340000 14.28470000 20.37310000 20.20210000 710 36.28220000 52.67220000 44.76480000 16.24860000 20.98280000 19.34790000 711 77.93400000 53.14380000 56.90750000 37.96170000 32.18570000 31.59700000 712 77.78130000 52.27820000 73.83080000 41.58080000 33.11620000 52.74910000 713 77.37680000 51.28000000 82.85270000 43.62660000 33.33290000 66.69330000 714 76.61750000 77.48630000 92.01520000 58.39370000 58.66180000 87.03500000 715 10.23970000 18.64830000 15.55230000 1.465840000 2.042040000 1.896430000 716 0.000000000 66.71400000 23.19720000 15.40780000 29.65620000 8.717750000 717 11.40210000 76.79740000 29.64720000 21.60170000 40.69760000 13.24430000 718 15.28390000 91.74790000 33.55880000 31.88530000 60.17480000 18.50700000 719 53.12150000 90.61790000 42.47460000 41.79670000 63.97510000 24.53810000 720 42.26980000 25.04180000 12.98180000 8.111020000 6.684550000 1.924490000 721 48.51190000 30.62420000 8.279100000 11.12710000 9.660640000 1.673150000 722 47.58500000 37.22800000 9.725390000 12.23110000 12.33570000 2.299060000 723 56.00470000 77.19530000 45.65730000 34.97960000 47.70600000 24.23580000 724 70.49410000 86.92390000 47.06770000 48.82910000 63.78160000 27.77630000 725 89.43900000 92.50440000 48.25740000 66.02460000 78.34400000 30.69900000 726 1.655630000 0.000000000 0.000000000 0.004993590 0.002574340 0.000233773 727 23.12790000 53.38560000 28.98530000 11.82580000 19.31110000 9.315220000 728 21.59000000 55.10600000 38.57260000 13.28050000 20.90580000 14.97890000 729 42.16050000 54.56520000 57.39460000 20.93070000 24.18430000 31.46810000 730 44.78050000 66.13150000 66.91090000 28.90720000 35.42150000 44.41370000 731 72.73640000 82.40200000 77.65560000 54.18810000 61.42250000 63.25200000 732 89.88040000 85.38860000 92.51320000 73.08830000 73.42930000 90.05190000 733 51.89620000 21.50440000 23.79980000 11.73150000 7.766630000 4.907150000 734 58.47990000 24.15780000 21.11260000 14.83620000 9.914790000 4.225600000 735 30.66300000 13.68090000 11.20350000 3.660540000 2.538700000 1.064970000 736 36.53950000 10.18080000 11.10250000 4.883990000 2.850290000 1.045500000 737 67.07100000 12.22030000 12.90610000 17.68350000 9.614780000 1.972120000 738 86.11390000 12.21400000 14.71820000 30.30130000 16.11130000 2.912320000 739 76.10040000 14.17600000 42.27540000 25.82200000 13.72100000 15.53180000 740 79.31530000 8.284460000 50.73930000 28.98110000 14.69360000 22.58720000 741 82.70550000 5.181710000 69.00610000 35.19680000 17.30200000 43.32820000 742 81.43680000 19.30460000 77.96080000 37.65290000 19.63090000 56.52680000 743 68.80310000 27.17550000 77.92860000 30.58770000 17.58830000 56.45500000 744 79.82510000 30.12030000 92.12780000 42.74990000 24.09000000 81.39840000 745 44.89010000 11.91090000 36.54870000 9.389520000 5.105600000 10.83270000 746 44.12350000 0.000000000 38.87670000 9.081130000 4.420550000 12.22110000 747 54.73220000 12.74120000 38.53100000 13.55690000 7.304660000 12.31150000 748 55.72720000 37.38930000 51.16380000 19.64210000 15.74890000 23.67650000 749 56.08580000 46.99490000 53.46840000 22.90970000 21.37110000 26.79450000 750 61.31080000 92.39250000 86.43990000 57.20930000 72.58740000 79.66630000 751 71.90400000 92.42680000 91.97110000 65.05150000 76.44550000 90.03380000 752 11.32600000 5.298400000 16.86930000 0.759009000 0.432675000 1.932230000 753 7.734570000 11.65170000 17.67990000 0.864001000 0.868917000 2.216250000 754 83.99490000 14.83530000 37.07880000 30.67540000 16.37770000 12.21970000 755 91.07360000 14.79290000 47.61510000 37.63820000 19.78980000 20.33930000 756 94.75780000 14.68350000 59.58180000 42.93880000 22.24970000 32.32710000 757 93.65340000 14.26040000 76.07160000 46.08550000 23.34830000 53.92600000 758 92.37860000 67.82260000 76.34710000 59.83480000 52.29630000 59.20280000 759 92.01680000 68.11160000 90.34750000 64.14840000 54.21640000 82.76740000 760 12.98270000 31.67700000 14.46690000 3.573410000 6.049000000 2.326480000 761 16.05970000 59.99560000 27.79120000 13.44420000 24.06510000 9.598720000 762 13.92640000 90.20180000 43.65690000 31.95850000 58.45300000 24.88630000 763 13.96710000 91.55390000 55.93450000 35.02340000 61.19640000 36.33230000 764 53.14720000 100.0000000 61.85390000 52.30290000 79.32480000 45.44920000 765 20.53320000 59.99850000 12.02500000 13.06600000 23.97690000 4.836650000 766 33.28540000 74.64110000 11.80390000 22.62790000 39.54810000 7.302460000 767 38.73810000 92.46290000 9.485710000 35.32140000 62.87970000 10.80830000 768 57.60810000 94.50650000 12.65270000 44.03230000 69.56070000 12.10970000 769 49.03080000 86.40360000 17.95640000 34.94380000 56.46140000 11.22360000 770 69.21060000 100.0000000 25.26720000 54.99070000 81.33410000 17.39380000 771 16.33840000 28.84240000 6.359380000 3.131460000 5.056730000 1.032040000 772 11.79420000 54.57510000 85.45620000 22.58960000 24.18440000 70.44080000 773 11.86830000 63.28680000 93.96820000 29.19580000 32.64290000 87.27590000 774 65.64400000 68.91270000 93.16830000 47.55650000 46.14040000 87.37690000 775 48.99800000 47.78030000 57.38370000 20.95630000 20.65010000 30.77300000 776 68.24190000 51.54160000 58.69630000 31.71350000 28.06140000 33.05910000 777 31.13120000 49.41180000 26.35530000 11.71520000 17.19130000 7.739540000 778 30.99580000 80.15950000 32.28590000 26.62520000 46.19300000 15.38650000 779 35.07220000 93.26640000 35.30830000 36.62070000 64.20840000 20.04960000 780 39.18390000 91.84210000 49.38880000 38.73330000 63.55140000 30.27820000 781 15.82730000 35.21780000 28.83960000 5.489820000 8.043060000 7.405670000 782 45.42340000 37.92720000 32.86130000 13.07260000 12.85400000 9.977460000 783 46.56930000 38.53580000 41.27510000 14.64970000 13.77390000 15.40000000 784 57.37260000 39.97390000 46.56200000 20.27210000 17.12910000 19.85270000 785 77.46880000 79.92190000 86.48420000 58.47990000 61.06120000 77.45190000 786 78.15460000 89.22990000 92.55690000 67.03950000 74.12030000 90.58690000 787 38.72750000 65.97620000 57.03440000 24.69720000 33.39600000 32.66400000 788 38.00830000 76.50270000 63.25120000 31.34480000 44.85290000 41.55620000 789 11.65610000 23.06730000 79.10310000 12.56480000 7.341470000 57.25540000 790 0.000000000 34.60410000 83.78640000 15.69840000 11.82550000 65.57460000 791 11.67780000 43.68280000 87.65310000 19.66050000 17.16430000 73.08450000 792 42.12930000 69.82110000 88.61420000 36.22560000 41.16920000 78.56380000 793 42.37290000 77.68710000 88.40620000 40.52710000 49.77030000 79.62350000 794 69.86460000 80.83410000 94.16420000 56.94980000 60.78020000 91.62360000 795 71.43690000 25.68480000 50.83900000 25.55730000 15.37600000 22.99140000 796 86.48130000 25.29500000 55.36730000 36.62110000 20.89410000 27.88450000 797 93.92470000 37.51800000 58.59250000 45.63950000 29.03170000 32.39870000 798 22.24030000 22.16190000 14.76450000 3.081490000 3.488750000 1.919920000 799 58.64290000 19.82770000 11.25700000 13.91780000 8.669850000 1.716000000 800 77.05410000 20.28420000 11.36550000 24.46750000 14.18580000 2.241330000 801 86.97120000 33.12310000 13.97790000 33.72350000 22.03140000 3.724570000 802 92.61920000 44.86690000 14.36200000 41.22820000 30.33450000 5.008520000 803 91.82770000 49.83610000 84.09350000 54.24980000 38.01960000 69.11710000 804 71.58310000 40.75850000 67.93490000 32.45010000 23.21320000 43.19870000 805 72.48300000 39.50180000 91.17760000 39.68940000 25.64360000 80.07880000 806 43.12610000 21.92200000 45.25800000 10.91360000 7.147180000 17.35250000 807 44.50960000 29.45540000 44.84720000 12.47930000 9.686440000 17.43160000 808 45.79050000 39.57320000 48.36300000 15.70920000 14.58820000 21.13600000 809 52.06070000 77.42390000 58.94550000 35.82810000 48.05910000 36.97650000 810 61.00510000 89.76090000 71.72700000 50.79620000 67.04390000 55.82180000 811 13.21400000 31.65080000 73.47550000 12.49380000 9.611200000 49.23260000 812 19.83160000 32.73980000 86.22720000 17.27340000 11.95530000 69.69650000 813 33.49080000 60.95940000 87.46200000 29.20350000 31.37710000 74.98590000 814 75.16260000 60.58520000 91.67930000 48.79800000 41.06880000 83.51350000 815 32.56910000 21.78900000 33.39130000 6.368940000 4.957000000 9.099560000 816 39.91370000 46.95190000 53.56830000 16.82560000 18.21220000 26.60360000 817 42.16810000 47.76180000 62.33300000 19.59710000 19.81790000 36.24960000 818 51.46260000 58.44840000 87.36480000 33.95490000 32.25100000 74.73230000 819 50.65740000 66.46680000 89.24160000 37.85690000 39.51280000 79.29220000 820 61.73000000 88.51610000 93.93720000 57.34840000 68.34260000 92.62330000 821 33.35910000 54.96530000 37.44340000 15.35720000 21.91240000 14.32730000 822 32.08630000 86.62970000 54.82350000 34.27650000 55.83110000 34.19810000 823 46.93630000 82.50730000 47.72380000 34.78860000 52.30470000 26.85850000 824 49.46000000 91.52140000 62.08590000 44.52230000 65.90940000 43.54170000 825 11.96460000 27.03270000 18.55560000 2.844610000 4.404540000 3.029230000 826 13.59040000 27.51480000 48.94530000 6.355630000 5.951200000 20.47240000 827 13.62330000 28.41080000 59.49860000 8.522700000 7.062980000 31.11640000 828 15.06140000 35.47620000 61.59830000 10.52100000 10.14050000 33.99880000 829 23.91970000 47.03820000 63.72200000 15.28210000 17.21160000 37.63540000 830 90.57590000 49.48270000 62.79810000 47.26980000 34.91790000 38.25750000 831 100.0000000 53.87030000 72.53890000 59.32140000 43.17230000 51.90670000 832 26.91420000 14.64980000 18.28410000 3.253450000 2.404640000 2.547380000 833 61.54900000 10.93190000 33.02180000 16.03580000 8.492830000 9.067680000 834 72.88170000 10.01870000 33.63770000 22.43780000 11.71440000 9.695360000 835 20.22640000 90.37950000 16.96370000 30.21730000 58.03370000 11.52140000 836 17.96930000 76.63140000 15.97530000 21.17920000 40.44570000 8.366340000 837 14.65900000 75.37290000 48.57300000 23.49390000 40.19260000 25.85120000 838 13.06130000 75.84570000 61.65140000 26.16670000 41.67170000 39.32230000 839 14.82790000 80.59320000 78.16260000 33.36730000 49.01920000 62.73690000 840 10.52590000 80.42430000 89.08090000 36.43470000 50.04440000 81.10850000 841 13.50510000 43.90350000 72.61980000 15.28570000 15.53340000 49.00680000 842 68.22350000 43.03410000 82.00640000 35.05280000 25.03400000 64.14650000 843 68.64730000 50.48830000 92.86280000 41.32230000 31.34090000 84.26600000 844 37.53450000 27.74370000 48.78690000 10.63520000 8.217660000 20.54470000 845 48.96530000 26.74740000 56.37190000 15.66030000 10.40280000 28.00390000 846 58.92700000 36.09780000 58.72970000 22.29040000 16.49120000 31.35900000 847 26.21910000 23.62430000 29.73500000 4.921730000 4.615120000 7.201220000 848 29.20560000 23.30960000 39.38300000 6.531460000 5.256580000 12.85870000 849 27.53270000 28.48830000 39.78350000 7.055060000 6.717310000 13.38730000 850 30.56350000 40.21750000 44.18620000 10.86060000 12.41450000 17.52230000 851 35.19680000 38.86990000 50.80560000 12.69570000 12.71910000 23.12550000 852 57.44430000 38.31420000 68.28810000 24.32240000 18.07500000 43.09890000 853 57.45830000 37.81530000 90.75950000 30.98840000 20.54520000 78.77650000 854 43.66290000 32.83630000 74.56660000 19.22000000 13.40010000 51.19230000 855 45.57390000 39.53180000 91.46330000 26.80240000 18.99980000 80.00850000 856 41.95900000 34.29430000 63.32430000 16.11300000 12.58810000 36.21900000 857 43.47960000 62.70420000 71.54640000 28.05830000 32.48570000 50.09760000 858 55.88240000 66.18050000 71.37390000 34.49090000 38.20340000 50.62240000 859 24.14870000 28.37240000 18.26150000 4.480510000 5.585180000 3.090520000 860 29.49090000 53.51950000 16.60240000 12.20280000 19.67590000 4.978420000 861 61.64330000 83.69950000 13.85820000 38.64190000 55.78870000 9.957830000 862 71.66980000 91.61290000 7.062490000 49.36710000 69.22790000 11.03940000 863 84.81400000 90.74950000 32.89960000 59.15640000 73.19750000 19.21760000 864 92.37310000 22.03220000 10.24630000 36.04060000 20.47250000 2.683420000 865 100.0000000 22.84950000 29.93410000 43.90160000 24.55110000 9.092380000 866 74.49550000 21.54940000 22.63110000 23.49250000 13.84740000 5.039100000 867 89.75460000 23.68110000 23.08970000 34.73710000 20.05940000 5.808170000 868 94.20980000 39.40960000 30.20970000 42.07980000 28.39240000 10.06560000 869 92.05630000 38.65130000 45.41890000 41.97750000 27.83550000 19.83850000 870 71.31900000 34.48550000 23.48230000 23.79510000 17.28770000 5.992060000 871 70.87180000 42.13720000 21.92260000 25.32600000 20.91710000 6.063560000 872 85.41040000 43.49480000 23.53300000 35.63280000 26.79110000 7.221200000 873 14.11510000 25.09860000 23.54010000 3.016320000 4.007490000 4.544810000 874 10.40100000 34.54320000 22.70420000 4.429120000 7.328870000 4.811050000 875 14.27880000 44.64900000 25.67270000 7.548390000 12.79900000 6.828730000 876 11.46080000 47.18360000 38.70870000 9.444670000 14.78640000 14.09040000 877 12.75660000 51.41250000 73.67160000 17.94170000 20.47490000 51.32480000 878 18.98910000 71.38860000 88.73430000 31.98550000 40.18400000 78.81340000 879 41.30720000 87.27090000 91.01630000 47.07960000 61.92540000 86.39220000 880 54.82840000 100.0000000 91.35690000 61.55120000 83.10850000 90.35290000 881 13.89280000 22.37700000 10.63620000 1.996570000 2.986870000 1.156230000 882 20.03560000 21.33770000 5.897580000 2.434240000 3.027550000 0.643345000 883 27.84370000 42.93910000 11.86510000 8.215320000 12.48670000 2.848390000 884 39.10180000 64.25160000 8.880580000 18.83360000 29.76580000 5.213580000 885 69.67320000 66.22280000 25.37250000 33.95740000 38.84940000 10.34390000 886 10.89810000 11.93670000 6.000120000 0.685643000 0.844454000 0.321338000 887 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 888 11.93080000 8.400470000 26.71180000 1.528470000 0.902322000 5.283330000 889 16.88810000 10.74640000 33.09790000 2.676440000 1.589660000 8.481180000 890 14.55520000 11.15510000 70.74240000 9.313770000 4.254420000 44.52400000 891 40.19400000 9.059380000 91.08510000 20.43710000 9.108140000 77.72920000 892 88.91170000 0.855631000 90.52520000 46.34800000 22.22030000 77.85710000 893 48.10370000 11.82090000 66.00070000 15.81250000 7.800570000 38.61220000 894 54.40110000 13.39540000 84.59840000 23.73520000 11.43120000 66.44950000 895 65.88810000 8.281010000 93.10300000 32.04890000 14.96220000 82.05120000 896 45.08380000 12.37390000 55.08730000 12.37690000 6.354900000 26.06980000 897 57.89760000 13.89050000 61.09040000 18.96970000 9.765370000 32.89300000 898 89.69810000 15.16560000 65.03010000 40.03940000 20.67080000 38.60360000 899 92.63360000 18.38340000 87.76140000 49.25900000 25.11020000 73.25120000 900 92.08060000 17.01220000 98.03680000 52.40250000 26.09870000 92.85160000 901 29.36690000 11.13120000 55.87040000 8.089600000 4.015640000 26.64810000 902 31.20580000 21.33450000 59.77570000 10.20180000 6.363150000 31.20300000 903 41.58580000 40.70720000 59.99550000 16.81010000 15.34290000 32.83530000 904 43.44550000 43.81460000 73.61830000 21.62000000 18.72880000 50.71720000 905 52.06540000 54.30310000 73.81050000 28.40880000 27.43760000 52.31780000 906 60.38020000 65.27250000 82.67520000 39.46880000 39.74980000 67.85670000 907 67.21100000 71.31550000 82.03610000 45.89000000 47.54940000 67.97020000 908 77.13380000 70.75940000 84.43890000 52.45290000 50.41350000 72.18930000 909 91.23260000 75.84190000 86.36230000 66.24280000 61.53830000 76.92220000 910 75.40790000 74.15640000 65.00980000 47.69520000 51.28440000 44.08400000 911 80.12920000 73.69090000 70.01250000 51.84760000 52.90360000 50.67640000 912 56.72180000 31.07450000 31.09450000 15.96920000 12.13420000 8.749130000 913 69.70810000 31.68380000 30.18650000 22.79920000 15.84250000 8.647660000 914 86.81720000 29.87040000 34.76390000 34.49440000 21.30200000 11.55780000 915 36.41090000 14.16500000 18.16590000 5.380630000 3.446530000 2.604480000 916 41.86600000 11.34460000 27.43590000 7.425420000 4.149580000 5.913810000 917 50.56520000 11.97570000 27.29910000 10.57930000 5.832810000 6.012350000 918 54.04080000 10.63410000 21.71400000 11.54020000 6.260940000 3.891120000 919 75.97420000 10.17780000 25.03760000 23.62890000 12.43100000 5.655480000 920 91.21360000 6.596480000 25.24540000 34.65220000 17.89760000 6.212370000 921 91.55080000 5.229910000 36.25020000 35.95380000 18.39210000 11.81270000 922 69.36790000 26.92110000 12.64440000 20.63560000 13.57850000 2.535470000 923 74.90880000 34.83590000 10.57410000 25.49210000 18.34850000 2.874530000 924 79.95630000 55.61600000 13.96450000 35.29270000 32.77590000 5.713140000 925 81.01420000 71.15130000 22.76750000 43.56640000 47.49220000 10.52340000 926 27.91060000 25.74840000 11.97840000 4.470160000 4.970810000 1.613410000 927 34.91270000 28.27110000 0.000000000 6.297920000 6.545600000 0.931574000 928 35.29620000 30.90980000 12.00700000 7.049390000 7.628570000 1.995180000 929 49.61440000 47.70400000 13.14140000 16.05800000 18.67870000 3.849760000 930 54.90480000 66.82670000 39.12550000 28.06030000 36.07910000 17.49910000 931 55.46880000 69.01560000 57.50020000 32.44630000 39.59470000 33.94880000 932 56.71820000 71.37080000 85.94640000 41.81640000 45.34700000 74.36020000 933 88.40920000 75.26530000 93.93590000 66.32250000 60.79170000 90.69060000 934 29.87520000 20.61690000 25.43940000 4.892300000 4.066840000 5.188700000 935 36.25850000 21.49390000 22.98050000 6.356740000 5.000440000 4.357880000 936 43.57130000 23.69090000 20.48950000 8.693710000 6.654440000 3.722710000 937 20.71000000 15.00120000 18.09290000 2.264240000 1.937390000 2.457780000 938 19.01120000 9.504300000 16.44350000 1.613490000 1.092510000 1.911300000 939 19.09790000 13.21590000 11.67340000 1.659180000 1.456390000 1.034130000 940 18.52380000 8.734530000 8.579630000 1.260610000 0.889663000 0.532280000 941 24.67520000 7.894770000 16.02790000 2.356350000 1.377100000 1.829340000 942 26.65690000 7.146290000 11.89860000 2.526990000 1.443690000 1.022020000 943 33.76090000 11.14010000 21.03830000 4.658240000 2.759300000 3.356860000 944 83.57960000 38.46230000 73.36300000 41.30240000 26.72970000 50.85710000 945 93.80730000 43.10770000 73.72100000 50.68070000 33.40340000 52.16640000 946 61.70810000 34.51450000 43.24560000 20.56590000 15.38850000 16.85940000 947 65.79840000 34.38670000 51.44350000 24.02800000 16.97840000 23.94410000 948 74.89560000 42.67970000 51.77980000 31.57960000 23.95120000 25.20860000 949 52.02340000 36.91590000 35.85430000 15.68560000 13.79970000 11.75190000 950 55.04520000 44.32760000 35.52520000 18.92240000 18.41120000 12.27250000 951 54.68060000 45.84060000 61.12960000 23.48060000 20.94840000 34.85900000 952 58.32620000 53.55220000 88.34260000 35.39880000 30.10490000 75.98370000 953 59.35340000 80.19970000 100.0000000 53.15360000 57.99380000 103.0050000 954 16.61820000 22.06130000 40.15000000 4.510390000 3.956990000 13.24250000 955 12.91090000 28.58930000 91.93170000 17.73590000 10.79170000 79.78040000 956 52.45370000 26.61140000 91.13500000 26.63980000 14.92160000 78.61750000 957 44.08620000 12.44320000 45.50440000 10.36890000 5.519120000 17.26570000 958 54.20820000 10.17230000 45.02510000 14.08250000 7.247790000 17.01820000 959 65.16430000 12.85780000 45.68690000 19.69540000 10.36450000 17.85760000 960 64.32100000 10.41100000 56.11480000 20.93800000 10.57570000 27.49090000 961 74.99260000 14.19980000 57.04720000 27.64120000 14.36870000 28.84990000 962 76.00530000 22.58880000 67.21180000 31.44540000 17.35490000 41.18060000 963 91.60760000 30.16010000 75.64810000 46.34050000 26.56440000 53.90060000 964 100.0000000 76.80970000 76.15170000 71.16850000 65.25990000 60.81410000 965 24.10080000 10.38130000 7.697680000 2.113650000 1.446570000 0.504206000 966 51.04400000 25.45540000 0.000000000 11.16160000 8.373300000 1.028070000 967 61.50700000 32.78390000 11.69120000 17.39960000 13.52030000 2.536110000 968 82.58840000 48.22860000 0.000000000 34.26880000 28.34470000 3.665370000 969 91.85860000 58.59890000 11.61710000 45.41030000 39.77970000 6.117010000 970 90.88450000 69.77670000 16.68010000 49.97700000 49.78230000 8.817950000 971 90.74130000 77.39250000 14.55860000 53.91660000 57.97920000 9.716150000 972 92.89040000 87.32360000 33.42230000 63.22490000 71.80890000 19.02470000 973 7.965950000 9.746540000 21.78410000 1.003960000 0.761676000 3.408260000 974 0.000000000 52.05110000 19.70470000 9.013220000 17.21640000 5.506140000 975 10.99640000 60.43570000 35.92820000 14.03490000 24.55460000 13.95980000 976 11.84360000 59.93130000 46.08420000 15.26110000 24.70640000 21.18430000 977 8.333850000 62.24860000 60.18260000 18.69020000 27.66940000 35.32690000 978 11.47620000 91.00780000 74.42540000 38.84460000 62.08710000 59.34930000 979 15.20370000 92.55190000 84.66270000 43.33130000 65.66980000 75.99560000 980 17.42910000 92.22900000 93.56760000 46.40880000 66.55790000 92.14350000 981 38.26960000 46.70470000 45.73140000 14.92000000 17.26880000 19.47810000 982 45.99510000 51.99410000 45.87260000 19.21140000 22.12640000 20.30470000 983 46.21450000 58.15100000 45.46480000 21.59470000 26.87790000 20.76480000 984 58.19710000 61.92850000 54.89990000 29.83170000 33.32700000 30.16590000 985 70.67930000 63.30260000 61.92710000 38.59790000 38.59220000 38.39490000 986 13.84240000 6.011490000 10.21950000 0.726368000 0.470212000 0.679778000 987 7.110140000 5.723450000 12.05890000 0.361586000 0.264872000 0.934769000 988 0.000000000 9.259800000 12.02150000 0.361893000 0.450152000 0.964361000 989 10.15360000 17.57580000 19.46550000 1.544410000 1.898960000 2.872700000 990 0.000000000 21.34820000 22.65200000 1.887060000 2.671930000 4.027770000 991 10.30790000 19.03530000 26.52330000 2.184440000 2.395760000 5.456820000 992 13.97080000 15.42570000 41.08050000 3.681540000 2.473710000 13.65700000 993 22.69230000 21.90830000 45.90180000 6.105200000 4.654180000 17.64670000 994 91.93290000 25.03690000 45.20920000 39.12480000 22.33160000 18.75760000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 100.0000 108.9060 1 0.000000 46.01940 100.0000 24.53780 20.19710 97.21750 2 100.0000 0.000000 75.89170 51.07860 25.19590 53.75030 3 0.000000 0.000000 54.91730 4.831040 1.932540 25.44110 4 100.0000 63.84210 0.000000 54.56610 47.91680 6.373640 5 0.000000 34.30650 0.000000 3.400610 6.801720 1.133680 6 78.47690 0.000000 0.000000 24.20010 12.47580 1.132910 7 8.084850 7.632750 6.875820 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 100.000 108.906 1 0.00000 100.000 100.000 53.8073 78.7404 106.975 2 100.000 0.00000 100.000 59.2885 28.4801 96.9852 3 0.00000 0.00000 100.000 18.0500 7.22046 95.0546 4 100.000 100.000 0.00000 76.9958 92.7795 13.8511 5 0.00000 100.000 0.00000 35.7573 71.5199 11.9206 6 100.000 0.00000 0.00000 41.2385 21.2596 1.93056 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7756 23.7148 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s29-g85-m0-f994-csRGB.ti1000644 000765 000000 00000216254 12261120515 022514 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "819" CREATED "Wed Dec 18 02:50:25 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "85" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "29" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 994 BEGIN_DATA 1 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 2 76.8338000 42.2230000 49.6352000 31.8756000 23.9029000 22.8676000 3 100.000000 51.2681000 64.3533000 56.0285000 40.1050000 39.9605000 4 100.000000 64.2807000 76.2737000 64.2916000 51.6982000 57.9264000 5 100.000000 80.0669000 84.4396000 75.1773000 69.4496000 73.9532000 6 100.000000 90.1002000 89.8894000 83.6385000 83.3869000 85.9798000 7 0.00000000 0.00000000 28.2609000 1.17173000 0.46872300 6.17055000 8 18.7148000 43.6374000 32.9383000 8.51962000 12.6905000 10.3863000 9 43.0647000 54.8510000 55.1182000 20.5397000 23.9307000 28.5625000 10 46.3894000 77.1613000 61.9587000 33.5923000 46.1646000 39.4868000 11 0.00000000 15.5511000 11.3474000 0.96801800 1.58272000 1.41233000 12 0.00000000 11.0294000 0.00000000 0.41802200 0.83610600 0.13935800 13 0.00000000 8.99281000 0.00000000 0.30498500 0.61001500 0.10167400 14 0.00000000 0.00000000 7.04225000 0.10887400 0.04355260 0.57335300 15 0.00000000 0.00000000 8.99281000 0.15395400 0.06158550 0.81074900 16 10.5023000 0.00000000 8.13388000 0.57932700 0.28330500 0.72099100 17 15.3846000 0.00000000 0.00000000 0.84557900 0.43592100 0.03958540 18 17.7165000 0.00000000 0.00000000 1.08993000 0.56189000 0.05102450 19 19.1184000 9.51073000 8.84345000 1.73665000 1.37041000 0.96012900 20 18.8208000 7.64417000 0.00000000 1.45987000 1.11113000 0.13754500 21 67.7113000 19.1345000 0.00000000 18.2482000 11.0253000 1.16654000 22 100.000000 23.9044000 0.00000000 42.9048000 24.5926000 2.48607000 23 100.000000 22.0384000 19.9683000 43.2579000 24.3452000 5.54318000 24 37.7358000 0.00000000 0.00000000 4.84755000 2.49905000 0.22693600 25 41.2621000 0.00000000 0.00000000 5.85100000 3.01636000 0.27391200 26 45.0000000 0.00000000 0.00000000 7.03713000 3.62785000 0.32944000 27 48.9691000 0.00000000 0.00000000 8.43855000 4.35032000 0.39504700 28 53.1915000 0.00000000 0.00000000 10.0943000 5.20390000 0.47255900 29 57.6923000 0.00000000 0.00000000 12.0527000 6.21353000 0.56424300 30 62.5000000 0.00000000 0.00000000 14.3720000 7.40921000 0.67282000 31 67.6471000 0.00000000 0.00000000 17.1225000 8.82714000 0.80158100 32 73.1707000 0.00000000 0.00000000 20.3915000 10.5124000 0.95461600 33 79.1139000 0.00000000 0.00000000 24.2862000 12.5202000 1.13695000 34 85.5263000 0.00000000 0.00000000 28.9398000 14.9193000 1.35480000 35 92.4658000 0.00000000 0.00000000 34.5205000 17.7964000 1.61606000 36 100.000000 83.9352000 0.00000000 65.2919000 69.3701000 9.94937000 37 100.000000 100.000000 0.00000000 76.9958000 92.7795000 13.8511000 38 20.9463000 25.3425000 48.6460000 6.99968000 5.96205000 19.8675000 39 40.4128000 25.8552000 87.1239000 20.7505000 12.0582000 70.4611000 40 69.3058000 75.9561000 100.000000 55.3403000 54.9809000 102.308000 41 83.9209000 84.7716000 100.000000 70.3772000 70.7141000 104.553000 42 0.00000000 31.2500000 0.00000000 2.84579000 5.69200000 0.94871400 43 0.00000000 34.4037000 0.00000000 3.46747000 6.93545000 1.15597000 44 0.00000000 37.7358000 0.00000000 4.20324000 8.40710000 1.40125000 45 0.00000000 50.9454000 20.3749000 8.58896000 16.1890000 5.91577000 46 0.00000000 83.3731000 27.2349000 24.7804000 47.8232000 13.6293000 47 0.00000000 41.2621000 0.00000000 5.07332000 10.1474000 1.69132000 48 80.3956000 42.0283000 0.00000000 30.4537000 23.5318000 2.93739000 49 100.000000 41.5672000 0.00000000 46.3918000 31.5671000 3.64856000 50 100.000000 61.5171000 39.9082000 55.6593000 46.2843000 18.5116000 51 100.000000 72.3891000 57.8393000 63.8061000 57.9095000 35.6230000 52 100.000000 83.2990000 68.1217000 72.4954000 71.5982000 49.8988000 53 25.6238000 37.3214000 22.1557000 7.03597000 9.64114000 5.29577000 54 28.5823000 62.9524000 76.5671000 25.2790000 30.6891000 56.3694000 55 34.4013000 70.1728000 76.4529000 29.9508000 38.2164000 57.4037000 56 57.5282000 75.4304000 79.8426000 41.7534000 48.3674000 64.0131000 57 94.9074000 94.9074000 94.9074000 84.4046000 88.8041000 96.7128000 58 97.4178000 97.4178000 97.4178000 89.5584000 94.2266000 102.618000 59 33.2453000 45.5755000 75.6756000 19.6182000 18.3109000 52.9391000 60 47.4954000 54.3313000 100.000000 35.1166000 29.6270000 98.4802000 61 68.1787000 65.9629000 100.000000 49.5125000 44.2837000 100.551000 62 27.4628000 23.1352000 39.3663000 6.41041000 5.35806000 12.8517000 63 47.7955000 21.5161000 45.6210000 12.5404000 8.11743000 17.5319000 64 65.8323000 63.8371000 49.6754000 32.9882000 35.9525000 25.1695000 65 73.5751000 64.8655000 73.4465000 43.1723000 41.3004000 52.8748000 66 13.1579000 13.1579000 13.1579000 1.48637000 1.56385000 1.70312000 67 5.78704000 5.78704000 5.78704000 0.44554600 0.46877000 0.51051700 68 3.96825000 3.96825000 3.96825000 0.29147700 0.30667000 0.33398100 69 0.00000000 0.00000000 3.37838000 0.04731920 0.01892890 0.24919200 70 3.37838000 0.00000000 0.00000000 0.10810900 0.05573350 0.00506108 71 0.00000000 0.00000000 11.0294000 0.21101400 0.08441110 1.11124000 72 0.00000000 0.00000000 15.3846000 0.37010800 0.14805300 1.94906000 73 0.00000000 0.00000000 17.7165000 0.47706000 0.19083600 2.51228000 74 0.00000000 8.48725000 18.9485000 0.82024900 0.77636900 2.93774000 75 0.00000000 0.00000000 20.1613000 0.60676200 0.24272000 3.19532000 76 0.00000000 0.00000000 22.7273000 0.76251500 0.30502600 4.01554000 77 0.00000000 0.00000000 100.000000 18.0500000 7.22046000 95.0546000 78 19.0438000 16.4120000 100.000000 20.1181000 9.50760000 95.3871000 79 19.1574000 32.2653000 100.000000 22.3473000 13.9458000 96.1263000 80 0.00000000 12.1898000 43.9522000 3.42140000 2.15651000 15.5889000 81 11.8731000 7.57662000 43.3708000 3.62898000 1.89604000 15.0984000 82 0.00000000 0.00000000 45.0000000 3.08014000 1.23213000 16.2206000 83 0.00000000 0.00000000 48.9691000 3.69354000 1.47751000 19.4509000 84 0.00000000 0.00000000 53.1915000 4.41825000 1.76741000 23.2673000 85 0.00000000 0.00000000 57.6923000 5.27546000 2.11032000 27.7815000 86 0.00000000 0.00000000 62.5000000 6.29061000 2.51641000 33.1275000 87 0.00000000 0.00000000 67.6471000 7.49448000 2.99798000 39.4673000 88 0.00000000 0.00000000 73.1707000 8.92530000 3.57035000 47.0023000 89 0.00000000 0.00000000 79.1139000 10.6300000 4.25228000 55.9796000 90 0.00000000 0.00000000 85.5263000 12.6669000 5.06708000 66.7061000 91 0.00000000 0.00000000 92.4658000 15.1096000 6.04422000 79.5698000 92 72.7552000 20.9409000 100.000000 39.4753000 20.1830000 96.4277000 93 73.2909000 39.4941000 100.000000 43.1415000 27.0226000 97.5547000 94 0.00000000 0.00000000 13.1579000 0.28227500 0.11291700 1.48651000 95 6.41026000 6.41026000 6.41026000 0.50621200 0.53259900 0.58003000 96 5.17241000 0.00000000 0.00000000 0.16894500 0.08709620 0.00790909 97 0.00000000 1.65563000 0.00000000 0.04566060 0.09132790 0.01522210 98 0.00000000 7.04225000 0.00000000 0.21568200 0.43139600 0.07190280 99 8.99281000 0.00000000 0.00000000 0.35173500 0.18133000 0.01646630 100 0.00000000 0.00000000 1.65563000 0.02304910 0.00922023 0.12138100 101 0.54466200 0.54466200 0.54466200 0.04040480 0.04251080 0.04629670 102 0.00000000 3.37838000 0.00000000 0.09374000 0.18749400 0.03125050 103 1.09649000 1.09649000 1.09649000 0.08102630 0.08524970 0.09284190 104 0.00000000 0.00000000 5.17241000 0.07394700 0.02958070 0.38941800 105 1.65563000 1.65563000 1.65563000 0.12136900 0.12769600 0.13906800 106 0.00000000 5.17241000 0.00000000 0.14649000 0.29300200 0.04883600 107 7.04225000 0.00000000 0.00000000 0.24874300 0.12823500 0.01164480 108 2.79642000 2.79642000 2.79642000 0.20599700 0.21673400 0.23603600 109 3.37838000 3.37838000 3.37838000 0.24916800 0.26215600 0.28550300 110 8.99281000 8.99281000 8.99281000 0.81067400 0.85293000 0.92889000 111 14.6310000 14.6310000 14.6310000 1.78407000 1.87706000 2.04423000 112 9.66184000 9.66184000 9.66184000 0.90412900 0.95125600 1.03597000 113 0.00000000 13.1579000 0.00000000 0.55919000 1.11846000 0.18642000 114 0.00000000 8.34235000 10.6740000 0.47348700 0.62658200 1.14576000 115 2.22222000 2.22222000 2.22222000 0.16340100 0.17191800 0.18722900 116 7.68322000 7.68322000 7.68322000 0.64653800 0.68023900 0.74081900 117 13.8889000 13.8889000 13.8889000 1.63039000 1.71537000 1.86813000 118 15.3846000 15.3846000 15.3846000 1.94888000 2.05046000 2.23307000 119 16.9271000 16.9271000 16.9271000 2.31148000 2.43197000 2.64855000 120 17.7165000 17.7165000 17.7165000 2.51205000 2.64299000 2.87837000 121 18.5185000 18.5185000 18.5185000 2.72512000 2.86717000 3.12251000 122 19.3333000 19.3333000 19.3333000 2.95256000 3.10646000 3.38312000 123 20.1613000 20.1613000 20.1613000 3.19502000 3.36156000 3.66093000 124 21.0027000 21.0027000 21.0027000 3.45175000 3.63167000 3.95509000 125 21.8579000 21.8579000 21.8579000 3.72488000 3.91904000 4.26806000 126 22.7273000 22.7273000 22.7273000 4.01517000 4.22446000 4.60068000 127 23.6111000 23.6111000 23.6111000 4.32336000 4.54871000 4.95381000 128 24.5098000 24.5098000 24.5098000 4.65168000 4.89415000 5.33001000 129 25.4237000 25.4237000 25.4237000 4.99805000 5.25857000 5.72688000 130 26.3533000 26.3533000 26.3533000 5.36619000 5.64590000 6.14871000 131 27.2989000 27.2989000 27.2989000 5.75696000 6.05704000 6.59647000 132 28.2609000 28.2609000 28.2609000 6.16998000 6.49159000 7.06971000 133 30.2360000 30.2360000 30.2360000 7.07322000 7.44191000 8.10466000 134 31.2500000 31.2500000 31.2500000 7.56434000 7.95863000 8.66740000 135 32.2823000 32.2823000 32.2823000 8.08353000 8.50488000 9.26230000 136 33.3333000 33.3333000 33.3333000 8.63367000 9.08370000 9.89267000 137 34.4037000 34.4037000 34.4037000 9.21681000 9.69723000 10.5608000 138 35.4938000 35.4938000 35.4938000 9.83158000 10.3440000 11.2653000 139 36.6044000 36.6044000 36.6044000 10.4835000 11.0300000 12.0123000 140 37.7358000 37.7358000 37.7358000 11.1726000 11.7549000 12.8018000 141 38.8889000 38.8889000 38.8889000 11.9010000 12.5213000 13.6364000 142 40.0641000 40.0641000 40.0641000 12.6708000 13.3313000 14.5185000 143 41.2621000 41.2621000 41.2621000 13.4853000 14.1882000 15.4518000 144 42.4837000 42.4837000 42.4837000 14.3467000 15.0945000 16.4388000 145 43.7294000 43.7294000 43.7294000 15.2566000 16.0518000 17.4814000 146 45.0000000 45.0000000 45.0000000 16.2191000 17.0645000 18.5842000 147 46.2963000 46.2963000 46.2963000 17.2369000 18.1353000 19.7504000 148 47.6190000 47.6190000 47.6190000 18.3116000 19.2660000 20.9818000 149 48.9691000 48.9691000 48.9691000 19.4490000 20.4628000 22.2852000 150 50.3472000 50.3472000 50.3472000 20.6510000 21.7274000 23.6624000 151 51.7544000 51.7544000 51.7544000 21.9210000 23.0636000 25.1176000 152 53.1915000 53.1915000 53.1915000 23.2651000 24.4778000 26.6577000 153 54.6595000 54.6595000 54.6595000 24.6859000 25.9726000 28.2857000 154 56.1594000 56.1594000 56.1594000 26.1892000 27.5543000 30.0083000 155 57.6923000 57.6923000 57.6923000 27.7789000 29.2269000 31.8298000 156 59.2593000 59.2593000 59.2593000 29.4607000 30.9963000 33.7568000 157 60.8614000 60.8614000 60.8614000 31.2404000 32.8688000 35.7960000 158 62.5000000 62.5000000 62.5000000 33.1244000 34.8510000 37.9548000 159 64.1762000 64.1762000 64.1762000 35.1182000 36.9487000 40.2393000 160 65.8915000 65.8915000 65.8915000 37.2291000 39.1697000 42.6581000 161 67.6471000 67.6471000 67.6471000 39.4636000 41.5207000 45.2184000 162 69.4444000 69.4444000 69.4444000 41.8319000 44.0124000 47.9320000 163 71.2851000 71.2851000 71.2851000 44.3402000 46.6514000 50.8060000 164 73.1707000 73.1707000 73.1707000 46.9979000 49.4476000 53.8513000 165 75.1029000 75.1029000 75.1029000 49.8155000 52.4121000 57.0798000 166 77.0833000 77.0833000 77.0833000 52.8041000 55.5565000 60.5042000 167 79.1139000 79.1139000 79.1139000 55.9744000 58.8920000 64.1368000 168 81.1966000 81.1966000 81.1966000 59.3380000 62.4310000 67.9909000 169 83.3333000 83.3333000 83.3333000 62.9085000 66.1875000 72.0820000 170 85.5263000 85.5263000 85.5263000 66.6999000 70.1766000 76.4264000 171 87.7778000 87.7778000 87.7778000 70.7284000 74.4151000 81.0423000 172 90.0901000 90.0901000 90.0901000 75.0097000 78.9196000 85.9480000 173 92.4658000 92.4658000 92.4658000 79.5624000 83.7096000 91.1645000 174 0.00000000 28.2609000 0.00000000 2.32122000 4.64278000 0.77383400 175 0.00000000 73.1707000 0.00000000 17.6811000 35.3649000 5.89444000 176 0.00000000 79.1139000 0.00000000 21.0582000 42.1195000 7.02026000 177 0.00000000 85.5263000 0.00000000 25.0933000 50.1902000 8.36545000 178 0.00000000 85.6545000 67.6163000 32.6653000 53.3554000 47.8215000 179 0.00000000 100.000000 84.7451000 48.1650000 76.4833000 77.2618000 180 55.0693000 59.6542000 76.6386000 32.0323000 32.0671000 56.3883000 181 60.6581000 69.5063000 88.8949000 43.0453000 44.0052000 78.6719000 182 66.0912000 84.6834000 100.000000 58.8512000 64.6866000 103.997000 183 27.4388000 64.8494000 42.4472000 18.7634000 29.4314000 18.9475000 184 25.6754000 100.000000 59.5163000 43.6170000 74.9194000 41.7698000 185 23.9288000 100.000000 73.2772000 46.6371000 76.0945000 59.1656000 186 22.1598000 100.000000 91.8376000 52.2947000 78.3269000 90.3486000 187 73.8670000 100.000000 91.6326000 71.3875000 88.1785000 90.8507000 188 48.6164000 56.9054000 0.00000000 18.4494000 24.5673000 3.76982000 189 60.0090000 69.6651000 0.00000000 28.9896000 38.4745000 5.89878000 190 74.0404000 72.5420000 0.00000000 38.2803000 45.4834000 6.76208000 191 32.7365000 0.00000000 35.3097000 5.45678000 2.59978000 9.89640000 192 46.9958000 0.00000000 48.4859000 11.3384000 5.42770000 19.4010000 193 52.1162000 28.2588000 71.6152000 20.4846000 13.0234000 46.0279000 194 85.5917000 49.3448000 100.000000 54.4784000 37.0439000 98.8916000 195 100.000000 62.7129000 100.000000 71.8442000 53.5933000 101.171000 196 29.2398000 29.2398000 29.2398000 6.60876000 6.95324000 7.57248000 197 78.3735000 66.5209000 30.8756000 39.4846000 41.4298000 13.2623000 198 100.000000 70.9906000 39.8185000 60.1417000 55.2679000 19.9497000 199 44.6844000 28.9091000 18.3509000 9.87088000 8.63719000 3.81514000 200 48.9151000 57.9044000 18.0649000 19.4482000 25.6098000 6.51051000 201 71.5947000 58.7322000 14.4472000 30.6244000 31.8852000 6.27771000 202 79.3450000 58.0754000 24.1514000 35.9071000 34.1544000 9.19852000 203 53.2325000 83.2025000 0.00000000 33.6943000 52.3824000 8.33536000 204 70.2906000 100.000000 0.00000000 54.4027000 81.1321000 12.7934000 205 62.3715000 0.00000000 14.5237000 14.6411000 7.50928000 2.43071000 206 77.9523000 15.8215000 22.4502000 25.0088000 13.9504000 5.27910000 207 34.4037000 0.00000000 0.00000000 3.99899000 2.06160000 0.18721100 208 32.8677000 83.3723000 0.00000000 27.3308000 49.2629000 8.06856000 209 51.7020000 100.000000 0.00000000 45.2475000 76.4124000 12.3648000 210 53.6362000 100.000000 81.7753000 57.4863000 81.3993000 72.7008000 211 31.4306000 49.6769000 39.9351000 13.2581000 17.7636000 15.2586000 212 76.5436000 57.9500000 49.5756000 36.8991000 34.2521000 24.5486000 213 81.2954000 64.3391000 62.8499000 45.4709000 42.4308000 39.1755000 214 41.0370000 33.4595000 35.9655000 10.9763000 10.2967000 11.4690000 215 53.9135000 34.9390000 40.2094000 16.3998000 13.4893000 14.4503000 216 53.4156000 50.8359000 57.7296000 23.4031000 23.2321000 30.9429000 217 71.5740000 56.8137000 84.8712000 41.9669000 35.2002000 69.8378000 218 62.4258000 23.4125000 41.7859000 18.5649000 11.6426000 15.0570000 219 86.1394000 27.1643000 41.7316000 34.1779000 20.5009000 15.9058000 220 100.000000 29.9788000 58.5578000 49.3040000 28.6705000 31.5056000 221 100.000000 44.9406000 86.8146000 60.4244000 38.6705000 72.9532000 222 100.000000 50.9170000 100.000000 67.2490000 44.4022000 99.6390000 223 64.0115000 0.00000000 26.6222000 16.1905000 8.22657000 6.18563000 224 80.8269000 0.00000000 28.9082000 26.7092000 13.6277000 7.65167000 225 100.000000 50.3740000 36.7321000 51.0220000 37.6190000 15.0850000 226 100.000000 52.0732000 53.1945000 54.0151000 39.7441000 27.9870000 227 21.7184000 7.97032000 19.8975000 2.44435000 1.57191000 3.27713000 228 21.6888000 0.00000000 22.2182000 2.32220000 1.11284000 3.91884000 229 22.0500000 0.00000000 45.8460000 4.84881000 2.12946000 16.9575000 230 23.3010000 0.00000000 62.9222000 8.21334000 3.49675000 33.7091000 231 22.0745000 60.7223000 100.000000 31.3908000 31.4591000 99.0302000 232 29.5406000 70.6761000 100.000000 37.3426000 41.4623000 100.647000 233 46.9125000 82.9437000 100.000000 49.1620000 58.0270000 103.222000 234 52.1940000 92.3665000 100.000000 57.5969000 71.9375000 105.462000 235 71.9245000 93.8084000 100.000000 68.6008000 79.1943000 106.283000 236 0.00000000 34.7239000 27.2771000 4.62588000 7.50579000 6.92669000 237 0.00000000 43.1884000 27.3881000 6.68976000 11.6197000 7.65821000 238 0.00000000 67.0722000 35.1227000 16.3949000 29.8691000 14.4773000 239 0.00000000 100.000000 49.4720000 39.5331000 73.0303000 31.8044000 240 0.00000000 100.000000 67.5434000 43.2264000 74.5077000 51.2541000 241 86.6125000 100.000000 100.000000 83.5829000 94.0906000 108.369000 242 12.4378000 12.4378000 12.4378000 1.35294000 1.42346000 1.55023000 243 4.56621000 4.56621000 4.56621000 0.33831900 0.35595300 0.38765400 244 5.17241000 5.17241000 5.17241000 0.38938200 0.40967800 0.44616300 245 11.0294000 0.00000000 0.00000000 0.48210000 0.24853700 0.02256930 246 100.000000 0.00000000 0.00000000 41.2385000 21.2596000 1.93056000 247 100.000000 38.6418000 20.6872000 46.2933000 30.3510000 6.75716000 248 22.7273000 0.00000000 0.00000000 1.74210000 0.89810500 0.08155570 249 20.1613000 0.00000000 0.00000000 1.38626000 0.71465600 0.06489700 250 28.8852000 0.00000000 81.4919000 14.1588000 5.98700000 59.9609000 251 27.7470000 0.00000000 100.000000 20.6304000 8.55074000 95.1754000 252 39.2869000 22.5587000 100.000000 24.8146000 12.9185000 95.7980000 253 0.00000000 0.00000000 34.4037000 1.75035000 0.70018500 9.21767000 254 0.00000000 0.00000000 37.7358000 2.12176000 0.84876000 11.1736000 255 0.00000000 0.00000000 41.2621000 2.56097000 1.02446000 13.4866000 256 56.3848000 0.00000000 64.7862000 18.2730000 8.63368000 36.4006000 257 58.0131000 38.6263000 63.3656000 23.0988000 17.7126000 36.1911000 258 75.8289000 49.7319000 67.8038000 37.1824000 29.5297000 43.2264000 259 79.0747000 52.6028000 81.9159000 44.2970000 34.1924000 64.5164000 260 84.3636000 64.1069000 100.000000 59.2914000 48.0495000 100.762000 261 86.2973000 76.4950000 100.000000 67.1089000 61.5027000 102.947000 262 0.00000000 51.2519000 59.5501000 13.7300000 18.4125000 32.4746000 263 0.00000000 64.0486000 65.0788000 20.0321000 29.0609000 40.6080000 264 0.00000000 67.7028000 87.4638000 28.1974000 35.0795000 75.1236000 265 0.00000000 67.5556000 100.000000 32.8522000 36.8271000 99.9893000 266 24.6081000 78.2491000 100.000000 40.6294000 49.3627000 101.999000 267 28.7932000 89.7425000 100.000000 48.8035000 64.6051000 104.510000 268 40.8329000 9.17277000 17.1058000 6.48477000 3.75760000 2.72939000 269 46.3291000 0.00000000 12.8245000 7.76047000 3.96952000 1.77431000 270 49.9885000 37.2751000 35.9036000 14.8317000 13.5073000 11.8498000 271 50.2576000 40.0920000 47.0515000 17.0884000 15.5055000 19.8563000 272 75.7358000 64.0802000 46.1217000 38.4388000 38.9911000 22.5198000 273 90.3400000 92.3885000 50.9108000 66.6423000 78.2456000 32.6488000 274 45.1661000 63.9751000 41.0601000 22.7476000 30.9131000 18.0532000 275 55.6707000 65.4524000 62.0036000 31.1291000 35.8220000 37.6720000 276 64.1771000 75.4114000 73.9017000 43.2769000 49.3364000 55.0753000 277 74.8515000 83.7191000 84.9315000 57.8362000 63.8795000 74.6416000 278 0.00000000 92.4658000 0.00000000 29.9323000 59.8690000 9.97865000 279 0.00000000 100.000000 0.00000000 35.7573000 71.5199000 11.9206000 280 0.00000000 100.000000 27.5025000 36.8669000 71.9638000 17.7641000 281 0.00000000 100.000000 100.000000 53.8073000 78.7404000 106.975000 282 0.00000000 26.9243000 31.9404000 3.60878000 4.81466000 8.61233000 283 64.6987000 26.9394000 77.5266000 27.7794000 16.2791000 54.9217000 284 86.5402000 28.2445000 100.000000 50.0883000 27.1792000 97.2189000 285 52.1751000 14.6444000 53.0462000 14.7445000 8.09201000 23.8066000 286 55.1007000 13.8374000 76.5239000 21.3753000 10.7847000 52.6676000 287 55.9057000 18.4142000 100.000000 30.3160000 15.0505000 95.9196000 288 100.000000 0.00000000 32.8252000 42.8271000 21.8952000 10.2968000 289 100.000000 0.00000000 44.2981000 44.2168000 22.4511000 17.6151000 290 100.000000 0.00000000 56.0059000 46.1823000 23.2373000 27.9659000 291 16.1499000 16.1499000 16.1499000 2.12384000 2.23455000 2.43355000 292 11.7284000 11.7284000 11.7284000 1.22809000 1.29210000 1.40717000 293 7.04225000 7.04225000 7.04225000 0.57330000 0.60318300 0.65690100 294 13.1579000 0.00000000 0.00000000 0.64490700 0.33246900 0.03019100 295 25.4237000 0.00000000 0.00000000 2.16855000 1.11795000 0.10152000 296 26.0580000 68.0616000 0.00000000 17.3267000 31.2755000 5.12379000 297 30.4422000 100.000000 0.00000000 38.8687000 73.1239000 12.0662000 298 45.4707000 100.000000 28.8509000 44.1743000 75.7180000 18.6906000 299 86.9335000 100.000000 45.5245000 68.9400000 88.2618000 29.9539000 300 27.4512000 21.6743000 26.7281000 4.95287000 4.47926000 6.09829000 301 30.0531000 22.2032000 47.7053000 7.96668000 5.84804000 19.0083000 302 29.5532000 26.4793000 59.4210000 10.5968000 7.83896000 30.4577000 303 30.6441000 32.2271000 88.1036000 19.7286000 13.1053000 72.4875000 304 38.8963000 68.1631000 88.5311000 33.9590000 38.3423000 77.3894000 305 41.7560000 81.2313000 90.9107000 42.8860000 53.6036000 84.3021000 306 52.5382000 100.000000 92.6031000 60.7444000 82.6504000 92.2180000 307 64.2793000 100.000000 100.000000 69.0985000 86.6234000 107.691000 308 26.1499000 42.0990000 50.8127000 11.5878000 13.3718000 22.9398000 309 68.2293000 55.7505000 55.1095000 31.9210000 30.3007000 29.1837000 310 69.5881000 90.7535000 54.8354000 51.6459000 68.6758000 35.2803000 311 100.000000 91.6822000 100.000000 88.6491000 87.2056000 106.773000 312 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 313 22.2232000 42.6514000 19.3829000 7.67475000 11.9721000 4.85943000 314 28.5926000 58.8758000 28.8873000 14.8929000 23.7588000 10.2206000 315 35.6195000 81.7089000 39.9293000 29.3283000 48.4576000 20.3325000 316 100.000000 89.6806000 51.5671000 73.2991000 78.7763000 32.9939000 317 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 318 52.7581000 0.00000000 41.0984000 12.4559000 6.12806000 13.8380000 319 84.5814000 0.00000000 59.3658000 33.8414000 16.7974000 30.9017000 320 26.5208000 12.7243000 17.9908000 3.37751000 2.46947000 2.87108000 321 37.9137000 9.53148000 26.6725000 6.27238000 3.60721000 5.83742000 322 70.1333000 89.0137000 31.1286000 47.4409000 65.0645000 17.5288000 323 75.7397000 100.000000 31.0458000 59.2008000 83.4420000 20.4153000 324 18.2974000 36.2953000 0.00000000 5.03178000 8.34696000 1.34599000 325 23.7239000 49.9065000 12.1279000 9.76236000 16.3211000 3.92772000 326 77.3528000 75.1251000 25.5264000 42.8011000 49.7966000 12.3713000 327 100.000000 81.0459000 36.3414000 65.4305000 66.5091000 19.6702000 328 28.2609000 0.00000000 0.00000000 2.67703000 1.38009000 0.12532400 329 28.6488000 8.23544000 10.8375000 3.22532000 2.03695000 1.29955000 330 31.2500000 0.00000000 0.00000000 3.28202000 1.69198000 0.15364600 331 37.2444000 20.6273000 0.00000000 5.97114000 4.94087000 0.63904900 332 40.3815000 44.8911000 25.7845000 12.6364000 15.4136000 7.42562000 333 14.4452000 14.9618000 0.00000000 1.45469000 1.78589000 0.26806000 334 11.0294000 11.0294000 11.0294000 1.11114000 1.16905000 1.27317000 335 0.00000000 25.4237000 0.00000000 1.88032000 3.76092000 0.62685100 336 0.00000000 33.8276000 80.3607000 14.3583000 11.1017000 59.0959000 337 0.00000000 40.3171000 100.000000 22.8809000 16.8830000 96.6651000 338 0.00000000 48.6644000 66.6669000 14.4748000 17.3415000 40.6174000 339 0.00000000 54.6457000 83.8801000 21.4061000 23.4152000 66.9423000 340 46.8844000 64.4975000 100.000000 39.0925000 37.9010000 99.8678000 341 52.3445000 75.3234000 100.000000 46.6629000 49.9782000 101.800000 342 69.8968000 61.3978000 78.8847000 40.9577000 37.6849000 60.4725000 343 71.1582000 100.000000 80.2710000 65.9012000 85.7915000 70.6522000 344 23.3140000 33.1002000 40.4447000 7.48732000 8.32980000 14.0815000 345 23.6092000 51.5457000 100.000000 28.1008000 24.5391000 97.8678000 346 0.00000000 24.5468000 36.8764000 3.77709000 4.31943000 11.2329000 347 22.9733000 41.1318000 36.9143000 8.84514000 11.8079000 12.4342000 348 30.0039000 54.6536000 36.4320000 14.2775000 20.9173000 13.6190000 349 83.6088000 27.5516000 0.00000000 29.7043000 18.5883000 2.02271000 350 85.5665000 100.000000 0.00000000 64.7278000 86.4551000 13.2768000 351 87.0333000 100.000000 23.5902000 66.6803000 87.3669000 17.6461000 352 0.00000000 15.3846000 0.00000000 0.73318900 1.46649000 0.24442700 353 10.3406000 10.3406000 10.3406000 1.00339000 1.05569000 1.14971000 354 27.7783000 6.74927000 29.7473000 4.08941000 2.26051000 7.03227000 355 36.2573000 0.00000000 52.5441000 8.76141000 4.01985000 22.8649000 356 44.2645000 10.5592000 63.0347000 13.5937000 6.84692000 34.2039000 357 43.3706000 33.3340000 63.6791000 16.3084000 12.4726000 35.9099000 358 46.6045000 53.8160000 59.4059000 22.1889000 24.1176000 32.9725000 359 55.2860000 62.9315000 65.9188000 30.7097000 33.7985000 41.9988000 360 100.000000 67.1201000 67.7498000 63.3495000 53.4525000 46.3949000 361 62.2528000 43.7202000 0.00000000 19.9842000 18.8199000 2.57959000 362 64.4221000 56.4354000 0.00000000 25.3255000 27.8412000 4.03942000 363 100.000000 62.8467000 21.6188000 54.5457000 46.7679000 9.78312000 364 100.000000 74.6969000 20.5718000 60.3842000 58.5455000 11.4218000 365 100.000000 100.000000 26.0144000 77.9891000 93.1769000 19.0820000 366 31.7026000 35.0125000 18.1884000 7.47593000 9.13419000 3.99409000 367 58.4200000 40.4412000 21.1777000 17.9171000 16.3788000 5.70761000 368 61.5753000 79.3330000 37.2397000 37.1605000 50.3766000 18.5838000 369 74.4239000 100.000000 51.5905000 61.0717000 84.0926000 34.6858000 370 0.00000000 45.0000000 0.00000000 6.10179000 12.2045000 2.03418000 371 0.00000000 48.9691000 0.00000000 7.31695000 14.6350000 2.43928000 372 0.00000000 53.1915000 0.00000000 8.75260000 17.5065000 2.91789000 373 0.00000000 57.6923000 0.00000000 10.4508000 20.9030000 3.48401000 374 0.00000000 62.5000000 0.00000000 12.4618000 24.9254000 4.15444000 375 0.00000000 67.6471000 0.00000000 14.8467000 29.6955000 4.94950000 376 37.2404000 30.3882000 0.00000000 7.40372000 7.80782000 1.11694000 377 49.4442000 31.3202000 0.00000000 11.4747000 10.1596000 1.35637000 378 64.5741000 31.7775000 0.00000000 18.3915000 13.8530000 1.70480000 379 82.8493000 66.7588000 0.00000000 41.3567000 42.7251000 6.06758000 380 0.00000000 34.6480000 14.7863000 3.86359000 7.17556000 2.99031000 381 0.00000000 58.3455000 39.8732000 13.0945000 22.3789000 16.1170000 382 0.00000000 77.1354000 52.3369000 24.1609000 41.5001000 29.0950000 383 0.00000000 75.9664000 82.5754000 30.9308000 43.1387000 68.0439000 384 0.00000000 84.0291000 80.2914000 35.1026000 52.6275000 65.9066000 385 37.9155000 83.1645000 85.1892000 41.0097000 54.6675000 74.1982000 386 40.2852000 69.9264000 65.6277000 28.5512000 37.6362000 42.4906000 387 58.4352000 77.2285000 69.6864000 40.3512000 49.4949000 49.3912000 388 0.00000000 16.3410000 21.0949000 1.47705000 1.89669000 3.75285000 389 0.00000000 15.3614000 28.7990000 1.94846000 1.94951000 6.65387000 390 0.00000000 9.94502000 30.7020000 1.74099000 1.26513000 7.41521000 391 0.00000000 0.00000000 31.2500000 1.43653000 0.57465000 7.56504000 392 15.1377000 14.0607000 66.5734000 8.68128000 4.56986000 38.3387000 393 39.1753000 39.0839000 72.3083000 18.4610000 15.2305000 47.5295000 394 84.4108000 60.7235000 71.9338000 48.3828000 41.3122000 50.4619000 395 50.7370000 50.5255000 34.7787000 18.7294000 21.0716000 12.4627000 396 49.5248000 78.9653000 34.0255000 31.3265000 47.0837000 16.4041000 397 64.0533000 80.4269000 65.8800000 44.0908000 54.3540000 45.2131000 398 100.000000 23.0491000 34.4536000 44.5465000 25.0670000 11.6933000 399 100.000000 22.8681000 47.5295000 46.2305000 25.7026000 20.6791000 400 100.000000 24.2798000 67.4400000 50.4001000 27.6734000 41.7033000 401 100.000000 22.0484000 88.6286000 56.3910000 29.6008000 74.6986000 402 100.000000 75.1288000 89.4935000 74.0265000 64.3869000 82.0807000 403 100.000000 83.9606000 100.000000 83.3582000 76.6232000 105.009000 404 17.6298000 0.00000000 32.8339000 2.66996000 1.19285000 8.42132000 405 15.3259000 22.0232000 33.0899000 3.87673000 3.92260000 9.01912000 406 11.1289000 31.7922000 42.4570000 6.15753000 7.23592000 15.3345000 407 0.00000000 52.3413000 44.8018000 11.5027000 18.1246000 18.8861000 408 0.00000000 84.1510000 45.0387000 27.2789000 49.6241000 24.3157000 409 45.0942000 100.000000 51.3762000 46.9233000 76.8030000 33.8286000 410 13.8153000 22.1770000 0.00000000 2.14176000 3.24347000 0.51319700 411 23.4054000 20.4231000 0.00000000 3.07562000 3.41348000 0.49680500 412 25.5047000 100.000000 40.7768000 40.4372000 73.6440000 25.1764000 413 50.4826000 100.000000 69.4562000 52.7165000 79.3449000 54.1939000 414 0.00000000 31.2387000 61.7483000 8.96875000 8.13802000 33.2036000 415 0.00000000 41.9141000 68.8119000 13.0290000 13.6045000 42.7411000 416 0.00000000 44.0539000 83.7239000 17.9044000 16.4929000 65.5239000 417 0.00000000 54.1291000 100.000000 27.1422000 25.4062000 98.0857000 418 0.00000000 79.3392000 100.000000 39.2428000 49.6091000 102.120000 419 0.00000000 89.9244000 100.000000 46.1521000 63.4288000 104.423000 420 0.00000000 37.7250000 47.9729000 7.73406000 9.81545000 20.0077000 421 0.00000000 48.4032000 49.4637000 10.9102000 15.7826000 22.2554000 422 0.00000000 69.2544000 59.2907000 21.2430000 33.5262000 34.7125000 423 67.7747000 74.2906000 58.5532000 40.9348000 47.6289000 35.6011000 424 44.5733000 0.00000000 21.1697000 7.56095000 3.82104000 3.82692000 425 66.2057000 35.6262000 20.3690000 20.6697000 16.1184000 5.26381000 426 100.000000 38.7779000 36.3693000 47.6535000 30.9474000 13.7593000 427 100.000000 38.5820000 50.0104000 49.5074000 31.6138000 23.7538000 428 59.3296000 28.2882000 35.6575000 17.0268000 12.0130000 11.3025000 429 62.2252000 57.9778000 37.7753000 26.9240000 29.3186000 15.3864000 430 74.1757000 69.4831000 43.7657000 39.6819000 43.5152000 21.5221000 431 84.4598000 91.1623000 81.3316000 68.4289000 77.0025000 70.5459000 432 87.4447000 100.000000 80.8989000 77.3588000 91.6758000 72.2003000 433 88.1664000 100.000000 91.3451000 81.4505000 93.3784000 90.7735000 434 40.5756000 71.7546000 39.8969000 24.9590000 37.7212000 18.4689000 435 59.3267000 100.000000 42.5398000 51.3040000 79.2191000 26.9087000 436 0.00000000 22.7273000 0.00000000 1.51055000 3.02133000 0.50358000 437 0.00000000 20.1613000 0.00000000 1.20200000 2.40419000 0.40071700 438 0.00000000 17.7165000 0.00000000 0.94506200 1.89026000 0.31505900 439 11.6339000 16.6927000 9.46451000 1.53977000 2.03361000 1.18251000 440 0.00000000 24.2483000 14.4929000 2.04670000 3.56058000 2.32579000 441 29.9154000 42.1215000 84.3233000 20.5722000 17.0574000 66.5180000 442 31.7998000 44.1229000 100.000000 27.3015000 20.6759000 97.1643000 443 0.00000000 20.3421000 43.2640000 4.05425000 3.57745000 15.3216000 444 0.00000000 18.6595000 73.1270000 9.95335000 5.64552000 47.2867000 445 0.00000000 23.7692000 100.000000 19.6978000 10.5162000 95.6039000 446 42.3990000 35.4003000 100.000000 27.9274000 17.7743000 96.5712000 447 80.9760000 0.00000000 16.6837000 26.0163000 13.3628000 3.45014000 448 100.000000 0.00000000 19.0425000 41.7836000 21.4777000 4.80140000 449 100.000000 50.9236000 18.9572000 49.7418000 37.4025000 7.43193000 450 100.000000 90.5541000 36.4146000 71.7572000 79.1501000 21.8200000 451 100.000000 100.000000 45.3636000 80.1295000 94.0331000 30.3537000 452 100.000000 100.000000 62.9617000 83.3894000 95.3372000 47.5213000 453 100.000000 100.000000 78.7693000 87.5222000 96.9904000 69.2851000 454 100.000000 100.000000 91.1025000 91.6055000 98.6238000 90.7887000 455 31.3209000 0.00000000 11.6214000 3.52672000 1.79160000 1.36366000 456 32.6054000 10.8742000 0.00000000 3.98898000 2.66350000 0.30391800 457 100.000000 0.00000000 68.8235000 49.0255000 24.3747000 42.9385000 458 100.000000 0.00000000 81.1220000 52.4840000 25.7581000 61.1514000 459 100.000000 21.8953000 100.000000 60.6944000 31.2922000 97.4539000 460 100.000000 38.0004000 100.000000 63.5537000 37.0113000 98.4071000 461 41.6152000 0.00000000 29.9235000 7.27291000 3.59750000 7.20442000 462 61.0270000 0.00000000 35.2886000 15.4811000 7.76785000 10.3536000 463 74.5730000 0.00000000 47.5883000 24.7474000 12.3569000 19.2837000 464 77.9616000 0.00000000 68.7006000 31.2562000 15.2176000 41.9457000 465 63.7699000 0.00000000 54.7149000 19.7231000 9.62514000 25.4467000 466 68.7744000 0.00000000 79.9273000 28.6395000 13.5082000 58.1108000 467 86.2878000 0.00000000 84.3073000 41.7878000 20.1263000 65.9648000 468 63.9016000 24.3353000 58.7199000 22.3028000 13.4263000 30.1608000 469 70.6572000 23.1381000 69.4952000 28.3834000 16.0351000 43.3079000 470 90.4238000 35.9857000 87.4713000 49.9514000 29.8633000 72.9841000 471 28.4100000 33.0400000 0.00000000 5.89552000 7.77480000 1.19003000 472 34.7896000 47.3841000 0.00000000 10.9084000 15.7432000 2.46394000 473 46.4040000 47.8085000 11.8479000 14.7010000 17.8669000 3.91624000 474 79.5970000 53.7278000 0.00000000 33.5659000 30.5851000 4.13483000 475 100.000000 56.2442000 0.00000000 51.1235000 41.0313000 5.22599000 476 100.000000 69.4061000 0.00000000 56.9569000 52.6987000 7.17067000 477 49.4779000 17.7005000 0.00000000 9.57218000 6.33554000 0.71849800 478 65.9088000 23.1840000 21.8009000 18.4360000 11.7536000 4.98658000 479 62.8925000 22.7087000 28.6624000 17.2857000 11.0111000 7.53426000 480 61.4539000 31.9998000 27.4563000 17.9402000 13.5552000 7.46820000 481 60.7789000 40.4600000 34.7722000 20.1708000 17.4181000 11.6779000 482 89.8564000 43.6235000 36.4348000 40.0366000 28.8897000 13.8022000 483 89.0072000 53.2673000 40.7728000 42.9444000 34.8851000 17.5604000 484 32.2156000 23.2183000 23.7011000 5.89407000 5.28044000 5.04418000 485 33.5126000 38.8609000 49.4827000 12.0356000 12.4055000 21.5609000 486 33.2370000 87.1206000 73.5270000 38.9074000 57.8551000 56.4104000 487 32.1609000 100.000000 100.000000 57.2879000 80.5347000 107.138000 488 0.00000000 0.00000000 25.4237000 0.94917200 0.37969300 4.99851000 489 11.6500000 0.00000000 23.1066000 1.31416000 0.58654300 4.17110000 490 12.3823000 11.4731000 21.4485000 1.71082000 1.46502000 3.76893000 491 52.1922000 0.00000000 84.1340000 21.8939000 9.87702000 64.7372000 492 48.3911000 0.00000000 100.000000 26.2753000 11.4608000 95.4397000 493 67.0990000 0.00000000 100.000000 34.8662000 15.8897000 95.8419000 494 84.0796000 0.00000000 100.000000 45.8982000 21.5770000 96.3583000 495 100.000000 0.00000000 100.000000 59.2885000 28.4801000 96.9852000 496 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 497 8.33333000 8.33333000 8.33333000 0.72515300 0.76295100 0.83089800 498 78.5941000 38.6163000 58.0018000 33.6789000 23.2959000 30.7003000 499 82.0688000 83.8015000 91.2807000 65.0134000 67.4036000 86.5032000 500 89.5180000 84.6127000 94.2327000 72.3447000 71.8375000 92.7238000 501 39.9148000 26.2252000 30.2752000 8.80122000 7.35025000 8.01443000 502 51.8649000 30.4439000 29.0381000 13.4911000 10.8178000 7.86479000 503 64.7614000 46.0859000 32.6535000 23.5393000 21.4873000 11.1456000 504 69.2225000 55.4636000 33.7790000 29.2941000 29.1419000 12.9148000 505 89.0582000 79.8041000 32.1479000 54.7034000 59.9044000 16.6588000 506 93.7129000 82.3935000 88.8451000 72.4585000 70.0110000 82.0499000 507 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 508 87.2857000 58.2272000 51.0560000 45.0075000 38.5687000 26.2612000 509 87.5733000 73.9341000 51.5710000 52.7532000 53.5835000 29.2175000 510 82.2899000 81.8147000 47.0865000 52.6337000 60.4543000 26.6878000 511 16.9093000 21.0293000 6.67867000 2.40411000 3.16020000 1.01495000 512 13.4234000 56.8371000 18.7979000 11.3139000 20.7877000 6.20512000 513 10.7154000 88.2231000 20.0107000 27.9736000 54.3103000 12.1449000 514 29.8005000 86.0033000 21.5694000 29.0795000 52.6359000 12.2421000 515 100.000000 88.6291000 19.5243000 69.0049000 75.8828000 14.0045000 516 65.9817000 61.3979000 27.5301000 29.2964000 32.7646000 10.6083000 517 71.9528000 71.1099000 87.6117000 49.6062000 48.6581000 76.8834000 518 6.43113000 13.9439000 15.0839000 1.19564000 1.49211000 2.09836000 519 14.2430000 12.7799000 17.9056000 1.75756000 1.64037000 2.77377000 520 17.5340000 3.99097000 20.4992000 1.80585000 1.02240000 3.38345000 521 15.4027000 10.5598000 79.4206000 11.9602000 5.50673000 56.6370000 522 21.4455000 48.2592000 85.4777000 21.2991000 20.0451000 69.0576000 523 27.7369000 51.0810000 51.0536000 14.6367000 18.9799000 24.0783000 524 32.5751000 61.6944000 63.4102000 22.1780000 28.6625000 38.4058000 525 33.4435000 77.2640000 72.3541000 32.4463000 45.3696000 52.6743000 526 60.2534000 90.0951000 75.3737000 51.0188000 67.1007000 60.2530000 527 17.0574000 15.5736000 9.91740000 1.94481000 2.09398000 1.23800000 528 20.0166000 13.6087000 4.81259000 2.02815000 1.91726000 0.62002700 529 25.5890000 21.0284000 10.7716000 3.70160000 3.81717000 1.60736000 530 32.8543000 24.2177000 3.56194000 5.39506000 5.31318000 1.00141000 531 39.9129000 50.3606000 19.4624000 13.7956000 18.5872000 5.83623000 532 45.2230000 54.6281000 35.3037000 18.2337000 22.9572000 13.1490000 533 57.2098000 70.6420000 50.9152000 32.1989000 40.4053000 27.1638000 534 25.6667000 33.5640000 34.8549000 7.30259000 8.44828000 10.6710000 535 31.3891000 40.6488000 34.5590000 9.99357000 12.2452000 11.0974000 536 47.1908000 42.4664000 37.8174000 15.3162000 15.6560000 13.3870000 537 54.4954000 50.7647000 42.4398000 21.2685000 22.3924000 17.4516000 538 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 539 30.7533000 5.71840000 43.2174000 6.16706000 3.09798000 15.0834000 540 33.6321000 50.3818000 55.3494000 16.4147000 19.4568000 28.1465000 541 38.0843000 49.9614000 60.4765000 18.4334000 20.1712000 33.5893000 542 41.0823000 50.7330000 69.9853000 21.7780000 22.0197000 45.4683000 543 64.4427000 55.3460000 91.5349000 39.6886000 32.9239000 81.6688000 544 73.2291000 81.0095000 95.7504000 58.9899000 61.4929000 94.4830000 545 63.6525000 71.8856000 82.9009000 43.7670000 46.4318000 68.5479000 546 65.1766000 86.5573000 82.4940000 53.2260000 64.3657000 70.8305000 547 54.4283000 13.8469000 7.05533000 11.3316000 6.73492000 1.27491000 548 61.4557000 24.5332000 9.80782000 15.7771000 10.7162000 2.15722000 549 74.5884000 30.6878000 9.47704000 24.1933000 16.5243000 2.78749000 550 75.2586000 43.4998000 32.0227000 28.9003000 23.1507000 10.8602000 551 39.6447000 25.6643000 22.2147000 8.02285000 6.89592000 4.73355000 552 88.7718000 26.9394000 23.0262000 34.3698000 20.7595000 6.29580000 553 87.0347000 36.5792000 20.9875000 34.6975000 23.6590000 6.16963000 554 86.7916000 46.7968000 27.5903000 37.6672000 29.1414000 9.49309000 555 100.000000 45.7596000 73.3248000 56.5303000 37.4968000 51.2624000 556 100.000000 59.7188000 85.0252000 65.0120000 48.8083000 71.5174000 557 50.2373000 33.9326000 49.6858000 16.0985000 12.8617000 21.6114000 558 53.2294000 44.3540000 56.9181000 21.1478000 19.0938000 29.4180000 559 52.4691000 63.5324000 72.7239000 31.5237000 34.4169000 51.1306000 560 57.9924000 63.4521000 92.5448000 40.2138000 38.1113000 84.5896000 561 74.5358000 68.0770000 93.2704000 51.7176000 47.2365000 87.1620000 562 55.8615000 50.8250000 68.9742000 26.9861000 24.7801000 44.3770000 563 65.7092000 49.7958000 71.7938000 32.1947000 26.8713000 48.3323000 564 90.7601000 54.5714000 88.4650000 56.0204000 41.0406000 76.6266000 565 29.7837000 0.00000000 20.4660000 3.60042000 1.78405000 3.42561000 566 34.2563000 5.92907000 18.8767000 4.67195000 2.60250000 3.06710000 567 88.5799000 28.3976000 34.0075000 35.3777000 21.5210000 11.2467000 568 93.1095000 40.3419000 42.6154000 42.6470000 28.8504000 17.6975000 569 53.8408000 18.2451000 19.2918000 11.9204000 7.56209000 3.75894000 570 73.4740000 25.0557000 16.8583000 22.8436000 14.4391000 3.86777000 571 77.4564000 34.8289000 27.1735000 27.8001000 19.4868000 7.97530000 572 79.7626000 36.9227000 91.6502000 43.5609000 26.7087000 80.4856000 573 41.6083000 36.7915000 48.4321000 13.5489000 12.4865000 20.6017000 574 42.5643000 43.5987000 58.1157000 17.3140000 16.7738000 30.4249000 575 41.3864000 90.9967000 68.8966000 42.5599000 63.8943000 51.0032000 576 13.3819000 31.0833000 55.0374000 8.23732000 7.87541000 26.0318000 577 15.7829000 51.2382000 56.4512000 13.9848000 18.6092000 29.2221000 578 14.8817000 64.5373000 68.8077000 21.9574000 30.2803000 45.4839000 579 12.9011000 69.2868000 80.5418000 27.3476000 36.0664000 63.5231000 580 22.4949000 83.8483000 79.6027000 36.4838000 53.1908000 64.8391000 581 15.2815000 53.6334000 52.6574000 14.0695000 19.9843000 25.7720000 582 37.4878000 59.0593000 67.0615000 23.1342000 27.4108000 42.6044000 583 42.6991000 59.4646000 75.2336000 26.9576000 29.3810000 54.0328000 584 62.0738000 52.3982000 57.7381000 27.9127000 26.3561000 31.3173000 585 72.6561000 54.7010000 62.5329000 35.6733000 31.4741000 37.2070000 586 63.3983000 44.8014000 47.8786000 24.3947000 21.1436000 21.2383000 587 74.2647000 51.4459000 51.5639000 33.3492000 28.8013000 25.4499000 588 79.5717000 84.1159000 69.2445000 56.6663000 64.1851000 50.7769000 589 6.05069000 11.4361000 4.78940000 0.71534600 1.01944000 0.51418700 590 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 591 21.8274000 41.6995000 43.2032000 9.62340000 12.3373000 16.6742000 592 28.7722000 45.2122000 62.8608000 15.3101000 16.3072000 35.7352000 593 45.1824000 45.0862000 68.8425000 21.0168000 19.0308000 43.4078000 594 32.6581000 21.4307000 33.7003000 6.61849000 5.22169000 9.44996000 595 34.7196000 28.2908000 36.2169000 8.34848000 7.53253000 11.2208000 596 37.5954000 92.9811000 57.5877000 40.3757000 65.2089000 38.0013000 597 37.0348000 93.0420000 86.3721000 47.9687000 68.3009000 78.5415000 598 12.1723000 33.6360000 36.7715000 5.88598000 7.71551000 11.7149000 599 0.00000000 36.8488000 36.7646000 6.00840000 8.80265000 11.9143000 600 7.43200000 60.8791000 55.7792000 16.9284000 25.6209000 29.7392000 601 70.2723000 62.1337000 64.5302000 37.6869000 36.9117000 40.5248000 602 77.7901000 70.3979000 66.7953000 46.8930000 47.4169000 44.8759000 603 70.8946000 69.9025000 60.9652000 40.9285000 44.1205000 37.5747000 604 74.8195000 72.9531000 81.8031000 50.4552000 50.7634000 67.2040000 605 83.2823000 74.1704000 89.2775000 59.4386000 56.0879000 80.8469000 606 20.9068000 19.4747000 29.1754000 3.86002000 3.51717000 7.02460000 607 17.9888000 33.2202000 73.5884000 13.3860000 10.6453000 48.7316000 608 15.6761000 49.7285000 77.1981000 18.4993000 19.6043000 55.5480000 609 13.6305000 63.9703000 85.3897000 26.4248000 31.6405000 70.8722000 610 33.1007000 75.0697000 90.6055000 36.8452000 45.1241000 82.4052000 611 40.2795000 15.4738000 23.4113000 7.10888000 4.67113000 4.76058000 612 49.8023000 17.5028000 24.6095000 10.5659000 6.71637000 5.40690000 613 48.5252000 68.0986000 23.7623000 24.1737000 34.7364000 9.78834000 614 53.2971000 68.6961000 36.4558000 27.4750000 36.7443000 15.9925000 615 61.5321000 89.8201000 37.5827000 44.0186000 64.0617000 21.0730000 616 82.8946000 90.1134000 64.8460000 62.0323000 73.1110000 46.6130000 617 87.9383000 100.000000 65.1128000 73.4584000 90.1605000 49.6279000 618 35.3277000 68.4469000 26.9259000 20.5278000 33.0848000 10.8793000 619 38.0069000 92.2223000 36.9380000 36.7036000 62.8604000 20.8348000 620 22.4164000 50.6667000 62.0105000 15.7553000 19.1013000 35.2627000 621 22.3127000 67.5261000 65.1296000 23.3596000 33.2011000 41.2942000 622 22.0411000 76.3978000 81.1177000 32.3584000 44.2917000 65.7822000 623 33.7285000 42.1264000 45.0044000 12.2206000 13.8152000 18.1711000 624 38.3878000 47.5287000 44.7958000 14.9361000 17.5333000 18.5865000 625 55.0633000 46.8738000 47.8503000 21.0576000 20.3365000 21.2350000 626 54.5793000 56.6581000 49.8502000 24.5599000 27.1310000 24.0620000 627 63.0679000 100.000000 62.2152000 56.6466000 81.5696000 45.4029000 628 13.7338000 60.5425000 32.7757000 13.8958000 24.2294000 12.2462000 629 12.7346000 68.4239000 47.5853000 19.3110000 32.1625000 23.3905000 630 23.7839000 83.7085000 59.5875000 31.4734000 51.0648000 37.8830000 631 54.9068000 84.5547000 63.1441000 41.7068000 57.0649000 42.5446000 632 31.9527000 35.6969000 27.1530000 8.25905000 9.68971000 7.10518000 633 33.6537000 45.7203000 32.0071000 11.6422000 15.1999000 10.2271000 634 42.4801000 45.0164000 50.6564000 16.3043000 17.0122000 23.2554000 635 62.5267000 44.6016000 60.4479000 26.2172000 21.7292000 33.4478000 636 84.9614000 57.7374000 61.6246000 45.0775000 38.0767000 36.9380000 637 85.2302000 77.2500000 62.4477000 54.9553000 57.2418000 41.0653000 638 90.6854000 89.1156000 69.4554000 68.5146000 75.2809000 52.5760000 639 25.3692000 27.3201000 33.6150000 5.99701000 6.11930000 9.61044000 640 27.4036000 29.9763000 43.6626000 8.01953000 7.68248000 16.1980000 641 53.5473000 29.4882000 85.5244000 25.4375000 15.4058000 68.0255000 642 57.8878000 32.2700000 100.000000 33.2313000 19.5582000 96.6361000 643 36.2485000 21.5233000 69.0605000 13.6645000 8.15824000 41.9854000 644 60.6715000 56.8535000 81.6716000 35.0006000 31.7511000 64.1309000 645 87.9706000 71.4413000 82.9374000 59.4225000 54.1552000 69.2752000 646 32.8099000 49.5657000 27.4064000 12.2387000 17.3326000 8.47633000 647 93.4155000 56.7704000 28.9509000 46.6480000 38.8842000 11.4952000 648 32.8635000 20.1321000 9.99254000 5.01772000 4.34559000 1.52179000 649 34.3213000 18.1544000 26.5312000 6.00038000 4.44182000 5.95526000 650 25.3243000 14.0019000 48.0102000 6.31326000 3.76941000 18.9466000 651 30.3306000 11.6229000 58.2632000 8.93415000 4.65867000 28.6848000 652 40.8413000 0.00000000 69.5556000 13.6981000 6.14094000 42.2522000 653 91.9068000 10.5469000 73.1006000 43.3456000 21.8955000 48.6260000 654 92.7904000 11.0428000 84.4572000 47.5274000 23.7014000 66.6100000 655 54.1903000 7.95297000 23.9299000 11.6098000 6.26684000 5.01593000 656 68.4976000 9.90439000 23.1100000 18.7450000 10.0969000 5.08947000 657 71.2539000 47.2231000 25.3261000 26.9279000 23.8188000 8.11631000 658 86.7654000 68.5222000 55.1545000 49.9521000 47.8794000 31.6711000 659 54.3381000 45.8982000 33.3811000 18.5840000 18.8410000 11.2771000 660 60.1264000 47.2176000 43.0039000 22.7581000 21.4524000 17.5972000 661 65.6406000 53.4345000 42.6202000 27.6000000 27.0357000 18.1435000 662 75.2108000 65.6087000 55.9778000 40.4950000 40.9019000 31.6469000 663 76.9648000 76.4193000 56.2657000 47.3105000 52.7400000 33.8643000 664 88.9400000 84.1981000 57.6635000 61.1065000 66.8562000 37.3063000 665 7.31017000 5.99341000 25.6104000 1.39927000 0.86948500 5.14246000 666 8.09018000 10.4392000 36.3456000 2.64665000 1.70707000 10.4729000 667 0.00000000 12.2307000 57.9088000 5.81410000 3.11804000 28.1758000 668 44.8251000 64.2020000 57.8738000 25.5144000 32.1718000 32.7090000 669 47.7217000 65.8962000 66.8472000 29.2896000 35.0535000 43.4830000 670 60.8766000 96.5104000 70.9708000 54.8844000 76.3007000 55.5401000 671 76.6631000 100.000000 70.1023000 66.5018000 86.4326000 55.7021000 672 22.6085000 14.8729000 23.1443000 3.20514000 2.58670000 4.47033000 673 30.3373000 12.8635000 27.9317000 4.77270000 3.12755000 6.35141000 674 37.2660000 9.50531000 33.2819000 6.68804000 3.75112000 8.93854000 675 43.3676000 7.77061000 41.2980000 9.31658000 4.87353000 13.8984000 676 25.0649000 16.0855000 32.3790000 4.44703000 3.29222000 8.49775000 677 27.1453000 12.2496000 37.7257000 5.08690000 3.11446000 11.4484000 678 40.0477000 22.7927000 59.0442000 12.5624000 8.09027000 29.9937000 679 43.9264000 33.6925000 76.0909000 19.7456000 13.9844000 52.7189000 680 65.7302000 41.5116000 79.1344000 31.8401000 22.8151000 58.4774000 681 74.4327000 50.4748000 91.8833000 43.8919000 32.5043000 82.0352000 682 38.0473000 28.2384000 44.6818000 10.2830000 8.39143000 16.9800000 683 45.9679000 27.4509000 53.8642000 14.0959000 9.99378000 24.9869000 684 69.8373000 38.2481000 61.5519000 28.7853000 20.5564000 34.3321000 685 86.6161000 47.6819000 72.4643000 45.4212000 32.6639000 49.6928000 686 100.000000 78.2975000 73.6846000 70.8782000 66.0370000 56.5320000 687 37.1007000 36.1075000 42.2489000 11.2049000 11.1566000 15.6778000 688 47.3818000 57.0945000 51.3410000 22.1669000 26.1210000 25.3188000 689 62.3059000 61.3536000 70.3176000 34.4055000 34.5552000 47.6710000 690 91.6177000 77.3048000 76.4996000 63.6601000 61.3632000 60.1656000 691 91.7948000 84.7402000 80.2888000 69.5198000 71.0573000 67.6462000 692 100.000000 90.8183000 81.1983000 81.2458000 83.2479000 70.8575000 693 16.5409000 7.91424000 34.7094000 2.99849000 1.71634000 9.51676000 694 15.7263000 8.67836000 54.1379000 5.75973000 2.86851000 24.3162000 695 27.6813000 12.6589000 72.7714000 11.9092000 5.89920000 46.7269000 696 30.4205000 12.3097000 90.4779000 17.9914000 8.35660000 76.0613000 697 45.5449000 12.9412000 88.2892000 21.3740000 10.2543000 72.1891000 698 45.6220000 49.6421000 87.9590000 28.2776000 24.2071000 73.9172000 699 47.3438000 63.6189000 87.4488000 34.1248000 35.2938000 74.8258000 700 50.5626000 53.5304000 64.8261000 24.7374000 25.1405000 39.2949000 701 64.0362000 54.5359000 65.7573000 31.4431000 29.1170000 40.8546000 702 77.7225000 59.7514000 76.2927000 44.4244000 38.5270000 56.4596000 703 89.8949000 61.8604000 84.6735000 56.9521000 46.0159000 70.7942000 704 100.000000 73.7478000 100.000000 77.2826000 64.4710000 102.984000 705 0.00000000 33.0182000 52.1816000 7.42342000 8.06645000 23.3806000 706 11.4140000 42.1767000 56.1647000 10.7995000 12.8839000 27.9928000 707 12.6344000 43.7084000 64.3271000 13.0402000 14.4608000 37.2441000 708 14.5863000 58.0546000 67.6023000 18.8485000 24.5825000 42.9778000 709 46.8540000 69.7806000 79.2208000 34.2430000 40.0383000 61.8117000 710 53.4974000 72.6551000 89.2067000 41.5564000 45.6532000 79.6440000 711 56.2945000 80.4887000 91.4043000 48.0308000 55.5575000 85.3472000 712 71.1659000 83.3420000 90.9879000 57.4068000 63.0567000 85.5075000 713 74.6662000 92.1471000 91.9608000 65.9564000 76.3704000 89.4884000 714 0.00000000 14.4526000 88.7089000 14.4129000 6.81660000 72.6606000 715 9.06117000 57.7069000 93.0403000 26.1353000 27.2278000 84.1963000 716 17.7674000 80.3019000 94.9356000 38.9102000 50.5339000 91.7797000 717 0.00000000 67.2316000 21.9794000 15.3600000 29.5783000 8.64717000 718 13.6678000 76.1553000 27.5776000 21.1379000 39.4721000 12.3527000 719 33.5140000 77.5052000 25.6096000 24.8611000 42.5613000 11.9532000 720 55.4082000 79.0074000 48.0223000 35.5694000 49.0970000 26.1644000 721 14.7764000 33.0417000 8.88377000 4.12869000 6.84696000 1.89653000 722 36.3440000 40.8568000 9.30461000 9.61234000 12.3132000 2.72006000 723 42.9986000 66.9976000 0.00000000 20.9185000 32.3588000 5.14362000 724 61.2714000 66.1568000 44.0972000 30.8376000 36.5361000 20.8887000 725 69.4915000 77.7930000 46.3197000 41.7319000 51.2401000 24.8683000 726 1.65563000 0.00000000 0.00000000 0.05265980 0.02714770 0.00246524 727 8.72762000 18.8517000 7.19251000 1.50808000 2.33779000 0.95882800 728 10.2370000 26.7886000 10.7442000 2.71720000 4.47442000 1.78165000 729 30.8408000 74.3513000 59.9212000 27.2525000 40.5922000 36.4502000 730 59.3963000 85.3842000 89.1094000 51.7441000 62.1854000 82.1186000 731 39.7019000 8.92242000 10.2423000 5.88300000 3.45870000 1.34190000 732 41.1019000 13.4274000 52.1323000 10.6113000 5.84114000 22.7372000 733 41.6933000 15.5631000 76.3372000 16.5416000 8.50503000 52.2011000 734 65.5645000 11.1687000 87.9670000 29.8998000 14.4885000 71.9704000 735 63.5996000 9.76400000 63.6588000 21.8323000 11.0113000 35.3125000 736 56.1956000 28.7715000 62.5363000 20.0842000 13.1996000 34.5051000 737 55.7991000 41.9484000 72.9032000 25.3112000 19.8263000 48.8958000 738 56.1085000 42.8463000 88.1803000 30.4079000 22.2678000 73.8328000 739 56.0883000 45.4202000 100.000000 35.6060000 25.5118000 97.6601000 740 49.4357000 9.98320000 28.7970000 10.1874000 5.64213000 6.93162000 741 60.9112000 15.2984000 32.9114000 15.9021000 9.09134000 9.28871000 742 74.9294000 12.1236000 32.2940000 23.5271000 12.6759000 9.25968000 743 89.7122000 38.6765000 52.1439000 40.8948000 27.1651000 25.2682000 744 93.2346000 54.9629000 59.0097000 50.1178000 39.1524000 33.9732000 745 92.9013000 67.7010000 73.1215000 58.6749000 51.2998000 53.5238000 746 34.5053000 16.6413000 18.3960000 5.37798000 3.96564000 3.16218000 747 35.4742000 28.1186000 18.9983000 7.10177000 7.01031000 3.82399000 748 34.8296000 59.7584000 17.6611000 15.8661000 24.8857000 6.45405000 749 58.4274000 59.1569000 14.5194000 23.7680000 28.6071000 6.02119000 750 67.5744000 65.7635000 10.4895000 31.2223000 36.7772000 6.47576000 751 78.0854000 90.3581000 48.8581000 55.6687000 70.4519000 29.9305000 752 85.5654000 92.5737000 100.000000 77.0310000 82.1822000 106.416000 753 32.4829000 38.5210000 58.9197000 13.4664000 12.8201000 30.7248000 754 48.8688000 40.1401000 60.9072000 19.1300000 16.2815000 33.2839000 755 54.0631000 47.7903000 82.9914000 29.2371000 24.0125000 65.1385000 756 69.0984000 54.8508000 100.000000 45.3577000 35.1916000 99.0147000 757 30.0584000 28.8704000 72.4110000 14.1755000 9.89835000 46.8702000 758 42.8100000 39.7841000 89.3565000 25.0079000 18.2504000 75.5048000 759 15.4655000 15.9158000 38.4689000 3.84125000 2.88112000 11.9336000 760 72.4546000 12.2053000 38.9752000 22.7129000 12.1794000 13.0566000 761 76.3905000 12.9009000 61.3834000 29.0390000 15.0754000 33.0691000 762 81.5180000 24.8438000 86.7032000 40.8356000 22.2105000 70.6106000 763 87.1749000 68.3450000 92.1242000 60.3861000 51.9501000 85.3835000 764 22.3632000 23.2505000 77.4982000 13.4170000 8.08836000 54.0539000 765 47.1567000 54.0466000 81.0735000 28.0723000 26.6283000 62.5269000 766 15.3691000 19.7097000 24.7912000 2.89889000 3.09980000 5.17993000 767 15.0888000 25.8115000 27.6707000 3.87790000 4.74616000 6.59920000 768 10.0327000 23.7845000 31.1594000 3.49345000 4.08549000 8.08979000 769 12.5808000 27.5982000 44.2111000 5.77725000 5.92175000 16.3846000 770 26.6056000 64.0134000 55.9682000 20.4472000 29.4755000 30.4882000 771 66.2681000 70.3333000 75.7519000 42.1913000 44.6715000 56.9517000 772 83.4000000 75.4389000 79.1336000 56.9090000 56.2125000 63.6014000 773 44.7347000 29.8695000 39.2621000 11.8508000 9.69686000 13.3347000 774 64.9001000 37.9976000 40.2778000 22.3177000 17.5557000 14.9688000 775 81.9898000 39.1369000 43.4444000 33.7096000 23.7848000 17.7920000 776 91.7934000 67.6301000 62.0542000 54.9846000 49.6604000 39.1444000 777 90.8404000 76.3338000 68.0103000 60.1816000 59.0040000 47.9721000 778 46.0296000 22.0913000 19.4687000 9.38468000 6.89548000 3.81376000 779 54.1302000 25.0954000 16.4837000 12.7377000 9.23938000 3.30613000 780 54.9106000 29.6710000 43.3766000 16.2272000 11.8386000 16.3579000 781 67.8002000 35.0240000 47.9512000 24.3365000 17.4801000 20.5943000 782 87.1125000 49.2704000 47.2882000 41.0055000 31.7515000 21.9252000 783 73.1550000 35.5639000 34.3785000 25.8434000 18.6351000 11.3958000 784 82.5218000 62.6229000 37.7722000 41.3424000 39.6491000 16.6187000 785 89.5159000 77.1230000 43.3774000 54.8142000 57.4559000 23.1303000 786 72.2330000 72.3211000 34.7959000 38.8315000 45.3866000 16.1064000 787 77.3360000 85.1878000 34.6585000 49.7268000 62.3529000 18.7306000 788 27.0002000 22.4944000 18.6348000 4.44811000 4.43157000 3.36552000 789 41.2455000 20.9839000 36.9795000 9.17621000 6.42032000 11.4164000 790 68.5344000 26.0829000 52.1861000 23.8422000 14.7385000 23.8074000 791 77.2639000 31.5058000 64.3294000 32.6292000 20.3426000 37.3499000 792 90.8009000 33.5715000 66.6116000 43.6674000 26.5689000 40.7899000 793 13.0997000 42.6571000 10.7065000 6.28573000 11.3001000 2.90498000 794 18.0347000 74.8711000 14.0217000 20.0534000 37.9340000 7.91509000 795 25.2256000 90.5821000 9.72753000 30.8780000 58.3129000 10.5374000 796 45.6315000 91.8589000 13.4192000 37.0312000 62.8371000 11.7072000 797 61.7445000 100.000000 22.9569000 50.5268000 79.0442000 16.6707000 798 40.9668000 58.8352000 28.7758000 17.8887000 25.2798000 10.3069000 799 57.3622000 61.9511000 31.9476000 25.6266000 31.1820000 12.5452000 800 23.9248000 32.6111000 8.96913000 5.18362000 7.26487000 1.93295000 801 22.1963000 63.8066000 14.2028000 15.0306000 27.0773000 6.12083000 802 24.7599000 100.000000 22.0020000 38.5321000 72.8677000 15.7892000 803 23.3135000 52.7000000 0.00000000 10.4080000 18.1000000 2.94523000 804 70.6167000 85.0433000 0.00000000 43.6137000 59.2658000 9.14131000 805 87.8279000 85.3791000 0.00000000 55.7237000 65.8372000 9.77162000 806 84.5902000 88.7721000 16.4015000 55.9405000 69.3134000 12.6048000 807 88.9274000 90.3317000 33.1619000 61.6164000 73.7273000 19.4882000 808 91.4694000 90.5123000 79.1601000 72.8470000 78.6657000 67.1373000 809 20.6201000 4.43797000 9.48503000 1.73598000 1.05876000 0.98677900 810 19.3911000 0.00000000 10.9631000 1.49708000 0.74765400 1.16072000 811 17.8936000 9.44986000 27.4075000 2.54043000 1.67007000 5.96464000 812 21.4997000 41.3026000 67.2941000 14.0579000 13.9393000 40.7798000 813 27.3682000 54.3527000 72.7761000 20.5026000 23.1711000 49.6146000 814 32.4438000 54.1412000 80.1141000 23.5744000 24.3954000 60.7793000 815 37.8344000 54.9692000 93.2366000 29.6731000 27.4779000 84.4435000 816 6.36761000 13.7180000 21.2804000 1.49023000 1.58195000 3.74994000 817 12.0257000 14.5363000 29.7916000 2.52206000 2.13455000 7.11148000 818 11.2130000 30.9737000 28.4746000 4.47925000 6.32030000 7.22043000 819 10.4612000 43.1061000 38.3353000 8.20365000 12.2406000 13.4255000 820 33.1467000 55.2834000 49.2043000 16.9553000 22.4438000 22.9995000 821 21.4739000 29.5560000 26.1778000 5.10913000 6.29016000 6.21662000 822 55.7987000 34.7667000 24.0095000 15.5962000 13.2028000 6.17376000 823 56.6889000 47.5011000 23.9870000 19.2975000 20.0235000 7.28697000 824 37.1786000 31.8914000 28.4975000 8.85719000 8.83226000 7.48474000 825 39.8361000 36.3106000 27.0326000 10.3825000 10.9867000 7.19268000 826 48.6564000 36.7348000 28.4789000 13.4863000 12.7144000 7.98191000 827 47.5877000 25.3065000 30.4592000 11.1604000 8.36236000 8.17244000 828 76.1868000 23.4413000 31.1588000 25.3503000 15.2850000 9.09957000 829 79.9105000 21.0369000 55.6392000 31.0144000 17.3598000 27.2621000 830 90.9397000 21.5759000 68.6921000 42.3647000 22.9739000 42.8464000 831 20.1020000 13.2100000 15.1477000 2.30168000 1.98078000 2.14854000 832 47.9187000 33.7491000 12.4212000 11.6417000 10.9193000 2.83802000 833 64.3172000 39.5069000 9.48142000 20.1062000 17.2176000 3.13724000 834 74.2753000 40.0174000 15.4241000 26.2124000 20.5303000 4.53028000 835 88.5575000 43.2529000 10.9872000 37.1239000 27.4389000 4.43929000 836 91.0009000 57.5959000 2.76419000 43.7453000 38.0061000 5.23352000 837 90.7097000 69.3227000 31.1410000 50.1560000 48.9650000 14.2844000 838 26.9130000 16.8576000 12.7012000 3.55706000 3.08471000 1.80276000 839 36.1239000 16.5881000 12.3424000 5.51758000 4.06031000 1.82284000 840 90.0308000 13.0548000 10.5147000 33.2442000 17.9348000 2.73600000 841 90.9170000 12.9283000 24.0883000 34.6219000 18.5560000 6.23303000 842 44.1182000 22.8391000 8.56389000 8.41421000 6.58513000 1.57910000 843 54.0116000 28.6274000 7.69062000 12.9418000 10.1949000 1.93034000 844 67.1022000 81.3758000 56.5474000 44.3018000 55.5626000 34.8561000 845 66.4145000 89.8252000 64.1168000 51.1262000 67.2056000 45.1648000 846 76.7032000 90.5368000 73.6285000 60.2460000 72.3795000 58.2360000 847 44.2808000 50.9741000 41.9061000 17.4254000 20.5247000 16.9157000 848 54.3135000 60.8567000 46.3379000 25.5944000 30.2616000 21.6837000 849 90.8190000 64.0058000 45.5112000 49.4335000 44.6193000 22.5475000 850 46.8727000 39.5343000 22.3672000 13.0544000 13.5259000 5.79887000 851 51.3492000 51.3276000 24.9516000 18.3655000 21.3881000 7.95597000 852 78.6708000 53.8016000 37.1572000 35.0084000 31.1312000 14.9325000 853 100.000000 61.5015000 52.2005000 57.5073000 47.0128000 28.2765000 854 100.000000 79.4119000 53.1163000 66.8795000 65.4975000 32.2061000 855 100.000000 91.3140000 67.9097000 77.8921000 82.4765000 51.4387000 856 42.3638000 43.5187000 34.7164000 13.6519000 15.2659000 11.5747000 857 41.3064000 59.5243000 45.3254000 20.1853000 26.6621000 20.4786000 858 46.9596000 73.8303000 51.7303000 29.9081000 41.7193000 28.2756000 859 48.8748000 87.8788000 56.4594000 40.1134000 59.7054000 35.7862000 860 14.5905000 41.3669000 23.9717000 6.71674000 10.9378000 6.19049000 861 12.2707000 40.7688000 47.1131000 8.91867000 11.5483000 19.5730000 862 7.74919000 43.5549000 92.3813000 21.0531000 17.5609000 81.3148000 863 35.7008000 62.0557000 93.2445000 31.9842000 32.9220000 85.3880000 864 47.0062000 93.5634000 95.2159000 54.6176000 71.9339000 95.6471000 865 18.7344000 71.1352000 33.9897000 19.5179000 34.5138000 14.5806000 866 18.9551000 77.0612000 45.8926000 24.3000000 41.6301000 23.5935000 867 23.2607000 88.2447000 46.4070000 32.0422000 56.1192000 26.3891000 868 31.6211000 100.000000 83.2016000 51.0234000 78.0150000 74.7682000 869 15.9669000 51.0021000 41.6966000 11.5112000 17.4932000 16.4953000 870 12.4357000 61.3358000 49.2224000 16.2778000 25.7105000 23.6815000 871 21.3289000 60.5641000 88.6858000 26.9176000 29.5512000 76.3471000 872 22.5003000 70.4938000 94.9372000 34.0211000 39.8431000 89.9771000 873 12.0401000 26.9575000 59.6943000 8.35376000 6.78532000 30.6712000 874 10.6110000 25.4681000 71.1334000 10.7207000 7.35996000 44.7836000 875 18.5853000 18.9981000 57.7893000 7.56051000 4.88238000 28.2990000 876 54.7204000 17.8893000 64.4081000 18.4217000 10.1486000 36.2263000 877 70.2502000 14.4476000 76.3438000 29.0921000 14.8389000 52.7723000 878 73.9397000 35.5848000 76.9091000 34.5687000 22.1894000 54.7595000 879 87.9925000 40.8485000 76.7470000 45.7545000 29.8142000 55.3952000 880 36.9769000 18.5791000 43.5887000 8.55484000 5.60906000 15.7150000 881 36.1160000 32.2524000 54.0336000 12.0305000 10.1803000 25.2957000 882 52.4093000 69.0331000 56.7434000 30.3928000 38.1384000 32.4262000 883 63.1239000 70.5796000 61.9777000 37.1812000 42.6771000 38.6466000 884 74.5671000 79.5632000 72.5846000 51.3651000 57.1310000 54.2718000 885 74.6325000 86.5706000 80.4335000 58.1349000 66.9842000 67.6929000 886 10.8941000 8.08196000 0.00000000 0.73390600 0.76589500 0.10916100 887 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 888 12.2259000 6.80888000 4.48327000 0.83954800 0.73140600 0.42655900 889 67.1389000 11.6300000 11.3660000 17.5155000 9.68032000 2.10671000 890 78.0443000 17.8898000 7.98978000 24.6476000 14.1199000 2.10647000 891 92.4432000 26.9407000 10.6282000 36.8096000 22.0850000 3.36596000 892 43.8733000 14.9994000 7.37401000 7.48314000 4.88503000 1.15565000 893 52.1142000 12.2941000 36.9346000 12.1834000 6.78795000 11.3017000 894 55.7518000 16.5109000 46.2929000 15.2882000 8.73832000 18.0366000 895 58.2358000 29.9509000 51.7828000 19.0814000 13.2306000 23.3952000 896 62.3730000 40.8597000 51.5264000 23.4003000 18.9649000 24.0412000 897 63.7403000 58.0969000 53.0786000 30.0193000 30.7230000 27.4006000 898 19.1280000 22.0240000 16.4810000 3.09611000 3.65854000 2.73630000 899 20.4046000 28.7314000 13.8441000 4.12545000 5.65432000 2.48771000 900 27.9352000 28.1785000 7.61071000 5.04451000 6.01284000 1.52981000 901 57.0115000 51.2902000 8.86944000 19.9822000 22.2909000 4.04024000 902 63.7455000 72.0898000 27.1962000 33.2009000 42.3834000 12.1196000 903 28.6795000 42.9104000 12.0029000 8.51345000 12.5462000 3.24274000 904 37.7028000 57.6729000 5.56218000 15.3621000 23.4141000 4.13205000 905 40.3289000 73.9983000 13.3754000 23.9957000 39.2540000 7.83374000 906 48.5451000 87.1334000 27.6505000 35.5731000 57.0616000 15.0184000 907 54.2562000 89.7293000 48.1055000 42.0582000 62.7880000 28.5349000 908 15.5963000 89.8910000 36.0999000 30.8789000 57.3816000 19.5874000 909 11.2846000 91.2020000 57.4090000 34.7329000 60.3773000 37.1801000 910 12.9048000 92.3233000 70.3227000 38.6213000 63.2494000 52.9944000 911 10.5448000 93.6002000 90.3417000 45.5548000 67.5117000 85.7703000 912 3.87115000 85.1497000 89.1127000 38.8664000 55.3171000 81.4776000 913 23.5563000 89.7611000 93.4733000 45.3394000 63.1350000 90.9655000 914 13.0721000 50.0562000 25.7622000 9.28434000 16.0641000 7.71889000 915 13.0030000 51.9400000 35.1430000 10.7724000 17.6814000 12.4328000 916 33.7225000 64.0961000 49.8899000 20.8573000 29.8690000 24.8207000 917 35.1299000 77.6153000 51.3126000 28.4361000 44.1385000 28.4406000 918 72.2900000 92.5560000 80.0507000 60.7610000 74.5994000 68.4081000 919 24.6663000 14.1037000 0.00000000 2.67307000 2.31277000 0.30555900 920 26.7951000 9.10600000 4.06928000 2.77441000 1.88496000 0.51525000 921 40.3600000 37.2599000 11.0233000 9.88792000 11.1500000 2.73622000 922 46.6319000 43.3736000 0.00000000 13.2364000 15.1984000 2.23613000 923 72.3905000 48.9916000 9.18042000 27.3924000 24.9768000 4.20955000 924 81.3321000 50.5398000 22.4347000 34.4199000 29.2885000 7.73850000 925 64.2726000 50.0906000 17.6115000 23.4432000 23.4383000 5.76296000 926 67.2192000 79.2439000 15.2678000 38.3841000 51.1246000 9.75957000 927 73.5205000 91.4176000 18.4982000 50.2952000 69.1740000 13.4090000 928 54.7895000 66.7616000 13.5660000 25.4828000 34.5093000 6.87728000 929 54.8888000 77.1613000 15.2507000 31.0840000 45.5422000 9.06294000 930 58.6899000 89.4347000 17.1701000 40.7225000 62.1504000 12.2124000 931 9.37452000 19.9493000 18.9571000 2.09339000 2.76615000 3.25712000 932 0.00000000 22.9999000 21.9256000 2.25768000 3.37707000 4.26275000 933 20.5937000 22.3831000 89.5671000 16.9681000 9.30153000 74.5918000 934 64.6883000 26.0924000 90.6233000 31.9230000 17.7286000 77.4103000 935 65.6920000 39.4683000 89.2888000 34.6235000 23.0943000 75.8072000 936 83.1192000 47.3024000 88.6826000 47.6748000 33.0722000 75.9271000 937 70.3767000 41.9273000 71.4353000 32.4049000 23.5203000 47.1776000 938 82.2008000 67.0360000 72.0527000 49.6415000 46.1976000 51.5052000 939 83.1287000 79.7795000 71.7253000 57.1386000 60.3275000 53.3799000 940 19.1116000 27.7588000 19.1693000 4.04521000 5.34625000 3.71183000 941 28.5361000 28.1375000 19.0906000 5.57909000 6.22930000 3.77938000 942 81.8361000 28.9266000 51.0533000 32.6784000 19.9915000 23.3226000 943 84.7628000 29.0989000 74.6069000 40.1445000 23.2743000 51.2367000 944 100.000000 28.3432000 78.7941000 54.1073000 30.1438000 58.1822000 945 48.2926000 20.1767000 34.1299000 11.1144000 7.31801000 9.85067000 946 72.3996000 28.8232000 40.3903000 24.7785000 16.0772000 14.6289000 947 73.4265000 46.5414000 41.4887000 29.7004000 24.7491000 16.7931000 948 74.9438000 47.0210000 57.8634000 33.5263000 26.6238000 31.2050000 949 90.0744000 51.5412000 65.4663000 47.6756000 35.9080000 40.9506000 950 93.3463000 57.5292000 75.6708000 55.2775000 42.8056000 55.7810000 951 15.9173000 6.14836000 14.6437000 1.41827000 0.96032000 1.88937000 952 12.2473000 4.90021000 9.12128000 0.86688300 0.63269300 0.90049500 953 6.80772000 5.33962000 12.8881000 0.66230400 0.53573800 1.49775000 954 12.8189000 0.00000000 15.6352000 0.99787000 0.47045900 2.03372000 955 6.97338000 5.66995000 19.0190000 0.95226800 0.67032300 2.93010000 956 19.0902000 35.7309000 27.4561000 6.10762000 8.58876000 7.13296000 957 22.9368000 35.7481000 52.1873000 9.76676000 10.1188000 23.6585000 958 27.0689000 35.0810000 64.6175000 12.8369000 11.1953000 36.9762000 959 46.1046000 80.9863000 71.9691000 38.2078000 51.6532000 53.0434000 960 53.3322000 92.5379000 81.8980000 51.6266000 69.8044000 70.9744000 961 11.7691000 20.2162000 37.9478000 3.89071000 3.55142000 11.7335000 962 10.7884000 18.3336000 47.8077000 4.97959000 3.65651000 18.8274000 963 0.00000000 22.3618000 60.9354000 7.41292000 5.30822000 31.8153000 964 0.00000000 28.3037000 88.2919000 15.9388000 10.1016000 72.4509000 965 18.5642000 36.8345000 88.7730000 18.9622000 14.1165000 73.9480000 966 91.6256000 14.5436000 36.7496000 36.4858000 19.5634000 12.3764000 967 90.8744000 16.8923000 47.4438000 37.5063000 20.2234000 20.0112000 968 92.1942000 15.8927000 57.7847000 40.3617000 21.3491000 29.7442000 969 92.0238000 40.6234000 61.6067000 45.1507000 29.8602000 35.3278000 970 25.6047000 5.87057000 16.3186000 2.78078000 1.63911000 2.32387000 971 54.7332000 8.10565000 14.7588000 11.3485000 6.19990000 2.40153000 972 65.8884000 12.4482000 43.0114000 19.4581000 10.4648000 15.6557000 973 65.6765000 9.68288000 49.9454000 20.2318000 10.4916000 21.1627000 974 83.1699000 0.00000000 42.0916000 29.8457000 15.0778000 15.3409000 975 83.0293000 10.8901000 48.4180000 31.0853000 16.2174000 20.3859000 976 84.0169000 17.0800000 76.4877000 38.5407000 20.0431000 53.4958000 977 83.5729000 12.8412000 92.3147000 43.0621000 21.2579000 80.7398000 978 10.2954000 25.1951000 18.7835000 2.81086000 4.13001000 3.43387000 979 10.8583000 32.4893000 19.3957000 4.11618000 6.63180000 4.01976000 980 11.3671000 38.0631000 73.0404000 13.6760000 12.3777000 48.2659000 981 11.8943000 55.8913000 74.2445000 19.5159000 23.4716000 51.8325000 982 0.00000000 59.7395000 73.7130000 20.3556000 26.1951000 51.5448000 983 9.61627000 88.7615000 77.6566000 37.8727000 58.8583000 62.8082000 984 14.5856000 78.2609000 65.3676000 28.2681000 44.2829000 43.4676000 985 9.32828000 74.3033000 69.9724000 26.7490000 40.0223000 48.6638000 986 48.7642000 76.3325000 77.0087000 37.8034000 47.1865000 59.5655000 987 55.6397000 89.5041000 86.6308000 51.9796000 66.5722000 78.4567000 988 85.9308000 94.3072000 91.2648000 75.2184000 83.5516000 89.0520000 989 38.7369000 30.6392000 14.1146000 8.17306000 8.23458000 2.82694000 990 51.9507000 41.8050000 10.2737000 14.9945000 15.4522000 3.18140000 991 88.2518000 57.0506000 17.0220000 41.7051000 36.5894000 7.18968000 992 84.6521000 65.3435000 16.6446000 42.4529000 42.2492000 8.15045000 993 82.5664000 75.6230000 13.5703000 46.0633000 51.9692000 9.16381000 994 92.3056000 75.5778000 13.0284000 53.6698000 55.8550000 9.40782000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 100.0000 108.9060 1 0.000000 46.30660 100.0000 24.53780 20.19710 97.21750 2 100.0000 0.000000 76.43500 51.07860 25.19590 53.75030 3 0.000000 0.000000 55.41690 4.831040 1.932540 25.44110 4 100.0000 64.42970 0.000000 54.56610 47.91680 6.373650 5 0.000000 34.08240 0.000000 3.400610 6.801720 1.133680 6 78.98890 0.000000 0.000000 24.20010 12.47580 1.132910 7 5.026730 4.490490 3.592540 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 100.000 108.906 1 0.00000 100.000 100.000 53.8073 78.7404 106.975 2 100.000 0.00000 100.000 59.2885 28.4801 96.9852 3 0.00000 0.00000 100.000 18.0500 7.22046 95.0546 4 100.000 100.000 0.00000 76.9958 92.7795 13.8511 5 0.00000 100.000 0.00000 35.7573 71.5199 11.9206 6 100.000 0.00000 0.00000 41.2385 21.2596 1.93056 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.3442 21.4046 23.3108 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s29-g85-m8-b8-f0.ti1000644 000765 000000 00000153121 12237536424 021715 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "8" CREATED "Sat Oct 19 04:50:32 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "85" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "8" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "29" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 994 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 0.00000 28.5714 14.2857 3.67143 5.82729 3.47818 3 78.5714 35.7143 21.4286 29.0616 20.8968 6.89780 4 100.000 42.8571 28.5714 48.4608 33.4142 10.9749 5 100.000 42.8571 42.8571 50.0230 34.0390 19.2033 6 100.000 57.1429 42.8571 54.7117 43.4151 20.7662 7 100.000 71.4286 42.8571 61.1694 56.3286 22.9187 8 14.2857 0.00000 14.2857 2.05703 1.50778 2.72942 9 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 10 0.00000 3.57143 0.00000 1.09787 1.19571 1.03262 11 10.7143 0.00000 0.00000 1.45596 1.23510 1.02137 12 14.2857 0.00000 0.00000 1.73522 1.37908 1.03445 13 17.8571 0.00000 0.00000 2.09492 1.56454 1.05131 14 21.4286 0.00000 0.00000 2.54059 1.79433 1.07219 15 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 16 28.5714 0.00000 0.00000 3.70964 2.39710 1.12697 17 32.1429 0.00000 0.00000 4.44202 2.77472 1.16129 18 35.7143 0.00000 0.00000 5.27848 3.20600 1.20048 19 39.2857 0.00000 0.00000 6.22288 3.69293 1.24474 20 42.8571 0.00000 0.00000 7.27886 4.23740 1.29422 21 46.4286 0.00000 0.00000 8.44990 4.84119 1.34909 22 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 23 53.5714 0.00000 0.00000 11.1504 6.23356 1.47563 24 57.1429 0.00000 0.00000 12.6860 7.02536 1.54759 25 60.7143 0.00000 0.00000 14.3493 7.88296 1.62553 26 64.2857 0.00000 0.00000 16.1431 8.80783 1.70958 27 64.2857 7.14286 7.14286 16.4706 9.28694 2.36068 28 67.8571 0.00000 0.00000 18.0701 9.80142 1.79988 29 71.4286 0.00000 0.00000 20.1331 10.8651 1.89654 30 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 31 78.5714 0.00000 0.00000 24.6773 13.2081 2.10948 32 82.1429 0.00000 0.00000 27.1634 14.4900 2.22597 33 85.7143 0.00000 0.00000 29.7956 15.8471 2.34931 34 89.2857 0.00000 0.00000 32.5761 17.2807 2.47960 35 92.8571 0.00000 0.00000 35.5072 18.7920 2.61695 36 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 37 96.4286 0.00000 0.00000 38.5911 20.3821 2.76146 38 14.2857 14.2857 0.00000 2.37276 2.65398 1.24697 39 9.52381 9.52381 9.52381 1.87516 1.92066 2.00291 40 0.00000 14.2857 0.00000 1.63754 2.27490 1.21251 41 0.00000 17.8571 0.00000 1.94944 2.89862 1.31648 42 0.00000 21.4286 0.00000 2.33590 3.67142 1.44530 43 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 44 0.00000 28.5714 0.00000 3.34962 5.69859 1.78321 45 0.00000 32.1429 0.00000 3.98469 6.96855 1.99491 46 0.00000 35.7143 0.00000 4.71002 8.41900 2.23668 47 0.00000 39.2857 0.00000 5.52893 10.0566 2.50966 48 0.00000 42.8571 0.00000 6.44461 11.8877 2.81489 49 0.00000 46.4286 0.00000 7.46006 13.9183 3.15337 50 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 51 0.00000 53.5714 0.00000 9.80171 18.6010 3.93393 52 0.00000 57.1429 0.00000 11.1333 21.2639 4.37781 53 0.00000 60.7143 0.00000 12.5756 24.1481 4.85858 54 0.00000 64.2857 0.00000 14.1311 27.2585 5.37707 55 0.00000 67.8571 0.00000 15.8021 30.6000 5.93407 56 0.00000 71.4286 0.00000 17.5910 34.1773 6.53037 57 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 58 0.00000 78.5714 0.00000 21.5313 42.0570 7.84384 59 0.00000 82.1429 0.00000 23.6872 46.3681 8.56246 60 0.00000 85.7143 0.00000 25.9696 50.9323 9.32328 61 0.00000 89.2857 0.00000 28.3807 55.7537 10.1270 62 0.00000 92.8571 0.00000 30.9223 60.8363 10.9742 63 0.00000 96.4286 0.00000 33.5965 66.1840 11.8656 64 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 65 71.4286 100.000 42.8571 58.2865 82.7647 28.1735 66 0.00000 10.7143 0.00000 1.39538 1.79065 1.13179 67 7.14286 0.00000 0.00000 1.25096 1.12940 1.01176 68 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 69 0.00000 0.00000 17.8571 1.47924 1.19167 3.52421 70 0.00000 0.00000 14.2857 1.32180 1.12870 2.69497 71 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 72 0.00000 0.00000 28.5714 2.18599 1.47432 7.24675 73 0.00000 0.00000 32.1429 2.50655 1.60253 8.93516 74 0.00000 0.00000 35.7143 2.87267 1.74895 10.8635 75 0.00000 0.00000 39.2857 3.28602 1.91426 13.0407 76 0.00000 0.00000 42.8571 3.74822 2.09911 15.4751 77 0.00000 0.00000 46.4286 4.26078 2.30410 18.1748 78 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 79 0.00000 0.00000 53.5714 5.44275 2.77682 24.4004 80 0.00000 0.00000 57.1429 6.11490 3.04564 27.9407 81 0.00000 0.00000 60.7143 6.84292 3.33680 31.7752 82 0.00000 0.00000 64.2857 7.62804 3.65080 35.9106 83 0.00000 0.00000 67.8571 8.47149 3.98812 40.3531 84 0.00000 0.00000 71.4286 9.37444 4.34925 45.1091 85 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 86 0.00000 0.00000 78.5714 11.3634 5.14470 55.5850 87 0.00000 0.00000 82.1429 12.4516 5.57991 61.3166 88 0.00000 0.00000 85.7143 13.6037 6.04067 67.3847 89 0.00000 0.00000 89.2857 14.8207 6.52739 73.7948 90 0.00000 0.00000 92.8571 16.1036 7.04048 80.5521 91 0.00000 0.00000 96.4286 17.4534 7.58032 87.6618 92 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 93 0.00000 0.00000 10.7143 1.19957 1.07982 2.05117 94 1.19048 1.19048 1.19048 1.08671 1.09122 1.09937 95 2.38095 2.38095 2.38095 1.17342 1.18244 1.19874 96 3.57143 3.57143 3.57143 1.26014 1.27366 1.29811 97 4.76190 4.76190 4.76190 1.35056 1.36879 1.40173 98 5.95238 5.95238 5.95238 1.45621 1.47993 1.52281 99 0.00000 0.00000 3.57143 1.04940 1.01976 1.26020 100 0.00000 7.14286 0.00000 1.21762 1.43517 1.07254 101 0.00000 0.00000 7.14286 1.10984 1.04393 1.57856 102 7.14286 7.14286 7.14286 1.57842 1.60850 1.66286 103 13.0952 13.0952 13.0952 2.46008 2.53601 2.67323 104 14.2857 14.2857 14.2857 2.69456 2.78268 2.94193 105 15.4762 15.4762 15.4762 2.94965 3.05104 3.23426 106 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 107 17.8571 17.8571 17.8571 3.52360 3.65483 3.89199 108 19.0476 19.0476 19.0476 3.84339 3.99124 4.25846 109 20.2381 20.2381 20.2381 4.18564 4.35130 4.65068 110 21.4286 21.4286 21.4286 4.55080 4.73544 5.06914 111 22.6190 22.6190 22.6190 4.93926 5.14410 5.51431 112 23.8095 23.8095 23.8095 5.35146 5.57773 5.98668 113 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 114 26.1905 26.1905 26.1905 6.24859 6.52152 7.01477 115 27.3810 27.3810 27.3810 6.73430 7.03248 7.57138 116 28.5714 28.5714 28.5714 7.24526 7.57001 8.15693 117 29.7619 29.7619 29.7619 7.78184 8.13449 8.77184 118 30.9524 30.9524 30.9524 8.34439 8.72630 9.41652 119 32.1429 32.1429 32.1429 8.93326 9.34579 10.0914 120 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 121 34.5238 34.5238 34.5238 10.1913 10.6693 11.5331 122 35.7143 35.7143 35.7143 10.8612 11.3739 12.3007 123 64.2857 64.2857 35.7143 31.1469 35.8153 15.9502 124 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 125 39.2857 39.2857 39.2857 13.0378 13.6638 14.7951 126 40.4762 40.4762 40.4762 13.8201 14.4868 15.6916 127 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 128 42.8571 42.8571 42.8571 15.4717 16.2242 17.5842 129 44.0476 44.0476 44.0476 16.3415 17.1393 18.5811 130 45.2381 45.2381 45.2381 17.2411 18.0856 19.6120 131 46.4286 46.4286 46.4286 18.1707 19.0636 20.6773 132 47.6190 47.6190 47.6190 19.1307 20.0735 21.7774 133 48.8095 48.8095 48.8095 20.1212 21.1155 22.9125 134 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 135 51.1905 51.1905 51.1905 22.1952 23.2974 25.2893 136 52.3810 52.3810 52.3810 23.2792 24.4377 26.5315 137 53.5714 53.5714 53.5714 24.3948 25.6113 27.8100 138 54.7619 54.7619 54.7619 25.5424 26.8186 29.1250 139 55.9524 55.9524 55.9524 26.7221 28.0597 30.4770 140 57.1429 57.1429 57.1429 27.9343 29.3349 31.8661 141 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 142 59.5238 59.5238 59.5238 30.4569 31.9887 34.7570 143 60.7143 60.7143 60.7143 31.7679 33.3678 36.2593 144 61.9048 61.9048 61.9048 33.1123 34.7821 37.8000 145 63.0952 63.0952 63.0952 34.4903 36.2318 39.3792 146 64.2857 64.2857 64.2857 35.9022 37.7171 40.9972 147 65.4762 65.4762 65.4762 37.3483 39.2384 42.6544 148 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 149 67.8571 67.8571 67.8571 40.3437 42.3896 46.0871 150 69.0476 69.0476 69.0476 41.8935 44.0200 47.8631 151 70.2381 70.2381 70.2381 43.4784 45.6873 49.6793 152 71.4286 71.4286 71.4286 45.0985 47.3916 51.5360 153 72.6190 72.6190 72.6190 46.7541 49.1333 53.4333 154 73.8095 73.8095 73.8095 48.4454 50.9126 55.3715 155 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 156 76.1905 76.1905 76.1905 51.9360 54.5847 59.3716 157 77.3810 77.3810 77.3810 53.7357 56.4780 61.4340 158 78.5714 78.5714 78.5714 55.5720 58.4097 63.5383 159 79.7619 79.7619 79.7619 57.4450 60.3802 65.6848 160 80.9524 80.9524 80.9524 59.3550 62.3895 67.8736 161 82.1429 82.1429 82.1429 61.3022 64.4379 70.1051 162 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 163 84.5238 84.5238 84.5238 65.3089 68.6530 74.6967 164 85.7143 85.7143 85.7143 67.3689 70.8201 77.0573 165 86.9048 86.9048 86.9048 69.4668 73.0271 79.4615 166 88.0952 88.0952 88.0952 71.6029 75.2743 81.9094 167 89.2857 89.2857 89.2857 73.7774 77.5618 84.4014 168 90.4762 90.4762 90.4762 75.9905 79.8900 86.9375 169 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 170 92.8571 92.8571 92.8571 80.5331 84.6688 92.1432 171 94.0476 94.0476 94.0476 82.8630 87.1199 94.8133 172 95.2381 95.2381 95.2381 85.2323 89.6124 97.5284 173 96.4286 96.4286 96.4286 87.6411 92.1464 100.289 174 97.6190 97.6190 97.6190 90.0896 94.7222 103.095 175 98.8095 98.8095 98.8095 92.5780 97.3400 105.946 176 11.9048 11.9048 11.9048 2.24571 2.31049 2.42756 177 28.5714 14.2857 0.00000 4.34718 3.67200 1.33948 178 42.8571 14.2857 0.00000 7.91640 5.51230 1.50673 179 57.1429 14.2857 0.00000 13.3236 8.30025 1.76010 180 71.4286 14.2857 0.00000 20.7707 12.1400 2.10906 181 85.7143 14.2857 0.00000 30.4331 17.1220 2.56183 182 100.000 14.2857 0.00000 42.4677 23.3271 3.12574 183 100.000 85.7143 42.8571 69.5480 73.0836 25.7117 184 100.000 100.000 42.8571 79.9836 93.9518 29.1902 185 28.5714 28.5714 0.00000 6.05927 7.09569 1.91018 186 57.1429 28.5714 0.00000 15.0357 11.7239 2.33080 187 71.4286 28.5714 0.00000 22.4827 15.5637 2.67976 188 85.7143 28.5714 0.00000 32.1452 20.5457 3.13253 189 100.000 28.5714 0.00000 44.1798 26.7508 3.69644 190 100.000 57.1429 0.00000 51.9635 42.3160 6.29104 191 42.8571 28.5714 0.00000 9.62848 8.93599 2.07743 192 42.8571 42.8571 0.00000 12.7235 15.1251 3.10910 193 57.1429 42.8571 0.00000 18.1306 17.9131 3.36247 194 71.4286 42.8571 0.00000 25.5777 21.7528 3.71143 195 85.7143 42.8571 0.00000 35.2402 26.7348 4.16420 196 100.000 42.8571 0.00000 47.2748 32.9399 4.72812 197 100.000 71.4286 28.5714 59.6071 55.7038 14.6903 198 100.000 85.7143 28.5714 67.9858 72.4588 17.4833 199 42.8571 57.1429 0.00000 17.4122 24.5013 4.67203 200 57.1429 57.1429 0.00000 22.8194 27.2892 4.92540 201 71.4286 57.1429 0.00000 30.2665 31.1290 5.27436 202 85.7143 57.1429 0.00000 39.9290 36.1110 5.72712 203 100.000 71.4286 0.00000 58.4211 55.2295 8.44360 204 100.000 85.7143 0.00000 66.7998 71.9844 11.2365 205 35.7143 64.2857 7.14286 18.5194 29.5084 6.15611 206 42.8571 71.4286 0.00000 23.8698 37.4147 6.82458 207 57.1429 71.4286 0.00000 29.2770 40.2026 7.07796 208 71.4286 71.4286 0.00000 36.7241 44.0424 7.42691 209 85.7143 71.4286 0.00000 46.3866 49.0244 7.87968 210 28.5714 57.1429 0.00000 13.8430 22.6610 4.50478 211 28.5714 71.4286 0.00000 20.3006 35.5744 6.65734 212 28.5714 85.7143 0.00000 28.6793 52.3294 9.45025 213 42.8571 85.7143 0.00000 32.2485 54.1697 9.61750 214 57.1429 85.7143 0.00000 37.6557 56.9576 9.87087 215 71.4286 85.7143 0.00000 45.1027 60.7974 10.2198 216 85.7143 85.7143 0.00000 54.7652 65.7794 10.6726 217 14.2857 85.7143 0.00000 26.7049 51.3114 9.35773 218 14.2857 100.000 0.00000 37.1404 72.1796 12.8363 219 28.5714 100.000 0.00000 39.1149 73.1976 12.9288 220 42.8571 100.000 0.00000 42.6841 75.0379 13.0961 221 57.1429 100.000 0.00000 48.0912 77.8259 13.3494 222 71.4286 100.000 0.00000 55.5383 81.6656 13.6984 223 85.7143 100.000 0.00000 65.2008 86.6476 14.1511 224 100.000 100.000 0.00000 77.2354 92.8527 14.7151 225 100.000 100.000 57.1429 82.3503 94.8983 41.6558 226 28.5714 0.00000 14.2857 4.03145 2.52580 2.82194 227 42.8571 0.00000 14.2857 7.60066 4.36610 2.98918 228 57.1429 0.00000 14.2857 13.0078 7.15406 3.24256 229 71.4286 0.00000 14.2857 20.4549 10.9938 3.59151 230 85.7143 0.00000 14.2857 30.1174 15.9758 4.04428 231 100.000 0.00000 14.2857 42.1520 22.1809 4.60820 232 100.000 0.00000 28.5714 43.0162 22.5265 9.15998 233 28.5714 14.2857 14.2857 4.66898 3.80070 3.03445 234 42.8571 14.2857 14.2857 8.23820 5.64100 3.20170 235 57.1429 14.2857 14.2857 13.6454 8.42895 3.45507 236 71.4286 14.2857 14.2857 21.0925 12.2687 3.80403 237 85.7143 14.2857 14.2857 30.7549 17.2507 4.25679 238 100.000 14.2857 14.2857 42.7895 23.4558 4.82071 239 100.000 28.5714 71.4286 52.5542 30.1000 47.8055 240 14.2857 28.5714 14.2857 4.40665 6.20637 3.51263 241 28.5714 28.5714 14.2857 6.38107 7.22439 3.60515 242 42.8571 28.5714 14.2857 9.95029 9.06469 3.77240 243 57.1429 28.5714 14.2857 15.3575 11.8526 4.02577 244 71.4286 28.5714 14.2857 22.8045 15.6924 4.37473 245 85.7143 28.5714 14.2857 32.4670 20.6744 4.82749 246 100.000 28.5714 14.2857 44.5016 26.8795 5.39141 247 100.000 57.1429 28.5714 53.1495 42.7904 12.5378 248 14.2857 42.8571 0.00000 7.17983 12.2668 2.84934 249 14.2857 42.8571 14.2857 7.50164 12.3955 4.54430 250 42.8571 42.8571 14.2857 13.0453 15.2538 4.80407 251 57.1429 42.8571 14.2857 18.4524 18.0418 5.05744 252 71.4286 42.8571 14.2857 25.8995 21.8815 5.40640 253 85.7143 42.8571 14.2857 35.5620 26.8635 5.85916 254 100.000 42.8571 14.2857 47.5966 33.0686 6.42308 255 100.000 57.1429 14.2857 52.2853 42.4447 7.98601 256 28.5714 42.8571 0.00000 9.15425 13.2848 2.94185 257 28.5714 57.1429 14.2857 14.1648 22.7897 6.19975 258 42.8571 57.1429 14.2857 17.7340 24.6300 6.36700 259 57.1429 57.1429 14.2857 23.1412 27.4179 6.62037 260 71.4286 57.1429 14.2857 30.5883 31.2577 6.96932 261 85.7143 57.1429 14.2857 40.2508 36.2397 7.42209 262 3.57143 0.00000 0.00000 1.11287 1.05819 1.00529 263 0.00000 71.4286 14.2857 17.9128 34.3060 8.22534 264 14.2857 71.4286 14.2857 18.6480 34.6851 8.25979 265 28.5714 71.4286 14.2857 20.6224 35.7031 8.35231 266 42.8571 71.4286 14.2857 24.1916 37.5434 8.51955 267 57.1429 71.4286 14.2857 29.5988 40.3313 8.77292 268 71.4286 71.4286 14.2857 37.0459 44.1711 9.12188 269 85.7143 71.4286 14.2857 46.7084 49.1531 9.57465 270 100.000 71.4286 14.2857 58.7429 55.3582 10.1386 271 100.000 85.7143 14.2857 67.1216 72.1131 12.9315 272 14.2857 85.7143 14.2857 27.0267 51.4401 11.0527 273 28.5714 85.7143 14.2857 29.0011 52.4581 11.1452 274 42.8571 85.7143 14.2857 32.5703 54.2984 11.3125 275 57.1429 85.7143 14.2857 37.9775 57.0863 11.5658 276 71.4286 85.7143 14.2857 45.4245 60.9261 11.9148 277 85.7143 85.7143 14.2857 55.0870 65.9081 12.3676 278 0.00000 85.7143 14.2857 26.2914 51.0610 11.0182 279 0.00000 100.000 14.2857 36.7270 71.9292 14.4968 280 14.2857 100.000 14.2857 37.4622 72.3083 14.5313 281 28.5714 100.000 14.2857 39.4367 73.3263 14.6238 282 42.8571 100.000 14.2857 43.0059 75.1666 14.7910 283 57.1429 100.000 14.2857 48.4130 77.9546 15.0444 284 71.4286 100.000 14.2857 55.8601 81.7943 15.3933 285 85.7143 100.000 14.2857 65.5226 86.7763 15.8461 286 100.000 100.000 14.2857 77.5572 92.9814 16.4100 287 0.00000 0.00000 21.4286 1.67431 1.26968 4.55164 288 28.5714 0.00000 28.5714 4.89564 2.87142 7.37372 289 42.8571 0.00000 28.5714 8.46485 4.71172 7.54097 290 57.1429 0.00000 28.5714 13.8720 7.49968 7.79434 291 71.4286 0.00000 28.5714 21.3191 11.3394 8.14330 292 85.7143 0.00000 28.5714 30.9816 16.3214 8.59606 293 10.7143 10.7143 10.7143 2.05092 2.10556 2.20433 294 0.00000 14.2857 14.2857 1.95934 2.40360 2.90748 295 0.00000 14.2857 28.5714 2.82353 2.74922 7.45926 296 28.5714 14.2857 28.5714 5.53317 4.14632 7.58623 297 42.8571 14.2857 28.5714 9.10239 5.98662 7.75348 298 57.1429 14.2857 28.5714 14.5096 8.77457 8.00685 299 71.4286 14.2857 28.5714 21.9566 12.6143 8.35581 300 85.7143 14.2857 28.5714 31.6191 17.5963 8.80858 301 100.000 14.2857 28.5714 43.6537 23.8014 9.37250 302 100.000 42.8571 57.1429 52.3897 34.9855 31.6688 303 100.000 57.1429 57.1429 57.0784 44.3617 33.2318 304 42.8571 28.5714 28.5714 10.8145 9.41031 8.32418 305 57.1429 28.5714 28.5714 16.2216 12.1983 8.57755 306 71.4286 28.5714 28.5714 23.6687 16.0380 8.92651 307 85.7143 28.5714 28.5714 33.3312 21.0200 9.37928 308 100.000 28.5714 28.5714 45.3658 27.2251 9.94320 309 14.2857 28.5714 28.5714 5.27084 6.55199 8.06442 310 14.2857 42.8571 28.5714 8.36583 12.7411 9.09609 311 28.5714 42.8571 28.5714 10.3402 13.7591 9.18861 312 42.8571 42.8571 28.5714 13.9095 15.5994 9.35585 313 57.1429 42.8571 28.5714 19.3166 18.3874 9.60922 314 71.4286 42.8571 28.5714 26.7637 22.2271 9.95818 315 85.7143 42.8571 28.5714 36.4262 27.2091 10.4109 316 100.000 71.4286 57.1429 63.5360 57.2751 35.3843 317 100.000 85.7143 57.1429 71.9147 74.0301 38.1772 318 0.00000 57.1429 14.2857 11.4552 21.3926 6.07278 319 28.5714 57.1429 28.5714 15.0290 23.1353 10.7515 320 42.8571 57.1429 28.5714 18.5982 24.9756 10.9188 321 57.1429 57.1429 28.5714 24.0054 27.7635 11.1721 322 71.4286 57.1429 28.5714 31.4525 31.6033 11.5211 323 85.7143 57.1429 28.5714 41.1149 36.5853 11.9739 324 85.7143 85.7143 42.8571 57.5134 66.8785 25.1477 325 85.7143 100.000 42.8571 67.9490 87.7467 28.6263 326 28.5714 42.8571 14.2857 9.47606 13.4135 4.63682 327 28.5714 71.4286 28.5714 21.4866 36.0487 12.9041 328 42.8571 71.4286 28.5714 25.0558 37.8890 13.0713 329 57.1429 71.4286 28.5714 30.4630 40.6770 13.3247 330 71.4286 71.4286 28.5714 37.9101 44.5167 13.6737 331 85.7143 71.4286 28.5714 47.5726 49.4987 14.1264 332 85.7143 71.4286 42.8571 49.1348 50.1235 22.3548 333 14.2857 71.4286 28.5714 19.5122 35.0307 12.8116 334 14.2857 85.7143 28.5714 27.8908 51.7857 15.6045 335 28.5714 85.7143 28.5714 29.8653 52.8037 15.6970 336 42.8571 85.7143 28.5714 33.4345 54.6440 15.8642 337 57.1429 85.7143 28.5714 38.8417 57.4320 16.1176 338 71.4286 85.7143 28.5714 46.2887 61.2717 16.4666 339 85.7143 85.7143 28.5714 55.9512 66.2537 16.9193 340 14.2857 57.1429 0.00000 11.8686 21.6429 4.41226 341 14.2857 71.4286 0.00000 18.3262 34.5564 6.56482 342 14.2857 100.000 28.5714 38.3264 72.6539 19.0830 343 28.5714 100.000 28.5714 40.3008 73.6719 19.1756 344 42.8571 100.000 28.5714 43.8701 75.5122 19.3428 345 57.1429 100.000 28.5714 49.2772 78.3002 19.5962 346 71.4286 100.000 28.5714 56.7243 82.1399 19.9451 347 85.7143 100.000 28.5714 66.3868 87.1219 20.3979 348 100.000 100.000 28.5714 78.4214 93.3270 20.9618 349 14.2857 0.00000 28.5714 2.92122 1.85341 7.28120 350 14.2857 0.00000 42.8571 4.48344 2.47820 15.5096 351 42.8571 0.00000 42.8571 10.0271 5.33651 15.7694 352 57.1429 0.00000 42.8571 15.4342 8.12447 16.0227 353 71.4286 0.00000 42.8571 22.8813 11.9642 16.3717 354 85.7143 0.00000 42.8571 32.5438 16.9462 16.8245 355 100.000 0.00000 42.8571 44.5784 23.1513 17.3884 356 14.2857 14.2857 28.5714 3.55875 3.12830 7.49372 357 14.2857 14.2857 42.8571 5.12098 3.75309 15.7221 358 28.5714 14.2857 42.8571 7.09540 4.77111 15.8146 359 42.8571 14.2857 42.8571 10.6646 6.61141 15.9819 360 57.1429 14.2857 42.8571 16.0718 9.39936 16.2352 361 71.4286 14.2857 42.8571 23.5189 13.2391 16.5842 362 85.7143 14.2857 42.8571 33.1814 18.2211 17.0370 363 100.000 14.2857 42.8571 45.2159 24.4262 17.6009 364 100.000 14.2857 57.1429 47.5826 25.3727 30.0665 365 100.000 14.2857 71.4286 50.8422 26.6763 47.2348 366 85.7143 14.2857 71.4286 38.8076 20.4713 46.6709 367 42.8571 28.5714 42.8571 12.3767 10.0351 16.5526 368 57.1429 28.5714 42.8571 17.7839 12.8231 16.8059 369 71.4286 28.5714 42.8571 25.2310 16.6628 17.1549 370 85.7143 28.5714 42.8571 34.8934 21.6448 17.6077 371 100.000 28.5714 42.8571 46.9280 27.8499 18.1716 372 100.000 28.5714 57.1429 49.2947 28.7964 30.6372 373 0.00000 14.2857 42.8571 4.38575 3.37401 15.6877 374 14.2857 28.5714 42.8571 6.83306 7.17678 16.2928 375 57.1429 42.8571 42.8571 20.8789 19.0122 17.8376 376 71.4286 42.8571 42.8571 28.3259 22.8519 18.1866 377 85.7143 42.8571 42.8571 37.9884 27.8339 18.6393 378 85.7143 85.7143 57.1429 59.8801 67.8250 37.6133 379 28.5714 28.5714 42.8571 8.80748 8.19480 16.3853 380 28.5714 42.8571 42.8571 11.9025 14.3839 17.4170 381 28.5714 57.1429 42.8571 16.5912 23.7601 18.9799 382 42.8571 57.1429 42.8571 20.1604 25.6004 19.1472 383 57.1429 57.1429 42.8571 25.5676 28.3883 19.4005 384 71.4286 57.1429 42.8571 33.0147 32.2281 19.7495 385 85.7143 57.1429 42.8571 42.6772 37.2101 20.2023 386 0.00000 57.1429 28.5714 12.3193 21.7382 10.6246 387 0.00000 57.1429 42.8571 13.8816 22.3630 18.8530 388 0.00000 71.4286 42.8571 20.3392 35.2764 21.0055 389 28.5714 71.4286 42.8571 23.0488 36.6735 21.1325 390 42.8571 71.4286 42.8571 26.6180 38.5138 21.2997 391 57.1429 71.4286 42.8571 32.0252 41.3018 21.5531 392 71.4286 71.4286 42.8571 39.4723 45.1415 21.9021 393 14.2857 57.1429 28.5714 13.0546 22.1173 10.6590 394 14.2857 57.1429 42.8571 14.6168 22.7421 18.8874 395 14.2857 71.4286 42.8571 21.0744 35.6555 21.0400 396 14.2857 85.7143 42.8571 29.4531 52.4105 23.8329 397 28.5714 85.7143 42.8571 31.4275 53.4285 23.9254 398 42.8571 85.7143 42.8571 34.9967 55.2688 24.0926 399 57.1429 85.7143 42.8571 40.4039 58.0567 24.3460 400 71.4286 85.7143 42.8571 47.8510 61.8965 24.6950 401 0.00000 42.8571 14.2857 6.76641 12.0164 4.50985 402 0.00000 85.7143 42.8571 28.7178 52.0314 23.7984 403 0.00000 100.000 42.8571 39.1534 72.8996 27.2770 404 14.2857 100.000 42.8571 39.8886 73.2787 27.3114 405 28.5714 100.000 42.8571 41.8631 74.2967 27.4039 406 42.8571 100.000 42.8571 45.4323 76.1370 27.5712 407 57.1429 100.000 42.8571 50.8395 78.9250 27.8246 408 100.000 100.000 100.000 95.1065 100.000 108.844 409 36.9048 36.9048 36.9048 11.5587 12.1077 13.1000 410 38.0952 38.0952 38.0952 12.2841 12.8709 13.9314 411 28.5714 0.00000 42.8571 6.45786 3.49621 15.6021 412 28.5714 0.00000 57.1429 8.82454 4.44274 28.0677 413 42.8571 0.00000 57.1429 12.3938 6.28304 28.2349 414 57.1429 0.00000 57.1429 17.8009 9.07099 28.4883 415 71.4286 0.00000 57.1429 25.2480 12.9107 28.8373 416 85.7143 0.00000 57.1429 34.9105 17.8927 29.2900 417 100.000 0.00000 57.1429 46.9451 24.0978 29.8539 418 100.000 0.00000 71.4286 50.2046 25.4014 47.0223 419 14.2857 14.2857 57.1429 7.48766 4.69962 28.1877 420 28.5714 14.2857 57.1429 9.46208 5.71763 28.2802 421 42.8571 14.2857 57.1429 13.0313 7.55793 28.4474 422 57.1429 14.2857 57.1429 18.4385 10.3459 28.7008 423 71.4286 14.2857 57.1429 25.8856 14.1856 29.0498 424 85.7143 14.2857 57.1429 35.5480 19.1676 29.5025 425 85.7143 57.1429 57.1429 45.0439 38.1566 32.6678 426 85.7143 71.4286 57.1429 51.5015 51.0700 34.8204 427 14.2857 28.5714 57.1429 9.19975 8.12331 28.7584 428 28.5714 28.5714 57.1429 11.1742 9.14133 28.8509 429 42.8571 28.5714 57.1429 14.7434 10.9816 29.0181 430 57.1429 28.5714 57.1429 20.1506 13.7696 29.2715 431 71.4286 28.5714 57.1429 27.5976 17.6093 29.6205 432 85.7143 28.5714 57.1429 37.2601 22.5913 30.0732 433 85.7143 28.5714 71.4286 40.5197 23.8949 47.2416 434 14.2857 42.8571 42.8571 9.92805 13.3659 17.3245 435 14.2857 42.8571 57.1429 12.2947 14.3124 29.7901 436 28.5714 42.8571 57.1429 14.2692 15.3304 29.8826 437 42.8571 42.8571 57.1429 17.8384 17.1707 30.0498 438 57.1429 42.8571 57.1429 23.2455 19.9587 30.3032 439 71.4286 42.8571 57.1429 30.6926 23.7984 30.6521 440 85.7143 42.8571 57.1429 40.3551 28.7804 31.1049 441 14.2857 28.5714 0.00000 4.08485 6.07767 1.81767 442 14.2857 57.1429 14.2857 12.1904 21.7716 6.10723 443 14.2857 57.1429 57.1429 16.9835 23.6886 31.3530 444 28.5714 57.1429 57.1429 18.9579 24.7066 31.4455 445 42.8571 57.1429 57.1429 22.5271 26.5469 31.6127 446 71.4286 57.1429 57.1429 35.3814 33.1746 32.2151 447 0.00000 42.8571 42.8571 9.19283 12.9868 17.2900 448 0.00000 57.1429 57.1429 16.2483 23.3095 31.3185 449 0.00000 71.4286 57.1429 22.7059 36.2229 33.4711 450 14.2857 71.4286 57.1429 23.4411 36.6020 33.5055 451 28.5714 71.4286 57.1429 25.4155 37.6200 33.5981 452 42.8571 71.4286 57.1429 28.9847 39.4603 33.7653 453 57.1429 71.4286 57.1429 34.3919 42.2483 34.0187 454 71.4286 71.4286 57.1429 41.8390 46.0880 34.3676 455 71.4286 85.7143 57.1429 50.2176 62.8430 37.1605 456 0.00000 42.8571 28.5714 7.63060 12.3620 9.06164 457 0.00000 85.7143 57.1429 31.0845 52.9779 36.2640 458 14.2857 85.7143 57.1429 31.8198 53.3570 36.2984 459 28.5714 85.7143 57.1429 33.7942 54.3750 36.3910 460 42.8571 85.7143 57.1429 37.3634 56.2153 36.5582 461 57.1429 85.7143 57.1429 42.7706 59.0033 36.8116 462 0.00000 71.4286 28.5714 18.7770 34.6516 12.7771 463 0.00000 85.7143 28.5714 27.1556 51.4066 15.5700 464 0.00000 100.000 28.5714 37.5912 72.2748 19.0486 465 0.00000 100.000 57.1429 41.5201 73.8462 39.7425 466 14.2857 100.000 57.1429 42.2553 74.2252 39.7770 467 28.5714 100.000 57.1429 44.2298 75.2433 39.8695 468 42.8571 100.000 57.1429 47.7990 77.0836 40.0368 469 57.1429 100.000 57.1429 53.2061 79.8715 40.2901 470 71.4286 100.000 57.1429 60.6532 83.7113 40.6391 471 85.7143 100.000 57.1429 70.3157 88.6933 41.0919 472 14.2857 0.00000 57.1429 6.85013 3.42472 27.9752 473 14.2857 0.00000 71.4286 10.1097 4.72833 45.1435 474 28.5714 0.00000 71.4286 12.0841 5.74635 45.2360 475 42.8571 0.00000 71.4286 15.6533 7.58665 45.4033 476 57.1429 0.00000 71.4286 21.0605 10.3746 45.6566 477 71.4286 0.00000 71.4286 28.5076 14.2143 46.0056 478 85.7143 0.00000 71.4286 38.1700 19.1964 46.4584 479 0.00000 14.2857 57.1429 6.75244 4.32053 28.1532 480 0.00000 14.2857 71.4286 10.0120 5.62414 45.3216 481 14.2857 14.2857 71.4286 10.7472 6.00323 45.3560 482 28.5714 14.2857 71.4286 12.7216 7.02125 45.4485 483 42.8571 14.2857 71.4286 16.2908 8.86155 45.6158 484 57.1429 14.2857 71.4286 21.6980 11.6495 45.8692 485 71.4286 14.2857 71.4286 29.1451 15.4892 46.2181 486 71.4286 28.5714 71.4286 30.8572 18.9129 46.7888 487 0.00000 28.5714 57.1429 8.46452 7.74423 28.7239 488 0.00000 28.5714 71.4286 11.7241 9.04784 45.8923 489 14.2857 28.5714 71.4286 12.4593 9.42692 45.9267 490 28.5714 28.5714 71.4286 14.4337 10.4449 46.0192 491 42.8571 28.5714 71.4286 18.0029 12.2852 46.1865 492 57.1429 28.5714 71.4286 23.4101 15.0732 46.4399 493 0.00000 28.5714 28.5714 4.53562 6.17291 8.02996 494 0.00000 28.5714 42.8571 6.09784 6.79770 16.2584 495 0.00000 42.8571 57.1429 11.5595 13.9333 29.7556 496 0.00000 42.8571 71.4286 14.8191 15.2369 46.9239 497 14.2857 42.8571 71.4286 15.5543 15.6160 46.9584 498 28.5714 42.8571 71.4286 17.5287 16.6340 47.0509 499 42.8571 42.8571 71.4286 21.0979 18.4743 47.2182 500 57.1429 42.8571 71.4286 26.5051 21.2623 47.4715 501 71.4286 42.8571 71.4286 33.9522 25.1020 47.8205 502 85.7143 42.8571 71.4286 43.6147 30.0841 48.2733 503 92.8571 50.0000 78.5714 53.4487 38.0909 59.7281 504 100.000 57.1429 85.7143 64.5672 47.3567 72.6758 505 7.14286 35.7143 21.4286 5.63528 8.81807 5.80009 506 28.5714 57.1429 71.4286 22.2174 26.0102 48.6138 507 42.8571 57.1429 71.4286 25.7867 27.8505 48.7811 508 57.1429 57.1429 71.4286 31.1938 30.6385 49.0345 509 71.4286 57.1429 71.4286 38.6409 34.4782 49.3834 510 71.4286 57.1429 100.000 48.1376 38.2763 99.4033 511 7.14286 64.2857 64.2857 21.0101 30.0387 40.2994 512 0.00000 71.4286 71.4286 25.9654 37.5265 50.6394 513 14.2857 71.4286 71.4286 26.7006 37.9056 50.6739 514 28.5714 71.4286 71.4286 28.6751 38.9236 50.7664 515 42.8571 71.4286 71.4286 32.2443 40.7639 50.9336 516 57.1429 71.4286 71.4286 37.6514 43.5519 51.1870 517 71.4286 71.4286 85.7143 49.3277 49.0831 73.8116 518 71.4286 85.7143 85.7143 57.7064 65.8380 76.6046 519 14.2857 57.1429 71.4286 20.2430 24.9922 48.5213 520 14.2857 85.7143 71.4286 35.0793 54.6606 53.4668 521 28.5714 85.7143 71.4286 37.0537 55.6786 53.5593 522 42.8571 85.7143 71.4286 40.6229 57.5189 53.7266 523 7.14286 64.2857 21.4286 15.0564 27.6576 8.94047 524 7.14286 78.5714 21.4286 22.4566 42.4560 11.4072 525 7.14286 92.8571 21.4286 31.8476 61.2354 14.5376 526 7.14286 92.8571 64.2857 37.8013 63.6165 45.8965 527 0.00000 100.000 71.4286 44.7797 75.1498 56.9109 528 14.2857 100.000 71.4286 45.5149 75.5288 56.9453 529 28.5714 100.000 71.4286 47.4893 76.5469 57.0379 530 42.8571 100.000 71.4286 51.0585 78.3872 57.2051 531 57.1429 100.000 71.4286 56.4657 81.1751 57.4585 532 71.4286 100.000 71.4286 63.9128 85.0149 57.8074 533 85.7143 100.000 71.4286 73.5753 89.9969 58.2602 534 100.000 100.000 71.4286 85.6098 96.2019 58.8241 535 7.14286 7.14286 35.7143 3.34124 2.31351 10.9478 536 28.5714 0.00000 85.7143 16.3133 7.43777 67.5117 537 42.8571 0.00000 85.7143 19.8825 9.27807 67.6790 538 57.1429 0.00000 85.7143 25.2897 12.0660 67.9323 539 71.4286 0.00000 85.7143 32.7368 15.9058 68.2813 540 85.7143 0.00000 85.7143 42.3993 20.8878 68.7340 541 92.8571 78.5714 92.8571 71.1421 65.8894 89.0129 542 100.000 85.7143 100.000 84.6709 79.1318 105.365 543 21.4286 7.14286 78.5714 13.1216 6.37420 55.7298 544 28.5714 14.2857 85.7143 16.9508 8.71266 67.7242 545 42.8571 14.2857 85.7143 20.5200 10.5530 67.8915 546 57.1429 14.2857 85.7143 25.9272 13.3409 68.1448 547 71.4286 14.2857 85.7143 33.3743 17.1807 68.4938 548 85.7143 14.2857 85.7143 43.0368 22.1627 68.9466 549 85.7143 42.8571 85.7143 47.8439 31.7755 70.5489 550 85.7143 42.8571 100.000 53.1113 33.8821 98.2932 551 21.4286 21.4286 78.5714 14.2399 8.61046 56.1025 552 28.5714 28.5714 85.7143 18.6629 12.1364 68.2949 553 42.8571 28.5714 85.7143 22.2321 13.9767 68.4622 554 57.1429 28.5714 85.7143 27.6393 16.7646 68.7155 555 71.4286 28.5714 85.7143 35.0864 20.6043 69.0645 556 71.4286 28.5714 100.000 40.3538 22.7110 96.8087 557 85.7143 28.5714 100.000 50.0163 27.6930 97.2615 558 14.2857 28.5714 85.7143 16.6885 11.1183 68.2024 559 14.2857 42.8571 85.7143 19.7835 17.3074 69.2341 560 28.5714 42.8571 85.7143 21.7579 18.3255 69.3266 561 42.8571 42.8571 85.7143 25.3271 20.1658 69.4938 562 57.1429 42.8571 85.7143 30.7343 22.9537 69.7472 563 71.4286 42.8571 85.7143 38.1814 26.7935 70.0962 564 71.4286 42.8571 100.000 43.4488 28.9001 97.8404 565 7.14286 50.0000 78.5714 19.1925 20.4283 58.1229 566 0.00000 57.1429 85.7143 23.7370 26.3045 70.7625 567 14.2857 57.1429 85.7143 24.4722 26.6836 70.7970 568 28.5714 57.1429 85.7143 26.4466 27.7016 70.8895 569 42.8571 57.1429 85.7143 30.0159 29.5419 71.0568 570 57.1429 57.1429 85.7143 35.4230 32.3299 71.3101 571 71.4286 57.1429 85.7143 42.8701 36.1696 71.6591 572 78.5714 64.2857 92.8571 52.9119 45.5071 86.0386 573 7.14286 64.2857 78.5714 24.7454 31.5326 59.9739 574 0.00000 71.4286 85.7143 30.1946 39.2180 72.9151 575 14.2857 71.4286 85.7143 30.9298 39.5970 72.9496 576 28.5714 71.4286 85.7143 32.9043 40.6151 73.0421 577 42.8571 71.4286 85.7143 36.4735 42.4554 73.2093 578 57.1429 71.4286 85.7143 41.8806 45.2433 73.4627 579 57.1429 85.7143 85.7143 50.2593 61.9983 76.2556 580 7.14286 78.5714 64.2857 28.4104 44.8372 42.7662 581 0.00000 85.7143 71.4286 34.3441 54.2815 53.4323 582 0.00000 85.7143 85.7143 38.5733 55.9729 75.7080 583 14.2857 85.7143 85.7143 39.3085 56.3520 75.7425 584 28.5714 85.7143 85.7143 41.2829 57.3700 75.8350 585 42.8571 85.7143 85.7143 44.8521 59.2103 76.0022 586 7.14286 50.0000 35.7143 10.7018 17.0326 13.4014 587 7.14286 50.0000 50.0000 12.6543 17.8134 23.6853 588 7.14286 92.8571 78.5714 41.5367 65.1104 65.5710 589 0.00000 100.000 85.7143 49.0089 76.8412 79.1866 590 14.2857 100.000 85.7143 49.7441 77.2203 79.2210 591 28.5714 100.000 85.7143 51.7185 78.2383 79.3135 592 42.8571 100.000 85.7143 55.2877 80.0786 79.4808 593 57.1429 100.000 85.7143 60.6949 82.8665 79.7342 594 71.4286 100.000 85.7143 68.1420 86.7063 80.0831 595 85.7143 100.000 85.7143 77.8045 91.6883 80.5359 596 14.2857 0.00000 85.7143 14.3389 6.41975 67.4192 597 14.2857 0.00000 100.000 19.6063 8.52640 95.1634 598 28.5714 0.00000 100.000 21.5808 9.54442 95.2559 599 42.8571 0.00000 100.000 25.1500 11.3847 95.4232 600 57.1429 0.00000 100.000 30.5571 14.1727 95.6765 601 71.4286 0.00000 100.000 38.0042 18.0124 96.0255 602 85.7143 0.00000 100.000 47.6667 22.9944 96.4783 603 85.7143 71.4286 100.000 64.2577 56.1717 102.009 604 14.2857 14.2857 85.7143 14.9764 7.69464 67.6317 605 14.2857 14.2857 100.000 20.2439 9.80129 95.3759 606 28.5714 14.2857 100.000 22.2183 10.8193 95.4684 607 42.8571 14.2857 100.000 25.7875 12.6596 95.6357 608 57.1429 14.2857 100.000 31.1947 15.4476 95.8891 609 71.4286 14.2857 100.000 38.6418 19.2873 96.2380 610 0.00000 14.2857 85.7143 14.2412 7.31556 67.5972 611 0.00000 14.2857 100.000 19.5086 9.42221 95.3415 612 0.00000 28.5714 100.000 21.2207 12.8459 95.9122 613 14.2857 28.5714 100.000 21.9560 13.2250 95.9466 614 28.5714 28.5714 100.000 23.9304 14.2430 96.0391 615 42.8571 28.5714 100.000 27.4996 16.0833 96.2064 616 57.1429 28.5714 100.000 32.9068 18.8713 96.4598 617 57.1429 42.8571 100.000 36.0017 25.0604 97.4914 618 7.14286 35.7143 78.5714 15.3244 12.6931 56.8335 619 7.14286 35.7143 92.8571 20.0646 14.5889 81.8005 620 0.00000 42.8571 100.000 24.3157 19.0350 96.9438 621 14.2857 42.8571 100.000 25.0509 19.4141 96.9783 622 28.5714 42.8571 100.000 27.0254 20.4321 97.0708 623 42.8571 42.8571 100.000 30.5946 22.2724 97.2381 624 7.14286 35.7143 50.0000 8.78613 10.0782 22.3959 625 7.14286 35.7143 64.2857 11.5890 11.1992 37.1590 626 0.00000 42.8571 85.7143 19.0483 16.9284 69.1996 627 7.14286 50.0000 92.8571 23.9327 22.3241 83.0899 628 0.00000 57.1429 100.000 29.0045 28.4112 98.5068 629 14.2857 57.1429 100.000 29.7397 28.7903 98.5412 630 28.5714 57.1429 100.000 31.7141 29.8083 98.6337 631 42.8571 57.1429 100.000 35.2833 31.6486 98.8010 632 57.1429 57.1429 100.000 40.6905 34.4365 99.0544 633 7.14286 50.0000 64.2857 15.4572 18.9344 38.4484 634 0.00000 57.1429 71.4286 19.5078 24.6131 48.4869 635 7.14286 64.2857 92.8571 29.4856 33.4284 84.9409 636 0.00000 71.4286 100.000 35.4621 41.3246 100.659 637 14.2857 71.4286 100.000 36.1973 41.7037 100.694 638 28.5714 71.4286 100.000 38.1717 42.7217 100.786 639 42.8571 71.4286 100.000 41.7409 44.5620 100.954 640 57.1429 71.4286 100.000 47.1481 47.3500 101.207 641 71.4286 85.7143 100.000 62.9739 67.9447 104.349 642 7.14286 21.4286 35.7143 4.45952 4.54977 11.3206 643 0.00000 28.5714 85.7143 15.9533 10.7393 68.1679 644 0.00000 85.7143 100.000 43.8407 58.0796 103.452 645 14.2857 85.7143 100.000 44.5760 58.4587 103.487 646 28.5714 85.7143 100.000 46.5504 59.4767 103.579 647 42.8571 85.7143 100.000 50.1196 61.3170 103.746 648 57.1429 85.7143 100.000 55.5268 64.1049 104.000 649 7.14286 35.7143 35.7143 6.83364 9.29734 12.1120 650 7.14286 78.5714 78.5714 32.1457 46.3311 62.4406 651 7.14286 92.8571 92.8571 46.2769 67.0062 90.5380 652 0.00000 100.000 100.000 54.2763 78.9478 106.931 653 14.2857 100.000 100.000 55.0115 79.3269 106.965 654 28.5714 100.000 100.000 56.9860 80.3449 107.058 655 42.8571 100.000 100.000 60.5552 82.1852 107.225 656 57.1429 100.000 100.000 65.9623 84.9732 107.478 657 71.4286 100.000 100.000 73.4094 88.8129 107.827 658 85.7143 100.000 100.000 83.0719 93.7949 108.280 659 21.4286 7.14286 7.14286 2.86805 2.27343 1.72329 660 35.7143 7.14286 7.14286 5.60594 3.68510 1.85158 661 35.7143 21.4286 7.14286 6.72423 5.92135 2.22434 662 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 663 78.5714 7.14286 7.14286 25.0047 13.6872 2.76057 664 92.8571 7.14286 7.14286 35.8346 19.2711 3.26804 665 92.8571 21.4286 35.7143 38.7157 22.2124 12.9258 666 92.8571 50.0000 50.0000 46.9105 35.4761 25.2905 667 50.0000 7.14286 7.14286 10.0668 5.98513 2.06061 668 50.0000 21.4286 7.14286 11.1851 8.22138 2.43337 669 64.2857 21.4286 7.14286 17.5888 11.5232 2.73344 670 78.5714 21.4286 7.14286 26.1230 15.9234 3.13333 671 92.8571 21.4286 7.14286 36.9529 21.5074 3.64081 672 92.8571 35.7143 64.2857 45.8452 28.8618 38.7642 673 100.000 85.7143 71.4286 75.1742 75.3337 55.3456 674 35.7143 35.7143 7.14286 9.09835 10.6689 3.01572 675 50.0000 35.7143 7.14286 13.5592 12.9690 3.22475 676 64.2857 35.7143 7.14286 19.9630 16.2708 3.52482 677 78.5714 35.7143 7.14286 28.4971 20.6710 3.92471 678 92.8571 35.7143 7.14286 39.3270 26.2549 4.43219 679 92.8571 35.7143 21.4286 39.8915 26.4807 7.40527 680 92.8571 50.0000 21.4286 43.7597 34.2159 8.69467 681 35.7143 50.0000 7.14286 12.9665 18.4042 4.30512 682 50.0000 50.0000 7.14286 17.4274 20.7042 4.51414 683 64.2857 50.0000 7.14286 23.8311 24.0060 4.81421 684 78.5714 50.0000 7.14286 32.3653 28.4062 5.21411 685 92.8571 50.0000 7.14286 43.1952 33.9902 5.72158 686 100.000 57.1429 71.4286 60.3380 45.6653 50.4001 687 100.000 57.1429 100.000 69.8346 49.4633 100.420 688 100.000 100.000 100.000 95.1065 100.000 108.844 689 50.0000 64.2857 7.14286 22.9803 31.8085 6.36513 690 64.2857 64.2857 7.14286 29.3840 35.1103 6.66520 691 78.5714 64.2857 7.14286 37.9182 39.5105 7.06510 692 92.8571 64.2857 7.14286 48.7481 45.0945 7.57257 693 21.4286 64.2857 7.14286 15.7815 28.0968 6.02781 694 21.4286 78.5714 7.14286 23.1818 42.8952 8.49459 695 35.7143 78.5714 7.14286 25.9197 44.3069 8.62288 696 50.0000 78.5714 7.14286 30.3805 46.6069 8.83191 697 64.2857 78.5714 7.14286 36.7843 49.9087 9.13198 698 78.5714 78.5714 7.14286 45.3185 54.3090 9.53187 699 92.8571 78.5714 7.14286 56.1484 59.8929 10.0393 700 21.4286 50.0000 7.14286 10.2286 16.9925 4.17682 701 21.4286 92.8571 7.14286 32.5728 61.6746 11.6249 702 35.7143 92.8571 7.14286 35.3107 63.0862 11.7532 703 50.0000 92.8571 7.14286 39.7715 65.3863 11.9623 704 64.2857 92.8571 7.14286 46.1753 68.6881 12.2623 705 78.5714 92.8571 7.14286 54.7094 73.0883 12.6622 706 92.8571 92.8571 7.14286 65.5394 78.6722 13.1697 707 92.8571 35.7143 35.7143 41.0899 26.9600 13.7172 708 92.8571 35.7143 50.0000 43.0423 27.7408 24.0011 709 35.7143 7.14286 21.4286 6.17041 3.91085 4.82466 710 50.0000 7.14286 21.4286 10.6313 6.21088 5.03369 711 64.2857 7.14286 21.4286 17.0350 9.51268 5.33376 712 78.5714 7.14286 21.4286 25.5692 13.9129 5.73366 713 92.8571 7.14286 21.4286 36.3991 19.4969 6.24113 714 92.8571 7.14286 35.7143 37.5975 19.9761 12.5530 715 35.7143 21.4286 21.4286 7.28869 6.14710 5.19743 716 50.0000 21.4286 21.4286 11.7495 8.44713 5.40646 717 64.2857 21.4286 21.4286 18.1533 11.7489 5.70653 718 78.5714 21.4286 21.4286 26.6875 16.1492 6.10642 719 92.8571 21.4286 21.4286 37.5174 21.7331 6.61389 720 100.000 42.8571 71.4286 55.6492 36.2891 48.8372 721 100.000 42.8571 85.7143 59.8784 37.9805 71.1129 722 35.7143 35.7143 21.4286 9.66281 10.8947 5.98881 723 50.0000 35.7143 21.4286 14.1237 13.1947 6.19784 724 64.2857 35.7143 21.4286 20.5274 16.4965 6.49791 725 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 726 7.14286 21.4286 7.14286 2.69670 3.84475 2.03562 727 7.14286 35.7143 7.14286 5.07082 8.59232 2.82700 728 7.14286 50.0000 7.14286 8.93897 16.3275 4.11639 729 21.4286 50.0000 21.4286 10.7931 17.2182 7.14991 730 50.0000 50.0000 21.4286 17.9918 20.9299 7.48723 731 64.2857 50.0000 21.4286 24.3956 24.2317 7.78730 732 78.5714 50.0000 21.4286 32.9297 28.6320 8.18720 733 92.8571 64.2857 35.7143 50.5109 45.7995 16.8575 734 92.8571 78.5714 35.7143 57.9112 60.5979 19.3243 735 35.7143 50.0000 21.4286 13.5310 18.6299 7.27820 736 35.7143 64.2857 21.4286 19.0839 29.7342 9.12919 737 50.0000 64.2857 21.4286 23.5447 32.0342 9.33822 738 64.2857 64.2857 21.4286 29.9485 35.3360 9.63829 739 78.5714 64.2857 21.4286 38.4827 39.7363 10.0382 740 92.8571 64.2857 21.4286 49.3126 45.3202 10.5457 741 21.4286 64.2857 21.4286 16.3460 28.3225 9.00090 742 21.4286 78.5714 21.4286 23.7462 43.1210 11.4677 743 35.7143 78.5714 21.4286 26.4841 44.5326 11.5960 744 50.0000 78.5714 21.4286 30.9450 46.8327 11.8050 745 64.2857 78.5714 21.4286 37.3488 50.1345 12.1051 746 78.5714 78.5714 21.4286 45.8829 54.5347 12.5050 747 92.8571 78.5714 21.4286 56.7128 60.1187 13.0124 748 7.14286 92.8571 7.14286 31.2831 61.0096 11.5645 749 21.4286 92.8571 21.4286 33.1372 61.9003 14.5980 750 35.7143 92.8571 21.4286 35.8751 63.3120 14.7263 751 50.0000 92.8571 21.4286 40.3360 65.6120 14.9353 752 64.2857 92.8571 21.4286 46.7397 68.9138 15.2354 753 78.5714 92.8571 21.4286 55.2739 73.3140 15.6353 754 92.8571 92.8571 21.4286 66.1038 78.8980 16.1428 755 21.4286 7.14286 21.4286 3.43251 2.49918 4.69637 756 21.4286 7.14286 35.7143 4.63087 2.97845 11.0083 757 35.7143 7.14286 35.7143 7.36877 4.39012 11.1365 758 50.0000 7.14286 35.7143 11.8296 6.69015 11.3456 759 64.2857 7.14286 35.7143 18.2334 9.99195 11.6456 760 78.5714 7.14286 35.7143 26.7675 14.3922 12.0455 761 92.8571 7.14286 50.0000 39.5499 20.7570 22.8370 762 92.8571 7.14286 64.2857 42.3528 21.8780 37.6001 763 100.000 14.2857 85.7143 55.0714 28.3677 69.5105 764 100.000 14.2857 100.000 60.3388 30.4744 97.2547 765 100.000 42.8571 100.000 65.1459 40.0872 98.8571 766 64.2857 21.4286 35.7143 19.3517 12.2282 12.0184 767 78.5714 21.4286 35.7143 27.8858 16.6284 12.4183 768 92.8571 21.4286 50.0000 40.6682 22.9933 23.2097 769 92.8571 21.4286 64.2857 43.4711 24.1142 37.9728 770 50.0000 21.4286 35.7143 12.9479 8.92640 11.7183 771 50.0000 35.7143 35.7143 15.3220 13.6740 12.5097 772 64.2857 35.7143 35.7143 21.7258 16.9758 12.8098 773 78.5714 35.7143 35.7143 30.2599 21.3760 13.2097 774 21.4286 21.4286 7.14286 3.98633 4.50969 2.09605 775 21.4286 35.7143 7.14286 6.36045 9.25726 2.88743 776 21.4286 35.7143 21.4286 6.92491 9.48301 5.86052 777 35.7143 50.0000 35.7143 14.7293 19.1092 13.5901 778 50.0000 50.0000 35.7143 19.1902 21.4092 13.7991 779 64.2857 50.0000 35.7143 25.5939 24.7110 14.0992 780 78.5714 50.0000 35.7143 34.1281 29.1112 14.4991 781 92.8571 50.0000 35.7143 44.9580 34.6952 15.0065 782 92.8571 78.5714 64.2857 62.6666 62.4998 44.3714 783 92.8571 78.5714 78.5714 66.4019 63.9937 64.0458 784 100.000 85.7143 85.7143 79.4035 77.0251 77.6212 785 100.000 100.000 85.7143 89.8390 97.8934 81.0998 786 100.000 100.000 100.000 95.1065 100.000 108.844 787 50.0000 64.2857 35.7143 24.7431 32.5135 15.6501 788 78.5714 64.2857 35.7143 39.6810 40.2155 16.3501 789 78.5714 78.5714 35.7143 47.0813 55.0140 18.8168 790 21.4286 78.5714 35.7143 24.9446 43.6002 17.7796 791 35.7143 78.5714 35.7143 27.6825 45.0119 17.9078 792 50.0000 78.5714 35.7143 32.1434 47.3119 18.1169 793 64.2857 78.5714 35.7143 38.5471 50.6137 18.4169 794 7.14286 64.2857 35.7143 16.2547 28.1369 15.2523 795 7.14286 78.5714 35.7143 23.6550 42.9353 17.7191 796 7.14286 92.8571 35.7143 33.0460 61.7146 20.8495 797 21.4286 92.8571 35.7143 34.3356 62.3796 20.9099 798 35.7143 92.8571 35.7143 37.0735 63.7912 21.0382 799 50.0000 92.8571 35.7143 41.5343 66.0913 21.2472 800 64.2857 92.8571 35.7143 47.9381 69.3931 21.5473 801 78.5714 92.8571 35.7143 56.4723 73.7933 21.9472 802 92.8571 92.8571 35.7143 67.3022 79.3773 22.4547 803 92.8571 92.8571 50.0000 69.2547 80.1581 32.7386 804 7.14286 7.14286 21.4286 2.14288 1.83425 4.63594 805 35.7143 7.14286 50.0000 9.32125 5.17099 21.4205 806 50.0000 7.14286 50.0000 13.7821 7.47102 21.6295 807 64.2857 7.14286 50.0000 20.1859 10.7728 21.9296 808 78.5714 7.14286 50.0000 28.7200 15.1731 22.3295 809 92.8571 64.2857 50.0000 52.4634 46.5804 27.1415 810 92.8571 78.5714 50.0000 59.8637 61.3788 29.6083 811 21.4286 21.4286 35.7143 5.74915 5.21470 11.3810 812 35.7143 21.4286 35.7143 8.48705 6.62637 11.5093 813 50.0000 21.4286 50.0000 14.9004 9.70727 22.0023 814 64.2857 21.4286 50.0000 21.3042 13.0091 22.3024 815 78.5714 21.4286 50.0000 29.8383 17.4093 22.7022 816 78.5714 78.5714 92.8571 60.3122 60.3055 88.5054 817 85.7143 85.7143 100.000 72.6363 72.9267 104.802 818 21.4286 35.7143 35.7143 8.12327 9.96228 12.1724 819 21.4286 35.7143 50.0000 10.0758 10.7431 22.4563 820 50.0000 35.7143 50.0000 17.2745 14.4548 22.7937 821 64.2857 35.7143 50.0000 23.6783 17.7567 23.0937 822 78.5714 35.7143 50.0000 32.2124 22.1569 23.4936 823 78.5714 64.2857 50.0000 41.6335 40.9964 26.6340 824 78.5714 78.5714 50.0000 49.0338 55.7948 29.1008 825 35.7143 35.7143 50.0000 12.8137 12.1548 22.5846 826 35.7143 50.0000 50.0000 16.6818 19.8900 23.8740 827 64.2857 50.0000 50.0000 27.5464 25.4919 24.3831 828 78.5714 50.0000 50.0000 36.0806 29.8921 24.7830 829 85.7143 57.1429 71.4286 48.3034 39.4602 49.8362 830 85.7143 57.1429 85.7143 52.5326 41.1516 72.1119 831 92.8571 64.2857 92.8571 63.7418 51.0910 86.5461 832 100.000 71.4286 100.000 76.2922 62.3768 102.573 833 50.0000 64.2857 50.0000 26.6956 33.2944 25.9340 834 50.0000 64.2857 64.2857 29.4985 34.4153 40.6972 835 57.1429 85.7143 71.4286 46.0301 60.3069 53.9799 836 7.14286 64.2857 50.0000 18.2072 28.9177 25.5363 837 7.14286 78.5714 50.0000 25.6075 43.7162 28.0031 838 21.4286 78.5714 50.0000 26.8971 44.3811 28.0635 839 35.7143 78.5714 50.0000 29.6350 45.7928 28.1918 840 50.0000 78.5714 50.0000 34.0958 48.0928 28.4008 841 64.2857 78.5714 50.0000 40.4996 51.3946 28.7009 842 71.4286 85.7143 71.4286 53.4772 64.1466 54.3289 843 7.14286 50.0000 21.4286 9.50344 16.5533 7.08948 844 7.14286 92.8571 50.0000 34.9984 62.4955 31.1334 845 21.4286 92.8571 50.0000 36.2881 63.1604 31.1939 846 35.7143 92.8571 50.0000 39.0260 64.5721 31.3221 847 50.0000 92.8571 50.0000 43.4868 66.8721 31.5312 848 64.2857 92.8571 50.0000 49.8906 70.1739 31.8312 849 78.5714 92.8571 50.0000 58.4247 74.5742 32.2311 850 7.14286 7.14286 50.0000 5.29373 3.09439 21.2318 851 7.14286 7.14286 64.2857 8.09662 4.21536 35.9949 852 21.4286 7.14286 64.2857 9.38625 4.88030 36.0553 853 35.7143 7.14286 64.2857 12.1241 6.29197 36.1836 854 50.0000 7.14286 64.2857 16.5850 8.59200 36.3926 855 64.2857 7.14286 64.2857 22.9888 11.8938 36.6927 856 78.5714 7.14286 64.2857 31.5229 16.2940 37.0926 857 85.7143 14.2857 100.000 48.3042 24.2693 96.6908 858 21.4286 21.4286 50.0000 7.70164 5.99557 21.6650 859 21.4286 21.4286 64.2857 10.5045 7.11655 36.4281 860 35.7143 21.4286 64.2857 13.2424 8.52822 36.5564 861 50.0000 21.4286 64.2857 17.7033 10.8283 36.7654 862 64.2857 21.4286 64.2857 24.1070 14.1301 37.0655 863 78.5714 21.4286 64.2857 32.6412 18.5303 37.4654 864 85.7143 71.4286 71.4286 54.7610 52.3736 51.9887 865 100.000 71.4286 85.7143 71.0248 60.2701 74.8283 866 7.14286 21.4286 21.4286 3.26116 4.07050 5.00871 867 35.7143 35.7143 64.2857 15.6165 13.2758 37.3477 868 50.0000 35.7143 64.2857 20.0774 15.5758 37.5568 869 64.2857 35.7143 64.2857 26.4812 18.8776 37.8568 870 78.5714 35.7143 64.2857 35.0153 23.2779 38.2567 871 21.4286 50.0000 35.7143 11.9914 17.6975 13.4618 872 21.4286 50.0000 50.0000 13.9439 18.4784 23.7457 873 21.4286 50.0000 64.2857 16.7468 19.5994 38.5088 874 35.7143 50.0000 64.2857 19.4847 21.0110 38.6371 875 50.0000 50.0000 64.2857 23.9455 23.3111 38.8462 876 64.2857 50.0000 64.2857 30.3493 26.6129 39.1462 877 78.5714 50.0000 64.2857 38.8835 31.0131 39.5461 878 92.8571 50.0000 64.2857 49.7134 36.5970 40.0536 879 92.8571 64.2857 78.5714 59.0017 49.1952 61.5790 880 35.7143 64.2857 35.7143 20.2822 30.2135 15.4411 881 35.7143 64.2857 50.0000 22.2347 30.9943 25.7250 882 64.2857 64.2857 50.0000 33.0994 36.5962 26.2341 883 78.5714 64.2857 64.2857 44.4364 42.1174 41.3971 884 92.8571 64.2857 64.2857 55.2663 47.7013 41.9046 885 100.000 71.4286 71.4286 66.7956 58.5787 52.5527 886 35.7143 64.2857 64.2857 25.0376 32.1153 40.4881 887 35.7143 78.5714 64.2857 32.4379 46.9138 42.9549 888 50.0000 78.5714 64.2857 36.8987 49.2138 43.1639 889 64.2857 78.5714 64.2857 43.3025 52.5156 43.4640 890 78.5714 78.5714 64.2857 51.8367 56.9158 43.8639 891 85.7143 85.7143 71.4286 63.1397 69.1286 54.7816 892 7.14286 78.5714 7.14286 21.8922 42.2303 8.43416 893 21.4286 92.8571 64.2857 39.0910 64.2814 45.9570 894 35.7143 92.8571 64.2857 41.8289 65.6931 46.0853 895 50.0000 92.8571 64.2857 46.2897 67.9931 46.2943 896 64.2857 92.8571 64.2857 52.6935 71.2949 46.5944 897 78.5714 92.8571 64.2857 61.2276 75.6952 46.9942 898 92.8571 92.8571 64.2857 72.0576 81.2791 47.5017 899 92.8571 92.8571 78.5714 75.7929 82.7730 67.1762 900 21.4286 7.14286 50.0000 6.58336 3.75932 21.2922 901 35.7143 7.14286 78.5714 15.8595 7.78587 55.8581 902 50.0000 7.14286 78.5714 20.3203 10.0859 56.0671 903 64.2857 7.14286 78.5714 26.7241 13.3877 56.3672 904 78.5714 7.14286 78.5714 35.2583 17.7879 56.7670 905 92.8571 7.14286 78.5714 46.0882 23.3719 57.2745 906 100.000 0.00000 85.7143 54.4338 27.0928 69.2980 907 35.7143 21.4286 50.0000 10.4395 7.40724 21.7933 908 35.7143 21.4286 78.5714 16.9778 10.0221 56.2308 909 50.0000 21.4286 78.5714 21.4386 12.3222 56.4398 910 64.2857 21.4286 78.5714 27.8424 15.6240 56.7399 911 78.5714 21.4286 78.5714 36.3766 20.0242 57.1398 912 92.8571 21.4286 78.5714 47.2065 25.6081 57.6473 913 100.000 28.5714 85.7143 56.7834 31.7914 70.0812 914 100.000 28.5714 100.000 62.0509 33.8981 97.8254 915 35.7143 35.7143 78.5714 19.3519 14.7697 57.0222 916 50.0000 35.7143 78.5714 23.8127 17.0697 57.2312 917 64.2857 35.7143 78.5714 30.2165 20.3715 57.5313 918 78.5714 35.7143 78.5714 38.7507 24.7718 57.9312 919 92.8571 35.7143 78.5714 49.5806 30.3557 58.4387 920 92.8571 35.7143 92.8571 54.3208 32.2515 83.4057 921 21.4286 35.7143 78.5714 16.6140 13.3580 56.8939 922 35.7143 50.0000 78.5714 23.2200 22.5049 58.3116 923 50.0000 50.0000 78.5714 27.6809 24.8050 58.5206 924 64.2857 50.0000 78.5714 34.0847 28.1068 58.8207 925 78.5714 50.0000 78.5714 42.6188 32.5070 59.2206 926 85.7143 57.1429 100.000 57.8001 43.2583 99.8561 927 21.4286 64.2857 64.2857 22.2997 30.7036 40.3598 928 21.4286 64.2857 78.5714 26.0351 32.1976 60.0343 929 35.7143 64.2857 78.5714 28.7730 33.6092 60.1626 930 50.0000 64.2857 78.5714 33.2338 35.9092 60.3716 931 64.2857 64.2857 78.5714 39.6376 39.2111 60.6717 932 78.5714 64.2857 78.5714 48.1717 43.6113 61.0716 933 85.7143 71.4286 85.7143 58.9902 54.0651 74.2644 934 21.4286 64.2857 50.0000 19.4968 29.5827 25.5967 935 21.4286 78.5714 64.2857 29.7000 45.5021 42.8266 936 35.7143 78.5714 78.5714 36.1732 48.4077 62.6294 937 50.0000 78.5714 78.5714 40.6341 50.7077 62.8384 938 64.2857 78.5714 78.5714 47.0378 54.0095 63.1385 939 21.4286 64.2857 35.7143 17.5444 28.8018 15.3128 940 21.4286 78.5714 78.5714 33.4353 46.9960 62.5011 941 21.4286 92.8571 78.5714 42.8263 65.7753 65.6314 942 35.7143 92.8571 78.5714 45.5642 67.1870 65.7597 943 50.0000 92.8571 78.5714 50.0251 69.4870 65.9687 944 64.2857 92.8571 78.5714 56.4288 72.7888 66.2688 945 78.5714 92.8571 78.5714 64.9630 77.1891 66.6687 946 7.14286 7.14286 78.5714 11.8320 5.70927 55.6693 947 7.14286 7.14286 92.8571 16.5721 7.60504 80.6364 948 21.4286 7.14286 92.8571 17.8618 8.26998 80.6968 949 35.7143 7.14286 92.8571 20.5997 9.68165 80.8251 950 50.0000 7.14286 92.8571 25.0605 11.9817 81.0341 951 64.2857 7.14286 92.8571 31.4643 15.2835 81.3342 952 78.5714 7.14286 92.8571 39.9985 19.6837 81.7341 953 92.8571 7.14286 92.8571 50.8284 25.2677 82.2416 954 100.000 0.00000 100.000 59.7013 29.1995 97.0422 955 85.7143 28.5714 85.7143 44.7489 25.5864 69.5173 956 35.7143 21.4286 92.8571 21.7180 11.9179 81.1979 957 50.0000 21.4286 92.8571 26.1788 14.2179 81.4069 958 64.2857 21.4286 92.8571 32.5826 17.5197 81.7070 959 78.5714 21.4286 92.8571 41.1167 21.9200 82.1069 960 92.8571 21.4286 92.8571 51.9467 27.5039 82.6143 961 21.4286 21.4286 92.8571 18.9801 10.5062 81.0696 962 21.4286 35.7143 92.8571 21.3542 15.2538 81.8609 963 35.7143 35.7143 92.8571 24.0921 16.6655 81.9892 964 50.0000 35.7143 92.8571 28.5529 18.9655 82.1983 965 64.2857 35.7143 92.8571 34.9567 22.2673 82.4983 966 78.5714 35.7143 92.8571 43.4909 26.6675 82.8982 967 21.4286 35.7143 64.2857 12.8786 11.8641 37.2194 968 21.4286 50.0000 78.5714 20.4822 21.0933 58.1833 969 21.4286 50.0000 92.8571 25.2223 22.9890 83.1503 970 35.7143 50.0000 92.8571 27.9602 24.4007 83.2786 971 50.0000 50.0000 92.8571 32.4211 26.7007 83.4877 972 64.2857 50.0000 92.8571 38.8249 30.0025 83.7877 973 78.5714 50.0000 92.8571 47.3590 34.4028 84.1876 974 92.8571 50.0000 92.8571 58.1889 39.9867 84.6951 975 7.14286 64.2857 7.14286 14.4919 27.4318 5.96738 976 21.4286 64.2857 92.8571 30.7753 34.0933 85.0013 977 35.7143 64.2857 92.8571 33.5132 35.5050 85.1296 978 50.0000 64.2857 92.8571 37.9740 37.8050 85.3387 979 64.2857 64.2857 92.8571 44.3778 41.1068 85.6387 980 71.4286 71.4286 100.000 54.5952 51.1897 101.556 981 7.14286 21.4286 92.8571 17.6904 9.84129 81.0091 982 7.14286 78.5714 92.8571 36.8859 48.2268 87.4077 983 21.4286 78.5714 92.8571 38.1755 48.8918 87.4681 984 35.7143 78.5714 92.8571 40.9134 50.3034 87.5964 985 50.0000 78.5714 92.8571 45.3743 52.6035 87.8054 986 64.2857 78.5714 92.8571 51.7780 55.9053 88.1055 987 7.14286 21.4286 50.0000 6.41201 5.33064 21.6045 988 7.14286 21.4286 64.2857 9.21490 6.45162 36.3676 989 7.14286 21.4286 78.5714 12.9502 7.94552 56.0421 990 21.4286 92.8571 92.8571 47.5665 67.6711 90.5985 991 35.7143 92.8571 92.8571 50.3044 69.0828 90.7268 992 50.0000 92.8571 92.8571 54.7652 71.3828 90.9358 993 64.2857 92.8571 92.8571 61.1690 74.6846 91.2359 994 78.5714 92.8571 92.8571 69.7032 79.0848 91.6357 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s3-g3-m0-f0.ti1000644 000765 000000 00000005013 12261120515 021173 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" CREATED "Mon Feb 22 23:41:53 2010" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "3" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 12 BEGIN_DATA 1 100.00 100.00 100.00 95.106 100.00 108.84 2 100.00 100.00 100.00 95.106 100.00 108.84 3 100.00 100.00 100.00 95.106 100.00 108.84 4 100.00 100.00 100.00 95.106 100.00 108.84 5 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 6 50.000 0.0000 0.0000 9.7393 5.5060 1.4095 7 100.00 0.0000 0.0000 41.830 22.052 2.9132 8 0.0000 50.000 0.0000 8.5782 16.154 3.5261 9 0.0000 100.00 0.0000 36.405 71.801 12.802 10 0.0000 0.0000 50.000 4.8252 2.5298 21.147 11 0.0000 0.0000 100.00 18.871 8.1473 95.129 12 50.000 50.000 50.000 21.143 22.190 24.083 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "February 22, 2010" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.00 100.00 100.00 95.106 100.00 108.84 1 0.0000 47.361 100.00 25.613 21.629 97.376 2 100.00 0.0000 79.351 52.426 26.290 58.722 3 0.0000 0.0000 58.997 6.4858 3.1940 29.894 4 100.00 66.659 0.0000 56.059 50.505 7.6561 5 0.0000 35.601 0.0000 4.6856 8.3702 2.2286 6 84.444 0.0000 0.0000 28.843 15.356 2.3047 7 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "February 22, 2010" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.00 100.00 100.00 95.106 100.00 108.84 1 0.0000 100.00 100.00 54.276 78.948 106.93 2 100.00 0.0000 100.00 59.701 29.199 97.042 3 0.0000 0.0000 100.00 18.871 8.1473 95.129 4 100.00 100.00 0.0000 77.235 92.853 14.715 5 0.0000 100.00 0.0000 36.405 71.801 12.802 6 100.00 0.0000 0.0000 41.830 22.052 2.9132 7 0.0000 0.0000 0.0000 1.0000 1.0000 1.0000 8 60.000 60.000 60.000 30.977 32.536 35.353 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s33-g97-m0-f1399-caRGB.ti1000644 000765 000000 00000327532 12261121003 022543 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1200" CREATED "Wed Dec 18 02:24:54 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045794 99.996943 108.895612" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "33" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1399 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 2 38.44110000 49.65030000 52.90960000 15.66370000 18.93960000 26.28990000 3 38.04150000 63.91590000 68.17210000 21.92110000 30.23240000 45.64640000 4 18.61860000 39.35740000 38.55860000 6.131250000 9.733000000 13.16550000 5 55.50600000 50.89300000 40.67970000 22.60610000 23.39180000 16.05320000 6 78.67810000 72.80090000 53.73830000 48.06800000 50.68040000 30.40500000 7 95.51900000 85.80960000 61.01540000 71.74190000 74.22920000 40.93470000 8 40.15880000 67.61000000 30.79390000 17.01130000 31.08780000 10.78540000 9 67.42350000 66.87240000 31.60430000 33.38940000 38.98720000 11.92330000 10 70.46920000 74.62970000 30.40960000 37.83180000 47.28230000 12.19600000 11 40.67470000 30.52490000 46.05150000 12.76080000 10.09510000 18.90660000 12 50.44320000 32.11970000 51.74390000 18.75020000 13.53130000 24.45700000 13 68.99950000 56.48030000 58.22530000 36.51140000 33.29910000 33.37970000 14 15.10070000 15.10070000 15.10070000 1.487190000 1.564660000 1.703900000 15 9.493670000 9.493670000 9.493670000 0.535904000 0.563820000 0.613994000 16 0.000000000 0.000000000 2.941180000 0.008064360 0.003225610 0.042474900 17 8.909850000 8.909850000 8.909850000 0.466089000 0.490368000 0.534006000 18 14.36620000 9.615930000 0.000000000 0.916269000 0.780769000 0.078868000 19 17.12330000 0.000000000 0.000000000 1.189750000 0.613456000 0.055731800 20 19.87090000 10.07130000 0.000000000 1.769540000 1.253760000 0.122688000 21 23.72260000 0.000000000 0.000000000 2.436750000 1.256430000 0.114146000 22 26.11940000 0.000000000 0.000000000 3.011200000 1.552630000 0.141055000 23 28.62600000 0.000000000 0.000000000 3.683510000 1.899280000 0.172548000 24 31.25000000 0.000000000 0.000000000 4.467150000 2.303340000 0.209256000 25 34.00000000 0.000000000 0.000000000 5.377560000 2.772760000 0.251902000 26 36.88520000 0.000000000 0.000000000 6.432500000 3.316710000 0.301319000 27 39.91600000 0.000000000 0.000000000 7.652440000 3.945730000 0.358465000 28 43.10340000 0.000000000 0.000000000 9.061030000 4.672020000 0.424448000 29 46.46020000 0.000000000 0.000000000 10.68570000 5.509740000 0.500554000 30 50.00000000 0.000000000 0.000000000 12.55840000 6.475340000 0.588277000 31 53.73830000 0.000000000 0.000000000 14.71640000 7.588030000 0.689363000 32 57.69230000 0.000000000 0.000000000 17.20330000 8.870320000 0.805858000 33 61.88120000 0.000000000 0.000000000 20.07050000 10.34870000 0.940166000 34 66.32650000 0.000000000 0.000000000 23.37850000 12.05440000 1.095130000 35 71.05260000 0.000000000 0.000000000 27.19930000 14.02440000 1.274100000 36 76.08700000 0.000000000 0.000000000 31.61850000 16.30300000 1.481110000 37 81.46070000 0.000000000 0.000000000 36.73840000 18.94300000 1.720950000 38 81.15360000 0.000000000 26.18830000 37.42290000 19.18160000 6.912450000 39 100.0000000 55.64650000 47.93450000 66.51910000 48.51510000 24.32160000 40 100.0000000 55.20470000 59.95100000 68.80390000 49.16420000 36.78980000 41 100.0000000 67.32030000 64.89090000 72.71380000 58.92010000 43.95660000 42 15.10070000 0.000000000 0.000000000 0.902399000 0.465293000 0.042271300 43 9.493670000 0.000000000 0.000000000 0.325177000 0.167667000 0.015232300 44 0.000000000 1.445090000 0.000000000 0.001665820 0.005632430 0.000634567 45 0.000000000 2.941180000 0.000000000 0.007949990 0.026880300 0.003028420 46 9.405720000 9.840920000 0.000000000 0.431799000 0.547057000 0.058049700 47 0.000000000 15.10070000 0.000000000 0.290306000 0.981578000 0.110588000 48 9.848800000 17.17450000 0.000000000 0.737799000 1.484440000 0.163276000 49 0.000000000 13.15790000 0.000000000 0.214448000 0.725087000 0.081690500 50 0.000000000 17.12330000 0.000000000 0.382749000 1.294140000 0.145802000 51 0.000000000 19.23080000 0.000000000 0.494055000 1.670490000 0.188202000 52 0.000000000 21.42860000 0.000000000 0.626803000 2.119330000 0.238771000 53 0.000000000 23.72260000 0.000000000 0.783917000 2.650560000 0.298620000 54 0.000000000 26.11940000 0.000000000 0.968720000 3.275420000 0.369018000 55 0.000000000 28.62600000 0.000000000 1.185000000 4.006710000 0.451408000 56 0.000000000 31.25000000 0.000000000 1.437100000 4.859110000 0.547442000 57 0.000000000 34.00000000 0.000000000 1.729990000 5.849400000 0.659011000 58 0.000000000 36.88520000 0.000000000 2.069370000 6.996910000 0.788293000 59 0.000000000 39.91600000 0.000000000 2.461830000 8.323890000 0.937794000 60 0.000000000 43.10340000 0.000000000 2.914980000 9.856070000 1.110410000 61 0.000000000 46.46020000 0.000000000 3.437650000 11.62330000 1.309520000 62 0.000000000 50.00000000 0.000000000 4.040110000 13.66030000 1.539010000 63 0.000000000 53.73830000 0.000000000 4.734340000 16.00760000 1.803470000 64 0.000000000 57.69230000 0.000000000 5.534390000 18.71280000 2.108240000 65 0.000000000 61.88120000 0.000000000 6.456770000 21.83150000 2.459600000 66 0.000000000 66.32650000 0.000000000 7.520990000 25.42980000 2.865000000 67 0.000000000 71.05260000 0.000000000 8.750160000 29.58590000 3.333230000 68 0.000000000 76.08700000 0.000000000 10.17180000 34.39280000 3.874790000 69 0.000000000 81.46070000 0.000000000 11.81890000 39.96200000 4.502240000 70 0.000000000 93.37350000 0.000000000 15.95650000 53.95190000 6.078390000 71 0.000000000 100.0000000 0.000000000 18.55340000 62.73240000 7.067620000 72 29.93650000 100.0000000 38.28600000 24.89650000 65.73950000 19.25860000 73 76.65850000 100.0000000 81.79600000 62.79430000 84.14490000 72.29230000 74 0.000000000 15.43690000 13.61360000 0.539158000 1.124060000 1.350900000 75 10.08490000 10.08490000 10.08490000 0.612056000 0.643939000 0.701243000 76 7.763980000 0.000000000 0.000000000 0.208938000 0.107732000 0.009787340 77 0.000000000 9.493670000 0.000000000 0.104611000 0.353709000 0.039849900 78 0.000000000 7.763980000 0.000000000 0.067216500 0.227271000 0.025605000 79 0.000000000 0.000000000 1.445090000 0.001689780 0.000675886 0.008900080 80 0.000000000 0.000000000 6.097560000 0.040079300 0.016031100 0.211097000 81 0.000000000 0.000000000 13.15790000 0.217533000 0.087009700 1.145740000 82 0.000000000 0.000000000 17.12330000 0.388255000 0.155296000 2.044940000 83 0.000000000 0.000000000 19.23080000 0.501163000 0.200457000 2.639620000 84 0.000000000 0.000000000 21.42860000 0.635821000 0.254318000 3.348860000 85 0.000000000 0.000000000 23.72260000 0.795194000 0.318065000 4.188280000 86 0.000000000 0.000000000 26.11940000 0.982656000 0.393047000 5.175640000 87 0.000000000 10.06680000 27.11540000 1.185950000 0.829139000 5.664950000 88 0.000000000 0.000000000 28.62600000 1.202050000 0.480801000 6.331200000 89 0.000000000 0.000000000 34.00000000 1.754880000 0.701922000 9.242920000 90 0.000000000 0.000000000 36.88520000 2.099140000 0.839622000 11.05610000 91 0.000000000 0.000000000 39.91600000 2.497250000 0.998858000 13.15300000 92 0.000000000 0.000000000 43.10340000 2.956920000 1.182720000 15.57400000 93 0.000000000 0.000000000 46.46020000 3.487100000 1.394790000 18.36650000 94 0.000000000 0.000000000 50.00000000 4.098230000 1.639230000 21.58530000 95 0.000000000 0.000000000 53.73830000 4.802450000 1.920900000 25.29440000 96 0.000000000 0.000000000 57.69230000 5.614010000 2.245510000 29.56890000 97 0.000000000 0.000000000 61.88120000 6.549660000 2.619760000 34.49700000 98 0.000000000 0.000000000 66.32650000 7.629190000 3.051550000 40.18290000 99 0.000000000 0.000000000 71.05260000 8.876040000 3.550270000 46.75000000 100 0.000000000 0.000000000 76.08700000 10.31820000 4.127100000 54.34560000 101 0.000000000 0.000000000 81.46070000 11.98900000 4.795400000 63.14580000 102 65.69050000 0.000000000 83.10320000 35.41530000 16.81220000 67.05200000 103 82.59640000 0.000000000 100.0000000 56.69460000 27.05650000 100.9010000 104 0.000000000 8.398380000 11.91600000 0.254810000 0.340089000 0.951735000 105 0.000000000 0.000000000 4.491020000 0.020456800 0.008182400 0.107746000 106 4.491020000 0.000000000 0.000000000 0.062686900 0.032322500 0.002936460 107 0.000000000 0.000000000 7.763980000 0.068183500 0.027272300 0.359122000 108 11.29030000 0.000000000 0.000000000 0.476058000 0.245464000 0.022300100 109 6.097560000 0.000000000 0.000000000 0.122817000 0.063326500 0.005753140 110 0.000000000 4.491020000 0.000000000 0.020166700 0.068187300 0.007682180 111 0.476190000 0.476190000 0.476190000 0.000742788 0.000781481 0.000851025 112 0.957854000 0.957854000 0.957854000 0.003454370 0.003634320 0.003957730 113 1.445090000 1.445090000 1.445090000 0.008533690 0.008978230 0.009777200 114 1.937980000 1.937980000 1.937980000 0.016272000 0.017119700 0.018643100 115 0.000000000 10.41390000 9.712110000 0.239777000 0.478146000 0.636427000 116 2.436650000 2.436650000 2.436650000 0.026923800 0.028326400 0.030847100 117 2.941180000 2.941180000 2.941180000 0.040726400 0.042847900 0.046660900 118 0.000000000 0.000000000 9.493670000 0.106116000 0.042444700 0.558912000 119 5.555560000 5.555560000 5.555560000 0.164935000 0.173527000 0.188969000 120 13.15790000 0.000000000 0.000000000 0.666598000 0.343709000 0.031225600 121 6.097560000 6.097560000 6.097560000 0.202407000 0.212951000 0.231901000 122 3.451680000 3.451680000 3.451680000 0.057908400 0.060924900 0.066346600 123 3.968250000 3.968250000 3.968250000 0.078694900 0.082794300 0.090162100 124 4.491020000 4.491020000 4.491020000 0.103310000 0.108692000 0.118365000 125 5.020080000 5.020080000 5.020080000 0.131981000 0.138856000 0.151213000 126 0.000000000 6.097560000 0.000000000 0.039510800 0.133593000 0.015051000 127 2.941180000 0.000000000 0.000000000 0.024712000 0.012742000 0.001157590 128 6.646220000 6.646220000 6.646220000 0.244634000 0.257377000 0.280281000 129 7.201650000 7.201650000 7.201650000 0.291861000 0.307064000 0.334390000 130 7.763980000 7.763980000 7.763980000 0.344338000 0.362275000 0.394514000 131 13.15790000 13.15790000 13.15790000 1.098580000 1.155810000 1.258660000 132 12.52720000 12.52720000 12.52720000 0.986096000 1.037460000 1.129790000 133 13.79690000 13.79690000 13.79690000 1.219340000 1.282860000 1.397020000 134 8.333330000 8.333330000 8.333330000 0.402325000 0.423283000 0.460951000 135 14.44440000 14.44440000 14.44440000 1.348750000 1.419010000 1.545290000 136 12.75960000 17.44550000 15.71360000 1.343210000 1.798110000 1.873960000 137 15.76580000 15.76580000 15.76580000 1.635060000 1.720230000 1.873310000 138 16.43990000 16.43990000 16.43990000 1.792770000 1.886160000 2.054010000 139 17.12330000 17.12330000 17.12330000 1.960760000 2.062900000 2.246470000 140 17.81610000 17.81610000 17.81610000 2.139470000 2.250920000 2.451220000 141 18.51850000 18.51850000 18.51850000 2.329370000 2.450710000 2.668800000 142 19.23080000 19.23080000 19.23080000 2.530960000 2.662800000 2.899760000 143 19.95310000 19.95310000 19.95310000 2.744730000 2.887710000 3.144690000 144 20.68560000 20.68560000 20.68560000 2.971230000 3.126010000 3.404190000 145 21.42860000 21.42860000 21.42860000 3.211000000 3.378270000 3.678900000 146 22.18230000 22.18230000 22.18230000 3.464630000 3.645110000 3.969480000 147 22.94690000 22.94690000 22.94690000 3.732700000 3.927150000 4.276620000 148 24.50980000 24.50980000 24.50980000 4.314770000 4.539540000 4.943510000 149 25.30860000 25.30860000 25.30860000 4.630100000 4.871290000 5.304790000 150 26.94240000 26.94240000 26.94240000 5.312950000 5.589720000 6.087140000 151 28.62600000 28.62600000 28.62600000 6.070570000 6.386800000 6.955150000 152 30.36180000 30.36180000 30.36180000 6.909660000 7.269600000 7.916510000 153 32.15220000 32.15220000 32.15220000 7.837590000 8.245860000 8.979660000 154 33.06880000 33.06880000 33.06880000 8.337360000 8.771670000 9.552250000 155 34.00000000 34.00000000 34.00000000 8.862420000 9.324090000 10.15380000 156 34.94620000 34.94620000 34.94620000 9.413920000 9.904310000 10.78570000 157 35.90790000 35.90790000 35.90790000 9.993030000 10.51360000 11.44920000 158 36.88520000 36.88520000 36.88520000 10.60100000 11.15320000 12.14580000 159 37.87880000 37.87880000 37.87880000 11.23920000 11.82460000 12.87690000 160 38.88890000 38.88890000 38.88890000 11.90880000 12.52920000 13.64420000 161 39.91600000 39.91600000 39.91600000 12.61150000 13.26850000 14.44920000 162 40.96050000 40.96050000 40.96050000 13.34870000 14.04400000 15.29380000 163 42.02280000 42.02280000 42.02280000 14.12190000 14.85760000 16.17970000 164 43.10340000 43.10340000 43.10340000 14.93290000 15.71080000 17.10890000 165 44.20290000 44.20290000 44.20290000 15.78340000 16.60560000 18.08340000 166 45.32160000 45.32160000 45.32160000 16.67530000 17.54400000 19.10520000 167 46.46020000 46.46020000 46.46020000 17.61050000 18.52780000 20.17660000 168 47.61900000 47.61900000 47.61900000 18.59100000 19.55940000 21.30000000 169 48.79880000 48.79880000 48.79880000 19.61900000 20.64100000 22.47780000 170 50.00000000 50.00000000 50.00000000 20.69670000 21.77490000 23.71260000 171 51.22320000 51.22320000 51.22320000 21.82670000 22.96370000 25.00720000 172 52.46910000 52.46910000 52.46910000 23.01130000 24.21000000 26.36440000 173 53.73830000 53.73830000 53.73830000 24.25320000 25.51660000 27.78730000 174 55.03140000 55.03140000 55.03140000 25.55520000 26.88640000 29.27910000 175 56.34920000 56.34920000 56.34920000 26.92030000 28.32270000 30.84310000 176 57.69230000 57.69230000 57.69230000 28.35170000 29.82860000 32.48300000 177 59.06150000 59.06150000 59.06150000 29.85250000 31.40760000 34.20260000 178 60.45750000 60.45750000 60.45750000 31.42640000 33.06340000 36.00570000 179 61.88120000 61.88120000 61.88120000 33.07690000 34.79990000 37.89680000 180 63.33330000 63.33330000 63.33330000 34.80800000 36.62120000 39.88010000 181 64.81480000 64.81480000 64.81480000 36.62380000 38.53160000 41.96050000 182 66.32650000 66.32650000 66.32650000 38.52870000 40.53570000 44.14300000 183 67.86940000 67.86940000 67.86940000 40.52730000 42.63840000 46.43280000 184 69.44440000 69.44440000 69.44440000 42.62450000 44.84490000 48.83560000 185 71.05260000 71.05260000 71.05260000 44.82550000 47.16060000 51.35740000 186 72.69500000 72.69500000 72.69500000 47.13590000 49.59130000 54.00440000 187 74.37280000 74.37280000 74.37280000 49.56140000 52.14320000 56.78340000 188 76.08700000 76.08700000 76.08700000 52.10840000 54.82290000 59.70150000 189 77.83880000 77.83880000 77.83880000 54.78350000 57.63730000 62.76640000 190 79.62960000 79.62960000 79.62960000 57.59360000 60.59380000 65.98600000 191 81.46070000 81.46070000 81.46070000 60.54640000 63.70040000 69.36900000 192 83.33330000 83.33330000 83.33330000 63.64970000 66.96530000 72.92450000 193 85.24900000 85.24900000 85.24900000 66.91200000 70.39760000 76.66220000 194 87.20930000 87.20930000 87.20930000 70.34250000 74.00680000 80.59260000 195 89.21570000 89.21570000 89.21570000 73.95070000 77.80300000 84.72660000 196 91.26980000 91.26980000 91.26980000 77.74710000 81.79710000 89.07610000 197 93.37350000 93.37350000 93.37350000 81.74250000 86.00070000 93.65380000 198 26.11940000 26.11940000 26.11940000 4.962580000 5.221090000 5.685710000 199 23.72260000 23.72260000 23.72260000 4.015870000 4.225060000 4.601050000 200 21.80310000 27.20380000 37.36600000 5.243210000 5.489450000 11.87390000 201 20.29490000 40.27740000 60.78380000 10.53690000 11.90060000 34.20350000 202 36.87220000 43.26420000 100.0000000 28.18680000 20.77900000 100.5470000 203 53.17240000 48.53910000 100.0000000 36.98300000 27.73910000 101.2420000 204 53.34910000 64.63110000 100.0000000 40.40800000 39.01760000 102.5110000 205 54.28000000 65.28130000 0.000000000 22.30740000 32.31410000 3.471380000 206 79.51500000 85.98560000 0.000000000 48.14720000 62.96920000 6.702460000 207 100.0000000 100.0000000 0.000000000 76.22550000 92.46910000 9.769170000 208 100.0000000 100.0000000 30.63160000 77.62060000 93.02710000 17.11710000 209 23.38220000 21.36730000 100.0000000 21.80370000 10.85100000 99.47430000 210 22.05190000 35.50040000 100.0000000 22.79790000 15.03000000 99.94830000 211 28.41950000 36.46960000 67.78980000 13.64800000 11.89550000 43.09700000 212 36.96450000 36.23730000 68.98130000 16.77010000 13.38850000 44.86590000 213 10.58390000 0.000000000 18.25920000 0.860157000 0.391806000 2.374530000 214 15.68320000 0.000000000 14.81040000 1.262910000 0.618549000 1.532170000 215 10.68380000 10.68380000 10.68380000 0.694840000 0.731036000 0.796090000 216 11.29030000 11.29030000 11.29030000 0.784561000 0.825431000 0.898886000 217 39.91810000 14.83580000 9.403490000 8.036480000 4.931870000 1.012180000 218 100.0000000 36.44980000 0.000000000 59.68810000 36.55320000 3.469520000 219 100.0000000 47.82620000 0.000000000 61.33590000 42.12490000 4.097240000 220 100.0000000 57.73280000 0.000000000 63.21500000 48.47840000 4.813040000 221 100.0000000 74.96980000 38.14920000 69.77890000 63.93290000 18.35880000 222 0.000000000 17.15860000 29.05650000 1.626660000 1.796870000 6.688960000 223 0.000000000 16.38880000 36.68660000 2.421920000 2.004890000 11.05800000 224 0.000000000 13.59660000 52.91440000 4.872500000 2.636050000 24.53720000 225 22.32710000 0.000000000 78.65690000 13.23280000 5.539490000 58.56440000 226 26.17850000 0.000000000 100.0000000 21.84650000 9.088190000 99.26820000 227 47.23610000 0.000000000 100.0000000 29.90240000 13.24200000 99.64560000 228 65.57420000 0.000000000 100.0000000 41.61960000 19.28350000 100.1940000 229 72.45490000 38.64610000 100.0000000 49.50700000 29.92080000 101.3300000 230 75.97890000 67.46750000 100.0000000 58.14850000 50.18180000 103.5770000 231 90.67560000 100.0000000 100.0000000 83.87640000 94.23780000 108.3720000 232 27.61060000 30.80350000 0.000000000 4.794600000 6.461990000 0.689759000 233 33.45700000 41.31720000 0.000000000 7.846380000 11.65640000 1.254860000 234 56.35500000 40.59110000 33.76680000 20.62130000 17.75240000 10.84240000 235 57.33030000 52.68400000 73.28070000 30.99890000 27.87310000 52.55610000 236 40.99460000 48.10190000 62.55840000 18.53340000 19.41300000 37.12630000 237 100.0000000 61.20410000 74.26990000 73.75850000 54.95980000 56.63460000 238 100.0000000 67.63710000 88.53070000 79.92090000 62.04330000 81.52180000 239 66.83480000 0.000000000 15.26820000 24.07600000 12.37910000 2.702800000 240 85.37920000 0.000000000 47.99750000 44.48340000 22.50330000 21.63800000 241 100.0000000 0.000000000 51.46590000 62.03920000 31.48350000 25.70320000 242 100.0000000 84.82790000 51.02950000 74.87820000 75.13610000 30.19800000 243 100.0000000 100.0000000 52.98630000 80.88140000 94.33140000 34.29170000 244 0.000000000 0.000000000 15.10070000 0.294483000 0.117788000 1.551040000 245 0.000000000 0.000000000 11.29030000 0.155354000 0.062138900 0.818245000 246 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 247 23.79750000 100.0000000 0.000000000 21.00710000 63.99760000 7.182560000 248 52.20660000 100.0000000 0.000000000 32.36300000 69.85290000 7.714510000 249 65.00770000 100.0000000 0.000000000 40.92180000 74.26590000 8.115430000 250 34.52680000 20.97660000 0.000000000 6.160580000 4.890380000 0.488400000 251 56.49810000 17.86940000 0.000000000 16.85020000 9.892930000 0.929768000 252 69.46750000 25.46180000 0.000000000 26.79850000 16.44230000 1.561320000 253 77.27730000 64.01900000 21.05890000 40.28600000 40.63860000 7.406020000 254 85.32810000 100.0000000 72.10080000 68.40380000 87.37610000 57.25360000 255 95.32040000 100.0000000 93.61620000 86.73490000 96.00560000 95.23910000 256 0.000000000 21.43490000 20.76390000 1.220460000 2.357990000 3.363580000 257 0.000000000 23.79610000 31.22470000 2.244450000 3.250710000 7.965090000 258 0.000000000 39.11890000 37.72510000 4.560710000 8.844970000 12.51450000 259 62.33480000 67.34840000 57.57210000 33.76190000 39.05090000 33.35200000 260 65.51870000 68.10100000 87.47320000 44.74910000 44.29230000 77.95400000 261 66.61340000 72.83190000 100.0000000 51.66110000 50.93690000 103.7520000 262 71.57690000 90.45740000 100.0000000 61.34400000 72.09650000 106.0900000 263 77.94590000 100.0000000 100.0000000 70.71600000 87.45210000 107.7560000 264 0.000000000 16.92080000 20.43940000 0.945919000 1.489940000 3.160300000 265 19.89670000 20.58140000 32.70230000 3.839660000 3.437190000 8.780840000 266 57.13830000 24.24500000 35.75940000 19.62530000 12.24900000 11.42980000 267 69.65940000 100.0000000 37.81500000 46.81080000 77.04600000 19.96570000 268 67.67060000 100.0000000 56.68950000 48.38810000 77.49110000 36.66250000 269 76.81740000 100.0000000 65.22510000 58.19660000 82.32280000 47.31010000 270 83.17120000 23.72000000 0.000000000 39.24010000 22.47870000 2.099970000 271 100.0000000 22.96140000 0.000000000 58.40170000 32.20380000 2.979500000 272 100.0000000 24.95170000 33.17910000 60.21110000 33.36390000 11.79450000 273 100.0000000 29.39490000 100.0000000 77.74850000 41.51180000 102.3060000 274 0.000000000 0.000000000 31.25000000 1.457780000 0.583088000 7.678110000 275 0.000000000 15.62090000 81.86160000 12.43190000 5.904950000 63.95050000 276 0.000000000 17.83200000 100.0000000 19.23880000 8.942700000 99.28590000 277 0.000000000 40.55690000 100.0000000 21.36990000 16.14850000 100.0980000 278 0.000000000 49.91610000 100.0000000 22.84550000 21.13780000 100.6600000 279 37.79270000 60.27500000 100.0000000 31.69990000 31.63130000 101.7660000 280 16.06920000 0.000000000 42.27530000 3.868010000 1.666770000 14.97200000 281 27.02660000 0.000000000 47.87440000 6.970830000 3.163570000 19.77060000 282 49.00850000 0.000000000 72.05870000 21.17200000 9.858060000 48.78110000 283 52.77860000 64.71990000 71.27620000 30.20830000 34.96280000 50.45130000 284 0.000000000 100.0000000 33.66650000 20.27060000 63.41930000 16.11230000 285 0.000000000 100.0000000 44.45850000 21.71860000 63.99840000 23.73880000 286 0.000000000 100.0000000 68.66320000 26.78620000 66.02540000 50.42970000 287 12.45850000 26.98530000 0.000000000 1.631900000 3.823780000 0.424149000 288 15.79220000 38.81660000 0.000000000 3.310960000 8.341440000 0.928571000 289 27.99570000 48.75120000 0.000000000 7.329030000 14.72980000 1.620050000 290 42.26520000 100.0000000 70.48160000 35.95130000 70.69480000 53.40180000 291 60.21430000 100.0000000 86.37880000 51.09270000 77.93320000 79.78770000 292 0.000000000 0.000000000 87.20930000 13.92870000 5.571270000 73.36250000 293 0.000000000 0.000000000 93.37350000 16.18610000 6.474180000 85.25200000 294 0.000000000 0.000000000 100.0000000 18.82030000 7.527820000 99.12640000 295 23.64340000 65.22590000 100.0000000 28.48850000 33.28600000 102.0010000 296 100.0000000 65.86470000 100.0000000 83.89870000 62.30660000 104.6490000 297 100.0000000 45.53450000 72.70180000 70.29630000 44.59080000 53.12400000 298 100.0000000 94.12420000 77.38370000 84.62090000 88.93050000 65.29130000 299 100.0000000 100.0000000 88.60170000 90.64800000 98.23790000 85.73240000 300 13.41730000 0.000000000 28.34470000 1.872080000 0.829265000 6.227820000 301 24.71970000 0.000000000 33.47740000 4.363790000 2.053920000 9.058310000 302 36.90790000 0.000000000 37.88330000 8.667260000 4.211580000 12.02650000 303 48.76350000 0.000000000 59.54010000 17.90260000 8.535100000 32.24850000 304 0.000000000 25.55580000 15.58680000 1.239080000 3.248290000 2.014710000 305 0.000000000 44.40630000 66.44800000 10.77220000 13.58700000 41.53050000 306 0.000000000 56.71450000 73.48550000 14.88840000 21.84550000 52.37330000 307 47.27870000 69.72190000 100.0000000 38.31830000 41.63430000 102.8440000 308 58.99410000 83.46740000 100.0000000 49.35760000 59.00330000 104.7230000 309 0.000000000 36.01070000 26.25690000 2.957070000 7.034860000 5.983510000 310 0.000000000 43.43460000 25.62320000 3.906520000 10.40020000 6.091120000 311 0.000000000 56.44490000 32.68020000 6.883180000 18.47790000 10.48150000 312 0.000000000 68.26570000 100.0000000 26.83340000 34.62140000 102.1790000 313 0.000000000 78.04180000 100.0000000 29.57570000 43.89390000 103.2240000 314 0.000000000 87.95200000 100.0000000 32.81000000 54.82940000 104.4560000 315 32.62830000 65.03740000 0.000000000 12.11520000 26.88820000 2.974060000 316 33.76490000 78.84990000 0.000000000 16.29800000 39.93010000 4.439080000 317 39.39250000 100.0000000 0.000000000 25.98690000 66.56520000 7.415830000 318 64.43560000 100.0000000 100.0000000 59.31140000 81.57170000 107.2220000 319 24.46350000 0.000000000 17.58890000 3.019110000 1.509080000 2.291340000 320 24.55430000 18.00190000 53.07050000 7.728030000 4.668830000 24.89420000 321 74.20520000 19.05140000 65.31510000 37.78380000 20.01600000 40.43370000 322 73.32630000 34.50420000 67.12560000 38.76990000 24.20520000 43.30140000 323 27.77780000 27.77780000 27.77780000 5.682010000 5.978000000 6.509980000 324 29.48720000 29.48720000 29.48720000 6.479480000 6.817010000 7.423660000 325 44.79010000 100.0000000 86.59320000 42.12580000 73.30100000 79.75700000 326 49.61920000 100.0000000 100.0000000 49.72270000 76.62760000 106.7730000 327 0.000000000 26.64910000 41.00860000 3.662500000 4.483270000 14.34340000 328 0.000000000 35.16980000 47.58050000 5.538310000 7.770990000 20.06460000 329 0.000000000 66.86880000 60.60150000 13.91240000 28.39130000 35.86430000 330 0.000000000 79.53420000 64.38750000 18.36020000 40.77180000 41.91590000 331 25.45300000 100.0000000 64.32650000 28.53060000 67.05210000 44.76710000 332 27.33870000 100.0000000 77.47160000 32.61810000 68.74300000 63.76800000 333 25.96950000 100.0000000 89.42010000 36.24380000 70.15210000 84.72180000 334 45.04210000 34.18230000 66.40700000 19.38150000 14.12490000 41.42450000 335 68.36230000 44.59420000 65.16060000 35.46430000 26.43920000 41.01280000 336 67.60960000 62.12570000 68.42070000 39.06660000 37.86230000 46.64930000 337 85.54960000 66.21670000 78.06340000 59.32690000 50.80110000 62.27000000 338 88.78880000 73.71820000 100.0000000 72.70980000 62.50370000 104.8210000 339 100.0000000 80.81450000 100.0000000 88.10610000 76.53280000 106.2520000 340 27.41370000 19.20640000 26.52660000 4.858480000 3.799360000 5.699330000 341 100.0000000 24.75290000 45.58750000 61.87750000 33.98490000 20.64580000 342 100.0000000 25.10350000 58.96770000 64.45040000 35.09460000 34.06540000 343 100.0000000 26.01620000 72.43530000 67.89270000 36.68770000 51.84150000 344 44.82410000 0.000000000 35.60320000 11.81760000 5.868790000 10.69120000 345 70.81310000 0.000000000 41.09720000 29.66070000 14.98570000 15.28880000 346 100.0000000 0.000000000 63.15830000 64.52270000 32.47690000 38.78370000 347 100.0000000 41.36540000 86.03160000 73.85320000 44.14700000 74.91710000 348 100.0000000 49.41670000 100.0000000 80.42960000 50.57690000 103.3280000 349 31.77230000 15.15620000 30.57700000 6.315290000 3.934210000 7.647630000 350 36.35540000 25.61630000 33.18080000 8.822430000 7.016360000 9.405670000 351 45.59230000 69.01460000 51.19590000 22.77620000 34.76420000 26.34390000 352 45.30960000 77.76700000 62.24760000 27.41990000 43.95310000 39.48700000 353 62.88590000 78.65630000 100.0000000 50.55700000 55.24840000 104.2690000 354 24.85890000 28.58120000 43.95520000 6.968720000 6.620270000 16.83530000 355 30.96910000 35.82430000 44.76600000 9.533600000 10.10540000 17.87020000 356 31.81360000 79.65150000 62.27910000 22.53830000 43.08870000 39.48970000 357 30.68170000 100.0000000 100.0000000 41.66420000 72.47240000 106.3950000 358 0.000000000 38.27890000 68.69510000 10.48640000 10.88790000 44.26170000 359 0.000000000 49.02410000 82.99520000 16.36000000 18.07710000 67.26520000 360 42.09730000 75.22590000 100.0000000 37.34310000 45.50590000 103.3080000 361 41.23550000 82.87750000 100.0000000 39.31590000 53.27260000 104.1880000 362 77.28320000 85.26420000 100.0000000 64.60900000 68.58060000 105.6370000 363 40.93030000 18.87620000 100.0000000 27.38120000 13.30090000 99.68590000 364 56.89740000 16.59980000 100.0000000 35.86410000 17.34030000 100.0440000 365 72.96970000 21.85400000 100.0000000 48.31420000 24.61090000 100.7270000 366 63.09630000 21.89040000 82.81210000 34.03510000 17.99400000 66.70420000 367 47.18950000 30.53710000 78.99670000 23.63000000 14.80260000 60.05970000 368 61.60440000 43.84640000 100.0000000 41.72050000 28.00860000 101.2100000 369 29.75010000 63.95370000 46.63200000 14.46660000 26.94520000 21.34850000 370 41.12710000 100.0000000 54.27700000 31.63470000 68.90970000 33.30580000 371 55.94440000 100.0000000 60.09870000 40.77310000 73.47910000 40.17000000 372 55.80960000 100.0000000 75.65100000 44.73480000 75.05380000 61.48000000 373 27.64490000 29.95400000 22.67800000 5.441080000 6.474050000 4.451910000 374 29.03150000 41.67990000 23.14610000 7.260030000 11.41460000 5.177030000 375 36.40600000 48.13810000 32.46570000 11.55220000 16.42340000 10.05890000 376 58.08950000 79.05140000 60.57970000 34.77920000 48.91400000 37.95410000 377 59.86090000 82.63440000 70.24940000 39.51110000 54.32200000 51.11570000 378 13.74850000 24.36630000 11.09910000 1.715260000 3.249720000 1.139200000 379 16.97940000 23.48840000 0.000000000 1.934870000 3.195520000 0.346881000 380 42.47900000 63.59790000 0.000000000 15.63210000 27.71010000 3.023210000 381 46.79790000 86.78630000 0.000000000 24.44240000 51.53200000 5.683630000 382 60.37500000 87.69260000 0.000000000 32.91090000 56.79820000 6.185210000 383 76.21590000 100.0000000 0.000000000 50.28980000 79.09620000 8.554250000 384 87.18200000 100.0000000 0.000000000 61.20660000 84.72510000 9.065630000 385 88.72500000 100.0000000 33.17250000 64.54670000 86.25510000 17.89960000 386 0.000000000 87.20930000 0.000000000 13.73120000 46.42760000 5.230670000 387 0.000000000 86.26670000 60.21370000 19.57470000 47.79820000 37.59270000 388 100.0000000 86.68030000 80.23020000 82.81510000 80.18480000 68.92990000 389 19.23080000 0.000000000 0.000000000 1.535740000 0.791854000 0.071939000 390 21.42860000 0.000000000 0.000000000 1.948380000 1.004620000 0.091268400 391 28.14890000 0.000000000 12.54390000 3.745690000 1.908700000 1.197740000 392 38.55510000 0.000000000 22.79920000 7.819070000 3.947390000 4.170220000 393 46.50750000 48.83230000 22.32020000 15.24060000 18.76880000 5.625720000 394 55.65750000 50.71170000 25.23400000 20.97560000 22.65270000 7.129900000 395 65.63010000 55.28800000 32.35840000 29.45580000 29.44770000 11.27960000 396 75.65670000 55.70880000 33.22060000 38.01870000 34.09500000 12.19820000 397 77.89180000 63.03970000 51.18170000 44.33130000 41.63170000 26.84470000 398 22.23190000 16.02600000 0.000000000 2.443500000 2.208050000 0.225004000 399 21.13880000 21.01460000 0.000000000 2.491390000 3.005330000 0.317321000 400 22.88640000 37.67970000 25.26620000 5.333950000 8.859080000 5.742700000 401 22.46200000 52.25900000 24.94170000 7.501310000 16.52390000 6.473550000 402 21.79440000 52.10820000 48.92850000 10.35410000 17.56480000 22.36110000 403 30.13910000 54.93710000 73.14670000 18.55660000 22.71510000 51.92020000 404 0.000000000 47.20740000 36.86800000 5.657390000 12.87710000 12.40110000 405 0.000000000 46.22960000 59.95820000 9.510620000 13.94090000 33.47860000 406 0.000000000 57.14810000 63.48620000 12.34930000 21.09830000 38.56020000 407 0.000000000 70.37510000 72.19250000 17.75990000 32.64570000 51.67900000 408 0.000000000 70.44100000 82.79370000 21.01010000 33.99830000 68.71120000 409 29.84710000 90.19130000 90.13250000 33.79910000 58.06300000 84.70060000 410 87.20930000 0.000000000 0.000000000 42.68250000 22.00790000 1.999390000 411 93.37350000 0.000000000 0.000000000 49.59990000 25.57460000 2.323420000 412 100.0000000 0.000000000 0.000000000 57.67210000 29.73670000 2.701550000 413 100.0000000 0.000000000 18.36410000 58.12490000 29.91790000 5.086610000 414 100.0000000 0.000000000 29.24230000 58.93180000 30.24060000 9.336420000 415 100.0000000 0.000000000 40.06450000 60.18980000 30.74380000 15.96240000 416 100.0000000 67.14300000 40.54250000 67.98240000 56.89380000 19.25600000 417 100.0000000 76.77170000 87.25720000 81.99190000 70.39180000 80.10470000 418 100.0000000 91.85640000 100.0000000 91.88430000 89.30740000 107.6910000 419 97.73660000 97.73660000 97.73660000 90.37890000 95.08690000 103.5490000 420 95.52850000 95.52850000 95.52850000 85.94890000 90.42620000 98.47320000 421 0.000000000 56.08040000 18.68270000 5.670300000 17.77030000 4.457850000 422 0.000000000 82.08740000 32.36940000 13.59490000 41.27130000 12.87470000 423 0.000000000 84.28520000 45.78470000 16.11560000 44.42340000 22.63710000 424 0.000000000 100.0000000 89.62900000 33.34620000 68.64930000 84.98130000 425 0.000000000 100.0000000 100.0000000 37.37370000 70.26020000 106.1940000 426 33.99390000 20.47810000 23.93330000 6.753520000 5.014060000 4.738400000 427 33.09140000 23.70550000 21.85280000 6.513080000 5.524290000 4.031890000 428 100.0000000 24.37260000 20.67740000 59.09180000 32.78480000 6.114570000 429 100.0000000 54.45160000 20.23160000 63.10600000 46.43950000 7.509280000 430 100.0000000 82.99220000 36.16400000 71.99510000 72.17360000 17.97830000 431 100.0000000 92.69100000 41.28740000 76.06310000 83.90120000 22.85000000 432 41.75600000 30.59000000 0.000000000 9.820940000 8.993110000 0.918150000 433 40.99440000 38.18550000 0.000000000 10.34770000 11.73480000 1.230810000 434 54.40200000 45.34980000 0.000000000 18.37860000 18.81680000 1.949900000 435 57.44270000 55.61120000 0.000000000 22.14480000 26.04640000 2.742810000 436 63.30680000 76.56960000 32.01530000 32.95310000 46.36950000 13.01520000 437 43.33650000 82.03560000 25.48720000 22.10340000 45.68510000 9.906060000 438 47.22160000 100.0000000 41.85390000 32.39970000 69.55130000 22.18470000 439 91.55220000 100.0000000 46.66450000 69.57140000 88.63100000 27.83720000 440 0.000000000 11.29030000 0.000000000 0.153150000 0.517828000 0.058340100 441 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 442 11.90480000 11.90480000 11.90480000 0.881537000 0.927458000 1.009990000 443 9.829010000 19.14960000 16.00210000 1.174990000 1.969800000 1.964870000 444 16.00620000 29.51710000 30.21380000 3.646940000 5.356430000 7.660250000 445 31.25000000 31.25000000 31.25000000 7.362030000 7.745540000 8.434810000 446 100.0000000 42.62970000 33.85300000 62.25530000 40.05140000 12.94050000 447 66.59390000 36.28990000 0.000000000 25.58290000 18.91250000 1.865440000 448 83.71440000 54.71010000 0.000000000 43.93550000 36.76590000 3.703370000 449 83.50890000 66.16910000 0.000000000 46.28250000 45.30360000 4.667620000 450 100.0000000 78.44240000 0.000000000 68.54930000 66.51460000 6.845050000 451 100.0000000 89.10560000 0.000000000 72.06840000 78.41350000 8.185610000 452 43.68510000 30.38900000 20.05040000 11.23290000 9.601070000 3.845330000 453 43.00600000 41.84410000 25.80950000 12.70420000 14.26550000 6.504190000 454 0.000000000 19.93190000 51.78880000 4.962150000 3.578340000 23.52380000 455 0.000000000 24.56020000 69.11250000 9.197820000 6.201290000 44.31090000 456 0.000000000 30.35610000 100.0000000 20.16860000 12.08650000 99.64000000 457 83.92980000 49.09560000 100.0000000 61.93340000 40.87930000 102.4430000 458 50.05060000 0.000000000 21.41810000 13.22150000 6.743810000 3.934860000 459 69.42450000 0.000000000 60.18550000 32.00890000 15.79190000 33.66300000 460 100.0000000 0.000000000 75.19720000 67.72670000 33.75840000 55.65930000 461 100.0000000 0.000000000 88.01860000 71.88670000 35.42230000 77.56970000 462 100.0000000 0.000000000 100.0000000 76.49240000 37.26460000 101.8280000 463 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 464 63.26280000 77.60250000 69.84900000 40.24060000 50.20030000 50.05950000 465 100.0000000 100.0000000 72.48350000 85.49940000 96.17850000 58.61470000 466 60.96960000 29.20170000 20.78690000 21.25870000 14.44030000 4.513850000 467 79.58040000 34.67360000 45.39390000 40.01910000 25.42740000 19.77520000 468 58.03920000 25.53630000 50.74110000 22.58640000 13.79790000 23.46290000 469 90.19400000 31.68850000 50.25100000 51.58670000 30.36610000 24.54180000 470 91.30090000 41.55800000 60.79090000 56.19950000 35.95760000 36.41070000 471 100.0000000 42.99880000 60.28260000 66.75480000 42.01350000 36.37340000 472 46.21050000 17.99360000 35.49870000 12.91620000 7.659830000 10.81990000 473 53.73160000 14.73610000 54.82270000 20.00560000 10.52330000 27.22450000 474 74.00830000 65.30720000 82.84570000 49.46080000 44.89430000 69.69380000 475 83.80830000 90.05000000 91.72770000 69.40660000 76.20890000 89.42690000 476 90.06430000 92.03140000 100.0000000 80.09280000 83.41260000 107.1610000 477 37.44310000 20.96910000 17.00820000 7.628570000 5.601730000 2.553920000 478 42.01190000 61.78270000 13.19810000 15.21720000 26.25850000 4.005630000 479 41.33030000 76.38520000 8.689540000 18.60850000 38.98460000 4.755320000 480 79.00200000 93.25510000 11.48090000 50.41720000 71.57440000 8.519150000 481 100.0000000 94.28680000 90.46160000 89.07060000 90.89450000 88.42580000 482 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 483 18.73770000 0.000000000 22.49750000 2.158150000 1.030950000 3.795230000 484 21.78540000 9.760260000 41.92940000 4.914300000 2.530720000 14.79330000 485 33.41190000 13.10040000 53.28360000 10.10100000 5.271850000 25.14950000 486 50.20600000 38.98360000 60.96960000 21.34900000 16.97200000 34.87310000 487 51.32810000 54.17850000 77.75190000 28.94500000 27.48540000 59.45450000 488 33.12890000 35.59260000 52.68360000 11.59000000 10.92680000 25.18220000 489 40.55570000 41.95420000 63.73210000 17.65980000 16.16870000 38.22460000 490 75.04990000 69.98150000 65.21040000 46.49080000 47.37190000 43.37150000 491 77.13540000 70.82650000 73.21890000 50.75570000 49.97300000 54.77830000 492 85.92120000 80.46110000 75.22590000 62.87370000 64.21590000 59.31890000 493 93.89680000 100.0000000 78.22940000 79.73460000 93.01020000 67.18780000 494 38.74000000 47.32720000 23.02450000 11.49030000 16.09810000 5.621500000 495 50.60700000 56.74380000 30.30630000 19.59510000 25.23740000 9.814260000 496 74.79960000 62.15850000 57.32250000 42.50960000 39.96380000 33.06420000 497 44.26870000 34.80090000 32.62120000 13.03150000 11.75180000 9.582310000 498 48.55220000 39.60830000 32.02130000 15.73090000 14.86880000 9.574500000 499 59.52780000 49.46270000 35.36260000 24.28850000 23.60770000 12.44340000 500 60.37790000 72.97550000 56.39820000 33.63400000 43.31540000 32.55530000 501 14.75790000 17.06480000 10.63660000 1.374100000 1.781320000 0.902557000 502 9.305550000 14.20660000 1.738470000 0.567554000 1.019750000 0.124638000 503 0.000000000 18.16110000 10.64260000 0.572051000 1.527500000 0.884489000 504 14.50900000 27.52470000 80.77550000 13.68180000 8.808800000 62.43640000 505 22.41840000 41.18920000 91.37410000 20.22330000 16.20170000 82.39440000 506 27.98820000 52.71680000 88.60090000 22.46630000 22.92220000 77.85490000 507 51.20470000 55.35560000 92.54560000 34.15900000 30.25830000 86.14340000 508 62.37430000 60.03490000 100.0000000 45.28490000 38.48330000 102.3840000 509 0.000000000 12.33920000 17.79480000 0.608724000 0.798562000 2.296390000 510 0.000000000 9.073050000 19.27160000 0.598196000 0.521552000 2.688040000 511 0.000000000 67.95530000 32.82160000 9.557050000 27.47300000 11.57500000 512 12.21320000 95.30910000 36.07160000 19.25750000 57.53340000 16.91230000 513 0.000000000 100.0000000 79.48210000 29.91130000 67.27540000 66.88940000 514 0.000000000 43.11650000 48.85640000 6.811830000 11.42050000 21.62560000 515 0.000000000 53.46450000 51.06680000 8.974440000 17.54590000 24.39450000 516 0.000000000 85.43170000 77.83550000 23.97000000 48.71040000 62.12920000 517 12.55710000 92.30180000 91.34750000 31.58180000 59.07890000 87.19110000 518 50.12880000 21.67070000 17.42290000 13.67550000 8.845750000 2.960820000 519 69.44330000 42.71770000 14.20900000 28.97830000 23.10150000 3.656900000 520 78.48400000 50.19640000 10.42340000 38.05600000 31.28470000 3.824400000 521 84.39730000 79.16830000 0.000000000 50.81400000 58.00780000 6.088640000 522 17.37800000 0.000000000 9.705760000 1.340420000 0.678263000 0.644311000 523 16.53650000 8.943260000 6.617090000 1.241630000 0.897531000 0.339247000 524 15.40680000 19.45890000 8.295970000 1.529030000 2.232220000 0.652799000 525 48.85320000 64.09570000 43.64160000 21.94820000 30.95530000 19.22120000 526 62.13360000 85.43520000 57.20640000 38.88590000 57.02170000 34.97210000 527 20.36170000 57.33220000 58.45700000 12.97900000 21.66620000 32.59860000 528 17.38240000 64.58980000 80.10070000 19.87760000 29.24350000 63.61080000 529 18.68360000 66.25540000 88.55680000 23.35100000 31.87540000 78.80430000 530 59.77650000 79.65640000 89.45510000 44.58040000 53.52330000 82.73870000 531 79.44160000 79.27430000 100.0000000 64.71840000 63.09460000 104.9960000 532 19.88090000 0.000000000 59.27090000 7.609620000 3.234780000 31.45490000 533 19.78070000 9.811350000 67.18050000 9.593330000 4.361400000 41.44890000 534 66.71810000 59.65410000 84.58760000 42.66430000 37.56180000 71.97810000 535 33.67370000 33.60220000 39.83140000 9.436120000 9.408740000 13.98050000 536 40.54030000 48.81500000 47.04710000 15.33540000 18.47500000 20.71160000 537 17.48630000 29.65450000 24.12020000 3.351390000 5.302480000 4.890430000 538 14.41970000 43.59250000 30.81970000 5.217540000 11.08970000 8.624030000 539 40.21480000 54.89120000 79.29720000 24.03940000 25.30340000 61.77020000 540 42.23520000 93.75620000 88.65080000 39.20530000 64.68280000 82.59490000 541 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 542 9.730410000 0.000000000 10.08030000 0.464350000 0.225427000 0.653769000 543 18.76660000 9.444590000 16.42160000 1.912950000 1.241770000 1.972730000 544 52.33840000 0.000000000 32.56100000 15.48210000 7.798320000 9.054870000 545 76.65710000 40.12840000 31.73830000 36.14090000 25.59780000 10.39890000 546 36.96540000 41.98260000 10.96030000 9.359710000 12.69200000 2.117220000 547 45.70400000 49.30350000 0.000000000 14.22430000 18.55980000 1.975070000 548 69.51520000 68.50810000 0.000000000 33.99760000 40.67140000 4.290600000 549 73.07480000 82.02360000 39.79360000 43.41060000 56.48120000 18.99060000 550 82.53900000 86.35070000 48.73650000 55.12610000 66.47660000 27.29340000 551 33.28200000 39.96650000 26.86760000 8.645300000 11.41100000 6.688080000 552 51.58910000 39.89860000 41.65880000 18.65580000 16.34980000 16.01620000 553 52.15740000 57.15340000 71.81910000 28.29030000 29.07130000 50.57700000 554 14.13810000 18.18460000 21.66140000 1.868690000 2.140110000 3.632400000 555 10.30180000 20.63430000 22.80460000 1.695100000 2.442690000 4.078060000 556 8.457650000 17.39870000 23.47810000 1.425900000 1.781300000 4.256750000 557 100.0000000 56.52160000 34.20660000 64.74090000 48.33590000 14.08370000 558 100.0000000 67.05620000 52.29230000 69.89910000 57.59490000 29.45800000 559 69.93870000 25.89860000 20.08250000 27.77240000 16.98080000 4.496360000 560 79.81420000 35.23490000 23.25820000 37.75770000 24.74250000 6.368250000 561 69.27200000 27.32770000 36.39030000 28.83040000 17.69600000 12.34500000 562 72.12130000 33.93000000 48.03770000 33.58210000 21.81650000 21.73870000 563 81.50820000 43.94360000 56.07550000 45.10080000 31.36020000 30.65880000 564 34.29550000 0.000000000 64.02010000 12.53870000 5.649070000 37.43050000 565 37.79860000 0.000000000 83.53720000 19.45940000 8.568370000 67.05810000 566 80.30590000 0.000000000 83.26240000 48.18270000 23.38920000 67.92590000 567 31.27410000 0.000000000 26.94160000 5.526710000 2.728030000 5.750330000 568 36.96590000 18.56610000 29.09900000 8.166930000 5.377270000 7.040550000 569 47.21220000 19.64320000 28.74840000 12.80080000 7.943410000 7.106650000 570 77.15550000 19.75130000 46.63620000 36.64340000 19.98880000 20.24680000 571 82.73940000 19.72320000 77.29920000 49.22410000 25.64220000 58.24790000 572 62.88960000 0.000000000 46.61100000 24.30880000 12.12800000 19.47210000 573 65.39770000 51.36880000 48.85670000 30.84690000 27.74050000 23.20960000 574 66.35480000 65.18510000 58.14990000 36.35210000 38.82780000 33.94100000 575 69.00210000 83.92950000 68.64790000 46.35270000 59.11510000 49.34330000 576 30.14550000 43.28420000 37.98460000 9.308390000 12.97090000 13.10780000 577 30.57830000 49.61460000 57.46740000 13.79660000 17.85200000 31.02860000 578 33.21780000 73.38440000 92.38030000 30.31320000 40.72140000 87.08830000 579 21.37280000 41.25080000 54.48210000 9.533620000 11.92710000 27.16970000 580 30.63560000 41.39430000 55.64550000 12.12840000 13.29590000 28.52700000 581 39.16620000 67.12480000 56.76670000 20.47920000 32.05940000 31.82090000 582 38.13030000 66.13500000 80.72130000 26.14390000 33.53670000 65.06310000 583 37.42400000 79.89070000 85.22260000 31.20510000 47.00790000 74.36190000 584 48.51040000 82.32620000 92.25630000 39.61030000 53.26530000 88.18330000 585 59.07410000 91.31300000 100.0000000 52.13520000 68.24030000 105.7630000 586 19.42830000 26.19850000 29.57670000 3.837430000 4.623730000 7.247940000 587 25.60710000 33.28700000 32.65460000 6.139820000 7.711760000 9.221660000 588 30.90160000 37.92370000 40.84830000 9.185340000 10.73560000 14.88020000 589 8.345890000 14.20540000 16.13140000 0.839234000 1.120620000 1.901580000 590 27.13800000 19.57250000 15.34650000 4.094230000 3.547440000 1.956180000 591 57.34480000 16.10060000 16.50330000 17.66850000 10.02670000 2.808180000 592 56.71790000 53.02510000 48.88440000 25.06780000 25.64820000 23.06780000 593 64.61360000 57.57140000 49.60210000 31.60700000 31.61760000 24.34180000 594 81.10750000 57.53230000 51.68520000 46.29790000 39.12480000 27.01770000 595 93.38850000 62.88080000 55.71300000 61.50490000 50.27780000 32.25580000 596 92.92080000 62.99750000 65.40260000 63.18570000 50.96850000 43.81900000 597 100.0000000 75.30590000 77.32810000 78.30760000 67.63450000 62.80370000 598 63.32820000 47.63530000 53.70200000 29.54420000 25.08600000 27.62950000 599 83.15020000 57.84190000 67.82890000 52.01540000 41.84300000 46.13240000 600 24.63110000 9.755310000 31.43970000 4.235080000 2.331090000 7.947280000 601 61.84570000 0.000000000 30.72740000 21.44990000 10.89750000 8.337520000 602 81.52030000 0.000000000 36.77550000 38.88300000 19.80760000 12.70770000 603 27.69800000 28.07040000 8.664360000 4.647790000 5.638890000 1.049980000 604 39.89490000 53.12830000 0.000000000 12.26050000 19.55190000 2.116800000 605 100.0000000 68.29040000 0.000000000 65.69150000 56.85190000 5.756420000 606 100.0000000 74.48880000 19.19400000 67.87900000 62.76040000 9.028130000 607 100.0000000 93.52160000 19.73970000 74.21510000 84.08940000 11.59690000 608 45.45130000 59.71530000 25.84110000 17.11200000 25.82020000 7.806350000 609 66.93040000 59.95460000 27.72660000 30.99270000 33.10980000 9.313490000 610 66.34750000 20.40790000 9.239250000 24.05770000 14.00640000 1.836860000 611 88.29570000 21.39080000 35.93340000 46.46680000 25.51910000 12.73080000 612 90.64780000 29.01820000 77.15450000 58.33150000 32.34540000 58.67860000 613 10.08920000 7.667720000 35.07660000 2.316530000 1.164520000 9.941150000 614 0.000000000 10.81040000 38.75850000 2.479950000 1.406920000 12.38180000 615 0.000000000 60.92820000 47.14820000 9.841790000 22.53950000 21.34710000 616 0.000000000 71.40790000 47.48240000 12.50470000 31.37530000 22.63700000 617 12.59890000 71.80880000 53.78500000 14.37380000 32.51970000 28.78300000 618 100.0000000 77.71540000 68.86980000 76.61620000 69.08400000 50.41050000 619 100.0000000 85.90340000 90.53110000 86.07740000 80.69780000 87.41020000 620 35.90060000 29.13230000 29.01120000 8.530400000 7.784490000 7.273150000 621 49.95680000 33.01260000 30.80610000 15.56860000 12.51040000 8.645110000 622 56.33790000 38.16540000 45.07670000 21.82100000 17.26590000 18.79980000 623 100.0000000 41.64670000 46.66870000 63.89640000 40.28360000 22.27940000 624 30.66920000 16.06980000 16.47830000 4.976280000 3.478440000 2.206950000 625 33.48090000 37.63060000 17.63500000 7.775340000 10.15780000 3.249010000 626 42.98180000 41.11230000 17.65370000 12.04710000 13.69160000 3.609390000 627 42.78880000 46.85440000 31.12440000 13.86330000 17.01660000 9.362160000 628 51.45340000 51.02390000 31.28950000 19.06140000 21.76430000 9.935200000 629 64.71070000 80.79370000 79.27040000 45.04290000 55.18030000 64.93090000 630 75.25580000 90.29750000 79.79870000 57.14480000 70.61710000 67.43970000 631 60.18300000 66.09880000 68.80740000 34.61430000 38.28080000 47.29040000 632 63.07430000 75.45010000 81.03810000 42.76950000 49.29630000 67.21210000 633 62.02430000 86.61200000 79.75410000 45.14150000 60.70980000 66.37020000 634 72.39400000 100.0000000 90.01340000 61.82750000 83.31850000 87.04560000 635 24.83240000 52.53750000 38.22450000 9.469730000 17.52900000 13.80050000 636 26.33870000 76.91790000 50.36740000 17.64950000 38.47150000 26.04780000 637 30.64380000 90.57890000 64.10820000 26.28310000 55.50220000 43.17230000 638 23.18950000 80.34790000 30.45830000 15.16250000 40.51750000 11.73350000 639 41.18490000 89.83270000 33.23610000 24.52300000 54.44920000 14.75930000 640 66.67640000 89.84610000 36.85680000 40.40690000 62.60370000 17.73000000 641 83.04700000 90.95640000 60.31750000 59.58360000 73.16810000 40.14210000 642 91.75490000 93.85010000 62.30900000 70.51450000 81.82890000 43.40620000 643 60.70030000 56.41060000 38.00020000 26.74660000 28.62650000 14.71220000 644 88.17820000 63.39770000 39.07560000 52.92530000 46.52780000 17.19440000 645 90.42150000 74.80010000 50.80520000 60.25860000 58.65430000 28.25420000 646 100.0000000 77.25200000 55.31580000 73.30750000 67.34540000 33.66420000 647 30.92740000 71.77010000 28.79190000 14.52940000 32.98520000 10.02440000 648 32.44400000 91.91650000 28.12090000 21.42110000 55.08140000 12.18710000 649 62.70810000 91.95450000 45.44250000 39.41440000 64.14890000 24.33850000 650 78.75140000 100.0000000 53.33400000 57.38150000 82.20670000 33.54300000 651 46.68690000 61.78970000 49.20780000 21.19330000 28.91230000 23.79790000 652 46.03580000 64.79990000 60.12630000 23.76580000 32.01910000 35.59450000 653 71.30670000 85.79440000 59.66300000 46.70400000 61.33970000 38.16580000 654 100.0000000 93.52420000 60.62900000 79.94700000 86.38500000 41.78200000 655 62.52470000 63.40320000 38.86620000 29.69860000 34.55870000 15.96060000 656 63.32710000 81.50590000 41.82910000 35.71780000 52.00590000 20.07630000 657 9.846530000 40.95720000 50.41930000 7.131810000 10.66020000 22.99440000 658 8.555600000 59.55750000 71.34530000 15.15080000 23.78500000 49.44770000 659 0.000000000 83.92160000 87.10520000 26.51060000 48.22180000 77.97690000 660 26.28510000 84.09830000 91.40990000 31.17730000 50.61590000 86.33110000 661 51.79150000 0.000000000 13.49930000 13.79950000 7.088630000 1.847760000 662 82.69890000 0.000000000 16.13270000 38.31840000 19.71820000 3.572770000 663 90.39870000 16.43290000 46.12170000 49.97200000 26.37150000 20.37050000 664 32.15720000 10.24720000 17.73340000 5.300390000 3.039090000 2.478590000 665 78.51430000 14.53750000 13.86630000 34.39050000 18.46930000 2.974530000 666 92.64640000 10.55210000 22.26010000 49.57770000 25.86140000 5.975400000 667 100.0000000 84.88670000 23.30650000 71.37670000 73.79430000 11.65920000 668 100.0000000 86.32030000 67.37060000 78.99310000 78.28810000 49.40280000 669 41.35470000 35.52680000 38.16600000 12.44040000 11.61300000 13.03140000 670 50.55310000 40.21560000 53.06430000 20.03960000 16.96420000 26.15800000 671 52.50410000 48.37390000 56.25960000 23.05200000 22.03700000 30.06410000 672 42.78770000 41.44890000 48.13710000 15.36020000 15.14810000 21.29260000 673 46.58510000 42.63000000 70.39530000 22.29050000 18.64040000 47.39150000 674 53.39730000 50.87710000 82.29960000 30.97160000 26.58010000 66.86370000 675 25.91470000 27.11790000 63.42080000 10.92500000 7.848350000 36.95220000 676 51.39030000 29.70130000 66.05200000 22.18430000 14.24700000 40.93240000 677 60.56130000 38.65210000 70.03770000 30.03420000 21.06430000 47.06430000 678 63.05780000 37.64290000 85.31340000 36.35480000 23.41160000 71.70490000 679 87.07150000 51.11110000 92.72720000 62.71530000 42.64430000 87.56730000 680 88.36270000 61.10080000 100.0000000 69.03330000 51.41150000 103.5760000 681 20.93840000 15.99860000 21.10840000 2.796450000 2.315340000 3.452110000 682 35.89410000 55.52830000 19.58290000 11.66810000 20.53620000 4.969100000 683 34.33430000 68.37990000 20.58590000 14.11920000 30.25930000 6.387110000 684 34.23860000 91.31080000 43.02270000 23.59720000 55.35900000 21.55270000 685 0.000000000 43.94420000 15.88220000 3.370530000 10.41540000 2.891670000 686 0.000000000 100.0000000 19.63950000 19.07830000 62.94230000 9.832200000 687 13.40730000 14.99400000 0.000000000 0.980515000 1.324600000 0.141419000 688 39.25790000 11.91970000 35.82550000 9.519050000 5.175000000 10.78090000 689 37.85670000 0.000000000 48.97480000 10.72670000 5.078080000 20.94300000 690 85.92380000 78.45850000 49.70410000 56.23830000 59.71310000 27.38590000 691 28.36950000 24.56880000 10.54160000 4.591650000 4.778450000 1.195350000 692 36.03610000 32.69520000 15.45730000 8.008660000 8.642150000 2.523680000 693 53.44920000 32.19800000 17.65310000 16.49270000 12.85380000 3.452530000 694 76.57000000 48.94550000 25.77290000 36.87090000 29.94790000 7.996230000 695 79.71920000 66.44480000 33.60540000 44.29420000 44.27760000 13.52600000 696 81.60110000 81.22910000 35.51640000 50.55470000 59.50010000 16.37540000 697 26.82580000 52.64440000 12.42080000 7.909810000 17.02290000 2.882620000 698 25.39200000 60.01230000 11.31660000 9.021680000 21.92930000 3.254190000 699 92.86420000 60.28200000 12.72590000 55.30450000 45.95950000 5.682250000 700 100.0000000 65.74730000 23.82000000 65.85170000 55.00160000 9.737980000 701 53.94240000 38.54020000 25.32750000 18.03700000 15.72480000 6.400120000 702 65.22960000 38.03790000 23.09330000 25.50050000 19.40690000 5.846970000 703 78.17100000 54.97380000 21.86930000 39.19640000 34.39540000 6.969920000 704 85.12810000 75.06840000 29.47050000 51.63060000 54.77020000 12.40680000 705 30.60880000 25.52570000 0.000000000 5.188990000 5.314580000 0.550750000 706 36.28960000 23.21390000 74.32870000 16.75470000 9.647470000 52.19730000 707 57.38330000 32.10980000 100.0000000 37.34710000 21.45200000 100.5040000 708 52.19240000 0.000000000 86.92310000 27.62980000 12.64740000 73.48050000 709 50.76250000 16.92290000 88.37110000 27.69650000 13.69140000 76.27930000 710 42.33770000 73.12590000 71.78720000 27.11140000 39.64060000 51.77850000 711 81.14520000 80.93440000 71.95870000 57.20480000 61.82900000 54.21600000 712 81.27230000 85.21300000 79.39810000 60.93270000 67.50150000 66.36600000 713 84.14290000 91.07350000 78.61780000 65.64430000 75.84920000 66.00260000 714 41.17650000 66.41860000 21.11570000 16.35360000 29.97870000 6.499870000 715 51.99610000 66.66960000 19.98770000 21.83990000 32.99570000 6.412370000 716 53.48450000 100.0000000 25.19490000 34.02520000 70.60490000 12.53110000 717 80.93500000 100.0000000 41.41910000 57.48120000 82.49100000 23.03120000 718 84.64230000 100.0000000 92.44950000 74.35750000 89.67480000 92.34750000 719 60.25290000 9.293160000 21.19280000 19.64760000 10.34490000 4.192990000 720 67.19630000 0.000000000 25.36240000 24.97910000 12.77320000 5.978420000 721 66.22430000 16.93440000 75.03510000 33.67990000 17.27920000 53.94070000 722 77.80450000 20.71300000 85.58850000 47.15680000 24.43620000 72.17460000 723 73.82900000 31.47360000 90.15000000 46.03390000 26.18660000 80.85530000 724 86.88020000 36.01800000 100.0000000 63.11330000 35.99360000 101.8570000 725 90.46380000 85.36680000 100.0000000 78.18570000 75.68020000 106.2840000 726 22.63740000 23.04330000 28.11520000 4.089080000 4.082120000 6.468530000 727 20.67600000 37.57920000 31.08950000 5.398370000 8.794870000 8.497310000 728 10.53820000 30.82830000 23.35950000 2.572550000 5.234440000 4.599080000 729 0.000000000 29.39430000 26.38710000 2.261020000 4.649000000 5.771490000 730 48.59440000 43.16900000 40.63180000 17.31660000 17.00950000 15.34400000 731 48.05370000 54.01920000 47.43000000 19.94650000 23.58580000 21.58360000 732 57.06700000 67.88330000 59.90410000 30.80880000 37.86040000 35.92110000 733 10.11490000 14.93320000 36.93850000 2.762900000 1.992830000 11.21670000 734 15.38600000 11.00990000 90.21840000 16.09280000 6.977600000 79.14410000 735 22.71250000 47.35160000 100.0000000 24.61910000 20.78900000 100.5960000 736 20.52740000 55.25800000 100.0000000 25.62680000 25.46200000 101.1270000 737 8.971200000 21.81640000 32.24880000 2.501350000 2.977510000 8.490000000 738 0.000000000 23.91580000 44.96910000 4.043720000 3.996480000 17.39910000 739 10.05130000 24.30130000 51.22780000 5.518060000 4.713980000 23.10040000 740 7.801050000 24.50690000 62.31910000 7.705220000 5.616690000 35.36690000 741 32.47700000 38.91790000 85.11320000 20.39360000 15.66100000 70.65520000 742 41.75930000 53.67340000 100.0000000 31.99330000 27.85060000 101.3210000 743 72.95640000 55.86730000 100.0000000 52.80480000 39.82750000 102.4410000 744 81.62230000 69.77250000 68.09870000 53.39090000 50.68580000 47.51300000 745 86.46040000 83.07220000 67.73320000 62.20940000 66.51140000 48.74320000 746 88.63390000 90.83900000 74.11970000 68.99100000 77.48590000 59.09660000 747 88.63190000 100.0000000 84.84330000 75.89330000 90.78170000 78.19590000 748 54.48640000 62.70960000 48.88180000 25.71850000 31.86140000 23.78110000 749 68.51890000 79.05360000 48.15500000 39.94920000 51.86820000 25.26340000 750 79.13400000 79.27340000 54.05070000 50.46650000 57.35910000 31.47430000 751 90.29810000 80.23280000 66.93890000 65.29360000 65.52170000 47.51600000 752 18.61130000 39.04360000 21.01880000 4.383470000 8.909600000 4.169900000 753 24.82020000 73.53260000 21.08100000 12.74090000 33.53770000 6.951110000 754 38.15130000 73.82880000 43.36250000 19.44390000 36.95840000 19.73150000 755 45.20960000 89.62230000 66.84130000 32.40390000 57.59240000 46.89750000 756 67.98100000 100.0000000 73.73160000 52.86230000 79.30930000 58.93810000 757 38.67270000 55.39070000 55.25930000 17.30490000 22.83310000 29.15770000 758 45.65140000 61.56870000 64.40960000 23.81890000 29.75180000 40.58700000 759 86.17030000 74.21020000 79.83470000 62.66940000 58.57740000 66.02210000 760 41.90110000 22.86730000 27.33610000 10.32370000 7.269560000 6.395000000 761 55.80080000 28.14120000 30.63720000 18.52420000 12.66060000 8.534550000 762 77.28310000 28.53410000 29.19350000 35.15370000 21.35250000 8.591590000 763 62.26050000 24.20220000 25.76990000 22.11520000 13.64010000 6.289520000 764 65.81330000 22.84540000 42.12060000 26.51470000 15.41420000 16.15510000 765 65.82740000 37.31840000 51.90350000 29.56570000 20.81430000 25.31970000 766 83.77970000 39.20230000 63.68690000 48.42130000 30.94020000 39.48150000 767 80.42020000 38.14170000 78.48150000 48.98770000 30.36490000 60.69970000 768 88.21440000 56.81140000 79.54720000 60.50040000 45.21080000 64.01810000 769 31.07730000 26.43390000 32.04350000 6.948010000 6.254370000 8.698970000 770 29.37850000 53.63970000 56.22160000 13.91920000 20.07550000 29.91540000 771 27.69550000 63.98420000 71.41720000 19.35110000 28.85310000 50.08690000 772 0.000000000 31.12220000 34.97430000 3.291580000 5.562430000 10.37790000 773 11.55620000 33.97280000 43.82500000 5.294880000 7.324180000 16.83450000 774 0.000000000 33.68200000 54.98160000 6.744800000 7.749770000 27.24490000 775 60.24130000 52.55290000 57.92020000 29.08990000 27.26150000 32.42980000 776 76.08110000 63.87760000 68.66990000 46.77150000 43.00450000 47.48970000 777 86.58210000 64.58520000 68.31490000 57.24520000 48.90230000 47.54980000 778 43.12320000 19.36660000 20.97100000 10.17820000 6.615810000 3.809620000 779 52.19990000 16.83820000 23.01330000 14.91850000 8.663230000 4.705000000 780 58.51220000 40.29300000 40.71010000 22.86660000 18.69080000 15.52400000 781 75.41320000 45.54090000 40.91500000 36.93260000 28.16540000 16.59350000 782 18.68540000 52.16310000 0.000000000 5.876070000 15.73710000 1.756770000 783 20.24490000 66.90260000 0.000000000 9.384900000 26.80470000 3.000560000 784 23.55100000 83.62480000 0.000000000 14.91870000 43.57060000 4.881820000 785 33.77890000 75.67930000 14.88280000 15.63850000 36.83620000 5.579850000 786 54.38350000 75.28150000 27.62990000 26.15620000 41.83170000 10.34960000 787 57.97580000 65.11470000 25.04250000 25.50760000 33.74390000 8.283630000 788 18.95600000 24.59160000 9.703060000 2.447690000 3.680520000 0.979286000 789 19.22540000 30.67750000 50.57260000 7.116800000 7.137650000 22.73030000 790 19.24010000 33.86900000 61.60780000 9.738940000 9.187020000 34.88820000 791 20.60920000 48.09890000 78.66350000 16.60050000 17.90680000 59.97240000 792 22.01430000 55.39590000 83.54810000 19.80390000 23.24950000 68.78420000 793 43.96470000 25.40060000 38.16950000 12.63820000 8.865470000 12.71080000 794 90.93340000 24.39170000 63.93600000 54.66480000 29.76040000 39.57590000 795 100.0000000 24.65950000 87.00580000 72.38300000 38.16570000 76.01330000 796 44.85060000 8.363040000 46.36920000 13.43970000 6.755070000 18.78090000 797 48.36850000 16.24160000 69.85610000 20.56620000 10.59200000 45.71280000 798 51.61710000 71.51040000 77.95830000 33.22810000 41.30520000 61.34020000 799 53.67630000 80.04190000 83.60520000 38.74410000 51.09350000 71.87880000 800 62.30980000 47.33290000 59.74720000 30.02190000 25.04100000 34.25340000 801 66.26250000 48.46110000 81.36750000 39.05940000 29.56490000 65.51660000 802 33.81160000 22.51280000 43.31140000 8.999280000 6.296710000 16.25470000 803 41.99900000 22.74280000 66.74000000 17.00690000 9.922070000 41.40890000 804 78.48290000 45.66140000 71.23680000 46.08530000 32.21230000 49.86300000 805 81.00310000 63.74370000 81.61200000 55.21600000 46.82750000 67.72920000 806 69.33860000 54.91310000 77.24750000 41.40950000 34.34530000 59.28410000 807 71.62150000 68.46520000 78.76290000 46.87830000 45.99370000 63.00670000 808 21.87510000 22.88980000 50.26490000 6.909580000 5.159830000 22.20920000 809 22.00190000 100.0000000 48.92790000 24.52570000 65.36000000 27.74490000 810 9.667380000 73.65920000 30.09080000 11.15160000 32.73650000 10.68950000 811 10.37310000 92.02590000 46.92590000 19.41400000 53.88380000 24.67960000 812 0.000000000 100.0000000 56.92010000 24.00350000 64.91230000 35.77310000 813 0.000000000 31.55490000 13.60160000 1.702110000 5.057570000 1.791700000 814 33.00510000 58.01140000 7.236510000 10.69790000 21.56200000 2.677580000 815 48.79600000 75.88050000 0.000000000 22.01420000 40.32520000 4.409280000 816 65.25930000 79.82410000 0.000000000 33.86220000 49.84950000 5.362450000 817 82.07890000 41.42220000 0.000000000 40.02510000 28.29090000 2.767180000 818 92.70630000 45.16360000 17.31280000 52.45180000 36.25540000 5.612600000 819 91.71100000 58.23370000 41.91800000 56.10870000 44.79740000 19.03300000 820 23.74710000 29.41050000 8.817130000 3.790090000 5.547540000 1.068510000 821 22.74710000 35.01440000 0.000000000 4.067340000 7.385690000 0.807104000 822 23.62410000 42.32210000 8.154320000 5.290530000 10.74280000 1.579760000 823 21.75540000 54.80790000 62.24580000 13.59320000 20.40910000 36.92330000 824 21.42660000 90.31460000 80.55210000 28.47430000 55.82400000 67.34750000 825 15.89030000 62.38280000 44.54470000 10.76060000 24.01450000 19.29330000 826 13.20640000 63.73450000 66.73170000 15.29380000 26.73450000 43.38060000 827 29.45350000 70.60210000 71.37910000 21.51630000 34.78320000 50.69440000 828 31.32160000 86.41320000 73.08630000 27.39110000 51.59320000 55.07980000 829 44.19690000 85.43520000 75.63110000 32.88130000 53.38540000 59.08020000 830 13.18120000 48.51180000 16.43890000 4.804510000 13.26910000 3.340890000 831 15.20060000 55.79700000 15.92400000 6.388930000 17.99180000 3.744920000 832 27.20710000 62.70940000 28.84180000 11.16430000 24.66640000 9.123530000 833 23.74960000 46.93530000 39.66460000 8.421060000 14.13100000 14.42500000 834 30.21780000 46.58090000 76.98920000 18.19550000 18.06470000 57.28430000 835 34.32820000 50.63470000 91.04460000 24.95760000 23.00090000 82.48520000 836 12.57140000 5.992540000 23.71110000 1.435370000 0.757227000 4.226540000 837 9.317960000 9.950800000 29.82910000 1.744070000 1.079530000 6.990020000 838 14.72090000 14.16710000 28.60770000 2.305900000 1.773110000 6.458380000 839 11.80490000 45.38740000 46.15050000 7.226770000 12.68640000 19.36690000 840 13.46940000 56.45840000 48.85300000 9.873510000 19.76340000 22.55460000 841 44.66050000 57.44170000 72.92020000 24.67540000 27.34440000 52.04210000 842 0.000000000 15.43360000 66.51830000 7.982340000 4.100790000 40.55480000 843 0.000000000 25.46550000 85.47600000 14.24330000 8.428440000 70.54300000 844 14.01640000 43.97200000 90.36860000 18.87430000 16.71790000 80.53070000 845 0.000000000 34.69560000 85.53330000 15.15560000 11.45430000 70.98650000 846 0.000000000 43.33330000 85.12280000 16.15560000 15.25440000 70.68110000 847 0.000000000 66.35550000 89.09440000 22.12770000 31.29380000 79.76300000 848 36.79880000 67.44980000 92.56670000 30.08350000 36.03800000 86.91300000 849 22.68490000 33.07120000 45.92280000 7.235240000 8.002010000 18.62610000 850 27.02060000 58.09220000 48.59240000 12.71230000 22.21150000 22.56400000 851 49.03930000 77.26850000 50.85680000 26.81060000 43.48480000 26.97930000 852 68.68320000 74.91290000 54.45430000 40.01840000 48.23050000 30.96850000 853 71.51230000 74.18730000 67.54630000 45.15060000 49.93360000 46.78350000 854 33.56770000 9.759060000 9.997250000 5.458360000 3.119190000 0.913446000 855 38.70470000 0.000000000 12.92790000 7.360290000 3.770900000 1.437130000 856 38.50320000 31.04880000 8.786400000 8.575740000 8.471480000 1.342280000 857 44.59940000 38.53830000 10.22700000 12.17090000 12.79120000 1.983880000 858 54.74000000 37.31660000 0.000000000 17.44940000 15.08070000 1.526650000 859 27.84510000 25.93270000 35.57970000 6.358910000 5.787010000 10.73930000 860 26.85040000 30.35140000 34.49870000 6.359450000 6.931690000 10.20700000 861 39.15440000 43.82510000 35.76920000 12.32040000 14.78950000 11.82910000 862 45.47130000 67.38540000 38.96570000 20.34780000 32.53370000 15.91810000 863 38.03960000 55.18270000 29.09530000 13.14810000 21.01670000 8.795980000 864 76.48760000 86.22460000 27.45010000 46.47440000 62.21340000 12.37330000 865 84.59010000 87.24450000 25.74710000 54.60940000 67.43000000 12.11980000 866 61.67290000 73.76670000 17.18050000 29.81540000 42.55700000 6.612890000 867 63.56600000 92.24860000 16.77920000 37.20000000 63.65980000 8.871540000 868 64.92730000 100.0000000 20.88090000 41.46160000 74.47480000 11.27610000 869 77.79620000 100.0000000 23.06310000 52.50240000 80.15070000 12.55940000 870 7.234110000 22.74510000 9.588200000 1.001940000 2.551890000 0.851828000 871 8.559260000 23.99940000 20.20740000 1.621930000 3.076070000 3.261910000 872 12.72450000 25.29020000 31.23130000 2.977490000 3.952700000 8.040740000 873 9.199350000 23.66850000 39.89700000 3.578040000 3.791530000 13.45060000 874 0.000000000 28.68460000 60.04310000 7.319760000 6.476440000 32.73700000 875 0.000000000 33.85140000 74.27780000 11.49970000 9.707690000 52.19700000 876 41.28160000 33.77760000 100.0000000 28.76560000 17.54210000 100.1620000 877 15.66080000 12.49880000 77.06540000 11.78140000 5.396400000 56.01320000 878 33.96620000 12.97800000 85.86000000 19.03310000 8.853630000 71.22000000 879 35.68370000 23.26750000 87.25820000 20.67780000 11.20190000 74.01930000 880 52.70440000 45.34370000 86.07380000 30.89250000 23.70150000 73.17990000 881 59.65620000 71.85470000 86.62710000 41.21140000 45.36310000 76.57360000 882 52.64060000 56.92620000 61.72630000 25.95100000 28.02730000 37.01330000 883 58.60840000 57.79610000 66.12560000 30.94460000 31.00120000 42.86650000 884 67.90530000 57.25630000 70.34530000 38.74550000 34.57050000 48.95920000 885 79.71180000 24.76800000 37.60230000 38.07800000 21.85030000 13.50340000 886 82.43090000 37.51940000 39.52330000 42.29960000 27.68430000 15.45480000 887 90.60220000 43.00260000 76.41810000 59.73710000 37.90710000 58.14630000 888 100.0000000 55.07080000 85.83150000 76.11780000 52.00980000 75.44250000 889 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 890 12.22820000 8.197680000 7.916710000 0.714307000 0.577151000 0.430277000 891 16.82280000 12.52500000 9.697000000 1.447910000 1.285090000 0.712478000 892 23.72180000 6.871020000 14.08140000 2.740480000 1.531070000 1.463780000 893 21.68510000 13.75590000 10.13870000 2.359130000 1.879840000 0.829608000 894 28.67140000 12.93740000 0.000000000 3.903000000 2.604550000 0.251860000 895 50.69120000 26.42560000 0.000000000 13.93730000 10.03430000 0.984909000 896 58.01440000 25.34930000 9.875710000 18.43800000 12.09260000 1.770870000 897 61.28710000 41.55990000 18.16250000 22.78140000 19.40470000 4.273120000 898 68.45010000 72.15020000 18.11250000 34.54580000 43.69550000 6.935030000 899 82.77560000 93.44110000 100.0000000 72.85760000 81.18770000 106.9970000 900 0.000000000 68.32300000 18.80320000 8.504840000 27.33440000 5.570340000 901 0.000000000 83.28030000 19.63230000 12.93180000 42.16120000 7.488730000 902 69.01560000 47.77270000 0.000000000 29.16870000 25.51310000 2.587400000 903 68.73330000 57.06810000 0.000000000 30.68850000 31.30770000 3.242830000 904 74.63910000 56.48880000 10.06110000 35.71460000 33.54180000 4.067590000 905 90.48070000 81.26090000 16.16790000 58.38060000 63.74800000 8.448410000 906 90.80010000 100.0000000 19.20690000 65.69640000 86.98230000 11.88500000 907 91.23040000 100.0000000 62.04640000 72.27230000 89.66900000 43.97530000 908 22.05180000 20.53550000 8.968220000 2.739600000 3.037380000 0.807770000 909 47.79860000 19.66690000 43.92360000 14.97550000 8.852550000 16.96370000 910 69.13750000 17.38230000 53.32540000 30.73030000 16.43270000 26.21950000 911 89.49280000 18.46580000 100.0000000 64.45120000 32.35070000 101.4150000 912 52.77460000 0.000000000 49.77820000 18.20060000 8.915240000 22.03780000 913 64.64940000 0.000000000 69.07200000 30.43910000 14.73040000 44.96700000 914 83.91940000 0.000000000 72.57900000 48.52210000 23.94330000 50.82440000 915 81.24260000 0.000000000 57.49000000 42.09330000 21.05990000 31.05220000 916 92.59860000 9.750120000 61.68640000 55.31450000 28.08680000 36.58210000 917 23.56470000 100.0000000 24.18610000 21.78440000 64.30240000 11.55040000 918 40.09150000 100.0000000 21.66910000 26.93170000 66.97700000 10.86170000 919 60.86990000 100.0000000 44.89050000 41.14280000 74.00600000 25.00380000 920 36.16510000 26.03350000 10.79360000 7.261960000 6.484000000 1.396040000 921 43.21930000 26.68400000 8.421450000 10.21160000 8.165440000 1.243170000 922 82.93440000 35.82980000 11.90050000 40.33180000 26.33870000 3.448360000 923 100.0000000 40.51950000 19.15270000 60.71320000 38.53860000 6.286910000 924 40.99770000 15.74330000 0.000000000 8.434100000 5.260510000 0.501378000 925 44.43320000 17.17380000 56.60730000 15.45690000 8.451130000 28.96020000 926 15.49610000 9.168370000 20.41180000 1.623420000 1.048640000 3.090950000 927 14.30790000 11.40780000 17.49170000 1.365030000 1.105750000 2.240190000 928 10.98350000 38.76490000 32.62170000 4.358680000 8.677000000 9.339180000 929 11.24930000 54.76390000 75.78340000 15.63540000 21.02170000 55.77210000 930 0.000000000 56.03580000 83.38250000 17.81080000 22.59920000 68.44600000 931 0.000000000 59.05350000 100.0000000 24.64600000 27.22540000 101.3460000 932 21.86590000 73.83430000 100.0000000 30.37850000 40.77110000 102.8490000 933 22.27040000 83.06070000 100.0000000 33.27650000 50.32980000 103.9250000 934 47.43480000 26.53180000 90.72140000 27.37980000 15.23400000 80.92320000 935 65.60790000 26.30520000 93.38430000 39.99920000 21.57170000 86.71770000 936 54.57910000 16.25240000 64.51960000 22.74830000 11.87710000 38.65790000 937 71.14260000 40.95640000 77.91880000 40.75270000 27.22080000 59.53470000 938 76.91230000 51.79450000 80.77630000 48.51210000 36.16360000 65.16470000 939 77.42100000 59.74060000 92.87460000 54.82270000 43.54160000 88.06860000 940 35.17240000 32.63620000 45.07090000 10.63670000 9.637850000 18.05400000 941 40.30210000 44.86350000 47.92390000 14.73260000 16.28630000 21.24190000 942 45.88560000 58.09050000 52.51780000 20.58180000 26.18520000 26.67560000 943 49.32040000 57.31750000 57.34970000 23.18260000 26.94610000 31.83320000 944 64.96250000 88.15790000 92.60680000 52.29130000 65.41920000 90.12300000 945 74.90420000 88.63080000 91.96270000 60.42900000 70.12010000 89.29590000 946 22.97680000 21.00230000 17.05870000 3.256190000 3.352920000 2.362850000 947 20.27190000 23.56710000 18.35040000 2.949300000 3.682530000 2.756250000 948 22.49960000 24.52560000 14.47240000 3.280650000 4.077540000 1.835560000 949 41.06860000 28.15170000 24.57490000 10.14850000 8.406580000 5.343110000 950 56.26060000 48.48630000 49.27570000 24.02310000 22.74820000 23.10460000 951 63.18780000 92.35760000 72.37390000 45.83460000 67.20180000 55.60150000 952 68.22270000 93.96380000 80.24340000 52.65140000 72.16940000 68.41770000 953 58.67450000 34.53510000 29.38450000 20.91760000 15.76880000 8.224410000 954 68.38090000 35.17630000 32.61530000 28.46650000 19.83500000 10.31660000 955 76.95110000 56.91510000 57.41450000 43.34000000 37.09770000 32.82130000 956 93.36950000 64.04220000 77.19740000 67.21060000 53.37630000 61.08090000 957 25.36180000 17.01630000 32.60400000 4.800270000 3.371830000 8.704830000 958 25.70670000 18.72090000 42.96580000 6.309470000 4.248250000 15.77850000 959 44.88050000 54.52000000 62.31750000 21.44170000 24.29090000 37.35980000 960 52.79080000 73.53320000 73.12810000 33.04410000 42.98430000 54.06330000 961 71.48490000 79.48190000 80.37760000 50.40250000 56.72720000 66.87060000 962 76.36910000 81.45530000 87.81610000 57.83690000 62.04940000 80.48460000 963 56.44660000 69.05320000 67.50940000 32.54630000 39.41280000 45.67420000 964 64.39750000 71.60730000 67.75140000 38.80460000 44.59060000 46.52280000 965 16.09980000 23.65730000 15.87820000 2.146980000 3.301780000 2.077590000 966 22.35680000 31.19310000 21.17230000 4.189390000 6.190150000 3.906850000 967 30.95820000 31.09160000 18.28180000 6.245440000 7.240750000 3.107950000 968 32.17050000 28.46130000 24.43200000 6.780150000 6.750750000 5.137430000 969 36.15400000 36.77060000 27.30260000 9.293840000 10.55620000 6.776540000 970 40.40060000 37.39490000 32.46170000 11.57600000 11.89710000 9.528660000 971 54.34830000 38.36830000 77.64310000 28.13100000 19.72430000 58.38650000 972 63.54120000 61.96100000 77.13270000 38.38130000 37.11540000 59.46490000 973 62.24630000 63.15490000 91.62970000 42.61330000 39.52670000 85.31460000 974 65.70590000 92.87480000 90.53840000 53.79480000 71.17770000 86.74270000 975 38.82760000 47.30990000 69.63150000 19.26880000 19.20490000 46.41830000 976 41.29780000 61.63970000 82.86860000 27.09810000 30.87650000 68.39580000 977 54.45040000 62.30270000 82.83500000 34.14090000 34.94590000 68.71870000 978 42.65050000 47.33040000 78.60330000 23.51730000 21.10540000 60.15570000 979 45.81050000 59.09880000 89.92340000 31.09520000 31.03220000 81.18580000 980 89.74660000 59.60040000 89.82440000 66.27010000 49.48680000 82.68190000 981 28.42320000 12.71620000 23.14340000 4.578420000 2.843680000 4.212320000 982 31.77530000 5.979800000 21.59220000 5.318360000 2.775940000 3.636850000 983 38.19800000 11.29980000 22.93840000 7.838690000 4.396040000 4.273680000 984 37.08660000 22.52550000 52.89640000 11.84800000 7.577270000 25.00250000 985 36.20620000 44.49520000 52.31580000 13.82820000 15.56430000 25.32520000 986 38.83130000 50.02270000 41.58310000 13.97910000 18.48070000 16.26940000 987 37.53600000 59.17080000 46.56240000 16.03990000 24.63200000 20.99760000 988 14.99980000 23.96870000 22.62670000 2.407730000 3.456520000 4.121630000 989 10.01480000 35.69030000 22.27130000 2.982640000 6.973490000 4.395690000 990 21.16430000 70.26980000 33.13580000 12.09370000 30.51460000 12.07590000 991 19.67690000 71.08790000 66.53620000 18.05720000 33.52380000 43.87520000 992 18.45690000 85.83730000 68.81160000 22.93560000 48.86850000 48.68550000 993 12.47340000 32.51430000 49.63220000 6.193000000 7.220380000 21.86270000 994 8.752880000 31.32790000 56.85980000 7.154360000 7.200900000 29.20190000 995 9.625160000 61.71460000 58.16900000 12.47030000 24.16180000 32.56970000 996 26.81880000 63.89650000 58.76880000 15.96660000 27.40990000 33.58460000 997 63.57380000 11.76130000 12.36720000 21.65500000 11.62390000 2.061240000 998 74.76840000 15.36510000 20.54100000 31.30680000 16.93960000 4.591510000 999 75.89260000 10.63110000 32.69900000 33.18590000 17.30950000 10.00680000 1000 81.43080000 29.78340000 66.98580000 45.79870000 26.41800000 43.27860000 1001 82.79810000 37.31360000 89.17050000 54.82750000 32.66110000 79.63210000 1002 93.27820000 38.83330000 90.17390000 66.79730000 39.34890000 82.16010000 1003 22.54010000 16.72500000 9.170230000 2.639350000 2.390990000 0.758341000 1004 50.52920000 67.43090000 4.488420000 20.67210000 33.00550000 3.680620000 1005 70.94210000 78.60210000 9.508950000 38.13880000 50.96180000 5.992720000 1006 87.26470000 91.55290000 15.02080000 58.31350000 73.82040000 9.356010000 1007 70.80080000 73.97410000 43.09830000 39.50490000 47.42510000 20.47630000 1008 80.36880000 92.61650000 44.23210000 54.46750000 72.63570000 24.12610000 1009 18.63340000 32.61310000 5.968530000 3.049600000 6.091530000 0.869848000 1010 19.34110000 31.03120000 12.81660000 3.175570000 5.668620000 1.693300000 1011 17.67230000 46.10000000 9.104610000 4.751360000 12.12230000 1.856810000 1012 87.18630000 64.24540000 11.51750000 49.83180000 45.76800000 5.524130000 1013 86.67790000 68.05700000 61.97490000 56.64340000 51.25420000 39.61670000 1014 28.25800000 25.14860000 42.34160000 7.314660000 5.996870000 15.48230000 1015 28.11360000 31.14030000 55.86200000 10.19590000 8.738810000 28.25410000 1016 49.15650000 49.12150000 65.21880000 23.33460000 22.31620000 40.76860000 1017 48.38500000 75.88700000 90.72730000 36.99110000 46.29610000 84.42860000 1018 49.59560000 89.78330000 92.02440000 42.65060000 62.12560000 88.72080000 1019 36.18090000 62.62740000 60.28590000 18.97880000 28.06720000 35.38550000 1020 37.76390000 71.78070000 81.01890000 27.56930000 38.48810000 66.12130000 1021 36.43530000 82.45090000 80.03450000 29.93060000 48.87920000 65.65670000 1022 13.57350000 59.84600000 28.90200000 7.940420000 21.14260000 8.784860000 1023 9.737170000 65.39140000 40.47330000 10.20810000 25.85500000 16.35320000 1024 12.62690000 74.35450000 63.11900000 17.11950000 35.74430000 39.74480000 1025 7.405570000 78.46320000 75.30830000 21.15920000 40.93120000 57.28480000 1026 9.733310000 71.43740000 89.26350000 23.85870000 35.98040000 80.60580000 1027 28.12980000 75.98890000 89.42600000 28.40680000 42.01040000 81.55590000 1028 26.31790000 39.28710000 39.59260000 7.892080000 10.59800000 13.96880000 1029 25.98640000 40.47730000 47.46940000 9.172050000 11.58110000 20.36190000 1030 34.00400000 52.95800000 46.94460000 13.53100000 19.70140000 20.78870000 1031 68.25860000 63.15030000 48.60420000 35.50480000 37.20870000 24.02070000 1032 92.97070000 47.52240000 31.89570000 54.26820000 38.15820000 11.70900000 1033 92.48700000 61.46260000 30.36450000 56.29970000 47.09900000 11.90610000 1034 58.82770000 47.81070000 18.97960000 22.10480000 21.83280000 4.800220000 1035 63.94550000 46.98570000 29.19600000 26.35150000 23.53970000 8.964620000 1036 25.02210000 18.48400000 66.22050000 10.79520000 5.984750000 40.34260000 1037 25.80220000 21.06810000 78.75590000 14.66610000 8.005380000 58.99380000 1038 14.16640000 32.05640000 36.98820000 4.416140000 6.388260000 11.73990000 1039 9.806530000 37.56790000 41.28220000 5.192830000 8.540510000 15.00050000 1040 35.96950000 74.56080000 53.54110000 20.57880000 37.93760000 29.08180000 1041 41.24740000 84.22020000 54.47440000 25.89070000 49.21990000 31.29240000 1042 21.23380000 26.08600000 25.42570000 3.801810000 4.621310000 5.335560000 1043 89.32560000 27.13350000 23.81980000 46.84940000 27.08210000 6.735010000 1044 90.80960000 34.84320000 34.22330000 50.26000000 30.94090000 12.25780000 1045 91.57830000 45.15160000 50.11050000 54.87330000 37.06830000 25.14650000 1046 93.23190000 70.42560000 90.94130000 73.28920000 60.61310000 86.02910000 1047 93.86650000 79.64740000 91.48560000 76.90080000 70.09400000 88.14230000 1048 60.71270000 16.50310000 30.72170000 21.00340000 11.67870000 8.431550000 1049 62.62630000 30.46680000 71.78500000 31.04340000 18.85130000 49.29930000 1050 72.47310000 28.53410000 76.37310000 39.98990000 22.78820000 56.57510000 1051 78.68810000 67.57740000 77.87590000 52.74020000 48.39390000 61.77530000 1052 81.75200000 76.63800000 83.43840000 60.00100000 59.09050000 72.23780000 1053 92.64670000 86.03200000 85.23010000 75.32460000 75.49620000 77.11110000 1054 13.89970000 3.513480000 9.449410000 0.868840000 0.469525000 0.592903000 1055 8.792700000 7.812480000 1.790590000 0.345551000 0.373129000 0.053086800 1056 71.25480000 14.30800000 37.34430000 29.78470000 15.84690000 12.74130000 1057 79.37730000 21.64190000 55.92560000 40.58720000 22.15690000 29.48370000 1058 57.89660000 20.35550000 42.95140000 20.83140000 12.00600000 16.47890000 1059 62.70860000 34.75310000 42.82280000 25.39550000 17.95940000 17.01150000 1060 67.06290000 34.82860000 58.36650000 31.53650000 20.82180000 32.15110000 1061 76.11450000 92.18130000 88.83340000 61.66110000 74.56660000 83.79200000 1062 84.47370000 92.72280000 87.94160000 69.69360000 79.32130000 82.57380000 1063 34.12320000 40.97550000 37.36090000 10.18750000 12.47610000 12.61940000 1064 45.39760000 52.55940000 40.11490000 17.18920000 21.49170000 15.49090000 1065 58.17760000 66.66420000 44.24940000 28.26120000 36.00360000 20.21720000 1066 57.66120000 74.72900000 48.93770000 30.86890000 43.48060000 25.11890000 1067 71.95530000 67.02820000 42.33260000 38.50400000 41.58110000 19.21010000 1068 74.91480000 75.03630000 60.03980000 46.55130000 51.56420000 37.46910000 1069 57.22200000 57.43260000 48.48120000 26.20550000 28.77180000 23.04840000 1070 56.47110000 61.58410000 57.10560000 28.29060000 32.25990000 32.11420000 1071 59.89240000 65.91280000 76.41330000 36.51310000 38.87970000 58.56050000 1072 68.55640000 71.36770000 77.73630000 44.79420000 47.16520000 61.51380000 1073 38.69770000 9.580920000 17.48050000 7.661210000 4.209140000 2.515450000 1074 47.84490000 8.665900000 24.98940000 12.37580000 6.523370000 5.262500000 1075 51.01810000 14.31190000 32.42770000 14.96700000 8.273710000 9.042100000 1076 18.36750000 16.75240000 9.869430000 1.868520000 1.995310000 0.812696000 1077 16.78490000 13.43950000 0.293121000 1.363370000 1.346780000 0.139189000 1078 20.69970000 8.889900000 10.80050000 2.037050000 1.293480000 0.861268000 1079 26.15500000 15.25910000 19.29830000 3.822320000 2.763660000 2.914670000 1080 28.03120000 25.76050000 18.14280000 4.897910000 5.167200000 2.845010000 1081 47.50740000 27.49490000 21.87920000 12.97260000 9.719560000 4.444510000 1082 54.69210000 29.34750000 43.86410000 19.62150000 13.34870000 17.37820000 1083 85.30040000 65.54370000 91.50410000 63.46400000 51.92930000 86.23890000 1084 85.45040000 76.21040000 91.46180000 66.48660000 61.74530000 87.26100000 1085 23.95110000 31.10190000 25.90290000 4.875660000 6.477710000 5.740090000 1086 25.95980000 67.63310000 40.18410000 13.35590000 29.09010000 16.47780000 1087 23.91450000 80.61570000 43.05940000 16.98160000 41.51500000 20.05540000 1088 24.72580000 81.64430000 75.65330000 24.73600000 45.61220000 58.31630000 1089 52.51370000 71.33880000 60.70370000 29.09540000 39.57290000 37.08800000 1090 71.48570000 94.15610000 67.90740000 51.85220000 72.37830000 49.80150000 1091 27.85570000 17.62840000 8.224620000 3.954470000 3.199240000 0.725583000 1092 29.11680000 13.90580000 9.583770000 4.174350000 2.833800000 0.842017000 1093 27.88110000 35.36180000 7.380250000 5.423040000 8.193740000 1.202530000 1094 34.13640000 47.20200000 7.280700000 9.043850000 14.85640000 1.921860000 1095 41.05730000 91.79880000 9.073930000 23.60870000 56.20770000 6.742620000 1096 14.64190000 31.28440000 17.97880000 2.715980000 5.478510000 2.864660000 1097 12.05970000 43.63340000 22.63910000 4.262200000 10.69530000 4.945480000 1098 6.580720000 50.84720000 25.37500000 5.259550000 14.61830000 6.460540000 1099 11.99430000 53.06350000 38.26250000 7.423750000 16.75940000 13.76390000 1100 38.42890000 56.09630000 38.51660000 14.55140000 22.14620000 14.47200000 1101 43.98210000 80.41880000 37.34920000 23.11890000 44.59360000 16.18460000 1102 47.38070000 86.06390000 48.27900000 28.28900000 52.36750000 25.58850000 1103 54.03480000 91.29060000 75.20760000 40.13750000 63.04380000 59.45590000 1104 55.71030000 94.93930000 88.96360000 47.03360000 69.99640000 83.69830000 1105 10.30150000 12.73680000 23.85440000 1.393730000 1.197640000 4.333880000 1106 8.424340000 8.450160000 21.70410000 0.984942000 0.664283000 3.486850000 1107 11.67080000 63.68360000 20.62400000 7.974170000 23.75230000 5.722460000 1108 17.99060000 88.37340000 28.19140000 16.62610000 48.95030000 11.56930000 1109 17.60960000 86.13200000 38.83730000 16.97750000 46.76850000 17.53280000 1110 53.64000000 85.43210000 62.31630000 34.43190000 54.59030000 40.71850000 1111 54.48280000 94.32230000 64.28980000 38.60720000 65.83530000 44.44460000 1112 30.67120000 57.23440000 24.03900000 10.54420000 20.92570000 6.584530000 1113 56.09960000 56.98680000 23.36670000 22.33190000 26.86150000 6.861000000 1114 65.99490000 60.12320000 58.76050000 35.02760000 34.75090000 34.17800000 1115 40.25700000 7.888130000 29.77260000 9.177040000 4.779760000 7.294090000 1116 62.80480000 9.695890000 40.21160000 23.38280000 12.07710000 14.38120000 1117 72.99060000 6.636740000 49.32860000 32.88340000 16.63160000 22.32290000 1118 91.17870000 16.08310000 54.18890000 52.29690000 27.35520000 28.09530000 1119 93.79440000 13.64950000 76.74500000 60.84080000 30.82080000 57.81970000 1120 91.82010000 9.210740000 39.51020000 50.34290000 25.95580000 15.13730000 1121 90.38770000 45.89260000 39.93160000 52.02390000 36.12350000 16.60200000 1122 43.04280000 34.88580000 19.20570000 11.36340000 11.04720000 3.752570000 1123 72.20130000 36.23020000 17.59950000 30.57750000 21.41940000 4.249780000 1124 87.50170000 53.35740000 18.88290000 48.14020000 38.12220000 6.325390000 1125 28.50360000 21.54260000 4.012840000 4.299090000 4.032070000 0.496618000 1126 37.05230000 20.61310000 10.60830000 7.207720000 5.350000000 1.237030000 1127 47.68900000 23.39570000 9.957540000 12.19540000 8.453340000 1.440510000 1128 62.88330000 60.36450000 16.74330000 27.27560000 31.54070000 5.249410000 1129 73.56560000 68.43630000 18.68520000 37.88750000 42.56940000 6.922290000 1130 77.85270000 70.42280000 59.48850000 47.84080000 48.56100000 36.45780000 1131 77.23790000 71.04320000 93.54770000 57.68000000 52.92830000 90.46530000 1132 8.841600000 23.59500000 15.60620000 1.369340000 2.889310000 1.975660000 1133 9.564680000 28.80220000 10.95680000 1.677100000 4.289790000 1.239050000 1134 78.93290000 73.22900000 37.90260000 45.85690000 50.18120000 16.90550000 1135 92.48360000 83.20250000 43.24560000 63.92650000 68.09820000 22.67890000 1136 95.25070000 88.63910000 79.25180000 77.33620000 79.35110000 67.28990000 1137 67.99460000 52.58810000 42.56470000 32.08160000 29.14540000 18.02550000 1138 71.92330000 55.40260000 64.15870000 40.09200000 34.35990000 40.58830000 1139 77.15400000 54.78190000 71.58010000 46.56240000 37.11790000 50.92520000 1140 32.08580000 26.74410000 52.89560000 10.39290000 7.746450000 25.04080000 1141 34.97130000 26.01710000 63.25120000 13.55440000 8.946230000 36.83280000 1142 56.02060000 26.54470000 76.45040000 27.55660000 15.87930000 56.05590000 1143 56.31460000 29.31480000 87.29430000 31.52000000 18.21620000 74.75960000 1144 39.06010000 41.31990000 52.83390000 14.57900000 14.59390000 25.72130000 1145 45.71340000 41.20920000 57.03770000 18.42720000 16.43530000 30.32500000 1146 47.56000000 49.33960000 57.12040000 20.66590000 21.26420000 30.94980000 1147 57.54090000 49.99780000 64.25450000 28.25870000 25.32400000 39.81390000 1148 71.92030000 79.04230000 65.79880000 46.49240000 54.80150000 45.00520000 1149 73.09510000 82.20770000 76.41350000 51.42290000 59.86490000 60.80950000 1150 67.73790000 44.58780000 33.28030000 29.30110000 23.91330000 11.16140000 1151 80.53170000 48.96350000 33.58560000 41.38970000 32.19970000 12.14480000 1152 83.63770000 49.35270000 51.93650000 47.31370000 35.13070000 26.78590000 1153 84.36390000 54.77680000 60.34920000 50.81590000 39.63470000 36.38640000 1154 23.08950000 9.168460000 53.52370000 7.153270000 3.415540000 25.21720000 1155 31.82100000 13.20110000 62.65560000 11.59590000 5.819640000 35.75360000 1156 33.47570000 8.491930000 73.91580000 14.96050000 6.828920000 51.26810000 1157 36.06520000 33.25030000 86.86720000 21.57830000 14.24950000 73.64540000 1158 43.55550000 46.80520000 92.22530000 28.51690000 22.89480000 84.72880000 1159 12.46200000 12.63250000 43.49030000 3.803170000 2.174110000 15.98550000 1160 11.02450000 8.828220000 48.89660000 4.442870000 2.095120000 20.60670000 1161 13.01340000 13.26100000 59.58720000 6.896310000 3.484020000 31.86060000 1162 17.06460000 23.16970000 67.63020000 9.887940000 6.310450000 42.27910000 1163 29.56100000 30.77540000 75.27230000 15.41960000 10.76720000 53.78860000 1164 63.71540000 55.05740000 91.72800000 41.96120000 34.14580000 84.88760000 1165 85.65840000 16.52450000 26.73580000 42.41930000 22.76670000 7.504910000 1166 86.85300000 50.00140000 26.77680000 47.37820000 35.88690000 8.987040000 1167 87.79190000 65.34370000 28.08150000 51.74250000 47.40190000 10.87070000 1168 45.68050000 29.74920000 55.90320000 16.82320000 11.76430000 28.56330000 1169 60.04770000 34.02720000 61.10820000 26.89000000 18.09440000 35.09660000 1170 60.98920000 44.85640000 66.49980000 30.29480000 23.85170000 42.53680000 1171 40.03060000 33.70950000 55.43530000 14.54080000 11.76760000 28.09180000 1172 42.13150000 37.40550000 78.73470000 21.87620000 16.10880000 59.80830000 1173 49.57700000 38.31730000 92.17250000 30.30790000 20.25620000 84.29360000 1174 30.15450000 3.160910000 41.55150000 6.867090000 3.252060000 14.56440000 1175 28.75900000 10.95570000 94.85030000 20.61900000 9.104930000 88.47440000 1176 30.62320000 29.29650000 94.58850000 22.17230000 13.07990000 88.38590000 1177 69.23660000 81.83510000 93.12850000 53.72540000 60.05210000 90.51230000 1178 46.30890000 33.57390000 42.36550000 15.13870000 12.29840000 16.13160000 1179 56.50670000 37.88660000 51.46480000 22.99720000 17.64250000 24.60650000 1180 71.53880000 47.33510000 56.97460000 36.65340000 28.53100000 31.42370000 1181 80.30610000 47.94190000 64.44770000 46.44840000 33.67640000 40.79280000 1182 93.61930000 52.92670000 63.71360000 61.44980000 43.99700000 40.86450000 1183 70.71790000 59.08130000 42.75720000 35.65490000 34.75940000 18.78270000 1184 79.85530000 65.02390000 41.99560000 45.15720000 43.59290000 19.09720000 1185 88.47540000 65.10190000 48.64700000 55.13440000 48.66850000 25.13530000 1186 90.30580000 87.51580000 63.66040000 66.89510000 73.33860000 44.14610000 1187 32.76730000 25.08190000 16.70300000 6.211800000 5.699600000 2.505970000 1188 31.39350000 46.20250000 14.03530000 8.158960000 13.90900000 2.825480000 1189 54.09420000 49.24700000 11.17970000 18.99110000 20.97170000 2.988660000 1190 58.25820000 91.34330000 30.47210000 34.15920000 61.02010000 13.87890000 1191 24.88150000 79.43770000 13.25910000 14.11050000 39.29580000 5.551990000 1192 27.09240000 93.28280000 10.75640000 19.32560000 55.57530000 6.953820000 1193 25.33440000 90.02400000 53.86520000 22.36790000 53.16970000 31.16710000 1194 91.32690000 92.23860000 84.28230000 75.69480000 82.04650000 76.18620000 1195 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1196 39.50540000 88.91260000 21.85900000 22.47260000 52.56800000 9.306970000 1197 39.07170000 92.87780000 57.36760000 28.61660000 59.30640000 35.55380000 1198 60.01800000 92.67600000 57.46130000 40.02570000 64.97110000 36.16710000 1199 14.64010000 35.05920000 10.71380000 2.832150000 6.747680000 1.473660000 1200 9.171140000 39.31350000 13.69830000 2.919890000 8.300550000 2.172840000 1201 63.47750000 81.96050000 25.49010000 34.13710000 51.82060000 10.46290000 1202 79.29500000 86.21220000 65.20550000 55.36140000 66.06050000 45.42640000 1203 78.97840000 92.70770000 72.85670000 59.40800000 74.55780000 56.99150000 1204 9.130410000 15.69240000 25.69780000 1.562470000 1.601280000 5.128020000 1205 5.183210000 15.56100000 30.78970000 1.807020000 1.657260000 7.553740000 1206 13.04290000 20.24650000 36.06820000 3.205350000 3.007100000 10.76610000 1207 10.62020000 76.30280000 44.75440000 13.86320000 36.10680000 20.83460000 1208 26.24820000 32.55710000 18.14760000 5.057750000 7.063290000 3.065310000 1209 25.97030000 38.28510000 14.13870000 5.474350000 9.229350000 2.336880000 1210 25.16120000 45.48760000 20.45190000 6.628790000 12.75460000 4.402230000 1211 27.55690000 50.31790000 30.11440000 8.828350000 16.13630000 8.797110000 1212 8.835150000 16.39750000 10.16710000 0.748980000 1.369070000 0.795395000 1213 13.66890000 13.35640000 8.157150000 1.022490000 1.153510000 0.518715000 1214 15.84940000 10.24170000 13.23670000 1.347740000 1.023610000 1.255000000 1215 11.18610000 28.45480000 39.81490000 4.119280000 5.188030000 13.54720000 1216 12.14410000 47.07260000 41.20470000 6.774930000 13.32220000 15.47900000 1217 11.32040000 62.47680000 93.67780000 23.37540000 29.06380000 88.39870000 1218 6.425910000 37.98570000 55.96530000 7.596450000 9.635600000 28.50460000 1219 15.20690000 38.31760000 66.25380000 10.77750000 11.12510000 40.98620000 1220 13.78540000 41.26590000 77.40870000 14.10360000 13.62280000 57.48710000 1221 92.19500000 51.26660000 87.31760000 66.46900000 44.88950000 77.44840000 1222 91.66060000 15.37360000 11.59780000 48.08760000 25.64110000 3.213810000 1223 92.67250000 29.98530000 12.56520000 50.29350000 29.67000000 3.820420000 1224 90.83200000 38.10510000 22.88180000 49.63660000 31.87830000 6.902080000 1225 90.74900000 72.30750000 24.13230000 56.50480000 55.09770000 9.995290000 1226 56.63550000 46.79830000 41.43840000 22.72230000 21.41160000 16.38580000 1227 66.81670000 46.20660000 41.91530000 29.93730000 24.84760000 17.05240000 1228 26.18600000 6.464710000 10.22520000 3.197970000 1.763240000 0.816981000 1229 23.91890000 10.02360000 8.194600000 2.675990000 1.708710000 0.565529000 1230 50.00480000 34.37510000 11.01650000 14.48050000 12.52780000 2.038740000 1231 51.71850000 40.04660000 8.241370000 16.08460000 15.38990000 1.987700000 1232 51.53600000 41.90470000 21.22580000 16.78480000 16.43320000 4.951960000 1233 46.05800000 45.01200000 34.96790000 15.55630000 16.99340000 11.54400000 1234 45.91330000 56.53160000 34.80870000 17.55150000 24.00210000 12.23710000 1235 58.47850000 67.08150000 35.51400000 27.36500000 35.98160000 13.93970000 1236 6.032290000 10.32310000 9.720990000 0.357498000 0.531808000 0.642295000 1237 1.445090000 0.000000000 0.000000000 0.005178090 0.002669910 0.000242559 1238 9.545230000 6.900420000 11.51680000 0.543227000 0.409948000 0.889955000 1239 61.64000000 10.98160000 53.46470000 24.79170000 12.64680000 25.99910000 1240 61.56510000 11.22680000 62.85140000 26.77460000 13.45520000 36.68490000 1241 74.43670000 8.850800000 75.25160000 40.29020000 19.86670000 54.48770000 1242 91.83880000 8.729430000 90.56330000 63.04580000 31.00670000 81.98440000 1243 90.69760000 25.59420000 88.99450000 62.01740000 32.94790000 79.23820000 1244 70.85270000 14.63730000 25.75350000 28.25490000 15.23540000 6.387020000 1245 95.00570000 11.24170000 32.76630000 53.29630000 27.72810000 10.99280000 1246 44.42260000 54.06440000 15.46640000 14.79030000 21.33850000 3.916020000 1247 46.10840000 73.83320000 17.20330000 20.42180000 37.76730000 6.185110000 1248 52.02690000 91.01190000 18.11520000 29.22720000 58.23890000 8.701950000 1249 51.27930000 95.36780000 48.46140000 33.81760000 64.89420000 27.14090000 1250 12.65600000 22.77170000 1.832020000 1.331270000 2.739180000 0.316590000 1251 12.27770000 75.89340000 16.74850000 11.05730000 34.64370000 5.827740000 1252 55.18720000 76.29620000 12.50180000 26.03100000 42.72410000 5.653020000 1253 54.57130000 83.88460000 17.20850000 28.22140000 50.62990000 7.582610000 1254 68.64690000 87.77040000 13.37960000 39.36690000 60.17860000 7.674760000 1255 73.79500000 92.11910000 29.53520000 46.33820000 68.12830000 14.06690000 1256 52.55090000 69.40190000 35.70920000 24.27470000 36.10120000 14.11730000 1257 52.22370000 80.60010000 44.27090000 28.50160000 47.41940000 21.56250000 1258 8.769980000 17.79310000 8.023490000 0.762890000 1.578250000 0.557487000 1259 4.953930000 13.89210000 9.770530000 0.432469000 0.902372000 0.691081000 1260 9.893890000 13.34170000 8.532520000 0.661092000 0.964717000 0.542873000 1261 10.51890000 17.99590000 46.59650000 4.344040000 3.057510000 18.66700000 1262 17.69620000 27.63300000 60.29100000 8.560750000 6.840890000 33.05500000 1263 16.94630000 34.57990000 71.54030000 11.96900000 10.27470000 48.19700000 1264 18.96400000 33.14700000 78.51580000 14.18170000 10.72180000 58.92710000 1265 31.13500000 42.48050000 80.01420000 18.78000000 16.44040000 61.98910000 1266 18.21700000 24.09750000 44.86050000 5.403220000 4.737830000 17.37740000 1267 64.83020000 24.88000000 62.95890000 29.90790000 17.12880000 37.20530000 1268 22.28990000 15.58370000 15.68830000 2.756170000 2.275630000 1.904940000 1269 45.60680000 10.51680000 14.01260000 10.63960000 5.832540000 1.846280000 1270 63.54420000 45.42780000 9.894110000 24.66390000 22.07950000 2.855070000 1271 64.92660000 53.80540000 12.63190000 27.25330000 27.63310000 3.900790000 1272 69.61560000 53.96260000 24.49130000 31.63500000 29.90430000 7.530740000 1273 35.83370000 36.12080000 7.368190000 8.073090000 9.818580000 1.355650000 1274 45.92020000 47.01600000 11.75950000 14.11310000 17.36920000 2.726950000 1275 52.24020000 58.58680000 10.77440000 19.69420000 26.54340000 3.566850000 1276 61.39490000 63.38880000 7.177600000 26.59030000 33.21190000 3.819460000 1277 78.96440000 68.82060000 9.484850000 42.57080000 45.31240000 5.272140000 1278 78.44300000 77.98420000 14.33270000 44.81230000 53.84600000 7.057140000 1279 91.19070000 78.12900000 71.17440000 66.77690000 64.29730000 53.23920000 1280 20.90540000 16.49570000 26.01780000 3.172130000 2.533270000 5.352210000 1281 39.50190000 16.55850000 46.47950000 11.32480000 6.454470000 18.86920000 1282 44.03160000 13.52630000 76.94360000 20.29890000 9.896600000 56.23200000 1283 39.81180000 8.571190000 59.81080000 13.76950000 6.636460000 32.39780000 1284 84.74330000 11.66820000 65.81160000 47.73740000 24.21880000 41.43990000 1285 69.80550000 38.30270000 41.33750000 31.10580000 22.16940000 16.28710000 1286 70.54370000 46.51740000 49.31450000 34.19530000 27.04950000 23.50700000 1287 87.40430000 53.20950000 48.47530000 51.35360000 39.31080000 23.93810000 1288 49.50640000 43.08670000 28.70740000 16.40950000 16.66710000 8.055940000 1289 50.80460000 79.17930000 33.57180000 25.81700000 44.93130000 13.82770000 1290 51.39060000 91.37300000 36.62610000 30.62060000 59.14710000 17.30650000 1291 35.64080000 62.94880000 39.32240000 15.08550000 26.71050000 15.56000000 1292 34.59120000 81.07140000 40.09530000 19.80240000 43.43190000 18.00000000 1293 14.99920000 90.60300000 17.39530000 16.22490000 51.11310000 7.847490000 1294 13.64840000 94.16690000 68.84680000 25.26000000 58.65020000 49.84390000 1295 11.91170000 32.21180000 30.48240000 3.451950000 6.022310000 7.879680000 1296 29.41930000 38.57320000 30.61750000 7.588790000 10.29490000 8.393540000 1297 27.72560000 46.10830000 33.45390000 8.507640000 13.87830000 10.36820000 1298 28.86580000 46.98010000 46.61490000 10.78720000 15.25080000 20.01900000 1299 42.42870000 29.45310000 33.29490000 11.68940000 9.448740000 9.717190000 1300 50.36490000 28.75230000 36.01070000 15.94860000 11.42190000 11.54140000 1301 72.72330000 31.69730000 54.48720000 35.05930000 21.75350000 27.98190000 1302 87.12920000 30.14860000 56.52130000 49.29090000 28.60030000 30.76630000 1303 12.96800000 5.956830000 15.04700000 0.975341000 0.576670000 1.583480000 1304 7.501650000 7.393930000 15.49070000 0.565571000 0.428600000 1.672590000 1305 6.723230000 10.26800000 17.13780000 0.665527000 0.654358000 2.103240000 1306 10.42100000 11.51050000 15.52470000 0.871917000 0.871294000 1.728000000 1307 15.49200000 16.17700000 23.15580000 2.046400000 1.935870000 4.144730000 1308 32.38240000 35.35270000 30.56050000 8.103840000 9.419500000 8.254810000 1309 52.68810000 55.42680000 40.35110000 21.71650000 25.42340000 16.06090000 1310 78.32600000 54.85160000 42.13490000 41.46640000 35.24780000 18.28010000 1311 85.70830000 72.65310000 56.71780000 55.68060000 54.41760000 33.90670000 1312 94.09450000 73.27900000 59.44700000 65.80700000 60.07230000 37.51320000 1313 93.58060000 75.46770000 73.37450000 69.35920000 63.29000000 56.31620000 1314 92.95650000 80.54440000 81.07550000 72.50720000 69.04980000 69.18330000 1315 18.15090000 10.24400000 26.85630000 2.520770000 1.533310000 5.612650000 1316 18.73630000 8.354730000 33.28360000 3.203790000 1.684620000 8.918050000 1317 19.23750000 54.82350000 33.13050000 8.141760000 18.18270000 10.68760000 1318 15.67470000 81.65830000 57.40660000 18.41470000 42.90180000 33.82000000 1319 11.53090000 93.54780000 56.72120000 21.92910000 56.59400000 34.61210000 1320 7.876390000 92.27990000 76.49510000 26.20440000 56.85920000 60.92180000 1321 39.89570000 95.12220000 76.02470000 34.56460000 64.26000000 60.93750000 1322 50.77190000 16.50740000 8.603450000 13.42730000 7.925370000 1.193040000 1323 77.06800000 23.57080000 9.693110000 33.40590000 19.42670000 2.402920000 1324 88.72860000 36.00490000 1.520690000 46.29910000 29.49550000 2.834250000 1325 90.79940000 84.91640000 29.92540000 60.91750000 68.36510000 14.09840000 1326 17.95040000 63.49350000 12.42460000 8.344120000 23.85930000 3.674570000 1327 15.84670000 68.67670000 77.20260000 19.77670000 32.23230000 59.25350000 1328 15.01770000 77.26650000 81.56220000 23.43520000 40.84440000 67.36890000 1329 13.65170000 45.61740000 63.51590000 10.96110000 14.31170000 37.82470000 1330 13.15350000 46.11520000 71.39760000 13.01900000 15.36610000 48.57010000 1331 29.41280000 48.60550000 70.70300000 16.48650000 18.36440000 47.87490000 1332 33.51320000 60.94600000 92.91400000 27.46520000 30.20300000 86.95470000 1333 51.34280000 71.38380000 91.89310000 37.77930000 43.00450000 86.29880000 1334 69.62050000 75.74830000 90.00610000 51.01080000 53.43900000 83.69170000 1335 77.45030000 77.66760000 91.67080000 59.06420000 59.15340000 87.46460000 1336 83.72200000 83.56000000 91.92140000 67.15560000 68.63550000 88.95260000 1337 16.25870000 21.67000000 28.96930000 2.938050000 3.213170000 6.793850000 1338 22.06160000 32.21860000 38.73780000 5.952100000 7.202720000 12.99700000 1339 22.08980000 67.47380000 54.99580000 14.94620000 29.50240000 29.68710000 1340 34.42860000 73.58140000 64.03490000 22.03890000 37.62580000 41.05130000 1341 51.03490000 76.50420000 69.07340000 31.77340000 44.91900000 48.47090000 1342 51.49260000 84.30860000 80.41720000 37.79820000 54.66850000 66.86380000 1343 9.508360000 51.06530000 56.80190000 9.983320000 16.64680000 30.20190000 1344 9.490390000 50.24050000 91.57180000 19.91510000 20.17540000 83.24670000 1345 12.89020000 56.46520000 92.00260000 21.58400000 24.44410000 84.56430000 1346 9.174510000 79.97060000 91.86680000 27.26760000 44.77420000 86.59330000 1347 18.29080000 92.55320000 100.0000000 35.84570000 61.15210000 105.1520000 1348 41.02610000 91.11760000 100.0000000 42.06960000 62.84570000 105.2670000 1349 5.592760000 25.20280000 27.78740000 2.123050000 3.530660000 6.276360000 1350 21.06350000 44.20430000 49.13240000 8.900790000 12.96280000 22.03180000 1351 18.28660000 50.25940000 63.18540000 12.31820000 17.26820000 37.73720000 1352 25.90520000 58.90460000 73.33180000 18.26480000 24.91870000 52.45690000 1353 25.71420000 63.19990000 88.07850000 23.90850000 30.06200000 77.69270000 1354 19.08130000 16.29610000 36.29000000 3.878240000 2.749120000 10.86900000 1355 32.49580000 11.51660000 36.62670000 7.095100000 3.877790000 11.17540000 1356 39.80460000 22.02580000 41.00310000 10.92070000 7.232630000 14.56360000 1357 50.89940000 24.63010000 54.85580000 18.93680000 11.62280000 27.40170000 1358 29.72410000 14.30290000 43.08490000 7.213190000 4.115950000 15.84490000 1359 29.45220000 39.13610000 60.27550000 12.46040000 12.46490000 33.64060000 1360 32.31430000 49.06050000 62.85810000 15.46280000 18.29310000 37.40740000 1361 39.10360000 58.94170000 68.18330000 21.22230000 26.62950000 45.25090000 1362 48.80240000 66.51530000 80.33860000 31.10330000 36.37970000 64.68950000 1363 56.44510000 69.19960000 94.14720000 41.13460000 42.96230000 90.72640000 1364 56.26050000 45.59420000 72.78940000 28.93680000 23.28950000 51.31900000 1365 63.39530000 47.81070000 92.01210000 40.49920000 29.56150000 84.92840000 1366 73.45580000 47.04330000 91.50570000 48.27940000 33.22810000 84.26320000 1367 22.60040000 8.984870000 22.44770000 2.987310000 1.724450000 3.847060000 1368 26.23120000 4.021030000 27.34470000 4.142340000 2.055500000 5.873090000 1369 53.81470000 10.23910000 43.08970000 17.84080000 9.211350000 16.30170000 1370 57.22910000 9.908640000 75.30890000 27.10350000 13.13790000 53.96640000 1371 64.03220000 10.82840000 90.79560000 36.99610000 17.71630000 81.22810000 1372 76.69410000 12.86650000 93.05480000 48.44490000 23.70640000 86.19840000 1373 11.88550000 18.84600000 56.63240000 6.395260000 4.028480000 28.59240000 1374 10.76430000 20.01440000 75.46160000 11.10060000 6.097730000 53.59370000 1375 14.15450000 20.64160000 90.57360000 16.49780000 8.410400000 79.98740000 1376 17.26880000 28.29890000 92.44160000 18.20050000 10.86460000 83.88900000 1377 16.12300000 34.81990000 91.28450000 18.26570000 12.86140000 81.85690000 1378 46.40720000 47.54030000 41.80600000 17.03950000 18.82770000 16.43830000 1379 91.44590000 72.92660000 41.12600000 59.30840000 56.82360000 19.79470000 1380 90.65480000 92.41510000 39.79110000 64.55780000 77.69900000 21.18190000 1381 60.47310000 32.10430000 8.346310000 20.68460000 15.02590000 1.895690000 1382 76.40460000 39.82520000 10.04790000 34.47920000 24.78350000 3.061050000 1383 91.88300000 49.82900000 9.494300000 51.99120000 38.28550000 4.329090000 1384 92.30020000 75.25750000 9.603930000 58.39310000 58.54970000 6.620880000 1385 93.41690000 92.04730000 8.217500000 65.19020000 77.91270000 8.622820000 1386 92.30620000 90.75000000 51.27420000 67.68020000 77.34290000 30.78810000 1387 39.24240000 33.27450000 24.72320000 9.891970000 9.727500000 5.560420000 1388 93.42810000 32.94850000 44.33580000 54.42420000 32.32480000 19.51160000 1389 95.86510000 35.85220000 70.07200000 63.11020000 37.11600000 48.54530000 1390 93.32770000 53.32790000 73.72400000 63.82810000 45.13740000 54.79710000 1391 92.51220000 71.65920000 78.14240000 68.45570000 59.57910000 63.29940000 1392 93.34950000 86.74050000 91.45720000 78.60580000 77.62630000 88.94270000 1393 27.82820000 22.06910000 23.59680000 4.916210000 4.360330000 4.556480000 1394 32.46850000 23.15500000 36.24980000 7.622880000 5.826700000 11.15230000 1395 40.50340000 34.56120000 42.83200000 12.61180000 11.30480000 16.41250000 1396 50.19540000 42.34380000 47.90000000 19.19900000 17.50090000 21.30280000 1397 64.14060000 65.37040000 49.04090000 32.92940000 37.39930000 24.47750000 1398 68.79370000 90.41100000 52.93340000 44.84370000 65.17960000 31.31770000 1399 78.10790000 92.33360000 53.69140000 53.85650000 71.82710000 32.74540000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 99.99690 108.8960 1 0.000000 77.02890 94.93270 27.23730 42.05040 92.39530 2 100.0000 0.000000 75.91840 67.94000 33.84370 56.78280 3 0.000000 0.000000 53.88990 4.832290 1.932840 25.45160 4 100.0000 68.59390 0.000000 65.77010 57.11770 5.786370 5 0.000000 45.14720 0.000000 3.227610 10.91310 1.229510 6 67.33170 0.000000 0.000000 24.16480 12.45980 1.131960 7 7.958970 7.632930 6.909270 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 99.9969 108.896 1 0.00000 100.000 100.000 37.3737 70.2602 106.194 2 100.000 0.00000 100.000 76.4924 37.2646 101.828 3 0.00000 0.00000 100.000 18.8203 7.52782 99.1264 4 100.000 100.000 0.00000 76.2255 92.4691 9.76917 5 0.00000 100.000 0.00000 18.5534 62.7324 7.06762 6 100.000 0.00000 0.00000 57.6721 29.7367 2.70155 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7749 23.7126 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s33-g97-m0-f1399-ceRGBv2.ti1000644 000765 000000 00000266607 12237536424 023050 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1200" CREATED "Sat Oct 19 13:06:35 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "96.415999 99.996948 82.488027" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "33" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1399 BEGIN_DATA 1 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 2 55.889900 53.359800 41.347400 20.925300 21.431600 10.597300 3 63.519700 62.162700 51.099400 29.024000 30.239100 16.727700 4 72.618400 73.553400 57.566600 40.649400 43.962100 22.432100 5 52.587400 52.329800 100.00000 30.667300 26.689000 77.090500 6 64.811300 52.183700 100.00000 39.187900 30.818500 77.081700 7 66.744800 73.657600 100.00000 45.409300 47.186900 78.836300 8 83.181200 90.623100 100.00000 68.057100 74.536500 80.972300 9 65.005400 76.483900 84.020500 39.877200 46.395500 51.968000 10 75.007600 82.728200 100.00000 55.965600 60.348900 79.886500 11 84.682000 83.504400 100.00000 67.341400 66.705600 79.985900 12 92.396700 93.624200 100.00000 81.672400 84.711200 81.429700 13 28.152700 30.965300 0.0000000 4.7676000 5.7622400 0.4502730 14 29.607100 38.927200 0.0000000 5.8420900 8.3381800 0.7202100 15 32.804800 48.746600 0.0000000 7.9390400 12.855100 1.1797200 16 48.981400 59.785200 0.0000000 16.395400 22.419000 1.8917700 17 70.359300 100.00000 19.309100 45.019300 73.641600 8.9187800 18 82.763000 100.00000 21.303100 58.388500 80.231700 9.3020300 19 0.0000000 9.3750000 0.0000000 0.1864620 0.6304730 0.0710392 20 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 21 4.1666700 4.1666700 4.1666700 0.4448580 0.4613810 0.3805950 22 1.0416700 1.0416700 1.0416700 0.1112150 0.1153450 0.0951488 23 2.0833300 2.0833300 2.0833300 0.2224290 0.2306900 0.1902980 24 9.3750000 0.0000000 0.0000000 0.6808740 0.3353490 0.0000000 25 53.125000 0.0000000 0.0000000 13.759000 6.7766900 7e-070000 26 56.250000 0.0000000 0.0000000 15.711000 7.7380700 8e-070000 27 59.375000 0.0000000 0.0000000 17.838600 8.7859900 9e-070000 28 62.500000 0.0000000 0.0000000 20.150400 9.9246200 1e-060000 29 65.625000 0.0000000 0.0000000 22.654300 11.157900 1.2e-0600 30 68.750000 0.0000000 0.0000000 25.357300 12.489100 1.3e-0600 31 71.875000 0.0000000 0.0000000 28.266800 13.922200 1.4e-0600 32 75.000000 0.0000000 0.0000000 31.391700 15.461200 1.6e-0600 33 78.125000 0.0000000 0.0000000 34.737600 17.109200 1.8e-0600 34 81.250000 0.0000000 0.0000000 38.313400 18.870400 2e-060000 35 84.375000 0.0000000 0.0000000 42.126800 20.748600 2.2e-0600 36 87.500000 0.0000000 0.0000000 46.185900 22.747800 2.4e-0600 37 90.625000 0.0000000 0.0000000 50.496400 24.870900 2.6e-0600 38 93.750000 0.0000000 0.0000000 55.067500 27.122200 2.8e-0600 39 96.875000 0.0000000 0.0000000 59.906900 29.505800 3.1e-0600 40 100.00000 0.0000000 52.128700 67.774400 33.597700 15.336900 41 100.00000 0.0000000 63.226200 69.350600 34.498300 24.118600 42 100.00000 26.693400 72.070400 71.856000 38.424600 33.469200 43 100.00000 44.505800 76.902300 74.528700 44.557400 39.851900 44 100.00000 45.773400 90.810100 78.318200 47.178500 60.123300 45 100.00000 56.839800 100.00000 83.018100 54.695400 77.383600 46 32.842200 18.821300 27.757500 6.0651500 4.4364800 4.2474600 47 47.637800 22.668100 45.764400 13.446600 8.6895600 11.679300 48 61.460500 36.043200 79.739600 28.608300 19.338100 43.174200 49 55.698800 55.763800 73.740300 25.861500 25.412900 36.657500 50 84.416700 100.00000 74.033300 66.338800 84.612700 42.179600 51 100.00000 100.00000 80.795600 90.723100 96.744200 50.770000 52 33.046900 65.138300 0.0000000 11.009100 23.025600 2.3216600 53 46.090200 70.709200 0.0000000 17.408400 30.057500 2.8333900 54 75.617300 100.00000 0.0000000 49.840900 75.986200 6.7840500 55 88.077500 100.00000 0.0000000 64.769300 83.338800 6.7840500 56 0.0000000 50.000000 0.0000000 3.2796900 11.089400 1.2495100 57 0.0000000 53.125000 0.0000000 3.7680000 12.740500 1.4355500 58 0.0000000 56.250000 0.0000000 4.3025500 14.548000 1.6392100 59 0.0000000 59.375000 0.0000000 4.8852100 16.518100 1.8611900 60 0.0000000 62.500000 0.0000000 5.5183200 18.658800 2.1024000 61 0.0000000 65.625000 0.0000000 6.2040300 20.977300 2.3636400 62 0.0000000 68.750000 0.0000000 6.9442600 23.480200 2.6456600 63 0.0000000 71.875000 0.0000000 7.7410500 26.174400 2.9492300 64 0.0000000 75.000000 0.0000000 8.5968100 29.067900 3.2752600 65 0.0000000 78.125000 0.0000000 9.5131100 32.166100 3.6243500 66 0.0000000 81.250000 0.0000000 10.492400 35.477300 3.9974400 67 0.0000000 84.375000 0.0000000 11.536700 39.008300 4.3953100 68 0.0000000 87.500000 0.0000000 12.648300 42.766900 4.8188100 69 0.0000000 90.625000 0.0000000 13.828800 46.758400 5.2685600 70 0.0000000 93.750000 0.0000000 15.080600 50.991200 5.7454800 71 56.630300 100.00000 23.074800 34.286300 68.366100 9.6777900 72 56.131400 100.00000 43.510200 35.275200 68.956800 17.005800 73 69.848100 100.00000 51.715400 46.865200 74.733600 21.843700 74 92.429300 100.00000 54.065300 73.904500 88.074200 23.466300 75 81.015600 62.190800 43.886100 45.360300 38.242100 12.493900 76 88.590500 82.692400 63.786100 63.048200 63.080100 28.811300 77 0.0000000 7.7260200 15.603500 0.4270490 0.6717480 1.5891500 78 0.0000000 0.0000000 15.625000 0.2753680 0.1573370 1.5342100 79 0.0000000 0.0000000 18.750000 0.3653650 0.2087590 2.0356200 80 0.0000000 9.1745500 25.632900 0.8101760 0.9743190 3.5691900 81 0.0000000 0.0000000 25.000000 0.5999780 0.3428100 3.3427700 82 0.0000000 0.0000000 34.375000 1.1128400 0.6358450 6.2001900 83 0.0000000 0.0000000 37.500000 1.3329400 0.7616000 7.4264300 84 0.0000000 0.0000000 40.625000 1.5805500 0.9030810 8.8060300 85 0.0000000 0.0000000 43.750000 1.8568500 1.0609500 10.345400 86 0.0000000 0.0000000 46.875000 2.1637600 1.2363100 12.055400 87 0.0000000 0.0000000 50.000000 2.5026500 1.4299400 13.943500 88 0.0000000 11.725300 51.329800 2.9000300 2.3399600 14.895900 89 0.0000000 0.0000000 53.125000 2.8752600 1.6428400 16.019500 90 0.0000000 0.0000000 56.250000 3.2831700 1.8759000 18.292100 91 0.0000000 0.0000000 59.375000 3.7277800 2.1299400 20.769300 92 0.0000000 0.0000000 62.500000 4.2108900 2.4059800 23.460900 93 0.0000000 0.0000000 65.625000 4.7341400 2.7049500 26.376200 94 0.0000000 0.0000000 68.750000 5.2989900 3.0276800 29.523200 95 0.0000000 0.0000000 71.875000 5.9070000 3.3750800 32.910800 96 0.0000000 0.0000000 75.000000 6.5600100 3.7481900 36.549000 97 0.0000000 0.0000000 78.125000 7.2592100 4.1477000 40.444600 98 0.0000000 0.0000000 81.250000 8.0064700 4.5746600 44.607900 99 0.0000000 0.0000000 84.375000 8.8033600 5.0299700 49.047700 100 0.0000000 0.0000000 87.500000 9.6515900 5.5146300 53.773700 101 0.0000000 0.0000000 90.625000 10.552400 6.0293200 58.792500 102 0.0000000 0.0000000 93.750000 11.507600 6.5751100 64.114500 103 0.0000000 0.0000000 96.875000 12.518900 7.1529400 69.749000 104 71.406500 23.991300 100.00000 42.134800 23.931700 75.982000 105 91.968500 24.515500 100.00000 66.776000 36.151600 75.993000 106 36.681600 0.0000000 35.542900 7.2824800 3.6808000 6.6409800 107 39.529500 33.008200 45.132300 10.464100 9.1897600 11.592400 108 11.458300 11.458300 11.458300 1.2784400 1.3259200 1.0937600 109 6.2500000 0.0000000 0.0000000 0.4500100 0.2216420 0.0000000 110 0.0000000 0.0000000 3.1250000 0.0470199 0.0268658 0.2619710 111 0.0000000 3.1250000 0.0000000 0.0616190 0.2083490 0.0234759 112 0.0000000 0.0000000 6.2500000 0.0940398 0.0537315 0.5239410 113 0.0000000 0.0000000 12.500000 0.2014790 0.1151190 1.1225400 114 0.0000000 0.0000000 9.3750000 0.1422840 0.0812970 0.7927340 115 3.1250000 3.1250000 3.1250000 0.3336440 0.3460350 0.2854470 116 6.2500000 6.2500000 6.2500000 0.6672870 0.6920710 0.5708930 117 9.3750000 9.3750000 9.3750000 1.0096200 1.0471200 0.8637740 118 14.583300 14.583300 14.583300 1.7670200 1.8326500 1.5117600 119 15.625000 15.625000 15.625000 1.9539600 2.0265300 1.6716900 120 16.666700 16.666700 16.666700 2.1531200 2.2330900 1.8420900 121 17.708300 17.708300 17.708300 2.3659900 2.4538600 2.0242000 122 18.750000 18.750000 18.750000 2.5925500 2.6888400 2.2180400 123 19.791700 19.791700 19.791700 2.8321300 2.9373200 2.4230100 124 20.833300 20.833300 20.833300 3.0867900 3.2014400 2.6408800 125 21.875000 21.875000 21.875000 3.3559300 3.4805700 2.8711400 126 22.916700 22.916700 22.916700 3.6402400 3.7754400 3.1143800 127 23.958300 23.958300 23.958300 3.9412000 4.0875800 3.3718600 128 25.000000 25.000000 25.000000 4.2573300 4.4154400 3.6423200 129 26.041700 26.041700 26.041700 4.5901000 4.7605700 3.9270200 130 27.083300 27.083300 27.083300 4.9395100 5.1229600 4.2259600 131 28.125000 28.125000 28.125000 5.3070400 5.5041400 4.5404000 132 29.166700 29.166700 29.166700 5.6912100 5.9025800 4.8690700 133 30.208300 30.208300 30.208300 6.0949600 6.3213300 5.2145000 134 31.250000 31.250000 31.250000 6.5163700 6.7584000 5.5750400 135 32.291700 32.291700 32.291700 6.9568200 7.2152000 5.9518600 136 33.333300 33.333300 33.333300 7.4163900 7.6918400 6.3450400 137 34.375000 34.375000 34.375000 7.8965100 8.1897900 6.7558000 138 35.416700 35.416700 35.416700 8.3962200 8.7080600 7.1833200 139 36.458300 36.458300 36.458300 8.9169400 9.2481200 7.6288200 140 37.500000 37.500000 37.500000 9.4582500 9.8095400 8.0919400 141 38.541700 38.541700 38.541700 10.022500 10.394700 8.5746800 142 39.583300 39.583300 39.583300 10.606900 11.000800 9.0746600 143 40.625000 40.625000 40.625000 11.215300 11.631800 9.5951600 144 41.666700 41.666700 41.666700 11.845100 12.285000 10.134000 145 42.708300 42.708300 42.708300 12.499400 12.963600 10.693800 146 43.750000 43.750000 43.750000 13.175800 13.665200 11.272500 147 44.791700 44.791700 44.791700 13.877700 14.393200 11.873000 148 45.833300 45.833300 45.833300 14.603500 15.145800 12.493900 149 46.875000 46.875000 46.875000 15.353600 15.923900 13.135700 150 47.916700 47.916700 47.916700 16.129500 16.728500 13.799500 151 48.958300 48.958300 48.958300 16.930500 17.559400 14.484800 152 50.000000 50.000000 50.000000 17.758300 18.417800 15.193000 153 51.041700 51.041700 51.041700 18.613200 19.304500 15.924400 154 52.083300 52.083300 52.083300 19.494000 20.218100 16.678000 155 53.125000 53.125000 53.125000 20.402300 21.160000 17.455000 156 54.166700 54.166700 54.166700 21.339200 22.131800 18.256600 157 55.208300 55.208300 55.208300 22.302800 23.131100 19.081000 158 56.250000 56.250000 56.250000 23.296700 24.161900 19.931300 159 57.291700 57.291700 57.291700 24.318100 25.221300 20.805200 160 58.333300 58.333300 58.333300 25.370000 26.312200 21.705100 161 59.375000 59.375000 59.375000 26.451600 27.434000 22.630500 162 60.416700 60.416700 60.416700 27.563900 28.587700 23.582100 163 61.458300 61.458300 61.458300 28.706600 29.772800 24.559700 164 62.500000 62.500000 62.500000 29.879600 30.989400 25.563300 165 63.541700 63.541700 63.541700 31.085900 32.240500 26.595300 166 64.583300 64.583300 64.583300 32.322600 33.523000 27.653300 167 65.625000 65.625000 65.625000 33.592500 34.840100 28.739800 168 66.666700 66.666700 66.666700 34.895700 36.191800 29.854800 169 67.708300 67.708300 67.708300 36.230800 37.576400 30.997000 170 68.750000 68.750000 68.750000 37.600500 38.997100 32.168900 171 69.791700 69.791700 69.791700 39.003600 40.452200 33.369300 172 70.833300 70.833300 70.833300 40.442400 41.944400 34.600200 173 71.875000 71.875000 71.875000 41.914900 43.471600 35.860000 174 72.916700 72.916700 72.916700 43.422800 45.035500 37.150100 175 73.958300 73.958300 73.958300 44.967300 46.637400 38.471500 176 75.000000 75.000000 75.000000 46.548500 48.277300 39.824200 177 76.041700 76.041700 76.041700 48.165000 49.953800 41.207200 178 77.083300 77.083300 77.083300 49.818500 51.668800 42.621900 179 78.125000 78.125000 78.125000 51.509900 53.423000 44.068900 180 79.166700 79.166700 79.166700 53.239000 55.216300 45.548200 181 80.208300 80.208300 80.208300 55.006600 57.049500 47.060500 182 81.250000 81.250000 81.250000 56.812300 58.922300 48.605400 183 82.291700 82.291700 82.291700 58.657900 60.836500 50.184300 184 83.333300 83.333300 83.333300 60.542700 62.791200 51.796800 185 84.375000 84.375000 84.375000 62.466800 64.786900 53.443000 186 85.416700 85.416700 85.416700 64.432100 66.825100 55.124400 187 86.458300 86.458300 86.458300 66.437800 68.905300 56.840400 188 87.500000 87.500000 87.500000 68.485700 71.029300 58.592500 189 88.541700 88.541700 88.541700 70.573700 73.194800 60.378800 190 89.583300 89.583300 89.583300 72.704400 75.404600 62.201700 191 90.625000 90.625000 90.625000 74.877600 77.658600 64.061000 192 91.666700 91.666700 91.666700 77.093400 79.956700 65.956800 193 92.708300 92.708300 92.708300 79.353300 82.300600 67.890200 194 93.750000 93.750000 93.750000 81.655800 84.688500 69.860000 195 94.791700 94.791700 94.791700 84.002700 87.122600 71.867900 196 95.833300 95.833300 95.833300 86.395200 89.604000 73.914800 197 22.496700 86.730000 0.0000000 14.744900 42.990200 4.7120600 198 52.995300 87.078300 0.0000000 26.175500 48.984200 4.7600900 199 67.958500 79.529000 0.0000000 34.598300 45.769500 3.7889800 200 71.936700 78.485600 69.327200 43.357800 49.579000 33.796900 201 89.091100 78.063000 74.178600 64.226100 59.562800 39.184500 202 28.285900 31.511800 21.707600 5.3085300 6.1859800 3.0666400 203 82.138900 34.439500 21.619800 41.300900 24.607200 3.1396200 204 100.00000 78.123000 22.453800 75.029200 64.471900 6.3822600 205 100.00000 91.555100 38.785700 80.646800 80.835300 13.382700 206 0.0000000 34.375000 0.0000000 1.4583700 4.9310900 0.5556160 207 0.0000000 37.500000 0.0000000 1.7468000 5.9063500 0.6655040 208 0.0000000 100.00000 0.0000000 17.806600 60.208400 6.7840500 209 0.0000000 100.00000 85.697800 26.962700 65.439900 57.796900 210 0.0000000 100.00000 100.00000 31.394400 67.972000 82.488000 211 12.453100 0.0000000 15.729100 1.2374000 0.6313710 1.5489700 212 18.650100 0.0000000 57.738800 5.2234200 2.8478500 19.445800 213 100.00000 52.346600 60.677700 72.588100 46.582000 23.252300 214 34.375000 0.0000000 0.0000000 5.3253000 2.6228500 3e-070000 215 37.500000 0.0000000 0.0000000 6.3785200 3.1415900 3e-070000 216 53.730000 0.0000000 49.370500 16.555700 8.3458300 13.548000 217 54.068300 74.114700 59.180900 26.377300 37.398600 23.789900 218 14.203000 44.837400 0.0000000 3.7162300 9.2506700 0.9786470 219 18.709900 59.763100 0.0000000 6.7033800 17.632800 1.8901100 220 25.216300 84.783600 100.00000 28.183100 48.687100 80.153200 221 23.802500 93.695500 100.00000 31.272700 59.972700 81.440900 222 39.905700 0.0000000 11.084000 7.4517200 3.6838100 0.9639940 223 40.625000 0.0000000 0.0000000 7.5634400 3.7252000 4e-070000 224 43.750000 0.0000000 0.0000000 8.8856000 4.3763900 5e-070000 225 60.601700 59.916400 0.0000000 23.715300 26.099000 1.9016300 226 59.979800 68.301800 0.0000000 25.106600 32.109200 2.6039200 227 13.541700 13.541700 13.541700 1.5923100 1.6514500 1.3622900 228 7.2916700 7.2916700 7.2916700 0.7785020 0.8074160 0.6660420 229 12.500000 0.0000000 0.0000000 0.9641380 0.4748640 0.0000000 230 8.3333300 8.3333300 8.3333300 0.8897170 0.9227610 0.7611910 231 71.395600 23.592300 39.673500 30.017000 16.947700 8.6385400 232 75.430900 43.451600 82.525200 42.562100 28.544100 47.299000 233 41.204100 24.459200 100.00000 22.140900 14.158600 75.991800 234 56.665300 22.809600 100.00000 30.238000 17.890600 75.958000 235 82.800600 69.138500 100.00000 60.803700 51.355800 78.386200 236 0.0000000 21.875000 0.0000000 0.6197900 2.0956600 0.2361310 237 10.254100 30.701900 0.0000000 1.9160200 4.3000400 0.4426600 238 0.0000000 31.250000 0.0000000 1.2034800 4.0692500 0.4585070 239 27.176000 34.436100 45.866500 6.8777600 7.7780200 12.042400 240 50.581400 38.733100 85.537800 23.278900 17.587100 51.485300 241 83.775400 0.0000000 28.848700 42.161200 20.827400 4.3746900 242 84.003200 0.0000000 66.741800 46.591600 23.336400 27.474000 243 85.873000 0.0000000 80.887000 51.959000 26.215400 44.110600 244 88.152200 0.0000000 100.00000 60.652000 30.944000 75.704000 245 0.0000000 0.0000000 21.875000 0.4729460 0.2702270 2.6350100 246 0.0000000 0.0000000 28.125000 0.7479130 0.4273350 4.1669800 247 14.029800 93.825800 58.918600 19.900300 53.744300 26.151800 248 21.147100 100.00000 69.892200 25.457500 64.411600 37.517000 249 0.0000000 43.750000 0.0000000 2.4333800 8.2278400 0.9270810 250 11.346100 42.717600 8.7616800 3.2936300 8.3042600 1.6162400 251 0.0000000 52.263000 22.828800 4.1382900 12.560700 4.2215400 252 100.00000 0.0000000 0.0000000 65.021600 32.024900 3.3e-0600 253 100.00000 0.0000000 13.749900 65.250800 32.155800 1.2767900 254 100.00000 88.498900 92.264400 89.086400 82.353600 66.506300 255 100.00000 92.893800 100.00000 93.339800 89.595400 81.316000 256 96.875000 96.875000 96.875000 88.831800 92.131000 75.999400 257 97.916700 97.916700 97.916700 91.313800 94.705300 78.122900 258 0.0000000 15.625000 0.0000000 0.3608660 1.2201800 0.1374850 259 0.0000000 18.750000 0.0000000 0.4788060 1.6189600 0.1824180 260 0.0000000 16.488300 10.524700 0.5536200 1.4155600 1.0539400 261 0.0000000 61.546800 43.119500 7.1187000 19.015600 12.048800 262 0.0000000 76.483900 52.331500 11.801500 32.099600 18.912000 263 34.708600 77.604800 71.926000 20.705100 37.692200 36.533200 264 23.468600 0.0000000 79.483400 10.139500 5.5914400 42.221300 265 26.749900 0.0000000 100.00000 16.842400 9.3666400 75.704000 266 44.477000 0.0000000 100.00000 22.802000 12.301900 75.704000 267 66.853900 0.0000000 49.581400 26.148200 13.072300 13.680100 268 89.198400 58.359600 48.966200 55.573800 41.108900 15.085300 269 100.00000 85.133900 58.185600 80.376200 73.955600 24.297900 270 100.00000 100.00000 65.982400 87.625000 94.974000 33.508900 271 57.810700 43.423000 29.276500 19.952400 16.805400 5.4135900 272 73.636700 66.479000 30.357200 37.269200 36.914800 7.2700300 273 100.00000 69.859800 89.273500 82.398500 62.242500 59.336300 274 100.00000 83.285700 100.00000 89.774700 77.541200 79.957800 275 55.030500 40.833700 47.726300 19.275900 15.721000 13.349900 276 66.302900 41.187500 61.137500 29.352900 20.935300 23.073900 277 88.635800 100.00000 63.496300 69.902700 86.212000 31.150300 278 21.200700 29.316200 15.579200 3.4800100 4.8026100 1.9322100 279 23.718500 49.176000 25.176600 6.3763500 12.311900 4.5898600 280 35.745000 54.443900 25.710300 10.391000 16.687300 5.0383500 281 54.186000 68.176200 23.529800 21.744600 30.407500 5.5881900 282 39.662200 38.185200 0.0000000 8.9985500 9.6750100 0.6914830 283 58.097400 37.973100 0.0000000 18.740800 14.412000 0.6833990 284 71.320900 39.673200 0.0000000 29.704100 20.316300 0.7499410 285 100.00000 53.984000 39.216100 70.397400 46.083900 9.6543500 286 100.00000 57.088900 51.916400 72.203000 48.643900 16.890900 287 100.00000 65.686600 64.239900 75.737000 55.619300 27.425500 288 100.00000 76.833600 64.054900 78.614900 65.437400 28.361100 289 33.811100 0.0000000 55.823100 8.3732000 4.3783100 17.969200 290 48.123500 0.0000000 70.665300 16.649800 8.6472400 31.570000 291 67.702700 0.0000000 73.644000 30.699600 15.614800 34.938500 292 71.587600 47.209200 91.838900 41.788400 29.765400 61.921000 293 16.865700 6.4701400 24.311100 2.1765400 1.4853300 3.2253700 294 26.471500 33.046900 53.604400 7.4730900 7.8005400 16.868100 295 29.115300 33.720300 68.631000 10.504000 9.6402000 29.933700 296 0.0000000 25.830400 23.580700 1.3747800 3.1317700 3.3254800 297 0.0000000 36.490800 25.642200 2.2784800 5.9378600 4.1307300 298 0.0000000 74.422600 26.913100 9.1220400 28.910800 7.0462000 299 0.0000000 100.00000 25.663000 18.436100 60.568100 10.291400 300 43.446400 100.00000 23.328600 27.087200 64.821100 9.7347900 301 58.196900 48.365900 0.0000000 20.057800 18.666700 1.1589800 302 69.278500 50.002800 0.0000000 29.114900 23.815100 1.2496700 303 73.076300 62.960900 0.0000000 35.058700 33.491100 2.1397100 304 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 305 5.2083300 5.2083300 5.2083300 0.5560730 0.5767260 0.4757440 306 12.500000 12.500000 12.500000 1.4296500 1.4827500 1.2231300 307 30.088400 77.092600 22.364400 13.772800 33.408500 6.2452700 308 56.941600 78.851200 35.334600 27.078700 41.551300 10.269800 309 65.524300 86.287700 57.452100 38.229200 54.368900 23.871700 310 82.454400 100.00000 92.793900 68.770800 86.193400 69.238000 311 0.0000000 20.898200 52.118200 3.3246300 3.5100700 15.548200 312 0.0000000 24.602200 100.00000 14.351300 10.345500 75.994900 313 0.0000000 39.135800 100.00000 15.499900 14.229000 76.432500 314 28.435400 44.158700 100.00000 19.726000 17.961400 76.650200 315 98.958300 98.958300 98.958300 93.841400 97.326700 80.285400 316 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 317 68.989800 0.0000000 28.102100 26.320000 13.022200 4.1605000 318 80.826700 20.108300 70.955800 44.076500 23.711400 32.093700 319 84.058300 67.243600 83.758500 56.951800 47.740800 50.656500 320 0.0000000 40.625000 0.0000000 2.0713000 7.0035600 0.7891330 321 0.0000000 46.875000 0.0000000 2.8355900 9.5878100 1.0803200 322 0.0000000 96.875000 0.0000000 16.405900 55.472300 6.2504000 323 26.369100 100.00000 50.198700 23.500500 63.211900 20.853700 324 48.278500 100.00000 56.699200 32.214400 67.568300 25.419400 325 0.0000000 12.500000 0.0000000 0.2640350 0.8927680 0.1005940 326 0.0000000 6.2500000 0.0000000 0.1232380 0.4166980 0.0469518 327 10.416700 10.416700 10.416700 1.1388100 1.1811100 0.9743020 328 0.0000000 42.766900 52.563200 5.1210000 9.4317200 16.514000 329 0.0000000 50.390400 54.357400 6.3700900 13.019900 18.163500 330 43.151600 100.00000 70.963400 32.153600 67.726100 38.681500 331 48.261500 100.00000 81.374200 36.898100 70.245200 51.563700 332 0.0000000 25.000000 0.0000000 0.7862640 2.6585500 0.2995550 333 0.0000000 28.125000 0.0000000 0.9801300 3.3140600 0.3734150 334 0.0000000 62.251100 58.626800 9.0840400 20.549200 22.240000 335 59.580700 62.562600 100.00000 37.104500 35.325300 77.811400 336 89.871800 64.107100 100.00000 68.886600 51.940500 77.938300 337 58.542300 43.831300 64.624000 24.259500 19.366200 26.348300 338 100.00000 56.148000 73.058500 75.455000 50.024900 35.891300 339 100.00000 86.610800 79.988300 85.045600 78.097600 47.590200 340 20.110800 14.699400 0.0000000 2.2912400 2.0817500 0.1257220 341 17.858900 19.909400 0.0000000 2.1451300 2.5822000 0.2012160 342 34.328300 21.100000 0.0000000 5.8930700 4.5850400 0.2219060 343 100.00000 40.365000 34.963600 68.216800 39.590600 7.1983600 344 100.00000 42.572600 48.707100 69.672500 41.123500 14.013600 345 26.575600 11.099500 0.0000000 3.4418600 2.3513200 0.0865337 346 28.125000 0.0000000 0.0000000 3.5789900 1.7627500 2e-070000 347 31.250000 0.0000000 0.0000000 4.3945500 2.1644400 2e-070000 348 46.875000 0.0000000 0.0000000 10.354300 5.0997600 5e-070000 349 50.436600 91.711200 69.399500 31.893100 57.316300 35.637900 350 59.029700 100.00000 71.320300 41.196800 72.185700 39.075700 351 71.697100 100.00000 90.522200 56.424500 80.058300 65.406500 352 60.507800 77.840300 74.900600 34.620900 44.799200 40.020700 353 100.00000 82.299200 83.435000 84.415800 73.553100 51.811200 354 18.750000 0.0000000 0.0000000 1.7483800 0.8611260 1e-070000 355 15.625000 0.0000000 0.0000000 1.3177200 0.6490130 1e-070000 356 21.875000 0.0000000 0.0000000 2.2631900 1.1146800 1e-070000 357 39.793800 22.834000 19.521200 8.2934600 6.0452900 2.4280000 358 61.739200 29.446900 30.672800 21.526100 13.765300 5.3386300 359 63.586600 100.00000 60.910600 42.766500 72.814100 28.849400 360 32.047800 71.257500 42.311300 13.925300 28.888300 12.503700 361 40.532500 100.00000 41.392400 26.978700 64.855700 15.952900 362 0.0000000 28.843700 52.725700 3.8543500 5.0925900 16.135300 363 0.0000000 33.932100 68.574000 6.6863500 7.8109800 29.881300 364 0.0000000 52.436300 69.072700 9.0163300 15.426100 31.254900 365 0.0000000 73.053600 72.707100 14.133200 30.714000 36.924000 366 0.0000000 85.339200 72.683200 17.943800 43.612200 38.350300 367 100.00000 93.936800 90.606000 90.726100 89.302900 64.535900 368 100.00000 100.00000 91.784400 93.728600 98.461500 67.515300 369 46.903400 26.874500 0.0000000 11.267600 8.1470300 0.3425720 370 82.123500 56.912300 0.0000000 43.776800 34.334700 1.6846600 371 86.051900 77.505600 0.0000000 53.600800 53.341600 3.5532900 372 92.189600 100.00000 84.120900 79.295300 91.182100 55.460600 373 37.514500 48.625100 40.667300 11.046800 14.460300 9.9986600 374 36.954700 57.596900 63.478900 15.104000 20.920700 26.082900 375 35.669800 61.253500 100.00000 24.593800 28.378100 77.707800 376 0.0000000 25.819600 67.692600 5.9374600 5.7369800 28.749600 377 0.0000000 28.793900 84.817500 9.9456000 8.5635800 50.089900 378 0.0000000 51.006400 100.00000 17.019900 19.368500 77.011600 379 0.0000000 62.401100 100.00000 19.085400 26.352400 77.798500 380 100.00000 0.0000000 27.247800 65.725800 32.427200 3.9231100 381 100.00000 0.0000000 40.352200 66.579400 32.915000 8.6791300 382 29.769900 100.00000 0.0000000 21.800700 62.175600 6.7840500 383 48.061800 100.00000 0.0000000 28.758400 65.602500 6.7840500 384 62.044200 100.00000 0.0000000 37.608700 69.961500 6.7840500 385 66.427500 100.00000 35.996600 42.359700 72.398000 13.602200 386 36.530000 52.264300 66.446300 14.545700 18.031700 28.563300 387 40.056900 55.959200 85.644600 20.730300 23.210400 52.552400 388 22.702000 33.110000 100.00000 17.353400 13.521400 76.218700 389 41.428600 40.361000 100.00000 23.520300 18.555600 76.482100 390 68.858900 39.701400 100.00000 41.014200 26.966900 76.455100 391 27.191200 17.453100 40.585400 5.3606300 3.9981800 8.9504700 392 38.486900 23.231000 61.874700 11.538500 7.9971900 23.167600 393 0.0000000 0.0000000 31.250000 0.9183430 0.5247140 5.1165300 394 0.0000000 0.0000000 100.00000 13.587800 7.7636400 75.704000 395 19.372200 60.529000 100.00000 20.544200 25.960200 77.652000 396 18.794000 68.247900 100.00000 22.164500 31.693800 78.302900 397 40.005500 71.543800 100.00000 28.559500 37.247400 78.620000 398 45.890400 85.108700 100.00000 35.254900 52.497800 80.196400 399 63.376100 91.321200 100.00000 48.522000 65.704700 81.076400 400 77.422400 100.00000 100.00000 65.359600 84.700800 82.488000 401 90.904600 100.00000 100.00000 82.289100 93.039100 82.488000 402 23.327700 38.367700 30.621400 5.2496000 7.9508700 5.6133100 403 30.736900 72.305300 30.555800 12.986000 29.157100 7.8870000 404 76.249500 76.550700 34.322300 42.855200 47.319300 9.6263600 405 76.186800 100.00000 37.492000 51.774300 77.043500 14.207200 406 100.00000 100.00000 49.170500 85.237600 93.610000 20.208000 407 44.576500 45.057700 21.988900 12.333800 13.613800 3.6485900 408 78.416200 44.030600 21.204800 37.977200 25.869400 3.4374300 409 77.269100 45.926400 53.819200 39.470800 27.500100 17.539800 410 37.033000 0.0000000 24.517400 6.7925300 3.3911500 3.2255200 411 58.749000 0.0000000 32.006700 18.360900 9.1191500 5.3657700 412 71.489800 0.0000000 41.905600 29.587000 14.705700 9.4171100 413 80.858400 46.305700 100.00000 54.200000 35.736800 76.755200 414 0.0000000 16.173600 19.814000 0.7796710 1.5127600 2.3724100 415 0.0000000 18.656200 29.564600 1.2983500 2.0762300 4.7687800 416 0.0000000 19.134700 38.961000 1.9400100 2.4989100 8.2402100 417 31.876700 58.779100 47.257600 11.545500 19.640200 14.094300 418 46.987800 68.221900 73.292000 23.423200 31.712800 37.125900 419 25.367200 34.659100 39.215200 5.8973200 7.3044400 8.7292400 420 28.981800 51.116300 72.673500 13.309600 16.997000 35.130000 421 42.321000 73.040500 80.915100 24.240700 35.827600 47.217100 422 51.084000 79.897700 100.00000 36.224600 47.975500 79.537000 423 61.239900 100.00000 100.00000 50.590200 77.426500 82.488000 424 25.000000 0.0000000 0.0000000 2.8710800 1.4140800 1e-070000 425 50.000000 0.0000000 0.0000000 11.975900 5.8984700 6e-070000 426 51.043400 16.346300 0.0000000 12.939500 7.4883300 0.1470890 427 87.044000 24.003800 0.0000000 46.307900 24.917800 0.2782780 428 100.00000 25.824400 12.625200 66.060400 34.963700 1.4553200 429 100.00000 54.339100 16.832600 69.299700 45.624600 3.2288400 430 100.00000 71.183700 36.187000 73.818900 58.293800 9.7737500 431 100.00000 82.485000 40.953300 77.526900 69.789700 13.111300 432 69.184400 40.854200 33.247300 28.885200 20.364600 6.5914000 433 71.591100 44.635700 44.391600 32.454400 23.482500 11.651500 434 72.873500 60.090500 59.721200 38.046300 33.554600 22.971500 435 0.0000000 30.178500 35.584400 2.3182900 4.4812600 7.0851900 436 0.0000000 40.081500 38.636300 3.4319400 7.6146600 8.6771700 437 0.0000000 52.546600 45.199600 5.6696100 13.563500 12.517200 438 0.0000000 61.400400 88.575100 15.245100 23.574200 57.481500 439 0.0000000 73.755700 100.00000 21.836500 35.654700 78.846600 440 0.0000000 81.685300 100.00000 24.221700 43.719600 79.755300 441 0.0000000 69.606900 79.688300 14.784200 28.557900 45.220500 442 0.0000000 79.911300 88.513000 20.002700 39.710400 59.202300 443 0.0000000 90.150300 100.00000 27.232500 53.900000 80.902400 444 0.0000000 89.021500 37.395700 14.539400 45.437500 12.417700 445 0.0000000 100.00000 44.668200 19.750400 61.319000 17.613800 446 0.0000000 100.00000 59.037400 21.484500 62.309800 27.275200 447 0.0000000 100.00000 73.741700 24.098100 63.803200 41.836900 448 18.136200 100.00000 93.020500 30.743200 67.469400 69.628800 449 36.888000 100.00000 100.00000 37.557100 71.007400 82.488000 450 41.561900 0.0000000 84.153000 16.689700 8.9096400 48.723600 451 59.832800 0.0000000 84.124300 26.903600 13.939600 48.681600 452 75.128000 0.0000000 100.00000 45.112000 23.290200 75.704000 453 20.753800 0.0000000 28.417600 2.8307800 1.4543800 4.2499700 454 27.005700 0.0000000 42.589000 5.0637100 2.6320400 9.7540200 455 85.030100 0.0000000 43.386600 44.780300 22.199200 10.157800 456 84.433700 0.0000000 55.156400 45.337000 22.576900 17.473600 457 100.00000 0.0000000 74.506800 71.475500 35.712500 35.957700 458 100.00000 0.0000000 86.466400 74.386800 37.375900 52.178000 459 100.00000 0.0000000 100.00000 78.609400 39.788500 75.704000 460 100.00000 35.081700 100.00000 80.130000 44.930000 76.283300 461 100.00000 42.411000 0.0000000 67.295100 39.712100 0.8661700 462 100.00000 56.818500 0.0000000 69.426500 46.918700 1.6781800 463 100.00000 77.738300 0.0000000 74.418100 63.796400 3.5799000 464 100.00000 88.251900 0.0000000 77.947400 75.730000 4.9245200 465 100.00000 100.00000 0.0000000 82.828200 92.233300 6.7840500 466 100.00000 100.00000 28.647900 83.603000 92.676000 11.100600 467 49.592900 48.771900 0.0000000 14.856100 16.272500 1.1811100 468 79.170200 80.817000 13.729900 46.489300 52.822100 5.2185200 469 90.049800 85.112500 11.489000 61.657200 64.448400 5.4999900 470 83.695200 87.078100 34.972400 54.923800 63.234200 11.183500 471 92.597600 91.068300 42.871100 69.129600 74.635900 15.230400 472 16.624300 13.963400 7.7481700 1.8697800 1.8164800 0.7659300 473 30.281600 25.419700 0.0000000 4.9404600 4.7753700 0.3088890 474 41.321700 48.973600 0.0000000 10.974900 14.444300 1.1921200 475 73.796800 74.447400 0.0000000 38.603100 43.396900 3.2159200 476 78.305100 88.955100 0.0000000 48.126200 61.803500 5.0249100 477 84.850300 100.00000 43.898800 62.405300 82.322000 17.206900 478 51.283400 60.730800 26.562800 18.513200 24.058400 5.7029900 479 62.989200 71.917800 24.989400 28.882100 36.667200 6.2937300 480 64.443800 75.322700 62.361500 34.562600 42.451700 26.647800 481 71.767800 86.270800 72.166400 46.332800 58.541000 37.888100 482 93.340100 90.651400 73.091000 74.447600 77.129900 39.569000 483 3.1250000 0.0000000 0.0000000 0.2250050 0.1108210 0.0000000 484 16.603800 39.832300 65.877000 8.2074100 10.154700 27.377800 485 23.665600 54.071400 69.065000 11.882700 17.613000 31.349000 486 87.574800 74.766700 80.541500 62.649500 56.116900 46.890200 487 95.257100 82.136500 91.105700 78.845200 70.822600 63.698900 488 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 489 32.826300 26.213500 43.430200 7.5345600 6.3342100 10.507200 490 39.166100 28.775300 54.378800 11.052200 8.6409400 17.297200 491 48.438700 26.793200 54.928800 15.146200 10.287300 17.647500 492 57.406900 31.764000 66.273800 22.569100 15.089400 27.484200 493 89.275800 62.454200 82.353300 62.394600 47.297000 48.242400 494 60.800200 44.955000 56.599100 24.784700 19.933300 19.542800 495 74.057400 43.962100 71.836900 38.784300 26.672300 33.804800 496 63.390000 10.091900 19.922600 21.450000 11.182000 2.3250900 497 86.557600 15.764400 35.628800 46.498800 24.052400 6.8137700 498 30.607200 17.355400 11.230800 4.8167700 3.6091900 1.1408900 499 45.122600 34.801600 0.0000000 11.008400 9.7425000 0.5698310 500 87.673300 68.273600 0.0000000 53.245900 45.948800 2.6013200 501 87.653100 88.324600 0.0000000 59.343800 66.645300 4.9348200 502 87.406900 90.659700 19.588700 60.295700 69.714500 7.4595900 503 93.264300 100.00000 17.481400 72.473100 87.158900 8.6042200 504 15.958400 21.376800 9.7084400 2.1032800 2.7685900 1.0512400 505 18.143800 28.668900 0.0000000 2.6748300 4.2545700 0.3873720 506 17.064000 30.785100 10.086100 2.8281500 4.7795200 1.3061600 507 31.006700 28.938200 17.533000 5.6906200 5.8190800 2.2231200 508 66.268400 39.146400 50.501700 27.668000 19.355800 14.993100 509 70.969500 48.034500 59.966100 34.214000 25.804900 22.403400 510 86.990200 74.023200 61.097600 57.818000 52.833400 25.397500 511 93.855000 100.00000 73.588900 79.292200 90.985200 41.658400 512 28.687800 62.380100 23.548600 9.7492500 20.712600 5.0929700 513 39.275700 69.791300 29.970300 15.084400 28.304400 7.4557000 514 47.575100 93.350800 29.502900 26.440900 56.177500 10.252100 515 74.513300 93.398300 71.058300 51.570500 68.999100 37.692300 516 7.9288900 0.0000000 22.325600 1.0604200 0.5609210 2.7301600 517 54.974000 0.0000000 63.126500 19.205900 9.7994500 24.028000 518 77.792800 0.0000000 86.955100 43.871100 22.356700 52.928200 519 70.249800 0.0000000 62.716000 30.973400 15.590000 23.655600 520 74.874500 40.087500 64.141700 37.755300 24.763100 25.731700 521 74.043300 53.116400 78.461300 41.515100 31.906400 42.314700 522 28.410300 20.635900 78.858500 11.639700 7.9392400 41.610900 523 30.803800 32.882000 77.807700 12.789200 10.714800 40.544800 524 55.372400 39.873600 100.00000 30.723000 21.951400 76.462100 525 77.551200 57.072300 100.00000 52.145300 39.612500 77.399800 526 24.441000 0.0000000 20.197300 3.1676600 1.5927000 2.2998200 527 27.522000 6.8120400 18.628600 3.9297700 2.3516100 2.0652200 528 43.427000 59.426600 15.855800 13.919000 21.018700 3.4331100 529 74.393200 58.812200 50.751200 38.133000 32.784000 16.244600 530 48.135000 38.056400 65.481000 17.500500 14.196500 26.923300 531 50.948200 46.798500 76.778500 22.276900 19.681400 39.810400 532 58.761800 46.222500 82.203100 28.399100 22.576000 46.979600 533 73.158600 66.394500 90.058100 46.290400 42.051400 60.290800 534 50.247500 18.018300 23.329200 13.089800 7.7859200 3.1219500 535 100.00000 23.074000 24.774200 66.292400 34.663400 3.5472100 536 100.00000 23.021300 38.712100 67.125100 35.131300 8.2010800 537 34.468700 58.127400 14.476400 10.247900 18.489900 3.1428200 538 39.331200 67.123500 16.281600 13.901800 25.797300 4.1276900 539 64.663500 66.482800 22.975700 28.780200 32.708600 5.3105000 540 75.763000 73.067000 80.665900 48.111200 47.600400 46.880000 541 6.3062700 0.0000000 9.2694200 0.5945000 0.3038840 0.7827530 542 5.5427500 11.128400 14.298300 0.8687890 1.1052000 1.4360400 543 0.0000000 8.4814000 8.4100100 0.2939380 0.6383370 0.7687500 544 38.529500 22.203900 10.382200 7.5502800 5.5684700 1.1328100 545 60.679200 24.789900 0.0000000 19.554900 11.868000 0.2949870 546 90.161800 46.526000 18.510900 52.987200 34.181300 3.0556600 547 100.00000 68.885500 19.311800 72.382500 55.836800 4.7935700 548 71.847600 35.233200 9.1174100 29.912100 19.174900 1.3528400 549 82.926500 37.196100 0.0000000 42.046800 25.669700 0.6542410 550 81.948900 57.478100 16.303300 43.964800 34.750300 3.3589700 551 82.228300 68.622200 19.710600 46.791000 43.046800 4.8426900 552 88.057000 77.919400 18.401100 56.740100 55.274700 5.5752800 553 41.252700 38.655300 45.306100 11.686300 11.294400 11.884900 554 43.387400 39.018500 54.534600 13.679400 12.466300 17.743200 555 48.845100 57.759100 70.855900 21.639900 24.331600 33.523400 556 50.936500 80.949400 91.641200 33.745200 47.505800 64.449800 557 34.604100 66.771300 58.371400 15.448400 26.578600 22.415100 558 47.015000 84.126400 58.586800 25.487300 45.917400 24.487700 559 59.962800 84.227100 65.311800 34.425300 50.503500 30.449700 560 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 561 85.570100 5.5918500 50.025800 46.265600 23.302800 14.001600 562 86.021900 29.574300 56.527800 48.636200 27.335800 18.915100 563 87.334900 33.742900 73.118000 53.530200 30.906900 34.862800 564 85.664400 66.171600 77.199700 57.148200 46.986600 41.675000 565 80.955700 65.601300 90.568300 54.701000 45.678500 61.060200 566 100.00000 70.188300 100.00000 85.913400 64.485100 78.486700 567 54.036000 57.908100 62.660300 23.152600 25.041500 25.359500 568 66.610700 71.385000 66.753100 36.031000 40.125100 30.385400 569 69.524100 75.901300 76.151900 41.725200 46.666800 41.327200 570 0.0000000 40.874600 13.736700 2.3275200 7.2268700 2.0746300 571 13.237300 58.166400 15.146500 5.9580400 16.399600 3.2383500 572 9.8180600 80.696400 39.255200 12.499600 36.067100 12.111700 573 0.0000000 88.189800 63.857800 17.336000 46.160400 29.615600 574 11.537800 50.960700 57.243600 7.7148400 13.963300 20.361400 575 0.0000000 58.965700 66.946700 9.7739400 19.088900 29.509500 576 50.476600 69.995300 67.102600 24.488500 33.412400 30.599000 577 35.295000 29.308500 28.112700 7.4303200 6.7839400 4.5677900 578 36.670500 39.414500 26.198600 8.6821900 9.9357100 4.3844600 579 69.099100 52.946500 30.444300 30.282800 25.784200 6.2831100 580 85.697300 69.161400 40.288400 52.412300 46.290300 11.334100 581 88.160500 85.260100 48.540800 61.260400 64.572500 17.551900 582 61.916000 68.488200 44.021000 28.467000 34.044200 13.108700 583 62.960000 68.073200 54.242100 30.303400 34.746100 19.391400 584 70.264600 72.761000 62.974900 39.006800 42.594900 26.929300 585 78.588300 84.083300 69.651000 52.159400 59.157700 34.832400 586 35.551700 37.295600 30.965800 8.3356200 9.1651900 5.6827200 587 43.286900 38.140400 36.546400 11.754400 11.119000 7.7265800 588 17.967200 13.588900 33.813200 3.0036900 2.4175400 6.1070100 589 26.890300 10.627600 44.634800 5.4429000 3.4558000 10.894000 590 31.466900 0.0000000 68.340100 9.6776900 5.1782800 29.097000 591 55.417900 20.631400 68.909500 21.064200 12.414800 29.903800 592 59.173800 53.886800 68.503200 26.843300 24.884100 30.750200 593 66.238300 53.568700 73.882500 33.331200 28.010600 36.681900 594 83.179100 54.432000 80.424200 52.428800 37.951700 45.000300 595 84.000700 77.591400 82.972900 59.449300 56.962000 50.584600 596 84.616800 80.022500 90.651700 63.092400 61.083600 62.684600 597 92.423700 100.00000 92.862600 82.132800 92.776200 69.355800 598 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 599 54.690200 0.0000000 15.898900 14.997700 7.4090600 1.5742000 600 67.322700 0.0000000 14.404800 24.342600 12.008700 1.3630700 601 83.479000 0.0000000 15.253000 41.274700 20.349800 1.4803000 602 100.00000 22.405500 61.783600 69.764600 36.551000 23.070600 603 100.00000 41.303500 63.656600 71.568200 41.797100 25.331900 604 100.00000 57.718900 86.010600 78.832800 52.757800 53.226700 605 29.105500 20.750800 51.098900 7.0185400 5.2997100 14.867600 606 34.216000 18.188400 68.777300 11.035300 7.1703700 29.725300 607 40.497400 31.414300 91.794800 19.631700 14.041500 61.212100 608 14.445200 35.127400 35.924700 3.9185700 6.4303700 7.3707300 609 10.660800 69.479400 51.041300 10.537400 25.978900 17.329000 610 0.0000000 71.597300 59.538200 11.419900 28.070900 23.825700 611 16.796400 74.498200 68.390800 15.156400 32.302500 32.371100 612 36.865500 75.858400 94.198600 26.646700 39.585800 68.273200 613 91.093000 77.542800 100.00000 74.089900 64.536600 79.261500 614 93.158900 86.759800 100.00000 80.149200 76.305900 80.420100 615 25.152200 33.492700 25.382100 4.9034300 6.4587800 3.9640900 616 33.552800 43.191400 30.184900 8.2918800 10.986100 5.6795800 617 33.340100 55.879000 35.167500 10.406300 17.455500 8.1112400 618 49.514100 58.789200 51.739500 19.191600 23.451300 16.893700 619 52.615700 67.071400 50.825900 22.594300 30.224700 16.964900 620 54.144700 78.357000 69.434000 29.389200 42.587100 33.894500 621 54.777700 80.350200 80.070500 32.692200 46.186300 46.891900 622 53.858300 100.00000 93.206200 43.346100 73.681200 69.950300 623 30.410900 57.324100 86.482800 18.030800 22.610600 53.916300 624 30.061200 65.512300 92.642200 21.411600 29.273400 64.546800 625 33.286300 61.127500 79.887600 17.895900 24.539100 44.753300 626 58.968600 68.075000 80.375600 32.123600 36.020400 45.998600 627 67.259400 70.560700 81.070900 39.404000 41.408700 47.181100 628 68.819300 72.477200 91.493900 44.133000 45.413800 63.251800 629 16.283600 17.331300 26.498400 2.4921600 2.5005700 3.8837700 630 16.611200 40.574400 26.264700 4.1678100 8.0721300 4.4490900 631 15.114300 82.170800 49.089800 14.448300 38.484100 17.486400 632 29.207600 84.640300 74.882700 22.011500 44.947600 40.837900 633 65.731900 84.418500 89.479000 44.510800 56.097700 61.318100 634 68.329700 96.281100 93.503700 52.560600 73.436800 69.836500 635 7.6476000 20.711700 19.879000 1.5166500 2.4089900 2.4546600 636 6.4465500 34.853500 30.430700 2.8355400 5.7991900 5.4259000 637 68.914500 83.871000 30.072400 37.720200 51.472100 9.0721600 638 33.871800 34.894200 16.536500 6.9707300 7.8012900 2.2435600 639 48.634800 36.097100 19.294600 13.244300 11.213300 2.7467500 640 57.479400 49.739600 16.258400 20.059700 19.265500 2.8626700 641 71.278100 56.141900 18.375500 32.331700 28.325400 3.6022800 642 70.538700 62.920500 16.751500 32.910400 32.432100 3.8400300 643 79.734900 63.693900 28.535400 43.093600 37.965100 6.4843000 644 57.717700 41.641700 19.426500 19.259300 15.827400 2.9887600 645 67.216900 78.793400 17.522000 34.051100 44.867400 5.5290400 646 67.902000 82.512900 41.342400 37.151300 49.933000 13.299800 647 78.258900 84.215100 47.105400 48.555100 57.254600 16.563200 648 24.392700 40.759400 45.203300 6.8269800 9.5460700 11.914200 649 24.504100 58.880000 65.102900 12.201300 20.211500 27.698500 650 42.053200 60.735400 72.609600 19.361100 24.903300 35.706800 651 57.377200 71.640600 74.436700 30.576200 37.750700 38.799800 652 75.734100 71.830300 86.925300 49.378000 47.395800 55.827200 653 47.133900 25.388900 30.260700 12.153800 8.3906800 5.1099200 654 56.167800 25.084500 33.624000 17.512400 10.994700 6.2276900 655 81.686800 50.846400 33.944700 43.324200 31.267000 7.3407400 656 82.541900 59.114000 33.578700 45.756300 36.585900 7.7521400 657 83.609000 69.009700 63.998100 52.635100 46.520600 27.500800 658 17.078400 28.219600 31.182700 3.4081500 4.6002400 5.4700700 659 14.009100 59.985700 89.454800 16.339400 23.310500 58.784800 660 16.068700 72.364000 88.602500 19.208000 32.983000 58.508700 661 33.350200 76.636700 87.405300 23.700700 38.629800 57.081100 662 23.826900 47.797700 50.126900 8.1108800 12.750600 15.152500 663 68.059100 52.710700 67.382900 33.489300 27.582200 29.527600 664 81.386300 60.588700 68.070000 48.772700 39.234600 30.770500 665 39.952600 77.489800 0.0000000 16.619100 35.113400 3.5514700 666 39.105700 88.146200 0.0000000 19.857500 47.006000 4.9096000 667 65.316900 88.426800 0.0000000 35.389900 54.957800 4.9493800 668 74.081600 91.097000 13.705300 44.691500 62.510000 6.6098300 669 81.436900 92.574200 30.667600 54.021300 68.855400 10.491900 670 82.085100 91.778900 65.332100 58.274900 70.329600 31.535000 671 82.863400 92.426600 74.898300 61.332000 72.729900 41.966500 672 90.411700 93.000000 79.064500 72.446700 78.948300 47.296600 673 92.225800 95.550300 88.384200 78.541200 85.207100 61.195700 674 35.317300 27.009600 34.159200 7.6355100 6.4689300 6.4668800 675 68.226800 27.562900 64.233100 30.330300 18.017500 25.409500 676 71.633800 34.415300 90.974900 40.153500 24.839700 59.930300 677 33.989000 42.612500 48.523400 9.8393000 11.665900 13.903700 678 33.223900 77.605600 53.690300 17.271300 35.767400 19.981000 679 0.0000000 39.602400 65.879700 6.7395900 9.3608300 27.371200 680 11.722800 46.326600 68.046100 8.8173000 12.728900 29.845600 681 0.0000000 50.612200 77.035900 10.382000 15.406600 40.341300 682 0.0000000 43.810800 80.331300 10.222500 12.699200 44.285600 683 12.551500 44.630900 83.552200 12.100700 13.982000 48.820600 684 17.059700 46.623000 77.033500 11.316000 14.219000 40.120900 685 45.492000 50.267200 80.209100 20.758000 20.424600 44.455900 686 50.773300 64.310500 83.127000 26.789800 30.933000 49.492100 687 53.943900 63.875700 89.577400 30.312300 32.531300 59.291400 688 57.095800 75.078500 100.00000 38.476200 44.919900 78.987700 689 0.0000000 15.740900 68.500400 5.6171500 4.2343500 29.402700 690 0.0000000 17.453700 84.980000 9.3906500 6.5655000 50.103200 691 0.0000000 38.866900 86.323400 11.210200 11.699500 52.677800 692 0.0000000 52.948400 91.909500 14.677500 18.892800 62.367400 693 9.3390300 34.823800 53.495200 5.0974000 7.0672500 16.849300 694 30.697600 45.597500 55.801400 10.130000 12.945300 18.968800 695 39.577700 61.513300 58.265500 16.029700 23.523900 21.890500 696 47.141100 61.865200 63.289500 20.211500 25.854300 26.228100 697 52.422300 62.489500 68.569200 24.125200 28.231900 31.436700 698 70.911700 64.945500 100.00000 46.986000 41.691000 78.009100 699 77.789800 74.936800 100.00000 56.534600 53.698100 78.972400 700 14.691900 0.0000000 38.778700 2.6349200 1.4105800 7.9719500 701 16.935100 9.1316700 43.347800 3.4891300 2.3849600 10.207000 702 72.191100 62.937100 46.615400 36.321100 34.266700 14.044100 703 79.185100 75.256300 56.105100 47.857400 48.872000 21.485400 704 80.603100 75.223900 65.883000 50.993600 50.509600 29.926800 705 83.912700 78.440200 76.486800 58.043300 56.888500 42.030200 706 82.970400 94.778500 89.360600 66.073400 78.145300 62.634000 707 9.4535100 13.053500 0.0000000 0.9669410 1.2841900 0.1065580 708 10.075800 7.5626800 0.0000000 0.8878240 0.8678430 0.0567862 709 13.632200 5.0614100 9.6438900 1.3301600 0.9551250 0.8561930 710 15.012500 0.0000000 8.6469100 1.3724700 0.6862560 0.7262120 711 23.486500 73.493000 0.0000000 10.741600 28.910800 3.1152200 712 40.307600 89.499800 82.853200 29.241500 53.761300 51.954400 713 46.095700 93.800100 100.00000 38.663200 63.737500 81.457400 714 17.320200 28.667200 39.244800 4.0256300 5.0352400 8.5647900 715 20.658200 36.674800 48.682500 6.0751800 7.9942300 13.760400 716 26.829800 37.016000 64.384900 9.4946300 9.9436200 25.840300 717 26.490200 68.018900 64.821300 14.557400 27.077300 28.182900 718 34.784100 94.966300 79.154400 28.543500 59.678000 47.724800 719 38.792200 100.00000 89.551000 34.895500 69.432200 63.817700 720 46.328000 0.0000000 22.265900 10.573900 5.2463800 2.7170000 721 56.010200 8.3978100 24.394900 16.294500 8.5489900 3.2596500 722 57.965000 32.868200 48.574700 20.532200 14.143500 13.567300 723 61.263700 77.630000 56.140700 31.845700 42.992200 21.777000 724 63.107500 88.640100 79.645000 41.310000 58.704600 47.415800 725 10.301700 49.671100 62.145400 8.1432700 13.671700 24.376000 726 0.0000000 66.422600 84.967400 15.348000 26.718100 52.355500 727 0.0000000 87.936200 85.631600 21.947000 48.530800 55.793300 728 31.783500 86.258500 87.751000 26.465400 49.039100 58.812600 729 63.437200 89.088400 90.728400 44.703800 61.097000 64.007600 730 45.731700 53.616300 38.961600 15.094100 18.666800 9.5183400 731 55.614300 57.719200 38.013400 21.242200 23.772700 9.3844500 732 62.596700 56.980300 39.327500 26.133700 25.797300 9.9039900 733 61.725900 16.170200 33.886600 21.020800 11.535400 6.1659400 734 66.108400 13.961700 45.023900 25.344000 13.524800 11.138700 735 76.871300 11.020100 54.365900 36.626300 18.928900 16.983500 736 92.397600 14.047600 76.426200 60.239700 31.105400 38.411900 737 100.00000 68.249200 77.292100 78.911800 59.130200 41.979600 738 39.592500 27.480100 30.747200 8.9835500 7.2033500 5.3113800 739 69.524200 75.602600 37.370800 36.150300 43.239300 10.713700 740 78.630300 76.385300 45.008200 46.272000 48.931000 14.440400 741 47.847300 70.122900 31.311900 19.051500 30.506900 7.9129800 742 51.460700 86.184200 45.218800 26.958000 48.596100 15.765100 743 55.416700 86.056400 55.316800 30.457700 50.279900 22.212200 744 78.192100 84.949600 90.957800 57.199500 62.914300 63.816100 745 50.735800 26.006600 74.751600 19.732700 12.674500 36.572100 746 81.718700 25.311500 83.225700 48.178700 26.722900 47.688700 747 100.00000 27.907600 82.434700 74.289900 40.033800 46.626100 748 100.00000 42.595200 20.714500 67.747400 40.031000 3.2742800 749 100.00000 86.668200 22.245800 77.854300 74.047100 7.4162900 750 91.360000 74.238200 31.993600 60.892900 54.282200 8.5550800 751 100.00000 86.127100 70.860400 82.878000 76.371800 36.413900 752 24.061200 19.560600 16.106800 3.4795700 3.2181200 1.8002500 753 29.064000 27.322000 22.284000 5.2278900 5.2927100 3.0742300 754 37.750700 29.953500 22.432200 8.0699200 7.2113000 3.1752700 755 56.268300 34.558600 33.330100 18.242100 13.326100 6.3837800 756 79.417300 34.618900 45.619800 39.704800 23.990600 11.911500 757 90.342000 37.635300 92.651800 63.021200 37.004800 62.880000 758 91.422000 47.943800 100.00000 68.207800 43.281500 76.840300 759 17.640000 12.587600 23.535000 2.3902800 1.9894500 3.0986100 760 14.535000 20.177600 21.511000 2.1854700 2.6727500 2.7655900 761 42.359700 87.148100 38.239800 22.188600 47.203500 12.509300 762 44.066300 89.118200 51.399800 24.943800 50.773000 19.897900 763 80.281400 100.00000 56.097000 58.249200 80.384700 24.960400 764 20.335100 39.512300 0.0000000 3.9501100 7.5826800 0.7434680 765 26.258300 38.785300 8.6644500 5.1503000 7.9655900 1.4425200 766 34.409800 41.074800 15.216900 7.7219500 9.9508900 2.2832200 767 52.344900 53.810500 16.715100 17.484500 19.847800 3.1767700 768 40.151000 36.827100 28.441700 9.8207300 9.7556800 4.8975800 769 59.108400 36.557600 27.811100 20.038400 14.711500 4.7095200 770 74.454500 36.591100 37.773200 33.843100 21.568800 8.1732700 771 80.699400 51.956900 67.777200 46.365200 33.581900 29.882100 772 93.186200 59.631400 70.436400 64.780200 46.606100 33.201400 773 36.752100 19.405900 23.882900 7.1733700 5.0391600 3.2696100 774 55.417800 15.915300 59.815700 19.338900 10.895200 21.277300 775 71.542800 20.219200 79.639600 36.104600 19.948400 42.635400 776 100.00000 22.437300 91.876800 76.598000 40.459800 61.134200 777 42.751100 0.0000000 50.645100 11.024600 5.6330800 14.356800 778 62.224400 24.962400 51.438500 23.393200 13.997200 15.173900 779 77.312000 27.471500 62.219700 38.948300 22.218500 23.567900 780 53.776000 65.110300 42.418200 21.974900 28.545100 11.988500 781 56.442300 73.208800 44.541600 25.867000 36.288500 13.848000 782 68.990100 80.585000 51.023200 38.473100 48.847700 18.518700 783 75.192300 81.673900 59.599700 45.982300 53.651900 25.005900 784 49.732000 41.697800 50.505000 16.582600 14.698900 15.101100 785 51.819800 48.679300 56.046900 19.336400 18.697200 19.314500 786 69.483800 85.405000 78.964600 45.372000 57.297500 46.068000 787 76.769100 85.014200 85.148100 54.025300 61.286300 54.669900 788 92.226300 13.168600 8.3544400 53.214700 27.037300 0.8081880 789 100.00000 23.701200 0.0000000 65.735500 34.438600 0.2719730 790 100.00000 76.331400 51.303200 76.655100 63.903500 18.207000 791 100.00000 92.483100 54.863100 82.683800 83.040900 22.807600 792 27.286700 42.875000 20.273900 6.1221800 9.7732900 3.2017300 793 28.088000 60.492200 36.204900 9.9143300 19.729800 8.8459700 794 22.113000 51.800700 45.070100 7.8447400 14.290900 12.401600 795 34.750400 50.798300 53.108700 11.718200 15.820000 17.303500 796 44.979900 61.862900 53.266400 17.724200 24.513800 18.169700 797 44.461200 75.976000 57.196700 21.497200 36.498400 22.401700 798 48.305200 34.957500 26.344700 13.247400 10.937400 4.2579500 799 48.031900 33.951500 72.963100 18.487400 13.696200 34.690200 800 50.008300 46.490800 89.027800 24.849600 21.076200 57.250200 801 51.406700 66.337200 100.00000 32.713800 35.578700 78.130000 802 7.0967500 16.166300 23.749500 1.4375100 1.8475800 3.1909600 803 0.0000000 29.979600 43.633100 2.9547800 4.8040000 10.707000 804 0.0000000 40.003300 57.875100 5.5134600 8.7807400 20.317300 805 93.154200 46.987800 80.829000 64.929600 40.838200 45.117900 806 40.337700 13.435300 16.992200 8.0523200 4.8311600 1.8526100 807 55.352400 32.550500 17.362200 16.761400 12.052100 2.2982900 808 64.131200 31.005100 24.175900 23.183100 14.885600 3.5962400 809 64.669400 55.975800 28.393700 26.883100 25.588600 5.8638200 810 26.694900 29.498800 34.386200 5.4303800 5.8661400 6.6136300 811 26.286200 37.028800 35.704700 6.0546100 7.9912800 7.3522200 812 81.543300 44.678500 38.069800 42.586500 28.445700 8.6382100 813 91.199100 50.449900 48.138500 56.960300 37.905100 14.072100 814 44.969800 23.565900 37.978600 11.517100 7.8215700 7.8976700 815 56.467600 43.514000 38.451700 19.663100 16.742100 8.7463300 816 65.236600 65.003900 45.417700 30.413100 32.654200 13.546800 817 70.973100 74.311600 47.132500 37.999400 43.162700 15.405900 818 80.444100 91.546200 54.471500 54.606200 68.126800 22.380200 819 33.190200 40.217800 34.308000 8.0932400 9.9286300 6.9478400 820 51.388600 40.353600 40.925500 16.395200 14.099300 9.7242800 821 53.336100 46.171300 48.838900 18.999800 17.464300 14.265000 822 61.933700 54.637300 58.203600 27.295600 25.339300 21.348500 823 69.553900 63.105300 63.611500 36.125400 34.452100 26.623900 824 67.810600 50.743200 46.875200 30.079000 24.782900 13.347700 825 67.791200 60.230800 52.570300 32.366600 30.761300 17.562000 826 68.071500 61.637700 68.877000 35.414300 33.283800 31.690000 827 76.862100 70.965900 73.355900 47.072500 45.349200 37.462000 828 100.00000 76.130500 73.687900 80.222900 65.777400 38.388700 829 45.240900 16.573400 10.916000 10.132000 6.1426300 1.0963400 830 70.888200 21.228000 0.0000000 27.914100 15.448500 0.2242130 831 71.032900 30.599300 54.384300 31.651900 19.163600 17.350800 832 71.360100 85.325000 64.000800 44.097500 56.351900 29.354600 833 75.355800 100.00000 66.043000 54.374800 78.598200 33.567600 834 0.0000000 48.380000 32.091100 4.0122100 10.845900 6.5537700 835 10.418600 47.848200 37.465200 5.0678800 11.178600 8.5433400 836 11.200200 51.752000 49.810500 6.8676400 13.827000 15.175400 837 13.964400 61.780500 73.434600 12.715700 22.260300 36.739900 838 13.875300 69.626800 72.231800 14.252000 28.180300 36.041900 839 72.122900 100.00000 77.183300 53.356700 78.273100 46.026900 840 43.674200 68.779100 44.170700 17.699500 28.947500 13.213700 841 52.977300 78.549100 44.089900 25.201700 40.415300 14.196800 842 18.986100 66.700100 13.292600 8.4555400 22.821300 3.6768200 843 15.460300 93.305800 12.486600 16.396300 51.128300 6.7969600 844 25.685700 100.00000 20.837900 21.259000 61.943100 9.2086600 845 27.320400 53.624600 0.0000000 7.2368400 14.686900 1.4669300 846 40.731800 59.746600 0.0000000 12.564300 20.510100 1.8888700 847 53.778000 68.471400 8.7000600 21.160600 30.295600 3.3509300 848 56.778000 75.997500 0.0000000 24.940300 37.943000 3.3841300 849 0.0000000 10.096400 37.040900 1.5018300 1.4278700 7.3149400 850 12.294900 9.2772300 56.708500 4.4736600 2.9995700 18.712700 851 13.846500 13.104400 87.322800 10.990500 6.9822600 53.604400 852 21.118000 19.234600 100.00000 16.216600 10.499900 75.894100 853 77.352200 93.512700 100.00000 62.459700 75.116200 81.412300 854 82.826600 30.249600 29.301100 42.145500 24.081900 4.9392100 855 89.034400 56.079700 29.575300 53.366200 38.690600 6.2188300 856 100.00000 60.356200 31.775700 71.049500 49.739100 7.2241600 857 100.00000 67.143700 50.610000 74.151300 55.665300 16.832300 858 46.953400 52.362400 22.961600 14.552700 17.736600 4.2568900 859 49.179000 75.581800 22.719700 20.802200 35.598300 6.1536200 860 58.478900 76.673400 21.893700 26.763900 39.448300 6.0982600 861 73.831700 80.860400 30.050100 41.414400 50.411900 8.6855200 862 64.814000 47.962000 17.924800 25.311200 21.116600 3.0308600 863 84.272500 53.247400 52.141600 48.540100 35.067100 16.788800 864 92.089100 58.585000 62.082700 61.482500 44.281700 24.892800 865 30.239700 12.261200 15.112900 4.6381700 3.0486400 1.5584900 866 33.711800 10.890900 28.686300 6.1163300 3.7147400 4.4124000 867 59.715000 0.0000000 100.00000 31.668900 16.669100 75.704000 868 51.720500 13.029200 79.395800 20.773800 11.633500 42.211700 869 81.973100 27.314800 100.00000 53.689500 30.192800 76.057200 870 34.780900 10.100100 40.927900 7.2636300 4.2901400 9.0248600 871 38.044900 22.000600 45.719600 9.2490500 6.5253300 11.641700 872 43.560200 49.603400 51.488700 14.698100 16.754700 16.135600 873 42.733100 49.277300 59.195300 15.314400 17.001100 21.830100 874 41.924700 48.496600 66.748600 16.089500 17.154600 28.646800 875 89.914200 66.521500 67.130500 60.905600 48.911000 30.305500 876 87.552400 25.345000 17.390600 47.386300 25.693400 2.1124200 877 92.123000 26.323500 28.689100 54.296500 29.302300 4.6582200 878 50.575800 0.0000000 36.548800 13.555600 6.7760900 7.0377500 879 52.849900 20.844300 39.577600 15.660600 9.4793800 8.5431500 880 52.606600 44.955200 59.807800 19.827500 17.528200 22.113700 881 55.629300 55.944800 87.744800 29.278000 27.458600 55.774100 882 22.969400 25.654800 36.842900 4.5741600 4.7358900 7.4710800 883 20.813400 40.008300 89.979500 14.444600 13.721400 58.495100 884 22.793000 67.555700 90.201700 19.513900 29.657000 60.630100 885 26.391000 77.173000 100.00000 25.988700 40.526700 79.219500 886 23.226100 64.893500 31.478800 9.4850600 22.189300 7.4917500 887 28.636500 80.560200 37.396100 15.300500 37.309500 11.296400 888 39.085400 84.051500 65.869900 23.165500 44.791200 30.967400 889 73.097500 22.914000 25.638300 30.764200 17.143400 3.7572500 890 77.825500 24.286000 35.174100 36.319500 20.134800 6.7838100 891 92.782000 36.684800 53.096300 58.163700 33.692600 16.635000 892 94.209100 67.557000 59.033300 66.094200 52.067800 23.023400 893 17.318700 6.9040000 0.0000000 1.6771800 1.2193100 0.0518650 894 27.961200 0.0000000 12.017300 3.7305400 1.8524800 1.0666500 895 34.552400 12.091300 7.2596000 5.7437800 3.5682700 0.7049810 896 37.928700 13.904900 0.0000000 6.8388700 4.2495400 0.1162220 897 40.174400 13.596200 92.145000 18.689800 10.927200 61.455100 898 40.791200 53.759400 100.00000 25.090800 24.616700 77.179500 899 0.0000000 68.156800 36.458900 8.0561200 23.708600 9.5921000 900 0.0000000 84.592600 47.658300 13.857700 40.546000 16.935900 901 11.932700 93.491500 48.363100 18.203000 52.405200 18.636500 902 31.263900 100.00000 61.426900 26.245800 64.683500 29.296400 903 48.528300 44.716200 8.6479200 13.876500 14.220900 1.6991200 904 88.165400 51.010300 0.0000000 50.515000 34.796200 1.3078300 905 100.00000 67.168300 0.0000000 71.584300 54.214900 2.5002900 906 100.00000 94.256500 15.526400 80.584900 83.881400 7.3454600 907 100.00000 93.228300 69.193500 85.270800 85.367900 35.652800 908 46.890900 45.626800 38.639000 14.452300 14.943200 8.9289900 909 54.933000 76.442500 82.996700 32.325300 42.620200 50.489000 910 58.845600 81.371200 94.142900 39.629100 50.858800 68.818800 911 66.326000 84.189400 100.00000 48.303900 58.004200 80.075000 912 10.994000 17.825200 42.055000 2.9645900 2.8698300 9.6583100 913 9.8502600 19.705700 59.284300 4.9531300 4.2326800 20.892100 914 14.718600 24.973600 84.967300 10.952300 8.3675800 50.220600 915 20.295400 50.164100 100.00000 18.883800 19.916900 76.962800 916 12.188000 32.023100 61.070200 6.1812900 7.0081800 22.684400 917 16.393800 36.214000 71.649600 8.9017700 9.5378100 33.277300 918 40.931000 39.507600 75.621200 16.332400 14.207700 38.045100 919 46.750500 90.640200 76.909200 31.109400 55.837200 44.168600 920 7.8117500 30.888200 19.680800 2.1332900 4.4786300 2.6512900 921 0.0000000 60.491400 17.858800 5.4435000 17.456300 3.8277800 922 0.0000000 84.230900 20.707800 11.917600 39.086700 6.7750700 923 19.882100 88.986900 35.344500 16.303500 46.257300 11.594200 924 26.316400 100.00000 81.363300 28.998000 66.354000 51.548700 925 62.078000 100.00000 83.288800 46.155100 74.842600 54.257300 926 82.281900 100.00000 83.673600 65.973000 84.611300 54.810900 927 34.719400 83.151500 13.211100 16.771700 40.399900 5.4454000 928 57.052800 82.842600 19.660300 27.651900 45.473700 6.3965400 929 63.984000 89.490800 35.994500 35.931400 56.479800 11.919600 930 8.7386900 19.434200 0.0000000 1.1383500 2.0268500 0.1933710 931 7.3332100 16.671700 8.7638700 1.0579900 1.6807400 0.8880820 932 0.0000000 27.163900 12.281000 1.1142400 3.2144200 1.4461700 933 19.987600 25.671200 43.375900 4.5888800 4.7882800 10.466800 934 22.474500 59.687300 43.674000 9.1687300 18.950000 12.190300 935 19.870500 59.688000 53.299400 9.7657100 19.327000 18.025600 936 10.923000 92.611500 26.462800 16.096000 50.202500 9.2821200 937 31.452500 94.601400 28.002200 20.627200 54.803600 10.012400 938 55.097200 93.497100 60.983000 33.919000 60.282600 27.833700 939 54.230600 86.288000 71.905700 32.552100 51.767300 37.597000 940 58.228400 93.081500 86.502400 41.219400 63.813500 57.873900 941 34.449800 36.641500 43.558900 8.8520500 9.3120900 10.880500 942 48.610700 35.418000 57.072000 16.183300 12.718300 19.514700 943 56.913700 40.329600 71.686800 24.055700 18.200900 33.477100 944 58.159400 49.319700 73.371100 26.383200 22.668500 35.832200 945 46.842600 21.211200 6.2436300 11.019800 7.1325500 0.7473070 946 45.843800 29.004700 9.2552400 11.033400 8.4490600 1.1775700 947 50.601100 37.412700 9.5923000 14.190800 12.022300 1.4755500 948 77.439900 59.900000 8.8365900 39.105800 33.680400 2.6433900 949 76.850700 74.061900 22.577600 42.179300 44.886900 5.9593900 950 86.702800 83.183400 24.936700 56.854600 60.202700 7.5676500 951 8.0091000 7.9730100 27.228700 1.4373100 1.2174300 3.9778200 952 13.957600 5.6592200 32.305800 2.2125300 1.4891100 5.5094900 953 33.204500 93.864400 44.675000 22.034600 54.706200 16.596900 954 18.924200 54.565500 23.964200 6.3390600 14.745300 4.6231100 955 17.936200 67.080100 42.446300 9.9078100 23.914400 12.175500 956 19.218200 76.061700 51.162100 13.358100 32.500000 18.084700 957 43.322400 77.382700 66.218900 22.824400 38.458600 30.495400 958 81.471600 80.870000 66.042800 53.753900 56.810200 30.734200 959 89.853200 81.442700 70.075100 65.514700 63.195900 34.950900 960 91.010100 90.143200 83.056500 73.148700 76.102900 52.337700 961 44.129700 45.445700 52.156500 14.458900 14.984200 16.363900 962 44.722700 69.377100 57.432600 19.873500 30.568400 21.909900 963 75.202400 92.857000 59.371200 50.043800 67.450500 26.372500 964 90.934300 92.058200 62.319800 69.513100 76.146800 28.784100 965 7.0343700 9.5940600 21.809200 1.1685000 1.1653100 2.6939200 966 4.1395100 25.101600 27.875100 1.8254600 3.2454800 4.3979100 967 7.8003500 23.392000 29.775600 2.0935200 3.1115500 4.9177000 968 0.2891820 37.748600 43.282800 3.6055500 7.0356100 10.779900 969 11.594600 39.318700 46.858900 4.9685600 8.1964700 12.781800 970 10.731600 94.214600 69.247900 21.461700 55.115000 35.865400 971 9.7632700 57.213200 34.820700 6.3317800 16.140800 8.0716100 972 10.153700 59.678800 47.560100 7.9249700 18.363000 14.337700 973 25.732800 43.028000 39.464200 6.8591800 10.273500 9.1690800 974 63.424200 48.951100 53.751800 26.951000 22.536500 17.650700 975 71.258600 50.736900 54.332300 34.095500 26.826600 18.165300 976 83.834700 54.302900 63.323900 49.758900 36.300700 25.717700 977 92.933400 58.387500 77.301300 65.613400 46.438400 41.181200 978 65.744000 34.953700 40.652700 25.845400 17.214000 9.3937700 979 75.097800 35.621800 50.952900 35.674800 22.310000 15.154000 980 56.270800 24.460200 11.292600 16.657000 10.400400 1.2740100 981 68.402300 44.167600 9.3050000 27.672600 20.818300 1.7327600 982 80.647400 48.278500 9.1250300 40.773500 28.844800 1.9233700 983 95.873000 60.081100 12.463500 63.550300 45.828600 3.0322500 984 42.315100 12.175900 69.859700 14.025900 8.0795800 30.795200 985 51.220400 11.621000 90.089300 23.287700 12.983800 58.002100 986 21.015900 51.096000 35.029200 6.7158400 13.353100 7.7576900 987 35.162800 53.109700 48.335000 11.662300 16.804200 14.349200 988 35.459000 67.169100 47.481000 14.465800 26.258700 14.907500 989 36.538700 64.741300 66.767000 16.981600 26.098900 29.786800 990 43.306000 72.837600 70.215300 22.266200 34.511100 34.128800 991 32.214900 22.928200 19.765600 5.7405200 4.8026000 2.4754800 992 65.152600 21.006700 17.110200 23.157800 13.101200 1.9802400 993 65.347300 19.726400 29.054100 23.740600 13.258600 4.6336000 994 20.786100 5.8993000 10.922700 2.3599000 1.5120000 0.9911850 995 20.716700 11.831500 10.978100 2.4786200 1.9448600 1.0464400 996 23.939100 7.9307900 6.1266900 2.9024400 1.8881600 0.5732700 997 28.536200 22.439700 25.278800 4.9404000 4.3535700 3.6581600 998 28.005100 45.235000 29.445900 6.9863400 11.072300 5.5502600 999 45.665200 63.238000 39.135900 16.902800 24.835200 10.291600 1000 36.496000 62.140600 31.585600 12.407500 21.908400 7.3001500 1001 42.995200 76.164700 43.532200 19.321300 35.460100 13.635500 1002 52.602600 76.871900 53.344800 25.490100 39.181300 19.654300 1003 74.146600 81.951500 77.132300 48.269200 55.298700 43.263000 1004 9.5574100 13.140600 7.3416900 1.0883700 1.3600500 0.7229290 1005 13.776700 7.7933300 5.3466400 1.3335700 1.1066900 0.5065550 1006 19.263400 3.6076700 48.286300 4.2102700 2.4611400 12.912300 1007 29.737500 11.193600 57.347500 7.6504300 4.7017900 19.225800 1008 61.982700 9.8001400 57.601600 23.422000 12.375600 19.412700 1009 66.749200 15.087000 67.769500 29.063400 15.707800 28.640700 1010 70.919600 89.206600 87.976400 50.424800 63.981400 59.580300 1011 13.187500 31.140200 25.331100 2.8454100 4.9020500 3.8792500 1012 7.8279200 62.598300 29.220100 6.9070800 19.466200 6.5947200 1013 13.205600 66.799600 58.123400 11.058700 24.432800 22.219300 1014 12.101500 79.116800 63.690400 15.147300 36.166500 28.285300 1015 35.454900 80.651500 46.984600 18.149800 38.864200 16.042900 1016 50.154800 95.588800 48.063600 30.200600 60.845600 18.791400 1017 18.267700 37.553300 9.2054000 3.5675000 6.8292000 1.4442000 1018 19.173100 82.239200 14.536600 12.876500 37.605600 5.5017100 1019 21.559300 100.00000 36.487200 21.272300 62.014600 13.797100 1020 91.574600 100.00000 36.572900 70.928800 86.472300 13.831500 1021 48.478600 42.739700 18.109900 13.824100 13.515100 2.8053600 1022 59.878000 58.170000 65.686700 27.598200 27.413300 28.209300 1023 66.952200 67.049000 73.000500 36.449000 37.312300 36.681300 1024 84.060500 82.318800 74.502000 59.027100 60.901300 40.082700 1025 92.909600 84.312600 83.600800 73.928500 70.354000 52.309100 1026 25.076000 18.154300 9.9774400 3.4943200 3.0460200 1.0229300 1027 27.646600 18.276800 3.9795300 3.9828900 3.2933600 0.5088220 1028 63.475200 83.194800 13.336500 32.265500 48.073300 5.4662700 1029 70.224300 95.483800 9.5875600 42.656600 66.681900 6.8349300 1030 83.084700 95.385500 12.905100 56.498300 73.384400 7.1778300 1031 55.868100 61.190200 12.076600 20.902400 25.466800 3.0726100 1032 67.499300 71.990200 13.800700 32.253000 38.353800 4.2442800 1033 39.699000 44.528100 9.2686100 9.8681300 12.179200 1.7464800 1034 46.910200 55.643300 12.949800 14.778100 19.413700 2.7751200 1035 67.714500 55.849500 6.6108000 28.769600 26.400700 2.1658500 1036 71.439000 92.127600 26.843900 42.954500 62.870200 9.3089000 1037 73.380600 93.179000 44.060600 46.477600 65.927300 16.164300 1038 44.085700 56.271200 53.794100 16.302500 20.702500 18.130500 1039 64.358500 57.498800 82.965900 34.583700 30.783100 48.737200 1040 26.448100 31.964600 8.8998100 4.5795000 5.9025000 1.2285100 1041 26.874700 46.961700 11.800100 6.3178600 11.351800 2.1269500 1042 37.218000 50.669300 13.860000 9.8906200 14.655100 2.5790300 1043 46.449200 67.454300 13.125600 16.990900 27.539200 3.7240800 1044 48.448000 78.301100 8.7566800 20.849300 37.914100 4.3806100 1045 59.888200 87.652800 9.0424500 31.046800 52.001500 5.6014700 1046 60.108700 92.555000 24.505500 33.536600 58.719700 8.7826100 1047 94.611600 92.182400 31.791200 71.769200 77.146500 10.797200 1048 75.698000 51.814300 20.776200 36.109700 28.096100 3.7676100 1049 90.382900 57.722300 20.392400 55.143800 40.396800 4.0793000 1050 91.743200 70.379000 20.831200 59.889300 50.770600 5.2244500 1051 57.552200 43.985700 7.4545600 19.150600 16.554400 1.5629100 1052 58.070500 54.708600 7.7639400 21.078200 22.040800 2.1868300 1053 57.911000 66.283200 65.682600 27.919000 32.484000 28.853300 1054 63.644700 74.269100 69.569600 34.891100 41.854900 33.585300 1055 72.067700 76.924000 82.317600 45.880100 49.691700 49.580900 1056 27.544500 56.499600 55.926000 11.026000 18.243900 19.703200 1057 28.902000 69.349300 73.333400 17.069600 29.385100 37.279500 1058 71.208900 85.344100 94.277800 51.177800 60.427500 69.568200 1059 79.289600 92.936600 93.665600 62.272100 74.178000 69.585500 1060 18.516100 29.724400 26.601400 3.4764400 4.9158800 4.1652400 1061 75.299700 37.768900 27.004600 34.167900 22.005800 4.5326300 1062 76.376200 52.191100 44.911100 38.421800 29.528300 12.338700 1063 27.269800 33.141900 87.467500 14.370900 11.748800 54.238700 1064 39.598600 41.680000 90.232300 19.784300 16.890900 58.979000 1065 72.377700 57.337100 89.244500 43.402200 35.175100 58.253000 1066 46.240000 32.134300 39.984500 12.843200 10.121200 8.9954700 1067 53.078000 47.211100 43.435800 18.440000 17.549700 11.280900 1068 59.089200 55.794800 51.367800 24.519600 24.481500 16.436800 1069 51.230300 53.755800 45.769100 18.582700 20.500000 12.906000 1070 51.613100 58.331000 56.932000 20.937400 24.112200 20.599500 1071 54.471600 68.225900 61.372800 25.427300 32.532000 25.062000 1072 63.028000 79.573000 68.774600 35.822900 46.830400 33.343000 1073 67.084400 80.405000 81.568500 42.198400 50.947900 48.942500 1074 43.136400 54.293900 59.387400 16.307200 19.772000 22.289100 1075 43.290600 65.742100 87.629300 24.601100 30.879300 56.349200 1076 43.638100 71.587900 88.821300 26.526900 35.999000 58.779300 1077 55.076100 73.374200 90.976600 33.758800 40.993500 62.478800 1078 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1079 18.348200 33.773600 20.138400 3.5056700 5.8225200 2.8246000 1080 47.430600 39.642700 33.027700 13.621900 12.467000 6.4647300 1081 59.965800 51.350100 41.783100 23.426300 21.737900 10.684700 1082 62.453600 53.213300 51.060900 26.522600 24.196600 16.068300 1083 91.105700 56.719600 88.788600 65.586000 45.765300 57.478200 1084 98.879900 63.760400 92.812300 80.159900 57.086600 64.690900 1085 60.036500 65.330900 32.903800 25.468200 30.352900 8.0107600 1086 59.887000 72.997200 36.856200 27.532000 36.891000 10.226100 1087 100.00000 78.853000 88.782100 84.771800 70.665000 59.505500 1088 46.481700 7.4635100 13.157300 10.524000 5.6253600 1.2581100 1089 54.347900 10.714100 10.068600 14.874000 7.9662500 0.9423240 1090 63.122500 59.210500 20.969400 25.927500 26.824500 4.3000600 1091 34.744000 73.402300 13.043500 13.807800 30.365800 4.2936300 1092 34.717700 93.206400 10.538300 20.454600 53.006700 6.5667200 1093 47.538100 94.096600 12.472500 26.110300 56.853800 6.9194100 1094 57.123700 95.298500 11.768200 32.202200 61.309000 7.0305200 1095 15.644000 40.557900 16.652600 3.6870800 7.8021900 2.4747800 1096 11.903000 48.053600 25.767500 4.5371100 10.945200 4.6761400 1097 15.424800 74.295600 40.546800 11.265100 29.933900 11.969500 1098 29.014500 90.373100 51.498700 20.207500 49.828800 20.146400 1099 6.6153100 49.107400 13.979400 3.8588500 11.013800 2.5060900 1100 28.648700 64.466100 12.543200 9.8536000 22.038400 3.3920600 1101 92.890700 66.648800 7.9610100 60.344400 48.335500 3.1208900 1102 93.382200 77.561400 9.8414700 64.009500 58.528400 4.3965000 1103 19.315800 53.157300 9.1457900 5.7462300 13.741100 2.2086400 1104 16.415600 70.451200 28.383200 9.5509000 26.056600 7.0484200 1105 16.258500 79.780300 27.841100 12.155500 35.000500 7.9056000 1106 35.082600 86.916000 27.723700 18.715800 45.197400 8.7919700 1107 45.172500 94.410200 61.878400 29.002200 58.963300 28.758200 1108 38.505200 52.688100 34.501000 11.563400 16.462900 7.6548100 1109 67.486400 54.072500 39.604000 29.661400 26.065500 9.8330300 1110 77.115800 55.892100 72.424600 43.889600 34.336200 35.146900 1111 82.808000 59.088700 87.876100 54.771700 41.697700 56.201600 1112 23.761300 14.665500 21.976600 3.4244900 2.6742400 2.7819100 1113 34.050900 10.204500 81.153200 13.411200 7.8277700 44.553200 1114 42.223400 21.326400 82.534000 17.143000 10.814100 46.624300 1115 24.447800 8.8484500 33.346800 3.9773300 2.5470100 5.8946600 1116 41.900900 10.064500 37.056100 9.5885300 5.4088000 7.3208600 1117 41.253000 45.585900 36.980200 11.777300 13.600300 8.2278000 1118 49.983000 50.833700 62.377700 19.563700 19.803600 24.649600 1119 70.335100 67.209900 61.769900 37.474000 37.765900 25.316300 1120 77.293500 69.676900 66.254100 45.844300 43.687100 29.724500 1121 93.142500 76.244400 68.672400 68.397000 59.970100 32.854000 1122 92.300900 85.306600 89.910000 75.118000 72.075700 62.136900 1123 94.558700 90.167500 89.674200 80.218200 79.754700 62.434600 1124 24.780000 30.273500 28.147300 4.7046000 5.6414900 4.6039700 1125 45.842900 31.613300 30.204100 11.943100 9.5074000 5.2535100 1126 84.684300 35.573600 39.268200 45.551800 27.071800 8.7841500 1127 30.717900 5.5495100 9.3556300 4.4983500 2.5425900 0.8325590 1128 73.748500 11.599600 11.997100 30.544400 15.751800 1.1556300 1129 80.745100 16.021900 7.3221100 38.204600 19.907700 0.7565100 1130 80.717900 13.682100 22.337300 38.476800 19.851000 2.8464200 1131 91.872000 18.113100 54.320800 55.768700 29.014200 17.037800 1132 94.870800 80.735800 61.293500 71.118600 65.176000 26.330100 1133 9.6663800 30.486100 38.462500 3.2567400 5.0252500 8.2714600 1134 12.079600 60.722400 62.389800 10.267600 20.270000 25.325600 1135 7.7184300 81.162400 76.685600 17.950700 39.615400 42.604300 1136 9.6945700 93.144300 79.098700 23.026000 54.777500 47.363900 1137 29.100600 69.977800 54.476500 14.119000 28.138800 19.739800 1138 27.275800 77.557800 63.784800 17.139400 35.777200 28.191400 1139 38.865000 79.055300 80.808000 24.575400 41.030400 47.735800 1140 46.061700 91.431000 91.951300 35.053400 58.988400 66.403000 1141 77.576700 66.776000 56.171700 43.877100 40.559300 20.697900 1142 81.638600 83.710600 56.776300 53.439400 59.253700 23.003200 1143 65.054500 87.074100 47.349300 36.888700 54.430800 17.089500 1144 89.010800 92.048400 50.254700 65.159300 73.860900 19.587800 1145 19.488700 19.337900 7.6604900 2.4803500 2.6846600 0.8335310 1146 17.588600 24.917100 5.5715400 2.4437900 3.4676300 0.7643850 1147 15.505000 24.269900 17.407300 2.3721500 3.3458100 2.0917300 1148 20.709600 23.433800 16.653200 3.0631500 3.5535500 1.9550700 1149 80.028400 58.619500 58.561000 45.236100 36.256800 21.909700 1150 80.600600 67.884200 70.384100 49.896200 44.469000 33.829700 1151 31.565900 28.238700 36.841400 6.7555200 6.2817800 7.5326300 1152 31.917500 32.302200 46.505300 7.9947000 7.8190500 12.333700 1153 32.657400 41.103100 57.074700 10.319600 11.486300 19.735200 1154 34.249800 63.326000 74.513500 17.435600 25.546000 38.135200 1155 51.277800 69.250400 81.158300 27.737200 34.708200 47.174800 1156 17.618700 22.797200 28.789600 3.0312100 3.4790800 4.6116100 1157 23.500400 20.828200 27.332600 3.8456200 3.5960300 4.1632600 1158 23.627700 17.601700 58.196200 6.5805900 4.7717400 19.975600 1159 30.682000 44.607600 66.661800 11.694000 13.483800 28.362200 1160 32.060300 47.446500 77.494800 14.651800 16.193700 40.747800 1161 13.571500 25.624100 53.419300 4.8117400 4.9760400 16.538700 1162 14.607900 45.132000 91.058800 14.482400 15.504000 60.506100 1163 9.4198400 78.042200 91.484600 20.982200 38.594800 63.840800 1164 10.468000 87.436600 90.803900 24.003100 49.128500 63.898300 1165 20.233700 85.570300 61.242800 17.946900 43.687000 26.906200 1166 20.395800 87.797200 71.215100 20.540900 47.424700 37.035700 1167 25.798600 49.872900 58.676400 9.9281800 14.595100 21.440000 1168 24.806900 52.684200 91.334800 17.291700 20.042800 61.382700 1169 12.086100 27.069600 47.437100 4.0567400 4.8059600 12.728400 1170 58.181100 24.934600 56.440300 21.096400 12.911700 18.734500 1171 58.245000 34.949400 58.843200 22.207200 15.583900 20.907700 1172 68.287000 61.519600 75.230800 36.868400 34.031300 38.851800 1173 74.776000 62.590200 81.020500 44.647200 38.612600 46.402800 1174 79.435800 70.544700 81.690000 51.720000 47.475000 48.033700 1175 27.355100 15.888600 18.960300 4.1365500 3.1353200 2.2138400 1176 39.994400 29.307700 15.929900 8.6581000 7.3519000 1.9828600 1177 42.098700 37.359200 21.354400 10.356500 10.143100 3.1886600 1178 44.615100 80.730900 23.451600 20.137100 39.787000 6.9121300 1179 43.564000 96.807300 93.124800 36.491300 66.171400 69.264300 1180 17.678700 42.745400 35.089200 5.0650200 9.2672100 7.3487200 1181 14.043500 43.974500 43.552100 5.4289300 9.9281600 11.180700 1182 19.891200 54.688100 78.576900 13.319300 18.780800 42.565100 1183 20.089400 74.285100 82.010600 18.549400 34.035300 48.861700 1184 18.092000 84.817700 94.307300 25.024100 47.015300 69.550300 1185 36.167900 85.356500 94.082300 29.405200 49.711700 69.224600 1186 42.465400 35.456500 40.211100 11.425300 10.238800 9.2062600 1187 54.984000 33.855200 40.770500 17.905900 13.028100 9.4128000 1188 91.373400 32.931300 66.896400 57.862700 32.750600 28.137100 1189 48.709200 13.732700 28.517100 12.355000 7.0117500 4.3932500 1190 48.851300 10.766200 45.344400 13.589800 7.4838100 11.279500 1191 60.685700 9.8947200 75.015700 25.546800 13.672000 36.643300 1192 69.997200 12.082700 88.116500 36.571000 19.516800 54.836100 1193 37.070000 14.153600 52.816800 9.3762500 5.7449200 15.925700 1194 39.234000 38.479300 61.424900 12.904300 12.002800 23.213400 1195 38.030500 43.293500 69.632500 14.415400 14.400700 31.361600 1196 40.496000 55.170100 76.142700 18.434100 21.495800 39.509100 1197 40.538900 64.878000 95.460800 25.618600 31.002500 69.459500 1198 91.283100 70.453300 94.913100 70.686100 57.045400 68.983600 1199 80.999800 41.003700 61.112800 44.123500 28.150600 23.044900 1200 83.736100 47.293400 73.669600 50.496300 33.721400 36.070500 1201 91.096800 74.031100 75.535200 66.171100 57.165700 40.368900 1202 62.098800 93.047200 52.189500 37.396600 61.368800 21.013700 1203 61.369200 93.237700 72.216000 40.138900 63.197100 38.960700 1204 69.549900 93.333100 77.421700 48.089200 67.313900 45.224600 1205 74.822100 94.017300 84.141100 55.140600 71.730100 54.493800 1206 11.244800 15.890100 32.511000 2.2064100 2.2338400 5.6777400 1207 56.601900 12.137600 44.799100 18.152200 9.8290000 10.997300 1208 71.350600 12.261000 58.150000 31.570400 16.572600 19.871600 1209 92.934000 11.926600 63.726500 58.508100 29.882100 24.673100 1210 37.657500 6.3734300 19.975900 6.9663800 3.8260200 2.3058300 1211 92.887000 8.2577900 17.369700 54.264800 27.222800 1.8641000 1212 94.552900 38.140500 25.056200 58.698200 34.188000 4.0464900 1213 91.055700 47.389100 29.784500 54.852000 35.475400 5.7616200 1214 21.145900 6.4355900 20.394400 2.6811500 1.7200600 2.3865700 1215 76.156700 8.7439400 28.837500 33.560700 17.090700 4.4372400 1216 92.582400 9.0514900 28.947000 54.298800 27.323800 4.4720200 1217 93.416900 9.2754800 43.267300 56.564600 28.534700 10.167300 1218 93.410800 30.407200 42.635000 57.453800 31.729100 10.211300 1219 94.245400 70.714500 79.605400 70.862400 56.988800 45.217100 1220 60.927400 42.477100 43.092400 23.041800 18.080100 10.877400 1221 92.487900 65.790600 42.733400 61.195500 48.310200 12.204900 1222 92.599800 82.224300 44.802600 66.122500 63.951100 15.021100 1223 72.296000 26.336000 14.048500 29.776900 17.185300 1.6454200 1224 81.292400 32.510900 9.2681400 39.806600 23.378900 1.2788000 1225 79.832600 71.382000 8.0323100 44.394700 43.862700 3.5735800 1226 89.645700 74.923200 50.980600 60.308600 54.680600 17.841500 1227 92.991200 86.798200 79.351600 73.872900 72.778500 46.768300 1228 100.00000 94.054000 82.123800 88.452100 88.140000 51.614300 1229 29.479200 37.753300 20.557600 6.1154300 8.1636900 3.0444700 1230 37.918800 49.301200 23.410200 10.239700 14.261800 4.1793200 1231 48.508300 48.929400 33.143100 15.337900 16.656200 6.9454500 1232 47.823000 56.504800 32.948500 16.199000 20.619500 7.3445000 1233 25.695200 25.827500 8.8228800 3.9872300 4.3859200 1.0597500 1234 32.046900 25.929000 10.285800 5.6190400 5.2089200 1.2014900 1235 39.763600 31.190600 6.5150500 8.5202900 7.6673300 1.0026100 1236 43.154400 79.059300 33.931000 19.506000 37.999900 9.7708800 1237 53.477700 84.338900 34.718000 26.631100 46.496300 10.717800 1238 58.171900 93.735200 37.900100 33.436200 60.121700 13.338200 1239 65.468200 93.260600 65.556700 42.126100 64.104000 31.978900 1240 45.759400 61.839100 29.623500 16.020000 23.497200 6.6557100 1241 91.136600 66.841000 28.889600 58.499600 47.609200 6.8576300 1242 36.803700 35.357800 8.5699300 7.8075900 8.3196700 1.3080700 1243 69.466000 67.254900 8.8842300 32.722400 35.144100 3.2555800 1244 75.233800 84.247500 13.715800 43.354800 54.570800 5.6509200 1245 81.330400 85.238900 78.142300 57.509200 63.091600 44.976600 1246 82.382000 92.279000 82.013100 62.346100 73.189200 51.184200 1247 87.024900 92.547900 90.270000 70.590000 77.739300 63.765700 1248 33.066100 88.505100 59.365500 21.667500 48.577500 25.722000 1249 33.466200 92.531100 69.781400 25.120500 54.934300 36.170200 1250 13.615400 40.797600 54.060100 6.1654200 9.3108900 17.474800 1251 13.629700 58.198000 77.303200 12.814000 20.330400 41.170000 1252 19.792700 79.167100 79.457000 19.314500 38.513400 45.932400 1253 20.538700 91.345200 83.654200 24.757900 53.635600 53.375000 1254 20.043900 94.006200 93.676800 28.621400 58.871600 69.772200 1255 11.914600 33.618900 78.406100 9.6237600 9.3428900 41.338800 1256 11.616400 34.147500 92.844800 13.541400 11.710700 63.089300 1257 81.117700 54.353600 93.770400 53.644100 38.804300 65.664000 1258 84.505400 78.054800 33.271500 52.824400 53.518800 9.4175500 1259 93.998600 82.346200 32.748100 67.302100 64.573800 9.7522100 1260 24.742600 20.465200 33.410800 4.4204600 3.8578400 6.0614200 1261 23.972700 21.961800 42.467300 5.0248000 4.4149700 9.9313600 1262 31.016100 30.062600 52.920200 8.2943700 7.5303500 16.302100 1263 35.353700 31.215900 62.087300 10.987300 9.2071800 23.551000 1264 48.990600 55.887800 77.331400 22.750000 24.005700 41.044800 1265 59.350700 63.087500 83.036100 31.920500 32.690400 49.261400 1266 64.835200 65.879700 92.713400 39.450400 38.402400 64.701200 1267 20.964800 36.166900 55.418400 6.8950500 8.3244700 18.284900 1268 28.164800 41.095200 79.447300 13.281400 13.271600 42.982400 1269 36.921700 47.493400 88.964400 19.161500 18.666400 57.200800 1270 44.735800 55.377900 91.406100 24.267700 24.787100 61.674700 1271 19.587100 26.858300 60.300100 6.6421100 6.1707600 21.885800 1272 27.392800 25.365800 91.665200 15.075100 10.614000 60.837400 1273 51.880900 30.265700 98.741100 27.309400 17.751100 73.696700 1274 51.776100 29.996600 86.780700 23.530900 15.541500 53.083100 1275 80.296200 35.891600 89.839100 49.112300 29.607600 58.109900 1276 94.031300 74.108200 90.109400 74.238300 61.494600 61.123200 1277 41.435800 47.053300 28.815600 11.536500 14.005100 5.4547200 1278 54.191600 53.301500 27.942400 18.941600 20.355800 5.5617700 1279 65.306000 63.889400 32.860400 29.221900 31.275300 7.8737200 1280 50.370800 44.802200 31.235700 15.660800 15.193300 6.0887700 1281 64.919900 45.880700 36.719700 26.051000 20.740200 8.1363000 1282 74.956800 52.750000 37.116700 36.358500 28.719000 8.6805600 1283 74.189000 62.030000 36.760800 37.257500 34.107900 9.1879500 1284 6.5345500 23.061400 13.710500 1.3784100 2.6610700 1.5307000 1285 8.4797600 23.730200 7.3263500 1.4368500 2.7831600 0.8867170 1286 11.404000 72.963800 15.091100 9.1511400 27.731000 4.5175500 1287 48.573900 84.006400 78.410000 29.952300 48.290400 45.160100 1288 50.847300 85.632900 89.900300 34.757800 52.529500 62.165000 1289 44.861500 8.3506000 32.004300 10.518400 5.7321600 5.4276900 1290 55.705800 8.4877900 36.169000 16.762100 8.8372500 6.9501300 1291 74.546600 7.9056600 37.281600 32.397100 16.510100 7.3954300 1292 91.596500 41.657200 37.391800 55.400400 33.706900 8.2147300 1293 92.050500 57.557000 40.442400 58.654400 42.128000 10.450500 1294 65.014800 41.539700 69.327300 29.731500 21.347600 30.958700 1295 67.262200 47.204600 80.220500 34.680500 26.013300 44.303800 1296 43.552100 30.219800 45.925800 11.991400 9.3231600 11.946900 1297 52.623400 36.127600 51.194100 17.718300 13.603000 15.330300 1298 57.857500 66.041500 56.483400 26.397100 31.460200 20.869600 1299 66.145500 75.040600 55.776000 34.917400 42.318500 21.213700 1300 90.863900 83.537300 55.527500 65.272500 64.898700 22.035300 1301 82.497400 73.275500 39.701600 49.428200 47.911800 11.474200 1302 95.312700 75.005700 41.363100 67.695500 58.309700 12.430500 1303 49.250800 27.380700 20.759300 12.936500 9.0958400 2.7636100 1304 62.767500 26.755700 43.253200 23.060400 14.076400 10.429700 1305 70.316100 56.767400 63.634200 35.581000 30.568900 26.168000 1306 75.698600 63.860400 72.789100 44.023300 38.947300 36.162200 1307 81.148500 82.717600 87.477100 58.813700 61.430600 57.919200 1308 83.006100 85.579400 95.656300 64.502100 67.265000 72.069600 1309 31.481300 50.204000 39.493800 9.2570600 14.238800 9.5492400 1310 40.624400 62.263400 46.237100 15.130300 23.414800 13.775300 1311 84.131000 62.140900 54.567100 50.322700 40.750000 19.116800 1312 89.485000 69.340000 53.793700 58.944100 49.746800 19.190900 1313 27.144200 53.522300 19.561000 7.5701600 14.833100 3.6411300 1314 48.758400 86.791100 16.131200 23.992000 47.631100 6.3287900 1315 59.721100 93.813300 98.417500 46.231600 67.437600 78.403500 1316 47.616900 25.116100 62.796500 15.777300 10.397400 24.030400 1317 62.596900 22.796500 83.205100 29.390400 17.070000 47.606500 1318 90.954100 28.924200 83.466400 60.566200 33.493500 48.122200 1319 41.216000 16.342500 28.704500 8.9663300 5.5923300 4.4802800 1320 84.434300 21.283100 44.555000 44.725600 23.889000 10.994800 1321 86.520700 44.570700 50.413600 49.971700 32.136600 15.173500 1322 88.674400 45.835600 59.974300 54.290400 34.832300 22.296700 1323 91.084400 45.569000 69.094900 59.178400 37.261100 30.899600 1324 67.069000 31.397300 74.253000 31.492700 19.524400 36.118700 1325 77.128200 32.229400 74.314100 41.338300 24.563100 36.216200 1326 86.027800 41.790600 82.446000 54.750200 33.981000 47.112900 1327 87.358300 49.823400 91.116800 59.948500 39.767900 60.849200 1328 75.635800 22.571100 49.159900 35.116500 19.376700 13.666800 1329 100.00000 27.428900 51.805400 68.669700 36.734700 15.475100 1330 56.001700 21.161400 20.100400 16.544500 9.8716900 2.5045000 1331 56.583000 49.017900 28.034700 19.807900 18.871900 5.3359300 1332 60.276100 51.316500 61.108600 25.957300 23.151700 23.562000 1333 61.444800 72.200300 92.278700 38.227600 42.310300 64.553300 1334 68.133400 78.192800 91.865600 45.266200 50.696200 64.500700 1335 76.335200 77.771900 91.485900 53.010200 54.134000 63.811900 1336 86.806500 93.118100 96.112200 72.352200 79.418100 73.991600 1337 8.1830400 15.654300 13.576800 1.1763200 1.6423800 1.3922700 1338 7.0982800 31.704800 10.058400 1.9039400 4.5278600 1.3302700 1339 5.9736000 38.966500 20.997200 2.7657300 6.8694300 3.1783500 1340 23.376300 45.681700 62.065400 9.3622600 12.671400 24.094100 1341 26.678700 67.321600 82.346700 18.118200 28.639500 48.648700 1342 88.410300 76.731700 90.954300 67.162200 60.197500 62.804800 1343 62.361900 16.672300 6.7674100 20.544500 11.276000 0.7183180 1344 92.761000 33.942800 8.9286700 55.148900 31.278200 1.2927300 1345 93.076400 44.926800 6.5490700 56.738800 35.406200 1.5316500 1346 58.612900 33.573700 6.6922700 18.793800 13.278900 1.0900000 1347 65.367100 34.096200 15.945000 24.158700 16.064600 2.1273500 1348 68.717600 44.148000 24.839200 28.403700 21.207100 4.2496400 1349 81.074200 71.333700 51.029500 48.326900 45.960200 17.501900 1350 10.632700 11.597300 17.591100 1.3564500 1.3867000 1.9296800 1351 11.956300 7.1027800 14.147300 1.2884900 1.0581300 1.3818200 1352 10.019400 4.9095400 18.373200 1.1841600 0.8909800 2.0069000 1353 6.3740200 26.184800 41.453900 2.9663000 4.0652700 9.5248600 1354 33.691800 39.454800 40.875600 8.6583200 10.010600 9.6640600 1355 35.394000 45.750200 44.319800 10.251600 12.959400 11.667800 1356 43.800600 49.640200 45.263400 14.136200 16.440500 12.381300 1357 44.387300 57.524300 44.813800 15.665400 20.968100 12.635800 1358 54.472300 60.272600 45.539800 21.669900 25.455400 13.232000 1359 73.293300 69.295000 56.887800 40.108200 40.469700 21.477300 1360 75.872200 75.448500 69.462000 46.461000 48.514100 33.597100 1361 59.538700 62.489500 56.530500 26.792600 29.392400 20.607300 1362 65.915000 64.717900 79.882100 36.569800 35.947200 45.037500 1363 82.309500 74.613500 94.732300 59.886700 54.946200 69.085000 1364 90.428700 87.548200 94.813000 74.729600 74.328700 70.820900 1365 18.346000 12.700300 16.441700 2.2547000 1.9127400 1.7587400 1366 15.730900 17.361500 72.067700 7.7001700 5.4849300 33.289300 1367 16.099200 26.067200 71.105100 7.9799300 6.8372700 32.377300 1368 12.013700 53.637800 86.566400 14.161000 18.844200 53.798800 1369 7.8421000 67.834200 96.034700 19.527100 29.999700 70.763600 1370 11.592000 75.875000 97.520300 22.457000 37.621700 74.323000 1371 9.0227500 20.262600 33.946500 2.2808700 2.7801600 6.2504400 1372 20.433000 21.207400 49.826900 5.0850500 4.3973800 14.057700 1373 31.713900 26.340800 67.756000 10.506100 8.0794500 28.826300 1374 40.439800 29.890100 77.599900 15.730000 11.494700 40.191900 1375 61.545700 31.947200 90.002900 31.051300 19.743600 58.248700 1376 62.670900 44.407900 91.834900 33.712800 24.729400 61.774700 1377 63.391100 55.603400 91.691500 35.905100 30.639700 62.169900 1378 7.7257900 8.1522100 37.086600 2.0190200 1.5615900 7.3174200 1379 11.453000 13.443100 47.264800 3.3571600 2.6685000 12.392000 1380 20.240400 7.4933800 69.673200 7.6041600 4.6035200 30.555100 1381 27.151900 9.2768100 90.658800 14.093900 8.3067100 58.918700 1382 62.580200 13.451400 93.072700 31.799700 17.394800 63.046400 1383 80.330600 17.777300 92.076900 48.666100 26.105800 61.394100 1384 44.777900 14.149500 50.142000 12.184000 7.1023600 14.152600 1385 44.969900 10.467600 60.731100 13.585600 7.6124900 21.991100 1386 76.681400 9.1960400 73.909400 39.673400 20.566200 35.319700 1387 85.613500 6.5169400 88.423900 53.746600 27.624200 55.275000 1388 92.549500 17.354800 91.172600 64.419800 33.796200 59.863900 1389 85.414000 19.664500 64.368900 48.485200 25.731500 25.374700 1390 29.072700 4.9006200 30.477600 4.7848900 2.7049700 4.9061200 1391 27.075000 16.454400 31.052500 4.6260600 3.4765000 5.2013100 1392 36.341300 21.072100 36.940700 7.8461600 5.6452400 7.4177800 1393 39.049900 41.186800 54.165200 12.090000 12.354700 17.566900 1394 48.257900 46.732700 66.503300 18.757500 17.759900 28.310300 1395 57.702000 61.066300 72.288100 27.889200 29.292400 35.366500 1396 61.987000 67.956100 72.290300 32.500500 35.980900 35.951600 1397 72.755600 67.974800 43.499000 37.714100 38.234000 12.789700 1398 80.532600 91.013800 42.543800 53.199200 66.725900 15.058000 1399 86.730400 89.857000 68.607400 63.967800 71.012300 34.530500 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 96.41600 99.99690 82.48800 1 0.000000 67.45460 100.0000 20.21840 30.18340 78.23010 2 100.0000 0.000000 69.46800 70.45640 35.13010 30.27950 3 0.000000 0.000000 70.02640 5.542030 3.166550 30.87730 4 100.0000 65.46120 0.000000 71.18840 52.87630 2.349460 5 0.000000 49.64810 0.000000 3.227580 10.91320 1.229660 6 100.0000 4.373660 4.349220 65.17320 32.35370 0.397234 7 3.095820 3.216760 3.448330 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 96.4160 99.9969 82.4880 1 0.00000 100.000 100.000 31.3944 67.9720 82.4880 2 100.000 0.00000 100.000 78.6094 39.7885 75.7040 3 0.00000 0.00000 100.000 13.5878 7.76364 75.7040 4 100.000 100.000 0.00000 82.8282 92.2333 6.78405 5 0.00000 100.000 0.00000 17.8066 60.2084 6.78405 6 100.000 0.00000 0.00000 65.0216 32.0249 0.00000 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 17.7583 18.4178 15.1930 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s33-g97-m0-f1399-cRec709_Gamma22.ti1000644 000765 000000 00000327533 12261120515 024217 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1200" CREATED "Wed Dec 18 02:47:06 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "33" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1399 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 2 36.18660000 40.25050000 29.03860000 10.43240000 12.41520000 8.082730000 3 75.62240000 56.57030000 28.01850000 33.62140000 32.37170000 10.24120000 4 82.79480000 56.83720000 43.69100000 40.46860000 35.84890000 20.10110000 5 19.47590000 14.15960000 0.000000000 1.614820000 1.553530000 0.214771000 6 20.94060000 9.655240000 0.000000000 1.533610000 1.101250000 0.131754000 7 21.64610000 0.000000000 9.880980000 1.535610000 0.778814000 0.651906000 8 64.49270000 50.86790000 23.72350000 24.56660000 24.58230000 7.448250000 9 78.94490000 73.49390000 36.37540000 44.63550000 49.75270000 17.48580000 10 0.000000000 15.10070000 0.000000000 0.559497000 1.119080000 0.186522000 11 0.000000000 9.493670000 0.000000000 0.201613000 0.403256000 0.067212600 12 11.29030000 0.000000000 0.000000000 0.340406000 0.175489000 0.015935900 13 13.15790000 0.000000000 0.000000000 0.476651000 0.245728000 0.022314200 14 13.21410000 8.186610000 0.000000000 0.626698000 0.539183000 0.071050300 15 6.646220000 6.646220000 6.646220000 0.244634000 0.257385000 0.280307000 16 9.493670000 9.493670000 9.493670000 0.535904000 0.563838000 0.614052000 17 15.10070000 0.000000000 0.000000000 0.645261000 0.332651000 0.030207600 18 17.12330000 0.000000000 0.000000000 0.850733000 0.438578000 0.039826700 19 19.23080000 0.000000000 0.000000000 1.098130000 0.566119000 0.051408600 20 21.42860000 0.000000000 0.000000000 1.393190000 0.718230000 0.065221500 21 23.72260000 0.000000000 0.000000000 1.742400000 0.898261000 0.081569800 22 26.11940000 0.000000000 0.000000000 2.153160000 1.110020000 0.100799000 23 28.62600000 0.000000000 0.000000000 2.633900000 1.357850000 0.123305000 24 31.25000000 0.000000000 0.000000000 3.194240000 1.646720000 0.149537000 25 34.00000000 0.000000000 0.000000000 3.845230000 1.982330000 0.180013000 26 36.88520000 0.000000000 0.000000000 4.599570000 2.371210000 0.215327000 27 39.91600000 0.000000000 0.000000000 5.471880000 2.820920000 0.256164000 28 43.10340000 0.000000000 0.000000000 6.479100000 3.340170000 0.303316000 29 46.46020000 0.000000000 0.000000000 7.640830000 3.939070000 0.357702000 30 50.00000000 0.000000000 0.000000000 8.979910000 4.629410000 0.420390000 31 53.73830000 0.000000000 0.000000000 10.52300000 5.424900000 0.492628000 32 57.69230000 0.000000000 0.000000000 12.30120000 6.341650000 0.575877000 33 61.88120000 0.000000000 0.000000000 14.35140000 7.398570000 0.671854000 34 66.32650000 0.000000000 0.000000000 16.71680000 8.618020000 0.782591000 35 71.05260000 0.000000000 0.000000000 19.44890000 10.02650000 0.910491000 36 76.08700000 0.000000000 0.000000000 22.60880000 11.65550000 1.058420000 37 81.46070000 0.000000000 0.000000000 26.26990000 13.54290000 1.229810000 38 87.20930000 0.000000000 0.000000000 30.52020000 15.73410000 1.428790000 39 93.37350000 0.000000000 0.000000000 35.46650000 18.28400000 1.660350000 40 100.0000000 0.000000000 0.000000000 41.23850000 21.25960000 1.930560000 41 13.02300000 15.75260000 0.000000000 1.079970000 1.468310000 0.226506000 42 10.68380000 10.68380000 10.68380000 0.694840000 0.731058000 0.796164000 43 4.491020000 0.000000000 0.000000000 0.044824300 0.023108300 0.002098430 44 7.201650000 7.201650000 7.201650000 0.291861000 0.307074000 0.334421000 45 0.000000000 1.445090000 0.000000000 0.003210470 0.006421420 0.001070290 46 0.000000000 2.941180000 0.000000000 0.015321700 0.030645700 0.005107870 47 0.000000000 4.491020000 0.000000000 0.038866600 0.077738900 0.012957100 48 7.763980000 7.763980000 7.763980000 0.344338000 0.362287000 0.394551000 49 0.000000000 13.15790000 0.000000000 0.413298000 0.826656000 0.137783000 50 0.000000000 17.12330000 0.000000000 0.737658000 1.475430000 0.245916000 51 0.000000000 19.23080000 0.000000000 0.952175000 1.904490000 0.317431000 52 0.000000000 21.42860000 0.000000000 1.208020000 2.416210000 0.402721000 53 0.000000000 23.72260000 0.000000000 1.510810000 3.021850000 0.503667000 54 0.000000000 26.11940000 0.000000000 1.866980000 3.734230000 0.622403000 55 0.000000000 28.62600000 0.000000000 2.283820000 4.567970000 0.761366000 56 0.000000000 31.25000000 0.000000000 2.769680000 5.539770000 0.923340000 57 0.000000000 34.00000000 0.000000000 3.334140000 6.668780000 1.111520000 58 0.000000000 36.88520000 0.000000000 3.988220000 7.977030000 1.329570000 59 0.000000000 39.91600000 0.000000000 4.744590000 9.489890000 1.581730000 60 0.000000000 43.10340000 0.000000000 5.617940000 11.23670000 1.872880000 61 0.000000000 46.46020000 0.000000000 6.625260000 13.25150000 2.208690000 62 0.000000000 50.00000000 0.000000000 7.786350000 15.57390000 2.595770000 63 0.000000000 53.73830000 0.000000000 9.124320000 18.25000000 3.041810000 64 0.000000000 57.69230000 0.000000000 10.66620000 21.33400000 3.555850000 65 0.000000000 61.88120000 0.000000000 12.44390000 24.88960000 4.148480000 66 0.000000000 66.32650000 0.000000000 14.49490000 28.99200000 4.832240000 67 0.000000000 71.05260000 0.000000000 16.86390000 33.73020000 5.621980000 68 0.000000000 76.08700000 0.000000000 19.60380000 39.21050000 6.535400000 69 0.000000000 81.46070000 0.000000000 22.77820000 45.55980000 7.593680000 70 0.000000000 87.20930000 0.000000000 26.46360000 52.93120000 8.822290000 71 0.000000000 93.37350000 0.000000000 30.75250000 61.50950000 10.25210000 72 0.000000000 100.0000000 0.000000000 35.75730000 71.51990000 11.92060000 73 28.34880000 100.0000000 70.37100000 46.66960000 76.18290000 55.93060000 74 67.98480000 100.0000000 74.26580000 62.78950000 84.37210000 62.15630000 75 83.59200000 100.0000000 74.15010000 72.91270000 89.59460000 62.46250000 76 100.0000000 100.0000000 79.29620000 87.83280000 97.11460000 70.92110000 77 9.863630000 9.892620000 0.000000000 0.473628000 0.571849000 0.085421100 78 0.000000000 0.000000000 2.941180000 0.007734280 0.003093910 0.040730200 79 0.000000000 0.000000000 4.491020000 0.019619500 0.007848320 0.103320000 80 0.000000000 0.000000000 6.097560000 0.038438800 0.015376500 0.202426000 81 0.000000000 0.000000000 13.15790000 0.208629000 0.083457100 1.098680000 82 0.000000000 0.000000000 17.12330000 0.372364000 0.148955000 1.960940000 83 0.000000000 0.000000000 19.23080000 0.480650000 0.192272000 2.531190000 84 0.000000000 0.000000000 21.42860000 0.609797000 0.243934000 3.211300000 85 0.000000000 0.000000000 23.72260000 0.762647000 0.305078000 4.016240000 86 0.000000000 0.000000000 26.11940000 0.942436000 0.376999000 4.963040000 87 0.000000000 0.000000000 28.62600000 1.152850000 0.461170000 6.071130000 88 0.000000000 0.000000000 31.25000000 1.398110000 0.559281000 7.362710000 89 0.000000000 0.000000000 34.00000000 1.683050000 0.673263000 8.863250000 90 0.000000000 0.000000000 36.88520000 2.013220000 0.805340000 10.60200000 91 0.000000000 0.000000000 39.91600000 2.395030000 0.958075000 12.61270000 92 0.000000000 0.000000000 43.10340000 2.835890000 1.134430000 14.93430000 93 0.000000000 0.000000000 46.46020000 3.344380000 1.337840000 17.61210000 94 0.000000000 0.000000000 50.00000000 3.930490000 1.572300000 20.69870000 95 0.000000000 0.000000000 53.73830000 4.605880000 1.842470000 24.25540000 96 0.000000000 0.000000000 66.32650000 7.316920000 2.926960000 38.53230000 97 0.000000000 0.000000000 71.05260000 8.512740000 3.405320000 44.82970000 98 0.000000000 0.000000000 76.08700000 9.895840000 3.958590000 52.11330000 99 0.000000000 0.000000000 81.46070000 11.49830000 4.599600000 60.55200000 100 0.000000000 0.000000000 87.20930000 13.35860000 5.343790000 70.34900000 101 0.000000000 0.000000000 93.37350000 15.52360000 6.209840000 81.75010000 102 0.000000000 0.000000000 100.0000000 18.05000000 7.220460000 95.05460000 103 55.83310000 0.000000000 79.89610000 22.46440000 10.30840000 58.55950000 104 65.71360000 65.46360000 80.69580000 41.72460000 41.11790000 64.77050000 105 0.000000000 16.36620000 11.20940000 0.814484000 1.394420000 0.994951000 106 11.90480000 11.90480000 11.90480000 0.881537000 0.927487000 1.010090000 107 7.763980000 0.000000000 0.000000000 0.149401000 0.077020800 0.006994160 108 0.000000000 7.763980000 0.000000000 0.129544000 0.259107000 0.043186600 109 0.000000000 0.000000000 7.763980000 0.065392700 0.026158800 0.344370000 110 0.000000000 6.097560000 0.000000000 0.076147800 0.152307000 0.025385700 111 6.097560000 0.000000000 0.000000000 0.087820400 0.045274000 0.004111270 112 0.000000000 0.000000000 1.445090000 0.001620620 0.000648290 0.008534490 113 0.476190000 0.476190000 0.476190000 0.000742788 0.000781505 0.000851104 114 0.957854000 0.957854000 0.957854000 0.003454370 0.003634430 0.003958100 115 1.445090000 1.445090000 1.445090000 0.008533690 0.008978510 0.009778110 116 9.493670000 0.000000000 0.000000000 0.232518000 0.119870000 0.010885200 117 1.937980000 1.937980000 1.937980000 0.016272000 0.017120200 0.018644900 118 0.000000000 0.000000000 9.493670000 0.101773000 0.040711700 0.535954000 119 2.436650000 2.436650000 2.436650000 0.026923800 0.028327200 0.030850000 120 2.941180000 2.941180000 2.941180000 0.040726400 0.042849200 0.046665300 121 3.451680000 3.451680000 3.451680000 0.057908400 0.060926800 0.066352800 122 3.968250000 3.968250000 3.968250000 0.078694900 0.082796800 0.090170500 123 4.491020000 4.491020000 4.491020000 0.103310000 0.108695000 0.118376000 124 5.020080000 5.020080000 5.020080000 0.131981000 0.138860000 0.151227000 125 0.000000000 0.000000000 11.29030000 0.148995000 0.059601800 0.784634000 126 5.555560000 5.555560000 5.555560000 0.164935000 0.173533000 0.188987000 127 6.097560000 6.097560000 6.097560000 0.202407000 0.212957000 0.231923000 128 8.333330000 8.333330000 8.333330000 0.402325000 0.423296000 0.460994000 129 12.52720000 12.52720000 12.52720000 0.986096000 1.037500000 1.129890000 130 13.15790000 13.15790000 13.15790000 1.098580000 1.155840000 1.258780000 131 13.79690000 13.79690000 13.79690000 1.219340000 1.282900000 1.397150000 132 14.44440000 14.44440000 14.44440000 1.348750000 1.419050000 1.545430000 133 15.76580000 15.76580000 15.76580000 1.635060000 1.720280000 1.873490000 134 16.43990000 16.43990000 16.43990000 1.792770000 1.886220000 2.054200000 135 17.12330000 17.12330000 17.12330000 1.960760000 2.062960000 2.246680000 136 17.81610000 17.81610000 17.81610000 2.139470000 2.250990000 2.451450000 137 18.51850000 18.51850000 18.51850000 2.329370000 2.450790000 2.669050000 138 19.23080000 19.23080000 19.23080000 2.530960000 2.662880000 2.900030000 139 19.95310000 19.95310000 19.95310000 2.744730000 2.887800000 3.144980000 140 20.68560000 20.68560000 20.68560000 2.971230000 3.126100000 3.404510000 141 21.42860000 21.42860000 21.42860000 3.211000000 3.378370000 3.679240000 142 22.18230000 22.18230000 22.18230000 3.464630000 3.645220000 3.969850000 143 23.72260000 23.72260000 23.72260000 4.015870000 4.225190000 4.601480000 144 24.50980000 24.50980000 24.50980000 4.314770000 4.539670000 4.943970000 145 25.30860000 25.30860000 25.30860000 4.630100000 4.871440000 5.305280000 146 26.11940000 26.11940000 26.11940000 4.962580000 5.221250000 5.686240000 147 26.94240000 26.94240000 26.94240000 5.312950000 5.589890000 6.087710000 148 27.77780000 27.77780000 27.77780000 5.682010000 5.978180000 6.510580000 149 28.62600000 28.62600000 28.62600000 6.070570000 6.386990000 6.955800000 150 29.48720000 29.48720000 29.48720000 6.479480000 6.817220000 7.424350000 151 30.36180000 30.36180000 30.36180000 6.909660000 7.269820000 7.917250000 152 31.25000000 31.25000000 31.25000000 7.362030000 7.745770000 8.435590000 153 32.15220000 32.15220000 32.15220000 7.837590000 8.246120000 8.980490000 154 33.06880000 33.06880000 33.06880000 8.337360000 8.771940000 9.553140000 155 34.00000000 34.00000000 34.00000000 8.862420000 9.324370000 10.15480000 156 34.94620000 34.94620000 34.94620000 9.413920000 9.904620000 10.78670000 157 35.90790000 35.90790000 35.90790000 9.993030000 10.51390000 11.45030000 158 36.88520000 36.88520000 36.88520000 10.60100000 11.15360000 12.14690000 159 37.87880000 37.87880000 37.87880000 11.23920000 11.82500000 12.87810000 160 38.88890000 38.88890000 38.88890000 11.90880000 12.52960000 13.64540000 161 39.91600000 39.91600000 39.91600000 12.61150000 13.26890000 14.45060000 162 40.96050000 40.96050000 40.96050000 13.34870000 14.04450000 15.29520000 163 42.02280000 42.02280000 42.02280000 14.12190000 14.85800000 16.18120000 164 43.10340000 43.10340000 43.10340000 14.93290000 15.71130000 17.11050000 165 44.20290000 44.20290000 44.20290000 15.78340000 16.60610000 18.08500000 166 45.32160000 45.32160000 45.32160000 16.67530000 17.54450000 19.10700000 167 46.46020000 46.46020000 46.46020000 17.61050000 18.52840000 20.17850000 168 47.61900000 47.61900000 47.61900000 18.59100000 19.56000000 21.30200000 169 48.79880000 48.79880000 48.79880000 19.61900000 20.64160000 22.47990000 170 50.00000000 50.00000000 50.00000000 20.69670000 21.77560000 23.71480000 171 51.22320000 51.22320000 51.22320000 21.82670000 22.96440000 25.00950000 172 52.46910000 52.46910000 52.46910000 23.01130000 24.21070000 26.36680000 173 53.73830000 53.73830000 53.73830000 24.25320000 25.51740000 27.78990000 174 55.03140000 55.03140000 55.03140000 25.55520000 26.88730000 29.28180000 175 56.34920000 56.34920000 56.34920000 26.92030000 28.32360000 30.84600000 176 57.69230000 57.69230000 57.69230000 28.35170000 29.82950000 32.48600000 177 59.06150000 59.06150000 59.06150000 29.85250000 31.40860000 34.20580000 178 60.45750000 60.45750000 60.45750000 31.42640000 33.06450000 36.00910000 179 61.88120000 61.88120000 61.88120000 33.07690000 34.80100000 37.90030000 180 63.33330000 63.33330000 63.33330000 34.80800000 36.62230000 39.88380000 181 64.81480000 64.81480000 64.81480000 36.62380000 38.53280000 41.96440000 182 66.32650000 66.32650000 66.32650000 38.52870000 40.53700000 44.14710000 183 67.86940000 67.86940000 67.86940000 40.52730000 42.63970000 46.43710000 184 69.44440000 69.44440000 69.44440000 42.62450000 44.84630000 48.84020000 185 71.05260000 71.05260000 71.05260000 44.82550000 47.16200000 51.36210000 186 72.69500000 72.69500000 72.69500000 47.13590000 49.59280000 54.00940000 187 74.37280000 74.37280000 74.37280000 49.56140000 52.14480000 56.78870000 188 76.08700000 76.08700000 76.08700000 52.10840000 54.82460000 59.70710000 189 77.83880000 77.83880000 77.83880000 54.78350000 57.63910000 62.77220000 190 79.62960000 79.62960000 79.62960000 57.59360000 60.59570000 65.99220000 191 81.46070000 81.46070000 81.46070000 60.54640000 63.70230000 69.37550000 192 83.33330000 83.33330000 83.33330000 63.64960000 66.96740000 72.93130000 193 85.24900000 85.24900000 85.24900000 66.91200000 70.39970000 76.66940000 194 87.20930000 87.20930000 87.20930000 70.34240000 74.00900000 80.60010000 195 89.21570000 89.21570000 89.21570000 73.95070000 77.80530000 84.73450000 196 91.26980000 91.26980000 91.26980000 77.74700000 81.79960000 89.08440000 197 100.0000000 100.0000000 91.96320000 92.00840000 98.78500000 92.91030000 198 100.0000000 81.60980000 76.74380000 74.19320000 71.03720000 62.66260000 199 100.0000000 84.45000000 86.88810000 79.14620000 75.87800000 79.93090000 200 10.94810000 0.000000000 9.601720000 0.422464000 0.205741000 0.564354000 201 0.000000000 0.000000000 15.10070000 0.282430000 0.112979000 1.487330000 202 0.000000000 10.33340000 22.67520000 0.933476000 0.762126000 3.717550000 203 29.91970000 0.000000000 42.70670000 5.681600000 2.608070000 14.76950000 204 44.35130000 0.000000000 67.30290000 14.45470000 6.579090000 40.11370000 205 49.52420000 69.01080000 78.69820000 35.26760000 40.43180000 61.81220000 206 23.75210000 70.09500000 0.000000000 18.11520000 33.63920000 5.538480000 207 53.09250000 71.70330000 0.000000000 27.45220000 39.69580000 6.215520000 208 100.0000000 85.42810000 33.11380000 68.11600000 72.47760000 18.72450000 209 100.0000000 91.35830000 69.54470000 78.67070000 83.13580000 54.46620000 210 46.72430000 20.89060000 43.02070000 11.70290000 7.402950000 15.61430000 211 66.90700000 19.55090000 51.63590000 22.24650000 12.44730000 23.34420000 212 0.000000000 0.000000000 57.69230000 5.384230000 2.153830000 28.35430000 213 0.000000000 45.59070000 80.88170000 17.67500000 17.24030000 61.72840000 214 0.000000000 62.98100000 84.26860000 25.32340000 30.82840000 69.54960000 215 0.000000000 45.08500000 59.05490000 11.86950000 14.67140000 31.91550000 216 0.000000000 64.62960000 71.11170000 22.22020000 30.79730000 49.47620000 217 0.000000000 52.38060000 57.51790000 13.97350000 19.39080000 31.04160000 218 0.000000000 69.86820000 68.43220000 24.08930000 35.64120000 46.69180000 219 0.000000000 70.48080000 100.0000000 34.61680000 40.35660000 100.5780000 220 0.000000000 79.35790000 100.0000000 39.55510000 50.23390000 102.2240000 221 0.000000000 88.78420000 100.0000000 45.57600000 62.27660000 104.2310000 222 0.000000000 41.38020000 31.03300000 6.512640000 10.82310000 8.962870000 223 0.000000000 58.32010000 30.07070000 12.20790000 22.36190000 10.40700000 224 47.77500000 37.97340000 0.000000000 12.37600000 12.69220000 1.797710000 225 61.25000000 46.87190000 0.000000000 20.78650000 20.74470000 2.908840000 226 70.64520000 60.11200000 0.000000000 30.87940000 33.25200000 4.791160000 227 83.29470000 84.23340000 0.000000000 52.10640000 63.26250000 9.465270000 228 65.23390000 68.26600000 0.000000000 31.56060000 39.19800000 5.902970000 229 68.39920000 78.31160000 14.21970000 39.02120000 51.09640000 9.103550000 230 74.32500000 100.0000000 38.72730000 59.47160000 83.48650000 24.72720000 231 79.58850000 100.0000000 84.97470000 73.33500000 89.43500000 79.53460000 232 0.000000000 18.62310000 21.20980000 1.483450000 2.013140000 3.435440000 233 0.000000000 25.31750000 31.72670000 3.188680000 4.064940000 8.193120000 234 0.000000000 34.90900000 45.97710000 6.801720000 8.374630000 18.38980000 235 68.27620000 43.77400000 49.31960000 27.44230000 22.33530000 22.85580000 236 76.82380000 70.03830000 53.78700000 44.04710000 46.43160000 30.83190000 237 0.000000000 32.92980000 28.79140000 4.275250000 6.682900000 7.184590000 238 0.000000000 73.75240000 63.54720000 24.96480000 39.27720000 41.17270000 239 0.000000000 100.0000000 77.27440000 45.99600000 75.61560000 65.83920000 240 0.000000000 100.0000000 88.30430000 49.48760000 77.01240000 84.22670000 241 0.000000000 100.0000000 100.0000000 53.80730000 78.74040000 106.9750000 242 0.000000000 39.39160000 61.53190000 10.81250000 11.69960000 34.20710000 243 0.000000000 44.09460000 100.0000000 23.95600000 19.03330000 97.02350000 244 0.000000000 52.35390000 100.0000000 26.66540000 24.45240000 97.92680000 245 0.000000000 61.07990000 100.0000000 30.14230000 31.40680000 99.08590000 246 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 247 41.54630000 0.000000000 12.81390000 6.172290000 3.159260000 1.316250000 248 70.31060000 0.000000000 23.65710000 19.76310000 10.10090000 4.881600000 249 84.78780000 0.000000000 47.23920000 32.15640000 16.17690000 19.61110000 250 100.0000000 0.000000000 52.92420000 45.69230000 23.04130000 25.38520000 251 100.0000000 0.000000000 63.08060000 47.79090000 23.88080000 36.43710000 252 100.0000000 0.000000000 86.90030000 54.49320000 26.56190000 71.73250000 253 68.22890000 19.45920000 60.43860000 24.73070000 13.51140000 32.56630000 254 48.72460000 0.000000000 34.30220000 10.20000000 5.060170000 9.434580000 255 53.83400000 0.000000000 45.04880000 13.68920000 6.696250000 16.95140000 256 67.68530000 0.000000000 45.44390000 20.66480000 10.28540000 17.59420000 257 81.86040000 0.000000000 57.65320000 31.93040000 15.84010000 29.55520000 258 85.37840000 0.000000000 88.42760000 42.90120000 20.52610000 73.89210000 259 35.12170000 51.67870000 44.44730000 15.53660000 20.08960000 18.96210000 260 35.46710000 50.54140000 54.26730000 16.89880000 20.00510000 27.63910000 261 35.06590000 58.32980000 61.56210000 21.25310000 26.46190000 36.54150000 262 37.98160000 74.68580000 93.19550000 39.18280000 46.35280000 87.91110000 263 64.46880000 83.77100000 100.0000000 57.97760000 63.76650000 103.8650000 264 78.79220000 83.70940000 100.0000000 66.64850000 68.17850000 104.2600000 265 100.0000000 91.11700000 100.0000000 88.43020000 86.76780000 106.7000000 266 24.52780000 0.000000000 30.82510000 3.231760000 1.509370000 7.232100000 267 26.78640000 0.000000000 70.09100000 10.53740000 4.478100000 43.61270000 268 32.26250000 0.000000000 100.0000000 21.47630000 8.986810000 95.21500000 269 41.60570000 26.46420000 100.0000000 25.96590000 14.15420000 95.97590000 270 43.49310000 55.64040000 100.0000000 34.50830000 30.32830000 98.64760000 271 49.41410000 69.26280000 100.0000000 42.74380000 43.62120000 100.7790000 272 87.38650000 68.53030000 100.0000000 64.28200000 54.17770000 101.6820000 273 100.0000000 70.32150000 100.0000000 75.77310000 61.45180000 102.4810000 274 57.05340000 10.24880000 17.93840000 12.65460000 6.830390000 2.813580000 275 81.57000000 0.000000000 14.12310000 26.59130000 13.68040000 2.517210000 276 100.0000000 100.0000000 53.18250000 81.49750000 94.58040000 37.55820000 277 23.05960000 26.79320000 0.000000000 3.611640000 4.793350000 0.734901000 278 34.13740000 29.37270000 0.000000000 6.296380000 6.834130000 0.987346000 279 32.55640000 80.25540000 32.30620000 27.04300000 46.49410000 15.43350000 280 58.17970000 100.0000000 36.82360000 50.29410000 78.78240000 23.07030000 281 83.54270000 100.0000000 54.40440000 68.25880000 87.72880000 38.14210000 282 89.27070000 100.0000000 66.01880000 75.12900000 90.98060000 51.56490000 283 66.72690000 72.46480000 50.02420000 38.48400000 45.52900000 27.38440000 284 100.0000000 87.27330000 56.80130000 72.94790000 76.35770000 38.16730000 285 57.75510000 51.51830000 31.22700000 22.04240000 23.54810000 10.70030000 286 100.0000000 53.93300000 31.98570000 51.90720000 40.24400000 12.74600000 287 100.0000000 64.63140000 35.47410000 56.77890000 49.38620000 16.22570000 288 100.0000000 67.54200000 48.16870000 59.94480000 52.88140000 26.02760000 289 50.82600000 34.81090000 23.64250000 13.57790000 12.12570000 5.592940000 290 74.50760000 34.78060000 23.70110000 25.85550000 18.44470000 6.187360000 291 74.80590000 60.99490000 100.0000000 51.88550000 42.56120000 100.0930000 292 75.51760000 71.74190000 100.0000000 57.51420000 53.13900000 101.8380000 293 0.000000000 70.77200000 33.60510000 18.35810000 34.09410000 14.21170000 294 0.000000000 85.54980000 37.24240000 27.42510000 51.56380000 19.28640000 295 0.000000000 100.0000000 38.83460000 38.01200000 72.42180000 23.79400000 296 0.000000000 100.0000000 53.37790000 40.29550000 73.33530000 35.81970000 297 0.000000000 23.42150000 12.51660000 1.655870000 3.012900000 1.474050000 298 0.000000000 33.74690000 14.29130000 3.530000000 6.660170000 2.411030000 299 76.51200000 42.82270000 64.60180000 35.33030000 25.63780000 39.28060000 300 90.95650000 61.21350000 65.16050000 52.66620000 44.37710000 42.67610000 301 35.83790000 17.90660000 19.48910000 5.626100000 4.051600000 3.080030000 302 51.74140000 23.38280000 26.49130000 12.11790000 8.307800000 6.060970000 303 86.42750000 51.87350000 84.87650000 50.94940000 37.34610000 70.49200000 304 100.0000000 57.73610000 100.0000000 69.97250000 49.84980000 100.5470000 305 0.000000000 45.49680000 16.16890000 6.655130000 12.78600000 3.837800000 306 15.40400000 54.88520000 32.03670000 11.70890000 20.05580000 10.99450000 307 25.43920000 100.0000000 91.44970000 52.61790000 78.49930000 90.10720000 308 33.60700000 100.0000000 100.0000000 57.55550000 80.67260000 107.1510000 309 0.000000000 35.99710000 66.56310000 11.15450000 10.51070000 40.09540000 310 0.000000000 37.62620000 83.49760000 16.30660000 13.19000000 65.32080000 311 25.70480000 0.000000000 22.66030000 2.768260000 1.347470000 3.728610000 312 100.0000000 0.000000000 25.12220000 42.10360000 21.60570000 6.486400000 313 100.0000000 0.000000000 34.27690000 42.95180000 21.94500000 10.95330000 314 100.0000000 0.000000000 43.47890000 44.12900000 22.41590000 17.15240000 315 16.94390000 0.000000000 19.64370000 1.334900000 0.630008000 2.691180000 316 15.27790000 8.502690000 21.40190000 1.428370000 0.901001000 3.286270000 317 11.55950000 25.56510000 33.91570000 3.813350000 4.416590000 9.425510000 318 0.000000000 53.56840000 44.48770000 12.10100000 19.33940000 19.03010000 319 0.000000000 65.37960000 51.20780000 18.18600000 29.74650000 26.49600000 320 0.000000000 82.14170000 58.76390000 28.80570000 48.64440000 37.25950000 321 0.000000000 100.0000000 65.27270000 42.82100000 74.34550000 49.11920000 322 17.92590000 21.10810000 13.36620000 2.325500000 2.908900000 1.570930000 323 24.55140000 17.89220000 17.91850000 3.103020000 2.758380000 2.525640000 324 32.26720000 35.31460000 82.87670000 18.99400000 13.79320000 64.25970000 325 20.95070000 32.28680000 39.12180000 6.593070000 7.552180000 13.12150000 326 37.29560000 37.04950000 52.32510000 13.08390000 12.22260000 24.43800000 327 46.70300000 100.0000000 79.55160000 54.40020000 79.87020000 69.75730000 328 56.97890000 100.0000000 100.0000000 65.77650000 84.91080000 107.5360000 329 0.000000000 43.67700000 24.89290000 6.631510000 11.90730000 6.393010000 330 0.000000000 70.38840000 45.80690000 19.76090000 34.33750000 22.57910000 331 49.68160000 69.57050000 48.97210000 28.70950000 38.26910000 25.55620000 332 100.0000000 70.42320000 68.15070000 65.54230000 57.44310000 48.34500000 333 53.40590000 35.08430000 32.46350000 15.47310000 13.10500000 9.683100000 334 71.03330000 33.87260000 31.11420000 24.12880000 17.18840000 9.304860000 335 100.0000000 53.27580000 42.16010000 52.89220000 40.24650000 19.14000000 336 100.0000000 77.17180000 53.54310000 66.03140000 63.53800000 32.73470000 337 100.0000000 21.12680000 0.000000000 42.40940000 23.60170000 2.320910000 338 100.0000000 21.04540000 18.88240000 42.86120000 23.76660000 4.749060000 339 100.0000000 21.68090000 40.48210000 44.94840000 24.72710000 15.35320000 340 100.0000000 19.02560000 51.30270000 46.32770000 24.78350000 24.14390000 341 51.58180000 24.09540000 0.000000000 11.18010000 8.084860000 0.971428000 342 71.14940000 23.40830000 0.000000000 20.97430000 12.99100000 1.402330000 343 84.52920000 36.02010000 0.000000000 32.28080000 22.26150000 2.595950000 344 100.0000000 36.08740000 0.000000000 45.03940000 28.86210000 3.197710000 345 100.0000000 73.56880000 0.000000000 59.44360000 57.67260000 7.999690000 346 100.0000000 86.17350000 0.000000000 67.01580000 72.81800000 10.52400000 347 15.10070000 15.10070000 15.10070000 1.487190000 1.564710000 1.704060000 348 10.08490000 10.08490000 10.08490000 0.612056000 0.643959000 0.701309000 349 0.000000000 11.29030000 0.000000000 0.295161000 0.590365000 0.098399100 350 11.29030000 11.29030000 11.29030000 0.784561000 0.825456000 0.898969000 351 40.36230000 32.79050000 25.84320000 9.606860000 9.417190000 6.137270000 352 47.73890000 38.56910000 47.42830000 16.01010000 14.38120000 20.27580000 353 47.51700000 39.87250000 62.61730000 19.20860000 16.18500000 35.90530000 354 59.89720000 62.95070000 100.0000000 44.33070000 39.95280000 99.98780000 355 65.58440000 75.65990000 100.0000000 53.72090000 54.35600000 102.2730000 356 100.0000000 80.84430000 100.0000000 81.68940000 73.28520000 104.4530000 357 45.74350000 22.67340000 29.48030000 9.981640000 7.034360000 7.278390000 358 53.92080000 28.84010000 42.45540000 15.66620000 11.20620000 15.71520000 359 75.30950000 29.37450000 44.14200000 27.50940000 17.42540000 17.57770000 360 38.12510000 41.34480000 22.11150000 10.72600000 13.06440000 5.381190000 361 37.85270000 75.21170000 41.88290000 26.64260000 41.80040000 20.61920000 362 44.94770000 100.0000000 44.47740000 45.90030000 76.39790000 28.25450000 363 27.82910000 42.06700000 60.86510000 13.85740000 14.35010000 33.78830000 364 45.53960000 54.98260000 60.91670000 22.97550000 25.38920000 35.49780000 365 50.84600000 73.25150000 74.56890000 36.81720000 44.65890000 56.30190000 366 58.24590000 83.01470000 75.60540000 46.06580000 57.87310000 59.89470000 367 41.79670000 60.83140000 53.76490000 22.65020000 28.93640000 28.56060000 368 52.81550000 100.0000000 57.36450000 51.20410000 78.86900000 40.39600000 369 52.66790000 100.0000000 69.15840000 53.84640000 79.91880000 54.63510000 370 63.00490000 100.0000000 83.41090000 62.80050000 84.06240000 76.40560000 371 28.23840000 0.000000000 17.02260000 2.923680000 1.464790000 2.055330000 372 44.93150000 13.47710000 100.0000000 25.58450000 11.75150000 95.53220000 373 56.74050000 24.06330000 100.0000000 31.46820000 16.45240000 96.12950000 374 70.66040000 33.59710000 100.0000000 40.51140000 23.62180000 97.03690000 375 86.98590000 44.71320000 100.0000000 54.48830000 35.04640000 98.50550000 376 23.51830000 10.56320000 76.16640000 11.88310000 5.358990000 52.39810000 377 38.74230000 20.56940000 76.20250000 16.15720000 8.821790000 52.89550000 378 59.54810000 39.57380000 75.90410000 27.68750000 20.04860000 54.00770000 379 72.45280000 58.73980000 76.83110000 41.50840000 36.70560000 57.89050000 380 93.37350000 93.37350000 93.37350000 81.74250000 86.00330000 93.66260000 381 95.52850000 95.52850000 95.52850000 85.94890000 90.42900000 98.48230000 382 97.73660000 97.73660000 97.73660000 90.37880000 95.08980000 103.5580000 383 0.000000000 15.57160000 35.87560000 2.492600000 1.954910000 10.17380000 384 0.000000000 19.86960000 35.08170000 2.826180000 2.767670000 9.836340000 385 27.00260000 20.61760000 50.36790000 7.420640000 5.011740000 21.51350000 386 26.97610000 29.77110000 61.05270000 10.89920000 8.610580000 33.05190000 387 41.67990000 28.86190000 62.91330000 14.85750000 10.35940000 35.36250000 388 45.94140000 77.64390000 71.80230000 36.66280000 48.32450000 53.05850000 389 47.79290000 80.80180000 83.00370000 42.48890000 53.73860000 70.94300000 390 46.83360000 84.04540000 100.0000000 50.22460000 60.02910000 103.5520000 391 0.000000000 21.06240000 64.94430000 8.148840000 5.120820000 37.17600000 392 0.000000000 29.32450000 67.53760000 10.02210000 7.862490000 40.89930000 393 0.000000000 48.99920000 72.75430000 16.41530000 18.48380000 49.70770000 394 100.0000000 49.20250000 74.82600000 58.29300000 40.10810000 54.66890000 395 100.0000000 64.00690000 80.14890000 65.73690000 52.50670000 64.82720000 396 57.06540000 42.30960000 47.42200000 20.90060000 18.37720000 20.78400000 397 62.55650000 48.61410000 48.63840000 25.71670000 23.69730000 22.60750000 398 22.94690000 22.94690000 22.94690000 3.732700000 3.927270000 4.277020000 399 25.02750000 20.22760000 23.59470000 3.777880000 3.440350000 4.415270000 400 25.09310000 20.96920000 34.81140000 4.895900000 4.029210000 9.811340000 401 100.0000000 37.77550000 37.72810000 47.55720000 30.51260000 14.47380000 402 100.0000000 39.36850000 47.13230000 49.29280000 31.84640000 21.64230000 403 100.0000000 46.32630000 60.42730000 53.78340000 36.81210000 35.52010000 404 100.0000000 60.04890000 63.27230000 59.48270000 47.19590000 40.55120000 405 58.97390000 17.19250000 0.000000000 13.65450000 8.144180000 0.852494000 406 82.86290000 20.24720000 0.000000000 28.34100000 16.19380000 1.632350000 407 100.0000000 56.66120000 18.74620000 51.94430000 41.94590000 7.741180000 408 100.0000000 77.13630000 20.41770000 61.99010000 61.88860000 11.55330000 409 100.0000000 100.0000000 21.17330000 77.58970000 93.01710000 16.97890000 410 10.24510000 0.000000000 17.23850000 0.652821000 0.292900000 2.002950000 411 0.000000000 12.12380000 19.33590000 0.831656000 0.885062000 2.676800000 412 0.000000000 0.000000000 61.88120000 6.281580000 2.512790000 33.08000000 413 42.03990000 0.000000000 85.33520000 18.86810000 8.256090000 67.35420000 414 57.02950000 0.000000000 100.0000000 30.04260000 13.40300000 95.61610000 415 78.47000000 0.000000000 100.0000000 42.24540000 19.69390000 96.18730000 416 100.0000000 0.000000000 100.0000000 59.28850000 28.48010000 96.98520000 417 100.0000000 24.20990000 100.0000000 60.86840000 31.64020000 97.51190000 418 37.22360000 0.000000000 35.69940000 6.566480000 3.168800000 10.08650000 419 46.36570000 0.000000000 50.64270000 11.64910000 5.538560000 21.64440000 420 57.03430000 0.000000000 64.07960000 18.77760000 8.896980000 36.28130000 421 100.0000000 0.000000000 74.74930000 50.75570000 25.06680000 52.05020000 422 100.0000000 36.75840000 74.33500000 54.59820000 32.93740000 52.76080000 423 100.0000000 41.64100000 86.47080000 59.55680000 36.91970000 72.71190000 424 100.0000000 42.18430000 100.0000000 64.64630000 39.19660000 98.77130000 425 63.15820000 0.000000000 28.23930000 16.12970000 8.186080000 6.594990000 426 74.75620000 0.000000000 36.88390000 23.76130000 12.01720000 11.61930000 427 85.46240000 0.000000000 35.39810000 31.03080000 15.78490000 11.05120000 428 0.000000000 17.76410000 50.28520000 4.779700000 3.191680000 21.22580000 429 0.000000000 17.81970000 86.07750000 13.78560000 6.803070000 68.62520000 430 0.000000000 16.51100000 100.0000000 18.73090000 8.582350000 95.28160000 431 0.000000000 35.62870000 100.0000000 21.74550000 14.61200000 96.28660000 432 41.47440000 38.77230000 100.0000000 28.45350000 19.19150000 96.81710000 433 47.94840000 48.96450000 100.0000000 33.67560000 26.31570000 97.91700000 434 62.63830000 53.19290000 100.0000000 41.71230000 32.66470000 98.71900000 435 19.99000000 35.89980000 32.71870000 6.500080000 8.750990000 9.453920000 436 25.64450000 100.0000000 45.32760000 40.99300000 73.85320000 28.69900000 437 66.12700000 100.0000000 50.96560000 56.46310000 81.72080000 34.28600000 438 44.36640000 53.42320000 28.54190000 17.05640000 22.03280000 9.357920000 439 48.49150000 65.47570000 33.87810000 24.15380000 33.17620000 13.88350000 440 59.17360000 73.79380000 78.23160000 41.85410000 47.57180000 62.11740000 441 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 442 2.941180000 0.000000000 0.000000000 0.017670400 0.009109590 0.000827230 443 8.909850000 8.909850000 8.909850000 0.466089000 0.490383000 0.534056000 444 44.40240000 84.74530000 0.000000000 31.76340000 53.26340000 8.607160000 445 44.03720000 100.0000000 0.000000000 42.54910000 75.02130000 12.23850000 446 73.93760000 100.0000000 0.000000000 56.98530000 82.46350000 12.91430000 447 86.67970000 100.0000000 0.000000000 65.87140000 87.04460000 13.33030000 448 100.0000000 100.0000000 0.000000000 76.99580000 92.77950000 13.85110000 449 100.0000000 100.0000000 66.02370000 84.23940000 95.67720000 51.99760000 450 35.78880000 15.73370000 0.000000000 4.916600000 3.443800000 0.405651000 451 41.69810000 25.61310000 0.000000000 7.811900000 6.682220000 0.878167000 452 55.59570000 34.65640000 0.000000000 14.81680000 12.80100000 1.690110000 453 84.58290000 47.60900000 0.000000000 35.52610000 28.69350000 3.666440000 454 100.0000000 50.03240000 0.000000000 49.03590000 36.85570000 4.530040000 455 100.0000000 62.38890000 0.000000000 53.90800000 46.60060000 6.154260000 456 19.76820000 43.91870000 0.000000000 7.021040000 12.31090000 2.006290000 457 26.64670000 64.35390000 39.42340000 18.14420000 29.22160000 16.90000000 458 24.80520000 66.87960000 100.0000000 34.73410000 37.73770000 100.0660000 459 44.74760000 92.09100000 100.0000000 54.91630000 70.51410000 105.3290000 460 78.54690000 92.35400000 100.0000000 72.31640000 79.76290000 106.1970000 461 89.83530000 91.55390000 100.0000000 80.07780000 82.91950000 106.3980000 462 89.83820000 100.0000000 100.0000000 86.38750000 95.53640000 108.5000000 463 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 464 30.61980000 36.57930000 0.000000000 6.970120000 9.406820000 1.448420000 465 32.22310000 46.29290000 0.000000000 9.989990000 14.90840000 2.351210000 466 48.54030000 50.96630000 11.69310000 16.69550000 20.64520000 3.948760000 467 48.08970000 56.97300000 0.000000000 18.61860000 25.00270000 3.844950000 468 57.42180000 57.83970000 11.96540000 23.07030000 27.79820000 5.037330000 469 83.20730000 73.44680000 0.000000000 45.66340000 50.47010000 7.335580000 470 52.45290000 47.03090000 18.35860000 17.21690000 18.92930000 5.021450000 471 55.73800000 49.73010000 38.12780000 21.26300000 22.13460000 14.50220000 472 60.26610000 53.12200000 54.81130000 27.24680000 26.69770000 28.93280000 473 11.27770000 6.767730000 15.84690000 0.749378000 0.492244000 1.701600000 474 0.000000000 8.603320000 12.70520000 0.355521000 0.402004000 1.071380000 475 0.000000000 10.11480000 40.20410000 2.664990000 1.436910000 12.89110000 476 0.000000000 12.55950000 55.24120000 5.267010000 2.703920000 25.89670000 477 21.39250000 33.55170000 87.90110000 18.21900000 12.63000000 72.72660000 478 26.32970000 47.19720000 100.0000000 27.10010000 22.06840000 97.44370000 479 50.08370000 55.35810000 68.38280000 26.57820000 27.25830000 44.87740000 480 85.07940000 54.25090000 68.95970000 46.19270000 36.72490000 46.43600000 481 100.0000000 92.72810000 91.14350000 86.24540000 87.72640000 89.54530000 482 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 483 11.28200000 27.83220000 24.77960000 3.326090000 4.805010000 5.151920000 484 0.000000000 26.38200000 38.65840000 4.140730000 4.710250000 12.39150000 485 0.000000000 24.79990000 51.26250000 5.817880000 4.992810000 22.42090000 486 13.04630000 27.16830000 63.48920000 9.149820000 6.971790000 35.70050000 487 0.000000000 44.00680000 41.68240000 8.514450000 12.81490000 15.83310000 488 29.05200000 83.18820000 46.05850000 29.85610000 50.42700000 25.35870000 489 46.75420000 87.43330000 52.95160000 38.81980000 59.00840000 32.71630000 490 47.64710000 87.38550000 82.90270000 46.60870000 62.11100000 72.17410000 491 0.000000000 31.64850000 21.24880000 3.446540000 5.935760000 4.101780000 492 0.000000000 58.77640000 18.51730000 11.55430000 22.40260000 6.033710000 493 45.54840000 71.56150000 15.20880000 24.73240000 38.14960000 7.564200000 494 49.77640000 91.76190000 17.57810000 38.88360000 63.94070000 12.36050000 495 23.13920000 56.89240000 0.000000000 11.99320000 21.53930000 3.525550000 496 24.88550000 100.0000000 0.000000000 37.69310000 72.51780000 12.01120000 497 74.45340000 100.0000000 22.42230000 57.98600000 82.90160000 16.47760000 498 87.13760000 100.0000000 24.13940000 67.01480000 87.54250000 17.51980000 499 28.24970000 33.96910000 28.37460000 7.016560000 8.426690000 7.183570000 500 40.83400000 32.94620000 31.87820000 10.32420000 9.772500000 8.998580000 501 100.0000000 32.93960000 52.07860000 48.64700000 29.19920000 25.60570000 502 100.0000000 37.20870000 63.52700000 51.95890000 32.05350000 38.33160000 503 100.0000000 57.13860000 69.88230000 59.88830000 45.42910000 48.63360000 504 38.55020000 21.43610000 36.89510000 8.291930000 5.836890000 11.24850000 505 59.73370000 26.33850000 35.94760000 17.08280000 11.41010000 11.27390000 506 64.42260000 24.89420000 42.18150000 20.06360000 12.52490000 15.53480000 507 20.40940000 12.95690000 10.43770000 1.776510000 1.494530000 0.851985000 508 18.15310000 19.76930000 4.327400000 1.997210000 2.529660000 0.477815000 509 15.82200000 24.03100000 26.11490000 3.211410000 3.854370000 5.512790000 510 16.84860000 68.86050000 37.15060000 18.60700000 32.72530000 16.05640000 511 36.11830000 69.92240000 52.33110000 25.01620000 36.56360000 28.51330000 512 84.02830000 79.77710000 57.78090000 55.28350000 60.17520000 37.01970000 513 100.0000000 82.61000000 67.17900000 72.25480000 71.25550000 49.39170000 514 61.04100000 71.12810000 25.12030000 31.69460000 41.33450000 10.84220000 515 68.58690000 87.43940000 23.39920000 45.35280000 62.81200000 13.61280000 516 88.46170000 89.84230000 41.40930000 62.34150000 73.78330000 24.56680000 517 87.92100000 100.0000000 42.21950000 69.53750000 88.62160000 27.64420000 518 62.40780000 74.11230000 38.27490000 35.30750000 45.41860000 18.35300000 519 64.63950000 92.82480000 40.04880000 48.56500000 69.82570000 23.56470000 520 72.65580000 94.01150000 54.77130000 56.44640000 74.88960000 36.65570000 521 19.65700000 30.38680000 9.637400000 3.861770000 5.844960000 1.476080000 522 18.01450000 32.87220000 0.000000000 4.046900000 6.682290000 1.076570000 523 81.31420000 41.81490000 18.22190000 31.84820000 24.17140000 5.225230000 524 86.69920000 59.27730000 20.18930000 41.98520000 38.39070000 8.001700000 525 100.0000000 67.48680000 21.58350000 56.91640000 51.62650000 10.21320000 526 20.86420000 17.95120000 9.943050000 2.244810000 2.359220000 0.927664000 527 22.75300000 20.64220000 0.000000000 2.702270000 3.044970000 0.445348000 528 32.28610000 31.02060000 9.641560000 6.262250000 7.262050000 1.623650000 529 33.81240000 45.31770000 13.41980000 10.28880000 14.59090000 3.416180000 530 32.64550000 53.64630000 9.055120000 12.69810000 20.03080000 3.678000000 531 16.38040000 5.029340000 10.35840000 0.944802000 0.546849000 0.701951000 532 17.12060000 0.000000000 13.06010000 1.055670000 0.520523000 1.120610000 533 16.12000000 7.635410000 15.99720000 1.190450000 0.762066000 1.764980000 534 14.83030000 12.22600000 17.37040000 1.356050000 1.176750000 2.169970000 535 20.51510000 0.000000000 55.24110000 6.159820000 2.610300000 25.83150000 536 74.18930000 22.33360000 77.55190000 33.03000000 17.80030000 55.78780000 537 85.03970000 22.49630000 90.64660000 44.76360000 23.39290000 78.39140000 538 36.66110000 0.000000000 25.40800000 5.425220000 2.694420000 4.883080000 539 83.11890000 0.000000000 23.41580000 28.20140000 14.45310000 5.188420000 540 91.53260000 45.31090000 27.02380000 41.23270000 30.44820000 9.028370000 541 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 542 0.000000000 53.78440000 36.34230000 11.09020000 19.06390000 13.30940000 543 38.99700000 65.36770000 40.87710000 21.76040000 31.76790000 18.21350000 544 52.79210000 66.72470000 56.35360000 29.92000000 36.63860000 32.29750000 545 52.71670000 57.01310000 51.25340000 24.63050000 27.64650000 25.79370000 546 60.92910000 59.45420000 51.23240000 29.41270000 31.60250000 26.28570000 547 67.88940000 63.26750000 59.15770000 36.35020000 37.47930000 35.14170000 548 76.06570000 70.33510000 61.42700000 45.26720000 47.10640000 39.10400000 549 36.00080000 22.01870000 17.04370000 6.011450000 4.960370000 2.572590000 550 43.59980000 36.13760000 17.68790000 10.85680000 11.21110000 3.688030000 551 45.43090000 43.84860000 33.04630000 14.68820000 16.05050000 10.61100000 552 46.88420000 78.69230000 33.58550000 30.54370000 46.89790000 16.02990000 553 17.18100000 93.68350000 15.55630000 32.13600000 62.52190000 11.95500000 554 17.97250000 92.65330000 55.58420000 36.14050000 62.94330000 36.24890000 555 21.30290000 92.87220000 100.0000000 49.81580000 68.71500000 105.2500000 556 24.17560000 49.33120000 53.00780000 13.84480000 17.84360000 26.14120000 557 69.11040000 57.15880000 54.24930000 33.45210000 32.21730000 29.10610000 558 72.34530000 56.41780000 59.02930000 36.05290000 33.00840000 34.15220000 559 35.10160000 49.96010000 34.99290000 13.69030000 18.39010000 12.22680000 560 42.17870000 49.53100000 33.34740000 15.41680000 19.08410000 11.32510000 561 53.43340000 59.86010000 42.54300000 24.71510000 29.59650000 18.85340000 562 74.57350000 63.26860000 55.49540000 39.64090000 39.26270000 31.40230000 563 86.98430000 70.00270000 56.86280000 51.88340000 50.37500000 34.32700000 564 94.08190000 73.57610000 72.48340000 63.16430000 58.56940000 54.59760000 565 21.01220000 12.04690000 17.42020000 2.061480000 1.523470000 2.212440000 566 67.23400000 0.000000000 13.82860000 17.45670000 8.972560000 2.031960000 567 100.0000000 0.000000000 14.56500000 41.49930000 21.36400000 3.304320000 568 100.0000000 45.15130000 18.09440000 47.88060000 33.87210000 6.218590000 569 100.0000000 89.28010000 19.59460000 69.60460000 77.19470000 13.85780000 570 100.0000000 100.0000000 38.09140000 79.15660000 93.64390000 25.23050000 571 16.27190000 17.98520000 22.17040000 2.239440000 2.298630000 3.770440000 572 14.01670000 45.18920000 62.41860000 13.18320000 15.31070000 35.81880000 573 18.99200000 51.11520000 73.09580000 18.30220000 20.52320000 50.48850000 574 19.29350000 57.83830000 92.59640000 27.07260000 28.11990000 83.88880000 575 47.13690000 59.24230000 91.46800000 34.02980000 32.61580000 82.26460000 576 46.88860000 75.85580000 100.0000000 45.31970000 50.18880000 101.9110000 577 13.27060000 40.50610000 24.58790000 6.211070000 10.38160000 6.001820000 578 11.90310000 47.30160000 23.21880000 8.001850000 14.27320000 6.146540000 579 0.000000000 71.81600000 21.39940000 17.87280000 34.77550000 8.957360000 580 9.889460000 25.83390000 9.706380000 2.183620000 3.818930000 1.182160000 581 66.03030000 25.08600000 9.544040000 18.36440000 11.99180000 1.886680000 582 68.38000000 33.12260000 0.000000000 21.02410000 15.51190000 1.886280000 583 81.43930000 38.47530000 43.58590000 33.53690000 23.45050000 17.99240000 584 91.13970000 43.87750000 61.26930000 45.61520000 31.47960000 35.88670000 585 33.51640000 46.49130000 23.12900000 11.08230000 15.48040000 6.184890000 586 41.62470000 65.55930000 22.50950000 20.80860000 31.62480000 8.569430000 587 39.09880000 29.02660000 9.436070000 7.683660000 7.445380000 1.558600000 588 47.65710000 35.45630000 10.02090000 11.85140000 11.52470000 2.200800000 589 72.18710000 56.16390000 12.81340000 30.38980000 30.57140000 5.331130000 590 80.37700000 58.44370000 65.95180000 43.70790000 37.99040000 42.90780000 591 88.99580000 66.08200000 77.95220000 56.72700000 49.38430000 61.25130000 592 91.78460000 73.08740000 89.61560000 66.27960000 59.17130000 82.26950000 593 24.47440000 46.03020000 28.64020000 9.511440000 14.40700000 8.329140000 594 22.24320000 69.76370000 29.14370000 18.90990000 33.65850000 11.78620000 595 74.92220000 89.93040000 46.43160000 53.50810000 69.23410000 28.05050000 596 82.95900000 88.94490000 59.03810000 60.64430000 71.63820000 40.32250000 597 100.0000000 91.52230000 81.48580000 82.17210000 84.72180000 72.33400000 598 45.03450000 20.66470000 52.65840000 12.65480000 7.670970000 23.90220000 599 53.72920000 24.35500000 81.69030000 23.68950000 13.25290000 61.95400000 600 27.83380000 8.828420000 31.77830000 4.098730000 2.200590000 7.812470000 601 40.60120000 8.930590000 44.13610000 8.844300000 4.476090000 16.05720000 602 57.20970000 7.029410000 56.08440000 17.23990000 8.457820000 27.24550000 603 67.41690000 10.07980000 66.29390000 24.86620000 12.31650000 39.37840000 604 83.71920000 0.000000000 70.83600000 36.35410000 17.76490000 45.83560000 605 78.52330000 20.52290000 61.06100000 31.43010000 17.12950000 33.62400000 606 100.0000000 21.23380000 62.69100000 48.88630000 26.21350000 36.36480000 607 85.00120000 20.52480000 42.07850000 32.63490000 18.14490000 15.88120000 608 91.13290000 64.17060000 53.73370000 51.70560000 46.13490000 30.31840000 609 100.0000000 73.08180000 61.08780000 65.28550000 59.58720000 40.06610000 610 26.15040000 14.93200000 9.012800000 2.795420000 2.241010000 0.761094000 611 28.26600000 12.03120000 0.000000000 2.901060000 1.999520000 0.233081000 612 43.58280000 13.49900000 0.000000000 7.075830000 4.296910000 0.456543000 613 43.09630000 43.43380000 81.19570000 23.60600000 19.33270000 62.32750000 614 60.56650000 83.41310000 83.83020000 49.93220000 59.95210000 73.13390000 615 60.93400000 83.22900000 90.50130000 52.24530000 60.71250000 84.93190000 616 73.41490000 90.51630000 92.78380000 64.92900000 74.34410000 91.17210000 617 72.72810000 100.0000000 92.15440000 71.31040000 88.10660000 92.30020000 618 24.05490000 40.86220000 44.31740000 9.806520000 12.12370000 17.62450000 619 34.20180000 39.96800000 61.33950000 14.81510000 13.99010000 34.21510000 620 50.52100000 45.41190000 60.22910000 21.40660000 19.70660000 33.69940000 621 54.01600000 47.19750000 77.55110000 27.82110000 23.33320000 57.12900000 622 20.08960000 19.16670000 27.73920000 3.229870000 2.944120000 6.036910000 623 17.10040000 79.29850000 27.88650000 23.40630000 43.81530000 12.92870000 624 47.49680000 79.54390000 56.12300000 34.70430000 49.39740000 34.26750000 625 49.89310000 81.19930000 65.98360000 38.78950000 52.74040000 46.05410000 626 72.75430000 42.32810000 32.11090000 27.37040000 21.95290000 10.57490000 627 82.87780000 46.15940000 30.98950000 35.18930000 27.67900000 10.68310000 628 65.25250000 35.72640000 21.69030000 20.47140000 16.00090000 5.292600000 629 72.08460000 41.91780000 20.33430000 25.90260000 21.13510000 5.562930000 630 82.65980000 65.20770000 30.75010000 42.43990000 42.45230000 13.03090000 631 85.57390000 80.61410000 49.40870000 55.36550000 61.14920000 28.95590000 632 9.743040000 18.03620000 16.55700000 1.418900000 1.919200000 2.108330000 633 0.000000000 23.28540000 20.45090000 2.000530000 3.120840000 3.381330000 634 0.000000000 57.74660000 55.13530000 15.56170000 23.32770000 29.22700000 635 0.000000000 57.39860000 71.30380000 19.12620000 24.52770000 48.69510000 636 0.000000000 72.90340000 85.56570000 30.65620000 40.81750000 73.41520000 637 0.000000000 82.17610000 86.25440000 36.25960000 51.66040000 76.40720000 638 43.25030000 90.55320000 92.11920000 50.34300000 66.89050000 89.24350000 639 64.01310000 92.11460000 100.0000000 63.35930000 74.89160000 105.7290000 640 37.18560000 29.46270000 52.97830000 11.57940000 9.066310000 24.53770000 641 53.80240000 31.14780000 77.38360000 23.57090000 15.04760000 55.49690000 642 57.91760000 38.96520000 100.0000000 34.95670000 22.61660000 97.13550000 643 17.27420000 0.000000000 39.70910000 3.235130000 1.394310000 12.51000000 644 22.49960000 9.290780000 40.04310000 4.155040000 2.148900000 12.83790000 645 26.37300000 50.72010000 39.38780000 12.56040000 18.13560000 15.03020000 646 28.82490000 54.96190000 52.78630000 16.69010000 22.32640000 26.64180000 647 39.54670000 56.26410000 55.18790000 20.33880000 24.90710000 29.33380000 648 43.21670000 57.96170000 73.49440000 26.46210000 28.58120000 52.18530000 649 0.000000000 12.92710000 12.89570000 0.597116000 0.874942000 1.183630000 650 56.85900000 33.03400000 9.660840000 15.14900000 12.44340000 2.157920000 651 69.44780000 42.66730000 0.000000000 23.98960000 20.52330000 2.697330000 652 79.21360000 54.23070000 0.000000000 34.01170000 31.35460000 4.259880000 653 86.49030000 64.75280000 0.000000000 43.71890000 42.95090000 5.986690000 654 92.79830000 65.60920000 11.23070000 49.28740000 46.40300000 7.131530000 655 29.17280000 18.80550000 0.000000000 3.652300000 3.228650000 0.430743000 656 28.51560000 37.41760000 51.03910000 10.83990000 11.22380000 23.15090000 657 36.41860000 49.54730000 58.91270000 17.74260000 19.82650000 32.44390000 658 65.21250000 52.54370000 65.49630000 31.90670000 28.51950000 41.12850000 659 73.16400000 64.87650000 65.76840000 41.73200000 41.18280000 43.39670000 660 59.45370000 27.83610000 22.47730000 15.96720000 11.34160000 4.898290000 661 75.84910000 71.31640000 19.93170000 39.97560000 45.78980000 9.457690000 662 83.17420000 71.03910000 26.41190000 45.32310000 48.27970000 11.99310000 663 34.87770000 0.000000000 55.46690000 9.004920000 4.071940000 26.19480000 664 34.53240000 9.466650000 64.63450000 11.09190000 5.217230000 36.65660000 665 50.89930000 12.50310000 82.43510000 21.51130000 10.27490000 62.71680000 666 69.01010000 16.04420000 100.0000000 36.92980000 17.90260000 96.12170000 667 0.000000000 9.480420000 28.66380000 1.357200000 0.864532000 6.155810000 668 9.978890000 18.24330000 31.29340000 2.509790000 2.390770000 7.680040000 669 10.13370000 18.70570000 45.06590000 4.291940000 3.181490000 16.78180000 670 27.04720000 16.36700000 65.57660000 10.12910000 5.389160000 37.91210000 671 45.82180000 36.82510000 79.19860000 22.19350000 16.09280000 58.58740000 672 58.23390000 50.20080000 90.00280000 34.72970000 27.91250000 78.60670000 673 0.000000000 84.93780000 21.55530000 25.58920000 50.19360000 11.57800000 674 0.000000000 100.0000000 21.82760000 36.39240000 71.77390000 15.26480000 675 25.66410000 100.0000000 27.61850000 38.89430000 73.01400000 17.62870000 676 80.52120000 31.17720000 31.83290000 29.81980000 19.29570000 9.785600000 677 91.70420000 31.54770000 37.10210000 38.95430000 24.04510000 13.27810000 678 90.23710000 34.52550000 63.04480000 42.89190000 26.47590000 37.15320000 679 91.56160000 46.34520000 78.42920000 51.13790000 34.92380000 59.49360000 680 91.24330000 100.0000000 82.22860000 81.20660000 93.59460000 75.31320000 681 31.82140000 38.19640000 36.47830000 9.595450000 11.11360000 11.93780000 682 30.55530000 38.20240000 41.25570000 9.923680000 11.21440000 15.14100000 683 30.25970000 89.50930000 67.57440000 38.62180000 60.63340000 49.62600000 684 48.70020000 89.08840000 75.88430000 46.04630000 63.77610000 61.45090000 685 67.93730000 92.74280000 78.81670000 58.61360000 73.96210000 67.23910000 686 25.48940000 42.06780000 32.45230000 8.885100000 12.31120000 9.870990000 687 37.70120000 57.75460000 32.00750000 16.99160000 24.46230000 11.55120000 688 54.84670000 60.02530000 34.01680000 24.32900000 29.62550000 13.26790000 689 58.19120000 82.06230000 42.48220000 38.43300000 53.86470000 22.76950000 690 23.85990000 31.32110000 19.31260000 5.033360000 6.671320000 3.565510000 691 28.86210000 37.43070000 19.10200000 7.274590000 9.810820000 3.992810000 692 27.75920000 53.29410000 17.48600000 11.81090000 19.34490000 5.155470000 693 25.62090000 58.69930000 26.11720000 14.08600000 23.60240000 8.752490000 694 83.31550000 70.96980000 65.40290000 51.51870000 50.71220000 44.26190000 695 84.98240000 81.82770000 75.02310000 61.43110000 64.71440000 59.54310000 696 21.85560000 19.64770000 16.07330000 2.777130000 2.876160000 2.107040000 697 19.78060000 23.52310000 36.12960000 4.575010000 4.338060000 10.67930000 698 19.55040000 28.37630000 46.99610000 6.808710000 6.439830000 18.86210000 699 21.27100000 53.84450000 46.30250000 13.85420000 20.36390000 20.60010000 700 32.63660000 75.84370000 49.32390000 26.79500000 42.27290000 26.74210000 701 9.296120000 17.96540000 10.41760000 1.166640000 1.804110000 0.941093000 702 11.62640000 19.93890000 6.612350000 1.440020000 2.267690000 0.602626000 703 36.32110000 81.79470000 15.14410000 27.71460000 48.37750000 9.367210000 704 43.83890000 100.0000000 24.00490000 43.26480000 75.29980000 16.35750000 705 20.14560000 42.31670000 10.09510000 6.727700000 11.46420000 2.468930000 706 27.20660000 84.78290000 0.000000000 27.22650000 50.96050000 8.401720000 707 58.23280000 84.99840000 53.24140000 42.07940000 58.30310000 32.69060000 708 79.22280000 85.91870000 72.24270000 59.14830000 67.49390000 56.19210000 709 43.77480000 27.74120000 35.68380000 10.70640000 8.467620000 10.88170000 710 69.12360000 39.13290000 39.93590000 25.24650000 19.48200000 14.99780000 711 78.84320000 48.09370000 45.08620000 34.72830000 28.15450000 20.01460000 712 41.04650000 25.09110000 26.08910000 8.467680000 6.794180000 5.792550000 713 43.67160000 29.00900000 24.65860000 9.850370000 8.473420000 5.469120000 714 57.24700000 38.03990000 50.98100000 20.46340000 16.41200000 23.59130000 715 63.21830000 37.94490000 60.00190000 25.15640000 18.59240000 33.02990000 716 25.02050000 9.456150000 51.08270000 6.278920000 3.057800000 21.85560000 717 71.57470000 0.000000000 73.98450000 29.06900000 13.91120000 49.92410000 718 74.65340000 11.40000000 81.66340000 33.54540000 16.40590000 61.99940000 719 86.75910000 15.62960000 100.0000000 48.82830000 23.98360000 96.66840000 720 54.72160000 14.51550000 68.32050000 19.27340000 9.795480000 41.80950000 721 100.0000000 21.96480000 74.55020000 51.97560000 27.59570000 52.18220000 722 100.0000000 23.25010000 86.64850000 55.85430000 29.41920000 71.77040000 723 100.0000000 54.99710000 87.10590000 64.16330000 45.79290000 75.29700000 724 13.66940000 22.76260000 0.000000000 1.897950000 3.026630000 0.484189000 725 19.02520000 24.63370000 10.20580000 2.833170000 3.883610000 1.225760000 726 15.39720000 24.68270000 14.63440000 2.585610000 3.749990000 1.969310000 727 56.87270000 24.90190000 10.58300000 13.73030000 9.558990000 1.798990000 728 76.07810000 35.66230000 91.63420000 41.20100000 25.01770000 80.73120000 729 22.20000000 13.94390000 100.0000000 20.02540000 8.935940000 95.28170000 730 84.66790000 31.30690000 100.0000000 49.42910000 27.52570000 97.32050000 731 37.17870000 14.04210000 28.35970000 6.286690000 3.818470000 6.325710000 732 44.66840000 21.22830000 34.86670000 9.969910000 6.691110000 10.09030000 733 58.18100000 24.62320000 46.93670000 17.59160000 11.10850000 19.14520000 734 87.83390000 36.03170000 51.04250000 38.90400000 25.20500000 24.37390000 735 52.78360000 21.37710000 35.49880000 13.16840000 8.358920000 10.61950000 736 71.03220000 20.81890000 47.61840000 24.10080000 13.70000000 19.88000000 737 80.81230000 22.41070000 55.20620000 32.03250000 17.92840000 27.38920000 738 52.50290000 15.07810000 39.55670000 12.90380000 7.209020000 13.01830000 739 89.57760000 10.90290000 45.79520000 35.88600000 18.53190000 18.66910000 740 100.0000000 22.78460000 30.10810000 43.90920000 24.54030000 9.175450000 741 100.0000000 38.96610000 28.14980000 46.84940000 30.70440000 9.281960000 742 100.0000000 76.22370000 39.79890000 63.29940000 61.57720000 21.02330000 743 100.0000000 90.10400000 47.69480000 73.21540000 79.54900000 30.06750000 744 28.89730000 61.73290000 48.87420000 18.80600000 27.64050000 23.94010000 745 34.94950000 72.69240000 60.65610000 27.82840000 39.97680000 37.75940000 746 67.47540000 75.35750000 75.46870000 46.27290000 51.22640000 58.39760000 747 77.72330000 83.28260000 76.74160000 57.68970000 64.07870000 62.18570000 748 58.11440000 65.73460000 80.46930000 37.90470000 39.34750000 64.26630000 749 68.98370000 83.47910000 80.96760000 53.60880000 62.01360000 68.61580000 750 78.24500000 90.83850000 80.48270000 64.18610000 74.77060000 69.74020000 751 39.56340000 46.68410000 46.03820000 15.33980000 17.47000000 19.74560000 752 39.04990000 70.56480000 75.26030000 31.48540000 39.77570000 56.65770000 753 45.53060000 75.69990000 85.26470000 39.40610000 47.62620000 73.74990000 754 88.27200000 80.96840000 100.0000000 71.87070000 68.33580000 104.0150000 755 30.26620000 24.27010000 61.16330000 10.68820000 7.161330000 32.91080000 756 35.56730000 32.07120000 71.66490000 15.85300000 11.52400000 46.86000000 757 20.76450000 10.52910000 30.83470000 2.910730000 1.719600000 7.294480000 758 17.50940000 14.13270000 31.85210000 2.835180000 2.011240000 7.881380000 759 14.56360000 7.749620000 33.65860000 2.371000000 1.223730000 8.739630000 760 11.98030000 21.39490000 55.96370000 6.627490000 4.622250000 26.93900000 761 10.11670000 44.89670000 90.67240000 20.96530000 18.25000000 78.70040000 762 21.24040000 55.85960000 100.0000000 29.35160000 27.79680000 98.43070000 763 0.000000000 28.64560000 82.97680000 14.26140000 9.364850000 63.82070000 764 0.000000000 26.73490000 100.0000000 20.01510000 11.15100000 95.70970000 765 26.01060000 75.66050000 100.0000000 39.54640000 47.04910000 101.6100000 766 61.90840000 10.83850000 14.10080000 14.87800000 8.042550000 2.041760000 767 67.73010000 12.90590000 9.728820000 18.00820000 9.859400000 1.517110000 768 78.12990000 27.79300000 16.50770000 26.44910000 16.77300000 3.644650000 769 89.98800000 51.64230000 21.89920000 41.69930000 33.83460000 7.686240000 770 89.15680000 77.82800000 77.90800000 63.06720000 61.89790000 63.26450000 771 88.69880000 78.68160000 90.87150000 67.40600000 64.39230000 85.52860000 772 36.59070000 27.46250000 35.52590000 8.457470000 7.240860000 10.66820000 773 35.77920000 25.55150000 42.54340000 8.836040000 6.877900000 15.30530000 774 63.92000000 66.76370000 59.89700000 35.96490000 39.69820000 36.41610000 775 75.38760000 77.54730000 59.69330000 48.39860000 54.62740000 38.41380000 776 43.72380000 44.76850000 39.69050000 15.15760000 16.60650000 14.80520000 777 79.41020000 44.54380000 50.71490000 34.93180000 26.50570000 24.53110000 778 87.81460000 51.55460000 62.11090000 45.64970000 35.16720000 37.57790000 779 46.67210000 31.37420000 43.81030000 13.45080000 10.74280000 16.77100000 780 49.12410000 34.57860000 54.79480000 16.90510000 13.29690000 26.87440000 781 68.91670000 46.60100000 69.29490000 32.91220000 25.93830000 45.50160000 782 73.75250000 47.33510000 100.0000000 46.06400000 31.91050000 98.34410000 783 20.41850000 25.08640000 68.22640000 10.74700000 7.177500000 41.62950000 784 21.26710000 54.41540000 68.34850000 18.56580000 22.59270000 44.35390000 785 21.13110000 61.43960000 81.11670000 24.99220000 29.75420000 64.13800000 786 15.39690000 72.79180000 56.53490000 23.60800000 37.97980000 33.07890000 787 30.27220000 100.0000000 58.67940000 44.32470000 75.29110000 41.49220000 788 28.89860000 100.0000000 81.94840000 50.09690000 77.56670000 73.39860000 789 51.18170000 100.0000000 90.58800000 59.73390000 82.20300000 88.84570000 790 18.35740000 43.01520000 76.09580000 16.48250000 15.65690000 54.03750000 791 25.00140000 41.99780000 84.05210000 19.57960000 16.54830000 66.72960000 792 31.41090000 59.00470000 82.87530000 26.37970000 28.85850000 66.77610000 793 29.69900000 73.19840000 86.87520000 34.10650000 42.78230000 75.89360000 794 39.54270000 82.41800000 92.00410000 43.75840000 55.52020000 87.17880000 795 26.35040000 19.46190000 14.34850000 3.425200000 3.187890000 1.757890000 796 30.81660000 24.76470000 8.940710000 4.847440000 4.954090000 1.168310000 797 51.91350000 27.95140000 17.40620000 12.30620000 9.517000000 3.211950000 798 59.66690000 39.56370000 20.68790000 18.46360000 16.36120000 5.143540000 799 67.99170000 59.36080000 20.76020000 29.57890000 32.04300000 7.607500000 800 68.37510000 59.87240000 38.66270000 31.67890000 33.25460000 16.45290000 801 81.27620000 69.01730000 41.95030000 44.63060000 46.18600000 20.56730000 802 100.0000000 71.98380000 77.93080000 69.02310000 60.14230000 62.64690000 803 26.26190000 16.58880000 22.36370000 3.536910000 2.767380000 3.858950000 804 35.04700000 17.66140000 59.01810000 10.56020000 5.962560000 30.26280000 805 58.70750000 48.69180000 68.48470000 27.97840000 24.42190000 44.39070000 806 65.89950000 50.08080000 76.87950000 34.41900000 28.17560000 56.69110000 807 65.21410000 53.50210000 86.43140000 38.24070000 31.61690000 72.74280000 808 27.06650000 27.15410000 22.24110000 5.023910000 5.532500000 4.272110000 809 37.88950000 35.31200000 21.20110000 9.098800000 10.00160000 4.573290000 810 36.49980000 38.63670000 11.15750000 9.056290000 11.20900000 2.447270000 811 42.34130000 42.95490000 0.000000000 11.80530000 14.36340000 2.150350000 812 55.47560000 52.50190000 0.000000000 19.95460000 23.15740000 3.418350000 813 76.55450000 57.38450000 37.53620000 35.54910000 33.73500000 15.60490000 814 87.12530000 56.87610000 100.0000000 58.84270000 43.59710000 99.92650000 815 23.41250000 18.87030000 92.10730000 17.67050000 8.725660000 79.71570000 816 23.75670000 26.55110000 100.0000000 21.73340000 11.99290000 95.78170000 817 23.51790000 36.81240000 100.0000000 23.73040000 16.04420000 96.45850000 818 0.000000000 15.03870000 71.23710000 9.115890000 4.533800000 45.27090000 819 13.13390000 11.44050000 84.40330000 13.21020000 5.825460000 65.59030000 820 23.40030000 0.000000000 86.73630000 14.89060000 6.151900000 69.59180000 821 30.52560000 82.59170000 85.60940000 39.33880000 53.65700000 75.51140000 822 27.57600000 14.73950000 15.45400000 3.253740000 2.430650000 1.855350000 823 46.63490000 10.61360000 10.91830000 8.100220000 4.542420000 1.175460000 824 49.99330000 27.20380000 23.22510000 11.74690000 9.002930000 4.934250000 825 74.24540000 25.05120000 22.42600000 23.80000000 14.72030000 5.119910000 826 81.09320000 42.16010000 36.91330000 33.37760000 24.91850000 13.62130000 827 58.68070000 46.17380000 39.47560000 21.64250000 20.59050000 15.08540000 828 61.35030000 76.09540000 54.40210000 38.42250000 48.37260000 32.11550000 829 66.12540000 76.02670000 62.27190000 42.54430000 50.25070000 40.84250000 830 0.000000000 85.08570000 49.59580000 28.92800000 51.68230000 28.68910000 831 10.53400000 92.01340000 63.15140000 36.63690000 62.33460000 44.53190000 832 40.94710000 28.17990000 18.25800000 8.422650000 7.568070000 3.264580000 833 100.0000000 32.40630000 14.33690000 44.49050000 27.36100000 4.257590000 834 100.0000000 51.60970000 50.96990000 53.68690000 39.59770000 26.30560000 835 100.0000000 62.56750000 53.94140000 58.63220000 48.61830000 30.63830000 836 18.94880000 35.11170000 20.20700000 5.177600000 7.920170000 4.065200000 837 17.37540000 58.69230000 42.45010000 14.69780000 23.70560000 18.17490000 838 16.64260000 62.44560000 53.30420000 18.01840000 27.61340000 28.09620000 839 13.81360000 70.22980000 79.91810000 27.99270000 37.56080000 63.56350000 840 15.82700000 93.62380000 80.69380000 42.91110000 66.74640000 69.65150000 841 12.93780000 97.81400000 94.22920000 50.35820000 74.69900000 94.78330000 842 26.59190000 25.60550000 31.36630000 5.436470000 5.293070000 8.123740000 843 24.85190000 29.32420000 38.23370000 6.516790000 6.683090000 12.36630000 844 27.98710000 31.00830000 45.17150000 8.372880000 7.995640000 17.58060000 845 48.27530000 65.43690000 62.63120000 28.83380000 35.00940000 39.04820000 846 54.54980000 73.88490000 65.79580000 36.44200000 45.24040000 44.49320000 847 16.33650000 21.91510000 18.81660000 2.494450000 3.117250000 2.871850000 848 15.58310000 19.37090000 37.26160000 3.717650000 3.115150000 11.19630000 849 19.94810000 17.08950000 41.13640000 4.483740000 3.106310000 13.77690000 850 36.86440000 16.85320000 40.81180000 7.820990000 4.798990000 13.69610000 851 38.07260000 33.91280000 39.75760000 10.62100000 10.12330000 13.83900000 852 39.76770000 44.39690000 49.58560000 15.28180000 16.33330000 22.57610000 853 38.83820000 49.18550000 67.54300000 20.27760000 20.72380000 42.84850000 854 45.25340000 62.91740000 67.94430000 27.83310000 32.61930000 45.26980000 855 51.62810000 62.67820000 71.13850000 30.97000000 33.98190000 49.66690000 856 80.24220000 68.30650000 74.16220000 50.23060000 47.77250000 55.60280000 857 81.66510000 75.57260000 79.86050000 56.73590000 56.65080000 65.64220000 858 10.00700000 7.606290000 25.23400000 1.258500000 0.731725000 4.654040000 859 13.45270000 0.000000000 27.03560000 1.517120000 0.664693000 5.377400000 860 38.75420000 7.677200000 75.97110000 15.11680000 6.841610000 52.22110000 861 69.57370000 0.000000000 87.00920000 31.86100000 14.89010000 70.86370000 862 89.15070000 60.64520000 93.90100000 59.65530000 46.61130000 88.23750000 863 32.01160000 17.66440000 27.97890000 5.254160000 3.754740000 6.194410000 864 35.44040000 23.09410000 28.69610000 6.795860000 5.483940000 6.775880000 865 34.16380000 27.73180000 30.08020000 7.301540000 6.777710000 7.662140000 866 49.99820000 40.54560000 39.09890000 16.17850000 15.36670000 14.10930000 867 49.09800000 45.13000000 51.54460000 19.04520000 18.56020000 24.60690000 868 58.48090000 61.38060000 68.54810000 32.76440000 34.12970000 46.09620000 869 67.19920000 61.10670000 83.30390000 41.38650000 37.91070000 68.44670000 870 81.04840000 65.72380000 88.63440000 54.02860000 47.34610000 78.85430000 871 100.0000000 68.98770000 90.14730000 71.41160000 58.61930000 82.86600000 872 100.0000000 78.60200000 89.70540000 76.50960000 69.06300000 83.80370000 873 70.05840000 82.47060000 0.000000000 42.25930000 56.53180000 8.684970000 874 80.26920000 86.90470000 14.84610000 51.96510000 65.74540000 11.37800000 875 91.27030000 93.37560000 9.299470000 64.58450000 78.94190000 12.34390000 876 37.87690000 59.84480000 0.000000000 16.43690000 25.63750000 4.082420000 877 38.07400000 70.59150000 0.000000000 21.55600000 35.79320000 5.772930000 878 59.62050000 86.24950000 0.000000000 39.05090000 58.47560000 9.229210000 879 59.82670000 100.0000000 0.000000000 49.08170000 78.38900000 12.54430000 880 60.28770000 100.0000000 22.26230000 49.97170000 78.77120000 16.04750000 881 71.40600000 20.87850000 27.88440000 21.89130000 12.85370000 7.031440000 882 91.39610000 27.18320000 73.93690000 45.16520000 25.23690000 51.19300000 883 92.52880000 33.11210000 82.74820000 49.81210000 28.97500000 65.35290000 884 78.69870000 29.57060000 69.77860000 34.98420000 20.73210000 45.03850000 885 81.84240000 41.34510000 80.89320000 42.99040000 28.46550000 62.57960000 886 86.11180000 63.11320000 82.55100000 54.51660000 46.03040000 68.07050000 887 71.24740000 100.0000000 63.99440000 62.08660000 84.31230000 48.45190000 888 76.71650000 100.0000000 100.0000000 76.82960000 90.60900000 108.0530000 889 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 890 51.32810000 19.33590000 17.55760000 10.87000000 6.989010000 2.838600000 891 81.60820000 16.98080000 20.05280000 27.62580000 15.25630000 4.251420000 892 86.66620000 21.06800000 29.86020000 32.53250000 18.35310000 8.459000000 893 53.69280000 0.000000000 20.64050000 11.06490000 5.639430000 3.448980000 894 55.57810000 14.96940000 23.91940000 12.65710000 7.250220000 4.803310000 895 56.25500000 22.58510000 53.03060000 17.46690000 10.50120000 24.55530000 896 62.03470000 27.00290000 75.38200000 26.13390000 15.33510000 52.40250000 897 68.26460000 72.44200000 82.96980000 47.37950000 49.16840000 69.74690000 898 71.59770000 81.96390000 94.84990000 58.93590000 62.80530000 93.24300000 899 11.90110000 82.51170000 72.68880000 32.76160000 50.63980000 54.96010000 900 0.000000000 86.28700000 80.73100000 37.12500000 56.21740000 67.98400000 901 0.000000000 87.51640000 71.12470000 35.20080000 56.75490000 53.82050000 902 75.55560000 92.06090000 73.45120000 61.23030000 74.76440000 59.20530000 903 32.67890000 0.000000000 13.41390000 3.741930000 1.903940000 1.311230000 904 31.42690000 8.489940000 9.491790000 3.493550000 2.023380000 0.739693000 905 48.64320000 9.936640000 43.67820000 11.59530000 5.971370000 15.84580000 906 61.68080000 11.11170000 42.85250000 17.33410000 9.035960000 15.50590000 907 65.46480000 0.000000000 57.05460000 21.49710000 10.47550000 28.43000000 908 93.02220000 10.48130000 59.87840000 41.26740000 20.97180000 32.50120000 909 93.75350000 13.28680000 76.87590000 46.32990000 23.34210000 55.12510000 910 13.40800000 8.545560000 12.24210000 0.834796000 0.647289000 1.014090000 911 8.880180000 19.05410000 23.58510000 1.886750000 2.270920000 4.285680000 912 0.000000000 17.69510000 26.94970000 1.802500000 1.989820000 5.580970000 913 24.81140000 22.84260000 83.95160000 15.59910000 8.686830000 65.25230000 914 30.71680000 51.12150000 84.42010000 23.68820000 22.91310000 68.36510000 915 40.28500000 54.58560000 79.73410000 25.99660000 26.15530000 61.17500000 916 46.74080000 67.25990000 84.28570000 35.08350000 38.84610000 70.61190000 917 37.22150000 9.549400000 18.09400000 5.316890000 2.995660000 2.501500000 918 44.34980000 0.000000000 22.65540000 7.587470000 3.831960000 3.952500000 919 44.64790000 9.365870000 29.58430000 8.435780000 4.496260000 6.920110000 920 58.27010000 0.000000000 33.39280000 14.19150000 7.129270000 9.107490000 921 81.20510000 17.10800000 33.76850000 28.48310000 15.58540000 10.19780000 922 81.98150000 52.77930000 32.05990000 36.88970000 31.86710000 11.95980000 923 89.86630000 66.30120000 46.67430000 50.46370000 47.12660000 24.14560000 924 71.80480000 49.42420000 38.28340000 29.68000000 26.31760000 14.96830000 925 72.80000000 57.19000000 46.04260000 34.25800000 32.81600000 21.71450000 926 89.73020000 57.15720000 52.98120000 47.40830000 39.43880000 28.51510000 927 35.62410000 74.25880000 22.28930000 23.50850000 39.63090000 9.896320000 928 44.97320000 92.39710000 32.95750000 38.73460000 64.39960000 18.62740000 929 0.000000000 31.02000000 32.82600000 4.282930000 6.073690000 9.112540000 930 0.000000000 29.98560000 49.46620000 6.367980000 6.594360000 21.05890000 931 14.46500000 32.30160000 56.04380000 8.617480000 8.281460000 27.62350000 932 12.02760000 38.52470000 62.79710000 11.26760000 11.57460000 35.64770000 933 0.000000000 55.52880000 86.75520000 23.01240000 24.89690000 72.81510000 934 61.19670000 73.93140000 86.88590000 45.65760000 49.32900000 76.56730000 935 33.77550000 32.76560000 24.56810000 7.687030000 8.431040000 5.539860000 936 86.36770000 36.53450000 26.05850000 34.71910000 23.58830000 7.638200000 937 43.45890000 18.74320000 19.34640000 7.984100000 5.395780000 3.173640000 938 47.15980000 15.94380000 72.44980000 17.41190000 8.886120000 47.37110000 939 94.25500000 15.18750000 90.21090000 51.16430000 25.55570000 77.66810000 940 60.95530000 7.524820000 92.16520000 29.08950000 13.43360000 80.13180000 941 76.20180000 16.07210000 93.67510000 38.95980000 19.23180000 83.60790000 942 22.33490000 9.448260000 20.95910000 2.306380000 1.418100000 3.196570000 943 32.30040000 21.85040000 21.86000000 5.333180000 4.547830000 3.936380000 944 32.61760000 27.00830000 24.38010000 6.329230000 6.152810000 5.099350000 945 33.02240000 35.27250000 41.87220000 9.881800000 10.15360000 15.38600000 946 41.53290000 33.70110000 48.21500000 12.86970000 11.07030000 20.47800000 947 40.73540000 39.26520000 47.93210000 13.88000000 13.53560000 20.65600000 948 45.27520000 40.15510000 35.15190000 13.83710000 14.06130000 11.47760000 949 60.36090000 40.45710000 41.37790000 21.06680000 17.81680000 15.91630000 950 71.74630000 51.22430000 47.47210000 31.58740000 28.07060000 22.13450000 951 80.33760000 65.64880000 47.62780000 43.18320000 42.89310000 24.51740000 952 69.44660000 48.23470000 27.06170000 26.70850000 24.33250000 8.629660000 953 89.60630000 89.68040000 26.58190000 61.51580000 73.37840000 16.05640000 954 27.80370000 33.42660000 10.07600000 5.798110000 7.743900000 1.797280000 955 45.46640000 48.52940000 20.27950000 15.11780000 18.55650000 5.616640000 956 52.55640000 60.39410000 23.15260000 22.53930000 29.04830000 8.208560000 957 58.87030000 57.08370000 26.57330000 24.25960000 27.86370000 9.230630000 958 68.24330000 68.50640000 27.92560000 34.45280000 40.74090000 11.77090000 959 93.03510000 70.62730000 28.31390000 52.95240000 51.87650000 13.12190000 960 23.60300000 12.99950000 27.39670000 3.172340000 2.111990000 5.727330000 961 29.70780000 9.169240000 27.39500000 4.091180000 2.265520000 5.707790000 962 55.71130000 7.265520000 27.91930000 12.59450000 6.533020000 6.317030000 963 60.99610000 10.64610000 50.03890000 18.10050000 9.261640000 21.47150000 964 60.38670000 31.13590000 61.55480000 22.55660000 14.99040000 34.25010000 965 62.99510000 55.97900000 62.69500000 31.37240000 30.24610000 38.07070000 966 78.23760000 86.51820000 85.25420000 62.75150000 69.48930000 76.72170000 967 86.88270000 93.04920000 93.57230000 76.38380000 82.88440000 93.72430000 968 25.91930000 24.32220000 16.05210000 4.036180000 4.413010000 2.332430000 969 92.52810000 29.44310000 27.67260000 38.26380000 23.20960000 8.072790000 970 93.09680000 43.52290000 36.66390000 42.96140000 30.43840000 14.02530000 971 93.23620000 57.50150000 38.92800000 48.20730000 40.31080000 17.12130000 972 92.89330000 79.14710000 43.76380000 59.37850000 62.01330000 24.21110000 973 39.86480000 56.22260000 22.23530000 16.19570000 23.23460000 7.098300000 974 43.87840000 85.59220000 42.00200000 34.81340000 55.34190000 22.88990000 975 65.09800000 88.15050000 64.29700000 49.97280000 65.20010000 45.77090000 976 16.39050000 31.74530000 44.23610000 6.642200000 7.334070000 16.80300000 977 16.35290000 35.04550000 52.73490000 8.751470000 9.292110000 24.49460000 978 19.52160000 82.20810000 66.22480000 31.66770000 49.98650000 46.20330000 979 33.44030000 81.95220000 70.76190000 35.22530000 51.45260000 52.29560000 980 36.82270000 92.95540000 80.15040000 46.12830000 67.70620000 68.79660000 981 28.94450000 25.93420000 44.86170000 7.633310000 6.306250000 17.04600000 982 30.80460000 25.39280000 74.48080000 14.29190000 8.882270000 50.45440000 983 74.77430000 12.74300000 35.19970000 23.96150000 12.71490000 10.71270000 984 77.02670000 8.900220000 47.26850000 26.87610000 13.71390000 19.43870000 985 88.45840000 15.09600000 52.99420000 36.51570000 19.13910000 25.18350000 986 87.83730000 46.81370000 67.98330000 45.46720000 32.54870000 44.37810000 987 89.14820000 75.39260000 83.46730000 63.37520000 59.79390000 71.78530000 988 29.18910000 40.29660000 68.94290000 15.56060000 14.29420000 43.69810000 989 29.84900000 86.23980000 80.95900000 40.05180000 57.67200000 68.47820000 990 6.238760000 37.03560000 53.02900000 8.589660000 9.885750000 24.90270000 991 10.53270000 37.08830000 75.58680000 14.08220000 12.12610000 52.72230000 992 12.80030000 39.16630000 92.81950000 20.32120000 15.46270000 82.22540000 993 36.46140000 43.17030000 93.22220000 25.58960000 19.77450000 83.54830000 994 34.95320000 60.93350000 92.01980000 31.14790000 32.17920000 83.36760000 995 38.64640000 61.95710000 100.0000000 35.62390000 34.80470000 99.45290000 996 13.54190000 48.60270000 34.92100000 9.608530000 15.60850000 11.86250000 997 9.878450000 51.88920000 48.90410000 12.44530000 18.52570000 22.54220000 998 12.63890000 62.46190000 65.49880000 20.25610000 28.47840000 41.73770000 999 26.64480000 67.43530000 67.79910000 24.96170000 34.30000000 45.55570000 1000 40.60160000 68.59070000 66.61080000 28.67230000 37.09640000 44.36480000 1001 59.29950000 75.19960000 72.09200000 40.96100000 48.46430000 53.26530000 1002 59.92170000 94.23720000 86.50840000 57.87610000 74.91050000 80.19930000 1003 13.33200000 35.75840000 44.56980000 7.268210000 8.924870000 17.33940000 1004 10.54820000 42.87570000 51.78450000 10.09160000 12.95600000 24.22300000 1005 12.50540000 50.40910000 53.14330000 12.84780000 17.87310000 26.33130000 1006 8.450030000 52.51220000 62.34810000 15.23900000 19.99420000 36.53100000 1007 21.68840000 52.28740000 81.25070000 21.45510000 22.49490000 63.14040000 1008 49.88730000 52.09890000 91.87170000 32.43860000 27.64670000 82.14620000 1009 8.821240000 11.39540000 34.97880000 2.290520000 1.421130000 9.543800000 1010 14.59930000 14.98260000 61.72490000 7.395750000 3.907620000 33.10790000 1011 14.10740000 9.424530000 66.73070000 8.169320000 3.649570000 39.14260000 1012 23.90850000 29.84270000 93.30490000 19.77390000 12.11950000 82.53540000 1013 26.65150000 67.24050000 92.27610000 32.31380000 37.08870000 84.73730000 1014 17.89220000 22.98490000 29.23840000 3.554220000 3.785250000 6.874170000 1015 26.78680000 20.34020000 28.39470000 4.485660000 3.780880000 6.429460000 1016 30.12370000 18.37680000 33.22310000 5.407810000 3.882360000 8.849140000 1017 39.45870000 61.06610000 46.46550000 20.76650000 28.26280000 21.89560000 1018 44.97080000 69.61170000 58.38480000 28.76070000 38.12190000 34.81550000 1019 57.41040000 71.52190000 92.14250000 44.35620000 46.52700000 85.67240000 1020 76.11660000 55.58930000 70.16670000 40.73900000 34.63920000 47.94590000 1021 93.79200000 55.65580000 77.77690000 56.05830000 42.33200000 59.65510000 1022 93.54370000 62.35040000 88.69020000 62.12380000 49.20940000 78.88790000 1023 93.27060000 86.37000000 99.62020000 79.18690000 77.21740000 104.5550000 1024 50.82430000 52.68700000 57.71800000 23.43450000 24.42880000 31.73030000 1025 56.30380000 54.33480000 64.63740000 27.92140000 27.47480000 40.06950000 1026 63.38460000 57.47190000 72.36450000 34.56850000 32.50000000 50.90450000 1027 44.35940000 53.94440000 49.01870000 19.86580000 23.46750000 23.20640000 1028 45.06340000 92.48350000 68.64550000 45.14760000 67.06760000 51.93020000 1029 57.65870000 91.95190000 72.34080000 50.87350000 69.34480000 57.12360000 1030 30.71030000 56.12140000 37.03770000 15.14360000 22.47480000 14.18890000 1031 51.82790000 58.64280000 79.25340000 31.59850000 31.45440000 61.14310000 1032 75.95290000 61.71630000 91.81500000 49.85190000 42.33860000 83.95780000 1033 28.58140000 17.89510000 39.54690000 5.784250000 3.917550000 12.75150000 1034 30.53800000 14.37190000 45.23990000 6.692420000 3.830830000 16.92020000 1035 36.82620000 10.14340000 50.76480000 8.880520000 4.455000000 21.69370000 1036 84.72980000 78.93860000 66.61600000 57.28770000 60.23730000 47.33030000 1037 86.59390000 86.56590000 69.11000000 64.09390000 70.77100000 52.26470000 1038 11.68160000 42.48370000 14.08000000 6.050840000 11.17040000 3.106490000 1039 14.85290000 51.38550000 12.49370000 9.077130000 16.93400000 3.766120000 1040 51.33520000 51.82630000 34.47620000 19.67660000 22.45220000 12.39290000 1041 51.70760000 53.32240000 42.85720000 21.43830000 24.04520000 18.19020000 1042 79.76050000 79.24270000 91.25410000 61.27490000 61.70930000 86.04530000 1043 81.73540000 87.69640000 94.06730000 69.03330000 73.53880000 93.26200000 1044 9.637480000 16.56100000 24.79220000 1.766090000 1.831010000 4.665040000 1045 8.426810000 13.51910000 29.12300000 1.814890000 1.448580000 6.459980000 1046 29.53530000 40.93160000 48.68120000 11.54170000 12.96610000 21.32070000 1047 38.04610000 44.01390000 56.41150000 15.93100000 16.35380000 29.17990000 1048 46.55480000 47.72860000 57.25200000 19.99890000 20.13470000 30.58340000 1049 67.00280000 48.95870000 56.38940000 29.64860000 25.73020000 30.24370000 1050 18.13890000 12.95410000 14.93710000 1.640760000 1.406900000 1.630470000 1051 40.61070000 24.20300000 9.311020000 7.359960000 6.127100000 1.305980000 1052 47.37990000 22.08160000 8.279160000 9.343210000 6.723850000 1.200300000 1053 59.47990000 77.73100000 16.96070000 34.06710000 48.02560000 9.386050000 1054 61.64680000 91.38040000 18.90750000 44.02250000 66.18130000 12.88180000 1055 23.27830000 28.63140000 32.07190000 5.436460000 6.023690000 8.635230000 1056 32.20900000 28.59560000 39.40860000 8.020880000 7.248730000 13.18220000 1057 43.28980000 28.28540000 75.01950000 18.35840000 11.65880000 51.56670000 1058 51.45690000 30.18050000 91.93790000 27.13440000 16.06440000 80.31460000 1059 65.84450000 63.02620000 92.61690000 44.65510000 40.49430000 85.38980000 1060 71.43360000 73.38670000 93.26790000 53.27020000 52.55460000 88.50440000 1061 38.04620000 29.77510000 88.46990000 21.20120000 13.03460000 73.66540000 1062 37.36090000 48.47580000 87.41200000 25.43190000 22.35890000 73.35540000 1063 54.43930000 79.15380000 93.34380000 47.72370000 54.55780000 89.32870000 1064 63.50630000 93.57760000 93.23920000 61.56840000 75.82840000 92.50440000 1065 7.926100000 22.22180000 22.13220000 2.119590000 2.959780000 3.891350000 1066 20.51110000 27.32790000 20.88240000 3.903730000 5.007570000 3.780760000 1067 37.49590000 37.15300000 31.78370000 10.27200000 11.14380000 9.216210000 1068 74.66300000 72.09790000 46.93730000 42.52340000 47.38050000 24.83310000 1069 81.02140000 74.97800000 72.27170000 53.77750000 54.88250000 54.08170000 1070 93.26940000 83.10560000 77.29120000 69.42520000 69.94450000 63.53570000 1071 96.17430000 84.30100000 91.37660000 77.21260000 74.56000000 87.91450000 1072 62.02400000 20.07320000 22.91680000 16.17750000 9.811710000 4.746380000 1073 79.57570000 21.57180000 46.55990000 29.53750000 16.65930000 19.27210000 1074 79.02520000 34.05020000 61.16250000 34.04070000 21.80790000 34.50650000 1075 75.49590000 45.70120000 57.92530000 34.04610000 26.41040000 31.77740000 1076 92.74940000 90.56920000 63.87260000 70.43980000 78.23020000 46.68950000 1077 33.55570000 27.28480000 17.71980000 6.192170000 6.196900000 2.974320000 1078 32.86590000 41.70760000 35.46260000 10.64080000 13.03040000 11.63260000 1079 31.26790000 45.19930000 44.57690000 12.48800000 15.34370000 18.30890000 1080 35.22930000 63.20930000 79.35880000 28.05230000 32.56560000 61.71050000 1081 43.36800000 66.49810000 91.32720000 35.92960000 38.45700000 83.02890000 1082 30.92420000 51.28010000 68.64200000 19.24340000 21.22980000 44.44300000 1083 35.07750000 56.26140000 67.82570000 21.89700000 25.38520000 44.03120000 1084 64.49050000 70.17700000 75.58710000 41.87960000 44.82650000 57.56980000 1085 75.29530000 79.85080000 84.20070000 56.26070000 59.94030000 73.42360000 1086 89.18920000 93.83860000 86.60860000 76.31230000 83.97880000 81.15360000 1087 88.84590000 100.0000000 92.35600000 82.70530000 93.97260000 93.21270000 1088 9.169040000 15.34010000 17.51500000 1.185940000 1.426070000 2.264120000 1089 11.28350000 12.36420000 20.07640000 1.228760000 1.107560000 2.918540000 1090 7.758740000 8.455170000 19.87400000 0.822165000 0.596167000 2.780200000 1091 37.05060000 66.94820000 32.07420000 20.92090000 32.57990000 12.94640000 1092 73.04610000 79.71690000 48.48070000 46.06140000 55.56720000 27.54910000 1093 85.73830000 92.63570000 52.06020000 63.91560000 77.32030000 34.07180000 1094 42.95560000 20.41270000 13.78870000 7.747210000 5.578960000 1.880820000 1095 93.23600000 18.43900000 9.688770000 36.32620000 20.00370000 2.504840000 1096 53.58320000 0.000000000 12.81250000 10.65310000 5.469250000 1.525770000 1097 57.05280000 69.13620000 43.46470000 30.77150000 39.10520000 21.06680000 1098 56.63430000 91.68720000 48.33310000 45.00290000 66.64090000 29.61360000 1099 57.64850000 92.69780000 62.50090000 48.96660000 69.43430000 44.47750000 1100 19.66130000 58.77220000 58.02510000 17.71590000 24.99770000 32.47310000 1101 25.31460000 72.47990000 65.01490000 26.63030000 39.07570000 42.84380000 1102 11.02960000 36.82280000 36.45380000 6.258540000 8.898830000 11.67090000 1103 11.08770000 43.95170000 37.99980000 8.340490000 12.75720000 13.28950000 1104 65.58080000 67.43090000 37.18470000 33.38660000 39.29040000 16.56660000 1105 92.19480000 67.75010000 38.05720000 51.83380000 49.02100000 18.03480000 1106 66.72170000 47.29710000 10.64440000 23.95810000 22.56580000 3.779300000 1107 81.13310000 65.01260000 12.86390000 40.10750000 41.24670000 6.888590000 1108 92.60500000 86.12580000 8.715340000 60.65800000 69.48420000 10.65750000 1109 91.92170000 89.50420000 84.66040000 74.79940000 78.71380000 76.85130000 1110 68.42910000 64.66880000 71.64680000 40.28470000 40.12080000 51.06700000 1111 76.06900000 74.16780000 81.98420000 52.79120000 53.38250000 68.64730000 1112 89.64880000 73.63660000 96.86260000 67.49940000 59.93680000 96.21880000 1113 36.52590000 6.653190000 21.80120000 5.227210000 2.758580000 3.576900000 1114 45.40580000 9.620080000 18.95960000 7.938100000 4.346670000 2.862660000 1115 50.43670000 16.98590000 27.54760000 10.93750000 6.592140000 6.249590000 1116 62.85560000 28.05740000 31.33260000 18.44460000 12.59050000 8.829420000 1117 74.96280000 28.10250000 36.59350000 26.05200000 16.45780000 12.17380000 1118 89.32660000 30.69140000 43.10650000 37.67180000 23.04530000 17.33020000 1119 89.64230000 44.38940000 44.27510000 41.42550000 29.90610000 19.35750000 1120 64.91420000 31.97110000 9.849500000 18.96650000 14.08850000 2.298380000 1121 75.57230000 33.04720000 10.03440000 25.52090000 17.79350000 2.692290000 1122 85.30450000 79.87770000 19.61210000 51.39130000 58.82440000 11.27690000 1123 91.97640000 79.68920000 61.08980000 62.11910000 63.53970000 40.99810000 1124 18.44450000 13.68490000 22.03320000 2.100660000 1.677010000 3.611060000 1125 69.69420000 9.399170000 28.09330000 19.94390000 10.44670000 6.763860000 1126 79.69080000 9.507240000 27.21740000 26.26500000 13.72150000 6.672710000 1127 89.23370000 22.50290000 63.57020000 40.11000000 21.90520000 37.04940000 1128 88.40270000 36.11390000 70.74130000 43.68430000 27.19880000 47.14010000 1129 94.37940000 63.35040000 72.77930000 58.38940000 48.51770000 53.32860000 1130 77.39320000 52.24080000 54.37640000 36.77270000 31.14120000 28.85060000 1131 89.80560000 53.02650000 56.77220000 46.61200000 36.58420000 31.84730000 1132 89.38130000 64.63480000 61.41770000 52.08970000 46.47090000 38.61110000 1133 67.01150000 67.30320000 53.09530000 36.55290000 40.54850000 29.41230000 1134 66.27060000 82.77150000 71.18130000 48.82470000 59.20870000 53.65460000 1135 68.45550000 90.74980000 85.06040000 59.44910000 72.06890000 77.06110000 1136 10.56100000 29.55440000 16.94690000 3.107780000 5.197270000 2.747290000 1137 9.419710000 27.77370000 28.89620000 3.542420000 4.862820000 6.920990000 1138 47.57470000 39.55580000 26.80870000 13.69870000 13.85170000 7.183010000 1139 47.46410000 44.96910000 24.97900000 15.02960000 16.80460000 6.929630000 1140 58.34210000 65.54960000 52.19370000 31.05190000 36.47820000 28.04740000 1141 77.32340000 66.97260000 79.27410000 49.06240000 46.02530000 63.06800000 1142 28.64910000 12.54000000 19.04060000 3.480660000 2.292060000 2.723960000 1143 29.54650000 9.256680000 22.15070000 3.670380000 2.099560000 3.649900000 1144 50.48150000 14.17850000 51.93040000 13.93030000 7.411190000 23.08860000 1145 77.42820000 12.19430000 66.32560000 31.16090000 15.73830000 39.74750000 1146 77.62030000 43.55920000 72.91680000 38.38400000 27.28280000 50.47970000 1147 69.42030000 43.44190000 76.22470000 34.13050000 24.93290000 55.09150000 1148 69.38470000 46.96830000 90.08200000 39.59010000 28.82700000 78.67240000 1149 78.01820000 53.59180000 91.09420000 47.66220000 36.33810000 81.56770000 1150 40.79090000 47.71840000 39.45060000 15.09950000 17.94600000 14.90260000 1151 47.11630000 57.82050000 46.32210000 21.92110000 26.83000000 21.43930000 1152 9.684760000 14.42450000 6.067540000 0.786834000 1.152280000 0.380259000 1153 14.39040000 15.77450000 10.77410000 1.330690000 1.584830000 0.940377000 1154 9.530100000 23.48020000 17.24070000 2.089550000 3.226440000 2.494010000 1155 17.55600000 44.99320000 44.68800000 10.14280000 14.04020000 18.26860000 1156 47.28120000 55.38510000 55.70680000 22.67660000 25.59050000 29.87480000 1157 8.005570000 13.64210000 10.49610000 0.734212000 1.028190000 0.825008000 1158 11.34220000 6.732770000 5.279080000 0.466539000 0.377860000 0.195099000 1159 24.64160000 8.972740000 8.451470000 2.151190000 1.364280000 0.563062000 1160 28.54250000 8.715170000 13.62580000 3.009360000 1.773370000 1.364630000 1161 43.15720000 25.57530000 48.38680000 11.93640000 8.377500000 20.15670000 1162 46.67550000 48.20700000 67.32470000 22.46570000 21.37600000 42.57580000 1163 56.65420000 54.09060000 75.41710000 30.78130000 28.48980000 54.74870000 1164 77.76180000 55.02310000 81.42090000 44.81470000 36.04520000 64.80130000 1165 10.91450000 24.90070000 39.37790000 4.321330000 4.454530000 12.81690000 1166 8.910710000 23.56170000 44.53360000 4.737580000 4.300080000 16.55140000 1167 10.90510000 28.75220000 58.06560000 8.082570000 6.959600000 29.54290000 1168 12.08640000 32.00430000 78.12750000 13.80310000 10.23780000 56.22790000 1169 26.70110000 73.10540000 77.97320000 30.65730000 41.25320000 61.08790000 1170 24.41660000 82.41640000 91.71720000 40.15100000 53.67090000 86.47280000 1171 25.14990000 84.20730000 100.0000000 44.53280000 57.24850000 103.3160000 1172 15.82950000 93.94440000 72.45990000 40.77120000 66.26410000 57.22950000 1173 88.46500000 95.03620000 71.81970000 72.18080000 83.66730000 58.03320000 1174 29.62620000 31.23430000 16.76420000 5.962590000 7.140220000 2.926950000 1175 45.06340000 60.42080000 12.51640000 19.13880000 27.37420000 5.254990000 1176 51.48780000 81.02320000 11.46160000 32.24210000 50.02280000 8.763710000 1177 75.94400000 92.85820000 10.16440000 53.01420000 72.42010000 11.80490000 1178 76.26360000 93.50490000 63.61470000 60.24720000 76.08530000 46.50000000 1179 91.95130000 92.47350000 79.68370000 75.34750000 82.27220000 69.32640000 1180 66.68820000 75.49130000 68.92960000 44.14920000 50.44580000 49.15190000 1181 70.05020000 83.15650000 89.97000000 56.99100000 63.11260000 84.16800000 1182 79.31170000 94.97110000 89.47950000 70.82670000 82.27180000 86.24080000 1183 14.25120000 38.59180000 29.99520000 6.251060000 9.615260000 8.223390000 1184 8.576980000 46.06510000 74.32870000 16.08780000 16.86100000 51.67780000 1185 12.73000000 51.19000000 90.41140000 23.10410000 22.41400000 78.90930000 1186 12.45520000 62.94490000 93.80200000 29.02240000 32.33080000 86.90420000 1187 9.281660000 24.74920000 75.45220000 11.59480000 7.317300000 51.72510000 1188 7.275710000 25.22980000 87.85760000 15.43750000 8.958540000 72.08690000 1189 14.97540000 19.30710000 75.43060000 11.30310000 6.131650000 51.47960000 1190 63.18110000 16.90190000 78.22670000 26.25780000 13.38600000 56.33300000 1191 71.47950000 24.04780000 87.85470000 34.84050000 18.70430000 72.94060000 1192 57.67410000 39.96870000 66.27600000 24.35570000 18.77680000 40.62950000 1193 72.73410000 59.75600000 67.73610000 39.66210000 36.66960000 45.15630000 1194 74.36260000 75.45880000 67.33520000 48.31070000 52.61020000 47.25640000 1195 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1196 7.710020000 10.15680000 6.203640000 0.420937000 0.559623000 0.295110000 1197 7.612170000 4.618980000 10.11310000 0.301345000 0.203224000 0.636356000 1198 30.28710000 63.57770000 15.43310000 16.48460000 28.07080000 6.102600000 1199 34.00210000 92.80980000 14.70120000 34.45770000 62.78500000 11.69870000 1200 39.94850000 95.35840000 90.38020000 52.14040000 73.02820000 87.09130000 1201 21.70130000 28.66040000 27.26250000 4.757880000 5.732790000 6.283750000 1202 20.63100000 33.10070000 25.73260000 5.336990000 7.312590000 5.910750000 1203 61.14130000 38.88710000 28.48010000 19.59650000 16.62170000 8.151090000 1204 61.80640000 61.36260000 42.29090000 29.24860000 32.90010000 19.06460000 1205 44.91050000 59.22180000 40.26050000 20.83030000 27.22990000 16.95180000 1206 49.99250000 74.18350000 43.04700000 30.34600000 42.84450000 21.49280000 1207 67.69390000 83.84290000 52.49630000 46.12810000 59.30520000 31.94880000 1208 74.54440000 84.85120000 63.39050000 53.15190000 63.62630000 44.19840000 1209 12.65390000 32.43660000 9.078530000 3.535910000 6.275350000 1.508440000 1210 10.27680000 30.78420000 23.05510000 3.672750000 5.789010000 4.678200000 1211 10.37250000 31.07700000 36.38210000 4.971880000 6.399540000 11.21190000 1212 11.43210000 38.40340000 43.03950000 7.534660000 10.02800000 16.35490000 1213 0.000000000 40.73120000 45.85760000 8.210030000 11.22130000 18.76730000 1214 41.42260000 45.38370000 73.28320000 21.34030000 19.29080000 50.35870000 1215 51.42930000 53.84570000 82.97730000 30.69290000 28.04580000 66.56150000 1216 71.81530000 12.78580000 20.17470000 20.83310000 11.25440000 3.873980000 1217 72.59920000 7.440620000 54.75370000 25.30950000 12.66860000 26.26870000 1218 79.93730000 60.33610000 54.23330000 41.67200000 38.41550000 29.85340000 1219 64.04890000 23.69560000 16.88540000 17.34840000 11.13930000 3.128620000 1220 91.04910000 27.31500000 18.62540000 36.06180000 21.59760000 4.616840000 1221 90.03810000 39.30900000 16.64050000 37.67680000 26.19360000 4.903400000 1222 33.24830000 15.57040000 10.78940000 4.394080000 3.138230000 1.081010000 1223 35.44630000 11.28760000 91.72670000 19.43700000 8.734100000 78.90840000 1224 45.95460000 18.11990000 91.08340000 22.99310000 11.39610000 78.03310000 1225 15.55610000 14.89220000 5.936390000 1.267720000 1.455000000 0.403999000 1226 17.05060000 13.77280000 9.164060000 1.393950000 1.386170000 0.687679000 1227 14.69930000 10.39800000 8.937570000 0.943539000 0.841757000 0.579899000 1228 8.826190000 11.11870000 14.22730000 0.731206000 0.772028000 1.409100000 1229 6.437110000 8.179000000 15.38370000 0.538399000 0.459239000 1.602370000 1230 5.951050000 52.34510000 69.99720000 16.93250000 20.56360000 46.25320000 1231 9.232850000 58.92620000 83.86440000 23.65070000 27.36650000 68.28670000 1232 11.68040000 75.69230000 92.35900000 34.90280000 45.01610000 86.28780000 1233 6.351260000 81.46890000 92.34760000 38.03030000 51.68030000 87.38760000 1234 20.31460000 89.10210000 91.43460000 43.80560000 62.05910000 87.37030000 1235 53.01520000 87.00210000 93.97770000 52.28500000 64.21920000 92.17250000 1236 90.00530000 86.71960000 92.77820000 74.15830000 75.26770000 90.85350000 1237 1.445090000 0.000000000 0.000000000 0.003702600 0.001908800 0.000173336 1238 13.56080000 92.53170000 32.87570000 32.21840000 61.18440000 18.30520000 1239 75.42190000 91.66890000 36.61140000 53.68830000 71.29190000 21.31280000 1240 93.20680000 90.72590000 54.20300000 68.88870000 77.82890000 35.99660000 1241 25.23860000 18.16100000 7.137190000 2.890610000 2.730340000 0.659536000 1242 33.00280000 20.03620000 9.726100000 4.750990000 3.983980000 1.081250000 1243 34.38430000 18.05020000 84.68600000 17.29310000 8.698370000 66.41070000 1244 20.91300000 24.27940000 50.46040000 6.920950000 5.465110000 21.71200000 1245 18.31900000 35.01640000 65.28960000 11.61190000 10.45110000 38.45190000 1246 26.02460000 45.68080000 70.68180000 16.93460000 17.23510000 46.54470000 1247 25.36540000 49.93070000 94.62990000 25.76810000 22.96230000 86.87110000 1248 38.32000000 35.31740000 63.14590000 15.19450000 12.45620000 36.02760000 1249 48.48260000 37.88230000 70.32140000 20.94190000 16.11370000 45.62400000 1250 15.86020000 14.00440000 26.27860000 2.147950000 1.700780000 5.221500000 1251 11.25920000 57.31340000 24.49210000 11.66920000 21.52880000 7.828860000 1252 6.114910000 62.53930000 41.61760000 15.45050000 26.57130000 18.07580000 1253 11.65980000 78.14880000 46.01220000 24.43040000 43.08330000 24.18920000 1254 14.06040000 79.97310000 37.75400000 24.54390000 44.88210000 18.47680000 1255 17.52700000 91.53340000 44.67530000 33.39910000 60.56410000 26.01320000 1256 35.24230000 92.67390000 45.58610000 37.61660000 63.92870000 27.17030000 1257 30.23550000 90.43260000 30.76500000 32.98400000 59.40110000 16.80820000 1258 82.53420000 93.02630000 30.24750000 58.84020000 75.46670000 18.28740000 1259 76.54930000 50.64270000 17.87660000 31.32950000 27.99310000 5.898000000 1260 88.61980000 52.67390000 42.68610000 43.12370000 34.87400000 19.00910000 1261 46.81620000 22.14060000 64.82460000 16.02570000 9.385250000 37.43590000 1262 63.01910000 20.12970000 90.18320000 30.37200000 15.55960000 76.78320000 1263 62.74990000 34.35550000 90.29340000 32.62920000 20.22020000 77.76670000 1264 78.85570000 72.28420000 90.75750000 56.55430000 53.47170000 83.78110000 1265 43.60790000 35.14440000 38.61250000 12.45930000 11.48970000 13.23120000 1266 53.61020000 34.11960000 41.08170000 16.37940000 13.13770000 15.04720000 1267 63.65740000 36.33140000 48.52960000 22.81140000 17.06200000 21.38460000 1268 67.88780000 45.08940000 60.21150000 29.71230000 23.84340000 34.04030000 1269 82.68240000 53.54650000 75.09630000 45.81170000 35.94680000 54.92140000 1270 23.28060000 4.536670000 17.00300000 2.078180000 1.088020000 2.022280000 1271 22.31120000 9.006000000 13.01760000 1.905820000 1.225510000 1.204210000 1272 20.50680000 12.76300000 5.439990000 1.681200000 1.437070000 0.345561000 1273 20.12340000 16.56160000 53.16690000 6.397710000 3.796260000 23.97720000 1274 27.88470000 32.22340000 54.42860000 10.18620000 9.102990000 26.05010000 1275 28.21660000 35.95750000 73.02990000 15.36520000 12.47520000 48.99580000 1276 46.51770000 39.06810000 90.42260000 26.65250000 18.78840000 78.04330000 1277 18.78970000 3.835200000 25.62730000 1.974800000 0.954450000 4.817730000 1278 31.80020000 6.725560000 37.60000000 5.513710000 2.740170000 11.24600000 1279 32.74740000 63.83470000 57.92570000 22.29700000 30.64870000 33.21490000 1280 35.99050000 80.31010000 61.21150000 32.56750000 48.85660000 39.86160000 1281 42.42790000 96.78820000 60.61650000 45.54070000 72.19260000 42.99900000 1282 29.58180000 40.62190000 27.14470000 8.788020000 11.73280000 7.178030000 1283 58.82760000 44.15440000 31.13110000 20.14990000 19.02200000 9.877090000 1284 65.89420000 52.92000000 37.14780000 27.34450000 26.95730000 14.48100000 1285 65.54560000 59.30100000 46.12240000 30.90950000 32.37720000 21.87180000 1286 82.27590000 65.23240000 65.46260000 47.93480000 44.63710000 43.35290000 1287 93.31010000 76.94330000 68.03030000 63.24250000 61.53910000 49.09880000 1288 94.38990000 87.19740000 72.69500000 71.72830000 75.22070000 57.66010000 1289 93.41810000 86.60820000 88.17210000 75.25290000 75.90970000 82.41950000 1290 53.29130000 49.27330000 45.26100000 21.02850000 21.66960000 19.62500000 1291 62.37610000 54.22280000 47.45890000 27.41580000 27.54500000 22.24160000 1292 91.18730000 9.951890000 15.16290000 34.17450000 17.91700000 3.151450000 1293 93.68130000 12.80220000 23.14710000 36.83570000 19.48410000 5.607180000 1294 93.29800000 11.62470000 31.56030000 37.14700000 19.45260000 9.286770000 1295 93.14560000 14.33110000 40.28450000 38.21900000 20.16110000 14.68790000 1296 91.41500000 8.841860000 67.03280000 41.51280000 20.79200000 41.08250000 1297 87.18510000 7.726400000 80.24420000 41.75380000 20.43070000 60.05180000 1298 68.97070000 31.56980000 60.38760000 27.00300000 17.43830000 33.14650000 1299 70.30620000 35.01200000 70.62150000 30.95830000 20.26950000 46.30880000 1300 70.04770000 37.30100000 81.59260000 34.47610000 22.50940000 63.01300000 1301 83.50610000 46.67820000 91.22150000 49.18380000 33.59010000 81.19400000 1302 94.26810000 47.41200000 92.40100000 58.31570000 38.59580000 83.89430000 1303 56.97610000 47.18090000 55.63660000 23.79260000 21.86620000 29.02470000 1304 57.40670000 65.13240000 66.43910000 33.43920000 37.06720000 43.88880000 1305 58.48010000 65.43010000 91.85320000 41.71440000 40.66050000 84.13440000 1306 21.72170000 33.39130000 34.89950000 6.422240000 7.862090000 10.52250000 1307 19.10780000 70.51180000 48.41640000 21.32750000 35.19120000 24.86320000 1308 19.13660000 82.18150000 56.59680000 29.47210000 49.07610000 34.97680000 1309 15.73280000 89.28060000 85.84270000 41.47440000 61.26080000 77.27010000 1310 13.14380000 65.54740000 81.53350000 26.11950000 33.10210000 65.40170000 1311 12.04630000 70.55520000 93.17840000 32.45020000 39.59680000 86.92920000 1312 4.513480000 91.46300000 94.78410000 45.47490000 65.21690000 94.28930000 1313 17.98960000 62.08440000 70.43570000 21.83330000 28.89920000 48.20100000 1314 14.92120000 76.46260000 72.87940000 29.44730000 43.56230000 54.03950000 1315 10.53370000 76.24820000 78.82790000 30.68430000 43.82310000 62.91090000 1316 8.995660000 66.30180000 60.48030000 20.66270000 31.46410000 36.29330000 1317 56.66090000 65.58880000 61.02650000 32.05790000 36.81970000 37.35180000 1318 57.96780000 79.17440000 61.99260000 40.13320000 51.72610000 40.92580000 1319 16.14690000 62.13910000 17.29770000 13.68670000 25.65620000 6.226740000 1320 19.62630000 70.39090000 14.48530000 17.92650000 33.73830000 6.918520000 1321 18.75500000 81.69550000 15.67290000 24.26870000 46.50760000 9.304650000 1322 35.64330000 87.24060000 58.30180000 36.26050000 57.37630000 38.04620000 1323 24.92420000 44.02250000 39.28730000 10.14000000 13.69690000 14.23270000 1324 92.92030000 45.22180000 52.72970000 45.75000000 32.34380000 26.98950000 1325 91.71690000 72.48310000 77.26680000 61.95340000 56.91470000 61.37710000 1326 50.51570000 43.21630000 45.91840000 18.09440000 17.34040000 19.47730000 1327 55.52440000 42.02250000 57.62460000 21.99060000 18.60390000 30.58170000 1328 36.07860000 17.71890000 24.27490000 5.978770000 4.170240000 4.694980000 1329 41.67640000 14.34360000 24.83720000 7.360030000 4.438660000 4.891180000 1330 43.45160000 10.27280000 35.63710000 8.700990000 4.626050000 10.21770000 1331 68.34510000 12.02140000 38.94220000 20.46340000 10.79050000 12.89480000 1332 67.66660000 35.09350000 43.31510000 23.90980000 17.30190000 17.10550000 1333 53.50820000 30.18810000 33.67710000 14.63910000 11.16740000 10.02290000 1334 71.86360000 62.81730000 32.32400000 34.30810000 36.60760000 13.15190000 1335 55.52360000 43.89520000 23.64600000 17.91180000 17.82770000 6.466460000 1336 65.09090000 81.61000000 32.75360000 40.46010000 54.63270000 16.53960000 1337 40.60920000 50.10750000 9.305230000 13.60370000 18.61630000 3.386940000 1338 54.06280000 66.41680000 10.19650000 25.32060000 34.62370000 5.973020000 1339 62.58200000 66.33770000 12.90490000 29.41150000 36.66680000 6.575480000 1340 90.31720000 75.18700000 18.93540000 52.52550000 55.37720000 10.35630000 1341 89.48070000 81.32160000 35.49380000 56.83850000 62.77830000 18.81940000 1342 98.27870000 91.75180000 35.16350000 71.09590000 80.37260000 21.26680000 1343 53.47620000 73.28290000 28.89250000 29.63700000 41.94020000 12.70090000 1344 53.65560000 85.70130000 29.22480000 37.16160000 56.82840000 15.33520000 1345 25.53130000 38.87220000 9.246350000 6.620030000 10.04690000 2.093790000 1346 23.95260000 42.48480000 55.87110000 12.23940000 13.80970000 28.32060000 1347 23.89400000 47.63030000 56.71840000 13.95430000 16.98390000 29.72800000 1348 24.95660000 55.99290000 63.00750000 18.47120000 23.59500000 37.83940000 1349 32.50820000 64.17840000 73.71190000 26.19560000 32.45500000 53.26050000 1350 33.49440000 77.67230000 75.77190000 34.03980000 46.87030000 58.65260000 1351 46.67130000 31.61110000 34.29710000 12.27350000 10.34630000 10.34270000 1352 49.19460000 29.84490000 58.92890000 16.80930000 11.73040000 30.94820000 1353 55.96940000 30.62240000 68.08590000 21.90720000 14.33110000 42.23770000 1354 36.67160000 22.12650000 51.97220000 10.11690000 6.645710000 23.18150000 1355 56.52030000 20.23980000 62.19990000 19.17680000 10.73430000 34.36150000 1356 67.49460000 24.26130000 68.50830000 26.81510000 15.27300000 42.71730000 1357 81.48440000 33.32100000 84.20440000 41.84340000 24.87820000 67.42190000 1358 19.53530000 40.04690000 18.23540000 6.343270000 10.31560000 3.898350000 1359 26.70980000 50.32530000 24.44240000 10.97430000 17.28930000 7.028070000 1360 89.22210000 59.03820000 30.11230000 44.60060000 39.50320000 12.02920000 1361 49.38740000 32.18660000 14.95290000 11.97160000 10.52760000 2.849940000 1362 57.01390000 42.63330000 12.37190000 17.65160000 17.22060000 3.348820000 1363 57.80090000 49.55300000 9.913030000 20.09820000 21.68200000 3.712670000 1364 66.62030000 61.83290000 10.42610000 29.42770000 33.59910000 5.590180000 1365 75.93830000 74.17920000 8.014210000 41.12090000 48.71430000 7.603570000 1366 75.64920000 80.25540000 27.85390000 45.45290000 56.03330000 14.11070000 1367 77.49100000 81.11840000 40.41580000 48.56630000 58.25830000 21.58820000 1368 24.77270000 24.47010000 9.836810000 3.644070000 4.267270000 1.208430000 1369 65.28400000 40.67320000 12.31800000 21.26970000 18.28550000 3.354600000 1370 79.37380000 45.25940000 10.80200000 31.20220000 25.35560000 3.958610000 1371 92.59050000 45.22340000 9.589990000 41.16330000 30.47820000 4.259310000 1372 92.47240000 57.14200000 10.38800000 45.28590000 38.83680000 5.760290000 1373 95.79270000 77.77170000 7.755180000 58.15510000 60.51340000 8.957810000 1374 43.17080000 39.10300000 8.697070000 11.12000000 12.45520000 2.258100000 1375 49.89060000 37.95120000 31.44550000 14.60030000 13.66700000 9.298290000 1376 56.27290000 39.58540000 84.24400000 28.68410000 20.27380000 67.29370000 1377 57.78570000 44.18990000 94.83090000 34.34060000 24.65830000 87.13890000 1378 13.37640000 12.20150000 44.46690000 3.881240000 2.169880000 16.13280000 1379 10.57270000 8.880130000 49.82920000 4.369720000 2.060550000 20.61530000 1380 45.72370000 9.076480000 58.66210000 13.14490000 6.402610000 29.81940000 1381 58.30920000 3.686140000 72.81920000 21.60270000 10.13640000 47.91540000 1382 83.37590000 20.10710000 76.70540000 38.77120000 20.38330000 54.69380000 1383 53.79250000 30.63750000 50.23060000 17.16850000 12.32900000 22.28690000 1384 67.89000000 32.08250000 52.52890000 24.91120000 16.69310000 24.87310000 1385 77.93560000 36.69560000 53.81320000 32.39770000 22.02260000 26.76020000 1386 17.58500000 8.598190000 8.065160000 1.135240000 0.817757000 0.470715000 1387 37.30110000 11.91510000 6.228700000 5.086930000 3.111110000 0.543597000 1388 39.72790000 10.50970000 13.16740000 5.876450000 3.379660000 1.438010000 1389 52.89750000 16.18610000 8.935880000 10.90510000 6.579240000 1.162250000 1390 77.62440000 16.42250000 8.832210000 24.38540000 13.56040000 1.787600000 1391 89.14880000 30.58670000 9.217900000 34.77030000 21.83650000 2.882700000 1392 90.72860000 29.02860000 54.79040000 40.45610000 23.79750000 27.65580000 1393 92.21300000 32.89750000 91.93040000 52.60610000 29.99110000 81.64630000 1394 35.18160000 9.191850000 33.10820000 5.920540000 3.147640000 8.616690000 1395 54.29950000 11.14590000 33.15610000 12.64560000 6.761220000 8.986300000 1396 64.76240000 18.56730000 32.91780000 18.31100000 10.56740000 9.291030000 1397 61.77100000 34.81750000 31.00780000 19.18270000 14.94590000 9.078140000 1398 64.85870000 42.99050000 38.01170000 23.65050000 20.23660000 13.93420000 1399 90.52570000 75.10450000 51.01810000 56.29110000 56.82920000 29.53920000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 100.0000 108.9060 1 0.000000 46.01940 100.0000 24.53780 20.19710 97.21750 2 100.0000 0.000000 75.89170 51.07860 25.19590 53.75030 3 0.000000 0.000000 54.91730 4.831040 1.932540 25.44110 4 100.0000 63.84210 0.000000 54.56610 47.91680 6.373640 5 0.000000 34.30650 0.000000 3.400610 6.801720 1.133680 6 78.47690 0.000000 0.000000 24.20010 12.47580 1.132910 7 8.084850 7.632750 6.875820 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 100.000 108.906 1 0.00000 100.000 100.000 53.8073 78.7404 106.975 2 100.000 0.00000 100.000 59.2885 28.4801 96.9852 3 0.00000 0.00000 100.000 18.0500 7.22046 95.0546 4 100.000 100.000 0.00000 76.9958 92.7795 13.8511 5 0.00000 100.000 0.00000 35.7573 71.5199 11.9206 6 100.000 0.00000 0.00000 41.2385 21.2596 1.93056 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7756 23.7148 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s33-g97-m0-f1399-csRGB.ti1000644 000765 000000 00000307221 12261120515 022565 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1200" CREATED "Wed Dec 18 02:51:42 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "33" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1399 BEGIN_DATA 1 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 2 0.00000000 100.000000 19.1348000 36.3074000 71.7399000 14.8174000 3 23.2090000 100.000000 25.1681000 38.5021000 72.8274000 16.9054000 4 43.9719000 100.000000 38.0742000 44.6173000 75.8378000 23.6186000 5 13.4272000 23.1704000 0.00000000 2.23545000 3.48033000 0.55397800 6 64.8192000 22.7815000 40.9548000 19.6152000 12.0740000 14.5103000 7 70.4989000 40.1588000 52.8687000 27.9199000 21.0028000 25.4368000 8 100.000000 38.8935000 67.3430000 53.1368000 33.1852000 42.4983000 9 100.000000 69.3010000 100.000000 74.9535000 59.8125000 102.208000 10 100.000000 92.8920000 100.000000 89.5343000 88.9762000 107.068000 11 41.2621000 37.6691000 68.6778000 17.7891000 14.4926000 42.4854000 12 15.7658000 15.7658000 15.7658000 2.03515000 2.14123000 2.33193000 13 10.6838000 10.6838000 10.6838000 1.05618000 1.11123000 1.21019000 14 15.1007000 15.1007000 15.1007000 1.88568000 1.98398000 2.16066000 15 18.0810000 22.0477000 13.4899000 2.85077000 3.55070000 2.07848000 16 22.4501000 53.8074000 46.8628000 14.0361000 20.1716000 20.7654000 17 0.00000000 15.1007000 0.00000000 0.70941600 1.41894000 0.23650100 18 0.00000000 11.2903000 0.00000000 0.43404200 0.86814800 0.14469800 19 2.94118000 0.00000000 0.00000000 0.09403720 0.04847890 0.00440231 20 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 21 8.33333000 8.33333000 8.33333000 0.72515300 0.76295100 0.83089800 22 11.9048000 11.9048000 11.9048000 1.25804000 1.32361000 1.44149000 23 18.1454000 0.00000000 15.3721000 1.50873000 0.73510500 1.99961000 24 69.7042000 0.00000000 44.1013000 21.2515000 10.6150000 16.3936000 25 72.2578000 0.00000000 57.7919000 25.1240000 12.3405000 28.8159000 26 15.1007000 0.00000000 0.00000000 0.81816100 0.42178600 0.03830180 27 13.4594000 0.00000000 8.13422000 0.80308500 0.39865800 0.73150600 28 50.0000000 0.00000000 0.00000000 8.82693000 4.55054000 0.41322900 29 53.7383000 0.00000000 0.00000000 10.3213000 5.32093000 0.48318600 30 66.3690000 48.4891000 0.00000000 23.5763000 22.7888000 3.15639000 31 66.0177000 57.9625000 0.00000000 26.7797000 29.4808000 4.27926000 32 62.8987000 60.5163000 42.8355000 28.9550000 31.8390000 19.1536000 33 64.9515000 86.8763000 100.000000 59.6926000 67.2820000 104.453000 34 0.00000000 15.0643000 26.7722000 1.75812000 1.83357000 5.77417000 35 0.00000000 41.0376000 49.2125000 8.74824000 11.5242000 21.3315000 36 0.00000000 50.6622000 51.1454000 11.9323000 17.3737000 23.9935000 37 0.00000000 65.5852000 73.7227000 22.9383000 31.3567000 52.4190000 38 60.5048000 66.4766000 100.000000 45.7139000 42.6870000 100.443000 39 42.2480000 0.00000000 34.5520000 7.91789000 3.87793000 9.58788000 40 70.6499000 0.00000000 33.7018000 20.5354000 10.3929000 9.71556000 41 100.000000 0.00000000 48.4358000 44.8458000 22.7027000 20.9276000 42 100.000000 0.00000000 58.5230000 46.6819000 23.4372000 30.5966000 43 11.2903000 0.00000000 0.00000000 0.50057500 0.25806100 0.02343420 44 4.49102000 0.00000000 0.00000000 0.14392100 0.07419570 0.00673761 45 0.00000000 4.49102000 0.00000000 0.12479200 0.24960300 0.04160250 46 9.24638000 7.97181000 0.00000000 0.62292000 0.70137600 0.10255600 47 10.0849000 10.0849000 10.0849000 0.96545100 1.01577000 1.10624000 48 0.00000000 9.49367000 0.00000000 0.33075700 0.66156300 0.11026600 49 0.00000000 13.1579000 0.00000000 0.55919000 1.11846000 0.18642000 50 0.00000000 17.1233000 0.00000000 0.88822300 1.77658000 0.29611100 51 0.00000000 19.2308000 0.00000000 1.09991000 2.19998000 0.36668200 52 0.00000000 21.4286000 0.00000000 1.34917000 2.69853000 0.44977700 53 0.00000000 23.7226000 0.00000000 1.64144000 3.28312000 0.54721300 54 0.00000000 26.1194000 0.00000000 1.98357000 3.96744000 0.66127300 55 0.00000000 28.6260000 0.00000000 2.38235000 4.76505000 0.79421400 56 0.00000000 31.2500000 0.00000000 2.84579000 5.69200000 0.94871400 57 0.00000000 34.0000000 0.00000000 3.38358000 6.76767000 1.12800000 58 0.00000000 36.8852000 0.00000000 4.00747000 8.01553000 1.33599000 59 0.00000000 39.9160000 0.00000000 4.73016000 9.46103000 1.57692000 60 0.00000000 43.1034000 0.00000000 5.56614000 11.1331000 1.85561000 61 0.00000000 46.4602000 0.00000000 6.53372000 13.0684000 2.17817000 62 0.00000000 50.0000000 0.00000000 7.65371000 15.3085000 2.55155000 63 0.00000000 53.7383000 0.00000000 8.94944000 17.9002000 2.98351000 64 0.00000000 57.6923000 0.00000000 10.4508000 20.9030000 3.48401000 65 0.00000000 61.8812000 0.00000000 12.1911000 24.3840000 4.06419000 66 0.00000000 66.3265000 0.00000000 14.2114000 28.4249000 4.73771000 67 0.00000000 71.0526000 0.00000000 16.5600000 33.1225000 5.52069000 68 0.00000000 76.0870000 0.00000000 19.2952000 38.5932000 6.43252000 69 0.00000000 81.4607000 0.00000000 22.4873000 44.9779000 7.49668000 70 0.00000000 87.2093000 0.00000000 26.2212000 52.4462000 8.74147000 71 0.00000000 93.3735000 0.00000000 30.6023000 61.2091000 10.2020000 72 24.4173000 100.000000 89.6481000 51.8480000 78.1880000 86.2009000 73 44.6931000 100.000000 93.0039000 58.0018000 81.2193000 92.8677000 74 54.8807000 100.000000 100.000000 64.6128000 84.3109000 107.481000 75 9.49367000 9.49367000 9.49367000 0.87917900 0.92500600 1.00738000 76 7.76398000 0.00000000 0.00000000 0.28467900 0.14676000 0.01332710 77 9.49367000 0.00000000 0.00000000 0.38145800 0.19665300 0.01785780 78 0.00000000 0.00000000 2.94118000 0.04115990 0.01646500 0.21675600 79 0.00000000 0.00000000 4.49102000 0.06299410 0.02519920 0.33173800 80 0.00000000 0.00000000 6.09756000 0.09024210 0.03609920 0.47523200 81 0.00000000 0.00000000 13.1579000 0.28227500 0.11291700 1.48651000 82 0.00000000 0.00000000 17.1233000 0.44836800 0.17935900 2.36119000 83 0.00000000 0.00000000 19.2308000 0.55522600 0.22210500 2.92392000 84 0.00000000 0.00000000 21.4286000 0.68104800 0.27243700 3.58653000 85 0.00000000 0.00000000 23.7226000 0.82858400 0.33145500 4.36348000 86 0.00000000 0.00000000 26.1194000 1.00129000 0.40054300 5.27299000 87 0.00000000 8.74335000 25.0667000 1.21563000 0.95424200 4.95909000 88 0.00000000 0.00000000 28.6260000 1.20259000 0.48106700 6.33307000 89 0.00000000 0.00000000 31.2500000 1.43653000 0.57465000 7.56504000 90 0.00000000 0.00000000 39.9160000 2.38775000 0.95516100 12.5743000 91 0.00000000 0.00000000 43.1034000 2.80974000 1.12397000 14.7966000 92 0.00000000 0.00000000 46.4602000 3.29817000 1.31935000 17.3688000 93 0.00000000 10.7805000 50.7525000 4.39362000 2.40287000 21.1483000 94 0.00000000 0.00000000 50.0000000 3.86353000 1.54551000 20.3461000 95 0.00000000 0.00000000 53.7383000 4.51761000 1.80716000 23.7906000 96 0.00000000 0.00000000 57.6923000 5.27546000 2.11032000 27.7815000 97 0.00000000 0.00000000 61.8812000 6.15396000 2.46174000 32.4079000 98 0.00000000 0.00000000 66.3265000 7.17379000 2.86970000 37.7785000 99 0.00000000 0.00000000 71.0526000 8.35937000 3.34396000 44.0220000 100 0.00000000 0.00000000 76.0870000 9.74006000 3.89627000 51.2929000 101 0.00000000 0.00000000 81.4607000 11.3514000 4.54085000 59.7785000 102 0.00000000 0.00000000 87.2093000 13.2362000 5.29484000 69.7045000 103 0.00000000 0.00000000 93.3735000 15.4478000 6.17951000 81.3509000 104 49.9052000 13.6977000 100.000000 27.4395000 12.9502000 95.6658000 105 0.00000000 0.00000000 11.2903000 0.21910100 0.08764600 1.15383000 106 0.00000000 0.00000000 1.44509000 0.02008300 0.00803370 0.10576100 107 0.00000000 6.09756000 0.00000000 0.17877100 0.35756800 0.05959760 108 0.47619000 0.47619000 0.47619000 0.03532530 0.03716660 0.04047660 109 0.95785400 0.95785400 0.95785400 0.07105660 0.07476040 0.08141840 110 1.44509000 1.44509000 1.44509000 0.10575100 0.11126300 0.12117200 111 0.00000000 0.00000000 9.49367000 0.16696400 0.06678970 0.87926100 112 1.93798000 1.93798000 1.93798000 0.14231500 0.14973400 0.16306800 113 2.43665000 2.43665000 2.43665000 0.17930800 0.18865400 0.20545500 114 2.94118000 2.94118000 2.94118000 0.21673500 0.22803300 0.24834100 115 3.45168000 3.45168000 3.45168000 0.25415500 0.26740300 0.29121700 116 3.96825000 3.96825000 3.96825000 0.29147700 0.30667000 0.33398100 117 4.49102000 4.49102000 4.49102000 0.33170700 0.34899800 0.38007800 118 5.02008000 5.02008000 5.02008000 0.37582100 0.39541100 0.43062500 119 5.55556000 5.55556000 5.55556000 0.42348900 0.44556300 0.48524400 120 0.00000000 7.76398000 0.00000000 0.24684100 0.49371900 0.08229050 121 0.00000000 13.4276000 8.69734000 0.72522600 1.21619000 0.96427300 122 6.09756000 6.09756000 6.09756000 0.47518700 0.49995600 0.54448100 123 6.64622000 6.64622000 6.64622000 0.53071800 0.55838200 0.60811000 124 0.00000000 0.00000000 7.76398000 0.12460300 0.04984460 0.65618500 125 0.00000000 1.44509000 0.00000000 0.03978460 0.07957520 0.01326320 126 6.09756000 0.00000000 0.00000000 0.20617400 0.10628900 0.00965196 127 0.00000000 2.94118000 0.00000000 0.08153830 0.16308900 0.02718280 128 7.20165000 7.20165000 7.20165000 0.59082900 0.62162600 0.67698700 129 7.76398000 7.76398000 7.76398000 0.65612400 0.69032400 0.75180200 130 12.5272000 12.5272000 12.5272000 1.36886000 1.44021000 1.56847000 131 13.1579000 13.1579000 13.1579000 1.48637000 1.56385000 1.70312000 132 14.4444000 14.4444000 14.4444000 1.74433000 1.83525000 1.99870000 133 13.7969000 13.7969000 13.7969000 1.61128000 1.69527000 1.84624000 134 16.4399000 16.4399000 16.4399000 2.19296000 2.30726000 2.51274000 135 17.1233000 17.1233000 17.1233000 2.36097000 2.48403000 2.70525000 136 17.8161000 17.8161000 17.8161000 2.53753000 2.66980000 2.90757000 137 18.5185000 18.5185000 18.5185000 2.72512000 2.86717000 3.12251000 138 19.2308000 19.2308000 19.2308000 2.92365000 3.07604000 3.34999000 139 19.9531000 19.9531000 19.9531000 3.13323000 3.29655000 3.59013000 140 20.6856000 20.6856000 20.6856000 3.35294000 3.52771000 3.84188000 141 21.4286000 21.4286000 21.4286000 3.58619000 3.77312000 4.10914000 142 22.1823000 22.1823000 22.1823000 3.83209000 4.03183000 4.39090000 143 22.9469000 22.9469000 22.9469000 4.09119000 4.30444000 4.68778000 144 23.7226000 23.7226000 23.7226000 4.36307000 4.59049000 4.99931000 145 24.5098000 24.5098000 24.5098000 4.65168000 4.89415000 5.33001000 146 25.3086000 25.3086000 25.3086000 4.95365000 5.21186000 5.67602000 147 26.1194000 26.1194000 26.1194000 5.27250000 5.54733000 6.04136000 148 26.9424000 26.9424000 26.9424000 5.60742000 5.89970000 6.42511000 149 27.7778000 27.7778000 27.7778000 5.96051000 6.27120000 6.82970000 150 28.6260000 28.6260000 28.6260000 6.33248000 6.66256000 7.25591000 151 29.4872000 29.4872000 29.4872000 6.72256000 7.07297000 7.70287000 152 30.3618000 30.3618000 30.3618000 7.13293000 7.50473000 8.17308000 153 32.1522000 32.1522000 32.1522000 8.01744000 8.43535000 9.18658000 154 33.0688000 33.0688000 33.0688000 8.49382000 8.93656000 9.73242000 155 34.0000000 34.0000000 34.0000000 8.99384000 9.46264000 10.3054000 156 34.9462000 34.9462000 34.9462000 9.51981000 10.0160000 10.9080000 157 35.9079000 35.9079000 35.9079000 10.0726000 10.5976000 11.5414000 158 36.8852000 36.8852000 36.8852000 10.6522000 11.2074000 12.2055000 159 37.8788000 37.8788000 37.8788000 11.2616000 11.8486000 12.9038000 160 38.8889000 38.8889000 38.8889000 11.9010000 12.5213000 13.6364000 161 39.9160000 39.9160000 39.9160000 12.5732000 13.2285000 14.4066000 162 40.9605000 40.9605000 40.9605000 13.2778000 13.9699000 15.2140000 163 42.0228000 42.0228000 42.0228000 14.0185000 14.7492000 16.0627000 164 43.1034000 43.1034000 43.1034000 14.7952000 15.5664000 16.9527000 165 44.2029000 44.2029000 44.2029000 15.6111000 16.4248000 17.8875000 166 45.3216000 45.3216000 45.3216000 16.4681000 17.3265000 18.8696000 167 46.4602000 46.4602000 46.4602000 17.3671000 18.2724000 19.8997000 168 47.6190000 47.6190000 47.6190000 18.3116000 19.2660000 20.9818000 169 48.7988000 48.7988000 48.7988000 19.3025000 20.3087000 22.1173000 170 50.0000000 50.0000000 50.0000000 20.3442000 21.4046000 23.3108000 171 51.2232000 51.2232000 51.2232000 21.4367000 22.5541000 24.5627000 172 52.4691000 52.4691000 52.4691000 22.5839000 23.7611000 25.8772000 173 53.7383000 53.7383000 53.7383000 23.7883000 25.0283000 27.2573000 174 55.0314000 55.0314000 55.0314000 25.0542000 26.3601000 28.7077000 175 56.3492000 56.3492000 56.3492000 26.3828000 27.7580000 30.2301000 176 57.6923000 57.6923000 57.6923000 27.7789000 29.2269000 31.8298000 177 59.0615000 59.0615000 59.0615000 29.2462000 30.7706000 33.5110000 178 60.4575000 60.4575000 60.4575000 30.7864000 32.3911000 35.2758000 179 61.8812000 61.8812000 61.8812000 32.4049000 34.0940000 37.1303000 180 63.3333000 63.3333000 63.3333000 34.1068000 35.8846000 39.0804000 181 64.8148000 64.8148000 64.8148000 35.8959000 37.7669000 41.1304000 182 66.3265000 66.3265000 66.3265000 37.7750000 39.7440000 43.2835000 183 67.8694000 67.8694000 67.8694000 39.7525000 41.8246000 45.5494000 184 69.4444000 69.4444000 69.4444000 41.8319000 44.0124000 47.9320000 185 71.0526000 71.0526000 71.0526000 44.0179000 46.3123000 50.4368000 186 72.6950000 72.6950000 72.6950000 46.3189000 48.7333000 53.0733000 187 74.3728000 74.3728000 74.3728000 48.7397000 51.2802000 55.8471000 188 76.0870000 76.0870000 76.0870000 51.2882000 53.9615000 58.7672000 189 77.8388000 77.8388000 77.8388000 53.9711000 56.7843000 61.8413000 190 79.6296000 79.6296000 79.6296000 56.7969000 59.7574000 65.0792000 191 81.4607000 81.4607000 81.4607000 59.7730000 62.8886000 68.4893000 192 83.3333000 83.3333000 83.3333000 62.9085000 66.1875000 72.0820000 193 85.2490000 85.2490000 85.2490000 66.2132000 69.6645000 75.8686000 194 87.2093000 87.2093000 87.2093000 69.6980000 73.3310000 79.8616000 195 91.2698000 91.2698000 91.2698000 77.2506000 81.2773000 88.5156000 196 93.3735000 93.3735000 93.3735000 81.3434000 85.5833000 93.2052000 197 0.00000000 8.26484000 16.2106000 0.67558200 0.70149300 2.22831000 198 0.00000000 0.00000000 15.1007000 0.35810800 0.14325200 1.88586000 199 8.87450000 0.00000000 10.5284000 0.54100000 0.25624900 1.04895000 200 12.4894000 0.00000000 27.0378000 1.66342000 0.73367400 5.67524000 201 39.7859000 18.0465000 27.4062000 7.49722000 5.18943000 6.38220000 202 30.0491000 0.00000000 17.2602000 3.48536000 1.74426000 2.53760000 203 33.7048000 11.4389000 14.2263000 4.59906000 2.99243000 2.02652000 204 44.0269000 0.00000000 10.3780000 6.90784000 3.53906000 1.32368000 205 43.1034000 0.00000000 0.00000000 6.41936000 3.30937000 0.30051900 206 100.000000 89.8809000 0.00000000 69.3100000 77.4068000 11.2889000 207 100.000000 100.000000 0.00000000 76.9958000 92.7795000 13.8511000 208 28.3367000 28.4597000 0.00000000 5.04618000 6.09701000 0.91094300 209 31.2500000 31.2500000 31.2500000 7.56434000 7.95863000 8.66740000 210 48.0180000 43.7574000 31.0246000 15.2518000 16.2322000 9.74800000 211 58.8104000 100.000000 34.1552000 50.0529000 78.6905000 21.5890000 212 23.6808000 52.4560000 0.00000000 10.3783000 17.9573000 2.91924000 213 28.1628000 100.000000 67.3122000 45.8284000 75.8557000 51.0801000 214 47.4431000 100.000000 83.9682000 55.7920000 80.4447000 76.2879000 215 0.00000000 22.9101000 31.9648000 3.03861000 3.67048000 8.43380000 216 0.00000000 23.0123000 41.0478000 4.08057000 4.10883000 13.8546000 217 76.0448000 43.2310000 42.1823000 30.5102000 23.7345000 17.0411000 218 27.2075000 82.4296000 0.00000000 25.5747000 47.4693000 7.81489000 219 25.6842000 100.000000 0.00000000 37.9701000 72.6606000 12.0242000 220 46.9857000 100.000000 63.9244000 50.0882000 78.1443000 47.0993000 221 0.00000000 32.1552000 14.4848000 3.34968000 6.16725000 2.75860000 222 0.00000000 42.8461000 18.8042000 6.02816000 11.2053000 4.63582000 223 0.00000000 100.000000 45.6618000 38.9353000 72.7912000 28.6563000 224 0.00000000 100.000000 59.0502000 41.3091000 73.7407000 41.1572000 225 0.00000000 100.000000 70.9482000 44.0893000 74.8529000 55.7985000 226 68.5537000 100.000000 72.8416000 62.2296000 84.1466000 59.2782000 227 57.6923000 0.00000000 0.00000000 12.0527000 6.21353000 0.56424300 228 93.3735000 0.00000000 0.00000000 35.2933000 18.1947000 1.65224000 229 100.000000 0.00000000 0.00000000 41.2385000 21.2596000 1.93056000 230 100.000000 0.00000000 15.8540000 41.6287000 21.4158000 3.98581000 231 100.000000 0.00000000 37.2421000 43.3026000 22.0854000 12.8008000 232 100.000000 0.00000000 71.2229000 49.6426000 24.6215000 46.1884000 233 100.000000 0.00000000 84.3269000 53.5086000 26.1680000 66.5473000 234 0.00000000 15.6958000 20.0851000 1.36203000 1.76023000 3.42594000 235 18.3654000 11.2792000 20.5298000 2.22580000 1.71832000 3.50513000 236 26.2280000 18.4091000 36.5642000 5.30712000 4.01229000 10.9068000 237 73.6972000 34.2141000 66.5938000 31.3865000 20.4336000 40.2302000 238 76.5347000 50.6188000 91.7928000 45.2685000 33.2900000 81.9391000 239 58.1607000 30.7359000 73.7896000 24.1145000 15.4656000 49.3865000 240 76.5772000 31.3811000 85.4851000 38.0982000 22.4400000 68.6476000 241 100.000000 37.2933000 88.3694000 58.9765000 34.9172000 75.1138000 242 26.1194000 0.00000000 0.00000000 2.28763000 1.17934000 0.10709400 243 23.7226000 0.00000000 0.00000000 1.89305000 0.97592300 0.08862220 244 22.2528000 0.00000000 89.8440000 15.8299000 6.52556000 74.6326000 245 28.0836000 100.000000 100.000000 56.4512000 80.1033000 107.099000 246 0.00000000 31.8379000 28.9445000 4.18564000 6.40448000 7.46050000 247 0.00000000 33.0507000 69.7292000 11.2086000 9.59109000 43.2820000 248 0.00000000 36.3014000 100.000000 21.9264000 14.9738000 96.3469000 249 88.5681000 71.6202000 100.000000 66.2215000 57.0792000 102.140000 250 28.9171000 15.4359000 0.00000000 3.54124000 2.92049000 0.37711400 251 68.0512000 29.6287000 0.00000000 19.9044000 14.0524000 1.66357000 252 84.1269000 37.7655000 0.00000000 32.0937000 22.7958000 2.70892000 253 100.000000 38.4231000 0.00000000 45.6040000 29.9913000 3.38590000 254 100.000000 50.9704000 0.00000000 49.2171000 37.2181000 4.59044000 255 100.000000 52.6799000 40.5883000 52.2822000 39.3912000 17.8127000 256 100.000000 73.3962000 47.0799000 62.4348000 58.2257000 25.7358000 257 100.000000 74.3984000 59.6829000 65.2723000 60.2370000 37.9768000 258 100.000000 78.6331000 100.000000 80.0604000 70.0269000 103.910000 259 100.000000 86.8043000 100.000000 85.2355000 80.3780000 105.635000 260 0.00000000 52.7833000 14.6690000 8.94773000 17.3521000 4.66207000 261 0.00000000 69.2117000 20.0708000 16.2218000 31.4833000 8.37583000 262 25.2421000 71.4450000 100.000000 36.9529000 41.8547000 100.744000 263 0.00000000 27.1401000 86.3106000 15.0712000 9.45446000 68.8074000 264 0.00000000 26.6906000 100.000000 20.1208000 11.3623000 95.7450000 265 86.4240000 42.3309000 100.000000 53.0359000 33.2090000 98.2274000 266 100.000000 59.2060000 100.000000 70.3501000 50.6050000 100.673000 267 35.2455000 18.5016000 32.6664000 6.80082000 4.84388000 8.82178000 268 35.6747000 34.4323000 52.1691000 12.0204000 10.8643000 23.6668000 269 59.1188000 49.5159000 60.7281000 26.1148000 23.9072000 34.1867000 270 67.4142000 50.4586000 65.0893000 31.6790000 27.1257000 39.6336000 271 75.0155000 56.5366000 77.1401000 41.6008000 35.1298000 57.2384000 272 75.5069000 63.7712000 100.000000 52.9531000 44.5560000 100.422000 273 50.2406000 31.3702000 60.2528000 17.5900000 12.6557000 31.9343000 274 59.9063000 30.3832000 62.9219000 22.1633000 14.6780000 35.1318000 275 81.6226000 100.000000 71.5472000 70.2968000 88.3455000 57.8474000 276 92.0881000 100.000000 82.6130000 81.6751000 93.8387000 75.2188000 277 100.000000 100.000000 89.7259000 91.1107000 98.4259000 88.1831000 278 26.5089000 61.8104000 26.0151000 15.5099000 25.9350000 9.39552000 279 32.6678000 74.6238000 46.0858000 25.3108000 40.1026000 23.3980000 280 0.00000000 15.9253000 37.5679000 2.88158000 2.40001000 11.3298000 281 0.00000000 13.3150000 64.6595000 7.35137000 3.85376000 35.8991000 282 0.00000000 75.6633000 100.000000 37.1056000 45.3345000 101.407000 283 0.00000000 83.2491000 100.000000 41.6631000 54.4501000 102.927000 284 25.2767000 42.4776000 50.1408000 11.4266000 13.4525000 22.3685000 285 39.7524000 49.2716000 63.7991000 19.4059000 20.2523000 37.3919000 286 40.4516000 63.4565000 70.3593000 26.6763000 31.9392000 47.6300000 287 45.7283000 69.9719000 100.000000 41.3380000 42.9870000 100.731000 288 44.8702000 78.9507000 100.000000 46.0044000 52.7504000 102.370000 289 18.8533000 28.1148000 32.2790000 5.05466000 5.83948000 8.90571000 290 47.7644000 32.1542000 33.3399000 12.6543000 10.8128000 10.0180000 291 48.8115000 34.9187000 43.9382000 14.8824000 12.6427000 16.9987000 292 62.8504000 100.000000 49.2003000 54.0387000 80.5135000 32.2506000 293 75.2837000 100.000000 59.0394000 63.0378000 84.9428000 42.1628000 294 56.0159000 58.1353000 33.0058000 23.5339000 27.7249000 12.5329000 295 79.6415000 62.4575000 38.0555000 39.2539000 38.4603000 16.6750000 296 100.000000 64.4474000 46.1404000 57.8239000 49.2330000 23.4899000 297 51.5426000 28.0015000 20.0266000 12.3053000 9.65778000 4.35639000 298 100.000000 62.9954000 19.7733000 54.5042000 46.8571000 9.23820000 299 100.000000 92.3338000 21.5691000 71.7633000 81.2104000 15.5083000 300 25.5033000 18.1415000 57.9369000 8.49383000 5.22963000 28.4717000 301 23.7939000 14.8283000 100.000000 20.6415000 9.57661000 95.3729000 302 66.0034000 15.7685000 100.000000 35.0295000 17.1109000 96.0690000 303 100.000000 19.4560000 100.000000 60.4123000 30.7279000 97.3598000 304 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 305 8.90985000 8.90985000 8.90985000 0.79959700 0.84127600 0.91619800 306 0.00000000 15.5700000 81.8100000 12.2099000 6.08230000 60.6063000 307 0.00000000 50.6605000 82.5477000 19.5690000 20.4276000 64.2127000 308 0.00000000 77.4371000 85.3754000 32.6873000 45.1912000 73.1329000 309 0.00000000 74.7664000 72.5274000 27.3050000 40.6112000 52.2699000 310 0.00000000 88.0286000 79.5390000 37.5397000 57.8697000 65.5850000 311 64.1637000 100.000000 92.5572000 66.1312000 85.4294000 92.3812000 312 79.3721000 100.000000 92.4357000 75.3197000 90.1716000 92.5767000 313 68.8573000 80.4147000 91.4949000 54.4063000 58.7732000 85.8059000 314 95.5285000 95.5285000 95.5285000 85.6624000 90.1275000 98.1541000 315 97.7366000 97.7366000 97.7366000 90.2253000 94.9283000 103.382000 316 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 317 28.0834000 31.7788000 83.6638000 17.6425000 12.0750000 64.5830000 318 41.6586000 37.2643000 100.000000 28.1152000 18.4877000 96.6991000 319 41.7861000 92.7940000 100.000000 54.2334000 70.6704000 105.395000 320 0.00000000 41.4317000 29.9692000 6.43703000 10.7641000 8.65337000 321 0.00000000 66.6792000 34.9204000 16.1849000 29.4838000 14.3000000 322 0.00000000 81.3787000 34.4637000 24.1931000 45.5790000 16.7304000 323 0.00000000 100.000000 33.6219000 37.4264000 72.1876000 20.7106000 324 0.00000000 100.000000 0.00000000 35.7573000 71.5199000 11.9206000 325 44.5628000 100.000000 0.00000000 42.6493000 75.0729000 12.2432000 326 69.4445000 100.000000 20.0194000 54.5061000 81.1163000 15.9235000 327 20.0892000 31.3228000 0.00000000 4.23619000 6.42871000 1.01765000 328 31.6988000 44.5435000 0.00000000 9.34919000 13.6835000 2.14855000 329 41.9012000 58.1543000 0.00000000 16.6803000 24.3886000 3.82854000 330 55.2763000 73.3060000 0.00000000 28.7305000 41.1695000 6.43263000 331 56.9049000 89.4471000 50.9844000 43.4916000 63.1775000 31.0265000 332 58.4677000 88.4778000 64.0082000 46.1320000 63.2357000 44.5304000 333 32.4886000 23.4106000 0.00000000 5.15368000 5.03213000 0.69973800 334 41.4109000 21.2501000 0.00000000 7.22381000 5.69536000 0.71867300 335 100.000000 22.1582000 0.00000000 42.6771000 24.1370000 2.41015000 336 100.000000 100.000000 74.6422000 86.3270000 96.5123000 62.9912000 337 10.9006000 15.0323000 0.00000000 1.17697000 1.65148000 0.25674900 338 0.00000000 21.1781000 11.1645000 1.53434000 2.72457000 1.57306000 339 43.4917000 31.8612000 0.00000000 9.50360000 9.29463000 1.29327000 340 57.1220000 35.5978000 0.00000000 15.5150000 13.5233000 1.79272000 341 57.3688000 42.8091000 21.3065000 18.0647000 17.3791000 5.93424000 342 36.8852000 0.00000000 0.00000000 4.62177000 2.38266000 0.21636600 343 39.9160000 0.00000000 0.00000000 5.45524000 2.81234000 0.25538500 344 58.2403000 0.00000000 13.2444000 12.5909000 6.45800000 2.07927000 345 74.4660000 81.6392000 53.5588000 48.2896000 57.9260000 32.1453000 346 89.8785000 86.3214000 78.6886000 68.4972000 72.1389000 65.3632000 347 89.2157000 89.2157000 89.2157000 73.3732000 77.1978000 84.0728000 348 17.1233000 0.00000000 0.00000000 1.02438000 0.52809700 0.04795580 349 21.4286000 0.00000000 0.00000000 1.55598000 0.80215200 0.07284240 350 19.2308000 0.00000000 0.00000000 1.26851000 0.65395600 0.05938490 351 15.6163000 6.70093000 0.00000000 1.06975000 0.85108600 0.10790800 352 13.1579000 0.00000000 0.00000000 0.64490700 0.33246900 0.03019100 353 11.2903000 11.2903000 11.2903000 1.15372000 1.21386000 1.32196000 354 35.8547000 19.1621000 13.9639000 5.76203000 4.55652000 2.21434000 355 56.6888000 22.7136000 17.6785000 13.5825000 9.18728000 3.54866000 356 100.000000 21.7280000 46.7833000 45.9716000 25.3698000 20.0220000 357 100.000000 25.2994000 57.0720000 48.2529000 27.0455000 29.6837000 358 43.2347000 0.00000000 25.6727000 7.42862000 3.71790000 5.39848000 359 83.7458000 0.00000000 25.3099000 28.5406000 14.6049000 6.24665000 360 100.000000 0.00000000 26.9846000 42.3067000 21.6870000 7.55606000 361 100.000000 21.8487000 25.5121000 43.5943000 24.4426000 7.42998000 362 100.000000 23.6707000 36.7374000 44.8791000 25.3313000 13.0402000 363 52.5783000 25.5419000 25.7986000 12.7178000 9.26080000 6.23933000 364 68.2159000 31.3540000 23.4211000 21.1174000 15.0466000 6.02844000 365 78.3536000 29.5510000 42.9496000 29.0942000 18.4480000 16.6442000 366 100.000000 36.1021000 48.1441000 48.6314000 30.3491000 21.9592000 367 100.000000 42.9173000 59.5399000 52.4070000 34.5524000 33.5407000 368 0.00000000 0.00000000 34.0000000 1.70801000 0.68324600 8.99468000 369 0.00000000 0.00000000 36.8852000 2.02294000 0.80922700 10.6532000 370 0.00000000 22.9741000 60.6957000 7.44013000 5.44489000 31.5708000 371 0.00000000 46.6641000 60.7637000 12.5075000 15.5570000 33.3319000 372 0.00000000 57.0098000 73.4425000 19.1817000 23.9660000 50.7873000 373 0.00000000 59.2387000 84.8529000 23.5182000 27.1292000 69.2205000 374 100.000000 61.8424000 88.3469000 67.0423000 51.0623000 77.7643000 375 100.000000 83.2447000 82.3562000 76.4827000 73.1375000 71.0681000 376 100.000000 90.9150000 91.9723000 84.9735000 84.8505000 90.1452000 377 21.1529000 19.9074000 0.00000000 2.69161000 3.13005000 0.46233200 378 37.4302000 38.4677000 0.00000000 9.14178000 11.2098000 1.68201000 379 48.8912000 51.4516000 0.00000000 16.5522000 20.6219000 3.10825000 380 48.6518000 57.0376000 35.6252000 20.3955000 25.4300000 13.6962000 381 58.1260000 65.5478000 44.5884000 29.1174000 35.2159000 21.0947000 382 92.4817000 84.2516000 62.8818000 65.1679000 68.8737000 43.2792000 383 100.000000 84.6468000 75.6394000 75.3664000 74.1397000 60.7237000 384 40.2514000 39.4880000 50.3737000 14.1024000 13.6812000 22.4775000 385 42.8373000 61.7241000 58.5431000 23.9061000 29.6935000 33.0257000 386 59.3516000 61.8498000 74.8908000 34.4048000 34.7299000 54.1669000 387 59.4362000 79.1469000 100.000000 51.9946000 56.0126000 102.684000 388 63.5855000 93.7638000 100.000000 63.8715000 76.7067000 106.052000 389 75.4124000 100.000000 100.000000 75.6211000 89.9860000 107.996000 390 29.5466000 38.4565000 28.4116000 8.48662000 10.7313000 7.83279000 391 27.7074000 42.9221000 43.3705000 10.9366000 13.4992000 16.9527000 392 39.7327000 75.8552000 69.2847000 32.4697000 44.2772000 48.2626000 393 70.6322000 77.2987000 69.3552000 46.7594000 52.8689000 49.2625000 394 80.1676000 100.000000 83.5958000 72.8074000 89.2306000 76.4532000 395 90.1863000 100.000000 100.000000 86.4312000 95.5589000 108.502000 396 46.4602000 0.00000000 0.00000000 7.53526000 3.88465000 0.35276000 397 47.8954000 12.1365000 6.62716000 8.63387000 5.16512000 1.06835000 398 52.7634000 15.6234000 0.00000000 10.6717000 6.61978000 0.71542400 399 74.2921000 70.5305000 0.00000000 37.3862000 43.4586000 6.41838000 400 75.3336000 100.000000 0.00000000 57.5204000 82.7394000 12.9394000 401 87.4752000 100.000000 0.00000000 66.2067000 87.2175000 13.3460000 402 100.000000 100.000000 32.6925000 78.5714000 93.4098000 22.1484000 403 0.00000000 0.00000000 100.000000 18.0500000 7.22046000 95.0546000 404 24.0195000 30.0838000 100.000000 22.6238000 13.4887000 96.0235000 405 25.1508000 54.0248000 100.000000 29.2268000 26.4241000 98.1724000 406 0.00000000 61.3459000 43.7996000 14.8677000 25.0856000 19.2975000 407 0.00000000 76.1554000 46.4313000 22.6278000 39.9887000 23.7907000 408 0.00000000 81.3429000 67.3850000 29.8445000 47.8041000 46.6014000 409 0.00000000 100.000000 80.7528000 46.8881000 75.9725000 70.5374000 410 0.00000000 100.000000 100.000000 53.8073000 78.7404000 106.975000 411 0.00000000 37.9470000 65.4544000 11.2194000 11.2930000 38.1056000 412 0.00000000 44.4590000 84.2554000 18.1925000 16.7918000 66.4749000 413 44.1275000 49.8903000 100.000000 32.4162000 25.9353000 97.9100000 414 77.4585000 73.7688000 100.000000 59.2172000 55.1748000 102.142000 415 77.4447000 84.3498000 100.000000 65.5246000 67.8043000 104.247000 416 51.1161000 69.4407000 55.5082000 29.8432000 38.1866000 31.2125000 417 80.6741000 69.6750000 65.5574000 48.2194000 47.5880000 43.2885000 418 100.000000 72.0773000 77.3110000 68.4302000 59.4947000 60.7901000 419 30.2117000 0.00000000 24.9003000 3.97502000 1.94400000 4.94145000 420 30.1486000 0.00000000 35.7919000 4.95083000 2.33285000 10.1480000 421 60.8359000 52.7444000 38.7324000 24.3767000 25.0660000 15.3010000 422 100.000000 58.2465000 68.3314000 59.5748000 45.6718000 45.8480000 423 42.4936000 0.00000000 17.5911000 6.69884000 3.39904000 2.77212000 424 58.8015000 0.00000000 59.4638000 18.2046000 8.73387000 30.2763000 425 60.3863000 0.00000000 72.8212000 22.1534000 10.4008000 47.1266000 426 60.1230000 0.00000000 100.000000 31.2458000 14.0233000 95.6724000 427 78.3735000 22.6544000 100.000000 43.3302000 22.4818000 96.6683000 428 100.000000 35.1858000 100.000000 62.9213000 35.7462000 98.1963000 429 81.4607000 0.00000000 0.00000000 25.9343000 13.3699000 1.21410000 430 87.2093000 0.00000000 0.00000000 30.2406000 15.5899000 1.41570000 431 100.000000 34.8031000 17.9079000 45.2761000 28.5570000 5.67669000 432 100.000000 46.6637000 27.8166000 48.9691000 34.9056000 10.1071000 433 91.9354000 54.0802000 35.0193000 44.9635000 36.4419000 14.1821000 434 93.2949000 100.000000 43.0576000 73.7867000 90.8014000 28.3329000 435 34.4069000 31.5233000 15.9240000 7.28989000 8.01318000 3.22479000 436 45.4417000 70.6766000 19.1641000 24.1027000 36.6583000 8.69733000 437 74.2477000 79.9636000 28.1911000 43.8027000 54.4686000 14.3172000 438 100.000000 71.6904000 33.2871000 59.7664000 55.7021000 16.1720000 439 100.000000 81.7439000 41.7846000 66.5322000 67.6420000 23.3375000 440 100.000000 100.000000 55.6149000 81.8647000 94.7272000 39.4920000 441 31.0077000 36.6055000 19.4838000 7.74306000 9.78181000 4.46185000 442 37.6956000 45.2749000 22.0064000 11.7349000 15.1444000 6.06095000 443 75.7453000 50.9063000 42.6192000 32.7299000 28.3693000 18.1299000 444 100.000000 61.0819000 53.3057000 57.5245000 46.7312000 29.2563000 445 100.000000 66.0628000 64.1307000 61.9841000 52.0990000 41.6934000 446 0.00000000 16.6731000 100.000000 18.8963000 8.91317000 95.3368000 447 0.00000000 45.3174000 100.000000 24.2442000 19.6099000 97.1196000 448 0.00000000 60.8268000 100.000000 29.7883000 30.6988000 98.9679000 449 0.00000000 68.0644000 100.000000 33.1011000 37.3250000 100.072000 450 0.00000000 92.0345000 100.000000 47.6670000 66.4589000 104.928000 451 28.6260000 0.00000000 0.00000000 2.74754000 1.41644000 0.12862500 452 31.2500000 0.00000000 0.00000000 3.28202000 1.69198000 0.15364600 453 34.0000000 0.00000000 0.00000000 3.90225000 2.01172000 0.18268200 454 61.8812000 0.00000000 0.00000000 14.0598000 7.24826000 0.65820400 455 66.3265000 0.00000000 0.00000000 16.3898000 8.44944000 0.76728200 456 71.0526000 0.00000000 0.00000000 19.0985000 9.84583000 0.89408700 457 76.0870000 0.00000000 0.00000000 22.2529000 11.4720000 1.04176000 458 81.3444000 58.6024000 0.00000000 36.6669000 34.9600000 4.81589000 459 100.000000 60.8507000 0.00000000 52.9869000 44.7582000 5.84718000 460 100.000000 70.4055000 0.00000000 57.4646000 53.7144000 7.33994000 461 47.0822000 0.00000000 74.3499000 17.0033000 7.69734000 49.0737000 462 88.7856000 0.00000000 85.5722000 44.1718000 21.3070000 68.2612000 463 100.000000 0.00000000 100.000000 59.2885000 28.4801000 96.9852000 464 31.4337000 0.00000000 47.7079000 6.81293000 3.10898000 18.5426000 465 32.5622000 0.00000000 62.3271000 9.82258000 4.34167000 33.0925000 466 34.1126000 0.00000000 100.000000 21.9791000 9.24601000 95.2386000 467 56.6689000 31.6041000 100.000000 32.5514000 19.0192000 96.5679000 468 58.1678000 44.1303000 100.000000 36.1745000 25.2532000 97.5803000 469 19.0988000 17.1519000 40.5301000 4.60920000 3.41405000 13.3415000 470 19.8857000 25.5418000 71.8092000 11.8074000 7.91571000 45.7694000 471 27.8513000 41.3134000 72.6524000 16.4715000 15.0288000 48.0800000 472 26.7315000 41.8098000 84.4680000 19.9293000 16.5974000 66.7117000 473 24.6355000 43.1187000 100.000000 25.6588000 19.4128000 97.0071000 474 42.9166000 36.9981000 80.8277000 21.5477000 15.8081000 60.3814000 475 43.5241000 44.6414000 81.4723000 23.9070000 19.9186000 62.1042000 476 44.4650000 60.0225000 100.000000 36.3092000 33.5580000 99.1761000 477 0.00000000 35.0112000 83.0981000 15.4663000 11.9397000 63.7135000 478 11.2790000 42.5631000 86.9483000 19.0657000 16.3554000 71.0648000 479 12.8583000 54.2772000 93.2799000 25.1794000 24.7791000 84.2443000 480 29.5245000 62.7795000 91.3681000 30.2155000 32.5624000 81.7782000 481 38.2895000 75.3811000 88.4895000 37.5740000 45.8453000 78.5709000 482 77.6949000 92.7658000 90.2786000 67.7851000 78.0575000 86.5159000 483 1.44509000 0.00000000 0.00000000 0.04588310 0.02365410 0.00214800 484 10.4371000 5.70386000 3.17539000 0.65098400 0.57465600 0.30965900 485 36.0905000 61.0181000 31.5520000 17.7017000 26.5047000 11.8616000 486 35.3383000 90.6822000 51.7972000 37.0385000 61.1333000 31.7084000 487 66.0940000 100.000000 83.4132000 63.9930000 84.6933000 75.7318000 488 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 489 68.7910000 26.3505000 35.1769000 21.6235000 13.9324000 11.1569000 490 76.6574000 27.0465000 60.2468000 30.5560000 18.2385000 32.3221000 491 11.5941000 10.6561000 24.1772000 1.77832000 1.40483000 4.68509000 492 7.60629000 5.24466000 26.4707000 1.45370000 0.85173500 5.47745000 493 0.00000000 46.6156000 69.0963000 14.4369000 16.3054000 43.5648000 494 0.00000000 68.4354000 86.2930000 28.1583000 35.6402000 73.1409000 495 21.8038000 0.00000000 9.70827000 1.78141000 0.89839700 0.98594500 496 21.5629000 9.54256000 5.45955000 1.98692000 1.51031000 0.59987300 497 19.0660000 17.8448000 7.54143000 2.32548000 2.60662000 1.00743000 498 52.1939000 43.6404000 0.00000000 15.4026000 16.4249000 2.35872000 499 55.4869000 78.0507000 33.9289000 33.1973000 47.2466000 16.2842000 500 67.1967000 80.8944000 67.2346000 46.4012000 55.9325000 47.1049000 501 69.4810000 92.6156000 82.5149000 59.8978000 74.1306000 72.3986000 502 39.4709000 66.9712000 50.2575000 23.7539000 33.3505000 25.6630000 503 65.7028000 66.2295000 58.7805000 35.7120000 38.8059000 34.4183000 504 73.3476000 65.6899000 66.9105000 41.7272000 41.3192000 44.1174000 505 53.0043000 39.0886000 42.2811000 17.2401000 15.2953000 16.1814000 506 83.1313000 39.0906000 59.4081000 37.2979000 25.2981000 32.4066000 507 24.3859000 3.86467000 18.1991000 2.60642000 1.44429000 2.76922000 508 35.3905000 6.67864000 17.6519000 4.91527000 2.77753000 2.76148000 509 47.4998000 20.6870000 35.2137000 11.0005000 7.33187000 10.4634000 510 53.6669000 20.3874000 52.7788000 15.8628000 9.49795000 23.7677000 511 54.6292000 19.3655000 70.2438000 19.9610000 11.0034000 43.7865000 512 58.7214000 17.2780000 88.8804000 27.2485000 13.7921000 73.6457000 513 36.5870000 39.2895000 63.2187000 15.5705000 14.0741000 35.7118000 514 58.7380000 38.0963000 70.5395000 25.0506000 18.3299000 45.3337000 515 78.9735000 43.3602000 79.9720000 40.7171000 28.1021000 60.3628000 516 92.8716000 52.6112000 87.5832000 56.7758000 40.4139000 74.8626000 517 42.2524000 24.2507000 50.3696000 11.7927000 8.17048000 21.5319000 518 81.4145000 43.8114000 71.2198000 40.0674000 28.2407000 47.3872000 519 86.4672000 61.5058000 70.8370000 49.9952000 42.6737000 49.1238000 520 58.4594000 30.5522000 34.9952000 16.9376000 12.5569000 11.0351000 521 70.0343000 41.9837000 34.1150000 25.4780000 20.7502000 11.6783000 522 76.6996000 41.8854000 90.4561000 42.2698000 27.9063000 78.5146000 523 30.0286000 10.0285000 53.6630000 7.89009000 4.08192000 23.9797000 524 44.4361000 0.00000000 58.2963000 12.2473000 5.69043000 28.7445000 525 52.9315000 35.8989000 79.3739000 24.4830000 17.0078000 58.1225000 526 53.5346000 51.7679000 78.4052000 28.9057000 25.9490000 58.0902000 527 70.5510000 59.6783000 85.7842000 42.8095000 37.3081000 71.7941000 528 81.5099000 63.0138000 88.3072000 52.2740000 44.2143000 77.1485000 529 18.3603000 0.00000000 38.5429000 3.38221000 1.48742000 11.7358000 530 22.9363000 9.84659000 41.0415000 4.65544000 2.62703000 13.5340000 531 28.9254000 10.6298000 74.5970000 12.5182000 5.96235000 49.3364000 532 33.9315000 0.00000000 80.2160000 14.8513000 6.38975000 57.9276000 533 88.5544000 26.5535000 86.2881000 46.2767000 25.4072000 70.2024000 534 34.9599000 7.48228000 34.3894000 6.11688000 3.29922000 9.48122000 535 43.6672000 0.00000000 45.6664000 9.77818000 4.67379000 17.0483000 536 73.3089000 0.00000000 72.1366000 29.1238000 14.0155000 46.4923000 537 42.2522000 14.8719000 43.9700000 9.77549000 5.72642000 15.9563000 538 64.1167000 77.6101000 48.6882000 39.0249000 49.6434000 26.6468000 539 88.2375000 100.000000 58.4982000 72.2478000 89.7037000 42.0138000 540 88.4085000 64.8652000 22.4740000 45.4618000 43.4338000 9.90034000 541 90.3029000 74.7403000 28.3112000 52.4348000 54.4200000 13.9053000 542 90.4853000 87.3830000 26.2488000 60.2195000 70.0322000 15.6445000 543 27.2343000 26.0370000 15.3614000 4.82649000 5.37198000 2.71741000 544 31.3872000 71.5417000 16.1642000 20.5302000 35.5011000 7.88814000 545 47.2975000 82.6368000 23.7235000 31.8830000 50.8197000 12.4727000 546 81.5847000 100.000000 26.2930000 62.7947000 85.3413000 18.4814000 547 72.1762000 42.3654000 0.00000000 25.1442000 20.9286000 2.71471000 548 85.8203000 51.2512000 0.00000000 37.2392000 31.1851000 4.05709000 549 85.6103000 69.8540000 0.00000000 44.9489000 46.8444000 6.67340000 550 89.3223000 82.6670000 41.3420000 57.7360000 63.9746000 22.7852000 551 100.000000 91.6495000 44.6272000 73.6014000 81.1485000 27.6458000 552 14.4318000 22.2986000 29.9524000 3.52946000 3.82905000 7.46002000 553 20.0993000 22.8644000 54.5320000 7.57073000 5.63292000 25.1370000 554 33.5920000 27.3642000 57.7479000 11.2691000 8.42952000 28.7446000 555 21.7686000 22.1977000 91.2515000 17.7110000 9.58003000 77.7790000 556 38.6738000 22.8851000 100.000000 24.6849000 12.9137000 95.8039000 557 72.6347000 49.4835000 100.000000 45.5932000 32.5301000 98.4886000 558 0.00000000 6.06080000 8.80213000 0.32645300 0.41434700 0.84440400 559 0.00000000 11.2240000 11.5726000 0.65809200 0.95125400 1.34469000 560 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 561 11.4732000 61.0941000 23.4050000 13.1737000 24.2942000 8.22648000 562 18.4923000 77.3963000 44.9204000 24.2947000 41.9323000 22.8975000 563 23.9400000 84.5403000 58.1346000 31.7380000 52.0354000 36.4911000 564 25.7193000 49.3794000 52.0137000 13.8771000 17.7280000 24.7505000 565 31.5651000 51.8361000 71.4793000 20.0965000 21.6673000 47.5292000 566 43.2638000 52.9684000 74.1947000 24.3499000 24.3657000 51.6784000 567 30.5715000 23.5106000 36.0534000 6.68017000 5.61574000 10.8436000 568 39.7864000 26.2107000 36.8497000 9.43389000 7.59555000 11.5511000 569 47.7330000 28.3705000 43.9426000 13.2534000 9.96772000 16.5715000 570 59.4074000 37.4300000 45.4547000 20.1321000 16.1499000 18.5521000 571 69.4024000 45.2873000 50.4815000 28.2554000 23.2937000 23.6823000 572 73.9790000 66.9726000 74.3023000 44.6542000 43.5106000 54.4596000 573 82.0046000 68.0742000 79.4265000 52.1058000 47.9757000 62.7283000 574 81.9086000 75.8565000 80.3219000 56.4186000 56.2671000 65.5349000 575 86.1568000 75.1590000 92.2425000 63.2227000 58.7274000 86.7702000 576 56.0206000 55.4190000 65.0692000 27.7490000 27.7207000 39.9309000 577 74.4410000 64.6894000 80.7755000 45.7750000 42.2748000 64.1286000 578 52.0363000 10.0370000 25.6965000 10.9542000 6.07050000 5.67596000 579 57.3018000 0.00000000 29.7138000 13.1712000 6.64040000 7.38334000 580 81.6065000 18.6040000 27.9832000 28.2213000 15.9513000 7.61354000 581 80.5114000 60.0076000 56.2796000 41.6504000 37.8100000 31.2949000 582 80.3945000 74.7903000 62.1163000 49.9506000 52.5994000 40.0491000 583 60.9264000 54.9978000 53.0011000 27.3835000 27.5855000 26.8606000 584 61.0260000 82.9565000 54.4301000 41.7076000 55.7444000 32.9114000 585 65.9802000 65.5167000 35.3189000 31.8793000 36.7538000 15.1018000 586 67.4072000 74.2303000 33.9718000 36.9512000 45.9587000 15.8613000 587 45.2740000 52.1507000 40.2164000 17.9397000 21.4166000 15.9040000 588 48.9543000 57.3378000 49.1875000 22.4727000 26.4621000 23.4697000 589 21.3488000 0.00000000 25.4329000 2.49491000 1.17649000 5.07438000 590 43.2665000 8.37313000 31.4616000 8.20220000 4.46791000 8.06439000 591 55.1143000 0.00000000 37.0675000 12.9502000 6.44014000 11.2746000 592 58.0578000 0.00000000 47.9601000 15.7522000 7.71283000 19.1688000 593 64.5722000 0.00000000 88.5364000 29.1414000 13.4414000 72.8464000 594 78.9856000 0.00000000 87.8730000 37.6627000 17.8610000 72.0415000 595 81.4014000 0.00000000 100.000000 43.9419000 20.5685000 96.2667000 596 89.3422000 22.2571000 100.000000 51.4385000 26.5873000 97.0335000 597 86.4461000 57.4330000 100.000000 58.0451000 43.2026000 99.8924000 598 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 599 58.1802000 42.8318000 52.8412000 22.1246000 19.0561000 25.3409000 600 59.8791000 41.8627000 61.1412000 24.3029000 19.6033000 33.9172000 601 47.0637000 40.1874000 44.8972000 15.6105000 14.8173000 18.1036000 602 49.3991000 41.1077000 56.9593000 18.7624000 16.5526000 29.0958000 603 53.4180000 40.0839000 64.4594000 21.6946000 17.4907000 37.5331000 604 57.0533000 51.1479000 67.0469000 27.1494000 25.0826000 41.9249000 605 62.5091000 52.0911000 83.7267000 34.8148000 28.9708000 67.0463000 606 66.8367000 66.5675000 87.1944000 44.2281000 42.5417000 75.2339000 607 0.00000000 8.76329000 36.1053000 2.22830000 1.36094000 10.2871000 608 9.39820000 13.7963000 42.1203000 3.65740000 2.47635000 14.3089000 609 56.3226000 15.0740000 42.1443000 14.8210000 8.38117000 14.8774000 610 62.5823000 11.1778000 55.8541000 19.7558000 10.2511000 26.6994000 611 80.3649000 26.6140000 69.7237000 35.2310000 20.2934000 44.0747000 612 100.000000 35.9981000 76.4126000 54.8814000 32.8124000 54.9863000 613 100.000000 48.8659000 84.9257000 60.9893000 40.8150000 70.0135000 614 100.000000 48.3256000 100.000000 66.3996000 42.7035000 99.3559000 615 19.8051000 9.07402000 15.1326000 2.00893000 1.45298000 2.05876000 616 31.8533000 0.00000000 9.87327000 3.59000000 1.83026000 1.09390000 617 38.1373000 12.1357000 0.00000000 5.44493000 3.53264000 0.39496000 618 50.4061000 36.3599000 89.3220000 26.8437000 17.9993000 75.2955000 619 66.0366000 38.7613000 92.0771000 35.6447000 23.2488000 81.0568000 620 66.6801000 75.0818000 100.000000 53.3639000 53.2318000 102.075000 621 79.4701000 93.1775000 100.000000 73.0389000 80.7856000 106.357000 622 90.0431000 92.1031000 100.000000 80.2239000 83.3171000 106.467000 623 74.8852000 82.2828000 83.5682000 56.4980000 61.8849000 71.9875000 624 88.4329000 83.0485000 100.000000 72.7424000 70.2824000 104.345000 625 19.3349000 0.00000000 52.6776000 5.60713000 2.39099000 22.8409000 626 17.1113000 9.57846000 80.2862000 12.3455000 5.59350000 58.0189000 627 30.7648000 23.1442000 83.2280000 16.6564000 9.53377000 63.4057000 628 29.4814000 60.7503000 82.0514000 26.1589000 29.5318000 64.7968000 629 51.6613000 65.5759000 81.7280000 34.7672000 37.1760000 65.2837000 630 65.4854000 18.2815000 22.4230000 17.6779000 10.5144000 4.99290000 631 64.6036000 14.8669000 32.6867000 17.7277000 9.98214000 9.24830000 632 67.4360000 18.3963000 47.0065000 21.3992000 12.1451000 18.9440000 633 68.2838000 23.1561000 62.1402000 25.2598000 14.6299000 34.0492000 634 75.9465000 27.1858000 75.7559000 33.9550000 19.5799000 52.5485000 635 0.00000000 85.1326000 22.6794000 25.5933000 49.9753000 12.2782000 636 0.00000000 87.5174000 49.7773000 30.2572000 54.3964000 28.9610000 637 0.00000000 86.5342000 62.5579000 32.0690000 54.0564000 41.7850000 638 39.3580000 52.8202000 48.6569000 17.5589000 21.4292000 22.3057000 639 40.7755000 56.4415000 66.2392000 22.8204000 25.7271000 41.2563000 640 0.00000000 41.2288000 39.6479000 7.41875000 11.0719000 14.0852000 641 0.00000000 64.5242000 56.7617000 18.4618000 28.7802000 31.2675000 642 9.29399000 74.9369000 66.7580000 26.2965000 40.4027000 44.5600000 643 22.6939000 79.6624000 66.6859000 30.3850000 46.5779000 45.4460000 644 10.5543000 41.3441000 26.6626000 6.58766000 10.8395000 7.21270000 645 0.00000000 51.6051000 32.6882000 9.77098000 17.0230000 11.0274000 646 0.00000000 52.4462000 44.5269000 11.4996000 18.1824000 18.6882000 647 23.4982000 64.0136000 47.3986000 18.4392000 28.6129000 22.5985000 648 0.00000000 30.3993000 21.2795000 3.36228000 5.64965000 4.43615000 649 18.8808000 37.3339000 41.6446000 7.94748000 9.89752000 15.1809000 650 15.4312000 47.6651000 46.2753000 11.0237000 15.5543000 19.5629000 651 18.5104000 68.4123000 56.2352000 21.3921000 33.0517000 31.3987000 652 25.3485000 75.0668000 69.9710000 28.9558000 41.7880000 48.8865000 653 27.5313000 81.3441000 100.000000 43.0054000 53.3634000 102.646000 654 13.4353000 29.6348000 27.3123000 4.31712000 5.89187000 6.64602000 655 20.5070000 38.5334000 27.4197000 6.92618000 9.96362000 7.33960000 656 22.7733000 46.8626000 27.5760000 9.52033000 14.6607000 8.17504000 657 43.8472000 61.9781000 53.2086000 23.3124000 29.6693000 27.6735000 658 68.9059000 63.7572000 53.0427000 35.2514000 36.9984000 28.3022000 659 71.2969000 70.3588000 53.1961000 39.8666000 44.0961000 29.5740000 660 0.00000000 20.0769000 17.2216000 1.64566000 2.56658000 2.78357000 661 12.1765000 17.5646000 20.1670000 2.10438000 2.39614000 3.53374000 662 37.3916000 54.3963000 42.7667000 16.7087000 21.9384000 17.8381000 663 45.0305000 80.1045000 47.2840000 32.1272000 48.3158000 25.5868000 664 46.7891000 100.000000 51.6229000 47.5480000 77.1201000 34.0821000 665 62.9204000 100.000000 62.2343000 56.5754000 81.5324000 45.4214000 666 32.5472000 47.5001000 33.0465000 12.0296000 16.1880000 10.9339000 667 66.5905000 49.9692000 47.4265000 27.6259000 25.1916000 21.4768000 668 87.0527000 52.6406000 55.8378000 43.5868000 34.6063000 30.1283000 669 100.000000 52.3818000 56.7948000 54.8016000 40.2313000 31.5971000 670 100.000000 51.8956000 74.4926000 58.8238000 41.5685000 53.6164000 671 50.5587000 29.2602000 36.8088000 13.5458000 10.4471000 11.8607000 672 66.4045000 30.9419000 54.0711000 23.8000000 15.8806000 25.8121000 673 55.7511000 0.00000000 20.9372000 11.8348000 6.02594000 3.95519000 674 70.1150000 0.00000000 24.0807000 19.3954000 9.90032000 5.36191000 675 100.000000 19.6515000 66.1243000 49.5091000 26.4004000 39.8366000 676 100.000000 18.1358000 78.1885000 52.5783000 27.3748000 56.7805000 677 67.8858000 71.1779000 46.0268000 37.1149000 43.4424000 23.3743000 678 82.3035000 87.2408000 45.3241000 55.9120000 67.4233000 26.4628000 679 85.8285000 88.0526000 63.5284000 62.4900000 71.2462000 44.6421000 680 90.5579000 87.2438000 70.5434000 67.3999000 72.7598000 53.6136000 681 100.000000 93.7387000 78.1572000 82.4561000 87.1498000 66.6952000 682 18.3591000 12.8295000 0.00000000 1.69980000 1.67191000 0.23314400 683 26.9719000 20.1090000 27.1435000 4.71539000 4.08192000 6.20542000 684 63.1787000 33.8069000 30.3206000 19.4138000 14.8173000 8.91799000 685 76.6904000 36.2576000 34.8341000 28.3126000 20.1290000 11.8068000 686 100.000000 36.2667000 33.8273000 46.7974000 29.6737000 12.1215000 687 68.3087000 18.6775000 0.00000000 18.5384000 11.1037000 1.16639000 688 83.8796000 23.3829000 0.00000000 29.2958000 17.4728000 1.82892000 689 100.000000 80.6505000 0.00000000 63.2259000 65.2378000 9.26061000 690 100.000000 83.9835000 27.6895000 66.4478000 69.8823000 15.8828000 691 49.2991000 48.6161000 21.3172000 16.4397000 19.0919000 6.35382000 692 59.1980000 52.6038000 22.1105000 22.0203000 23.9527000 7.25327000 693 61.5722000 57.5138000 100.000000 42.3363000 35.1514000 99.1661000 694 26.5977000 28.8058000 44.4849000 7.78913000 7.24999000 16.7413000 695 31.2911000 35.4684000 75.4117000 16.5317000 12.9030000 51.6651000 696 11.1720000 14.9538000 50.7017000 5.17108000 3.24092000 21.2241000 697 0.00000000 27.6893000 52.8189000 6.57934000 6.19713000 23.6573000 698 8.43812000 32.3705000 52.8858000 7.74171000 8.02761000 24.0116000 699 13.2062000 49.4032000 57.7155000 13.3866000 17.3628000 30.3228000 700 48.1412000 62.5295000 66.0503000 27.7166000 31.9880000 41.9712000 701 54.6453000 66.6463000 65.3190000 32.0035000 37.0229000 41.8100000 702 64.3311000 77.1221000 72.5059000 43.9516000 51.1740000 53.4014000 703 72.2950000 85.9412000 78.2306000 55.5855000 65.1217000 63.9736000 704 82.3861000 92.6664000 82.3922000 68.3266000 78.5360000 72.6001000 705 16.9175000 23.1695000 19.1629000 3.12133000 3.87313000 3.47439000 706 15.0339000 37.5719000 36.5958000 6.96681000 9.54542000 11.9060000 707 30.8397000 36.7255000 40.0510000 9.57067000 10.5523000 14.1370000 708 26.1875000 12.7348000 13.4551000 3.12206000 2.36165000 1.82798000 709 32.7814000 23.7586000 9.62268000 5.43662000 5.22714000 1.61669000 710 32.0299000 21.0234000 19.9373000 5.34640000 4.61911000 3.72415000 711 47.6444000 21.6808000 27.5722000 10.4489000 7.30607000 6.70489000 712 54.5945000 36.6574000 26.2658000 15.6513000 13.8247000 7.15056000 713 100.000000 60.2614000 32.2083000 54.2663000 44.8722000 13.8109000 714 88.9737000 45.6920000 25.3267000 38.8870000 29.2984000 8.54409000 715 89.3307000 57.5588000 25.6174000 43.2897000 37.6427000 10.0357000 716 91.5519000 73.1261000 52.2512000 55.6603000 54.4178000 29.8496000 717 57.2625000 44.4693000 33.5342000 19.4658000 18.6753000 11.2801000 718 70.9295000 74.2206000 80.3140000 48.2730000 50.7145000 64.8797000 719 0.00000000 23.2629000 71.9674000 10.1815000 6.60170000 45.8220000 720 0.00000000 53.6730000 100.000000 26.9758000 25.0733000 98.0302000 721 46.3869000 86.5660000 100.000000 51.3467000 62.6695000 104.003000 722 46.7053000 84.7216000 0.00000000 32.1854000 53.0614000 8.54594000 723 60.8179000 100.000000 0.00000000 49.2906000 78.4967000 12.5541000 724 43.2351000 90.5113000 14.2360000 35.3027000 60.5016000 11.5110000 725 54.9304000 100.000000 16.6667000 47.0112000 77.2723000 14.6756000 726 83.7278000 100.000000 47.1316000 66.7451000 87.1022000 31.1244000 727 16.6702000 26.5386000 16.2904000 3.43269000 4.76179000 2.88560000 728 12.0300000 77.2707000 21.6342000 21.2231000 40.5149000 10.3370000 729 22.7441000 82.6893000 39.5479000 27.3432000 48.3537000 20.1656000 730 38.7590000 83.8496000 64.9247000 35.9685000 53.3810000 44.2737000 731 32.8998000 15.6461000 20.5053000 5.02788000 3.64072000 3.72098000 732 55.5676000 12.2544000 34.2101000 13.3299000 7.40957000 9.79540000 733 85.8036000 25.9920000 38.2136000 33.2951000 19.8293000 13.4923000 734 56.7605000 16.1419000 22.9230000 13.2044000 7.90286000 4.89371000 735 70.6023000 38.6485000 20.5498000 23.8785000 18.7988000 5.66697000 736 81.8597000 48.2097000 22.6772000 34.0545000 27.9710000 7.58435000 737 47.0849000 28.3123000 14.3238000 10.4109000 8.78831000 2.85916000 738 47.9958000 37.3392000 21.5053000 12.8780000 12.6636000 5.36048000 739 65.0960000 43.5397000 28.6745000 22.6176000 19.9633000 8.98661000 740 65.8150000 51.5317000 29.5638000 25.5649000 25.1612000 10.2365000 741 80.5268000 68.2829000 30.5154000 41.7979000 43.8945000 13.4431000 742 100.000000 85.4608000 67.1354000 73.6579000 74.3115000 49.0899000 743 100.000000 94.0824000 88.5192000 86.0593000 89.0029000 84.4008000 744 31.6359000 27.2744000 34.0877000 7.24418000 6.74601000 9.92109000 745 39.9205000 31.9727000 37.4670000 10.5285000 9.61295000 12.2570000 746 71.4497000 60.8909000 44.4215000 34.0989000 34.7002000 20.6055000 747 81.7367000 62.7316000 48.2909000 42.2802000 40.0353000 24.2863000 748 39.3727000 69.2400000 0.00000000 20.9342000 34.0033000 5.46021000 749 52.3664000 78.9279000 11.0181000 30.9148000 47.0116000 8.54939000 750 73.4511000 82.4934000 0.00000000 43.6998000 56.8731000 8.67494000 751 85.6592000 83.3537000 0.00000000 52.7214000 62.3350000 9.25382000 752 60.0596000 70.0170000 19.6568000 29.7711000 39.0760000 9.00512000 753 75.3502000 72.6768000 33.7811000 40.8752000 46.7337000 15.7013000 754 78.0324000 77.8844000 45.9134000 47.0946000 54.0914000 24.8138000 755 52.3442000 46.9460000 39.2324000 18.7317000 19.3099000 14.8084000 756 57.1897000 57.2790000 49.8134000 25.9438000 28.2050000 24.1643000 757 57.4161000 66.8700000 56.0543000 31.3512000 37.0741000 31.4674000 758 60.8303000 33.8942000 21.0381000 17.5588000 13.9672000 5.21769000 759 66.7814000 43.8880000 18.0031000 22.9160000 20.3449000 5.29512000 760 67.5239000 81.4355000 15.0080000 39.8794000 53.8799000 10.1551000 761 77.3270000 92.0755000 13.6235000 53.0201000 71.3133000 12.5415000 762 92.2261000 100.000000 20.9378000 70.7268000 89.4724000 16.9590000 763 58.2102000 61.3429000 24.4889000 25.1326000 30.6095000 9.20667000 764 59.3855000 66.0387000 73.0993000 35.8239000 38.3361000 52.1939000 765 58.8664000 71.3431000 74.1231000 38.4959000 43.5947000 54.5408000 766 58.4738000 74.9403000 89.6412000 45.1495000 49.3386000 80.9726000 767 31.4258000 71.0934000 71.4233000 28.3578000 38.2592000 50.2191000 768 33.7121000 77.8913000 82.9009000 35.9773000 47.3736000 69.1401000 769 13.1179000 23.4479000 24.2180000 3.10911000 3.88556000 5.10887000 770 34.6664000 27.5195000 44.9192000 9.33140000 7.72366000 17.0821000 771 41.7462000 33.6190000 46.0880000 12.5454000 11.0012000 18.4553000 772 86.0418000 38.3682000 76.5778000 43.5683000 27.7810000 54.8607000 773 32.0558000 15.5543000 39.1936000 6.50187000 4.19613000 12.5103000 774 31.7730000 31.9390000 41.2735000 8.93279000 8.72631000 14.6453000 775 48.0181000 44.9211000 65.8772000 21.2346000 19.1557000 39.6199000 776 100.000000 75.6681000 71.0013000 68.6427000 62.7177000 52.2352000 777 41.4140000 33.8864000 34.0651000 10.9721000 10.4471000 10.4267000 778 41.1061000 44.5184000 36.5321000 13.7503000 15.7126000 12.7013000 779 48.4876000 72.5998000 65.0315000 32.5027000 41.7577000 42.3437000 780 58.5186000 85.8769000 79.1321000 48.3960000 61.3207000 65.0337000 781 61.6199000 86.0282000 87.7664000 52.7843000 63.4097000 79.8431000 782 13.3218000 38.1936000 18.7037000 5.49676000 9.17296000 4.24429000 783 39.6000000 40.9856000 15.3486000 10.7346000 12.9171000 3.85961000 784 50.0316000 48.3048000 10.5137000 16.1392000 18.8451000 3.81287000 785 88.1191000 74.9909000 44.9100000 52.7039000 54.5475000 23.8275000 786 91.3440000 83.7431000 51.8724000 61.6923000 66.8474000 31.5811000 787 100.000000 83.7011000 55.2484000 69.9402000 70.9883000 35.1716000 788 100.000000 92.9809000 62.5055000 77.8416000 84.4036000 45.1695000 789 46.0350000 62.8119000 28.7304000 21.1993000 29.4941000 10.9258000 790 48.2963000 64.8647000 39.3613000 24.0361000 32.2064000 17.1019000 791 72.0420000 52.9520000 37.3699000 30.4424000 28.3211000 14.7594000 792 84.4354000 56.0276000 39.7174000 40.2795000 35.0449000 17.0267000 793 87.0036000 56.5368000 47.8485000 43.5923000 36.9109000 23.2453000 794 92.3227000 61.2159000 66.0676000 53.4159000 44.3898000 43.0325000 795 23.2837000 5.80816000 8.64384000 2.13945000 1.33607000 0.90657200 796 24.8478000 8.34965000 0.00000000 2.34634000 1.61571000 0.18822800 797 48.1963000 10.4800000 16.0494000 8.93860000 5.13481000 2.61169000 798 86.0645000 0.00000000 15.9761000 29.7480000 15.2903000 3.45835000 799 85.9729000 0.00000000 70.6196000 37.5282000 18.3944000 44.7975000 800 100.000000 17.8212000 89.7323000 56.3109000 28.8174000 76.5929000 801 33.9782000 17.6801000 49.1577000 8.56274000 5.38213000 20.1081000 802 33.8007000 20.4829000 67.4060000 12.5290000 7.43850000 39.7494000 803 41.6022000 20.2723000 76.5160000 17.0317000 9.44398000 52.6259000 804 64.9304000 26.6996000 81.5376000 29.0833000 16.7558000 61.3281000 805 72.8360000 35.1446000 100.000000 41.8578000 24.8741000 97.2076000 806 12.4056000 11.8361000 17.9977000 1.54432000 1.43524000 2.76988000 807 6.13605000 4.54629000 18.9586000 0.87517700 0.57670200 2.89914000 808 11.3412000 0.00000000 17.8808000 0.98937100 0.45401000 2.57866000 809 16.0472000 7.82262000 31.3150000 2.60348000 1.54590000 7.72269000 810 19.6211000 12.8940000 29.5602000 3.14052000 2.27340000 6.99862000 811 17.1460000 16.8483000 27.9936000 3.03903000 2.71437000 6.39006000 812 33.7945000 28.9893000 26.1777000 7.30316000 7.27649000 6.29138000 813 37.6738000 39.2978000 27.1622000 10.4903000 12.0783000 7.45259000 814 82.9997000 41.0973000 45.6671000 35.2586000 25.2783000 19.6833000 815 100.000000 45.4912000 45.3629000 50.6172000 35.0043000 20.5145000 816 76.0960000 13.1533000 8.93250000 22.9701000 12.6539000 2.03104000 817 89.8454000 18.5204000 16.4412000 33.7877000 18.8928000 4.04959000 818 100.000000 19.3059000 13.5859000 42.6446000 23.5949000 3.87039000 819 100.000000 74.5253000 19.8262000 60.2471000 58.3390000 11.1674000 820 42.5377000 31.3785000 10.8725000 9.31737000 9.03959000 2.33555000 821 45.8890000 35.0130000 27.8511000 12.0717000 11.4300000 7.53484000 822 45.2106000 79.9824000 34.5776000 30.4568000 47.5358000 16.8414000 823 49.6675000 86.0494000 90.1668000 48.4138000 61.0801000 84.0498000 824 22.8666000 37.7215000 32.5508000 7.52422000 9.93379000 9.70639000 825 31.0415000 38.7785000 36.1703000 9.62989000 11.3479000 11.8622000 826 78.1702000 90.7472000 36.9624000 54.3599000 70.3789000 21.3704000 827 92.1906000 90.9868000 38.9479000 65.4141000 76.3055000 23.1663000 828 21.4129000 29.3226000 12.5445000 4.31493000 5.90686000 2.27844000 829 25.3760000 37.7150000 10.1418000 6.54387000 9.58515000 2.47475000 830 24.7084000 61.0607000 11.2741000 14.1069000 24.8223000 5.19366000 831 23.4531000 66.1712000 0.00000000 15.9892000 29.2320000 4.79983000 832 29.4416000 79.7280000 26.9105000 25.3970000 44.7810000 12.8740000 833 37.6320000 89.4688000 27.6715000 33.7239000 58.5003000 15.4025000 834 52.1062000 100.000000 74.6475000 54.7422000 80.2292000 61.5203000 835 47.0493000 75.5299000 60.7502000 32.6314000 44.3186000 37.8079000 836 57.9854000 80.0363000 62.4341000 40.0765000 52.0231000 40.8261000 837 7.32139000 18.8961000 11.4847000 1.55177000 2.35421000 1.55412000 838 8.68663000 21.2555000 6.29830000 1.75647000 2.86692000 0.95314500 839 16.2419000 38.2134000 0.00000000 5.24667000 9.11198000 1.48233000 840 11.5586000 48.3178000 18.0941000 8.12488000 14.6850000 5.00624000 841 15.2229000 66.0507000 62.0224000 21.0960000 31.0662000 37.3044000 842 15.3518000 67.1259000 69.5308000 23.4027000 32.8114000 46.8558000 843 21.1969000 89.5659000 100.000000 47.4233000 63.7090000 104.410000 844 35.8718000 41.9372000 49.4676000 13.3872000 14.2612000 21.8347000 845 49.9751000 43.4642000 52.3456000 18.7503000 17.5852000 24.7722000 846 56.4221000 47.6816000 52.4351000 22.6709000 21.4494000 25.3947000 847 90.1108000 48.8238000 66.5648000 47.0632000 34.2203000 42.0285000 848 78.8001000 21.8212000 45.8422000 28.6723000 16.4850000 18.4701000 849 89.8753000 25.6823000 62.0726000 40.4844000 23.0033000 34.7844000 850 89.8818000 72.2899000 66.8296000 56.8802000 54.0311000 45.6699000 851 90.5533000 76.9985000 78.1099000 63.0712000 60.7422000 62.5462000 852 92.3922000 83.7634000 88.7562000 72.1734000 71.1625000 82.1243000 853 91.7143000 100.000000 92.6694000 84.8304000 95.0646000 93.4743000 854 15.3784000 37.0834000 89.6411000 18.9826000 14.1762000 75.5641000 855 25.4337000 62.6725000 100.000000 32.7581000 33.4169000 99.3360000 856 29.6966000 38.9293000 52.6575000 11.7680000 12.2292000 24.3965000 857 30.1423000 55.2476000 68.5794000 20.2821000 23.6773000 43.9976000 858 44.2043000 68.7246000 68.2838000 29.8030000 37.3096000 45.7408000 859 45.1134000 81.0516000 80.2627000 40.2891000 52.5114000 65.5647000 860 10.6886000 29.8110000 32.4243000 4.59340000 6.02784000 9.04150000 861 0.00000000 32.0023000 37.5494000 5.08723000 6.81506000 12.0545000 862 9.94175000 36.7641000 47.1828000 7.79923000 9.53608000 19.3002000 863 0.00000000 37.4254000 55.3907000 8.95719000 10.1933000 26.7923000 864 36.2092000 48.7294000 56.0045000 16.6301000 18.7504000 28.6556000 865 46.5903000 48.3785000 59.8649000 20.4303000 20.4540000 32.8611000 866 78.2650000 62.0931000 62.9422000 42.3782000 39.3455000 38.8520000 867 92.4205000 71.5727000 80.4311000 62.3447000 55.8543000 65.3188000 868 100.000000 82.1451000 89.3367000 78.1298000 72.6826000 83.1754000 869 20.9551000 0.00000000 70.2228000 9.63485000 4.02643000 42.9557000 870 40.0862000 9.64853000 69.6433000 13.8382000 6.71444000 42.4728000 871 47.8665000 0.00000000 90.0285000 22.2571000 9.83141000 75.2767000 872 49.4149000 22.3679000 93.7554000 25.6612000 13.6032000 82.9974000 873 0.00000000 24.1338000 26.1412000 2.70056000 3.79668000 5.84767000 874 0.00000000 29.7398000 43.8234000 5.48363000 6.31062000 16.1860000 875 0.00000000 72.6665000 55.0865000 22.1788000 36.7309000 30.9155000 876 39.7667000 86.9595000 58.5365000 36.9104000 57.0769000 37.6190000 877 92.9629000 100.000000 68.3778000 78.3752000 92.6041000 53.9771000 878 44.4532000 19.5178000 8.12677000 8.11900000 5.84892000 1.39714000 879 78.5680000 34.7663000 9.71185000 27.6278000 19.4834000 3.21177000 880 92.9876000 41.2814000 30.6989000 41.4270000 28.7363000 10.6250000 881 84.3466000 0.00000000 35.3723000 29.9021000 15.2013000 11.0767000 882 84.2539000 0.00000000 45.5300000 31.1366000 15.6871000 17.9418000 883 84.6138000 0.00000000 57.0762000 33.4018000 16.6244000 28.4591000 884 91.8911000 9.74450000 65.1228000 41.2696000 20.9913000 37.9853000 885 100.000000 64.1334000 79.4166000 65.1524000 51.9354000 62.7894000 886 100.000000 73.5662000 89.3115000 73.1019000 62.6405000 81.4550000 887 72.9411000 47.2775000 61.7349000 33.1543000 26.4556000 35.4493000 888 83.6909000 53.0113000 70.3104000 44.4135000 34.8520000 47.1912000 889 13.7703000 11.1280000 6.24680000 1.21380000 1.24461000 0.66341600 890 9.40238000 3.21310000 7.95362000 0.59409900 0.42370900 0.72601600 891 10.3479000 16.0770000 23.4755000 2.04049000 2.13516000 4.56016000 892 18.6811000 42.2222000 64.4966000 13.2723000 13.9725000 37.3429000 893 21.3056000 48.0473000 84.3054000 20.8254000 19.7464000 66.9929000 894 37.1316000 49.9343000 83.8663000 24.4384000 22.5294000 66.5882000 895 47.3910000 59.2857000 90.3497000 33.2959000 31.9798000 79.5730000 896 7.73117000 13.3871000 13.8013000 1.16498000 1.42010000 1.81755000 897 54.5675000 11.3181000 12.8939000 11.3802000 6.48220000 2.08188000 898 71.3386000 0.00000000 13.1660000 19.5529000 10.0474000 2.39020000 899 74.2044000 40.6921000 10.5651000 26.1639000 20.7793000 3.66555000 900 86.4558000 48.8159000 10.4705000 37.1160000 29.9012000 4.83520000 901 53.6013000 26.0118000 0.00000000 12.2317000 9.22659000 1.13639000 902 64.6212000 26.5263000 9.06027000 17.6728000 12.1296000 2.22596000 903 70.8414000 56.2535000 11.5087000 29.0870000 29.6500000 5.37572000 904 89.0988000 70.6934000 14.9565000 48.4672000 49.2549000 8.79843000 905 25.9685000 17.4752000 12.6351000 3.44670000 3.11467000 1.80168000 906 24.5794000 21.5877000 16.3731000 3.81111000 3.94831000 2.72819000 907 24.8615000 19.1806000 19.1718000 3.72175000 3.47996000 3.36935000 908 22.3778000 30.7201000 24.1407000 5.29659000 6.71153000 5.51060000 909 21.2218000 27.9924000 38.8046000 6.05457000 6.24245000 12.6790000 910 19.2248000 28.7672000 50.1619000 7.56427000 7.02223000 21.3495000 911 17.0750000 39.0892000 55.0514000 10.3068000 11.4827000 26.6329000 912 18.3575000 58.3867000 72.5143000 20.6400000 25.5582000 49.6972000 913 16.7049000 67.9477000 76.4660000 25.8221000 34.4345000 56.9110000 914 14.5615000 81.9296000 77.3620000 33.6564000 50.0020000 60.8684000 915 0.00000000 52.8109000 60.4919000 14.4710000 19.5771000 33.7008000 916 0.00000000 61.7532000 62.2739000 18.3764000 26.7700000 36.9096000 917 0.00000000 86.7821000 87.4819000 39.2620000 57.2004000 78.8430000 918 0.00000000 100.000000 91.2866000 50.4340000 77.3909000 89.2105000 919 48.7850000 84.9180000 71.2055000 41.4622000 57.0641000 52.8573000 920 79.8789000 87.9169000 71.5058000 59.9994000 69.5978000 54.7146000 921 24.4572000 42.6934000 17.3692000 7.92408000 12.1292000 4.33557000 922 25.3411000 53.0597000 18.0520000 11.3541000 18.7207000 5.60385000 923 59.4779000 78.0567000 23.7708000 34.1507000 47.8437000 11.7957000 924 69.2722000 90.4581000 21.3516000 47.2070000 66.5418000 13.9020000 925 43.0275000 50.1568000 9.06241000 14.2565000 18.7713000 3.68823000 926 60.0882000 65.1306000 0.00000000 26.8292000 34.0966000 5.16760000 927 64.5175000 87.5587000 0.00000000 41.8760000 60.8699000 9.54251000 928 72.7226000 100.000000 39.7191000 58.2342000 82.8344000 25.3060000 929 36.3050000 68.1543000 25.2222000 20.5012000 32.8718000 10.1625000 930 41.6643000 100.000000 22.7099000 42.4914000 74.9036000 16.2098000 931 0.00000000 56.7454000 25.9500000 11.0673000 20.5548000 8.56517000 932 11.5635000 90.9692000 42.7754000 32.1313000 59.0711000 24.1991000 933 25.1882000 100.000000 55.0402000 42.6461000 74.5215000 37.0855000 934 22.9078000 66.2573000 36.8382000 17.9651000 30.0783000 15.4343000 935 33.2921000 75.4069000 37.1987000 24.7070000 40.5755000 17.3234000 936 92.0453000 77.6895000 88.6763000 68.1277000 63.5490000 80.7205000 937 39.2770000 23.6681000 41.9615000 9.56084000 7.04841000 14.7678000 938 50.8576000 21.8251000 44.5514000 13.5697000 8.72180000 16.7719000 939 62.6842000 21.2179000 52.3879000 20.0640000 11.8153000 23.6286000 940 65.3431000 36.6372000 61.4820000 25.8752000 18.5049000 34.0099000 941 76.4502000 59.9264000 66.9610000 41.1778000 37.2467000 43.4244000 942 52.9166000 45.6228000 45.3434000 19.3958000 18.9669000 19.0489000 943 90.9799000 49.0847000 48.6332000 44.2698000 33.3197000 23.1734000 944 92.8906000 48.5030000 60.5089000 47.9061000 34.6616000 34.8696000 945 66.3505000 41.1675000 82.2644000 33.0566000 23.1971000 63.5637000 946 68.6123000 53.4624000 94.2402000 42.2944000 33.1207000 86.8492000 947 67.3052000 63.5858000 93.7545000 45.4665000 40.8564000 87.2124000 948 76.6248000 75.2014000 93.0726000 56.7379000 55.3842000 88.0816000 949 67.1211000 59.0103000 70.2540000 35.9621000 33.9019000 47.3770000 950 77.9547000 58.5618000 72.2995000 42.9845000 37.1886000 50.4634000 951 89.9283000 62.8727000 80.0021000 55.9389000 46.3243000 63.1263000 952 48.9315000 49.1044000 43.6914000 18.6768000 20.2215000 18.0779000 953 63.1213000 49.4247000 71.8252000 30.7169000 25.9282000 48.2723000 954 28.9462000 9.36534000 27.9811000 4.28234000 2.55638000 6.28854000 955 32.8888000 8.88241000 43.0084000 6.73998000 3.59619000 14.9979000 956 32.3788000 15.4474000 87.2379000 17.5136000 8.59509000 70.1677000 957 44.1494000 14.2955000 83.4867000 19.3970000 9.57109000 63.7065000 958 57.3193000 60.3232000 87.8295000 36.8583000 34.5593000 75.2281000 959 77.7198000 79.4746000 90.5777000 59.0306000 60.3505000 84.1226000 960 78.8872000 86.5431000 95.2686000 66.0693000 70.4541000 94.8639000 961 36.9707000 45.3934000 47.5170000 14.3223000 16.2129000 20.5183000 962 38.0636000 54.7294000 57.3276000 19.4521000 23.2538000 30.7343000 963 52.6441000 75.3797000 78.8882000 39.3279000 47.1084000 62.3828000 964 67.0151000 76.7947000 94.0932000 52.1879000 54.3352000 90.1310000 965 32.5368000 18.9501000 26.7071000 5.68139000 4.39678000 6.03529000 966 41.6145000 15.8098000 36.4486000 8.70032000 5.39950000 10.9275000 967 40.4697000 22.7627000 59.3426000 12.7436000 8.17082000 30.3230000 968 46.4159000 23.4700000 69.2176000 17.0138000 10.2469000 42.4194000 969 69.0467000 34.2499000 73.4900000 30.3672000 19.7142000 49.4452000 970 14.0580000 8.91438000 12.8637000 1.29494000 1.08313000 1.56538000 971 16.5322000 8.05929000 7.56639000 1.34168000 1.06384000 0.76443000 972 17.2406000 4.44955000 9.36511000 1.32452000 0.84747400 0.95169100 973 40.6919000 7.09789000 94.7153000 21.8548000 9.74733000 84.3633000 974 88.1617000 7.09580000 95.5035000 47.4678000 22.9165000 87.1431000 975 72.0650000 10.6271000 64.8163000 26.9218000 13.6765000 36.9551000 976 82.4355000 14.0121000 74.1568000 36.4566000 18.6569000 49.8837000 977 92.1169000 10.8744000 84.8095000 47.0640000 23.4344000 67.1917000 978 8.98954000 27.5721000 11.2532000 2.77861000 4.68698000 1.90069000 979 14.6891000 32.0390000 7.53853000 3.89330000 6.43864000 1.66413000 980 15.6583000 42.9222000 9.40942000 6.55349000 11.5495000 2.74775000 981 15.9439000 52.1581000 8.37151000 9.42699000 17.2961000 3.56811000 982 12.7685000 63.0787000 10.8651000 13.5370000 25.8358000 5.35411000 983 70.2636000 64.2330000 59.7909000 37.5730000 38.3637000 35.3334000 984 30.2417000 27.2981000 66.6150000 12.4791000 8.81199000 39.0102000 985 31.6325000 44.7771000 67.8187000 16.9386000 16.8254000 41.8602000 986 40.3543000 59.1315000 83.5449000 28.6287000 29.7484000 67.2134000 987 48.5470000 73.8569000 83.3802000 38.2978000 45.1645000 69.4000000 988 61.2317000 76.2373000 82.8256000 44.9017000 50.5602000 69.1592000 989 70.9871000 84.3853000 89.5037000 57.4406000 64.1345000 82.9250000 990 74.9257000 14.2569000 30.5613000 23.5147000 12.9165000 8.44878000 991 76.6052000 14.3144000 38.1321000 25.4084000 13.8074000 12.6938000 992 78.2446000 12.8528000 49.6266000 28.0306000 14.8096000 21.3075000 993 90.3865000 15.1677000 55.0414000 38.2629000 20.2374000 26.8397000 994 80.6821000 27.6348000 54.6141000 32.2791000 19.3951000 26.5715000 995 80.5885000 75.3100000 85.2653000 56.7515000 55.7999000 73.7197000 996 83.4566000 84.0381000 89.6955000 65.6098000 68.0035000 83.5982000 997 10.1906000 29.5084000 37.6413000 5.06904000 6.12967000 11.9789000 998 10.1633000 42.7172000 36.1923000 7.82890000 11.9182000 12.0802000 999 12.6772000 61.1491000 37.7059000 14.6000000 24.9132000 15.1424000 1000 10.9731000 69.8500000 47.1371000 19.8231000 33.4953000 23.2541000 1001 11.2712000 34.6314000 27.8623000 5.15316000 7.74361000 7.19267000 1002 52.2528000 33.9725000 30.1960000 14.4288000 12.2986000 8.63563000 1003 62.7525000 43.3029000 37.2890000 22.1912000 19.5466000 13.4516000 1004 69.3783000 50.8079000 58.5083000 31.4754000 27.3614000 32.1397000 1005 82.3216000 53.1806000 79.7434000 46.1242000 35.5170000 61.1443000 1006 72.3403000 46.5885000 69.4928000 34.4082000 26.5775000 45.0222000 1007 74.7554000 91.3404000 74.9783000 59.9299000 73.0292000 60.3438000 1008 32.5729000 35.9004000 30.2943000 8.70907000 9.95745000 8.53158000 1009 40.5787000 38.6266000 32.4752000 11.6164000 12.3627000 9.92051000 1010 40.2733000 48.5719000 31.4942000 14.2078000 17.8297000 10.3431000 1011 43.7063000 25.7716000 20.6572000 9.17888000 7.52648000 4.29792000 1012 62.6530000 25.9749000 28.4344000 17.5980000 11.8478000 7.57827000 1013 81.4225000 41.8402000 32.5535000 32.6944000 24.4324000 11.1800000 1014 81.8331000 78.2113000 54.9161000 51.4609000 56.4511000 33.0102000 1015 89.2842000 79.7033000 71.4189000 61.7583000 62.6503000 53.1609000 1016 92.0059000 93.3380000 78.7834000 75.2394000 82.9654000 67.2474000 1017 64.4445000 22.1159000 14.5074000 17.1453000 10.9280000 2.95528000 1018 89.5144000 43.6390000 13.0533000 38.0696000 28.0777000 4.87306000 1019 100.000000 49.2745000 16.9099000 49.0925000 36.2677000 6.71019000 1020 29.1783000 21.7900000 45.7391000 7.43764000 5.53400000 17.3946000 1021 28.3456000 33.0357000 63.6456000 12.4301000 10.3860000 35.6715000 1022 37.5013000 40.2886000 92.3782000 24.6855000 18.1461000 81.2304000 1023 53.1338000 47.2803000 93.8919000 32.4975000 25.0186000 85.1108000 1024 37.5230000 28.4784000 77.9091000 17.4187000 11.2938000 55.0959000 1025 52.3815000 27.8447000 82.1021000 23.5698000 14.1617000 62.0504000 1026 67.9896000 82.8338000 81.8046000 52.1242000 60.2120000 68.9422000 1027 39.4038000 53.1171000 23.5623000 14.8525000 20.5172000 7.46395000 1028 48.1471000 55.0808000 22.7037000 18.3411000 23.3884000 7.53683000 1029 69.3194000 61.7628000 26.4698000 31.2453000 34.0125000 10.3080000 1030 76.8450000 64.0386000 55.5213000 40.7528000 39.9705000 30.9951000 1031 83.0772000 70.2312000 75.0623000 52.6921000 50.0301000 56.4087000 1032 89.4053000 70.0168000 87.9518000 61.5081000 53.9455000 77.8932000 1033 30.9413000 58.4650000 40.0325000 16.3784000 24.1408000 16.3891000 1034 32.3514000 59.2754000 48.8690000 18.2901000 25.4689000 23.2268000 1035 52.8012000 59.5059000 55.7097000 26.0062000 29.4485000 29.9291000 1036 55.5065000 61.1593000 64.1368000 29.6171000 32.1368000 39.5532000 1037 71.1156000 87.7209000 64.7488000 52.5078000 65.7301000 45.5717000 1038 46.7209000 39.4956000 35.5920000 14.1299000 13.9348000 11.7884000 1039 78.2273000 44.1182000 52.4835000 33.8204000 25.6238000 25.6580000 1040 60.2048000 36.1958000 51.5364000 21.2133000 16.1795000 23.6279000 1041 91.4835000 35.2617000 58.1002000 42.7020000 26.8126000 31.0083000 1042 61.4195000 21.0675000 65.7435000 22.1713000 12.5566000 38.1296000 1043 88.6849000 22.2130000 68.8786000 40.6551000 22.2039000 43.0330000 1044 68.0641000 9.73535000 38.9857000 19.9741000 10.5454000 12.8923000 1045 67.2450000 8.48361000 49.9932000 21.0397000 10.8161000 21.2245000 1046 78.7065000 13.1522000 58.8303000 30.0715000 15.6963000 30.3086000 1047 78.9137000 55.0172000 58.7765000 39.0641000 33.4896000 33.2112000 1048 89.8401000 68.7626000 70.2969000 55.9001000 50.7324000 49.6328000 1049 28.7388000 28.6097000 22.3592000 5.88790000 6.48288000 4.81435000 1050 77.5286000 34.4556000 19.9257000 27.2802000 19.1590000 5.37145000 1051 88.4649000 33.2743000 17.8366000 34.9521000 22.7676000 5.08427000 1052 96.2263000 55.0954000 17.9854000 47.7268000 38.5769000 7.50220000 1053 84.2067000 52.3727000 63.0593000 42.8209000 33.8979000 37.9140000 1054 92.3326000 51.6712000 77.5689000 52.7962000 38.2444000 57.9083000 1055 27.7905000 14.4212000 6.81702000 3.34710000 2.68506000 0.88785500 1056 30.0857000 8.54419000 6.42567000 3.41739000 2.17077000 0.74442400 1057 44.2906000 57.9089000 14.0979000 17.6568000 24.7094000 5.50373000 1058 50.6588000 66.2411000 9.24490000 23.4118000 33.0892000 5.99454000 1059 56.5668000 90.0949000 15.0441000 40.1229000 62.5438000 11.8225000 1060 29.4967000 37.2087000 2.82262000 7.03966000 9.68405000 1.70526000 1061 41.5375000 36.7831000 8.19247000 10.0531000 11.0826000 2.31318000 1062 30.3710000 33.2003000 10.4640000 6.51259000 8.11777000 2.24219000 1063 28.6265000 47.5666000 9.15744000 9.77839000 15.2260000 3.25252000 1064 34.8323000 59.2422000 6.64855000 15.2798000 24.3098000 4.41566000 1065 36.8267000 79.6929000 10.8160000 26.2169000 45.2713000 8.42964000 1066 44.9495000 88.2620000 44.5961000 36.9834000 58.7153000 25.2218000 1067 46.0053000 88.8782000 82.1080000 46.3018000 63.1669000 70.3212000 1068 52.6511000 98.7651000 89.6737000 58.7298000 80.2554000 86.2849000 1069 34.3509000 8.67179000 24.8021000 5.17909000 2.99464000 5.04350000 1070 63.9702000 10.0011000 25.2653000 16.4252000 8.89165000 5.76520000 1071 76.7269000 46.1629000 31.0658000 30.5380000 25.1470000 10.6833000 1072 13.3476000 21.9454000 82.5235000 13.7601000 7.84021000 62.0487000 1073 6.45678000 75.4695000 90.7390000 33.6462000 43.8014000 82.5709000 1074 23.2823000 80.3443000 93.0933000 38.9690000 50.6831000 88.1511000 1075 58.4887000 83.6605000 92.1504000 51.2902000 60.1575000 87.4972000 1076 85.0527000 91.4434000 94.7508000 73.7369000 79.5018000 95.1649000 1077 3.80305000 11.1686000 6.73191000 0.65019400 0.95664800 0.68754700 1078 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1079 25.0821000 17.8440000 5.53343000 3.14913000 3.03567000 0.83960300 1080 34.8198000 29.6727000 7.22966000 6.77356000 7.28134000 1.63997000 1081 35.5089000 45.1195000 12.7626000 10.6742000 14.5822000 3.65797000 1082 55.6829000 59.2544000 9.42187000 22.3999000 27.9805000 5.08591000 1083 79.1490000 79.9610000 14.7730000 46.2223000 55.8085000 10.1425000 1084 26.4348000 30.8528000 19.5725000 5.68880000 6.98225000 4.05558000 1085 36.9591000 32.2146000 23.5566000 8.48676000 8.77640000 5.53115000 1086 58.8754000 45.1604000 85.5232000 31.4161000 23.8609000 69.3403000 1087 86.8529000 50.2087000 91.8463000 52.5663000 36.8460000 82.3445000 1088 87.1141000 62.0363000 94.8288000 58.4240000 46.4707000 89.7527000 1089 9.22455000 5.96781000 14.9274000 0.88995800 0.67615300 1.92273000 1090 5.33087000 12.3035000 17.0416000 1.11952000 1.26811000 2.51547000 1091 5.79144000 7.53301000 12.5681000 0.69135200 0.67738000 1.46418000 1092 5.21186000 8.01058000 3.65084000 0.47920400 0.62398000 0.36189700 1093 21.4873000 18.6484000 70.8879000 10.9192000 6.21068000 44.2141000 1094 45.9206000 69.6644000 88.1006000 36.7412000 40.9058000 76.9517000 1095 50.7828000 78.0996000 93.1385000 44.9454000 51.7679000 88.1344000 1096 29.4276000 61.5444000 59.3738000 20.5694000 27.8385000 33.7409000 1097 28.5617000 64.0887000 72.2595000 24.5865000 31.2281000 50.2261000 1098 40.6473000 71.9734000 76.6489000 32.6122000 40.9699000 58.0919000 1099 39.5538000 70.9038000 95.9985000 38.2843000 42.3072000 92.3758000 1100 13.3049000 27.7713000 57.0472000 8.04587000 6.88092000 27.8845000 1101 19.2126000 31.7921000 92.0130000 19.1562000 12.5254000 79.7317000 1102 32.0057000 73.0968000 93.1073000 36.4354000 43.2015000 86.8681000 1103 39.0516000 82.8996000 92.0727000 43.5641000 55.4558000 86.8474000 1104 23.9659000 34.2749000 34.9713000 7.18230000 8.60117000 10.7722000 1105 22.6528000 47.1676000 36.0589000 10.4100000 15.1639000 12.4933000 1106 20.5656000 46.7956000 96.3563000 24.6644000 20.6504000 89.6450000 1107 9.56961000 48.5928000 26.6089000 8.62138000 15.0081000 7.88795000 1108 20.3202000 70.1575000 25.2276000 18.4409000 33.3002000 10.3558000 1109 33.7469000 91.1222000 40.0410000 35.2023000 60.8592000 22.4901000 1110 53.3931000 92.9761000 60.4911000 46.3395000 68.2087000 41.4074000 1111 79.3026000 91.4969000 60.8872000 59.5810000 73.4202000 42.1587000 1112 90.8673000 92.0677000 57.1261000 67.9879000 78.4593000 38.6236000 1113 22.9509000 77.8555000 12.8139000 22.3599000 41.6550000 8.27699000 1114 29.3099000 92.4979000 10.6213000 33.0360000 61.4811000 11.1680000 1115 61.1468000 91.1221000 29.7018000 43.9467000 65.4951000 17.1163000 1116 64.9590000 90.9529000 45.5271000 47.6435000 67.0053000 26.9752000 1117 47.4481000 48.5023000 30.4769000 16.4162000 18.9462000 9.94677000 1118 53.7047000 53.6459000 40.1478000 21.6403000 24.1139000 16.1836000 1119 56.7844000 61.7941000 48.7728000 27.4566000 31.7753000 23.8787000 1120 65.0187000 64.0168000 69.9218000 36.8883000 37.5921000 47.5925000 1121 65.9669000 72.7826000 72.8785000 42.5124000 46.8348000 53.1676000 1122 81.3727000 82.8994000 72.2155000 57.9292000 63.5886000 54.6537000 1123 87.0043000 96.7835000 73.5505000 72.3062000 85.5169000 60.0238000 1124 16.9907000 17.8898000 13.4647000 2.26544000 2.56229000 1.91369000 1125 19.5556000 14.0883000 8.71548000 2.08420000 1.99044000 1.04448000 1126 77.5270000 25.7313000 9.59382000 25.3028000 15.8836000 2.62252000 1127 90.3634000 62.9819000 37.6314000 47.5531000 43.0887000 16.8680000 1128 89.7359000 69.5792000 36.2107000 50.0082000 49.0207000 17.0300000 1129 55.9261000 43.7427000 40.0420000 19.4072000 18.2541000 15.0994000 1130 57.7442000 54.2170000 59.5920000 26.8652000 26.7415000 33.4360000 1131 5.55563000 11.5466000 21.7959000 1.33762000 1.27688000 3.86372000 1132 9.43309000 14.5923000 72.8796000 9.89209000 5.06953000 46.8265000 1133 10.2409000 44.1763000 72.7774000 15.1131000 15.4807000 48.4161000 1134 15.9791000 44.5989000 56.6923000 11.9682000 14.4709000 28.7761000 1135 33.4249000 66.5386000 58.3556000 23.4892000 32.7332000 33.4350000 1136 34.0676000 74.1339000 59.5859000 27.7866000 40.6986000 36.0747000 1137 34.2486000 90.9771000 73.1922000 41.7445000 63.3230000 56.8368000 1138 13.7975000 34.9720000 63.5086000 10.8030000 10.1417000 35.5476000 1139 12.3950000 40.3744000 75.0103000 14.8635000 13.7663000 51.3263000 1140 30.7276000 91.5015000 80.9933000 43.6065000 64.5815000 68.9032000 1141 56.2588000 93.6266000 80.9501000 53.3890000 71.9425000 69.7377000 1142 28.0186000 47.2183000 41.9650000 12.0507000 15.9491000 16.3570000 1143 36.4130000 66.6426000 41.9036000 21.5078000 32.1048000 18.9340000 1144 37.8931000 84.8277000 73.5662000 38.5573000 55.4058000 56.0128000 1145 40.2835000 92.1419000 91.6858000 50.0792000 68.1913000 88.2170000 1146 91.0050000 27.8354000 49.9568000 39.4057000 23.2123000 22.6177000 1147 91.4085000 26.2694000 78.7878000 46.1709000 25.5644000 57.7065000 1148 91.1687000 63.2594000 88.3353000 59.8573000 48.2851000 77.5858000 1149 8.39261000 18.1569000 16.5019000 1.72600000 2.30948000 2.55333000 1150 8.71794000 24.8567000 19.6818000 2.71413000 4.00245000 3.66835000 1151 12.2165000 30.4919000 20.1647000 3.88361000 5.95048000 4.12538000 1152 37.9320000 55.8570000 35.8382000 16.5431000 22.7647000 13.5083000 1153 77.0344000 69.3099000 43.5916000 41.4257000 44.2870000 21.4506000 1154 55.5044000 49.3429000 29.1961000 19.7648000 21.0874000 9.58742000 1155 67.9375000 59.5938000 34.8054000 30.3008000 32.0737000 13.9915000 1156 67.1507000 86.5625000 35.2990000 44.4756000 60.9954000 19.1057000 1157 69.4168000 91.8609000 58.9703000 53.1600000 70.5485000 39.8305000 1158 50.5609000 72.0550000 49.0293000 29.8313000 40.3165000 25.6211000 1159 55.8875000 70.3202000 62.8210000 33.7877000 40.7083000 39.4249000 1160 61.4980000 67.8258000 62.7993000 35.1604000 39.5631000 39.1063000 1161 62.0927000 69.9253000 82.0215000 41.6751000 43.8789000 66.6990000 1162 38.5402000 37.7576000 43.3076000 12.1136000 12.1649000 16.5867000 1163 90.1525000 38.9680000 69.3589000 45.0153000 28.9674000 44.7460000 1164 90.0694000 41.0763000 87.5043000 50.8910000 32.1557000 73.4364000 1165 50.1550000 22.8658000 60.1027000 16.1856000 9.94654000 31.3191000 1166 53.1042000 42.9674000 74.7975000 24.9618000 19.9941000 51.6825000 1167 64.2677000 58.2017000 77.6518000 36.1338000 33.2683000 57.9531000 1168 80.0969000 69.5756000 93.1734000 56.1451000 50.6310000 87.3935000 1169 18.3410000 6.75177000 46.9912000 4.74523000 2.35849000 17.9201000 1170 27.5260000 11.4500000 63.2516000 9.44257000 4.78167000 34.2801000 1171 52.9125000 5.37658000 83.8690000 22.2532000 10.2999000 64.3474000 1172 32.3330000 54.3573000 52.2430000 16.9433000 21.8664000 25.5991000 1173 45.9947000 54.0154000 54.6862000 21.1181000 23.7815000 28.0772000 1174 47.0698000 53.4730000 59.7153000 22.2929000 23.9799000 33.2785000 1175 49.4892000 57.3791000 68.9629000 26.7821000 28.2352000 45.0397000 1176 6.39126000 20.2034000 26.0310000 2.42006000 2.92424000 5.65011000 1177 0.00000000 17.3758000 47.5588000 4.38020000 3.21180000 18.5673000 1178 10.1311000 21.5335000 47.7636000 5.28408000 4.34168000 18.9071000 1179 16.1875000 31.5267000 46.1091000 7.06770000 7.57018000 18.0982000 1180 12.5569000 44.3983000 48.7272000 10.1790000 13.6273000 21.2478000 1181 13.8435000 48.7697000 65.6939000 14.9788000 17.6779000 39.4355000 1182 12.6187000 62.6162000 94.7979000 29.1013000 31.7331000 88.3912000 1183 12.6191000 70.9844000 96.3617000 33.7177000 39.9988000 92.9137000 1184 42.4423000 18.0569000 19.3327000 7.75147000 5.38457000 3.56978000 1185 86.5634000 14.0405000 21.7134000 31.0609000 16.8599000 5.27853000 1186 35.8482000 13.4828000 7.33886000 5.05294000 3.45684000 1.00389000 1187 38.1748000 21.9680000 8.43674000 6.52153000 5.44638000 1.44212000 1188 46.6479000 28.9313000 5.33161000 10.1111000 8.81651000 1.57069000 1189 54.9210000 68.8183000 28.0504000 27.4010000 36.8908000 11.7282000 1190 55.0322000 77.2763000 74.5887000 40.1644000 49.2885000 56.2302000 1191 7.99123000 16.3575000 31.4720000 2.57137000 2.37104000 7.96156000 1192 10.0733000 13.1685000 33.5249000 2.63714000 1.99922000 8.94305000 1193 15.6900000 5.58136000 22.2160000 1.76543000 1.06364000 3.93795000 1194 19.7966000 21.7963000 26.0532000 3.72934000 3.87674000 5.77382000 1195 32.4272000 24.9169000 27.9186000 6.49070000 5.89726000 6.78988000 1196 39.9849000 46.9326000 43.2478000 14.9821000 17.3098000 17.3845000 1197 46.2923000 46.8046000 52.2905000 18.3729000 18.8355000 24.9822000 1198 52.8727000 54.4884000 73.0717000 28.0854000 27.1451000 50.4019000 1199 57.0114000 63.0452000 82.8918000 36.2513000 36.1838000 66.9506000 1200 23.4539000 23.6642000 32.3437000 5.02637000 4.83852000 8.74748000 1201 56.3019000 22.1852000 33.4617000 14.5207000 9.43585000 9.71867000 1202 73.0979000 31.9567000 49.7042000 27.1392000 17.9726000 22.0319000 1203 43.5240000 11.4471000 20.0481000 7.59802000 4.50714000 3.61662000 1204 71.8837000 12.3432000 19.3621000 20.6650000 11.3347000 4.04609000 1205 75.2935000 21.5133000 17.5429000 23.5654000 14.1129000 3.93857000 1206 79.5608000 30.3289000 26.9051000 28.3347000 18.4600000 7.63651000 1207 90.3329000 29.9299000 24.8585000 36.2582000 22.4567000 7.18367000 1208 91.9839000 30.0256000 34.3974000 38.4874000 23.5341000 11.6858000 1209 90.1848000 37.4660000 48.1346000 40.3223000 26.5233000 21.6506000 1210 40.2065000 23.3783000 24.5365000 8.02046000 6.40164000 5.45333000 1211 39.6923000 28.3592000 25.3262000 8.67075000 7.83179000 5.99258000 1212 41.4620000 26.5095000 31.9994000 9.46206000 7.73676000 8.89757000 1213 47.5550000 61.9524000 45.6018000 23.3130000 29.7976000 21.1339000 1214 55.4329000 79.1040000 44.5054000 35.1048000 49.0047000 23.3772000 1215 44.5472000 70.5806000 35.3210000 25.0513000 36.9243000 15.4957000 1216 52.4514000 90.8840000 36.1757000 40.5194000 63.3998000 20.2848000 1217 78.5457000 64.8167000 13.4348000 37.6941000 39.4489000 7.16095000 1218 93.5090000 64.9475000 10.9909000 49.1845000 45.4713000 7.28498000 1219 19.2425000 12.7846000 13.1211000 2.08364000 1.83268000 1.71647000 1220 15.8144000 4.48508000 14.3031000 1.33802000 0.83719200 1.79824000 1221 21.7611000 6.04241000 22.0825000 2.50036000 1.46790000 3.93245000 1222 41.3577000 32.5374000 56.4353000 13.9980000 11.2246000 27.7796000 1223 44.6367000 31.4743000 68.2579000 17.4497000 12.3998000 41.5499000 1224 68.5928000 45.1341000 75.3006000 33.3158000 25.1927000 52.9888000 1225 5.78941000 38.1550000 10.9798000 4.70457000 8.78751000 2.54626000 1226 56.5258000 40.5608000 9.63863000 16.5898000 15.7965000 3.07145000 1227 83.2123000 55.4733000 11.3586000 37.0185000 33.2986000 5.63651000 1228 85.3881000 91.1704000 7.99775000 57.9556000 72.9033000 11.6987000 1229 46.4471000 78.8290000 55.3631000 33.2399000 47.5906000 32.7038000 1230 51.9084000 90.5282000 69.6624000 46.1029000 65.2006000 52.0873000 1231 9.04327000 15.4919000 6.19266000 1.18885000 1.70411000 0.74862500 1232 10.4105000 14.9653000 10.1010000 1.32205000 1.69672000 1.22125000 1233 11.7508000 12.6703000 3.48808000 1.10802000 1.34487000 0.45634800 1234 16.8001000 22.2557000 7.02347000 2.54884000 3.45526000 1.10115000 1235 24.8070000 35.1920000 43.4224000 8.55458000 9.47577000 16.3397000 1236 29.0044000 46.2338000 59.9012000 15.0159000 16.6788000 32.4574000 1237 27.4988000 49.9001000 78.0156000 20.4569000 20.6698000 56.9106000 1238 34.3986000 57.3197000 91.8506000 29.1841000 28.6231000 81.9977000 1239 52.9041000 67.3486000 91.6254000 39.4779000 40.4690000 83.3096000 1240 58.2256000 92.6103000 90.9113000 56.8774000 72.2377000 87.1626000 1241 19.2613000 33.8423000 18.0911000 5.11956000 7.55764000 3.78807000 1242 22.7037000 55.8565000 30.4006000 12.8339000 20.9154000 10.4796000 1243 27.0949000 74.1710000 52.6256000 25.0028000 39.4492000 28.9234000 1244 31.6896000 83.2193000 80.1929000 37.9290000 53.3158000 65.7320000 1245 21.8277000 28.3893000 27.1892000 5.03923000 5.95064000 6.56839000 1246 26.6829000 28.3473000 32.8159000 6.31025000 6.53733000 9.25181000 1247 56.9803000 27.5016000 43.5703000 16.8027000 11.5935000 16.4219000 1248 64.0083000 31.7502000 42.9455000 20.8763000 14.8043000 16.3709000 1249 70.3912000 36.2936000 41.6952000 25.1979000 18.4402000 15.9559000 1250 76.1608000 40.5723000 61.8945000 33.3539000 23.7519000 35.0994000 1251 75.5252000 54.2957000 85.6087000 43.7343000 34.6687000 70.9274000 1252 49.3976000 34.1030000 52.1171000 16.2301000 12.9338000 23.7960000 1253 63.8346000 48.7668000 51.6846000 26.4607000 23.9276000 24.9817000 1254 70.1086000 57.6109000 55.7183000 33.8451000 32.3508000 30.0847000 1255 60.7755000 39.1126000 39.6986000 20.4046000 16.9742000 14.5738000 1256 84.7248000 38.6695000 52.8600000 37.1155000 25.1996000 25.7543000 1257 27.1657000 6.97782000 14.8643000 3.03497000 1.84035000 2.02137000 1258 38.1929000 7.74756000 10.1891000 5.40396000 3.12976000 1.29578000 1259 61.5296000 11.2671000 7.81481000 14.4433000 8.07367000 1.45646000 1260 89.0716000 15.4537000 6.87779000 32.5636000 17.8724000 2.28610000 1261 91.8274000 12.8823000 29.7408000 35.8215000 19.1183000 8.61101000 1262 92.2706000 10.7405000 37.0833000 36.8020000 19.3313000 12.5156000 1263 62.1439000 54.6779000 47.1959000 26.8975000 27.2705000 21.7276000 1264 66.3497000 56.6506000 61.1691000 32.4438000 30.9416000 35.7085000 1265 69.8201000 68.7657000 81.2554000 45.0538000 44.7823000 65.4335000 1266 26.6371000 27.3366000 50.8455000 8.55638000 7.17255000 21.9322000 1267 24.6360000 36.6845000 58.0730000 11.3528000 11.1167000 29.6016000 1268 42.3382000 47.0678000 74.6649000 22.2360000 20.3594000 51.7026000 1269 52.1313000 53.7618000 90.7244000 33.0931000 28.6880000 79.6552000 1270 26.0119000 53.7758000 62.0638000 17.4261000 21.5749000 35.7136000 1271 31.7311000 59.8259000 63.4166000 21.1999000 26.9818000 38.1406000 1272 34.1035000 65.6832000 79.4498000 28.5662000 34.1350000 61.3343000 1273 41.1990000 61.1812000 76.2531000 27.5097000 30.7031000 55.7811000 1274 50.4578000 66.3466000 75.7632000 32.8707000 36.9441000 55.9680000 1275 25.4986000 15.7863000 28.4249000 4.13405000 3.13352000 6.60148000 1276 23.0336000 16.4879000 47.6610000 6.10178000 3.97481000 18.7084000 1277 40.1365000 12.3291000 60.0611000 11.7833000 6.15386000 30.7730000 1278 39.3562000 42.5947000 58.9505000 16.2540000 15.7984000 31.1860000 1279 67.3683000 71.8474000 58.8113000 39.4448000 44.9020000 35.4315000 1280 75.8579000 74.8059000 67.7235000 48.1923000 51.5549000 46.7935000 1281 82.3555000 77.0707000 73.6468000 55.4931000 57.0443000 55.5528000 1282 92.6969000 84.6314000 82.2785000 70.8311000 71.5561000 70.9311000 1283 92.1181000 93.7040000 87.2546000 78.3270000 84.6467000 81.6728000 1284 15.4742000 89.3615000 17.4715000 29.0254000 56.0427000 11.7255000 1285 15.2425000 90.6263000 32.1031000 30.9503000 58.2417000 17.5664000 1286 26.5978000 100.000000 41.1774000 40.6787000 73.7625000 25.4601000 1287 29.4790000 100.000000 78.3779000 49.0818000 77.1867000 66.8744000 1288 10.1417000 73.9467000 34.9950000 20.3380000 37.1505000 15.6028000 1289 14.3919000 80.2775000 60.1436000 28.2922000 46.2230000 37.7287000 1290 12.2971000 92.0747000 61.6023000 36.3157000 62.0316000 41.9980000 1291 13.0565000 92.8568000 71.1579000 39.2432000 64.1272000 54.2716000 1292 37.5156000 95.1453000 69.3386000 44.6406000 69.5100000 52.5639000 1293 35.4168000 55.9177000 16.0392000 14.4058000 21.8711000 5.55177000 1294 65.6301000 64.1381000 18.3291000 29.7136000 34.8485000 7.82307000 1295 74.6925000 69.6298000 15.9780000 37.5777000 42.8296000 8.36184000 1296 19.6652000 16.0750000 21.1765000 2.78081000 2.53344000 3.83237000 1297 26.5707000 11.5399000 21.0833000 3.47689000 2.38412000 3.73796000 1298 24.5391000 15.0719000 19.0536000 3.27574000 2.67534000 3.20439000 1299 74.6664000 26.8194000 31.2240000 24.8592000 15.7539000 9.24808000 1300 88.4728000 38.4899000 39.5317000 37.9602000 25.8043000 15.2432000 1301 90.0311000 50.2894000 41.9504000 42.8993000 33.3150000 18.0732000 1302 89.3839000 59.5933000 56.8337000 48.2977000 40.9688000 32.1225000 1303 76.1878000 50.8484000 49.0103000 33.9564000 28.8617000 23.1767000 1304 81.4624000 70.9937000 52.7546000 46.8047000 48.1679000 29.5786000 1305 56.6722000 67.7024000 37.3237000 28.5382000 36.5543000 16.4210000 1306 62.5339000 74.7715000 55.7392000 37.8386000 46.4915000 32.6251000 1307 74.7100000 79.4869000 61.1226000 48.6328000 55.9749000 39.6344000 1308 85.5503000 93.6621000 90.1492000 74.0409000 82.2734000 86.7572000 1309 20.0675000 21.3523000 37.6443000 4.82522000 4.23327000 11.6276000 1310 18.6932000 54.5187000 37.8836000 12.5776000 19.9477000 14.4007000 1311 16.3398000 56.5885000 60.9278000 16.9064000 22.9021000 34.7025000 1312 23.4809000 71.1118000 83.0828000 30.3125000 38.8873000 68.1068000 1313 26.6384000 84.4587000 87.1322000 39.9815000 55.2998000 77.8091000 1314 68.2108000 91.8420000 87.9867000 60.4223000 73.3515000 81.7595000 1315 73.2805000 92.2062000 95.4945000 66.4566000 76.5383000 96.4743000 1316 34.1838000 45.5144000 37.9252000 12.3422000 15.3969000 13.5606000 1317 37.1494000 48.8519000 92.0259000 26.9178000 22.9570000 81.3612000 1318 12.6836000 10.6801000 55.3040000 5.81327000 3.03095000 25.4894000 1319 15.8014000 7.23958000 62.8419000 7.47712000 3.45175000 33.6445000 1320 11.5907000 15.7383000 91.6100000 16.0806000 7.71443000 78.1908000 1321 41.9922000 29.5101000 90.4839000 22.9921000 13.9521000 76.8890000 1322 60.9210000 28.0161000 91.6077000 30.6591000 17.4838000 79.3040000 1323 74.1817000 27.3126000 92.5764000 38.3446000 21.2364000 81.4921000 1324 87.8974000 34.3405000 94.5301000 50.1213000 29.1322000 86.2451000 1325 87.5966000 16.1610000 41.7590000 33.9716000 18.3977000 15.5300000 1326 93.4252000 11.5844000 48.6253000 39.4280000 20.5781000 20.9625000 1327 43.4448000 11.0539000 25.9264000 7.93442000 4.59930000 5.64115000 1328 49.3469000 9.03767000 43.2399000 11.7155000 6.16911000 15.4004000 1329 51.5968000 9.87287000 53.6551000 14.3026000 7.37503000 24.2700000 1330 54.9379000 29.9777000 54.0267000 18.0158000 12.6418000 25.4489000 1331 59.8287000 82.1402000 70.7577000 44.2479000 55.8688000 51.8656000 1332 65.0449000 92.4667000 73.7477000 54.7131000 71.5961000 58.5479000 1333 10.7398000 23.0800000 35.8996000 3.93058000 4.11613000 10.6093000 1334 11.3540000 22.7791000 42.2163000 4.71078000 4.37050000 14.6870000 1335 11.3978000 19.8893000 61.0067000 7.64441000 4.99147000 31.8230000 1336 12.7645000 28.3466000 65.9898000 10.0419000 7.82501000 38.1626000 1337 9.66813000 29.6536000 76.7312000 12.8763000 9.28918000 53.1419000 1338 17.4208000 35.3935000 75.3501000 14.2647000 11.7126000 51.4638000 1339 17.5042000 55.3616000 85.2603000 23.1940000 24.6820000 69.4728000 1340 15.9857000 64.3709000 86.1145000 27.0702000 32.2161000 72.2225000 1341 18.5403000 71.8550000 89.7134000 32.2753000 40.2176000 80.0248000 1342 20.8455000 94.3803000 89.4604000 46.8523000 69.0847000 84.3577000 1343 13.5464000 56.5544000 55.2657000 15.4852000 22.2821000 28.6571000 1344 7.26078000 60.5373000 72.3353000 20.5748000 26.8475000 49.6983000 1345 12.0199000 76.3398000 79.6568000 30.7884000 43.4852000 63.3522000 1346 15.5057000 82.7529000 90.5974000 38.5818000 52.8117000 83.7822000 1347 14.4765000 50.7870000 75.2035000 18.1650000 20.0215000 52.6446000 1348 14.5425000 56.4993000 76.6858000 20.6621000 24.3292000 55.5657000 1349 13.2371000 91.6740000 78.1468000 40.3469000 63.1861000 64.2725000 1350 12.9400000 92.6019000 92.6136000 45.8234000 66.4580000 89.8992000 1351 21.4622000 94.5351000 99.2953000 50.7945000 70.8583000 104.102000 1352 4.74139000 37.9526000 40.5768000 6.87883000 9.57638000 14.4425000 1353 12.4746000 52.0610000 41.0640000 11.4784000 18.0265000 16.1623000 1354 12.1954000 58.9583000 51.4966000 15.6472000 23.8634000 25.3680000 1355 19.6245000 88.1721000 52.7695000 32.5392000 56.1792000 31.8906000 1356 27.9216000 40.8301000 23.3815000 8.38053000 11.5937000 6.01964000 1357 30.5682000 51.1777000 25.4564000 12.1382000 18.0977000 7.84138000 1358 76.5402000 52.5321000 28.8768000 32.2928000 29.1532000 10.3403000 1359 50.7618000 41.6891000 15.5138000 14.6811000 15.2234000 4.13341000 1360 61.7898000 48.8683000 12.8469000 21.5700000 21.9031000 4.51247000 1361 61.2195000 54.6458000 10.9473000 23.2216000 25.7275000 4.83504000 1362 66.8199000 73.1418000 11.0666000 34.5392000 44.0082000 7.78658000 1363 67.5663000 81.4230000 42.6205000 42.2845000 54.8324000 22.7353000 1364 75.9966000 92.3203000 50.7152000 56.0034000 72.6905000 31.9627000 1365 55.8981000 35.0419000 14.6692000 15.1901000 13.1389000 3.51992000 1366 92.1744000 34.2400000 8.84246000 37.8576000 24.5963000 3.53973000 1367 91.3412000 79.8973000 13.8145000 55.4125000 60.4937000 10.3642000 1368 94.9000000 93.0511000 12.4641000 67.2358000 79.7098000 13.1941000 1369 21.4142000 26.5564000 3.75211000 3.65623000 4.92229000 1.03163000 1370 26.7152000 25.3597000 8.45452000 4.40423000 5.03204000 1.47608000 1371 32.5776000 24.0419000 16.4188000 5.67454000 5.37938000 2.91702000 1372 41.2927000 29.5814000 18.4945000 8.92195000 8.31884000 3.84189000 1373 42.5340000 39.1888000 21.6637000 11.4860000 12.5965000 5.47093000 1374 70.3007000 55.1525000 23.7855000 28.9552000 28.8918000 8.41686000 1375 79.6167000 57.2591000 22.7258000 35.6761000 33.5653000 8.59525000 1376 83.0928000 78.4106000 28.6181000 48.9598000 55.7443000 14.4800000 1377 84.2030000 91.9390000 28.4920000 58.6790000 73.9797000 17.4318000 1378 10.2253000 8.19709000 37.6750000 2.80868000 1.59889000 11.2445000 1379 9.49500000 3.57965000 40.7150000 2.97011000 1.39030000 13.1623000 1380 41.7311000 10.8236000 51.1831000 10.4629000 5.52718000 21.8183000 1381 52.3781000 9.04995000 63.4947000 16.5834000 8.25390000 34.8620000 1382 52.8273000 12.3177000 75.6760000 20.0683000 9.97804000 51.3077000 1383 65.4888000 11.0529000 80.0996000 27.2843000 13.4262000 58.4432000 1384 75.1235000 13.4632000 81.6861000 33.6306000 16.8814000 61.3570000 1385 84.5735000 17.6622000 89.7351000 43.2766000 22.0750000 75.9836000 1386 67.1751000 14.3165000 71.6484000 26.0212000 13.3904000 45.8531000 1387 72.3523000 8.91053000 94.1776000 35.9380000 17.1545000 83.9784000 1388 24.5806000 8.59328000 31.8682000 3.81024000 2.21540000 8.06376000 1389 23.4403000 2.55979000 35.3641000 3.77357000 1.83660000 9.86912000 1390 69.3864000 53.9423000 45.0143000 30.2224000 28.6216000 20.0880000 1391 92.6984000 65.5320000 50.0401000 52.4251000 47.1227000 26.6194000 1392 91.3543000 67.3229000 58.6793000 53.7523000 48.8864000 35.3043000 1393 90.7358000 75.1581000 62.1072000 58.0508000 57.0795000 40.4765000 1394 46.5914000 18.7976000 15.0712000 8.99216000 6.15925000 2.58557000 1395 54.3011000 23.9405000 9.72163000 12.4028000 8.85502000 1.96384000 1396 63.5639000 33.8644000 9.16262000 18.4318000 14.4661000 2.65055000 1397 72.4243000 48.5031000 10.7904000 27.3017000 24.6925000 4.39620000 1398 78.7603000 84.0565000 78.8179000 58.7160000 64.8789000 64.6811000 1399 90.1986000 85.4899000 94.6181000 73.6218000 73.3339000 93.7152000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 100.0000 108.9060 1 0.000000 46.30660 100.0000 24.53780 20.19710 97.21750 2 100.0000 0.000000 76.43500 51.07860 25.19590 53.75030 3 0.000000 0.000000 55.41690 4.831040 1.932540 25.44110 4 100.0000 64.42970 0.000000 54.56610 47.91680 6.373650 5 0.000000 34.08240 0.000000 3.400610 6.801720 1.133680 6 78.98890 0.000000 0.000000 24.20010 12.47580 1.132910 7 5.026730 4.490490 3.592540 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 100.000 108.906 1 0.00000 100.000 100.000 53.8073 78.7404 106.975 2 100.000 0.00000 100.000 59.2885 28.4801 96.9852 3 0.00000 0.00000 100.000 18.0500 7.22046 95.0546 4 100.000 100.000 0.00000 76.9958 92.7795 13.8511 5 0.00000 100.000 0.00000 35.7573 71.5199 11.9206 6 100.000 0.00000 0.00000 41.2385 21.2596 1.93056 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.3442 21.4046 23.3108 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s33-g97-m9-b9-f0.ti1000644 000765 000000 00000225673 12237536424 021731 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "9" CREATED "Sat Oct 19 04:48:08 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "9" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "33" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1399 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 0.00000 50.0000 25.0000 9.48738 16.5179 8.31499 3 0.00000 62.5000 37.5000 15.4124 26.5039 16.0335 4 37.5000 62.5000 37.5000 20.1494 28.9463 16.2555 5 68.7500 56.2500 6.25000 28.4553 29.6752 5.57215 6 87.5000 75.0000 12.5000 49.9236 53.6516 9.93103 7 73.9583 73.9583 73.9583 48.6594 51.1377 55.6166 8 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 9 10.4167 10.4167 10.4167 2.00521 2.05749 2.15195 10 0.00000 0.00000 9.37500 1.16227 1.06490 1.85470 11 6.25000 0.00000 0.00000 1.21051 1.10854 1.00986 12 12.5000 0.00000 0.00000 1.58591 1.30210 1.02745 13 15.6250 0.00000 0.00000 1.86037 1.44361 1.04032 14 18.7500 0.00000 0.00000 2.19807 1.61773 1.05614 15 21.8750 0.00000 0.00000 2.60260 1.82631 1.07510 16 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 17 28.1250 0.00000 0.00000 3.62521 2.35357 1.12301 18 31.2500 0.00000 0.00000 4.24932 2.67536 1.15226 19 34.3750 0.00000 0.00000 4.95236 3.03785 1.18520 20 37.5000 0.00000 0.00000 5.73696 3.44239 1.22197 21 40.6250 0.00000 0.00000 6.60561 3.89027 1.26267 22 43.7500 0.00000 0.00000 7.56070 4.38272 1.30742 23 46.8750 0.00000 0.00000 8.60454 4.92093 1.35634 24 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 25 53.1250 0.00000 0.00000 10.9672 6.13913 1.46705 26 56.2500 0.00000 0.00000 12.2903 6.82130 1.52904 27 59.3750 0.00000 0.00000 13.7105 7.55355 1.59559 28 62.5000 0.00000 0.00000 15.2297 8.33690 1.66678 29 65.6250 0.00000 0.00000 16.8500 9.17230 1.74270 30 68.7500 0.00000 0.00000 18.5730 10.0607 1.82344 31 71.8750 0.00000 0.00000 20.4007 11.0031 1.90908 32 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 33 78.1250 0.00000 0.00000 24.3766 13.0531 2.09539 34 81.2500 0.00000 0.00000 26.5283 14.1625 2.19621 35 84.3750 0.00000 0.00000 28.7913 15.3293 2.30225 36 87.5000 0.00000 0.00000 31.1672 16.5543 2.41358 37 90.6250 0.00000 0.00000 33.6575 17.8383 2.53027 38 93.7500 0.00000 0.00000 36.2638 19.1821 2.65240 39 96.8750 0.00000 0.00000 38.9875 20.5865 2.78003 40 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 41 9.37500 0.00000 0.00000 1.37074 1.19116 1.01737 42 0.00000 0.00000 3.12500 1.04323 1.01729 1.22767 43 0.00000 6.25000 0.00000 1.18254 1.36502 1.06085 44 0.00000 12.5000 0.00000 1.50806 2.01598 1.16935 45 0.00000 15.6250 0.00000 1.74606 2.49191 1.24869 46 0.00000 18.7500 0.00000 2.03889 3.07749 1.34630 47 0.00000 21.8750 0.00000 2.38967 3.77895 1.46323 48 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 49 0.00000 28.1250 0.00000 3.27641 5.55219 1.75881 50 0.00000 31.2500 0.00000 3.81760 6.63441 1.93921 51 0.00000 34.3750 0.00000 4.42723 7.85350 2.14242 52 0.00000 37.5000 0.00000 5.10758 9.21400 2.36920 53 0.00000 40.6250 0.00000 5.86081 10.7203 2.62028 54 0.00000 43.7500 0.00000 6.68900 12.3764 2.89635 55 0.00000 46.8750 0.00000 7.59415 14.1865 3.19807 56 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 57 0.00000 53.1250 0.00000 9.64291 18.2834 3.88099 58 0.00000 56.2500 0.00000 10.7902 20.5776 4.26342 59 0.00000 59.3750 0.00000 12.0217 23.0402 4.67392 60 0.00000 62.5000 0.00000 13.3391 25.6747 5.11306 61 0.00000 65.6250 0.00000 14.7441 28.4843 5.58139 62 0.00000 68.7500 0.00000 16.2382 31.4721 6.07943 63 0.00000 71.8750 0.00000 17.8230 34.6412 6.60771 64 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 65 0.00000 78.1250 0.00000 21.2707 41.5357 7.75694 66 0.00000 81.2500 0.00000 23.1365 45.2667 8.37888 67 0.00000 84.3750 0.00000 25.0988 49.1908 9.03299 68 0.00000 87.5000 0.00000 27.1590 53.3106 9.71972 69 0.00000 90.6250 0.00000 29.3184 57.6289 10.4395 70 0.00000 93.7500 0.00000 31.5784 62.1482 11.1929 71 0.00000 96.8750 0.00000 33.9402 66.8713 11.9802 72 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 73 0.00000 9.37500 0.00000 1.32148 1.64288 1.10716 74 1.04167 1.04167 1.04167 1.07587 1.07982 1.08695 75 0.00000 0.00000 6.25000 1.09214 1.03685 1.48530 76 11.4583 11.4583 11.4583 2.17040 2.23126 2.34125 77 0.00000 0.00000 15.6250 1.37658 1.15061 2.98349 78 0.00000 0.00000 18.7500 1.52439 1.20972 3.76201 79 0.00000 0.00000 21.8750 1.70145 1.28053 4.69460 80 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 81 0.00000 0.00000 28.1250 2.14904 1.45954 7.05211 82 0.00000 0.00000 31.2500 2.42221 1.56879 8.49092 83 0.00000 0.00000 34.3750 2.72992 1.69186 10.1117 84 0.00000 0.00000 37.5000 3.07334 1.82920 11.9205 85 0.00000 0.00000 40.6250 3.45354 1.98126 13.9230 86 0.00000 0.00000 43.7500 3.87158 2.14845 16.1249 87 0.00000 0.00000 46.8750 4.32846 2.33117 18.5313 88 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 89 0.00000 0.00000 53.1250 5.36259 2.74476 23.9782 90 0.00000 0.00000 56.2500 5.94168 2.97636 27.0283 91 0.00000 0.00000 59.3750 6.56328 3.22496 30.3024 92 0.00000 0.00000 62.5000 7.22826 3.49091 33.8049 93 0.00000 0.00000 65.6250 7.93744 3.77454 37.5402 94 0.00000 0.00000 68.7500 8.69161 4.07616 41.5125 95 0.00000 0.00000 71.8750 9.49155 4.39609 45.7259 96 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 97 0.00000 0.00000 78.1250 11.2318 5.09208 54.8920 98 0.00000 0.00000 81.2500 12.1736 5.46873 59.8524 99 0.00000 0.00000 84.3750 13.1641 5.86486 65.0694 100 0.00000 0.00000 87.5000 14.2040 6.28076 70.5467 101 0.00000 0.00000 90.6250 15.2940 6.71668 76.2878 102 0.00000 0.00000 93.7500 16.4347 7.17291 82.2963 103 0.00000 0.00000 96.8750 17.6269 7.64970 88.5755 104 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 105 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 106 0.00000 0.00000 12.5000 1.25645 1.10256 2.35074 107 3.12500 3.12500 3.12500 1.22762 1.23945 1.26085 108 2.08333 2.08333 2.08333 1.15175 1.15964 1.17390 109 4.16667 4.16667 4.16667 1.30372 1.31952 1.34806 110 5.20833 5.20833 5.20833 1.38828 1.40847 1.44496 111 6.25000 6.25000 6.25000 1.48518 1.51041 1.55601 112 0.00000 12.5000 12.5000 1.76451 2.11854 2.52009 113 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 114 0.00000 3.12500 0.00000 1.08564 1.17125 1.02855 115 9.37500 9.37500 9.37500 1.85450 1.89893 1.97923 116 7.29167 7.29167 7.29167 1.59489 1.62583 1.68173 117 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 118 13.5417 13.5417 13.5417 2.54563 2.62600 2.77126 119 14.5833 14.5833 14.5833 2.75638 2.84772 3.01278 120 15.6250 15.6250 15.6250 2.98301 3.08613 3.27249 121 17.7083 17.7083 17.7083 3.48519 3.61442 3.84797 122 18.7500 18.7500 18.7500 3.76135 3.90494 4.16445 123 19.7917 19.7917 19.7917 4.05464 4.21348 4.50055 124 20.8333 20.8333 20.8333 4.36533 4.54033 4.85660 125 21.8750 21.8750 21.8750 4.69372 4.88579 5.23292 126 22.9167 22.9167 22.9167 5.04007 5.25016 5.62984 127 23.9583 23.9583 23.9583 5.40467 5.63371 6.04766 128 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 129 26.0417 26.0417 26.0417 6.18963 6.45949 6.94721 130 27.0833 27.0833 27.0833 6.61052 6.90226 7.42953 131 28.1250 28.1250 28.1250 7.05067 7.36530 7.93393 132 29.1667 29.1667 29.1667 7.51032 7.84886 8.46069 133 30.2083 30.2083 30.2083 7.98973 8.35320 9.01009 134 31.2500 31.2500 31.2500 8.48913 8.87856 9.58238 135 32.2917 32.2917 32.2917 9.00874 9.42519 10.1778 136 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 137 34.3750 34.3750 34.3750 10.1095 10.5832 11.4393 138 35.4167 35.4167 35.4167 10.6911 11.1951 12.1058 139 36.4583 36.4583 36.4583 11.2938 11.8291 12.7965 140 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 141 38.5417 38.5417 38.5417 12.5634 13.1647 14.2514 142 39.5833 39.5833 39.5833 13.2307 13.8667 15.0161 143 40.6250 40.6250 40.6250 13.9200 14.5918 15.8060 144 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 145 42.7083 42.7083 42.7083 15.3650 16.1120 17.4620 146 43.7500 43.7500 43.7500 16.1213 16.9076 18.3287 147 44.7917 44.7917 44.7917 16.9003 17.7271 19.2214 148 45.8333 45.8333 45.8333 17.7021 18.5707 20.1403 149 46.8750 46.8750 46.8750 18.5272 19.4386 21.0857 150 47.9167 47.9167 47.9167 19.3754 20.3310 22.0579 151 48.9583 48.9583 48.9583 20.2472 21.2481 23.0569 152 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 153 51.0417 51.0417 51.0417 22.0619 23.1572 25.1365 154 52.0833 52.0833 52.0833 23.0052 24.1495 26.2175 155 53.1250 53.1250 53.1250 23.9727 25.1673 27.3263 156 54.1667 54.1667 54.1667 24.9646 26.2107 28.4629 157 55.2083 55.2083 55.2083 25.9810 27.2800 29.6277 158 56.2500 56.2500 56.2500 27.0221 28.3752 30.8208 159 57.2917 57.2917 57.2917 28.0881 29.4967 32.0424 160 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 161 59.3750 59.3750 59.3750 30.2954 31.8187 34.5719 162 60.4167 60.4167 60.4167 31.4370 33.0197 35.8802 163 61.4583 61.4583 61.4583 32.6042 34.2476 37.2177 164 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 165 63.5417 63.5417 63.5417 35.0158 36.7846 39.9814 166 64.5833 64.5833 64.5833 36.2605 38.0941 41.4078 167 65.6250 65.6250 65.6250 37.5315 39.4311 42.8643 168 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 169 67.7083 67.7083 67.7083 40.1524 42.1884 45.8679 170 68.7500 68.7500 68.7500 41.5028 43.6089 47.4154 171 69.7917 69.7917 69.7917 42.8800 45.0577 48.9935 172 70.8333 70.8333 70.8333 44.2840 46.5348 50.6026 173 71.8750 71.8750 71.8750 45.7152 48.0404 52.2427 174 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 175 12.5000 37.5000 37.5000 7.76682 10.3453 13.3171 176 72.9167 72.9167 72.9167 47.1736 49.5746 53.9140 177 76.0417 76.0417 76.0417 51.7136 54.3507 59.1167 178 77.0833 77.0833 77.0833 53.2824 56.0011 60.9145 179 78.1250 78.1250 78.1250 54.8791 57.6808 62.7443 180 79.1667 79.1667 79.1667 56.5039 59.3901 64.6063 181 80.2083 80.2083 80.2083 58.1569 61.1291 66.5006 182 81.2500 81.2500 81.2500 59.8383 62.8979 68.4275 183 82.2917 82.2917 82.2917 61.5482 64.6967 70.3870 184 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 185 84.3750 84.3750 84.3750 65.0541 68.3849 74.4046 186 85.4167 85.4167 85.4167 66.8503 70.2745 76.4631 187 86.4583 86.4583 86.4583 68.6756 72.1947 78.5548 188 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 189 88.5417 88.5417 88.5417 72.4138 76.1273 82.8387 190 89.5833 89.5833 89.5833 74.3270 78.1400 85.0312 191 90.6250 90.6250 90.6250 76.2698 80.1838 87.2576 192 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 193 92.7083 92.7083 92.7083 80.2446 84.3653 91.8126 194 93.7500 93.7500 93.7500 82.2769 86.5032 94.1415 195 94.7917 94.7917 94.7917 84.3392 88.6728 96.5049 196 95.8333 95.8333 95.8333 86.4317 90.8742 98.9029 197 96.8750 96.8750 96.8750 88.5546 93.1074 101.336 198 97.9167 97.9167 97.9167 90.7080 95.3727 103.803 199 98.9583 98.9583 98.9583 92.8919 97.6702 106.306 200 12.5000 12.5000 0.00000 2.09397 2.31807 1.19681 201 25.0000 12.5000 0.00000 3.58534 3.08703 1.26669 202 37.5000 12.5000 0.00000 6.24502 4.45837 1.39132 203 50.0000 12.5000 0.00000 10.2474 6.52201 1.57886 204 62.5000 12.5000 0.00000 15.7378 9.35287 1.83614 205 75.0000 12.5000 0.00000 22.8427 13.0162 2.16906 206 87.5000 12.5000 0.00000 31.6752 17.5703 2.58294 207 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 208 87.5000 87.5000 25.0000 58.2353 69.2285 15.9222 209 25.0000 25.0000 0.00000 4.87856 5.67311 1.69777 210 37.5000 25.0000 0.00000 7.53824 7.04444 1.82240 211 50.0000 25.0000 0.00000 11.5406 9.10808 2.00994 212 62.5000 25.0000 0.00000 17.0310 11.9389 2.26721 213 75.0000 25.0000 0.00000 24.1359 15.6023 2.60014 214 87.5000 25.0000 0.00000 32.9684 20.1563 3.01401 215 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 216 100.000 75.0000 25.0000 61.2394 59.4106 13.8689 217 25.0000 37.5000 0.00000 7.18485 10.2851 2.46654 218 37.5000 37.5000 0.00000 9.84453 11.6564 2.59117 219 50.0000 37.5000 0.00000 13.8469 13.7200 2.77871 220 62.5000 37.5000 0.00000 19.3373 16.5509 3.03598 221 75.0000 37.5000 0.00000 26.4422 20.2142 3.36891 222 87.5000 37.5000 0.00000 35.2747 24.7683 3.78278 223 100.000 37.5000 0.00000 45.9377 30.2662 4.28243 224 100.000 75.0000 12.5000 60.5866 59.1495 10.4307 225 100.000 87.5000 12.5000 68.2456 74.4653 12.9837 226 100.000 87.5000 25.0000 68.8983 74.7264 16.4219 227 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 228 62.5000 50.0000 0.00000 22.8079 23.4911 4.19286 229 75.0000 50.0000 0.00000 29.9128 27.1544 4.52578 230 87.5000 50.0000 0.00000 38.7453 31.7085 4.93966 231 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 232 100.000 62.5000 0.00000 54.1692 46.7269 7.02629 233 37.5000 50.0000 0.00000 13.3151 18.5966 3.74804 234 37.5000 62.5000 0.00000 18.0760 28.1171 5.33503 235 50.0000 62.5000 0.00000 22.0784 30.1807 5.52257 236 62.5000 62.5000 0.00000 27.5688 33.0116 5.77984 237 75.0000 62.5000 0.00000 34.6737 36.6749 6.11276 238 87.5000 62.5000 0.00000 43.5062 41.2290 6.52664 239 87.5000 75.0000 0.00000 49.6671 53.5491 8.58029 240 25.0000 62.5000 0.00000 15.4164 26.7458 5.21040 241 25.0000 75.0000 0.00000 21.5773 39.0658 7.26405 242 37.5000 75.0000 0.00000 24.2369 40.4372 7.38868 243 50.0000 75.0000 0.00000 28.2393 42.5008 7.57622 244 62.5000 75.0000 0.00000 33.7297 45.3317 7.83349 245 75.0000 75.0000 0.00000 40.8346 48.9950 8.16642 246 100.000 75.0000 0.00000 60.3302 59.0470 9.07994 247 100.000 87.5000 0.00000 67.9891 74.3628 11.6330 248 25.0000 50.0000 0.00000 10.6555 17.2253 3.62342 249 25.0000 87.5000 0.00000 29.2362 54.3816 9.81706 250 37.5000 87.5000 0.00000 31.8959 55.7530 9.94169 251 50.0000 87.5000 0.00000 35.8983 57.8166 10.1292 252 62.5000 87.5000 0.00000 41.3887 60.6475 10.3865 253 75.0000 87.5000 0.00000 48.4936 64.3108 10.7194 254 87.5000 87.5000 0.00000 57.3261 68.8649 11.1333 255 12.5000 87.5000 0.00000 27.7449 53.6127 9.74718 256 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 257 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 258 37.5000 100.000 0.00000 41.1422 74.2429 13.0238 259 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 260 62.5000 100.000 0.00000 50.6349 79.1374 13.4686 261 75.0000 100.000 0.00000 57.7399 82.8007 13.8015 262 87.5000 100.000 0.00000 66.5724 87.3548 14.2154 263 100.000 100.000 0.00000 77.2354 92.8527 14.7151 264 12.5000 0.00000 12.5000 1.84236 1.40466 2.37819 265 25.0000 0.00000 12.5000 3.33373 2.17362 2.44808 266 37.5000 0.00000 12.5000 5.99341 3.54495 2.57270 267 50.0000 0.00000 12.5000 9.99578 5.60859 2.76025 268 62.5000 0.00000 12.5000 15.4862 8.43946 3.01752 269 75.0000 0.00000 12.5000 22.5911 12.1028 3.35044 270 87.5000 0.00000 12.5000 31.4236 16.6568 3.76432 271 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 272 100.000 12.5000 37.5000 44.4116 23.8974 14.0031 273 25.0000 12.5000 12.5000 3.84179 3.18959 2.61743 274 37.5000 12.5000 12.5000 6.50147 4.56093 2.74206 275 50.0000 12.5000 12.5000 10.5038 6.62457 2.92960 276 62.5000 12.5000 12.5000 15.9942 9.45544 3.18687 277 75.0000 12.5000 12.5000 23.0992 13.1188 3.51980 278 87.5000 12.5000 12.5000 31.9317 17.6728 3.93367 279 100.000 12.5000 12.5000 42.5947 23.1707 4.43332 280 100.000 37.5000 25.0000 46.8470 30.6298 9.07135 281 100.000 62.5000 25.0000 55.0785 47.0905 11.8152 282 25.0000 25.0000 12.5000 5.13501 5.77567 3.04851 283 37.5000 25.0000 12.5000 7.79469 7.14701 3.17314 284 50.0000 25.0000 12.5000 11.7971 9.21065 3.36068 285 62.5000 25.0000 12.5000 17.2875 12.0415 3.61795 286 75.0000 25.0000 12.5000 24.3924 15.7048 3.95087 287 87.5000 25.0000 12.5000 33.2249 20.2589 4.36475 288 100.000 25.0000 12.5000 43.8879 25.7568 4.86440 289 100.000 37.5000 37.5000 48.0111 31.0954 15.2029 290 100.000 50.0000 37.5000 51.4817 38.0356 16.3598 291 25.0000 37.5000 12.5000 7.44130 10.3876 3.81728 292 37.5000 37.5000 12.5000 10.1010 11.7590 3.94191 293 50.0000 37.5000 12.5000 14.1034 13.8226 4.12945 294 62.5000 37.5000 12.5000 19.5938 16.6535 4.38672 295 75.0000 37.5000 12.5000 26.6987 20.3168 4.71965 296 87.5000 37.5000 12.5000 35.5312 24.8708 5.13352 297 100.000 37.5000 12.5000 46.1942 30.3687 5.63317 298 100.000 62.5000 12.5000 54.4257 46.8294 8.37703 299 12.5000 50.0000 0.00000 9.16408 16.4563 3.55353 300 25.0000 50.0000 12.5000 10.9119 17.3278 4.97415 301 37.5000 50.0000 12.5000 13.5716 18.6992 5.09878 302 50.0000 50.0000 12.5000 17.5740 20.7628 5.28633 303 62.5000 50.0000 12.5000 23.0643 23.5937 5.54360 304 75.0000 50.0000 12.5000 30.1693 27.2570 5.87652 305 87.5000 50.0000 12.5000 39.0018 31.8111 6.29040 306 100.000 50.0000 12.5000 49.6648 37.3090 6.79005 307 12.5000 25.0000 12.5000 3.64363 5.00671 2.97862 308 12.5000 37.5000 12.5000 5.94993 9.61866 3.74740 309 25.0000 62.5000 12.5000 15.6728 26.8483 6.56114 310 37.5000 62.5000 12.5000 18.3325 28.2197 6.68576 311 50.0000 62.5000 12.5000 22.3349 30.2833 6.87331 312 62.5000 62.5000 12.5000 27.8253 33.1142 7.13058 313 75.0000 62.5000 12.5000 34.9302 36.7775 7.46350 314 87.5000 62.5000 12.5000 43.7627 41.3315 7.87738 315 12.5000 50.0000 12.5000 9.42053 16.5589 4.90427 316 12.5000 62.5000 12.5000 14.1814 26.0794 6.49125 317 12.5000 75.0000 12.5000 20.3423 38.3995 8.54491 318 25.0000 75.0000 12.5000 21.8337 39.1684 8.61479 319 37.5000 75.0000 12.5000 24.4934 40.5398 8.73942 320 50.0000 75.0000 12.5000 28.4958 42.6034 8.92696 321 62.5000 75.0000 12.5000 33.9862 45.4343 9.18423 322 75.0000 75.0000 12.5000 41.0911 49.0976 9.51716 323 87.5000 87.5000 12.5000 57.5826 68.9674 12.4840 324 0.00000 62.5000 12.5000 13.5955 25.7773 6.46380 325 0.00000 75.0000 12.5000 19.7564 38.0974 8.51745 326 12.5000 87.5000 12.5000 28.0013 53.7152 11.0979 327 25.0000 87.5000 12.5000 29.4927 54.4842 11.1678 328 37.5000 87.5000 12.5000 32.1524 55.8555 11.2924 329 50.0000 87.5000 12.5000 36.1547 57.9192 11.4800 330 62.5000 87.5000 12.5000 41.6451 60.7500 11.7372 331 75.0000 87.5000 12.5000 48.7500 64.4134 12.0702 332 81.2500 93.7500 18.7500 57.6311 75.5204 15.1511 333 0.00000 87.5000 12.5000 27.4154 53.4132 11.0705 334 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 335 12.5000 100.000 12.5000 37.2476 72.2052 14.1800 336 25.0000 100.000 12.5000 38.7389 72.9741 14.2499 337 37.5000 100.000 12.5000 41.3986 74.3455 14.3745 338 50.0000 100.000 12.5000 45.4010 76.4091 14.5621 339 62.5000 100.000 12.5000 50.8914 79.2400 14.8194 340 75.0000 100.000 12.5000 57.9963 82.9033 15.1523 341 87.5000 100.000 12.5000 66.8288 87.4574 15.5662 342 100.000 100.000 12.5000 77.4918 92.9552 16.0658 343 12.5000 0.00000 25.0000 2.49512 1.66572 5.81637 344 25.0000 0.00000 25.0000 3.98649 2.43468 5.88625 345 37.5000 0.00000 25.0000 6.64617 3.80602 6.01088 346 50.0000 0.00000 25.0000 10.6485 5.86966 6.19842 347 62.5000 0.00000 25.0000 16.1389 8.70052 6.45569 348 75.0000 0.00000 25.0000 23.2439 12.3638 6.78862 349 87.5000 0.00000 25.0000 32.0764 16.9179 7.20249 350 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 351 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 352 12.5000 12.5000 25.0000 3.00318 2.68170 5.98572 353 25.0000 12.5000 25.0000 4.49455 3.45066 6.05561 354 37.5000 12.5000 25.0000 7.15423 4.82200 6.18023 355 50.0000 12.5000 25.0000 11.1566 6.88564 6.36778 356 62.5000 12.5000 25.0000 16.6470 9.71650 6.62505 357 75.0000 12.5000 25.0000 23.7519 13.3798 6.95797 358 87.5000 12.5000 25.0000 32.5844 17.9339 7.37185 359 100.000 12.5000 25.0000 43.2474 23.4318 7.87150 360 0.00000 25.0000 12.5000 3.05773 4.70462 2.95117 361 0.00000 25.0000 25.0000 3.71049 4.96568 6.38934 362 37.5000 25.0000 25.0000 8.44745 7.40807 6.61131 363 50.0000 25.0000 25.0000 12.4498 9.47171 6.79885 364 62.5000 25.0000 25.0000 17.9402 12.3026 7.05612 365 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 366 87.5000 25.0000 25.0000 33.8776 20.5200 7.80292 367 100.000 25.0000 25.0000 44.5407 26.0178 8.30257 368 100.000 25.0000 37.5000 45.7048 26.4834 14.4341 369 3.12500 0.00000 0.00000 1.09876 1.05092 1.00463 370 31.2500 18.7500 18.7500 5.81260 4.96257 4.26057 371 37.5000 37.5000 25.0000 10.7537 12.0200 7.38008 372 50.0000 37.5000 25.0000 14.7561 14.0837 7.56763 373 62.5000 37.5000 25.0000 20.2465 16.9145 7.82490 374 75.0000 37.5000 25.0000 27.3514 20.5778 8.15782 375 87.5000 37.5000 25.0000 36.1839 25.1319 8.57170 376 68.7500 31.2500 43.7500 24.2622 16.8436 17.8875 377 12.5000 25.0000 25.0000 4.29640 5.26778 6.41680 378 12.5000 37.5000 25.0000 6.60270 9.87973 7.18557 379 25.0000 50.0000 25.0000 11.5647 17.5889 8.41233 380 37.5000 50.0000 25.0000 14.2243 18.9602 8.53696 381 50.0000 50.0000 25.0000 18.2267 21.0239 8.72450 382 62.5000 50.0000 25.0000 23.7171 23.8547 8.98177 383 75.0000 50.0000 25.0000 30.8220 27.5181 9.31470 384 87.5000 50.0000 25.0000 39.6545 32.0721 9.72857 385 100.000 50.0000 25.0000 50.3176 37.5700 10.2282 386 12.5000 50.0000 25.0000 10.0733 16.8199 8.34245 387 12.5000 62.5000 25.0000 14.8342 26.3404 9.92943 388 25.0000 62.5000 25.0000 16.3256 27.1094 9.99931 389 37.5000 62.5000 25.0000 18.9852 28.4807 10.1239 390 50.0000 62.5000 25.0000 22.9876 30.5444 10.3115 391 62.5000 62.5000 25.0000 28.4780 33.3752 10.5688 392 75.0000 62.5000 25.0000 35.5829 37.0385 10.9017 393 87.5000 62.5000 25.0000 44.4154 41.5926 11.3156 394 0.00000 62.5000 25.0000 14.2483 26.0383 9.90197 395 0.00000 75.0000 25.0000 20.4092 38.3584 11.9556 396 12.5000 75.0000 25.0000 20.9951 38.6605 11.9831 397 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 398 37.5000 75.0000 25.0000 25.1462 40.8008 12.1776 399 50.0000 75.0000 25.0000 29.1485 42.8645 12.3651 400 62.5000 75.0000 25.0000 34.6389 45.6953 12.6224 401 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 402 87.5000 75.0000 25.0000 50.5764 53.9127 13.3692 403 12.5000 62.5000 0.00000 13.9250 25.9768 5.14051 404 12.5000 75.0000 0.00000 20.0859 38.2969 7.19417 405 12.5000 87.5000 25.0000 28.6541 53.9763 14.5361 406 25.0000 87.5000 25.0000 30.1454 54.7453 14.6060 407 37.5000 87.5000 25.0000 32.8051 56.1166 14.7306 408 50.0000 87.5000 25.0000 36.8075 58.1802 14.9181 409 62.5000 87.5000 25.0000 42.2979 61.0111 15.1754 410 75.0000 87.5000 25.0000 49.4028 64.6744 15.5083 411 0.00000 50.0000 12.5000 8.83462 16.2568 4.87682 412 0.00000 87.5000 25.0000 28.0682 53.6742 14.5086 413 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 414 12.5000 100.000 25.0000 37.9003 72.4662 17.6182 415 25.0000 100.000 25.0000 39.3917 73.2352 17.6881 416 37.5000 100.000 25.0000 42.0514 74.6065 17.8127 417 50.0000 100.000 25.0000 46.0538 76.6702 18.0003 418 62.5000 100.000 25.0000 51.5442 79.5010 18.2575 419 75.0000 100.000 25.0000 58.6491 83.1644 18.5905 420 87.5000 100.000 25.0000 67.4816 87.7184 19.0043 421 100.000 100.000 25.0000 78.1446 93.2163 19.5040 422 12.5000 0.00000 37.5000 3.65924 2.13130 11.9479 423 25.0000 0.00000 37.5000 5.15062 2.90026 12.0178 424 37.5000 0.00000 37.5000 7.81030 4.27159 12.1424 425 50.0000 0.00000 37.5000 11.8127 6.33523 12.3300 426 62.5000 0.00000 37.5000 17.3031 9.16610 12.5873 427 75.0000 0.00000 37.5000 24.4080 12.8294 12.9202 428 87.5000 0.00000 37.5000 33.2405 17.3835 13.3341 429 100.000 0.00000 37.5000 43.9035 22.8814 13.8337 430 0.00000 12.5000 37.5000 3.58140 2.84518 12.0898 431 12.5000 12.5000 37.5000 4.16730 3.14728 12.1173 432 25.0000 12.5000 37.5000 5.65868 3.91623 12.1872 433 37.5000 12.5000 37.5000 8.31836 5.28757 12.3118 434 50.0000 12.5000 37.5000 12.3207 7.35121 12.4993 435 62.5000 12.5000 37.5000 17.8111 10.1821 12.7566 436 75.0000 12.5000 37.5000 24.9160 13.8454 13.0895 437 87.5000 12.5000 37.5000 33.7486 18.3995 13.5034 438 0.00000 12.5000 25.0000 2.41727 2.37961 5.95827 439 0.00000 25.0000 37.5000 4.87462 5.43126 12.5209 440 12.5000 25.0000 37.5000 5.46052 5.73335 12.5484 441 25.0000 25.0000 37.5000 6.95189 6.50231 12.6182 442 37.5000 25.0000 37.5000 9.61157 7.87365 12.7429 443 50.0000 25.0000 37.5000 13.6140 9.93729 12.9304 444 62.5000 25.0000 37.5000 19.1043 12.7682 13.1877 445 75.0000 25.0000 37.5000 26.2093 16.4315 13.5206 446 87.5000 25.0000 37.5000 35.0418 20.9855 13.9345 447 87.5000 37.5000 37.5000 37.3481 25.5975 14.7033 448 0.00000 37.5000 12.5000 5.36402 9.31657 3.71994 449 25.0000 37.5000 25.0000 8.09407 10.6487 7.25545 450 25.0000 37.5000 37.5000 9.25819 11.1143 13.3870 451 50.0000 37.5000 37.5000 15.9202 14.5492 13.6992 452 62.5000 37.5000 37.5000 21.4106 17.3801 13.9565 453 75.0000 37.5000 37.5000 28.5156 21.0434 14.2894 454 0.00000 37.5000 25.0000 6.01679 9.57763 7.15812 455 0.00000 37.5000 37.5000 7.18091 10.0432 13.2897 456 0.00000 50.0000 37.5000 10.6515 16.9834 14.4466 457 12.5000 50.0000 37.5000 11.2374 17.2855 14.4740 458 25.0000 50.0000 37.5000 12.7288 18.0545 14.5439 459 37.5000 50.0000 37.5000 15.3885 19.4258 14.6685 460 50.0000 50.0000 37.5000 19.3908 21.4895 14.8561 461 62.5000 50.0000 37.5000 24.8812 24.3203 15.1133 462 75.0000 50.0000 37.5000 31.9862 27.9836 15.4463 463 87.5000 50.0000 37.5000 40.8187 32.5377 15.8601 464 12.5000 25.0000 0.00000 3.38719 4.90415 1.62789 465 12.5000 37.5000 0.00000 5.69348 9.51610 2.39666 466 12.5000 62.5000 37.5000 15.9983 26.8060 16.0610 467 25.0000 62.5000 37.5000 17.4897 27.5750 16.1309 468 37.5000 100.000 50.0000 44.9673 75.7727 33.1713 469 50.0000 62.5000 37.5000 24.1517 31.0099 16.4430 470 62.5000 62.5000 37.5000 29.6421 33.8408 16.7003 471 75.0000 62.5000 37.5000 36.7471 37.5041 17.0332 472 87.5000 62.5000 37.5000 45.5796 42.0582 17.4471 473 87.5000 75.0000 62.5000 55.8954 56.0400 41.3852 474 87.5000 75.0000 75.0000 59.0052 57.2837 57.7647 475 87.5000 87.5000 75.0000 66.6641 72.5995 60.3177 476 87.5000 100.000 75.0000 75.9104 91.0894 63.3998 477 37.5000 75.0000 37.5000 26.3103 41.2664 18.3092 478 50.0000 75.0000 37.5000 30.3127 43.3300 18.4967 479 62.5000 75.0000 37.5000 35.8031 46.1609 18.7540 480 75.0000 75.0000 37.5000 42.9080 49.8242 19.0869 481 87.5000 75.0000 37.5000 51.7405 54.3783 19.5008 482 87.5000 87.5000 37.5000 59.3994 69.6941 22.0538 483 12.5000 75.0000 37.5000 22.1592 39.1261 18.1146 484 12.5000 87.5000 37.5000 29.8182 54.4419 20.6677 485 25.0000 87.5000 37.5000 31.3096 55.2108 20.7375 486 37.5000 87.5000 37.5000 33.9692 56.5822 20.8622 487 50.0000 87.5000 37.5000 37.9716 58.6458 21.0497 488 62.5000 87.5000 37.5000 43.4620 61.4767 21.3070 489 75.0000 87.5000 37.5000 50.5669 65.1400 21.6399 490 6.25000 43.7500 6.25000 6.99165 12.5218 3.39151 491 0.00000 87.5000 37.5000 29.2323 54.1398 20.6402 492 0.00000 100.000 37.5000 38.4785 72.6297 23.7223 493 12.5000 100.000 37.5000 39.0645 72.9318 23.7498 494 25.0000 100.000 37.5000 40.5558 73.7008 23.8197 495 37.5000 100.000 37.5000 43.2155 75.0721 23.9443 496 50.0000 100.000 37.5000 47.2179 77.1358 24.1318 497 62.5000 100.000 37.5000 52.7083 79.9666 24.3891 498 75.0000 100.000 37.5000 59.8132 83.6299 24.7220 499 87.5000 100.000 37.5000 68.6457 88.1840 25.1359 500 100.000 100.000 37.5000 79.3087 93.6819 25.6355 501 100.000 100.000 50.0000 81.0605 94.3825 34.8625 502 25.0000 0.00000 50.0000 6.90243 3.60087 21.2448 503 37.5000 0.00000 50.0000 9.56211 4.97221 21.3694 504 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 505 62.5000 0.00000 50.0000 19.0549 9.86671 21.8143 506 75.0000 0.00000 50.0000 26.1598 13.5300 22.1472 507 87.5000 0.00000 50.0000 34.9923 18.0841 22.5611 508 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 509 100.000 37.5000 87.5000 59.1417 35.5469 73.8291 510 100.000 37.5000 100.000 63.8089 37.4135 98.4114 511 25.0000 12.5000 50.0000 7.41049 4.61685 21.4142 512 37.5000 12.5000 50.0000 10.0702 5.98819 21.5388 513 50.0000 12.5000 50.0000 14.0725 8.05183 21.7263 514 62.5000 12.5000 50.0000 19.5629 10.8827 21.9836 515 75.0000 12.5000 50.0000 26.6679 14.5460 22.3165 516 87.5000 12.5000 50.0000 35.5004 19.1001 22.7304 517 87.5000 62.5000 100.000 61.3773 48.3763 100.656 518 87.5000 75.0000 100.000 67.5382 60.6964 102.709 519 87.5000 87.5000 100.000 75.1972 76.0122 105.262 520 100.000 87.5000 100.000 85.8602 81.5101 105.762 521 37.5000 25.0000 50.0000 11.3634 8.57426 21.9699 522 50.0000 25.0000 50.0000 15.3658 10.6379 22.1574 523 62.5000 25.0000 50.0000 20.8562 13.4688 22.4147 524 75.0000 25.0000 50.0000 27.9611 17.1321 22.7476 525 87.5000 25.0000 50.0000 36.7936 21.6862 23.1615 526 100.000 25.0000 50.0000 47.4566 27.1840 23.6611 527 100.000 50.0000 87.5000 62.6123 42.4871 74.9860 528 100.000 50.0000 100.000 67.2794 44.3537 99.5683 529 100.000 62.5000 100.000 72.0404 53.8742 101.155 530 100.000 75.0000 100.000 78.2013 66.1943 103.209 531 50.0000 37.5000 50.0000 17.6721 15.2499 22.9262 532 62.5000 37.5000 50.0000 23.1625 18.0807 23.1835 533 75.0000 37.5000 50.0000 30.2674 21.7440 23.5164 534 87.5000 37.5000 50.0000 39.0999 26.2981 23.9303 535 100.000 37.5000 50.0000 49.7629 31.7960 24.4299 536 100.000 62.5000 87.5000 67.3732 52.0076 76.5730 537 100.000 75.0000 87.5000 73.5341 64.3277 78.6266 538 37.5000 37.5000 50.0000 13.6697 13.1862 22.7386 539 37.5000 50.0000 50.0000 17.1403 20.1264 23.8955 540 62.5000 50.0000 50.0000 26.6331 25.0209 24.3403 541 75.0000 50.0000 50.0000 33.7380 28.6843 24.6733 542 87.5000 50.0000 50.0000 42.5705 33.2383 25.0871 543 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 544 12.5000 50.0000 50.0000 12.9892 17.9861 23.7010 545 12.5000 62.5000 50.0000 17.7501 27.5066 25.2880 546 25.0000 62.5000 50.0000 19.2415 28.2756 25.3579 547 37.5000 62.5000 50.0000 21.9012 29.6469 25.4825 548 50.0000 62.5000 50.0000 25.9036 31.7106 25.6700 549 62.5000 62.5000 50.0000 31.3940 34.5414 25.9273 550 75.0000 62.5000 50.0000 38.4989 38.2047 26.2602 551 87.5000 62.5000 50.0000 47.3314 42.7588 26.6741 552 100.000 62.5000 50.0000 57.9944 48.2567 27.1738 553 100.000 62.5000 62.5000 60.3975 49.2178 39.8312 554 6.25000 56.2500 6.25000 11.0928 20.7230 4.75858 555 0.00000 62.5000 50.0000 17.1642 27.2045 25.2605 556 25.0000 75.0000 50.0000 25.4024 40.5957 27.4115 557 50.0000 75.0000 50.0000 32.0645 44.0306 27.7237 558 62.5000 75.0000 50.0000 37.5549 46.8615 27.9810 559 75.0000 75.0000 50.0000 44.6598 50.5248 28.3139 560 87.5000 75.0000 50.0000 53.4923 55.0789 28.7278 561 100.000 75.0000 50.0000 64.1553 60.5768 29.2274 562 100.000 75.0000 62.5000 66.5584 61.5379 41.8848 563 100.000 87.5000 87.5000 81.1931 79.6435 81.1796 564 37.5000 75.0000 50.0000 28.0621 41.9670 27.5361 565 37.5000 87.5000 50.0000 35.7211 57.2828 30.0892 566 50.0000 87.5000 50.0000 39.7234 59.3464 30.2767 567 62.5000 87.5000 50.0000 45.2138 62.1773 30.5340 568 75.0000 87.5000 50.0000 52.3187 65.8406 30.8669 569 87.5000 87.5000 50.0000 61.1513 70.3947 31.2808 570 100.000 87.5000 50.0000 71.8143 75.8926 31.7804 571 12.5000 87.5000 50.0000 31.5700 55.1425 29.8946 572 12.5000 100.000 50.0000 40.8163 73.6324 32.9768 573 12.5000 100.000 62.5000 43.2194 74.5935 45.6342 574 100.000 100.000 100.000 95.1065 100.000 108.844 575 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 576 62.5000 100.000 50.0000 54.4601 80.6672 33.6161 577 75.0000 100.000 50.0000 61.5650 84.3305 33.9490 578 87.5000 100.000 50.0000 70.3975 88.8846 34.3629 579 12.5000 0.00000 50.0000 5.41106 2.83192 21.1749 580 12.5000 0.00000 62.5000 7.81417 3.79301 33.8324 581 25.0000 0.00000 62.5000 9.30554 4.56196 33.9022 582 37.5000 0.00000 62.5000 11.9652 5.93330 34.0269 583 50.0000 0.00000 62.5000 15.9676 7.99694 34.2144 584 62.5000 0.00000 62.5000 21.4580 10.8278 34.4717 585 75.0000 0.00000 62.5000 28.5629 14.4911 34.8046 586 87.5000 0.00000 62.5000 37.3954 19.0452 35.2185 587 100.000 0.00000 62.5000 48.0584 24.5431 35.7181 588 12.5000 12.5000 50.0000 5.91912 3.84789 21.3443 589 12.5000 12.5000 62.5000 8.32223 4.80899 34.0017 590 25.0000 12.5000 62.5000 9.81360 5.57794 34.0716 591 37.5000 12.5000 62.5000 12.4733 6.94928 34.1962 592 50.0000 12.5000 62.5000 16.4757 9.01292 34.3838 593 62.5000 12.5000 62.5000 21.9661 11.8438 34.6410 594 75.0000 12.5000 62.5000 29.0710 15.5071 34.9740 595 87.5000 12.5000 62.5000 37.9035 20.0612 35.3878 596 100.000 12.5000 62.5000 48.5665 25.5591 35.8875 597 0.00000 25.0000 50.0000 6.62643 6.13187 21.7479 598 0.00000 25.0000 62.5000 9.02954 7.09297 34.4053 599 25.0000 25.0000 62.5000 11.1068 8.16402 34.5027 600 37.5000 25.0000 62.5000 13.7665 9.53536 34.6273 601 50.0000 25.0000 62.5000 17.7689 11.5990 34.8148 602 62.5000 25.0000 62.5000 23.2593 14.4299 35.0721 603 75.0000 25.0000 62.5000 30.3642 18.0932 35.4050 604 87.5000 25.0000 62.5000 39.1967 22.6472 35.8189 605 100.000 25.0000 62.5000 49.8597 28.1451 36.3186 606 100.000 25.0000 75.0000 52.9695 29.3888 52.6981 607 25.0000 37.5000 50.0000 11.0100 11.8149 22.6140 608 25.0000 37.5000 62.5000 13.4131 12.7760 35.2714 609 37.5000 37.5000 62.5000 16.0728 14.1473 35.3961 610 50.0000 37.5000 62.5000 20.0752 16.2109 35.5836 611 62.5000 37.5000 62.5000 25.5656 19.0418 35.8409 612 75.0000 37.5000 62.5000 32.6705 22.7051 36.1738 613 87.5000 37.5000 62.5000 41.5030 27.2592 36.5877 614 100.000 37.5000 62.5000 52.1660 32.7571 37.0873 615 100.000 37.5000 75.0000 55.2758 34.0008 53.4668 616 87.5000 75.0000 87.5000 62.8711 58.8298 78.1270 617 25.0000 50.0000 62.5000 16.8837 19.7162 36.4283 618 37.5000 50.0000 62.5000 19.5434 21.0875 36.5529 619 50.0000 50.0000 62.5000 23.5458 23.1512 36.7405 620 62.5000 50.0000 62.5000 29.0362 25.9820 36.9978 621 75.0000 50.0000 62.5000 36.1411 29.6453 37.3307 622 87.5000 50.0000 62.5000 44.9736 34.1994 37.7446 623 100.000 50.0000 62.5000 55.6366 39.6973 38.2442 624 100.000 50.0000 75.0000 58.7464 40.9410 54.6237 625 25.0000 50.0000 50.0000 14.4806 18.7551 23.7709 626 25.0000 62.5000 62.5000 21.6446 29.2367 38.0153 627 37.5000 62.5000 62.5000 24.3043 30.6080 38.1399 628 50.0000 62.5000 62.5000 28.3067 32.6716 38.3275 629 75.0000 62.5000 62.5000 40.9020 39.1658 38.9177 630 87.5000 62.5000 62.5000 49.7345 43.7199 39.3315 631 100.000 62.5000 75.0000 63.5073 50.4615 56.2107 632 100.000 75.0000 75.0000 69.6682 62.7816 58.2644 633 100.000 87.5000 75.0000 77.3272 78.0974 60.8174 634 25.0000 75.0000 62.5000 27.8055 41.5568 40.0690 635 37.5000 75.0000 62.5000 30.4652 42.9281 40.1936 636 50.0000 75.0000 62.5000 34.4676 44.9917 40.3811 637 62.5000 75.0000 62.5000 39.9580 47.8226 40.6384 638 75.0000 75.0000 62.5000 47.0629 51.4859 40.9713 639 6.25000 18.7500 6.25000 2.34153 3.22288 1.84146 640 6.25000 31.2500 6.25000 4.12024 6.77979 2.43437 641 0.00000 75.0000 50.0000 23.3251 39.5246 27.3142 642 0.00000 87.5000 50.0000 30.9841 54.8404 29.8672 643 0.00000 87.5000 62.5000 33.3872 55.8015 42.5246 644 37.5000 87.5000 62.5000 38.1242 58.2439 42.7466 645 50.0000 87.5000 62.5000 42.1266 60.3075 42.9341 646 62.5000 87.5000 62.5000 47.6169 63.1384 43.1914 647 75.0000 87.5000 62.5000 54.7219 66.8017 43.5243 648 87.5000 87.5000 62.5000 63.5544 71.3558 43.9382 649 100.000 87.5000 62.5000 74.2174 76.8537 44.4379 650 25.0000 75.0000 37.5000 23.6506 39.8951 18.1845 651 25.0000 100.000 50.0000 42.3076 74.4014 33.0466 652 25.0000 100.000 62.5000 44.7108 75.3625 45.7041 653 37.5000 100.000 62.5000 47.3704 76.7338 45.8287 654 50.0000 100.000 62.5000 51.3728 78.7975 46.0162 655 62.5000 100.000 62.5000 56.8632 81.6283 46.2735 656 75.0000 100.000 62.5000 63.9681 85.2916 46.6064 657 87.5000 100.000 62.5000 72.8006 89.8457 47.0203 658 100.000 100.000 62.5000 83.4636 95.3436 47.5200 659 100.000 100.000 75.0000 86.5734 96.5873 63.8995 660 25.0000 0.00000 75.0000 12.4153 5.80568 50.2817 661 37.5000 0.00000 75.0000 15.0750 7.17702 50.4064 662 50.0000 0.00000 75.0000 19.0774 9.24066 50.5939 663 62.5000 0.00000 75.0000 24.5678 12.0715 50.8512 664 75.0000 0.00000 75.0000 31.6727 15.7348 51.1841 665 87.5000 0.00000 75.0000 40.5052 20.2889 51.5980 666 100.000 0.00000 75.0000 51.1682 25.7868 52.0976 667 0.00000 12.5000 75.0000 10.8461 5.75060 50.3538 668 12.5000 12.5000 75.0000 11.4320 6.05270 50.3812 669 25.0000 12.5000 75.0000 12.9234 6.82166 50.4511 670 37.5000 12.5000 75.0000 15.5831 8.19300 50.5757 671 50.0000 12.5000 75.0000 19.5854 10.2566 50.7633 672 62.5000 12.5000 75.0000 25.0758 13.0875 51.0205 673 75.0000 12.5000 75.0000 32.1807 16.7508 51.3535 674 87.5000 12.5000 75.0000 41.0133 21.3049 51.7673 675 100.000 12.5000 75.0000 51.6763 26.8028 52.2670 676 12.5000 25.0000 62.5000 9.61545 7.39506 34.4328 677 12.5000 25.0000 75.0000 12.7252 8.63878 50.8123 678 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 679 37.5000 25.0000 75.0000 16.8763 10.7791 51.0068 680 50.0000 25.0000 75.0000 20.8787 12.8427 51.1944 681 62.5000 25.0000 75.0000 26.3690 15.6736 51.4516 682 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 683 87.5000 25.0000 75.0000 42.3065 23.8910 52.1984 684 100.000 25.0000 87.5000 56.8354 30.9350 73.0603 685 100.000 25.0000 100.000 61.5026 32.8015 97.6426 686 25.0000 25.0000 50.0000 8.70371 7.20292 21.8452 687 25.0000 37.5000 75.0000 16.5229 14.0197 51.6510 688 37.5000 37.5000 75.0000 19.1826 15.3910 51.7756 689 50.0000 37.5000 75.0000 23.1850 17.4547 51.9631 690 62.5000 37.5000 75.0000 28.6753 20.2855 52.2204 691 75.0000 37.5000 75.0000 35.7803 23.9488 52.5533 692 87.5000 37.5000 75.0000 44.6128 28.5029 52.9672 693 12.5000 37.5000 50.0000 9.51864 11.0459 22.5441 694 12.5000 37.5000 62.5000 11.9217 12.0070 35.2016 695 12.5000 50.0000 75.0000 18.5021 20.1909 52.7379 696 25.0000 50.0000 75.0000 19.9935 20.9599 52.8078 697 37.5000 50.0000 75.0000 22.6532 22.3312 52.9325 698 50.0000 50.0000 75.0000 26.6555 24.3949 53.1200 699 62.5000 50.0000 75.0000 32.1459 27.2257 53.3773 700 75.0000 50.0000 75.0000 39.2509 30.8891 53.7102 701 87.5000 50.0000 75.0000 48.0834 35.4431 54.1241 702 87.5000 50.0000 87.5000 51.9493 36.9893 74.4863 703 0.00000 12.5000 62.5000 7.73632 4.50689 33.9743 704 12.5000 62.5000 75.0000 23.2630 29.7114 54.3249 705 25.0000 62.5000 75.0000 24.7544 30.4804 54.3948 706 37.5000 62.5000 75.0000 27.4141 31.8517 54.5194 707 50.0000 62.5000 75.0000 31.4165 33.9154 54.7070 708 62.5000 62.5000 75.0000 36.9068 36.7462 54.9643 709 75.0000 62.5000 75.0000 44.0118 40.4095 55.2972 710 87.5000 62.5000 75.0000 52.8443 44.9636 55.7111 711 87.5000 62.5000 87.5000 56.7102 46.5097 76.0733 712 12.5000 75.0000 50.0000 23.9110 39.8267 27.3416 713 12.5000 75.0000 62.5000 26.3142 40.7878 39.9991 714 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 715 37.5000 75.0000 75.0000 33.5750 44.1718 56.5731 716 50.0000 75.0000 75.0000 37.5774 46.2355 56.7606 717 62.5000 75.0000 75.0000 43.0678 49.0663 57.0179 718 62.5000 87.5000 87.5000 54.5927 65.9282 79.9332 719 62.5000 87.5000 100.000 59.2598 67.7948 104.515 720 25.0000 87.5000 50.0000 33.0614 55.9115 29.9645 721 25.0000 87.5000 62.5000 35.4645 56.8726 42.6220 722 25.0000 87.5000 75.0000 38.5743 58.1163 59.0015 723 37.5000 87.5000 75.0000 41.2339 59.4876 59.1261 724 50.0000 87.5000 75.0000 45.2363 61.5512 59.3136 725 62.5000 87.5000 75.0000 50.7267 64.3821 59.5709 726 0.00000 75.0000 37.5000 21.5733 38.8240 18.0872 727 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 728 0.00000 100.000 62.5000 42.6335 74.2914 45.6067 729 0.00000 100.000 75.0000 45.7432 75.5351 61.9862 730 12.5000 100.000 75.0000 46.3292 75.8372 62.0137 731 25.0000 100.000 75.0000 47.8205 76.6062 62.0836 732 37.5000 100.000 75.0000 50.4802 77.9775 62.2082 733 50.0000 100.000 75.0000 54.4826 80.0412 62.3958 734 62.5000 100.000 75.0000 59.9730 82.8720 62.6530 735 75.0000 100.000 75.0000 67.0779 86.5354 62.9859 736 75.0000 87.5000 75.0000 57.8316 68.0454 59.9038 737 12.5000 0.00000 75.0000 10.9239 5.03672 50.2119 738 12.5000 0.00000 87.5000 14.7899 6.58285 70.5741 739 25.0000 0.00000 87.5000 16.2813 7.35181 70.6440 740 37.5000 0.00000 87.5000 18.9409 8.72315 70.7687 741 50.0000 0.00000 87.5000 22.9433 10.7868 70.9562 742 62.5000 0.00000 87.5000 28.4337 13.6177 71.2135 743 75.0000 0.00000 87.5000 35.5386 17.2810 71.5464 744 87.5000 0.00000 87.5000 44.3711 21.8350 71.9603 745 100.000 0.00000 87.5000 55.0341 27.3329 72.4599 746 100.000 0.00000 100.000 59.7013 29.1995 97.0422 747 100.000 12.5000 100.000 60.2093 30.2155 97.2115 748 25.0000 12.5000 87.5000 16.7893 8.36779 70.8134 749 37.5000 12.5000 87.5000 19.4490 9.73913 70.9380 750 50.0000 12.5000 87.5000 23.4514 11.8028 71.1255 751 62.5000 12.5000 87.5000 28.9418 14.6336 71.3828 752 75.0000 12.5000 87.5000 36.0467 18.2969 71.7157 753 87.5000 12.5000 87.5000 44.8792 22.8510 72.1296 754 100.000 12.5000 87.5000 55.5422 28.3489 72.6293 755 12.5000 12.5000 87.5000 15.2979 7.59883 70.7435 756 12.5000 25.0000 87.5000 16.5912 10.1849 71.1746 757 25.0000 25.0000 87.5000 18.0825 10.9539 71.2445 758 37.5000 25.0000 87.5000 20.7422 12.3252 71.3691 759 50.0000 25.0000 87.5000 24.7446 14.3888 71.5566 760 62.5000 25.0000 87.5000 30.2350 17.2197 71.8139 761 75.0000 25.0000 87.5000 37.3399 20.8830 72.1468 762 87.5000 25.0000 87.5000 46.1724 25.4371 72.5607 763 87.5000 25.0000 100.000 50.8395 27.3037 97.1430 764 12.5000 37.5000 75.0000 15.0315 13.2507 51.5811 765 12.5000 37.5000 87.5000 18.8975 14.7969 71.9433 766 25.0000 37.5000 87.5000 20.3888 15.5658 72.0132 767 37.5000 37.5000 87.5000 23.0485 16.9371 72.1379 768 50.0000 37.5000 87.5000 27.0509 19.0008 72.3254 769 62.5000 37.5000 87.5000 32.5413 21.8317 72.5827 770 75.0000 37.5000 87.5000 39.6462 25.4950 72.9156 771 87.5000 37.5000 87.5000 48.4787 30.0490 73.3295 772 87.5000 37.5000 100.000 53.1458 31.9156 97.9117 773 87.5000 50.0000 100.000 56.6164 38.8558 99.0686 774 12.5000 25.0000 50.0000 7.21234 6.43397 21.7754 775 25.0000 50.0000 87.5000 23.8594 22.5060 73.1701 776 37.5000 50.0000 87.5000 26.5191 23.8774 73.2947 777 50.0000 50.0000 87.5000 30.5215 25.9410 73.4823 778 62.5000 50.0000 87.5000 36.0119 28.7719 73.7395 779 75.0000 50.0000 87.5000 43.1168 32.4352 74.0725 780 75.0000 62.5000 87.5000 47.8777 41.9557 75.6594 781 75.0000 62.5000 100.000 52.5448 43.8222 100.242 782 12.5000 50.0000 87.5000 22.3681 21.7371 73.1002 783 12.5000 62.5000 87.5000 27.1290 31.2576 74.6872 784 25.0000 62.5000 87.5000 28.6203 32.0265 74.7571 785 37.5000 62.5000 87.5000 31.2800 33.3978 74.8817 786 50.0000 62.5000 87.5000 35.2824 35.4615 75.0693 787 62.5000 62.5000 87.5000 40.7728 38.2924 75.3265 788 62.5000 62.5000 100.000 45.4399 40.1589 99.9088 789 12.5000 50.0000 62.5000 15.3923 18.9472 36.3584 790 12.5000 62.5000 62.5000 20.1532 28.4677 37.9454 791 12.5000 75.0000 75.0000 29.4239 42.0315 56.3786 792 12.5000 75.0000 87.5000 33.2899 43.5776 76.7409 793 25.0000 75.0000 87.5000 34.7812 44.3466 76.8107 794 37.5000 75.0000 87.5000 37.4409 45.7179 76.9354 795 50.0000 75.0000 87.5000 41.4433 47.7816 77.1229 796 62.5000 75.0000 87.5000 46.9337 50.6124 77.3802 797 75.0000 75.0000 87.5000 54.0386 54.2758 77.7131 798 75.0000 87.5000 87.5000 61.6976 69.5916 80.2661 799 12.5000 87.5000 62.5000 33.9731 56.1036 42.5521 800 12.5000 87.5000 75.0000 37.0829 57.3473 58.9316 801 12.5000 87.5000 87.5000 40.9488 58.8934 79.2939 802 25.0000 87.5000 87.5000 42.4402 59.6624 79.3637 803 37.5000 87.5000 87.5000 45.0999 61.0337 79.4884 804 50.0000 87.5000 87.5000 49.1023 63.0974 79.6759 805 0.00000 75.0000 62.5000 25.7282 40.4857 39.9716 806 0.00000 87.5000 75.0000 36.4970 57.0452 58.9041 807 0.00000 87.5000 87.5000 40.3629 58.5913 79.2664 808 0.00000 100.000 87.5000 49.6092 77.0813 82.3485 809 12.5000 100.000 87.5000 50.1951 77.3834 82.3760 810 25.0000 100.000 87.5000 51.6865 78.1523 82.4459 811 37.5000 100.000 87.5000 54.3461 79.5237 82.5705 812 50.0000 100.000 87.5000 58.3485 81.5873 82.7580 813 62.5000 100.000 87.5000 63.8389 84.4182 83.0153 814 75.0000 100.000 87.5000 70.9438 88.0815 83.3482 815 87.5000 100.000 87.5000 79.7763 92.6356 83.7621 816 100.000 100.000 87.5000 90.4394 98.1334 84.2618 817 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 818 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 819 37.5000 0.00000 100.000 23.6081 10.5897 95.3509 820 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 821 62.5000 0.00000 100.000 33.1008 15.4842 95.7957 822 75.0000 0.00000 100.000 40.2058 19.1475 96.1287 823 87.5000 0.00000 100.000 49.0383 23.7016 96.5425 824 0.00000 12.5000 87.5000 14.7120 7.29673 70.7160 825 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 826 12.5000 12.5000 100.000 19.9651 9.46539 95.3258 827 25.0000 12.5000 100.000 21.4564 10.2343 95.3957 828 37.5000 12.5000 100.000 24.1161 11.6057 95.5203 829 50.0000 12.5000 100.000 28.1185 13.6693 95.7078 830 62.5000 12.5000 100.000 33.6089 16.5002 95.9651 831 75.0000 12.5000 100.000 40.7138 20.1635 96.2980 832 87.5000 12.5000 100.000 49.5463 24.7176 96.7119 833 0.00000 12.5000 50.0000 5.33321 3.54580 21.3168 834 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 835 12.5000 25.0000 100.000 21.2583 12.0515 95.7568 836 25.0000 25.0000 100.000 22.7497 12.8204 95.8267 837 37.5000 25.0000 100.000 25.4093 14.1918 95.9514 838 50.0000 25.0000 100.000 29.4117 16.2554 96.1389 839 62.5000 25.0000 100.000 34.9021 19.0863 96.3962 840 75.0000 25.0000 100.000 42.0070 22.7496 96.7291 841 0.00000 37.5000 75.0000 14.4456 12.9486 51.5536 842 0.00000 37.5000 87.5000 18.3115 14.4948 71.9159 843 0.00000 37.5000 100.000 22.9787 16.3613 96.4982 844 12.5000 37.5000 100.000 23.5646 16.6634 96.5256 845 25.0000 37.5000 100.000 25.0560 17.4324 96.5955 846 37.5000 37.5000 100.000 27.7156 18.8037 96.7201 847 50.0000 37.5000 100.000 31.7180 20.8673 96.9077 848 62.5000 37.5000 100.000 37.2084 23.6982 97.1649 849 75.0000 37.5000 100.000 44.3133 27.3615 97.4979 850 0.00000 25.0000 75.0000 12.1393 8.33668 50.7848 851 0.00000 25.0000 87.5000 16.0053 9.88281 71.1471 852 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 853 12.5000 50.0000 100.000 27.0352 23.6036 97.6825 854 25.0000 50.0000 100.000 28.5266 24.3726 97.7524 855 37.5000 50.0000 100.000 31.1862 25.7439 97.8770 856 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 857 62.5000 50.0000 100.000 40.6790 30.6384 98.3218 858 75.0000 50.0000 100.000 47.7839 34.3017 98.6547 859 0.00000 37.5000 62.5000 11.3358 11.7049 35.1741 860 0.00000 50.0000 87.5000 21.7821 21.4350 73.0728 861 0.00000 62.5000 100.000 31.2102 32.8220 99.2420 862 12.5000 62.5000 100.000 31.7961 33.1241 99.2695 863 25.0000 62.5000 100.000 33.2875 33.8931 99.3394 864 37.5000 62.5000 100.000 35.9471 35.2644 99.4640 865 50.0000 62.5000 100.000 39.9495 37.3280 99.6515 866 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 867 0.00000 62.5000 62.5000 19.5673 28.1656 37.9180 868 0.00000 75.0000 75.0000 28.8380 41.7294 56.3511 869 0.00000 75.0000 87.5000 32.7040 43.2756 76.7134 870 0.00000 75.0000 100.000 37.3711 45.1421 101.296 871 12.5000 75.0000 100.000 37.9570 45.4442 101.323 872 25.0000 75.0000 100.000 39.4484 46.2132 101.393 873 37.5000 75.0000 100.000 42.1081 47.5845 101.518 874 50.0000 75.0000 100.000 46.1104 49.6481 101.705 875 62.5000 75.0000 100.000 51.6008 52.4790 101.962 876 75.0000 75.0000 100.000 58.7057 56.1423 102.295 877 75.0000 87.5000 100.000 66.3647 71.4581 104.848 878 0.00000 62.5000 75.0000 22.6771 29.4093 54.2975 879 0.00000 62.5000 87.5000 26.5430 30.9555 74.6597 880 12.5000 87.5000 100.000 45.6160 60.7600 103.876 881 25.0000 87.5000 100.000 47.1073 61.5290 103.946 882 37.5000 87.5000 100.000 49.7670 62.9003 104.071 883 50.0000 87.5000 100.000 53.7694 64.9639 104.258 884 0.00000 37.5000 50.0000 8.93273 10.7438 22.5167 885 0.00000 50.0000 62.5000 14.8064 18.6451 36.3310 886 0.00000 50.0000 75.0000 17.9162 19.8888 52.7105 887 0.00000 87.5000 100.000 45.0301 60.4579 103.849 888 0.00000 100.000 100.000 54.2763 78.9478 106.931 889 12.5000 100.000 100.000 54.8622 79.2499 106.958 890 25.0000 100.000 100.000 56.3536 80.0189 107.028 891 37.5000 100.000 100.000 59.0133 81.3902 107.153 892 50.0000 100.000 100.000 63.0157 83.4539 107.340 893 62.5000 100.000 100.000 68.5060 86.2847 107.598 894 75.0000 100.000 100.000 75.6110 89.9480 107.930 895 87.5000 100.000 100.000 84.4435 94.5021 108.344 896 18.7500 6.25000 6.25000 2.47275 2.01960 1.60228 897 31.2500 6.25000 6.25000 4.52400 3.07723 1.69840 898 43.7500 6.25000 6.25000 7.83538 4.78459 1.85357 899 56.2500 6.25000 6.25000 12.5649 7.22317 2.07519 900 68.7500 6.25000 6.25000 18.8477 10.4626 2.36959 901 81.2500 6.25000 6.25000 26.8030 14.5644 2.74236 902 93.7500 6.25000 6.25000 36.5384 19.5840 3.19854 903 100.000 12.5000 50.0000 46.1634 24.5980 23.2301 904 18.7500 18.7500 6.25000 3.32910 3.73207 1.88774 905 31.2500 18.7500 6.25000 5.38035 4.78970 1.98385 906 43.7500 18.7500 6.25000 8.69173 6.49706 2.13902 907 56.2500 18.7500 6.25000 13.4213 8.93563 2.36064 908 68.7500 18.7500 6.25000 19.7041 12.1751 2.65504 909 81.2500 18.7500 6.25000 27.6593 16.2768 3.02781 910 93.7500 18.7500 6.25000 37.3948 21.2964 3.48400 911 100.000 87.5000 37.5000 70.0625 75.1920 22.5534 912 18.7500 31.2500 6.25000 5.10781 7.28899 2.48064 913 31.2500 31.2500 6.25000 7.15906 8.34662 2.57676 914 43.7500 31.2500 6.25000 10.4704 10.0540 2.73193 915 56.2500 31.2500 6.25000 15.2000 12.4926 2.95355 916 68.7500 31.2500 6.25000 21.4828 15.7320 3.24795 917 81.2500 31.2500 6.25000 29.4380 19.8337 3.62072 918 93.7500 31.2500 6.25000 39.1735 24.8534 4.07690 919 100.000 75.0000 37.5000 62.4035 59.8762 20.0004 920 18.7500 43.7500 6.25000 7.97921 13.0310 3.43779 921 31.2500 43.7500 6.25000 10.0305 14.0886 3.53391 922 43.7500 43.7500 6.25000 13.3418 15.7960 3.68907 923 56.2500 43.7500 6.25000 18.0714 18.2346 3.91069 924 68.7500 43.7500 6.25000 24.3542 21.4740 4.20509 925 81.2500 43.7500 6.25000 32.3095 25.5757 4.57786 926 93.7500 43.7500 6.25000 42.0449 30.5954 5.03405 927 93.7500 56.2500 6.25000 46.1461 38.7965 6.40111 928 18.7500 56.2500 6.25000 12.0804 21.2322 4.80485 929 31.2500 56.2500 6.25000 14.1316 22.2898 4.90097 930 43.7500 56.2500 6.25000 17.4430 23.9972 5.05614 931 56.2500 56.2500 6.25000 22.1726 26.4357 5.27775 932 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 933 81.2500 56.2500 6.25000 36.4106 33.7769 5.94493 934 81.2500 68.7500 81.2500 52.9401 49.1033 66.1280 935 81.2500 81.2500 93.7500 64.0995 64.6021 90.8714 936 93.7500 81.2500 93.7500 73.8349 69.6217 91.3275 937 18.7500 68.7500 6.25000 17.5284 32.1267 6.62087 938 43.7500 68.7500 6.25000 22.8910 34.8916 6.87215 939 56.2500 68.7500 6.25000 27.6206 37.3302 7.09377 940 68.7500 68.7500 6.25000 33.9033 40.5696 7.38817 941 81.2500 68.7500 6.25000 41.8586 44.6714 7.76094 942 93.7500 68.7500 6.25000 51.5941 49.6910 8.21713 943 6.25000 68.7500 6.25000 16.5408 31.6175 6.57459 944 6.25000 81.2500 6.25000 23.4391 45.4121 8.87404 945 31.2500 81.2500 6.25000 26.4779 46.9789 9.01643 946 43.7500 81.2500 6.25000 29.7893 48.6863 9.17160 947 56.2500 81.2500 6.25000 34.5189 51.1249 9.39322 948 68.7500 81.2500 6.25000 40.8016 54.3643 9.68762 949 81.2500 81.2500 6.25000 48.7569 58.4660 10.0604 950 93.7500 81.2500 6.25000 58.4923 63.4857 10.5166 951 18.7500 81.2500 6.25000 24.4267 45.9213 8.92032 952 18.7500 93.7500 6.25000 32.8686 62.8028 11.7343 953 31.2500 93.7500 6.25000 34.9198 63.8604 11.8304 954 43.7500 93.7500 6.25000 38.2312 65.5678 11.9856 955 56.2500 93.7500 6.25000 42.9608 68.0064 12.2072 956 68.7500 93.7500 6.25000 49.2436 71.2458 12.5016 957 81.2500 93.7500 6.25000 57.1988 75.3475 12.8744 958 93.7500 93.7500 6.25000 66.9343 80.3672 13.3306 959 93.7500 93.7500 18.7500 67.3665 80.5400 15.6073 960 18.7500 6.25000 18.7500 2.90500 2.19248 3.87900 961 31.2500 6.25000 18.7500 4.95625 3.25011 3.97512 962 43.7500 6.25000 18.7500 8.26763 4.95747 4.13028 963 56.2500 6.25000 18.7500 12.9972 7.39604 4.35190 964 68.7500 6.25000 18.7500 19.2800 10.6355 4.64630 965 81.2500 6.25000 18.7500 27.2352 14.7372 5.01907 966 93.7500 6.25000 18.7500 36.9707 19.7569 5.47526 967 93.7500 81.2500 81.2500 69.5738 67.9175 68.8837 968 100.000 100.000 100.000 95.1065 100.000 108.844 969 43.7500 18.7500 18.7500 9.12398 6.66993 4.41573 970 56.2500 18.7500 18.7500 13.8535 9.10851 4.63735 971 68.7500 18.7500 18.7500 20.1363 12.3479 4.93175 972 81.2500 18.7500 18.7500 28.0916 16.4497 5.30452 973 93.7500 18.7500 18.7500 37.8270 21.4693 5.76071 974 93.7500 56.2500 81.2500 57.2275 43.2284 64.7682 975 93.7500 56.2500 93.7500 61.4886 44.9326 87.2121 976 18.7500 31.2500 18.7500 5.54006 7.46186 4.75736 977 43.7500 31.2500 18.7500 10.9027 10.2268 5.00864 978 56.2500 31.2500 18.7500 15.6322 12.6654 5.23026 979 68.7500 31.2500 18.7500 21.9150 15.9048 5.52466 980 81.2500 31.2500 18.7500 29.8703 20.0066 5.89743 981 93.7500 31.2500 18.7500 39.6057 25.0262 6.35362 982 93.7500 56.2500 68.7500 53.7455 41.8359 46.4283 983 93.7500 68.7500 68.7500 59.1935 52.7303 48.2443 984 93.7500 81.2500 68.7500 66.0918 66.5250 50.5438 985 43.7500 43.7500 18.7500 13.7741 15.9689 5.96579 986 56.2500 43.7500 18.7500 18.5037 18.4074 6.18740 987 68.7500 43.7500 18.7500 24.7864 21.6469 6.48180 988 81.2500 43.7500 18.7500 32.7417 25.7486 6.85457 989 93.7500 43.7500 18.7500 42.4771 30.7682 7.31076 990 31.2500 31.2500 18.7500 7.59131 8.51949 4.85348 991 31.2500 43.7500 18.7500 10.4627 14.2615 5.81062 992 31.2500 56.2500 18.7500 14.5639 22.4627 7.17768 993 43.7500 56.2500 18.7500 17.8753 24.1700 7.33285 994 56.2500 56.2500 18.7500 22.6048 26.6086 7.55447 995 68.7500 56.2500 18.7500 28.8876 29.8480 7.84887 996 81.2500 56.2500 18.7500 36.8429 33.9498 8.22164 997 93.7500 56.2500 18.7500 46.5783 38.9694 8.67783 998 93.7500 68.7500 18.7500 52.0263 49.8639 10.4938 999 31.2500 68.7500 6.25000 19.5796 33.1843 6.71699 1000 31.2500 68.7500 18.7500 20.0119 33.3572 8.99370 1001 43.7500 68.7500 18.7500 23.3233 35.0645 9.14887 1002 56.2500 68.7500 18.7500 28.0528 37.5031 9.37049 1003 68.7500 68.7500 18.7500 34.3356 40.7425 9.66489 1004 81.2500 68.7500 18.7500 42.2909 44.8443 10.0377 1005 93.7500 81.2500 18.7500 58.9246 63.6585 12.7933 1006 18.7500 43.7500 18.7500 8.41147 13.2039 5.71450 1007 18.7500 56.2500 18.7500 12.5126 21.4050 7.08157 1008 31.2500 81.2500 18.7500 26.9102 47.1518 11.2931 1009 43.7500 81.2500 18.7500 30.2215 48.8592 11.4483 1010 56.2500 81.2500 18.7500 34.9511 51.2977 11.6699 1011 68.7500 81.2500 18.7500 41.2339 54.5372 11.9643 1012 81.2500 81.2500 18.7500 49.1892 58.6389 12.3371 1013 18.7500 68.7500 18.7500 17.9606 32.2995 8.89758 1014 18.7500 81.2500 18.7500 24.8589 46.0942 11.1970 1015 18.7500 93.7500 18.7500 33.3008 62.9757 14.0110 1016 31.2500 93.7500 18.7500 35.3521 64.0333 14.1071 1017 43.7500 93.7500 18.7500 38.6635 65.7407 14.2623 1018 56.2500 93.7500 18.7500 43.3930 68.1792 14.4839 1019 68.7500 93.7500 18.7500 49.6758 71.4186 14.7783 1020 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1021 6.25000 6.25000 18.7500 1.91743 1.68328 3.83272 1022 6.25000 6.25000 31.2500 2.81525 2.04236 8.56163 1023 18.7500 6.25000 31.2500 3.80282 2.55155 8.60790 1024 31.2500 6.25000 31.2500 5.85407 3.60918 8.70402 1025 43.7500 6.25000 31.2500 9.16545 5.31654 8.85919 1026 56.2500 6.25000 31.2500 13.8950 7.75511 9.08081 1027 68.7500 6.25000 31.2500 20.1778 10.9945 9.37521 1028 81.2500 6.25000 31.2500 28.1331 15.0963 9.74798 1029 93.7500 6.25000 31.2500 37.8685 20.1159 10.2042 1030 93.7500 31.2500 81.2500 50.2549 29.2852 62.4440 1031 93.7500 43.7500 93.7500 57.3875 36.7314 85.8450 1032 31.2500 18.7500 31.2500 6.71042 5.32164 8.98947 1033 43.7500 18.7500 31.2500 10.0218 7.02900 9.14464 1034 56.2500 18.7500 31.2500 14.7514 9.46758 9.36626 1035 68.7500 18.7500 31.2500 21.0341 12.7070 9.66066 1036 81.2500 18.7500 31.2500 28.9894 16.8088 10.0334 1037 93.7500 18.7500 31.2500 38.7249 21.8284 10.4896 1038 93.7500 31.2500 43.7500 41.9529 25.9650 18.7165 1039 93.7500 31.2500 56.2500 44.0230 26.7929 29.6199 1040 93.7500 43.7500 56.2500 46.8944 32.5349 30.5771 1041 56.2500 31.2500 31.2500 16.5301 13.0245 9.95917 1042 68.7500 31.2500 31.2500 22.8128 16.2639 10.2536 1043 81.2500 31.2500 31.2500 30.7681 20.3657 10.6263 1044 93.7500 31.2500 31.2500 40.5036 25.3853 11.0825 1045 93.7500 43.7500 43.7500 44.8243 31.7070 19.6736 1046 18.7500 31.2500 31.2500 6.43788 7.82093 9.48626 1047 18.7500 43.7500 31.2500 9.30929 13.5629 10.4434 1048 43.7500 43.7500 31.2500 14.6719 16.3279 10.6947 1049 56.2500 43.7500 31.2500 19.4015 18.7665 10.9163 1050 68.7500 43.7500 31.2500 25.6842 22.0059 11.2107 1051 81.2500 43.7500 31.2500 33.6395 26.1077 11.5835 1052 93.7500 43.7500 31.2500 43.3750 31.1273 12.0397 1053 93.7500 56.2500 43.7500 48.9255 39.9081 21.0407 1054 31.2500 43.7500 31.2500 11.3605 14.6206 10.5395 1055 31.2500 56.2500 31.2500 15.4617 22.8217 11.9066 1056 43.7500 56.2500 31.2500 18.7731 24.5291 12.0618 1057 56.2500 56.2500 31.2500 23.5026 26.9677 12.2834 1058 68.7500 56.2500 31.2500 29.7854 30.2071 12.5778 1059 81.2500 56.2500 31.2500 37.7407 34.3089 12.9505 1060 93.7500 56.2500 31.2500 47.4761 39.3285 13.4067 1061 100.000 62.5000 37.5000 56.2426 47.5561 17.9468 1062 18.7500 68.7500 31.2500 18.8584 32.6586 13.6265 1063 31.2500 68.7500 31.2500 20.9097 33.7162 13.7226 1064 43.7500 68.7500 31.2500 24.2211 35.4236 13.8778 1065 56.2500 68.7500 31.2500 28.9506 37.8622 14.0994 1066 68.7500 68.7500 31.2500 35.2334 41.1016 14.3938 1067 81.2500 68.7500 31.2500 43.1887 45.2033 14.7666 1068 93.7500 68.7500 31.2500 52.9241 50.2230 15.2227 1069 93.7500 81.2500 31.2500 59.8224 64.0176 17.5222 1070 6.25000 68.7500 18.7500 16.9731 31.7903 8.85131 1071 6.25000 81.2500 31.2500 24.7692 45.9440 15.8797 1072 43.7500 81.2500 31.2500 31.1194 49.2182 16.1772 1073 56.2500 81.2500 31.2500 35.8489 51.6568 16.3988 1074 68.7500 81.2500 31.2500 42.1317 54.8962 16.6932 1075 81.2500 81.2500 31.2500 50.0870 58.9980 17.0660 1076 6.25000 81.2500 18.7500 23.8713 45.5850 11.1508 1077 6.25000 93.7500 18.7500 32.3133 62.4665 13.9648 1078 6.25000 93.7500 31.2500 33.2111 62.8255 18.6937 1079 31.2500 93.7500 31.2500 36.2499 64.3924 18.8361 1080 43.7500 93.7500 31.2500 39.5613 66.0997 18.9912 1081 56.2500 93.7500 31.2500 44.2909 68.5383 19.2128 1082 68.7500 93.7500 31.2500 50.5736 71.7777 19.5072 1083 81.2500 93.7500 31.2500 58.5289 75.8795 19.8800 1084 93.7500 93.7500 31.2500 68.2643 80.8991 20.3362 1085 93.7500 93.7500 43.7500 69.7137 81.4788 27.9702 1086 18.7500 6.25000 43.7500 5.25219 3.13120 16.2419 1087 31.2500 6.25000 43.7500 7.30344 4.18884 16.3380 1088 43.7500 6.25000 43.7500 10.6148 5.89619 16.4932 1089 56.2500 6.25000 43.7500 15.3444 8.33477 16.7148 1090 68.7500 6.25000 43.7500 21.6272 11.5742 17.0092 1091 81.2500 6.25000 43.7500 29.5824 15.6760 17.3820 1092 93.7500 6.25000 43.7500 39.3179 20.6956 17.8381 1093 93.7500 18.7500 81.2500 48.4762 25.7283 61.8511 1094 93.7500 18.7500 93.7500 52.7374 27.4325 84.2950 1095 93.7500 31.2500 93.7500 54.5161 30.9894 84.8879 1096 43.7500 18.7500 43.7500 11.4712 7.60866 16.7786 1097 56.2500 18.7500 43.7500 16.2007 10.0472 17.0002 1098 68.7500 18.7500 43.7500 22.4835 13.2867 17.2946 1099 81.2500 18.7500 43.7500 30.4388 17.3884 17.6674 1100 93.7500 18.7500 43.7500 40.1742 22.4080 18.1236 1101 93.7500 18.7500 56.2500 42.2443 23.2360 29.0270 1102 31.2500 18.7500 43.7500 8.15979 5.90130 16.6235 1103 31.2500 31.2500 43.7500 9.93850 9.45822 17.2164 1104 43.7500 31.2500 43.7500 13.2499 11.1656 17.3715 1105 81.2500 31.2500 43.7500 32.2175 20.9453 18.2603 1106 100.000 100.000 100.000 95.1065 100.000 108.844 1107 6.25000 18.7500 18.7500 2.77379 3.39575 4.11818 1108 6.25000 31.2500 18.7500 4.55249 6.95267 4.71108 1109 6.25000 43.7500 18.7500 7.42390 12.6947 5.66823 1110 6.25000 43.7500 31.2500 8.32172 13.0537 10.3971 1111 31.2500 43.7500 43.7500 12.8099 15.2002 18.1735 1112 56.2500 43.7500 43.7500 20.8508 19.3462 18.5503 1113 68.7500 43.7500 43.7500 27.1336 22.5856 18.8447 1114 81.2500 43.7500 43.7500 35.0889 26.6873 19.2175 1115 81.2500 68.7500 68.7500 49.4581 47.7107 47.7881 1116 6.25000 56.2500 18.7500 11.5251 20.8959 7.03529 1117 18.7500 56.2500 31.2500 13.4104 21.7641 11.8105 1118 31.2500 56.2500 43.7500 16.9111 23.4014 19.5406 1119 43.7500 56.2500 43.7500 20.2224 25.1088 19.6957 1120 56.2500 56.2500 43.7500 24.9520 27.5473 19.9174 1121 68.7500 56.2500 43.7500 31.2348 30.7868 20.2118 1122 81.2500 56.2500 43.7500 39.1901 34.8885 20.5845 1123 93.7500 56.2500 56.2500 50.9956 40.7361 31.9441 1124 93.7500 68.7500 56.2500 56.4436 51.6305 33.7601 1125 93.7500 81.2500 56.2500 63.3419 65.4252 36.0596 1126 31.2500 68.7500 43.7500 22.3591 34.2959 21.3566 1127 43.7500 68.7500 43.7500 25.6704 36.0032 21.5117 1128 56.2500 68.7500 43.7500 30.4000 38.4418 21.7334 1129 68.7500 68.7500 43.7500 36.6828 41.6812 22.0278 1130 81.2500 68.7500 43.7500 44.6381 45.7830 22.4005 1131 93.7500 68.7500 43.7500 54.3735 50.8026 22.8567 1132 93.7500 81.2500 43.7500 61.2718 64.5973 25.1562 1133 31.2500 81.2500 31.2500 27.8080 47.5109 16.0221 1134 31.2500 81.2500 43.7500 29.2574 48.0905 23.6560 1135 43.7500 81.2500 43.7500 32.5687 49.7979 23.8112 1136 56.2500 81.2500 43.7500 37.2983 52.2365 24.0328 1137 68.7500 81.2500 43.7500 43.5811 55.4759 24.3272 1138 81.2500 81.2500 43.7500 51.5363 59.5776 24.7000 1139 18.7500 81.2500 31.2500 25.7567 46.4532 15.9259 1140 18.7500 93.7500 31.2500 34.1987 63.3347 18.7399 1141 18.7500 93.7500 43.7500 35.6480 63.9144 26.3739 1142 31.2500 93.7500 43.7500 37.6993 64.9720 26.4700 1143 43.7500 93.7500 43.7500 41.0107 66.6794 26.6252 1144 56.2500 93.7500 43.7500 45.7402 69.1180 26.8468 1145 68.7500 93.7500 43.7500 52.0230 72.3574 27.1412 1146 81.2500 93.7500 43.7500 59.9783 76.4591 27.5140 1147 6.25000 6.25000 43.7500 4.26462 2.62201 16.1956 1148 6.25000 6.25000 56.2500 6.33472 3.44992 27.0990 1149 18.7500 6.25000 56.2500 7.32229 3.95911 27.1453 1150 31.2500 6.25000 56.2500 9.37354 5.01674 27.2414 1151 43.7500 6.25000 56.2500 12.6849 6.72410 27.3966 1152 56.2500 6.25000 56.2500 17.4145 9.16268 27.6182 1153 68.7500 6.25000 56.2500 23.6972 12.4021 27.9126 1154 81.2500 6.25000 56.2500 31.6525 16.5039 28.2854 1155 93.7500 6.25000 56.2500 41.3880 21.5235 28.7416 1156 6.25000 18.7500 43.7500 5.12097 4.33448 16.4811 1157 6.25000 18.7500 56.2500 7.19107 5.16239 27.3845 1158 31.2500 18.7500 56.2500 10.2299 6.72921 27.5269 1159 43.7500 18.7500 56.2500 13.5413 8.43657 27.6820 1160 56.2500 18.7500 56.2500 18.2708 10.8751 27.9037 1161 68.7500 18.7500 56.2500 24.5536 14.1146 28.1981 1162 81.2500 18.7500 56.2500 32.5089 18.2163 28.5708 1163 93.7500 18.7500 68.7500 44.9942 24.3358 43.5112 1164 93.7500 31.2500 68.7500 46.7730 27.8927 44.1041 1165 18.7500 18.7500 31.2500 4.65917 4.26401 8.89336 1166 18.7500 31.2500 43.7500 7.88725 8.40059 17.1202 1167 43.7500 31.2500 56.2500 15.3200 11.9935 28.2749 1168 56.2500 31.2500 56.2500 20.0495 14.4321 28.4966 1169 68.7500 31.2500 56.2500 26.3323 17.6715 28.7910 1170 81.2500 31.2500 56.2500 34.2876 21.7732 29.1637 1171 93.7500 43.7500 68.7500 49.6444 33.6347 45.0612 1172 93.7500 43.7500 81.2500 53.1263 35.0272 63.4011 1173 93.7500 68.7500 81.2500 62.6755 54.1229 66.5842 1174 93.7500 68.7500 93.7500 66.9366 55.8271 89.0281 1175 56.2500 31.2500 43.7500 17.9794 13.6042 17.5931 1176 56.2500 43.7500 56.2500 22.9209 20.1741 29.4537 1177 68.7500 43.7500 56.2500 29.2037 23.4135 29.7481 1178 81.2500 43.7500 56.2500 37.1590 27.5153 30.1209 1179 43.7500 31.2500 31.2500 11.8005 10.5859 9.73755 1180 43.7500 43.7500 56.2500 18.1914 17.7355 29.2321 1181 31.2500 43.7500 56.2500 14.8800 16.0281 29.0769 1182 31.2500 56.2500 56.2500 18.9812 24.2293 30.4440 1183 43.7500 56.2500 56.2500 22.2925 25.9367 30.5992 1184 68.7500 56.2500 56.2500 33.3049 31.6147 31.1152 1185 81.2500 56.2500 56.2500 41.2601 35.7164 31.4879 1186 81.2500 56.2500 68.7500 44.0101 36.8162 45.9721 1187 81.2500 56.2500 81.2500 47.4921 38.2088 64.3120 1188 18.7500 68.7500 56.2500 22.3779 34.0662 32.1639 1189 31.2500 68.7500 56.2500 24.4292 35.1238 32.2600 1190 43.7500 68.7500 56.2500 27.7405 36.8312 32.4152 1191 56.2500 68.7500 56.2500 32.4701 39.2697 32.6368 1192 68.7500 68.7500 56.2500 38.7529 42.5091 32.9312 1193 81.2500 68.7500 56.2500 46.7082 46.6109 33.3040 1194 18.7500 68.7500 43.7500 20.3078 33.2383 21.2605 1195 18.7500 81.2500 43.7500 27.2061 47.0329 23.5599 1196 18.7500 81.2500 56.2500 29.2762 47.8608 34.4633 1197 31.2500 81.2500 56.2500 31.3275 48.9184 34.5595 1198 43.7500 81.2500 56.2500 34.6388 50.6258 34.7146 1199 56.2500 81.2500 56.2500 39.3684 53.0644 34.9362 1200 68.7500 81.2500 56.2500 45.6512 56.3038 35.2306 1201 81.2500 81.2500 56.2500 53.6064 60.4056 35.6034 1202 81.2500 81.2500 68.7500 56.3564 61.5054 50.0876 1203 6.25000 93.7500 6.25000 31.8810 62.2936 11.6880 1204 18.7500 93.7500 56.2500 37.7181 64.7423 37.2773 1205 31.2500 93.7500 56.2500 39.7694 65.7999 37.3735 1206 43.7500 93.7500 56.2500 43.0808 67.5073 37.5286 1207 56.2500 93.7500 56.2500 47.8103 69.9459 37.7502 1208 68.7500 93.7500 56.2500 54.0931 73.1853 38.0446 1209 81.2500 93.7500 56.2500 62.0484 77.2870 38.4174 1210 93.7500 93.7500 56.2500 71.7838 82.3067 38.8736 1211 93.7500 93.7500 68.7500 74.5337 83.4065 53.3578 1212 18.7500 6.25000 68.7500 10.0722 5.05891 41.6295 1213 31.2500 6.25000 68.7500 12.1235 6.11654 41.7256 1214 43.7500 6.25000 68.7500 15.4348 7.82390 41.8808 1215 56.2500 6.25000 68.7500 20.1644 10.2625 42.1024 1216 68.7500 6.25000 68.7500 26.4472 13.5019 42.3968 1217 81.2500 6.25000 68.7500 34.4025 17.6037 42.7695 1218 93.7500 6.25000 68.7500 44.1379 22.6233 43.2257 1219 18.7500 18.7500 56.2500 8.17864 5.67158 27.4308 1220 18.7500 18.7500 68.7500 10.9286 6.77138 41.9149 1221 31.2500 18.7500 68.7500 12.9798 7.82901 42.0110 1222 43.7500 18.7500 68.7500 16.2912 9.53636 42.1662 1223 56.2500 18.7500 68.7500 21.0208 11.9749 42.3878 1224 68.7500 18.7500 68.7500 27.3035 15.2144 42.6822 1225 81.2500 18.7500 68.7500 35.2588 19.3161 43.0550 1226 81.2500 31.2500 93.7500 44.7806 25.9698 84.4317 1227 81.2500 56.2500 93.7500 51.7532 39.9130 86.7559 1228 31.2500 31.2500 56.2500 12.0086 10.2861 28.1198 1229 31.2500 31.2500 68.7500 14.7585 11.3859 42.6039 1230 43.7500 31.2500 68.7500 18.0699 13.0933 42.7591 1231 56.2500 31.2500 68.7500 22.7995 15.5319 42.9807 1232 68.7500 31.2500 68.7500 29.0822 18.7713 43.2751 1233 81.2500 31.2500 68.7500 37.0375 22.8730 43.6479 1234 81.2500 68.7500 93.7500 57.2012 50.8075 88.5719 1235 6.25000 31.2500 56.2500 8.96978 8.71930 27.9774 1236 6.25000 43.7500 68.7500 14.5911 15.5611 43.4187 1237 31.2500 43.7500 68.7500 17.6299 17.1279 43.5611 1238 43.7500 43.7500 68.7500 20.9413 18.8353 43.7163 1239 56.2500 43.7500 68.7500 25.6709 21.2739 43.9379 1240 68.7500 43.7500 68.7500 31.9536 24.5133 44.2323 1241 81.2500 43.7500 68.7500 39.9089 28.6151 44.6050 1242 18.7500 31.2500 56.2500 9.95735 9.22850 28.0237 1243 18.7500 31.2500 68.7500 12.7073 10.3283 42.5078 1244 18.7500 56.2500 68.7500 19.6798 24.2715 44.8320 1245 31.2500 56.2500 68.7500 21.7311 25.3291 44.9282 1246 43.7500 56.2500 68.7500 25.0425 27.0365 45.0833 1247 56.2500 56.2500 68.7500 29.7720 29.4750 45.3049 1248 68.7500 56.2500 68.7500 36.0548 32.7145 45.5993 1249 18.7500 43.7500 43.7500 10.7587 14.1426 18.0774 1250 18.7500 56.2500 43.7500 14.8598 22.3438 19.4444 1251 18.7500 56.2500 56.2500 16.9299 23.1717 30.3479 1252 18.7500 68.7500 68.7500 25.1278 35.1660 46.6481 1253 31.2500 68.7500 68.7500 27.1791 36.2236 46.7442 1254 43.7500 68.7500 68.7500 30.4905 37.9310 46.8993 1255 56.2500 68.7500 68.7500 35.2200 40.3695 47.1210 1256 56.2500 81.2500 81.2500 45.6003 55.5567 67.7603 1257 6.25000 56.2500 31.2500 12.4229 21.2549 11.7642 1258 6.25000 68.7500 31.2500 17.8709 32.1494 13.5802 1259 6.25000 68.7500 56.2500 21.3904 33.5570 32.1176 1260 31.2500 81.2500 68.7500 34.0774 50.0182 49.0436 1261 43.7500 81.2500 68.7500 37.3888 51.7256 49.1988 1262 56.2500 81.2500 68.7500 42.1183 54.1642 49.4204 1263 68.7500 81.2500 68.7500 48.4011 57.4036 49.7148 1264 6.25000 81.2500 56.2500 28.2886 47.3516 34.4171 1265 6.25000 93.7500 56.2500 36.7306 64.2331 37.2311 1266 6.25000 93.7500 68.7500 39.4805 65.3329 51.7152 1267 18.7500 93.7500 68.7500 40.4681 65.8421 51.7615 1268 31.2500 93.7500 68.7500 42.5193 66.8997 51.8576 1269 43.7500 93.7500 68.7500 45.8307 68.6071 52.0128 1270 56.2500 93.7500 68.7500 50.5602 71.0457 52.2344 1271 68.7500 93.7500 68.7500 56.8430 74.2851 52.5288 1272 81.2500 93.7500 68.7500 64.7983 78.3868 52.9016 1273 6.25000 6.25000 68.7500 9.08465 4.54972 41.5832 1274 6.25000 6.25000 81.2500 12.5666 5.94229 59.9231 1275 18.7500 6.25000 81.2500 13.5542 6.45148 59.9694 1276 31.2500 6.25000 81.2500 15.6054 7.50911 60.0655 1277 43.7500 6.25000 81.2500 18.9168 9.21647 60.2207 1278 56.2500 6.25000 81.2500 23.6464 11.6550 60.4423 1279 68.7500 6.25000 81.2500 29.9292 14.8945 60.7367 1280 81.2500 6.25000 81.2500 37.8844 18.9962 61.1094 1281 93.7500 6.25000 81.2500 47.6199 24.0159 61.5656 1282 93.7500 6.25000 93.7500 51.8810 25.7200 84.0095 1283 18.7500 18.7500 43.7500 6.10854 4.84367 16.5273 1284 31.2500 18.7500 81.2500 16.4618 9.22158 60.3509 1285 43.7500 18.7500 81.2500 19.7732 10.9289 60.5061 1286 56.2500 18.7500 81.2500 24.5027 13.3675 60.7277 1287 68.7500 18.7500 81.2500 30.7855 16.6069 61.0221 1288 81.2500 18.7500 81.2500 38.7408 20.7087 61.3949 1289 81.2500 18.7500 93.7500 43.0019 22.4129 83.8388 1290 18.7500 18.7500 81.2500 14.4105 8.16395 60.2548 1291 18.7500 31.2500 81.2500 16.1892 11.7209 60.8477 1292 31.2500 31.2500 81.2500 18.2405 12.7785 60.9439 1293 43.7500 31.2500 81.2500 21.5519 14.4859 61.0990 1294 56.2500 31.2500 81.2500 26.2814 16.9244 61.3206 1295 68.7500 31.2500 81.2500 32.5642 20.1638 61.6150 1296 81.2500 31.2500 81.2500 40.5195 24.2656 61.9878 1297 18.7500 43.7500 56.2500 12.8288 14.9705 28.9808 1298 18.7500 43.7500 68.7500 15.5787 16.0703 43.4650 1299 18.7500 43.7500 81.2500 19.0607 17.4629 61.8049 1300 31.2500 43.7500 81.2500 21.1119 18.5205 61.9010 1301 43.7500 43.7500 81.2500 24.4233 20.2279 62.0562 1302 56.2500 43.7500 81.2500 29.1528 22.6664 62.2778 1303 68.7500 43.7500 81.2500 35.4356 25.9059 62.5722 1304 81.2500 43.7500 81.2500 43.3909 30.0076 62.9450 1305 81.2500 43.7500 93.7500 47.6520 31.7118 85.3888 1306 6.25000 18.7500 68.7500 9.94100 6.26218 41.8686 1307 18.7500 56.2500 81.2500 23.1618 25.6640 63.1719 1308 31.2500 56.2500 81.2500 25.2131 26.7217 63.2681 1309 43.7500 56.2500 81.2500 28.5244 28.4290 63.4232 1310 56.2500 56.2500 81.2500 33.2540 30.8676 63.6448 1311 68.7500 56.2500 81.2500 39.5368 34.1070 63.9392 1312 68.7500 68.7500 81.2500 44.9848 45.0015 65.7553 1313 6.25000 56.2500 43.7500 13.8722 21.8346 19.3982 1314 6.25000 56.2500 56.2500 15.9423 22.6625 30.3016 1315 18.7500 68.7500 81.2500 28.6098 36.5585 64.9880 1316 31.2500 68.7500 81.2500 30.6611 37.6162 65.0841 1317 43.7500 68.7500 81.2500 33.9724 39.3235 65.2392 1318 56.2500 68.7500 81.2500 38.7020 41.7621 65.4609 1319 68.7500 81.2500 81.2500 51.8831 58.7962 68.0547 1320 68.7500 81.2500 93.7500 56.1442 60.5003 90.4986 1321 6.25000 81.2500 68.7500 31.0386 48.4514 48.9012 1322 6.25000 81.2500 81.2500 34.5205 49.8440 67.2411 1323 18.7500 81.2500 81.2500 35.5081 50.3532 67.2874 1324 31.2500 81.2500 81.2500 37.5594 51.4108 67.3835 1325 43.7500 81.2500 81.2500 40.8707 53.1182 67.5387 1326 6.25000 68.7500 43.7500 19.3203 32.7291 21.2142 1327 6.25000 81.2500 43.7500 26.2185 46.5237 23.5136 1328 6.25000 93.7500 43.7500 34.6605 63.4052 26.3276 1329 6.25000 93.7500 81.2500 42.9625 66.7255 70.0551 1330 18.7500 93.7500 81.2500 43.9500 67.2347 70.1014 1331 31.2500 93.7500 81.2500 46.0013 68.2923 70.1975 1332 43.7500 93.7500 81.2500 49.3127 69.9997 70.3527 1333 56.2500 93.7500 81.2500 54.0422 72.4382 70.5743 1334 68.7500 93.7500 81.2500 60.3250 75.6777 70.8687 1335 81.2500 93.7500 81.2500 68.2803 79.7794 71.2415 1336 93.7500 93.7500 81.2500 78.0157 84.7990 71.6977 1337 6.25000 6.25000 93.7500 16.8278 7.64648 82.3670 1338 18.7500 6.25000 93.7500 17.8153 8.15567 82.4133 1339 31.2500 6.25000 93.7500 19.8666 9.21330 82.5094 1340 43.7500 6.25000 93.7500 23.1780 10.9207 82.6645 1341 56.2500 6.25000 93.7500 27.9075 13.3592 82.8862 1342 68.7500 6.25000 93.7500 34.1903 16.5987 83.1806 1343 81.2500 6.25000 93.7500 42.1456 20.7004 83.5533 1344 6.25000 18.7500 81.2500 13.4230 7.65475 60.2086 1345 6.25000 18.7500 93.7500 17.6841 9.35894 82.6524 1346 18.7500 18.7500 93.7500 18.6717 9.86813 82.6987 1347 31.2500 18.7500 93.7500 20.7229 10.9258 82.7948 1348 43.7500 18.7500 93.7500 24.0343 12.6331 82.9500 1349 56.2500 18.7500 93.7500 28.7639 15.0717 83.1716 1350 68.7500 18.7500 93.7500 35.0466 18.3111 83.4660 1351 6.25000 31.2500 68.7500 11.7197 9.81910 42.4616 1352 6.25000 31.2500 81.2500 15.2017 11.2117 60.8015 1353 6.25000 31.2500 93.7500 19.4628 12.9159 83.2453 1354 18.7500 31.2500 93.7500 20.4504 13.4251 83.2916 1355 31.2500 31.2500 93.7500 22.5016 14.4827 83.3877 1356 43.7500 31.2500 93.7500 25.8130 16.1900 83.5429 1357 56.2500 31.2500 93.7500 30.5426 18.6286 83.7645 1358 68.7500 31.2500 93.7500 36.8254 21.8680 84.0589 1359 68.7500 43.7500 93.7500 39.6968 27.6100 85.0161 1360 6.25000 43.7500 81.2500 18.0731 16.9537 61.7586 1361 6.25000 43.7500 93.7500 22.3342 18.6579 84.2025 1362 18.7500 43.7500 93.7500 23.3218 19.1671 84.2488 1363 31.2500 43.7500 93.7500 25.3730 20.2247 84.3449 1364 43.7500 43.7500 93.7500 28.6844 21.9320 84.5000 1365 56.2500 43.7500 93.7500 33.4140 24.3706 84.7217 1366 6.25000 43.7500 56.2500 11.8412 14.4613 28.9345 1367 6.25000 56.2500 68.7500 18.6923 23.7623 44.7858 1368 6.25000 56.2500 81.2500 22.1743 25.1549 63.1257 1369 6.25000 56.2500 93.7500 26.4354 26.8590 85.5695 1370 18.7500 56.2500 93.7500 27.4230 27.3682 85.6158 1371 31.2500 56.2500 93.7500 29.4742 28.4259 85.7119 1372 43.7500 56.2500 93.7500 32.7856 30.1332 85.8671 1373 56.2500 56.2500 93.7500 37.5151 32.5718 86.0887 1374 68.7500 56.2500 93.7500 43.7979 35.8112 86.3831 1375 68.7500 68.7500 93.7500 49.2459 46.7057 88.1991 1376 6.25000 68.7500 81.2500 27.6223 36.0493 64.9417 1377 6.25000 68.7500 93.7500 31.8834 37.7535 87.3856 1378 18.7500 68.7500 93.7500 32.8710 38.2627 87.4318 1379 31.2500 68.7500 93.7500 34.9222 39.3204 87.5280 1380 43.7500 68.7500 93.7500 38.2336 41.0277 87.6831 1381 56.2500 68.7500 93.7500 42.9632 43.4663 87.9047 1382 56.2500 81.2500 93.7500 49.8614 57.2609 90.2042 1383 6.25000 18.7500 31.2500 3.67160 3.75482 8.84708 1384 6.25000 31.2500 43.7500 6.89968 7.89139 17.0740 1385 18.7500 81.2500 68.7500 32.0261 48.9606 48.9475 1386 18.7500 81.2500 93.7500 39.7692 52.0574 89.7313 1387 31.2500 81.2500 93.7500 41.8205 53.1150 89.8274 1388 43.7500 81.2500 93.7500 45.1319 54.8223 89.9826 1389 6.25000 31.2500 31.2500 5.45031 7.31174 9.43999 1390 6.25000 43.7500 43.7500 9.77109 13.6334 18.0311 1391 6.25000 68.7500 68.7500 24.1403 34.6568 46.6018 1392 6.25000 81.2500 93.7500 38.7817 51.5482 89.6850 1393 6.25000 93.7500 93.7500 47.2236 68.4297 92.4990 1394 18.7500 93.7500 93.7500 48.2112 68.9389 92.5453 1395 31.2500 93.7500 93.7500 50.2624 69.9965 92.6414 1396 43.7500 93.7500 93.7500 53.5738 71.7038 92.7966 1397 56.2500 93.7500 93.7500 58.3034 74.1424 93.0182 1398 68.7500 93.7500 93.7500 64.5861 77.3818 93.3126 1399 81.2500 93.7500 93.7500 72.5414 81.4836 93.6854 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s37-g109-m0-f1906-caRGB.ti1000644 000765 000000 00000444725 12261120515 022626 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1683" CREATED "Wed Dec 18 02:26:26 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "109" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045794 99.996943 108.895612" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "37" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1906 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 2 20.87830000 18.61430000 28.03050000 3.447680000 2.962810000 6.306580000 3 19.95270000 31.55810000 41.20160000 5.811400000 6.894760000 14.74010000 4 24.94280000 46.56060000 41.25630000 8.860340000 14.15570000 15.58710000 5 32.64400000 70.53730000 80.19210000 25.11060000 36.28400000 64.51400000 6 0.000000000 15.67260000 36.62200000 2.381370000 1.891700000 11.00340000 7 0.000000000 28.18720000 55.41220000 6.283020000 5.927840000 27.49600000 8 0.000000000 30.78080000 66.41420000 9.041450000 7.760520000 40.82920000 9 0.000000000 38.08200000 81.39340000 14.18710000 12.29260000 63.87680000 10 21.35390000 66.53530000 82.65090000 21.88420000 31.55400000 68.16820000 11 89.77270000 70.13510000 100.0000000 72.81430000 59.73560000 104.4970000 12 47.03520000 38.21790000 44.82910000 16.43960000 14.51510000 18.34480000 13 49.54600000 55.27010000 75.48660000 27.48520000 27.43090000 55.90210000 14 79.25800000 80.05220000 100.0000000 64.78360000 63.82080000 105.0800000 15 82.58670000 87.44610000 100.0000000 70.49820000 73.75670000 106.1620000 16 21.96800000 29.44500000 72.83240000 12.69110000 9.073010000 49.94080000 17 29.46460000 42.52680000 73.39710000 16.28780000 15.40520000 51.47160000 18 35.51660000 48.34520000 100.0000000 28.49140000 23.26570000 100.8330000 19 58.21300000 100.0000000 100.0000000 54.92030000 79.30760000 107.0160000 20 19.17100000 0.000000000 9.897990000 1.641580000 0.832976000 0.684049000 21 20.44030000 0.000000000 0.000000000 1.756200000 0.905527000 0.082266100 22 22.43590000 0.000000000 0.000000000 2.155500000 1.111410000 0.100971000 23 24.50980000 0.000000000 0.000000000 2.618120000 1.349950000 0.122641000 24 26.66670000 0.000000000 0.000000000 3.151700000 1.625070000 0.147636000 25 25.62440000 10.73980000 0.000000000 3.024330000 1.952560000 0.187508000 26 33.68790000 0.000000000 0.000000000 5.269610000 2.717100000 0.246846000 27 36.23190000 0.000000000 0.000000000 6.184580000 3.188880000 0.289706000 28 38.88890000 0.000000000 0.000000000 7.226070000 3.725890000 0.338493000 29 41.66670000 0.000000000 0.000000000 8.410040000 4.336360000 0.393953000 30 44.51840000 0.000000000 10.55870000 9.862160000 5.069600000 1.161840000 31 44.57360000 0.000000000 0.000000000 9.754650000 5.029670000 0.456939000 32 47.61900000 0.000000000 0.000000000 11.28070000 5.816510000 0.528423000 33 50.81300000 0.000000000 0.000000000 13.01190000 6.709150000 0.609519000 34 54.16670000 0.000000000 0.000000000 14.97560000 7.721680000 0.701506000 35 61.40350000 0.000000000 0.000000000 19.73130000 10.17380000 0.924279000 36 65.31530000 0.000000000 0.000000000 22.60180000 11.65390000 1.058740000 37 69.44440000 0.000000000 0.000000000 25.86380000 13.33580000 1.211540000 38 73.80950000 0.000000000 0.000000000 29.57440000 15.24910000 1.385360000 39 78.43140000 0.000000000 0.000000000 33.80070000 17.42820000 1.583330000 40 83.33330000 0.000000000 0.000000000 38.62150000 19.91390000 1.809150000 41 88.54170000 0.000000000 0.000000000 44.12980000 22.75410000 2.067180000 42 94.08600000 0.000000000 0.000000000 50.43610000 26.00570000 2.362590000 43 100.0000000 0.000000000 0.000000000 57.67210000 29.73670000 2.701550000 44 100.0000000 20.57080000 27.10450000 59.31100000 32.10030000 8.534470000 45 70.96980000 0.000000000 36.38830000 29.16710000 14.80350000 12.00200000 46 73.47560000 0.000000000 49.12960000 33.22390000 16.67490000 22.13920000 47 85.66780000 0.000000000 64.37150000 48.18430000 24.01860000 39.54650000 48 100.0000000 0.000000000 68.19810000 65.78270000 32.98090000 45.42030000 49 13.15790000 0.000000000 0.000000000 0.666598000 0.343709000 0.031225600 50 6.830600000 0.000000000 0.000000000 0.157647000 0.081285600 0.007384700 51 0.000000000 0.000000000 9.887010000 0.116026000 0.046408400 0.611107000 52 0.000000000 6.830600000 0.000000000 0.050715900 0.171479000 0.019319400 53 0.000000000 13.15790000 0.000000000 0.214448000 0.725087000 0.081690500 54 0.000000000 15.25910000 9.192970000 0.395911000 1.043910000 0.633872000 55 0.000000000 16.66670000 0.000000000 0.360661000 1.219460000 0.137388000 56 6.589990000 18.40780000 9.540150000 0.701699000 1.635310000 0.742715000 57 0.000000000 20.44030000 0.000000000 0.564979000 1.910290000 0.215219000 58 0.000000000 22.43590000 0.000000000 0.693436000 2.344630000 0.264153000 59 0.000000000 24.50980000 0.000000000 0.842264000 2.847850000 0.320847000 60 0.000000000 26.66670000 0.000000000 1.013920000 3.428240000 0.386236000 61 0.000000000 28.91160000 0.000000000 1.211160000 4.095160000 0.461372000 62 0.000000000 31.25000000 0.000000000 1.437100000 4.859110000 0.547442000 63 0.000000000 33.68790000 0.000000000 1.695260000 5.731980000 0.645782000 64 0.000000000 36.23190000 0.000000000 1.989610000 6.727230000 0.757910000 65 0.000000000 38.88890000 0.000000000 2.324660000 7.860110000 0.885543000 66 0.000000000 41.66670000 0.000000000 2.705550000 9.147960000 1.030640000 67 0.000000000 44.57360000 0.000000000 3.138120000 10.61060000 1.195420000 68 0.000000000 47.61900000 0.000000000 3.629050000 12.27050000 1.382430000 69 0.000000000 50.81300000 0.000000000 4.185990000 14.15360000 1.594580000 70 0.000000000 54.16670000 0.000000000 4.817730000 16.28960000 1.835240000 71 0.000000000 57.69230000 0.000000000 5.534390000 18.71280000 2.108240000 72 0.000000000 61.40350000 0.000000000 6.347670000 21.46260000 2.418040000 73 0.000000000 65.31530000 0.000000000 7.271120000 24.58500000 2.769810000 74 0.000000000 69.44440000 0.000000000 8.320510000 28.13310000 3.169560000 75 0.000000000 73.80950000 0.000000000 9.514240000 32.16930000 3.624290000 76 0.000000000 78.43140000 0.000000000 10.87390000 36.76650000 4.142220000 77 0.000000000 83.33330000 0.000000000 12.42470000 42.01020000 4.733000000 78 23.42610000 100.0000000 0.000000000 20.92370000 63.95450000 7.178650000 79 36.23620000 100.0000000 18.28820000 25.18830000 66.10160000 9.720840000 80 91.79020000 100.0000000 49.49000000 70.32930000 88.96560000 30.40940000 81 91.47860000 100.0000000 74.09610000 75.70030000 91.07280000 60.55600000 82 100.0000000 100.0000000 82.88980000 88.68190000 97.45150000 75.37690000 83 10.41670000 10.41670000 10.41670000 0.657209000 0.691445000 0.752976000 84 0.000000000 0.000000000 1.282050000 0.001298660 0.000519445 0.006840060 85 0.000000000 0.000000000 2.604170000 0.006170720 0.002468190 0.032501100 86 0.000000000 0.000000000 3.968250000 0.015582600 0.006232800 0.082073500 87 0.000000000 0.000000000 5.376340000 0.030387200 0.012154400 0.160049000 88 0.000000000 0.000000000 6.830600000 0.051445500 0.020577400 0.270963000 89 0.000000000 0.000000000 8.333330000 0.079665700 0.031865000 0.419598000 90 0.000000000 0.000000000 13.15790000 0.217533000 0.087009700 1.145740000 91 0.000000000 0.000000000 14.88100000 0.285142000 0.114052000 1.501840000 92 0.000000000 0.000000000 18.51850000 0.461246000 0.184491000 2.429380000 93 0.000000000 0.000000000 20.44030000 0.573107000 0.229233000 3.018550000 94 0.000000000 0.000000000 22.43590000 0.703412000 0.281353000 3.704860000 95 0.000000000 0.000000000 24.50980000 0.854381000 0.341739000 4.500020000 96 11.97050000 0.000000000 24.08320000 1.363430000 0.607957000 4.354910000 97 0.000000000 0.000000000 31.25000000 1.457780000 0.583088000 7.678110000 98 0.000000000 0.000000000 33.68790000 1.719650000 0.687832000 9.057380000 99 0.000000000 0.000000000 36.23190000 2.018230000 0.807261000 10.63000000 100 0.000000000 0.000000000 38.88890000 2.358110000 0.943205000 12.42010000 101 0.000000000 11.57640000 41.32950000 2.857690000 1.625430000 14.26080000 102 0.000000000 0.000000000 41.66670000 2.744480000 1.097750000 14.45510000 103 0.000000000 0.000000000 44.57360000 3.183270000 1.273260000 16.76620000 104 0.000000000 0.000000000 47.61900000 3.681260000 1.472440000 19.38920000 105 0.000000000 0.000000000 50.81300000 4.246210000 1.698420000 22.36470000 106 0.000000000 0.000000000 54.16670000 4.887040000 1.954740000 25.74000000 107 0.000000000 0.000000000 57.69230000 5.614010000 2.245510000 29.56890000 108 0.000000000 0.000000000 61.40350000 6.438990000 2.575490000 33.91410000 109 0.000000000 0.000000000 65.31530000 7.375720000 2.950170000 38.84790000 110 0.000000000 0.000000000 69.44440000 8.440210000 3.375950000 44.45450000 111 0.000000000 0.000000000 73.80950000 9.651110000 3.860290000 50.83230000 112 0.000000000 0.000000000 78.43140000 11.03030000 4.411940000 58.09640000 113 0.000000000 0.000000000 83.33330000 12.60350000 5.041180000 66.38240000 114 0.000000000 0.000000000 88.54170000 14.40100000 5.760170000 75.85000000 115 27.36690000 16.32800000 100.0000000 22.50170000 10.41380000 99.41410000 116 88.93360000 22.74740000 100.0000000 64.09560000 32.92080000 101.4860000 117 100.0000000 23.61840000 100.0000000 77.26880000 39.88960000 102.1240000 118 100.0000000 40.66000000 100.0000000 79.05630000 45.93350000 102.8050000 119 10.95240000 10.95240000 10.95240000 0.733841000 0.772069000 0.840775000 120 0.000000000 11.49430000 0.000000000 0.159300000 0.538621000 0.060682700 121 0.000000000 1.282050000 0.000000000 0.001280250 0.004328740 0.000487689 122 0.000000000 3.968250000 0.000000000 0.015361600 0.051940400 0.005851760 123 9.054440000 0.000000000 9.925420000 0.410025000 0.197885000 0.630066000 124 3.968250000 0.000000000 0.000000000 0.047750600 0.024621100 0.002236800 125 0.423012000 0.423012000 0.423012000 0.000572483 0.000602305 0.000655904 126 0.850340000 0.850340000 0.850340000 0.002658610 0.002797100 0.003046010 127 1.282050000 1.282050000 1.282050000 0.006558480 0.006900120 0.007514160 128 1.718210000 1.718210000 1.718210000 0.012487700 0.013138200 0.014307300 129 2.158890000 2.158890000 2.158890000 0.020632100 0.021706900 0.023638600 130 2.604170000 2.604170000 2.604170000 0.031163200 0.032786600 0.035704200 131 3.054100000 3.054100000 3.054100000 0.044244600 0.046549400 0.050691800 132 3.508770000 3.508770000 3.508770000 0.060035900 0.063163300 0.068784100 133 3.968250000 3.968250000 3.968250000 0.078694900 0.082794300 0.090162100 134 4.432620000 4.432620000 4.432620000 0.100379000 0.105608000 0.115006000 135 4.901960000 4.901960000 4.901960000 0.125248000 0.131772000 0.143498000 136 5.376340000 5.376340000 5.376340000 0.153460000 0.161454000 0.175822000 137 5.855860000 5.855860000 5.855860000 0.185180000 0.194827000 0.212164000 138 6.340580000 6.340580000 6.340580000 0.220573000 0.232063000 0.252714000 139 8.333330000 0.000000000 0.000000000 0.244124000 0.125874000 0.011435500 140 6.830600000 6.830600000 6.830600000 0.259808000 0.273342000 0.297667000 141 7.326010000 7.326010000 7.326010000 0.303059000 0.318847000 0.347221000 142 9.887010000 0.000000000 0.000000000 0.355544000 0.183325000 0.016654800 143 8.845440000 8.845440000 8.845440000 0.458710000 0.482605000 0.525552000 144 0.000000000 2.604170000 0.000000000 0.006083210 0.020568400 0.002317300 145 7.826890000 7.826890000 7.826890000 0.350504000 0.368763000 0.401579000 146 8.333330000 8.333330000 8.333330000 0.402325000 0.423283000 0.460951000 147 13.15790000 13.15790000 13.15790000 1.098580000 1.155810000 1.258660000 148 12.59690000 12.59690000 12.59690000 0.998196000 1.050190000 1.143650000 149 13.72550000 13.72550000 13.72550000 1.205500000 1.268300000 1.381160000 150 14.29980000 14.29980000 14.29980000 1.319230000 1.387950000 1.511460000 151 16.06430000 16.06430000 16.06430000 1.703910000 1.792670000 1.952200000 152 16.66670000 16.66670000 16.66670000 1.847600000 1.943850000 2.116830000 153 17.27640000 17.27640000 17.27640000 1.999530000 2.103690000 2.290890000 154 17.89370000 17.89370000 17.89370000 2.160010000 2.272530000 2.474760000 155 18.51850000 18.51850000 18.51850000 2.329370000 2.450710000 2.668800000 156 19.79170000 19.79170000 19.79170000 2.696150000 2.836600000 3.089020000 157 21.09700000 21.09700000 21.09700000 3.102760000 3.264390000 3.554890000 158 21.76220000 21.76220000 21.76220000 3.321980000 3.495030000 3.806050000 159 22.43590000 22.43590000 22.43590000 3.552350000 3.737400000 4.069990000 160 23.80950000 23.80950000 23.80950000 4.048290000 4.259170000 4.638190000 161 24.50980000 24.50980000 24.50980000 4.314770000 4.539540000 4.943510000 162 25.21930000 25.21930000 25.21930000 4.594230000 4.833560000 5.263690000 163 25.93820000 25.93820000 25.93820000 4.887180000 5.141760000 5.599320000 164 26.66670000 26.66670000 26.66670000 5.194130000 5.464700000 5.951000000 165 27.40490000 27.40490000 27.40490000 5.515630000 5.802950000 6.319350000 166 28.15320000 28.15320000 28.15320000 5.852240000 6.157100000 6.705020000 167 28.91160000 28.91160000 28.91160000 6.204570000 6.527780000 7.108680000 168 29.68040000 29.68040000 29.68040000 6.573210000 6.915620000 7.531040000 169 30.45980000 30.45980000 30.45980000 6.958810000 7.321310000 7.972830000 170 31.25000000 31.25000000 31.25000000 7.362030000 7.745540000 8.434810000 171 32.05130000 32.05130000 32.05130000 7.783570000 8.189030000 8.917770000 172 32.86380000 32.86380000 32.86380000 8.224150000 8.652560000 9.422550000 173 33.68790000 33.68790000 33.68790000 8.684520000 9.136920000 9.950010000 174 34.52380000 34.52380000 34.52380000 9.165470000 9.642920000 10.50100000 175 35.37170000 35.37170000 35.37170000 9.667820000 10.17140000 11.07660000 176 36.23190000 36.23190000 36.23190000 10.19240000 10.72340000 11.67760000 177 37.10460000 37.10460000 37.10460000 10.74020000 11.29960000 12.30520000 178 37.99020000 37.99020000 37.99020000 11.31200000 11.90120000 12.96030000 179 38.88890000 38.88890000 38.88890000 11.90880000 12.52920000 13.64420000 180 39.80100000 39.80100000 39.80100000 12.53180000 13.18460000 14.35790000 181 40.72680000 40.72680000 40.72680000 13.18180000 13.86850000 15.10260000 182 41.66670000 41.66670000 41.66670000 13.86010000 14.58210000 15.87970000 183 42.62090000 42.62090000 42.62090000 14.56770000 15.32660000 16.69050000 184 45.57290000 45.57290000 45.57290000 16.87930000 17.75860000 19.33890000 185 44.57360000 44.57360000 44.57360000 16.07600000 16.91350000 18.41860000 186 43.58970000 43.58970000 43.58970000 15.30590000 16.10330000 17.53630000 187 100.0000000 42.68340000 46.06560000 63.94720000 40.75160000 21.81350000 188 14.79040000 13.37380000 0.000000000 1.084390000 1.196040000 0.125052000 189 9.887010000 9.887010000 9.887010000 0.585950000 0.616473000 0.671333000 190 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 191 12.04240000 12.04240000 12.04240000 0.904105000 0.951202000 1.035850000 192 0.000000000 13.24870000 16.92620000 0.596212000 0.887527000 2.076470000 193 0.000000000 13.75890000 22.11940000 0.918354000 1.072620000 3.681010000 194 77.62750000 70.15720000 26.31310000 42.55170000 46.20930000 10.04980000 195 100.0000000 82.59930000 33.92120000 71.60330000 71.63570000 16.53920000 196 27.38020000 32.65560000 19.26060000 5.426140000 7.276150000 3.408170000 197 26.24970000 34.52110000 28.65200000 6.037630000 8.099860000 7.167890000 198 40.31140000 40.25390000 28.35140000 11.50490000 12.98260000 7.520110000 199 60.14490000 60.14490000 60.14490000 31.07010000 32.68870000 35.59760000 200 61.40350000 61.40350000 61.40350000 32.51800000 34.21190000 37.25640000 201 62.68440000 62.68440000 62.68440000 34.02840000 35.80100000 38.98690000 202 63.98810000 63.98810000 63.98810000 35.60430000 37.45900000 40.79250000 203 65.31530000 65.31530000 65.31530000 37.24860000 39.18900000 42.67640000 204 66.66670000 66.66670000 66.66670000 38.96460000 40.99430000 44.64240000 205 68.04280000 68.04280000 68.04280000 40.75530000 42.87840000 46.69410000 206 69.44440000 69.44440000 69.44440000 42.62450000 44.84490000 48.83560000 207 70.87230000 70.87230000 70.87230000 44.57570000 46.89770000 51.07110000 208 72.32700000 72.32700000 72.32700000 46.61270000 49.04090000 53.40500000 209 73.80950000 73.80950000 73.80950000 48.73970000 51.27870000 55.84200000 210 97.98530000 97.98530000 97.98530000 90.88540000 95.61990000 104.1290000 211 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 212 86.31230000 32.57820000 0.000000000 43.29780000 26.83800000 2.554360000 213 100.0000000 36.68280000 0.000000000 59.71650000 36.64950000 3.480360000 214 100.0000000 67.58700000 75.33340000 75.60570000 60.27920000 58.85660000 215 100.0000000 70.13020000 86.72770000 79.93450000 63.98830000 78.41480000 216 100.0000000 76.32490000 100.0000000 86.73430000 71.89430000 105.7290000 217 88.54170000 88.54170000 88.54170000 72.72760000 76.51610000 83.32520000 218 90.35090000 90.35090000 90.35090000 76.03590000 79.99680000 87.11560000 219 92.19860000 92.19860000 92.19860000 79.49760000 83.63880000 91.08170000 220 94.08600000 94.08600000 94.08600000 83.12060000 87.45060000 95.23270000 221 96.01450000 96.01450000 96.01450000 86.91360000 91.44110000 99.57840000 222 29.16130000 0.000000000 54.33230000 8.756670000 3.946180000 26.09310000 223 35.37260000 0.000000000 71.93080000 14.98570000 6.672410000 48.30490000 224 50.08900000 0.000000000 75.86530000 22.85980000 10.60140000 54.58860000 225 72.39980000 0.000000000 100.0000000 47.16670000 22.14370000 100.4540000 226 100.0000000 0.000000000 100.0000000 76.49240000 37.26460000 101.8280000 227 26.44550000 8.074810000 43.59660000 6.199610000 3.056030000 16.14150000 228 33.00620000 27.37540000 52.49280000 10.67310000 8.053810000 24.66820000 229 46.16240000 32.72180000 72.36960000 21.36770000 14.50560000 49.77610000 230 53.73830000 31.23680000 100.0000000 34.97250000 19.97040000 100.3630000 231 55.13980000 92.21050000 100.0000000 49.91670000 68.04290000 105.7690000 232 0.000000000 100.0000000 22.95610000 19.29320000 63.02830000 10.96400000 233 66.54430000 100.0000000 33.34740000 43.78270000 75.54660000 17.02790000 234 75.53150000 100.0000000 55.52220000 54.82650000 80.83870000 35.70290000 235 79.59020000 100.0000000 84.56800000 66.47990000 85.93880000 77.26730000 236 36.95050000 43.46550000 43.70410000 12.47490000 14.58790000 17.48880000 237 53.03030000 53.03030000 53.03030000 23.55600000 24.78310000 26.98850000 238 54.16670000 54.16670000 54.16670000 24.68040000 25.96600000 28.27670000 239 57.69230000 57.69230000 57.69230000 28.35170000 29.82860000 32.48300000 240 58.90800000 58.90800000 58.90800000 29.68220000 31.22850000 34.00750000 241 45.60280000 15.16150000 0.000000000 10.54970000 6.278890000 0.592033000 242 51.53710000 25.62370000 0.000000000 14.35190000 10.06150000 0.982574000 243 63.53550000 33.11450000 0.000000000 22.90180000 16.48650000 1.618180000 244 67.76610000 46.76900000 0.000000000 27.99710000 24.43120000 2.476820000 245 100.0000000 68.71110000 61.43180000 72.24610000 59.79870000 39.74640000 246 37.22070000 0.000000000 38.11340000 8.817790000 4.285750000 12.18930000 247 48.77060000 0.000000000 38.61010000 14.21040000 7.058740000 12.78210000 248 100.0000000 0.000000000 50.20520000 61.80740000 31.39080000 24.48210000 249 100.0000000 37.56530000 53.06010000 64.49640000 38.88850000 28.11990000 250 100.0000000 40.25380000 64.22750000 67.28820000 41.05950000 41.09610000 251 100.0000000 53.90410000 80.15130000 74.00790000 50.48070000 65.45250000 252 28.91160000 0.000000000 0.000000000 3.764820000 1.941210000 0.176356000 253 31.25000000 0.000000000 0.000000000 4.467150000 2.303340000 0.209256000 254 33.16410000 25.14930000 0.000000000 5.982450000 5.638870000 0.578028000 255 49.56750000 40.66660000 0.000000000 14.88550000 15.02480000 1.554160000 256 54.96860000 75.80220000 0.000000000 25.55580000 42.08560000 4.567520000 257 0.000000000 49.61710000 43.25980000 6.952940000 14.62350000 17.21180000 258 0.000000000 67.53340000 62.97230000 14.63160000 29.18100000 38.82980000 259 0.000000000 82.64080000 71.54850000 21.21160000 44.85120000 52.11750000 260 0.000000000 100.0000000 72.00240000 27.69250000 66.38790000 55.20300000 261 0.000000000 100.0000000 85.61060000 31.92670000 68.08150000 77.50490000 262 0.000000000 100.0000000 100.0000000 37.37370000 70.26020000 106.1940000 263 57.69230000 0.000000000 0.000000000 17.20330000 8.870320000 0.805858000 264 100.0000000 0.000000000 23.99570000 58.48750000 30.06290000 6.996610000 265 100.0000000 0.000000000 41.57200000 60.40280000 30.82900000 17.08450000 266 100.0000000 0.000000000 89.07280000 72.26370000 35.57320000 79.55580000 267 60.64570000 0.000000000 59.83180000 25.28180000 12.33240000 32.93370000 268 75.32050000 75.32050000 75.32050000 50.96100000 53.61570000 58.38690000 269 76.86080000 76.86080000 76.86080000 53.28110000 56.05670000 61.04510000 270 76.44660000 59.67390000 0.000000000 37.90920000 36.62850000 3.767330000 271 77.05610000 71.77460000 0.000000000 41.45780000 47.01420000 4.931090000 272 75.94790000 75.90280000 26.24400000 42.60230000 50.84470000 10.55950000 273 56.79840000 56.07990000 32.48420000 23.40990000 26.78760000 11.12030000 274 61.99400000 64.80790000 41.06540000 29.95660000 35.62030000 17.66700000 275 51.63380000 46.67790000 36.67690000 19.02490000 19.52250000 12.87370000 276 70.62300000 52.01180000 39.13640000 33.63640000 29.69340000 15.53040000 277 80.30980000 60.17410000 46.90580000 45.23920000 40.31270000 22.73690000 278 31.49990000 26.72120000 22.05630000 6.242050000 6.058690000 4.169320000 279 32.63700000 37.77540000 54.00390000 11.95040000 11.84970000 26.63120000 280 47.87170000 38.19650000 56.96060000 19.10600000 15.62360000 30.13630000 281 82.73800000 40.43470000 78.98780000 51.75310000 32.64700000 61.75240000 282 65.95860000 24.11910000 100.0000000 42.72760000 22.18460000 100.5180000 283 63.99170000 40.89630000 100.0000000 43.02380000 27.44880000 101.1280000 284 76.04580000 40.91090000 100.0000000 53.00000000 32.59850000 101.5960000 285 100.0000000 54.29290000 100.0000000 81.33480000 53.63770000 103.6730000 286 54.12450000 30.28500000 33.82130000 18.02600000 12.93750000 10.34770000 287 62.12610000 34.21450000 32.34640000 23.57230000 16.99890000 9.899620000 288 73.75110000 41.30970000 36.45250000 34.22310000 25.01710000 13.16720000 289 100.0000000 54.96200000 35.73240000 64.60430000 47.34000000 14.90700000 290 35.15290000 45.79080000 0.000000000 9.116430000 14.24200000 1.539450000 291 44.46360000 45.44410000 0.000000000 12.97630000 16.07400000 1.701820000 292 61.23150000 63.37960000 0.000000000 26.41560000 33.12230000 3.511080000 293 67.99990000 86.03890000 0.000000000 38.02450000 57.80170000 6.234340000 294 91.67790000 97.39490000 11.04470000 65.29570000 83.81790000 9.680260000 295 100.0000000 100.0000000 0.000000000 76.22550000 92.46910000 9.769170000 296 0.000000000 0.000000000 94.08600000 16.45900000 6.583330000 86.68930000 297 0.000000000 0.000000000 100.0000000 18.82030000 7.527820000 99.12640000 298 0.000000000 15.28930000 100.0000000 19.11870000 8.536570000 99.24010000 299 36.97840000 76.63240000 100.0000000 35.62150000 45.80030000 103.3660000 300 39.36260000 91.74840000 100.0000000 41.59350000 63.26260000 105.3220000 301 27.98510000 0.000000000 19.59220000 4.026700000 2.015860000 2.914140000 302 32.63310000 23.42260000 17.30810000 6.073340000 5.269920000 2.614340000 303 31.00260000 21.11800000 23.60350000 5.783170000 4.630360000 4.579040000 304 48.44740000 31.39350000 21.86150000 13.83280000 11.21540000 4.601280000 305 52.39740000 42.84200000 100.0000000 35.61740000 24.43070000 100.8740000 306 60.53210000 51.75390000 100.0000000 42.29940000 32.12320000 101.6820000 307 24.07790000 21.07230000 41.80180000 5.885930000 4.446400000 14.90650000 308 26.92300000 19.76220000 64.89710000 11.01550000 6.342100000 38.65350000 309 25.65500000 42.69140000 66.23200000 13.35410000 14.18460000 41.27990000 310 85.03400000 85.03400000 85.03400000 66.54140000 70.00770000 76.23760000 311 86.76980000 86.76980000 86.76980000 69.56510000 73.18890000 79.70200000 312 0.000000000 42.37010000 22.32380000 3.502730000 9.769320000 4.733580000 313 0.000000000 65.48190000 87.10350000 21.20360000 30.27940000 75.95240000 314 0.000000000 71.02090000 100.0000000 27.56190000 37.08470000 102.4560000 315 0.000000000 79.93750000 100.0000000 30.15870000 45.86490000 103.4460000 316 100.0000000 84.94300000 100.0000000 89.45100000 81.08010000 106.7640000 317 19.15110000 19.15110000 19.15110000 2.507970000 2.638610000 2.873420000 318 15.46910000 15.46910000 15.46910000 1.568150000 1.649840000 1.796650000 319 15.72710000 10.25560000 20.70940000 1.700580000 1.163880000 3.200110000 320 19.78610000 0.000000000 24.89470000 2.519130000 1.196670000 4.733470000 321 65.54840000 35.77680000 26.88090000 25.76140000 18.70700000 7.317480000 322 78.45700000 35.84130000 51.48110000 40.13770000 25.75740000 25.34110000 323 100.0000000 76.11410000 56.85760000 73.28880000 66.33110000 35.21570000 324 100.0000000 80.18290000 68.18540000 77.19450000 71.57590000 49.75120000 325 11.49430000 0.000000000 0.000000000 0.495173000 0.255320000 0.023195500 326 0.000000000 5.376340000 0.000000000 0.029956200 0.101287000 0.011411300 327 0.000000000 9.887010000 0.000000000 0.114380000 0.386740000 0.043571300 328 0.000000000 14.88100000 0.000000000 0.281098000 0.950442000 0.107080000 329 0.000000000 18.51850000 0.000000000 0.454705000 1.537440000 0.173212000 330 10.63420000 24.23830000 0.000000000 1.239210000 2.994110000 0.332631000 331 31.30460000 64.11270000 0.000000000 11.46430000 25.91260000 2.868950000 332 31.99130000 77.89090000 0.000000000 15.41330000 38.63680000 4.300030000 333 35.80160000 100.0000000 37.04770000 26.69710000 66.68630000 18.51340000 334 0.000000000 54.99900000 31.07750000 6.422180000 17.42120000 9.483010000 335 0.000000000 70.89590000 40.16350000 11.23920000 30.45510000 16.65010000 336 0.000000000 100.0000000 48.97540000 22.46920000 64.29860000 27.69210000 337 25.72850000 47.92330000 21.61600000 7.241330000 14.20480000 4.951990000 338 43.80230000 58.09390000 44.86440000 18.23580000 25.13230000 19.58810000 339 45.01570000 76.71550000 44.55420000 23.50640000 41.43280000 21.16260000 340 74.25970000 87.80680000 100.0000000 62.73180000 70.11220000 105.8400000 341 0.000000000 16.24250000 30.74390000 1.747140000 1.714760000 7.537090000 342 6.599320000 16.05550000 32.82770000 2.102910000 1.848430000 8.689900000 343 0.000000000 41.31680000 59.81890000 8.735030000 11.41150000 33.03080000 344 0.000000000 56.35470000 65.69320000 12.72600000 20.75970000 41.34610000 345 0.000000000 52.27470000 75.03960000 14.46370000 19.06760000 54.41120000 346 0.000000000 75.27780000 75.79930000 20.16800000 37.68640000 57.67950000 347 0.000000000 89.85180000 100.0000000 33.48320000 57.10560000 104.7120000 348 0.000000000 42.09850000 54.52080000 7.725190000 11.34070000 27.16580000 349 27.71710000 60.96940000 56.39410000 15.02050000 25.03540000 30.66670000 350 42.09290000 78.17640000 67.86670000 27.42090000 44.14820000 46.77900000 351 42.90870000 100.0000000 100.0000000 46.34500000 74.88600000 106.6140000 352 40.53030000 100.0000000 89.50540000 41.21530000 72.71190000 85.11600000 353 66.07970000 100.0000000 92.48380000 57.58990000 81.02760000 91.62950000 354 26.67590000 49.23500000 37.53250000 9.240530000 15.70360000 13.12280000 355 67.77790000 53.55660000 45.70990000 32.58200000 29.87670000 20.65920000 356 69.74860000 77.05570000 66.09240000 44.14250000 51.85570000 45.07890000 357 0.000000000 24.64820000 24.28010000 1.689630000 3.218070000 4.732610000 358 0.000000000 40.53320000 28.29110000 3.717670000 9.078100000 7.139460000 359 0.000000000 83.07670000 54.37350000 17.26890000 43.69740000 30.65770000 360 0.000000000 100.0000000 60.81430000 24.85730000 65.25380000 40.27020000 361 23.52720000 100.0000000 67.91550000 28.98320000 67.18080000 49.51020000 362 61.72220000 100.0000000 70.81060000 47.32040000 76.54640000 54.40300000 363 100.0000000 91.92800000 57.71680000 78.70970000 84.11650000 38.17150000 364 100.0000000 93.63050000 73.33460000 83.24040000 87.82170000 58.93250000 365 100.0000000 92.14210000 92.43640000 89.00050000 88.46840000 91.98670000 366 61.63820000 63.69270000 100.0000000 45.59760000 41.04910000 102.6790000 367 66.64460000 72.52410000 100.0000000 51.59980000 50.65980000 103.7200000 368 0.000000000 13.26030000 69.07650000 8.560300000 4.074290000 44.02120000 369 0.000000000 23.91360000 80.75500000 12.55960000 7.402230000 62.25300000 370 0.000000000 24.77830000 100.0000000 19.68300000 10.44470000 99.45510000 371 0.000000000 32.57250000 100.0000000 20.39460000 12.85070000 99.72610000 372 38.55630000 31.18520000 100.0000000 27.34170000 16.02100000 100.0040000 373 16.56110000 17.82560000 0.000000000 1.523660000 1.983780000 0.211064000 374 100.0000000 21.81150000 0.000000000 58.32380000 31.94020000 2.949800000 375 100.0000000 47.31470000 0.000000000 61.25030000 41.83540000 4.064620000 376 100.0000000 65.29230000 0.000000000 64.93750000 54.30260000 5.469210000 377 100.0000000 82.20160000 0.000000000 69.72870000 70.50250000 7.294340000 378 0.000000000 0.000000000 16.66670000 0.365849000 0.146334000 1.926920000 379 0.000000000 0.000000000 26.66670000 1.028510000 0.411386000 5.417130000 380 0.000000000 0.000000000 28.91160000 1.228590000 0.491415000 6.470950000 381 18.68560000 0.000000000 43.03900000 4.388820000 1.922160000 15.59040000 382 22.07060000 0.000000000 67.25330000 9.944650000 4.218110000 41.52540000 383 24.53890000 0.000000000 100.0000000 21.44530000 8.881310000 99.24940000 384 43.15910000 0.000000000 100.0000000 27.90710000 12.21310000 99.55210000 385 59.34610000 0.000000000 100.0000000 37.12690000 16.96700000 99.98400000 386 52.74620000 0.000000000 63.57270000 21.07530000 10.06320000 37.26650000 387 80.03300000 80.03300000 80.03300000 58.23720000 61.27090000 66.72340000 388 81.66670000 81.66670000 81.66670000 60.88360000 64.05520000 69.75540000 389 11.49430000 11.49430000 11.49430000 0.816065000 0.858575000 0.934979000 390 5.376340000 0.000000000 0.000000000 0.093117000 0.048012700 0.004361900 391 0.000000000 8.333330000 0.000000000 0.078535900 0.265544000 0.029917000 392 0.000000000 6.916330000 0.000000000 0.052126200 0.176248000 0.019856600 393 2.604170000 0.000000000 0.000000000 0.018909300 0.009749950 0.000885771 394 0.000000000 0.000000000 11.49430000 0.161592000 0.064634000 0.851101000 395 9.390260000 0.000000000 16.20650000 0.661439000 0.301271000 1.826720000 396 0.000000000 30.34460000 15.35650000 1.652690000 4.677090000 2.122580000 397 55.32210000 55.32210000 55.32210000 25.85300000 27.19980000 29.62030000 398 56.49720000 56.49720000 56.49720000 27.07610000 28.48650000 31.02150000 399 100.0000000 57.22600000 73.12760000 72.56470000 51.90080000 54.57770000 400 100.0000000 23.47730000 61.51610000 64.90320000 34.91330000 37.04440000 401 100.0000000 23.10880000 73.62720000 68.01080000 36.07810000 53.53990000 402 100.0000000 25.21920000 86.32650000 72.18940000 38.21700000 74.78230000 403 51.25230000 0.000000000 48.64550000 17.11860000 8.380530000 20.94140000 404 50.81300000 50.81300000 50.81300000 21.44410000 22.56110000 24.56890000 405 51.91260000 51.91260000 51.91260000 22.47790000 23.64880000 25.75330000 406 52.35450000 100.0000000 60.96060000 38.78650000 72.43210000 41.09690000 407 53.94250000 100.0000000 81.30030000 45.33020000 75.15860000 70.63550000 408 0.000000000 87.50470000 34.81930000 15.68290000 47.51390000 15.00950000 409 0.000000000 100.0000000 36.18240000 20.56560000 63.53720000 17.66570000 410 87.84000000 100.0000000 36.05570000 63.91450000 85.89050000 19.61560000 411 48.64620000 55.03180000 0.000000000 16.81130000 22.96330000 2.454130000 412 56.56820000 68.00700000 0.000000000 24.42120000 35.36300000 3.798800000 413 0.000000000 46.71020000 16.14570000 3.819630000 11.89780000 3.122000000 414 0.000000000 56.56420000 15.92290000 5.630070000 18.04980000 3.761490000 415 0.000000000 75.15800000 32.62920000 11.50370000 34.11720000 12.21460000 416 56.03610000 78.71420000 36.22920000 29.11400000 46.18570000 15.55930000 417 56.34920000 100.0000000 35.76940000 36.85020000 71.93970000 18.16670000 418 16.94280000 45.05620000 0.000000000 4.375670000 11.46410000 1.278510000 419 18.13400000 56.46250000 0.000000000 6.627940000 18.54270000 2.073890000 420 38.67270000 55.36060000 61.46380000 18.64530000 23.35120000 36.24710000 421 38.35420000 56.35690000 100.0000000 31.08630000 28.91530000 101.4570000 422 39.10730000 63.91640000 100.0000000 33.06900000 34.74170000 102.1100000 423 51.00910000 63.65120000 100.0000000 38.81280000 37.52250000 102.3580000 424 53.54220000 77.96920000 100.0000000 44.15230000 51.34680000 103.8990000 425 18.31400000 25.38040000 35.10680000 4.171750000 4.539420000 10.32860000 426 40.77140000 23.42560000 47.11840000 12.37690000 8.150820000 19.60970000 427 51.39260000 28.37150000 48.50430000 18.33590000 12.34070000 21.25820000 428 56.60610000 32.48850000 65.16640000 25.40320000 16.73530000 40.02250000 429 65.74970000 52.19750000 65.39570000 34.77030000 29.79880000 41.71910000 430 84.33370000 59.10650000 83.04050000 57.99180000 45.18210000 69.95130000 431 34.60840000 23.02010000 38.03830000 8.571390000 6.262480000 12.37200000 432 34.06550000 64.90900000 36.95200000 14.67990000 27.87730000 14.08520000 433 0.000000000 88.54170000 0.000000000 14.19680000 48.00190000 5.408030000 434 0.000000000 94.08600000 0.000000000 16.22560000 54.86150000 6.180860000 435 0.000000000 100.0000000 0.000000000 18.55340000 62.73240000 7.067620000 436 40.13340000 100.0000000 0.000000000 26.29780000 66.72560000 7.430390000 437 53.93660000 100.0000000 0.000000000 33.38950000 70.38210000 7.762590000 438 66.04630000 100.0000000 0.000000000 41.71530000 74.67500000 8.152600000 439 77.33210000 100.0000000 0.000000000 51.32090000 79.62790000 8.602560000 440 23.11830000 23.11830000 23.11830000 3.794300000 3.991960000 4.347200000 441 20.44030000 20.44030000 20.44030000 2.894290000 3.045050000 3.316030000 442 100.0000000 24.59880000 17.17350000 58.91180000 32.76370000 5.083120000 443 100.0000000 50.98070000 18.95950000 62.37420000 44.18750000 6.866140000 444 100.0000000 61.24400000 19.61790000 64.50720000 51.28640000 7.863690000 445 100.0000000 100.0000000 34.10010000 77.99170000 93.17560000 19.07210000 446 40.73100000 45.10430000 16.96310000 11.60150000 15.16750000 3.604800000 447 46.58790000 46.58790000 46.58790000 17.71710000 18.64010000 20.29880000 448 47.61900000 47.61900000 47.61900000 18.59100000 19.55940000 21.30000000 449 48.66670000 48.66670000 48.66670000 19.50230000 20.51830000 22.34420000 450 49.73120000 49.73120000 49.73120000 20.45280000 21.51830000 23.43320000 451 56.01090000 73.45660000 71.01850000 34.40100000 43.69030000 51.04200000 452 78.43140000 78.43140000 78.43140000 55.70480000 58.60660000 63.82200000 453 83.33330000 83.33330000 83.33330000 63.64970000 66.96530000 72.92450000 454 0.000000000 19.36500000 27.93830000 1.641130000 2.152000000 6.192650000 455 10.64740000 16.59880000 26.26060000 1.770280000 1.822060000 5.393150000 456 0.000000000 32.71320000 45.11830000 4.858690000 6.681290000 17.82550000 457 0.000000000 45.65950000 85.10910000 16.51040000 16.46780000 70.79340000 458 0.000000000 47.28920000 100.0000000 22.39430000 19.61220000 100.4880000 459 0.000000000 54.96160000 100.0000000 23.79490000 24.34780000 101.0210000 460 0.000000000 62.41370000 100.0000000 25.39990000 29.77460000 101.6330000 461 71.31670000 100.0000000 100.0000000 64.79580000 84.39950000 107.4790000 462 82.48290000 100.0000000 100.0000000 75.13370000 89.72990000 107.9630000 463 14.88100000 14.88100000 14.88100000 1.440010000 1.515030000 1.649850000 464 9.363300000 9.363300000 9.363300000 0.519852000 0.546932000 0.595603000 465 14.88100000 0.000000000 0.000000000 0.873775000 0.450534000 0.040930500 466 18.51850000 0.000000000 0.000000000 1.413420000 0.728784000 0.066209200 467 16.66670000 0.000000000 0.000000000 1.121090000 0.578054000 0.052515500 468 18.74410000 24.11890000 0.000000000 2.264560000 3.497370000 0.377697000 469 26.20470000 33.44500000 0.000000000 4.701370000 7.205260000 0.777653000 470 86.01100000 59.05040000 0.000000000 47.22830000 41.04350000 4.158390000 471 88.67270000 100.0000000 0.000000000 62.82690000 85.56060000 9.141530000 472 100.0000000 100.0000000 47.34130000 79.85970000 93.92270000 28.91050000 473 100.0000000 100.0000000 70.77360000 85.02500000 95.98880000 56.11630000 474 100.0000000 100.0000000 92.40530000 92.04480000 98.79660000 93.08920000 475 27.13000000 0.000000000 12.46930000 3.466680000 1.765130000 1.171330000 476 44.71550000 0.000000000 21.74940000 10.48000000 5.327710000 3.920250000 477 75.25120000 0.000000000 27.90260000 31.99600000 16.36630000 7.430230000 478 80.09210000 66.64680000 29.60880000 44.29050000 44.46860000 11.37270000 479 84.96350000 65.98330000 77.81500000 58.57870000 50.25800000 61.81750000 480 87.13860000 73.64020000 79.93930000 63.57490000 58.57650000 66.18320000 481 94.92850000 85.63500000 80.20290000 76.21230000 75.75900000 68.45600000 482 100.0000000 84.94440000 84.05370000 83.47550000 78.69140000 75.28900000 483 0.000000000 11.34370000 52.63610000 4.743230000 2.358550000 24.22650000 484 0.000000000 47.09800000 53.68940000 8.335120000 13.89420000 26.59320000 485 0.000000000 65.94320000 70.93280000 16.26890000 28.64480000 49.40550000 486 86.31590000 27.26540000 29.53540000 44.07910000 25.62990000 9.142180000 487 100.0000000 35.09280000 32.89780000 61.15890000 36.66040000 12.00480000 488 100.0000000 90.88840000 42.61660000 75.59350000 81.73470000 23.61970000 489 29.25190000 70.79390000 40.28290000 15.09120000 32.36040000 16.90790000 490 29.01300000 75.30450000 50.49370000 17.92490000 37.25100000 26.02230000 491 34.18160000 78.85660000 61.43240000 22.89050000 42.58990000 38.39580000 492 54.56620000 88.64230000 88.02000000 43.66700000 61.65520000 81.00520000 493 54.12070000 100.0000000 90.85750000 48.74350000 76.53640000 88.04930000 494 76.73890000 100.0000000 92.04010000 66.45280000 85.61680000 91.17430000 495 17.61130000 21.97430000 7.306080000 1.987690000 2.916270000 0.625816000 496 27.77480000 27.67750000 0.000000000 4.547300000 5.497850000 0.580634000 497 28.78740000 33.39970000 9.835130000 5.507560000 7.593470000 1.412460000 498 34.59550000 37.14320000 0.000000000 7.688210000 9.985660000 1.062170000 499 69.95670000 61.50300000 71.66330000 41.70020000 38.71000000 51.29620000 500 78.65080000 62.49630000 79.10210000 51.84650000 44.34260000 63.30140000 501 80.25260000 63.50450000 100.0000000 61.20630000 48.96930000 103.3950000 502 28.69200000 0.000000000 28.16060000 4.861730000 2.372710000 6.280460000 503 27.83270000 9.983890000 28.62120000 4.781210000 2.661200000 6.535600000 504 43.99200000 27.04730000 28.78330000 11.73960000 8.909880000 7.250370000 505 49.23980000 37.68010000 31.68440000 15.81370000 14.19460000 9.309690000 506 51.12090000 44.23490000 46.82100000 19.81870000 18.65160000 20.47490000 507 19.98090000 36.05270000 16.86850000 4.014260000 7.665910000 2.806560000 508 20.19590000 100.0000000 17.90780000 20.69220000 63.78570000 9.404390000 509 22.69740000 100.0000000 44.48230000 23.93350000 65.14000000 23.86200000 510 47.11910000 100.0000000 46.28380000 33.03330000 69.79860000 25.79750000 511 86.31950000 100.0000000 91.36670000 75.71500000 90.42160000 90.29670000 512 93.86750000 100.0000000 92.73300000 84.67520000 94.98240000 93.38950000 513 36.69210000 50.68290000 33.89080000 12.26360000 18.04960000 11.06120000 514 42.46930000 60.61370000 32.26350000 16.50370000 26.00780000 10.99740000 515 20.16650000 31.62330000 28.21250000 4.344210000 6.332420000 6.773620000 516 17.93410000 30.66230000 66.71520000 10.42340000 8.430570000 41.28930000 517 17.02460000 100.0000000 77.59580000 30.50160000 67.64730000 63.86660000 518 25.16280000 100.0000000 100.0000000 40.14770000 71.69050000 106.3240000 519 25.43830000 32.62610000 31.55910000 5.910850000 7.402960000 8.581070000 520 58.35500000 43.48430000 48.56520000 24.45680000 20.68210000 22.20500000 521 69.88000000 53.05810000 58.30870000 36.57220000 31.38450000 33.25020000 522 89.96830000 51.87950000 58.96700000 55.98070000 40.73940000 34.83500000 523 89.72310000 52.45080000 67.96740000 57.97400000 41.82350000 46.23970000 524 89.28220000 86.75440000 77.76220000 69.34410000 73.40100000 64.28820000 525 100.0000000 93.47260000 85.08890000 86.86060000 89.09230000 78.29090000 526 61.26230000 0.000000000 47.83490000 23.34970000 11.60960000 20.50260000 527 72.20320000 0.000000000 59.83870000 34.26100000 16.96210000 33.36230000 528 72.33070000 40.95190000 90.18370000 45.88630000 29.38930000 81.29520000 529 0.000000000 55.07390000 55.32490000 10.11680000 18.94350000 28.86950000 530 0.000000000 73.58020000 57.98290000 15.12570000 34.22040000 33.49710000 531 26.18260000 83.13230000 61.72340000 21.89910000 45.95370000 39.15360000 532 36.40710000 41.81530000 25.13600000 9.880490000 12.80400000 6.088280000 533 47.25960000 46.82370000 30.93530000 16.01700000 18.11490000 9.360940000 534 70.65730000 81.55500000 31.24230000 40.17370000 54.50000000 13.44620000 535 47.78710000 67.79890000 22.26250000 19.95300000 32.82620000 7.181460000 536 51.85660000 100.0000000 20.32110000 32.72600000 69.97460000 10.68500000 537 67.08920000 100.0000000 46.52730000 46.02540000 76.49290000 26.61560000 538 66.60030000 100.0000000 83.03590000 54.64940000 79.89820000 74.03510000 539 0.000000000 26.83310000 33.49730000 2.726210000 4.154780000 9.336600000 540 0.000000000 25.03410000 39.31690000 3.297970000 3.949740000 13.05890000 541 25.83360000 86.23090000 39.63510000 18.79270000 47.78880000 18.19050000 542 25.74770000 88.96380000 58.31830000 23.01270000 52.31050000 35.88070000 543 39.07520000 100.0000000 77.52610000 36.60810000 70.79840000 64.04160000 544 47.59320000 79.93900000 62.25670000 29.24350000 46.80310000 39.80620000 545 67.79990000 88.16610000 72.03160000 47.74780000 63.86510000 54.68540000 546 81.24770000 88.88490000 71.48250000 59.84020000 70.84390000 54.53960000 547 54.87630000 19.18290000 9.355510000 16.00460000 9.648380000 1.450230000 548 58.44260000 17.72650000 0.000000000 18.11220000 10.52250000 0.986424000 549 69.96370000 23.29980000 0.000000000 27.04450000 16.10390000 1.518590000 550 86.19780000 62.92720000 28.56940000 49.49740000 44.58040000 10.80440000 551 100.0000000 63.11460000 34.11940000 66.18370000 53.24400000 14.58470000 552 60.91690000 32.52780000 10.85520000 21.10110000 15.36120000 2.256630000 553 76.73350000 36.24220000 0.000000000 34.20320000 23.34070000 2.267320000 554 100.0000000 38.29430000 15.88560000 60.24850000 37.46660000 5.291480000 555 88.24540000 31.46050000 57.37470000 50.81040000 29.73680000 31.81970000 556 89.01320000 32.22020000 80.20020000 57.77020000 32.85230000 63.69400000 557 88.04900000 41.68360000 100.0000000 65.11980000 39.16050000 102.2000000 558 62.90520000 25.16120000 61.93230000 28.26200000 16.37050000 35.87440000 559 73.94590000 30.19840000 73.39870000 40.56090000 23.63100000 52.11090000 560 42.98720000 9.226320000 29.63540000 10.40280000 5.495400000 7.291930000 561 50.70620000 12.15010000 37.53240000 15.31270000 8.159060000 12.16250000 562 68.23190000 19.64500000 36.09370000 27.40010000 15.38020000 11.90380000 563 72.85200000 22.15300000 89.48640000 44.15260000 22.99370000 79.24430000 564 55.28040000 10.87510000 61.11190000 22.17410000 11.10070000 34.34820000 565 63.06130000 0.000000000 74.48450000 30.76810000 14.72600000 52.84030000 566 74.36200000 0.000000000 86.76710000 43.83730000 21.01060000 73.95510000 567 86.18010000 0.000000000 100.0000000 60.40290000 28.96850000 101.0740000 568 38.10470000 0.000000000 29.33050000 8.177580000 4.069870000 7.002630000 569 58.43280000 0.000000000 28.66280000 18.89810000 9.604800000 7.177930000 570 39.13120000 57.11890000 20.71600000 13.32990000 22.31940000 5.514410000 571 100.0000000 82.27360000 18.86280000 70.23230000 70.77310000 9.832990000 572 100.0000000 91.11870000 23.29090000 73.55720000 81.17040000 12.48430000 573 28.52980000 40.10890000 23.37480000 6.914200000 10.60580000 5.173480000 574 27.87280000 42.23920000 46.05840000 9.682860000 12.58620000 19.24380000 575 26.91470000 52.82880000 51.47330000 12.14490000 18.82370000 24.89660000 576 21.47510000 44.45790000 45.43420000 8.397920000 12.88740000 18.76670000 577 21.06710000 62.03220000 100.0000000 27.18860000 30.44440000 101.6870000 578 19.47710000 68.81210000 100.0000000 28.55440000 35.91500000 102.3070000 579 38.79530000 70.51680000 100.0000000 34.61390000 40.33140000 102.7410000 580 88.74910000 78.81990000 100.0000000 74.17040000 67.56750000 105.3920000 581 91.20700000 87.06930000 100.0000000 79.60720000 78.07940000 106.5450000 582 28.20080000 17.51100000 0.000000000 3.966320000 3.197260000 0.320122000 583 31.72460000 14.28990000 9.263630000 4.975390000 3.290580000 0.843817000 584 33.29240000 9.511540000 25.31870000 6.157150000 3.369640000 5.113620000 585 19.34560000 52.80350000 38.24530000 8.384210000 17.11310000 13.78060000 586 20.10290000 52.07120000 46.11080000 9.540100000 17.18060000 19.82620000 587 30.94520000 76.57880000 67.21150000 22.54370000 40.27970000 45.50630000 588 34.57340000 77.18220000 74.23810000 25.85040000 42.27740000 55.74360000 589 19.28860000 84.42050000 100.0000000 33.15020000 51.54990000 104.0690000 590 19.66260000 92.80750000 100.0000000 36.17750000 61.59470000 105.2000000 591 10.27610000 39.06680000 41.77850000 5.495860000 9.243220000 15.45320000 592 40.08930000 42.76790000 54.71900000 15.58830000 15.67050000 27.77410000 593 62.35700000 48.81490000 72.48100000 33.51710000 27.19200000 51.25790000 594 0.000000000 35.62970000 12.26740000 2.104080000 6.558390000 1.712580000 595 68.92690000 75.38940000 0.000000000 35.40960000 46.82130000 4.988870000 596 80.83140000 88.00740000 0.000000000 50.12630000 65.98990000 7.028380000 597 85.72410000 88.90300000 12.02430000 55.60310000 69.69710000 8.321770000 598 88.00880000 100.0000000 20.97400000 62.70770000 85.42900000 12.30210000 599 100.0000000 100.0000000 19.18920000 76.72430000 92.66860000 12.39630000 600 57.53180000 59.22610000 44.20070000 26.08630000 29.89040000 19.49360000 601 57.85640000 61.21090000 52.96430000 28.26670000 32.10130000 27.71240000 602 58.53290000 69.08600000 65.84510000 33.49360000 39.97480000 43.50980000 603 14.79630000 17.16090000 47.38200000 4.888570000 3.201690000 19.36450000 604 17.53030000 19.40200000 62.59790000 8.474260000 5.036300000 35.63240000 605 38.86580000 24.09530000 68.95590000 16.33810000 9.787960000 44.41680000 606 55.84370000 26.85060000 90.27160000 32.07070000 17.74830000 80.28980000 607 85.09560000 28.06490000 92.06580000 57.26670000 30.96430000 84.97490000 608 57.83750000 33.91500000 49.34210000 22.99970000 16.32900000 22.43140000 609 92.82870000 64.70400000 49.06800000 60.02000000 50.90210000 25.71720000 610 39.90710000 22.08210000 0.000000000 8.318300000 6.207880000 0.613367000 611 44.27020000 30.34230000 0.000000000 10.95610000 9.508780000 0.963206000 612 61.65780000 37.80600000 22.06290000 22.77410000 17.92470000 5.335680000 613 69.66930000 63.52930000 86.65930000 46.62560000 42.05590000 76.17510000 614 77.31150000 71.20260000 100.0000000 60.35950000 54.13680000 104.0090000 615 46.35970000 20.00550000 54.09450000 16.04660000 9.254670000 26.36810000 616 47.53260000 21.11800000 70.40270000 20.54110000 11.32490000 46.57230000 617 60.53960000 19.68540000 72.30450000 28.86960000 15.30950000 49.67460000 618 17.32800000 0.000000000 54.22740000 6.120360000 2.589260000 25.86070000 619 19.41220000 24.85730000 61.00450000 8.783870000 6.284620000 33.83570000 620 35.81800000 33.87670000 76.90570000 18.31040000 13.13760000 56.57620000 621 41.98830000 35.22920000 92.76920000 26.38060000 17.11730000 85.15650000 622 46.78240000 43.92720000 91.74160000 29.45880000 22.09720000 83.67540000 623 66.87240000 73.49670000 91.49130000 48.70680000 50.33450000 86.22390000 624 68.50970000 80.08180000 100.0000000 55.30810000 58.96140000 104.6390000 625 91.90330000 100.0000000 100.0000000 85.27230000 94.95760000 108.4380000 626 32.73480000 57.49990000 29.20220000 11.69710000 21.62900000 8.939420000 627 41.88610000 80.95790000 28.69650000 21.37540000 44.29170000 11.20540000 628 43.06230000 83.03460000 43.20230000 24.34090000 47.53070000 20.77210000 629 37.32230000 100.0000000 52.83810000 29.78200000 67.98700000 31.74880000 630 38.21680000 100.0000000 64.31140000 32.63640000 69.16950000 44.94020000 631 13.66210000 46.77950000 64.98820000 11.50860000 15.09080000 39.78460000 632 15.72350000 46.47320000 73.05730000 13.86220000 15.91330000 51.05650000 633 21.19570000 52.26820000 89.85730000 21.23210000 21.99120000 80.13670000 634 29.08060000 51.42370000 79.83740000 19.58070000 21.08430000 62.22720000 635 27.41660000 64.30060000 85.05980000 23.55980000 30.75380000 72.27750000 636 28.27730000 79.02810000 89.58440000 29.41880000 45.14360000 82.20830000 637 36.71420000 44.43810000 53.26340000 14.19390000 15.70650000 26.29110000 638 41.89170000 52.50670000 62.31160000 19.65950000 22.25990000 37.13930000 639 50.81400000 54.01410000 100.0000000 36.62070000 30.42610000 101.5600000 640 68.96150000 60.42460000 100.0000000 50.41740000 41.37780000 102.6540000 641 38.59030000 16.81270000 25.75590000 8.425070000 5.287450000 5.491390000 642 42.71060000 19.64430000 23.65890000 10.18860000 6.645590000 4.776800000 643 59.93030000 24.10960000 26.00030000 20.49030000 12.78040000 6.309520000 644 58.08180000 24.04250000 31.76780000 19.77860000 12.33690000 9.086110000 645 60.56200000 40.53440000 41.37490000 24.39040000 19.56080000 16.10020000 646 74.64660000 41.25470000 48.65180000 36.82320000 26.12580000 22.75450000 647 100.0000000 63.87670000 49.13940000 68.54030000 54.72430000 26.11570000 648 24.91720000 19.12340000 10.17200000 3.326300000 3.099230000 0.963587000 649 23.50090000 20.90210000 0.000000000 2.980390000 3.237270000 0.337873000 650 34.40880000 29.12750000 39.76370000 9.228270000 7.999850000 13.77050000 651 38.99200000 35.46760000 41.56340000 11.89630000 11.25850000 15.44010000 652 42.67530000 44.66260000 50.15930000 16.14320000 16.87850000 23.35280000 653 47.38650000 44.51550000 49.27640000 18.25790000 17.92190000 22.61910000 654 77.95240000 65.83280000 63.99870000 47.79950000 45.03130000 41.52690000 655 83.96170000 73.07580000 65.97210000 56.11210000 54.73170000 45.09700000 656 28.66890000 70.38360000 23.34710000 13.03340000 31.18930000 7.481590000 657 45.46060000 73.16170000 25.51510000 20.45150000 37.17740000 8.947830000 658 64.19050000 73.66400000 46.50860000 34.72270000 44.64510000 23.03630000 659 77.55650000 73.53520000 45.46190000 45.73810000 50.24020000 22.64930000 660 83.69140000 82.71630000 53.07690000 55.88400000 63.30100000 31.09740000 661 91.99860000 91.45670000 75.96760000 73.53560000 80.41280000 62.21450000 662 54.40560000 53.41160000 44.20090000 22.91760000 24.84120000 18.94720000 663 65.96830000 69.66090000 52.43060000 36.02860000 42.05760000 28.23390000 664 68.18260000 82.31030000 55.17150000 42.02190000 55.72850000 32.57160000 665 13.67460000 34.45010000 0.000000000 2.506280000 6.395150000 0.712336000 666 10.47470000 53.58690000 19.63500000 5.633360000 16.32660000 4.574400000 667 0.000000000 60.99850000 27.12480000 7.323710000 21.57960000 8.007000000 668 26.44970000 65.61870000 44.29000000 13.58010000 27.68850000 19.47570000 669 54.38940000 78.38270000 58.90680000 31.84760000 46.85870000 35.79950000 670 44.13090000 62.26970000 52.24890000 20.60370000 28.86030000 26.71900000 671 53.78190000 82.44090000 53.35800000 31.60460000 50.51980000 30.21530000 672 0.000000000 19.81210000 23.44930000 1.302680000 2.093620000 4.283820000 673 7.779100000 16.32000000 22.33350000 1.250580000 1.551110000 3.808790000 674 17.77760000 20.82110000 29.27730000 3.143440000 3.160830000 6.936980000 675 8.019830000 16.33820000 17.35910000 0.969709000 1.442970000 2.249410000 676 0.000000000 16.13690000 16.00180000 0.670449000 1.269640000 1.889880000 677 0.000000000 25.98300000 18.13650000 1.398210000 3.414130000 2.685320000 678 21.12530000 25.12230000 100.0000000 21.59780000 11.50810000 99.55360000 679 32.44800000 0.000000000 44.66230000 8.049650000 3.780840000 17.06690000 680 34.18850000 0.000000000 85.45340000 18.76270000 8.134230000 70.40810000 681 61.18010000 0.000000000 86.56400000 33.27690000 15.57360000 73.09090000 682 64.67190000 43.17820000 88.08590000 39.27960000 26.99180000 77.14470000 683 38.66500000 66.23640000 54.26460000 19.53990000 30.99530000 29.03310000 684 37.42950000 69.85560000 65.62250000 22.52450000 34.90680000 42.77300000 685 52.11340000 84.88490000 100.0000000 45.51500000 58.37010000 104.7000000 686 29.31920000 26.80090000 31.28160000 6.368750000 6.052620000 8.267600000 687 36.43170000 29.73470000 30.06580000 8.887180000 8.119230000 7.836700000 688 48.96210000 29.83670000 55.52270000 18.45040000 12.63620000 28.23470000 689 63.81340000 20.85380000 53.62370000 26.84490000 14.98090000 26.40680000 690 76.31650000 23.17290000 56.57880000 37.95160000 21.08010000 30.10290000 691 100.0000000 62.10860000 64.89630000 71.45320000 54.65380000 43.48300000 692 100.0000000 66.41440000 100.0000000 84.03530000 62.76850000 104.7010000 693 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 694 0.000000000 7.985680000 10.20640000 0.195939000 0.291558000 0.682606000 695 30.43810000 70.96170000 74.38330000 22.75830000 35.60310000 55.22680000 696 55.34700000 73.58630000 76.77320000 35.67770000 44.26170000 59.76520000 697 66.56630000 92.51900000 79.36920000 50.52440000 69.55130000 66.69580000 698 17.38640000 28.22460000 21.36560000 3.010810000 4.771250000 3.822490000 699 19.02200000 28.58250000 34.02610000 4.438210000 5.469540000 9.778680000 700 26.22350000 30.82690000 36.29640000 6.458480000 7.092310000 11.34520000 701 29.52430000 30.67780000 61.86840000 11.86910000 9.316990000 35.19160000 702 39.15060000 61.66950000 83.54800000 26.41670000 30.51870000 69.54360000 703 12.19750000 9.604810000 17.42770000 1.075180000 0.815253000 2.193060000 704 0.000000000 8.567120000 16.08080000 0.421622000 0.417462000 1.812880000 705 8.477430000 12.85760000 28.60000000 1.656990000 1.299750000 6.408100000 706 22.81500000 14.29330000 43.00790000 5.436200000 3.199940000 15.70100000 707 30.90850000 15.67630000 51.91780000 9.127570000 5.094780000 23.77240000 708 35.53740000 16.20710000 75.18170000 16.31610000 8.222620000 53.34070000 709 46.68520000 67.28290000 82.22210000 30.79820000 36.70630000 67.91370000 710 45.99640000 91.84970000 92.54010000 41.71210000 63.77190000 89.93960000 711 18.83260000 36.94730000 37.30060000 5.695190000 8.639630000 12.19180000 712 20.79320000 38.68070000 79.91310000 15.61480000 13.30550000 61.49820000 713 40.46860000 42.45600000 100.0000000 29.52720000 21.12810000 100.5700000 714 13.80150000 0.000000000 33.00150000 2.383940000 1.039160000 8.691130000 715 10.26230000 11.53510000 31.75540000 2.056580000 1.345850000 8.033100000 716 25.69110000 10.19170000 33.70430000 4.747440000 2.599190000 9.249670000 717 24.30830000 0.000000000 34.54860000 4.388770000 2.052730000 9.694490000 718 40.51980000 0.000000000 61.30950000 14.32660000 6.645010000 34.17050000 719 84.13420000 19.84680000 66.63580000 47.67960000 25.21060000 42.64540000 720 94.42260000 36.51130000 76.85080000 63.40460000 37.27140000 58.70470000 721 100.0000000 60.92370000 90.13240000 78.88730000 56.82240000 83.95740000 722 23.47340000 17.97430000 22.45790000 3.511580000 2.949380000 3.986600000 723 20.74790000 55.03290000 59.57220000 12.82780000 20.21330000 33.71480000 724 22.53920000 82.05540000 74.53890000 24.04900000 45.67370000 56.62040000 725 27.09750000 100.0000000 84.81490000 34.91970000 69.65620000 76.22610000 726 36.09910000 52.70140000 47.58620000 14.34630000 19.96970000 21.37500000 727 48.66750000 56.94730000 48.25180000 21.00230000 25.80320000 22.56350000 728 47.83580000 56.46710000 59.08290000 22.58900000 26.09110000 33.70380000 729 55.02820000 71.84570000 100.0000000 43.29110000 45.83910000 103.2680000 730 0.000000000 16.34650000 85.38750000 13.64240000 6.487060000 70.16600000 731 20.61020000 22.22760000 88.96810000 17.02180000 9.040560000 76.99830000 732 22.19810000 33.47710000 100.0000000 22.59790000 14.26690000 99.86200000 733 0.000000000 17.22960000 62.58330000 7.102200000 3.997450000 35.51150000 734 41.78090000 18.74490000 100.0000000 27.74820000 13.46940000 99.70070000 735 77.68130000 23.35850000 100.0000000 52.67190000 27.15350000 100.9650000 736 87.89220000 56.10850000 100.0000000 67.44710000 47.51800000 103.1430000 737 20.90450000 25.96830000 22.46400000 3.506920000 4.467390000 4.165860000 738 20.50160000 24.50030000 41.87590000 5.384240000 4.866830000 15.01870000 739 42.92460000 40.18540000 60.54460000 17.71960000 15.57440000 34.25190000 740 52.60640000 48.40520000 80.30850000 29.42470000 24.60890000 63.28930000 741 67.24010000 48.15800000 82.46440000 40.12880000 29.92680000 67.41530000 742 83.64920000 51.22200000 82.98010000 55.69090000 39.47990000 69.21230000 743 84.19680000 0.000000000 15.20410000 39.80600000 20.49010000 3.425150000 744 100.0000000 0.000000000 14.96710000 57.96090000 29.85220000 4.222580000 745 100.0000000 0.000000000 32.81780000 59.29550000 30.38610000 11.25240000 746 85.96690000 0.000000000 37.39690000 43.52040000 22.18970000 13.33350000 747 85.42820000 0.000000000 74.56260000 50.65780000 24.97890000 53.89060000 748 0.000000000 67.29760000 17.03120000 8.148950000 26.40930000 4.978880000 749 0.000000000 87.67220000 19.36990000 14.40120000 47.17490000 7.973720000 750 80.59990000 86.76700000 21.66810000 50.12010000 64.67750000 10.28550000 751 100.0000000 86.60310000 63.65670000 78.16430000 78.24540000 44.56390000 752 100.0000000 86.86610000 76.93350000 81.85700000 79.99220000 63.57130000 753 19.90920000 14.40000000 11.73890000 2.088170000 1.806490000 1.068700000 754 20.71480000 14.35910000 0.000000000 2.068370000 1.811170000 0.183710000 755 34.70110000 13.10640000 0.000000000 5.837070000 3.618930000 0.344457000 756 45.60680000 23.46170000 17.46100000 11.42920000 8.038600000 2.906690000 757 55.89060000 39.30940000 28.70650000 19.63370000 16.80450000 8.028730000 758 55.57470000 53.42510000 37.98050000 22.75760000 24.86860000 14.31370000 759 69.20520000 61.54750000 49.41140000 36.04150000 36.40550000 24.66330000 760 76.87000000 68.41120000 51.04070000 44.67740000 45.61030000 27.16740000 761 80.47830000 76.54360000 56.76890000 51.49590000 55.45980000 34.13990000 762 12.67890000 11.55820000 15.47560000 1.086450000 0.986336000 1.727210000 763 14.20380000 0.000000000 11.00850000 0.935670000 0.465455000 0.810952000 764 81.40820000 13.47600000 11.93430000 37.08790000 19.75050000 2.729020000 765 81.76290000 19.32450000 0.000000000 37.53820000 20.78630000 1.925250000 766 80.51930000 56.70100000 49.74620000 45.19130000 38.09880000 25.05200000 767 0.000000000 22.10790000 10.24200000 0.796723000 2.320070000 0.916133000 768 0.000000000 19.58600000 14.41430000 0.780196000 1.845440000 1.596150000 769 0.000000000 19.99390000 51.76760000 4.961820000 3.589130000 23.50420000 770 0.000000000 25.61900000 67.60330000 8.884270000 6.321240000 42.25730000 771 11.46000000 41.43900000 71.48540000 12.16050000 12.89000000 48.41990000 772 33.11220000 46.96690000 83.81370000 21.35800000 19.62520000 68.80560000 773 39.23450000 54.31830000 84.94960000 25.36280000 25.44790000 71.43860000 774 68.60940000 38.19790000 59.23290000 33.36850000 22.92140000 33.36430000 775 70.50690000 39.55330000 70.26740000 37.81660000 25.41160000 47.79310000 776 71.81030000 51.01000000 71.42410000 41.04140000 32.22120000 50.20160000 777 0.000000000 32.91260000 25.61800000 2.552280000 5.822490000 5.573190000 778 10.57480000 38.94720000 27.55300000 3.849730000 8.540640000 6.728770000 779 0.000000000 40.49030000 35.13220000 4.426360000 9.343900000 10.90110000 780 100.0000000 40.38330000 74.03920000 69.91500000 42.16320000 54.84460000 781 57.49180000 23.30960000 45.46620000 21.15140000 12.68280000 18.60050000 782 81.80550000 23.18760000 46.68880000 41.35180000 23.05060000 20.58690000 783 86.91960000 37.10080000 47.16980000 48.07270000 30.37660000 21.77240000 784 86.08900000 69.71210000 52.25240000 54.39240000 51.56900000 28.92160000 785 94.06130000 72.45140000 65.95950000 67.07700000 59.88710000 45.53590000 786 46.91150000 26.97570000 34.26320000 13.74020000 9.858280000 10.30850000 787 46.24890000 26.49270000 63.51000000 18.51340000 11.60780000 37.40180000 788 61.64070000 29.93630000 81.17890000 33.10490000 19.44060000 64.09680000 789 64.71620000 81.16710000 86.09610000 47.41460000 56.48210000 76.82290000 790 65.68320000 80.35130000 91.19330000 49.71710000 56.71990000 86.37600000 791 45.94970000 59.97340000 55.36720000 21.58470000 27.80730000 29.79580000 792 49.65980000 87.76140000 56.89990000 31.74020000 55.63360000 34.56640000 793 49.68740000 100.0000000 71.39670000 39.91060000 72.70720000 54.89720000 794 58.49300000 91.68620000 49.56860000 37.08290000 62.58260000 27.84800000 795 58.40570000 100.0000000 52.15650000 40.72510000 73.64450000 31.58140000 796 79.73930000 100.0000000 66.82630000 61.36230000 83.90860000 49.56140000 797 70.08950000 67.57890000 48.41930000 38.05060000 41.63490000 24.33470000 798 69.86870000 71.83700000 62.78920000 41.93940000 46.52950000 40.26260000 799 77.08730000 72.85320000 69.70970000 50.29640000 51.44230000 49.87480000 800 76.57390000 87.50920000 88.00020000 60.10850000 68.99590000 81.60610000 801 18.98660000 58.86450000 35.07870000 9.157540000 21.08090000 12.17360000 802 20.12790000 74.52400000 38.82850000 13.76570000 34.67350000 16.15920000 803 17.03260000 76.16870000 100.0000000 30.19210000 42.60820000 103.0650000 804 10.49450000 36.44080000 60.72950000 8.704850000 9.535560000 33.88730000 805 0.000000000 42.10200000 67.33860000 10.65570000 12.51440000 42.59810000 806 0.000000000 64.60920000 78.50550000 18.15260000 28.42540000 60.92170000 807 8.239510000 82.31220000 78.27490000 23.31240000 45.40180000 62.45940000 808 6.952050000 13.43450000 8.728640000 0.476579000 0.878815000 0.557813000 809 13.70000000 8.595250000 0.000000000 0.812555000 0.659867000 0.066148700 810 13.08910000 12.63570000 8.205570000 0.932133000 1.033880000 0.511179000 811 7.952570000 7.661810000 24.54600000 1.142710000 0.677166000 4.549820000 812 0.000000000 9.471730000 23.28020000 0.867023000 0.657078000 4.058060000 813 0.000000000 22.54000000 43.47670000 3.714060000 3.573970000 16.13910000 814 11.40870000 30.09620000 53.33010000 6.532670000 6.613390000 25.40060000 815 0.000000000 32.39410000 52.70630000 6.157320000 7.099660000 24.83100000 816 0.000000000 50.77220000 83.23320000 16.74880000 19.15650000 67.79880000 817 0.000000000 75.39240000 87.70250000 24.07130000 39.34690000 78.07550000 818 13.13320000 39.93210000 48.34880000 6.934340000 10.19610000 21.01830000 819 15.13500000 57.83620000 47.48690000 10.13050000 20.74670000 21.43340000 820 20.73350000 100.0000000 56.75660000 25.78120000 65.83290000 35.67700000 821 17.35530000 40.77250000 16.62890000 4.169030000 9.499270000 2.957370000 822 45.95240000 40.35620000 12.48660000 13.14640000 13.98290000 2.470400000 823 58.62110000 41.55310000 18.59880000 20.97330000 18.46690000 4.311750000 824 68.07180000 43.04960000 18.06590000 28.09660000 22.76670000 4.567580000 825 78.39970000 44.50050000 32.04180000 38.43770000 28.60110000 10.88550000 826 83.21130000 54.50260000 31.95650000 44.91210000 36.97490000 11.72870000 827 25.22000000 41.46220000 0.000000000 5.464300000 10.48700000 1.150140000 828 30.04130000 44.85730000 17.62090000 7.691670000 13.03690000 3.581980000 829 45.58300000 57.04910000 28.76010000 16.86110000 24.02630000 8.933550000 830 53.96500000 70.31610000 41.69730000 26.15410000 37.67370000 18.43200000 831 74.26940000 75.11780000 60.26350000 46.04920000 51.36700000 37.71620000 832 81.86160000 77.95670000 67.00350000 55.66840000 58.54800000 46.91730000 833 85.04040000 79.85850000 89.98670000 66.61950000 65.04480000 84.80060000 834 52.54850000 43.93310000 56.07870000 22.32350000 19.61120000 29.59480000 835 56.46930000 51.29870000 68.38570000 28.84570000 26.17860000 45.37470000 836 59.98080000 61.40390000 70.60960000 33.84240000 34.62720000 49.40720000 837 29.54510000 29.11420000 45.14250000 8.451850000 7.503810000 17.89390000 838 67.07350000 29.14730000 53.10030000 29.87240000 18.39500000 26.23080000 839 100.0000000 55.48370000 53.89910000 67.58530000 48.84360000 30.09750000 840 99.31120000 61.49610000 54.09030000 68.04270000 52.77070000 30.74710000 841 100.0000000 76.60080000 82.51830000 80.32960000 69.57580000 71.59710000 842 100.0000000 82.28260000 91.35790000 85.18250000 76.76160000 88.56140000 843 100.0000000 92.60050000 100.0000000 92.15990000 90.23910000 107.7960000 844 14.93710000 0.000000000 17.49050000 1.287850000 0.616997000 2.183900000 845 21.23800000 23.61770000 14.28730000 2.947500000 3.714200000 1.758440000 846 37.09260000 33.82530000 22.33040000 8.918960000 9.419820000 4.623300000 847 45.42410000 43.32020000 20.10520000 13.66860000 15.42960000 4.509860000 848 56.78170000 51.37710000 21.06800000 21.51320000 23.31180000 5.638100000 849 63.81310000 56.58170000 30.72240000 28.18130000 29.56380000 10.42180000 850 69.40070000 58.87500000 59.55530000 37.63540000 35.29220000 35.12390000 851 68.60880000 63.46240000 62.64390000 38.73790000 38.75390000 39.21860000 852 75.63830000 67.92440000 83.11580000 51.66640000 47.90130000 70.48280000 853 27.68230000 26.39370000 66.63650000 12.12080000 8.198840000 41.13490000 854 29.88920000 33.27970000 91.23470000 21.08280000 13.82130000 81.83470000 855 19.43610000 6.781880000 32.86930000 3.251030000 1.630970000 8.673030000 856 35.00890000 17.08950000 31.85220000 7.636120000 4.853560000 8.421080000 857 73.77550000 22.75140000 32.17900000 31.81430000 18.27330000 9.845420000 858 100.0000000 23.68010000 39.62910000 60.91090000 33.36000000 15.94500000 859 100.0000000 71.44370000 44.81870000 69.75040000 60.97060000 23.04490000 860 80.12110000 66.36230000 43.81060000 46.01740000 44.95050000 20.66920000 861 100.0000000 82.40450000 49.57550000 73.81640000 72.33280000 28.50370000 862 100.0000000 100.0000000 59.63930000 82.26460000 94.88470000 41.57720000 863 25.87250000 24.41160000 18.11470000 4.223220000 4.519090000 2.770560000 864 30.95960000 26.47510000 16.65930000 5.739840000 5.777050000 2.510220000 865 29.75200000 62.05330000 21.74370000 11.16260000 24.29530000 6.120610000 866 18.48050000 49.67690000 25.42360000 6.315970000 14.56280000 6.460380000 867 19.40560000 65.97810000 26.08590000 9.980870000 26.33670000 8.066430000 868 56.18690000 67.72650000 24.97830000 24.99670000 35.35070000 8.451360000 869 66.23480000 72.90510000 29.34580000 33.83670000 43.83440000 11.30580000 870 67.63280000 82.96920000 39.26390000 39.11710000 55.15350000 18.51580000 871 78.53670000 82.69980000 45.77510000 49.49350000 60.14070000 24.01840000 872 83.36750000 100.0000000 77.51900000 67.95980000 86.96410000 65.49890000 873 51.90900000 67.00210000 49.84980000 25.39880000 34.66290000 25.01130000 874 84.51630000 67.33750000 61.93260000 54.17450000 49.45550000 39.38810000 875 97.75020000 67.61390000 66.78760000 70.44900000 57.91150000 46.35810000 876 28.19230000 20.30740000 18.70340000 4.590280000 3.908240000 2.862050000 877 26.39170000 85.95700000 16.55960000 16.74270000 46.70680000 7.111040000 878 0.000000000 51.74130000 36.94260000 6.462340000 15.57100000 12.75330000 879 0.000000000 66.18320000 45.94110000 10.88730000 26.66980000 20.76970000 880 0.000000000 87.65910000 47.27240000 17.51000000 48.40480000 24.37030000 881 0.000000000 88.40930000 66.67970000 21.86900000 50.93160000 46.04520000 882 0.000000000 91.00250000 85.20410000 28.31310000 56.27820000 75.44800000 883 18.25430000 100.0000000 92.43850000 35.75470000 69.77100000 90.51770000 884 9.354130000 13.19800000 0.000000000 0.530645000 0.892247000 0.096982900 885 18.41300000 9.123200000 0.000000000 1.491620000 1.043750000 0.101892000 886 35.34510000 0.000000000 12.11220000 6.037890000 3.092280000 1.229320000 887 59.48660000 74.28500000 17.96230000 28.48280000 42.28780000 6.809650000 888 79.74780000 93.94170000 24.89140000 52.11570000 73.10820000 12.45790000 889 75.65830000 45.03640000 0.000000000 34.43820000 26.95600000 2.685700000 890 87.57380000 44.47880000 28.51700000 47.39130000 33.24840000 9.485980000 891 87.38810000 46.87120000 71.49280000 55.37750000 37.55670000 50.73280000 892 43.77580000 46.36600000 63.89660000 19.82510000 19.21640000 38.75910000 893 44.90950000 58.54870000 81.35310000 27.58790000 29.22400000 65.60480000 894 0.000000000 33.17500000 33.89420000 3.381900000 6.238920000 9.804130000 895 0.000000000 33.47080000 84.95270000 14.81970000 10.91020000 69.88900000 896 0.000000000 40.42100000 100.0000000 21.35120000 16.08510000 100.0910000 897 20.78120000 48.33250000 100.0000000 24.39130000 21.14530000 100.6400000 898 63.52410000 85.22320000 100.0000000 53.13420000 62.62440000 105.0950000 899 68.92900000 92.65440000 100.0000000 59.95130000 73.68920000 106.2940000 900 29.67450000 52.90780000 0.000000000 8.561690000 17.52430000 1.929490000 901 55.60530000 52.57160000 0.000000000 20.37550000 23.43310000 2.461610000 902 86.75770000 83.43030000 0.000000000 54.65450000 63.87580000 6.721810000 903 100.0000000 90.86930000 0.000000000 72.70260000 80.55760000 8.427180000 904 77.79970000 25.35480000 18.44720000 34.56970000 20.37220000 4.309950000 905 83.76480000 38.36040000 16.29520000 41.66650000 27.90770000 4.522850000 906 92.73790000 52.01900000 24.33850000 54.10930000 40.43260000 8.398920000 907 93.00540000 81.26380000 24.51950000 61.78220000 65.44530000 11.28560000 908 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 909 0.000000000 10.62180000 9.061640000 0.229696000 0.491089000 0.555509000 910 10.45070000 18.11850000 0.000000000 0.835033000 1.672440000 0.183905000 911 18.29860000 30.37590000 0.000000000 2.726950000 5.275100000 0.578823000 912 20.61320000 39.00680000 9.545410000 4.236630000 8.878020000 1.540900000 913 83.88770000 43.89790000 38.28690000 44.50170000 31.37780000 14.99290000 914 100.0000000 50.21040000 60.64820000 68.01570000 46.03010000 37.25820000 915 59.06550000 0.000000000 12.96350000 18.32720000 9.425480000 1.957480000 916 71.36410000 10.06510000 11.82730000 27.75320000 14.63100000 2.238020000 917 71.88780000 0.000000000 16.11120000 28.24700000 14.52540000 3.095780000 918 85.72390000 0.000000000 25.97920000 42.07110000 21.58030000 7.040020000 919 39.69690000 34.85740000 0.000000000 9.387770000 10.07700000 1.050270000 920 42.33370000 57.20060000 0.000000000 14.14010000 22.85430000 2.476870000 921 44.54090000 78.79290000 0.000000000 20.72330000 42.16180000 4.640530000 922 57.16080000 87.26530000 0.000000000 30.60720000 55.18470000 6.027680000 923 62.72290000 89.63200000 32.08020000 36.80420000 60.58990000 14.65790000 924 76.86430000 89.12880000 83.34510000 59.34530000 70.41900000 73.40480000 925 19.27540000 11.06650000 19.32090000 2.196470000 1.493940000 2.795030000 926 23.61020000 9.069550000 16.72610000 2.874760000 1.710740000 2.091060000 927 35.63210000 0.000000000 20.58890000 6.543950000 3.306840000 3.346280000 928 50.44040000 0.000000000 18.52390000 13.26450000 6.786040000 3.030650000 929 62.57310000 0.000000000 23.17160000 21.32240000 10.90690000 4.940760000 930 61.83060000 0.000000000 38.95000000 22.40070000 11.27660000 13.40150000 931 84.62770000 0.000000000 45.54060000 43.29010000 21.93520000 19.44810000 932 87.83490000 0.000000000 55.73690000 48.56280000 24.43800000 29.44060000 933 100.0000000 0.000000000 58.63090000 63.48890000 32.06340000 33.33870000 934 100.0000000 0.000000000 78.27160000 68.65300000 34.12890000 60.53800000 935 24.88540000 46.69950000 52.15680000 10.68100000 14.95000000 25.13740000 936 26.99740000 51.64000000 61.61260000 14.06290000 18.92970000 35.97250000 937 34.22230000 61.07280000 69.53540000 20.19250000 27.40770000 47.22760000 938 46.74590000 65.77680000 72.14170000 27.39330000 34.22420000 51.66080000 939 68.66920000 72.43130000 78.19660000 45.31870000 48.25660000 62.37390000 940 59.37580000 89.24560000 18.66960000 33.24240000 58.48260000 8.834710000 941 64.72410000 100.0000000 18.62980000 41.17510000 74.34250000 10.56700000 942 76.79730000 100.0000000 21.53430000 51.46740000 79.62910000 11.96460000 943 76.75070000 100.0000000 38.90880000 53.14240000 80.29410000 21.01140000 944 83.36550000 100.0000000 51.55610000 61.59170000 84.41670000 31.96870000 945 37.20130000 26.14960000 8.826160000 7.615940000 6.699450000 1.153100000 946 81.47410000 56.21070000 10.91310000 42.12260000 36.67970000 4.471890000 947 100.0000000 56.60870000 0.000000000 62.98040000 47.68520000 4.723680000 948 100.0000000 73.35940000 0.000000000 67.05920000 61.47620000 6.277410000 949 58.91350000 44.67520000 9.825750000 21.28260000 19.99810000 2.648070000 950 60.43510000 48.34230000 0.000000000 22.80480000 22.50830000 2.321550000 951 62.40760000 59.55520000 13.84080000 26.62600000 30.70790000 4.499300000 952 19.00650000 70.05310000 0.000000000 9.978350000 29.44990000 3.301080000 953 23.27660000 85.31250000 0.000000000 15.42010000 45.44090000 5.093220000 954 22.70300000 93.12970000 8.827130000 18.16780000 54.81950000 6.623400000 955 10.27210000 35.81690000 20.69740000 2.915630000 6.993950000 3.859760000 956 12.19640000 43.63580000 41.60300000 6.294150000 11.51070000 15.57380000 957 14.78490000 46.21640000 52.03030000 8.732670000 13.72300000 24.89480000 958 12.88140000 51.16150000 51.48120000 9.255550000 16.44390000 24.66520000 959 16.88640000 66.37330000 50.91480000 12.95150000 27.77010000 25.38690000 960 27.28160000 93.32320000 72.76450000 28.60460000 59.33780000 55.48940000 961 27.26060000 91.32420000 79.81970000 29.96890000 57.67330000 66.32590000 962 10.49130000 21.86930000 16.93110000 1.439330000 2.576730000 2.263470000 963 9.420290000 32.77030000 13.77400000 2.155590000 5.655240000 1.889740000 964 35.06560000 79.82210000 18.99190000 17.54520000 41.37800000 7.143110000 965 57.67410000 91.39430000 75.12790000 42.44780000 64.34660000 59.45440000 966 65.94240000 91.78490000 85.79650000 51.88470000 69.22990000 77.70860000 967 42.84550000 78.67930000 53.80110000 24.70660000 43.55910000 29.94940000 968 61.76710000 82.28690000 75.22530000 42.13630000 55.19060000 58.54090000 969 24.96690000 15.64270000 19.82060000 3.576010000 2.680900000 3.068180000 970 30.87450000 12.25110000 20.34420000 5.100420000 3.089480000 3.261030000 971 54.83770000 13.43470000 46.30270000 19.07230000 10.07710000 19.03620000 972 68.45010000 14.96630000 48.07940000 29.10100000 15.38590000 21.08590000 973 72.07780000 73.48190000 48.25280000 41.28130000 47.84530000 24.86510000 974 73.87970000 79.75750000 54.75390000 45.92290000 55.43010000 32.04380000 975 90.57090000 92.63920000 84.82810000 75.17260000 82.18210000 77.17580000 976 91.46950000 100.0000000 84.78000000 79.04590000 92.40980000 78.23120000 977 72.10650000 17.61610000 6.444040000 28.54710000 15.88160000 1.709600000 978 77.52900000 57.76620000 19.92700000 39.04330000 35.97260000 6.512080000 979 94.03890000 62.76650000 27.77480000 58.16710000 48.95130000 10.82220000 980 94.38330000 73.08220000 39.77020000 62.57370000 58.65390000 18.97280000 981 30.19280000 23.32690000 27.97610000 6.039810000 5.146860000 6.501170000 982 34.01000000 25.82380000 44.91830000 9.563450000 7.264010000 17.66470000 983 35.40270000 42.08070000 64.16060000 15.73460000 15.21630000 38.68210000 984 48.50060000 47.34570000 70.87920000 24.15690000 21.70330000 48.41460000 985 51.52520000 73.86370000 82.75280000 35.35710000 44.10330000 69.62820000 986 0.000000000 43.49970000 44.26290000 6.108900000 11.31020000 17.64320000 987 0.000000000 60.48100000 50.10340000 10.25670000 22.40660000 24.02240000 988 10.60450000 60.47510000 55.51400000 11.71160000 23.03250000 29.52690000 989 7.933250000 77.56640000 55.21580000 15.92860000 38.03250000 30.90180000 990 10.22830000 82.90180000 94.29150000 29.20490000 48.34580000 91.80340000 991 92.87450000 82.89140000 93.03100000 77.35490000 73.21880000 91.54000000 992 66.62360000 31.86720000 40.17110000 27.64220000 18.25900000 15.01600000 993 79.92350000 40.71920000 44.53920000 40.98100000 28.13360000 19.36790000 994 54.04370000 34.45540000 31.18170000 18.13310000 14.28660000 9.017830000 995 61.59460000 47.09310000 36.96050000 25.51670000 23.06140000 13.38550000 996 32.30290000 34.07190000 23.45770000 7.318700000 8.664420000 4.973270000 997 30.82160000 51.24200000 31.91190000 10.12420000 17.26280000 9.867650000 998 35.32560000 81.97260000 48.20880000 21.61460000 45.04530000 24.75990000 999 38.72000000 84.91520000 58.57580000 25.91140000 49.79620000 35.84200000 1000 17.98760000 42.98160000 25.72020000 5.172650000 10.85850000 6.168880000 1001 17.94700000 44.19360000 34.83900000 6.250370000 11.83340000 10.98690000 1002 14.73270000 45.61370000 58.50000000 9.944460000 13.91860000 31.78470000 1003 33.94990000 51.02090000 64.30760000 16.71170000 19.89600000 39.40200000 1004 61.84410000 58.58910000 65.97400000 33.30970000 32.70950000 42.83460000 1005 59.82600000 54.58820000 56.95330000 28.99130000 28.36030000 31.48200000 1006 63.08550000 84.48860000 59.13650000 39.67390000 56.46950000 37.08060000 1007 68.06450000 100.0000000 62.54300000 50.00500000 78.17410000 43.54040000 1008 17.38380000 58.43850000 17.37320000 7.323780000 20.04370000 4.337430000 1009 16.34030000 69.92650000 17.85160000 9.946930000 29.28800000 5.509550000 1010 14.53590000 63.50590000 71.35740000 16.62530000 27.12370000 49.83490000 1011 9.379990000 59.27030000 76.67120000 16.68260000 24.21720000 57.51950000 1012 74.81790000 59.63340000 83.80200000 49.18230000 40.94010000 70.90090000 1013 90.37170000 71.10870000 93.31930000 71.09130000 59.90430000 90.64450000 1014 41.89710000 50.72040000 48.55300000 16.52380000 20.02290000 22.22220000 1015 42.96190000 64.50290000 65.76600000 23.55750000 31.55090000 42.55590000 1016 43.84420000 71.21260000 75.83280000 28.44300000 38.67980000 57.73760000 1017 32.23410000 40.96760000 8.166560000 7.465330000 11.31020000 1.618370000 1018 43.33240000 66.47820000 0.000000000 16.72610000 30.28460000 3.308850000 1019 42.85500000 88.93080000 0.000000000 23.28090000 53.08000000 5.879530000 1020 31.51510000 31.02540000 13.98080000 6.213980000 7.228580000 2.061270000 1021 35.79970000 35.99000000 10.21040000 8.108550000 9.784470000 1.684910000 1022 35.61370000 71.66290000 53.65130000 19.65650000 35.13210000 28.87990000 1023 44.61240000 87.91480000 68.52160000 31.94550000 55.57500000 48.94770000 1024 47.59180000 87.88240000 77.01570000 35.82900000 57.26730000 61.66290000 1025 73.26930000 91.70650000 82.19710000 56.66580000 71.75220000 71.61360000 1026 75.35190000 55.95540000 56.64640000 41.51770000 35.61170000 31.82380000 1027 91.34030000 59.24310000 67.03120000 60.93100000 47.32590000 45.57620000 1028 90.66280000 70.52690000 75.98100000 65.38320000 57.19120000 59.63620000 1029 7.393400000 8.555900000 15.55360000 0.585113000 0.503836000 1.695690000 1030 8.502070000 3.609120000 14.31920000 0.529599000 0.278505000 1.396670000 1031 11.67380000 6.443890000 9.618430000 0.666169000 0.458707000 0.616188000 1032 14.90590000 8.994180000 29.17510000 2.223230000 1.267580000 6.677840000 1033 48.73030000 0.000000000 30.44290000 13.24400000 6.669680000 7.804680000 1034 71.77920000 8.411720000 31.69750000 29.39900000 15.21450000 9.255490000 1035 83.36360000 18.90040000 32.37630000 40.70370000 22.16810000 10.29170000 1036 88.37890000 26.77510000 42.41740000 47.82900000 27.26290000 17.48270000 1037 90.70440000 31.62030000 65.62660000 55.46320000 31.96220000 41.99780000 1038 37.19380000 10.96780000 53.13390000 11.37960000 5.737600000 25.03460000 1039 37.63060000 60.33810000 55.93460000 18.07450000 26.21580000 30.26540000 1040 53.13260000 70.86110000 61.46770000 29.50620000 39.39330000 37.97790000 1041 83.21570000 83.36870000 67.94620000 58.98290000 65.11940000 48.91340000 1042 84.98470000 83.53070000 79.04880000 64.03640000 67.51010000 65.75370000 1043 85.75930000 90.99190000 87.19470000 70.13620000 77.75220000 81.00510000 1044 59.93620000 34.66330000 42.30250000 23.35170000 16.88500000 16.50870000 1045 65.67210000 41.25890000 52.32460000 30.05080000 22.55810000 25.93420000 1046 79.83460000 45.47360000 57.54010000 44.00560000 31.44130000 32.29310000 1047 78.83120000 47.70290000 72.13010000 46.99870000 33.61200000 51.31230000 1048 78.43560000 50.00010000 92.73830000 53.78980000 37.46840000 87.10440000 1049 19.84110000 34.98850000 23.43080000 4.261340000 7.387630000 4.854740000 1050 18.43710000 79.75070000 49.11340000 16.62010000 40.43810000 25.11510000 1051 41.11640000 80.67530000 82.73940000 32.14430000 48.29340000 70.13620000 1052 41.39260000 87.59430000 82.87270000 34.60450000 56.13360000 71.24800000 1053 48.78930000 13.03930000 8.907140000 12.20180000 6.883180000 1.123260000 1054 53.38560000 9.133300000 14.10680000 14.85440000 7.905180000 2.051400000 1055 80.99510000 64.81120000 17.68460000 43.84330000 43.04200000 6.617670000 1056 89.72750000 72.95030000 16.99940000 55.09450000 54.93400000 7.673250000 1057 90.49170000 75.31810000 36.50250000 58.29420000 58.32440000 16.76320000 1058 73.05490000 65.14670000 39.43510000 38.57490000 40.32640000 16.91550000 1059 84.42310000 74.62900000 51.00170000 53.77000000 55.16350000 28.12280000 1060 17.90130000 13.18580000 15.28640000 1.829840000 1.525900000 1.736820000 1061 18.84980000 10.17340000 14.75490000 1.871270000 1.281510000 1.589230000 1062 34.03830000 18.08210000 21.41570000 6.457350000 4.492500000 3.761320000 1063 36.65270000 70.90990000 20.16350000 15.61140000 32.94860000 6.545070000 1064 52.55510000 84.31410000 33.55390000 28.46640000 51.01260000 14.49110000 1065 59.47820000 83.81540000 92.16580000 46.70880000 58.32340000 88.50100000 1066 20.77790000 20.21720000 24.48290000 3.224460000 3.144420000 4.784520000 1067 28.68190000 17.45170000 29.76490000 5.408200000 3.780700000 7.223730000 1068 27.35280000 22.74880000 36.58310000 6.109190000 4.960170000 11.28640000 1069 37.87700000 27.27970000 36.43790000 9.928450000 7.937340000 11.48890000 1070 60.41530000 73.42320000 36.94490000 30.55130000 42.46000000 15.57010000 1071 75.55180000 73.91070000 37.29790000 42.82550000 49.17870000 16.42350000 1072 90.92430000 82.56070000 52.73600000 63.56400000 67.12380000 31.09700000 1073 99.08190000 83.07850000 56.35910000 74.18790000 73.00080000 35.43550000 1074 33.87530000 41.59730000 17.52270000 8.438380000 12.02830000 3.428060000 1075 46.25730000 60.17500000 17.94890000 17.08570000 26.15880000 5.076760000 1076 50.94130000 84.14980000 20.69770000 26.36740000 49.90280000 8.551290000 1077 69.71450000 85.80590000 18.95910000 39.82120000 58.44480000 8.827590000 1078 79.76090000 87.77560000 32.16500000 50.55490000 65.79900000 15.12990000 1079 80.90100000 90.86050000 43.31780000 54.20230000 70.66370000 23.16440000 1080 84.57950000 92.36570000 82.40840000 67.78110000 78.17320000 72.57700000 1081 52.51330000 13.29120000 53.00510000 18.86740000 9.817870000 25.28050000 1082 52.66810000 29.46040000 80.64890000 27.06960000 16.21860000 62.91050000 1083 52.19350000 41.21360000 83.77970000 29.19570000 21.14790000 68.81960000 1084 23.76130000 100.0000000 30.92940000 22.42400000 64.56340000 14.68810000 1085 44.35930000 100.0000000 30.91430000 29.62870000 68.27840000 15.01760000 1086 44.52130000 90.98250000 38.56750000 27.11670000 56.90300000 18.39260000 1087 73.73010000 90.21840000 64.82710000 51.55420000 68.13870000 45.23000000 1088 36.14920000 39.37420000 31.03210000 9.978030000 11.82450000 8.759130000 1089 34.85680000 44.13790000 29.98960000 10.08270000 13.84510000 8.449430000 1090 44.98890000 77.81210000 35.79320000 22.60640000 42.05020000 14.88600000 1091 60.55650000 89.38250000 67.60570000 41.58910000 62.06020000 48.32500000 1092 13.27200000 15.55120000 9.260040000 1.089530000 1.437620000 0.678908000 1093 15.67340000 17.43420000 8.157250000 1.453590000 1.881770000 0.597911000 1094 21.60560000 76.96240000 10.07470000 12.53590000 36.34030000 4.703360000 1095 39.47200000 95.03140000 10.41110000 24.18280000 59.98300000 7.352640000 1096 26.08140000 28.05500000 22.68910000 4.856210000 5.669100000 4.369870000 1097 37.56180000 26.34040000 25.42790000 8.608040000 7.159190000 5.568610000 1098 46.06120000 40.08990000 24.02650000 13.78820000 14.13720000 5.745140000 1099 31.76090000 23.12440000 10.29830000 5.497350000 4.943520000 1.167570000 1100 30.11360000 24.58710000 7.685360000 5.032460000 5.017450000 0.867135000 1101 43.95850000 33.34530000 12.53130000 11.31400000 10.56100000 2.103770000 1102 49.42050000 67.57210000 10.81940000 20.21710000 32.85990000 4.303110000 1103 57.82280000 75.62560000 51.06930000 31.61910000 44.56760000 27.24680000 1104 59.34750000 74.96900000 60.22970000 34.32490000 45.19930000 37.11290000 1105 27.28280000 36.01930000 40.75770000 7.892630000 9.395280000 14.67400000 1106 30.77820000 35.71660000 46.04800000 9.667500000 10.11390000 18.94690000 1107 42.99980000 35.40050000 47.12940000 14.50230000 12.47910000 20.09580000 1108 48.03450000 70.64970000 46.07110000 23.56280000 36.51600000 21.86040000 1109 39.88940000 49.35150000 27.22910000 12.64380000 17.64440000 7.524980000 1110 59.05640000 58.32770000 24.99370000 24.67180000 28.86380000 7.705730000 1111 87.75640000 77.77850000 31.29140000 55.41140000 58.99420000 13.79440000 1112 91.74380000 91.22070000 51.63370000 67.27310000 77.61670000 31.17650000 1113 90.80180000 93.90680000 69.61690000 71.28920000 82.07740000 53.03770000 1114 20.14600000 0.000000000 82.40230000 13.99700000 5.795260000 64.84200000 1115 72.83620000 10.66480000 94.02610000 45.29450000 21.84130000 87.96500000 1116 86.50880000 0.000000000 86.13860000 55.48760000 27.04290000 73.36040000 1117 72.90830000 0.000000000 73.08790000 38.23090000 18.62040000 51.09430000 1118 76.23660000 43.18670000 82.73670000 47.08860000 31.23380000 67.94430000 1119 86.21770000 47.50790000 94.23830000 61.75050000 40.27560000 90.32330000 1120 8.603970000 11.83730000 16.39480000 0.784698000 0.850786000 1.935490000 1121 11.91080000 15.65690000 13.25310000 1.070850000 1.427370000 1.308880000 1122 22.37970000 11.60250000 9.035820000 2.401440000 1.693210000 0.663703000 1123 23.31910000 7.652300000 9.241770000 2.511650000 1.470060000 0.661536000 1124 29.79760000 17.12600000 8.555350000 4.490530000 3.402810000 0.778891000 1125 39.77040000 25.85420000 17.45410000 8.943370000 7.278850000 2.849250000 1126 39.40000000 30.91490000 24.71900000 9.710520000 8.927890000 5.467900000 1127 49.52270000 35.20000000 35.16030000 16.05270000 13.40890000 11.23810000 1128 52.59110000 35.46160000 41.84390000 18.70230000 14.76110000 15.97110000 1129 48.13470000 33.44120000 47.37310000 16.85870000 13.05180000 20.34610000 1130 54.79760000 36.65810000 56.30460000 22.72470000 16.95180000 29.52450000 1131 71.52950000 47.91450000 61.45580000 37.73220000 29.25110000 36.67200000 1132 72.18030000 79.65400000 61.91350000 45.96510000 55.18010000 40.14120000 1133 82.90670000 84.59870000 61.33720000 57.45510000 65.68570000 40.51500000 1134 39.99720000 16.69520000 16.76510000 8.419370000 5.335700000 2.450030000 1135 93.29320000 12.23300000 13.40170000 49.91530000 26.23450000 3.581560000 1136 94.66990000 31.80130000 41.00260000 55.26970000 32.47120000 16.91710000 1137 70.88740000 57.34710000 29.68510000 33.82430000 32.94110000 10.20600000 1138 71.25130000 58.53240000 41.55920000 35.80890000 34.51960000 17.83160000 1139 75.06750000 64.44480000 57.70850000 43.37150000 41.94350000 33.71430000 1140 39.81780000 35.14300000 62.55740000 16.17970000 12.89820000 36.39670000 1141 52.94230000 44.85900000 67.95910000 25.47200000 21.32270000 44.26960000 1142 61.73700000 52.64780000 81.07870000 36.35900000 30.34370000 65.15580000 1143 26.26370000 18.11670000 74.51990000 13.33780000 6.979060000 52.22230000 1144 33.33790000 23.52460000 91.17270000 21.27850000 11.40090000 81.42970000 1145 42.64740000 24.25280000 82.57340000 22.02660000 12.28720000 65.78640000 1146 45.67860000 54.77120000 92.97220000 31.26460000 28.41320000 86.81120000 1147 9.974500000 22.90560000 69.22930000 9.471080000 5.993840000 44.44570000 1148 7.406180000 28.52420000 77.99470000 12.25980000 8.430680000 57.84420000 1149 16.39910000 55.50620000 84.93780000 19.30880000 23.00360000 71.21280000 1150 11.86710000 52.11250000 62.26570000 11.59570000 17.89140000 36.68070000 1151 0.000000000 51.69230000 67.40100000 12.25060000 17.85910000 43.28430000 1152 73.26660000 91.89130000 89.89540000 59.39260000 73.04550000 85.65510000 1153 82.60230000 94.43990000 100.0000000 73.06070000 82.37590000 107.1330000 1154 92.13640000 94.15560000 100.0000000 83.23840000 87.31390000 107.5740000 1155 24.20500000 26.41840000 6.447760000 3.585660000 4.689880000 0.736367000 1156 22.02440000 30.09860000 8.753010000 3.481490000 5.576630000 1.068480000 1157 23.01200000 45.95180000 9.511450000 5.741110000 12.56320000 1.946190000 1158 41.69610000 79.28490000 13.86850000 19.80310000 42.09290000 5.922830000 1159 55.33130000 82.03260000 45.67230000 31.05340000 50.01640000 22.99560000 1160 68.70150000 82.85750000 65.63550000 44.98380000 57.49060000 45.12490000 1161 57.55390000 42.21160000 37.72760000 22.10260000 19.11910000 13.48120000 1162 68.05610000 45.36300000 50.31060000 32.15630000 25.44640000 24.28270000 1163 67.25790000 59.88530000 55.52500000 35.27480000 34.80670000 30.59860000 1164 72.00840000 67.92150000 61.47490000 42.39030000 43.81880000 38.33170000 1165 100.0000000 76.13970000 73.71180000 77.48250000 68.03100000 57.26670000 1166 27.58430000 9.693620000 6.617650000 3.552650000 2.140090000 0.453490000 1167 40.41020000 12.12890000 9.086130000 8.138020000 4.698720000 0.944096000 1168 49.97360000 18.56840000 16.29040000 13.34910000 8.153540000 2.594370000 1169 69.34630000 30.19180000 33.05220000 28.76480000 18.45860000 10.40100000 1170 79.61050000 31.65370000 33.83560000 38.14290000 23.70240000 11.34420000 1171 67.46620000 29.44700000 17.47860000 25.93830000 16.94090000 3.756730000 1172 68.25080000 48.78690000 15.68050000 29.04380000 25.90690000 4.309330000 1173 89.59340000 52.01410000 38.76310000 52.03880000 39.18900000 16.13220000 1174 92.23470000 57.46670000 56.22280000 59.07040000 45.56750000 32.28950000 1175 16.55290000 8.983270000 49.69640000 5.240660000 2.500050000 21.38510000 1176 13.85680000 17.08260000 96.15990000 18.39510000 8.579220000 91.12740000 1177 20.74340000 40.69760000 100.0000000 23.20340000 17.14970000 100.1900000 1178 11.09510000 24.88190000 57.37460000 6.875020000 5.398420000 29.56510000 1179 10.50800000 32.65100000 75.36580000 12.09340000 9.602270000 53.84120000 1180 8.900930000 47.96940000 82.90650000 16.43220000 17.59990000 67.05510000 1181 12.34950000 48.34030000 92.11950000 20.04280000 19.26640000 84.21040000 1182 13.04260000 33.14750000 64.13350000 9.375260000 8.702870000 37.97270000 1183 39.31660000 40.91720000 71.99360000 19.13830000 16.26110000 49.45950000 1184 44.05810000 49.98430000 77.79510000 24.38000000 22.88710000 59.04840000 1185 51.90380000 61.75460000 89.91890000 34.96010000 34.72240000 81.55610000 1186 56.92790000 67.39950000 88.80480000 38.99240000 40.75510000 80.09710000 1187 71.88700000 71.19420000 91.96770000 52.35030000 50.36660000 87.10990000 1188 92.83340000 66.89540000 87.67790000 70.72850000 56.79960000 79.44540000 1189 94.64660000 74.13670000 87.54150000 74.75230000 64.44960000 80.03190000 1190 52.04880000 46.45880000 9.834280000 17.27010000 18.74170000 2.555990000 1191 67.59180000 60.26450000 0.000000000 30.46210000 33.16260000 3.462090000 1192 73.04920000 63.84730000 15.34800000 36.13030000 38.41390000 5.596380000 1193 100.0000000 71.62040000 19.12680000 67.07200000 60.04310000 8.701980000 1194 49.45830000 37.52040000 8.865680000 14.50100000 13.62320000 1.873620000 1195 56.13830000 36.75550000 0.000000000 18.25400000 15.29620000 1.541100000 1196 50.51150000 30.40580000 8.670390000 14.28270000 11.23180000 1.574870000 1197 75.30710000 31.33710000 9.488380000 32.46210000 20.86910000 2.556960000 1198 92.51930000 40.79380000 10.61460000 51.32560000 33.84890000 3.975070000 1199 91.96130000 65.16370000 21.16500000 55.81790000 49.43880000 8.261480000 1200 55.62550000 45.73900000 32.05650000 20.74020000 20.03340000 10.12960000 1201 59.58700000 64.65570000 32.72650000 27.19450000 34.21130000 12.07250000 1202 66.73890000 65.83270000 35.46150000 33.02280000 38.00510000 14.06770000 1203 69.98400000 66.15220000 70.86270000 42.60930000 42.37720000 50.55650000 1204 84.19940000 76.33830000 75.97310000 60.03980000 59.12850000 59.92080000 1205 14.62030000 20.93330000 74.93220000 11.41270000 6.437050000 52.81440000 1206 10.49930000 26.97130000 90.75230000 16.64890000 9.805380000 80.49230000 1207 0.000000000 60.61100000 90.20070000 21.17000000 26.85830000 81.36080000 1208 0.000000000 85.41010000 88.65620000 27.55790000 50.12370000 81.06220000 1209 65.32370000 73.53080000 74.99590000 42.03910000 47.55800000 57.29980000 1210 70.75990000 78.21260000 89.93800000 52.66590000 56.40080000 83.88500000 1211 7.291620000 18.06080000 44.40890000 3.769800000 2.811870000 16.80270000 1212 10.68710000 33.85960000 92.09630000 17.83940000 12.29500000 83.38130000 1213 9.414100000 42.17890000 91.69120000 18.65010000 15.78210000 82.98420000 1214 0.000000000 37.63320000 69.15200000 10.52500000 10.65750000 44.86770000 1215 38.91800000 54.53640000 72.69910000 21.46300000 24.00080000 51.36760000 1216 37.75390000 69.05170000 91.66700000 30.53040000 37.49210000 85.31030000 1217 17.25370000 28.30670000 45.37300000 5.676060000 5.856880000 17.93170000 1218 27.39880000 60.22730000 46.93770000 12.99490000 23.72010000 21.25830000 1219 8.987540000 26.49590000 22.05990000 1.965700000 3.799860000 3.963990000 1220 18.48250000 24.43070000 27.47730000 3.342190000 3.992730000 6.170410000 1221 19.32240000 30.88180000 32.26020000 4.515430000 6.159590000 8.840620000 1222 37.10100000 30.99620000 67.01650000 15.73190000 11.25410000 41.95090000 1223 55.41860000 33.40860000 74.13520000 27.15690000 17.64540000 52.69860000 1224 56.98380000 42.56360000 77.11400000 30.20430000 22.46980000 57.83620000 1225 61.56320000 32.68860000 58.66300000 27.25480000 17.92620000 32.20810000 1226 83.30490000 56.53300000 73.40830000 53.42140000 41.60900000 54.05060000 1227 93.50450000 58.96520000 80.56970000 67.26200000 49.96710000 66.17940000 1228 20.86080000 0.000000000 17.13120000 2.225290000 1.102460000 2.133040000 1229 27.57940000 35.98620000 16.55700000 5.714470000 8.521450000 2.804770000 1230 34.77830000 50.61400000 26.58680000 10.82380000 17.35490000 7.227170000 1231 46.05430000 70.38060000 37.34590000 21.20790000 35.24120000 15.11740000 1232 56.11580000 65.89770000 45.29470000 26.89840000 34.73460000 20.95110000 1233 78.86970000 64.97140000 52.91450000 46.04670000 43.80100000 28.79020000 1234 90.34110000 64.53510000 56.75380000 58.62280000 49.89320000 33.37970000 1235 93.89030000 64.00310000 77.01130000 67.75520000 53.63690000 60.80880000 1236 29.56680000 18.94460000 43.17050000 7.400100000 4.842360000 15.99480000 1237 38.56510000 16.30660000 61.89190000 13.99030000 7.441020000 34.97350000 1238 41.89610000 11.92930000 86.93390000 22.51730000 10.50620000 73.31860000 1239 47.84920000 0.000000000 87.98280000 25.60280000 11.55900000 75.33520000 1240 81.20050000 36.60190000 87.52650000 52.55580000 31.30530000 76.43450000 1241 100.0000000 43.21470000 86.50850000 74.28740000 45.12210000 75.89060000 1242 38.55350000 35.35530000 31.74620000 10.48420000 10.63370000 8.999060000 1243 45.63930000 50.09270000 34.93620000 16.19440000 19.75910000 11.83850000 1244 52.08580000 57.43840000 35.44850000 21.14390000 26.38580000 12.86260000 1245 56.16150000 65.07850000 67.63500000 31.39270000 35.93580000 45.45420000 1246 57.53870000 69.53720000 76.61880000 35.92510000 41.22510000 59.16460000 1247 62.43760000 68.86800000 79.29720000 39.93870000 42.69630000 63.58700000 1248 71.37870000 70.67220000 84.07120000 48.97220000 48.54480000 72.26300000 1249 76.29240000 79.06670000 86.82160000 56.66790000 59.34160000 78.35350000 1250 50.93330000 58.31010000 54.43200000 23.68510000 27.87620000 28.78900000 1251 54.36050000 65.63940000 56.18990000 27.74190000 34.75550000 31.40900000 1252 67.05540000 73.20310000 69.58960000 41.76940000 47.33000000 49.34000000 1253 77.28930000 78.25380000 71.50740000 52.54900000 57.05910000 53.06540000 1254 75.50070000 69.95920000 57.87610000 45.19530000 46.88310000 34.45410000 1255 89.30010000 69.96160000 58.18690000 59.14320000 54.06900000 35.45740000 1256 91.78720000 77.90230000 57.46820000 64.04500000 63.07840000 35.63550000 1257 36.41060000 19.80030000 11.59010000 6.943240000 5.070620000 1.360330000 1258 35.87010000 20.55190000 6.294930000 6.664350000 5.069780000 0.727611000 1259 62.35960000 24.97540000 20.49740000 21.86780000 13.72430000 4.327760000 1260 62.81170000 52.17730000 33.24200000 26.84730000 26.36480000 11.45760000 1261 79.18000000 82.10710000 37.04510000 48.65970000 59.30650000 17.35980000 1262 86.31330000 81.62400000 40.94430000 56.23610000 62.70840000 20.38630000 1263 30.50880000 48.58010000 9.586800000 8.137930000 15.05000000 2.214070000 1264 35.06340000 60.30520000 11.03990000 12.00290000 23.65360000 3.372360000 1265 40.84880000 68.02600000 12.93410000 16.21210000 31.12000000 4.509410000 1266 64.39600000 73.66000000 9.462100000 31.48530000 43.36450000 5.189250000 1267 77.08310000 78.81300000 11.08740000 43.67580000 53.99680000 6.497010000 1268 9.974130000 47.82750000 37.96890000 6.263720000 13.47060000 13.19590000 1269 11.13090000 58.77750000 41.26170000 8.913480000 20.80790000 16.36600000 1270 32.10240000 60.45060000 40.92000000 13.51000000 24.23560000 16.44990000 1271 53.75390000 60.68010000 69.04770000 29.24460000 31.83700000 46.94350000 1272 63.45200000 60.30280000 77.07540000 37.92340000 35.80670000 59.22760000 1273 79.82420000 70.74800000 79.63180000 55.20770000 51.98550000 65.01770000 1274 82.93870000 82.82550000 87.88740000 64.64720000 66.82330000 81.08310000 1275 35.95630000 35.75170000 48.15690000 11.78700000 11.17780000 20.89490000 1276 34.53710000 35.83160000 58.84370000 13.37110000 11.78010000 31.88260000 1277 14.30780000 21.95820000 28.58480000 2.661110000 3.128780000 6.600710000 1278 10.46910000 31.26620000 40.86350000 4.471430000 6.124310000 14.41640000 1279 16.46520000 34.38810000 50.92850000 7.132690000 8.266970000 23.20350000 1280 42.62090000 46.91950000 86.66960000 26.09220000 21.93100000 74.12000000 1281 55.91370000 52.46050000 91.99270000 36.21310000 29.72790000 84.96690000 1282 64.30190000 59.79070000 91.22400000 43.20240000 37.65310000 84.29890000 1283 89.43190000 75.24120000 90.24870000 70.05490000 62.82510000 84.99710000 1284 64.95780000 66.07060000 60.98270000 36.13030000 39.26540000 37.29190000 1285 68.13810000 65.92930000 75.14400000 42.26710000 41.90190000 56.86480000 1286 15.89580000 20.53550000 21.29620000 2.208210000 2.701690000 3.568290000 1287 11.28180000 22.31100000 42.82550000 4.075390000 3.727090000 15.63730000 1288 15.03750000 40.40560000 59.88630000 9.517110000 11.44870000 33.10360000 1289 20.32470000 55.02950000 69.59750000 15.20370000 21.15240000 46.65170000 1290 20.61690000 55.09140000 100.0000000 25.61050000 25.35810000 101.1150000 1291 37.08200000 83.74080000 100.0000000 37.88730000 53.34680000 104.2150000 1292 13.62440000 6.150170000 16.11490000 1.099690000 0.643112000 1.838460000 1293 17.37090000 4.958400000 15.28780000 1.555560000 0.838933000 1.660690000 1294 44.30710000 0.000000000 52.29820000 14.15080000 6.773260000 24.27850000 1295 83.51470000 18.10400000 53.33110000 43.96190000 23.36110000 26.85740000 1296 95.03520000 20.88270000 64.90790000 59.42900000 31.49850000 40.95790000 1297 63.36490000 14.09190000 82.68620000 33.78260000 16.70080000 66.33940000 1298 70.55760000 56.31100000 91.11560000 47.36920000 37.68680000 84.03740000 1299 23.41170000 24.87420000 30.86760000 4.655950000 4.729800000 7.915290000 1300 23.80140000 28.61490000 41.20180000 6.316160000 6.339930000 14.66880000 1301 34.78180000 38.25910000 43.45890000 10.90670000 11.70210000 16.97700000 1302 4.352190000 9.111490000 9.659230000 0.264305000 0.397403000 0.619719000 1303 9.017190000 8.905730000 0.000000000 0.381251000 0.457032000 0.048224600 1304 8.110730000 11.15020000 8.455630000 0.461271000 0.655297000 0.500794000 1305 0.000000000 78.01710000 21.28600000 11.37450000 36.59130000 7.394300000 1306 30.85800000 94.41520000 24.95120000 21.58410000 57.88020000 11.11220000 1307 54.44290000 93.28190000 41.10910000 33.73060000 62.70980000 20.80780000 1308 17.16120000 30.91100000 9.025150000 2.693540000 5.398370000 1.090510000 1309 83.43890000 29.04620000 11.03660000 40.10050000 24.16580000 3.058660000 1310 87.82030000 34.42830000 26.10120000 46.10230000 28.75350000 7.875420000 1311 100.0000000 42.77330000 28.02350000 61.68530000 39.88640000 9.835200000 1312 51.97640000 15.96000000 89.54980000 28.76800000 14.06560000 78.52790000 1313 61.76310000 14.79240000 92.19620000 36.00440000 17.53940000 83.94800000 1314 93.22810000 17.37340000 90.05880000 64.77460000 32.80260000 81.20360000 1315 35.55400000 9.782000000 32.16310000 7.597780000 4.058120000 8.500630000 1316 53.55990000 14.82100000 33.74190000 16.61350000 9.165040000 9.879800000 1317 69.30960000 15.41570000 41.55480000 28.78550000 15.39740000 15.69200000 1318 68.49180000 40.71030000 41.48000000 30.37830000 22.71630000 16.46770000 1319 74.56690000 51.73000000 80.45670000 46.26620000 34.98310000 64.52230000 1320 23.53070000 7.706940000 22.41360000 3.161630000 1.738550000 3.834100000 1321 24.02590000 25.74940000 51.75070000 7.865050000 6.234380000 23.75750000 1322 31.93640000 62.83670000 64.78950000 18.60960000 27.89400000 40.92680000 1323 46.35380000 76.06420000 74.75220000 30.72140000 43.82170000 56.64140000 1324 51.97440000 82.49220000 75.45810000 35.95700000 52.18680000 58.63180000 1325 32.75230000 56.48040000 47.20330000 13.84590000 21.85730000 21.26290000 1326 31.06880000 90.34620000 51.60980000 23.64530000 54.21130000 29.00330000 1327 36.96510000 93.08030000 66.96730000 30.10200000 60.02940000 47.38090000 1328 53.95280000 93.06550000 69.26360000 39.07880000 64.57280000 50.93010000 1329 72.55720000 100.0000000 75.52490000 57.18680000 81.47860000 61.86850000 1330 29.29680000 25.01680000 24.60920000 5.619110000 5.322340000 5.057440000 1331 28.09390000 22.50390000 31.11510000 5.676650000 4.760370000 8.036880000 1332 38.56300000 21.67770000 53.41940000 12.47650000 7.727390000 25.54270000 1333 19.18980000 14.05300000 29.30460000 3.042020000 2.132380000 6.832010000 1334 18.80600000 14.26740000 36.03020000 3.711980000 2.417690000 10.66650000 1335 25.72550000 10.18420000 54.25330000 7.938550000 3.875980000 26.01350000 1336 86.90090000 11.43660000 60.26420000 48.68800000 24.84130000 34.58940000 1337 88.85050000 100.0000000 62.83970000 69.79730000 88.37120000 44.83370000 1338 18.62320000 25.01680000 16.12220000 2.652190000 3.852900000 2.193860000 1339 15.67100000 25.25540000 11.20300000 2.031430000 3.607770000 1.192960000 1340 17.97970000 27.91210000 53.86700000 7.273310000 6.404250000 25.91690000 1341 23.66360000 35.77320000 56.51800000 9.723860000 9.937150000 29.11200000 1342 14.02130000 20.01140000 33.15650000 2.966380000 2.882730000 8.987440000 1343 54.17380000 16.84870000 100.0000000 34.16960000 16.50070000 99.96890000 1344 54.16960000 22.88910000 64.61950000 22.90600000 13.05410000 38.92110000 1345 55.52330000 20.32020000 80.50680000 28.05300000 14.71190000 62.48440000 1346 71.17530000 17.33450000 79.59310000 39.08870000 19.96420000 61.43460000 1347 75.37630000 51.79410000 100.0000000 54.15870000 38.25940000 102.2400000 1348 10.22600000 31.94770000 23.14540000 2.644780000 5.599610000 4.560050000 1349 8.697750000 32.98310000 39.14660000 4.279060000 6.566850000 13.23090000 1350 0.000000000 36.89740000 43.42940000 5.077180000 8.204450000 16.62310000 1351 8.591810000 36.66440000 52.51670000 6.868920000 8.865880000 24.83730000 1352 12.31480000 38.66330000 75.15740000 12.91430000 12.07430000 53.79750000 1353 14.84460000 71.06940000 82.84490000 22.06540000 35.02580000 68.90540000 1354 25.79200000 81.39200000 81.98160000 26.88410000 46.26120000 68.66840000 1355 33.06750000 40.98100000 36.75370000 9.749860000 12.26150000 12.20030000 1356 37.91370000 40.83720000 36.55700000 11.48030000 13.09900000 12.14700000 1357 46.35490000 48.63720000 39.96230000 16.93810000 19.33860000 15.13290000 1358 55.99570000 50.88880000 47.54710000 23.97910000 23.97430000 21.67930000 1359 48.70520000 41.99760000 38.78630000 16.95180000 16.35850000 13.95220000 1360 56.24360000 46.82250000 40.88960000 22.39760000 21.26460000 15.96300000 1361 65.02680000 63.43800000 51.42610000 33.56200000 36.34240000 26.60870000 1362 24.46050000 19.71960000 14.96530000 3.417350000 3.224770000 1.841600000 1363 43.95910000 27.80010000 11.57410000 10.73650000 8.700930000 1.730620000 1364 65.35530000 41.33530000 6.113870000 25.33100000 20.67440000 2.285200000 1365 87.50940000 53.06140000 10.33380000 47.73820000 37.79340000 4.441930000 1366 93.65080000 60.94820000 9.913720000 56.28570000 46.90270000 5.332140000 1367 92.69130000 68.96450000 9.650030000 57.11100000 52.91670000 5.987190000 1368 100.0000000 73.11930000 33.90960000 68.73640000 61.94600000 15.44070000 1369 41.16770000 16.40140000 42.49460000 11.40410000 6.546450000 15.61070000 1370 46.62890000 19.83420000 41.25150000 13.98470000 8.415600000 14.84620000 1371 60.93790000 24.56920000 40.29920000 22.80080000 13.88800000 14.66370000 1372 100.0000000 22.04810000 50.74840000 62.57380000 33.68680000 25.25800000 1373 48.07820000 13.40160000 21.80550000 12.40520000 6.959780000 4.104520000 1374 63.00700000 9.935760000 19.66910000 21.52450000 11.36890000 3.796000000 1375 78.51410000 33.58620000 57.61920000 41.16150000 25.40190000 31.71510000 1376 83.87770000 33.75660000 69.73230000 49.39870000 29.36560000 47.34470000 1377 19.85050000 9.306420000 25.20890000 2.655710000 1.551150000 4.902430000 1378 17.57250000 75.99200000 29.27410000 12.66610000 35.45300000 10.57390000 1379 24.88330000 92.97470000 36.10720000 20.51670000 55.64320000 16.69790000 1380 17.34130000 20.95570000 15.09600000 2.114380000 2.766310000 1.834630000 1381 20.22310000 19.58570000 15.39900000 2.537190000 2.746520000 1.895510000 1382 40.98440000 31.34660000 19.74020000 10.08790000 9.286260000 3.726930000 1383 51.88730000 35.30470000 18.75710000 15.97830000 13.56920000 3.852860000 1384 66.50930000 54.61080000 19.93260000 28.96770000 28.92920000 5.826400000 1385 83.84390000 78.64340000 17.71320000 50.50060000 57.33590000 8.203590000 1386 91.55550000 89.42840000 21.99350000 62.68540000 73.82700000 11.29900000 1387 48.65200000 56.35250000 14.25890000 17.34110000 23.97180000 3.923240000 1388 55.29850000 64.64730000 12.30580000 22.96870000 32.19140000 4.430920000 1389 67.41880000 92.97040000 9.541370000 40.14640000 65.97920000 7.721120000 1390 69.55160000 93.81480000 26.14960000 43.05960000 68.28950000 12.54620000 1391 73.46280000 93.99380000 45.61510000 48.80950000 71.17490000 25.17850000 1392 81.09340000 93.47390000 53.28350000 57.08290000 74.72050000 32.62270000 1393 60.62760000 53.55520000 65.15420000 31.22180000 28.71530000 41.32620000 1394 66.70670000 56.89650000 74.83100000 38.98940000 34.33540000 55.54610000 1395 65.84140000 67.64590000 98.04080000 48.87700000 45.62420000 98.97480000 1396 7.066100000 8.280650000 19.69520000 0.775461000 0.560700000 2.819300000 1397 0.000000000 9.618340000 30.32540000 1.472260000 0.909824000 7.228360000 1398 9.328930000 7.140610000 32.30180000 1.936680000 0.977518000 8.293890000 1399 8.540080000 8.531500000 44.12690000 3.453870000 1.657830000 16.44250000 1400 19.88280000 38.14970000 48.41020000 7.698290000 9.914160000 21.03100000 1401 37.36170000 46.65880000 50.46470000 14.26920000 16.81750000 23.66080000 1402 32.20070000 46.42210000 45.73550000 11.57160000 15.41000000 19.27310000 1403 31.63350000 47.13030000 54.39910000 13.06950000 16.33440000 27.54980000 1404 55.67370000 69.14060000 82.96100000 36.62780000 41.05690000 69.61610000 1405 55.53670000 76.79240000 90.42440000 41.28470000 49.28870000 84.13780000 1406 25.93610000 4.640970000 15.60970000 3.303350000 1.728750000 1.815500000 1407 29.45720000 9.042740000 11.47610000 4.177860000 2.404900000 1.067710000 1408 33.56840000 9.583200000 16.76630000 5.706060000 3.205300000 2.237960000 1409 73.80210000 22.94150000 64.87220000 37.56230000 20.61450000 39.93310000 1410 79.39050000 21.01240000 77.45060000 46.04600000 24.22180000 58.36560000 1411 89.31590000 12.86160000 24.17370000 46.01560000 24.21510000 6.550260000 1412 92.14540000 15.00580000 43.20280000 51.43480000 26.99740000 18.01890000 1413 92.38170000 16.32310000 52.12600000 53.28440000 27.94220000 26.05610000 1414 57.67010000 25.23900000 7.508920000 18.15050000 11.92570000 1.481080000 1415 73.25250000 39.85460000 10.07920000 31.66040000 23.34130000 2.934640000 1416 85.11560000 43.82290000 10.11720000 43.60640000 31.13290000 3.689760000 1417 87.97930000 47.76310000 0.000000000 47.16890000 34.78970000 3.430050000 1418 100.0000000 50.80090000 42.71730000 64.75480000 45.04250000 19.56410000 1419 19.96730000 17.71800000 8.532800000 2.164580000 2.288700000 0.677312000 1420 18.01000000 51.30140000 9.915420000 5.721200000 15.18670000 2.305740000 1421 14.95100000 64.19300000 32.26900000 9.446400000 24.74640000 10.94710000 1422 9.896420000 94.32970000 43.17720000 19.64250000 56.54540000 21.86550000 1423 6.994410000 93.63220000 62.15360000 22.83320000 57.01200000 40.95520000 1424 9.033600000 92.67410000 76.95380000 26.56490000 57.44870000 61.70900000 1425 12.57200000 73.98390000 70.89250000 18.99890000 36.18040000 50.19000000 1426 14.04390000 77.80770000 84.25840000 24.36710000 41.68830000 72.12000000 1427 16.32360000 90.96190000 92.62640000 32.03780000 57.84790000 89.54770000 1428 9.608330000 47.09270000 12.06420000 4.055040000 12.21820000 2.311380000 1429 87.04370000 71.67330000 0.000000000 51.42360000 52.07320000 5.388650000 1430 92.32240000 81.70170000 9.433730000 60.38090000 65.21010000 7.349060000 1431 93.79580000 92.03730000 8.583460000 65.63820000 78.13220000 8.683120000 1432 37.46720000 51.44910000 9.264680000 11.06050000 18.01930000 2.480380000 1433 36.99960000 88.92350000 17.76250000 21.22900000 51.96590000 7.979430000 1434 45.85710000 91.78390000 29.45130000 27.02790000 57.81820000 13.07910000 1435 56.57820000 93.04140000 84.92390000 45.45170000 67.28400000 76.00380000 1436 42.90740000 92.85140000 58.60070000 30.54180000 60.24010000 37.02660000 1437 43.43060000 95.10240000 79.93470000 37.32710000 65.52380000 67.33390000 1438 33.74450000 72.20310000 5.288280000 14.38320000 33.38850000 3.855180000 1439 43.84430000 72.74510000 6.778450000 18.67270000 36.02860000 4.217430000 1440 52.28550000 79.92090000 12.41480000 25.38020000 45.54030000 5.974480000 1441 60.46760000 82.38850000 15.60570000 31.50950000 50.93230000 7.176770000 1442 85.80390000 83.99350000 29.03010000 55.06630000 64.47680000 13.27450000 1443 27.47810000 28.14210000 16.40080000 4.861010000 5.736340000 2.452470000 1444 39.81320000 26.22570000 32.06750000 10.12960000 7.845410000 8.855540000 1445 41.59740000 23.83050000 38.82030000 11.52000000 7.937200000 13.06610000 1446 45.57670000 29.88120000 39.57600000 13.99690000 10.66550000 13.88380000 1447 77.02760000 29.27280000 42.02830000 36.52630000 22.07690000 16.72830000 1448 83.95010000 56.03680000 41.46130000 47.15880000 38.87750000 18.11510000 1449 70.34560000 48.58540000 44.91430000 33.63760000 27.83880000 19.74060000 1450 80.04850000 49.52940000 48.88950000 43.21000000 33.16760000 23.70840000 1451 17.56580000 5.633350000 8.965730000 1.385180000 0.798531000 0.564422000 1452 14.89210000 11.51450000 10.87660000 1.178240000 1.049220000 0.855673000 1453 9.190270000 20.58740000 25.05970000 1.773830000 2.455610000 4.957870000 1454 7.211270000 19.66330000 30.88060000 2.116590000 2.413860000 7.685850000 1455 8.330300000 17.97720000 54.44290000 5.611920000 3.542820000 26.20320000 1456 28.67130000 42.21040000 57.70040000 12.09590000 13.56470000 30.81160000 1457 30.87960000 56.57980000 72.21880000 18.85350000 23.85170000 50.67780000 1458 9.481810000 24.83990000 26.45760000 2.202550000 3.504410000 5.669770000 1459 8.743460000 52.06010000 25.39650000 5.610430000 15.43820000 6.560470000 1460 7.758680000 68.37620000 27.22940000 9.327090000 27.72850000 8.744800000 1461 20.49290000 75.38080000 60.37110000 17.93480000 37.08660000 36.55160000 1462 17.12240000 89.94500000 64.80190000 23.13480000 53.20380000 43.83350000 1463 8.727590000 15.61440000 3.626470000 0.595501000 1.200980000 0.199016000 1464 54.29780000 10.86320000 26.95350000 16.24910000 8.659740000 6.304950000 1465 73.94030000 12.09570000 24.83200000 30.74720000 16.26280000 6.089770000 1466 86.39640000 18.33720000 75.32790000 52.35060000 27.10080000 55.28860000 1467 89.95930000 60.35780000 92.57480000 67.69410000 50.58300000 88.12550000 1468 18.11800000 12.79230000 63.90700000 8.579110000 4.188170000 37.16940000 1469 14.54610000 8.959890000 69.57550000 9.398510000 4.129960000 44.71330000 1470 19.74870000 10.28310000 89.52170000 16.50680000 7.162470000 77.83250000 1471 42.44030000 63.30740000 91.62290000 31.07210000 33.67900000 84.77260000 1472 45.29500000 75.53110000 93.15430000 36.21700000 45.49380000 89.09870000 1473 78.75590000 86.45050000 93.91850000 63.97340000 69.68860000 93.07900000 1474 85.37660000 91.00460000 93.77120000 72.15260000 78.52600000 93.70510000 1475 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 1476 61.07540000 53.95900000 40.45640000 26.84960000 27.23610000 16.28100000 1477 63.75020000 59.38370000 40.35140000 29.88290000 32.01200000 16.72090000 1478 64.87950000 91.44690000 42.29660000 40.34940000 64.15220000 21.78940000 1479 15.69080000 24.22030000 3.789010000 1.816390000 3.286240000 0.432701000 1480 12.35520000 79.15410000 12.80190000 11.88070000 37.89690000 5.332490000 1481 17.92130000 82.19640000 25.51350000 14.30330000 41.81140000 9.569010000 1482 29.70160000 80.14520000 26.28450000 16.39440000 41.01480000 9.778860000 1483 34.32580000 86.16960000 73.15470000 28.32910000 51.83600000 55.19760000 1484 91.79390000 85.01410000 84.21880000 73.65570000 73.68870000 75.12690000 1485 92.77030000 87.46370000 91.94370000 78.36340000 78.19680000 89.96240000 1486 1.282050000 0.000000000 0.000000000 0.003979570 0.002051930 0.000186416 1487 78.93170000 13.89890000 20.55710000 35.09900000 18.72370000 4.754420000 1488 95.85350000 18.20000000 31.66960000 54.48210000 29.17250000 10.53470000 1489 94.14220000 46.69320000 52.89820000 58.61690000 39.64730000 28.12260000 1490 95.96550000 47.86950000 66.49470000 64.02140000 42.64330000 44.27330000 1491 35.53340000 19.71760000 18.19500000 6.891100000 4.997630000 2.813430000 1492 38.63920000 32.99610000 16.47470000 9.100720000 9.292430000 2.829150000 1493 39.24780000 50.00060000 18.31430000 11.86390000 17.64270000 4.255310000 1494 85.62660000 53.67150000 21.33990000 46.34890000 37.35490000 7.037460000 1495 93.02860000 73.07190000 27.09930000 59.56990000 57.26010000 11.46200000 1496 95.54040000 89.26590000 32.81060000 68.24270000 76.41660000 16.49610000 1497 94.91100000 91.60920000 67.59110000 74.66750000 81.42610000 50.12410000 1498 9.855880000 12.43590000 20.74450000 1.134540000 1.059320000 3.206950000 1499 30.39620000 5.490180000 35.20310000 6.128830000 3.030970000 10.18630000 1500 42.96750000 9.949680000 35.40740000 11.03290000 5.799250000 10.57100000 1501 45.34300000 8.431430000 43.08900000 13.16410000 6.676890000 16.06780000 1502 55.33910000 40.21000000 51.04570000 22.48870000 18.26890000 24.27900000 1503 56.23330000 48.43160000 54.99910000 25.08130000 23.14150000 28.81450000 1504 62.41600000 48.51710000 56.89040000 29.67900000 25.50900000 31.07120000 1505 65.66660000 56.42130000 61.99960000 34.71700000 32.24100000 37.72110000 1506 83.50070000 77.24760000 81.93930000 61.45280000 60.41660000 69.78780000 1507 88.46110000 87.80910000 95.70600000 75.06990000 76.67660000 97.37900000 1508 14.31420000 14.08800000 25.26460000 1.964770000 1.621570000 4.942930000 1509 13.69520000 7.972300000 23.21590000 1.557490000 0.919545000 4.055270000 1510 9.867930000 9.418420000 57.94140000 6.124280000 2.797010000 29.90620000 1511 43.90830000 40.75620000 80.29620000 23.62980000 18.22610000 62.60150000 1512 42.74410000 76.77480000 88.74210000 33.74370000 45.45600000 80.59710000 1513 42.72960000 84.22010000 93.10920000 37.69200000 54.01690000 89.98320000 1514 10.33320000 13.82990000 39.33860000 3.049570000 1.978410000 12.84770000 1515 59.27230000 10.16460000 41.55060000 21.10570000 10.91540000 15.26820000 1516 65.27570000 8.368480000 54.86390000 27.67740000 13.91690000 27.56180000 1517 60.81150000 10.66700000 34.06260000 21.21250000 11.12110000 10.23670000 1518 91.67630000 10.38050000 35.12270000 49.65100000 25.74780000 12.20750000 1519 92.82070000 75.16170000 48.25860000 62.64900000 60.23880000 26.03170000 1520 94.30140000 78.89720000 71.43680000 70.68860000 66.97780000 53.87870000 1521 93.41510000 97.43540000 81.11620000 79.04920000 89.59900000 71.56090000 1522 32.99260000 31.74480000 25.67180000 7.466970000 8.003600000 5.785050000 1523 49.00060000 37.60850000 25.61250000 15.11380000 13.87270000 6.342740000 1524 49.67110000 51.41340000 23.44210000 17.44760000 21.21580000 6.296230000 1525 49.48670000 66.24310000 31.02160000 21.21120000 32.26330000 10.98740000 1526 54.71880000 65.02450000 36.44430000 24.55780000 33.05840000 14.22760000 1527 82.16190000 72.35450000 39.92900000 49.04320000 51.09420000 18.38510000 1528 89.19240000 93.38720000 40.13660000 63.33560000 78.10390000 21.49450000 1529 96.33370000 93.50230000 89.34810000 83.81990000 87.38360000 85.96300000 1530 61.70110000 11.77950000 12.04550000 20.28950000 10.92270000 1.941650000 1531 61.52730000 12.84790000 58.47730000 25.80570000 13.22030000 31.46680000 1532 66.14890000 13.22100000 68.96920000 31.77140000 16.04160000 44.95950000 1533 40.41860000 7.696460000 17.82320000 8.355920000 4.448380000 2.626870000 1534 44.01240000 9.747090000 14.84010000 9.880830000 5.379600000 1.979400000 1535 65.18200000 19.49390000 9.936520000 23.12680000 13.36970000 1.865760000 1536 67.14150000 33.91170000 48.90150000 29.63790000 19.75960000 22.33630000 1537 66.43350000 51.34370000 49.88530000 31.82180000 28.20880000 24.20700000 1538 37.89450000 44.91240000 36.11740000 12.02100000 15.11000000 12.09150000 1539 43.50190000 48.72870000 43.58760000 16.09430000 18.88780000 17.84870000 1540 30.36130000 34.10660000 29.52800000 7.221380000 8.566290000 7.638230000 1541 43.70620000 38.02490000 29.04640000 12.79580000 12.79450000 7.817950000 1542 63.00200000 44.50210000 29.18280000 25.25970000 21.84010000 8.774440000 1543 66.07400000 49.73330000 27.43820000 28.27120000 25.89230000 8.374810000 1544 77.80540000 50.65080000 55.72790000 42.56900000 33.25900000 30.53890000 1545 81.35110000 56.10450000 65.59330000 49.27970000 39.46360000 42.91100000 1546 94.85350000 82.73990000 87.27290000 77.52740000 73.40980000 80.54460000 1547 42.74710000 40.39160000 49.31600000 15.39980000 14.72140000 22.32060000 1548 48.04400000 40.01040000 70.92670000 22.81940000 17.83500000 48.04950000 1549 56.50950000 39.02720000 91.22880000 34.15980000 22.54870000 82.66730000 1550 63.27280000 49.86180000 91.96990000 40.74790000 30.70690000 84.97610000 1551 81.49920000 59.90880000 91.72730000 58.35460000 45.51880000 85.99470000 1552 82.78060000 70.14490000 90.55670000 61.69820000 54.43800000 84.72150000 1553 26.66890000 20.86810000 51.39350000 8.097220000 5.366080000 23.30340000 1554 26.20550000 30.87130000 52.16290000 8.930420000 8.093690000 24.36730000 1555 24.19120000 68.58060000 63.67890000 17.61390000 31.47100000 39.94220000 1556 47.69850000 73.86460000 63.98590000 27.90160000 40.87980000 41.29080000 1557 39.69740000 50.33660000 43.46690000 14.67280000 18.96650000 17.78030000 1558 40.31420000 54.25320000 54.98880000 17.70770000 22.40030000 28.81500000 1559 68.95000000 78.19340000 83.75400000 49.00580000 54.74680000 72.42880000 1560 76.89480000 79.03010000 92.87720000 59.41620000 60.47150000 89.98670000 1561 84.33240000 95.17870000 91.85880000 71.90410000 82.96060000 90.43720000 1562 29.55140000 37.48720000 27.42400000 7.188700000 9.724960000 6.763150000 1563 28.75670000 38.66160000 38.81660000 8.363980000 10.61720000 13.41790000 1564 72.81290000 83.89040000 73.98820000 51.01400000 61.31110000 57.25080000 1565 80.84980000 84.98370000 74.09610000 58.84130000 66.38710000 57.90160000 1566 22.70380000 27.45220000 12.07460000 3.473360000 4.867100000 1.463820000 1567 24.97340000 37.60350000 9.907000000 5.003830000 8.753410000 1.564070000 1568 62.26220000 80.02070000 5.494200000 31.73950000 48.92700000 5.449870000 1569 93.18690000 90.10130000 59.71820000 70.19140000 77.76600000 39.83360000 1570 93.02420000 97.24780000 62.21970000 73.27040000 87.01400000 43.86460000 1571 14.68100000 28.96540000 16.33500000 2.414310000 4.689270000 2.346600000 1572 11.17650000 64.34970000 39.05430000 9.882590000 24.98480000 15.23900000 1573 15.15500000 71.74140000 47.97370000 13.58920000 32.18590000 23.15540000 1574 11.43180000 71.49730000 62.64320000 16.08870000 32.93810000 38.84030000 1575 13.67450000 83.40580000 67.66760000 21.14660000 45.65360000 46.76740000 1576 8.258590000 26.96790000 12.37380000 1.468650000 3.713390000 1.408040000 1577 11.29210000 28.74450000 8.003950000 1.744950000 4.318010000 0.861824000 1578 44.20020000 28.31500000 24.29020000 11.57040000 9.184130000 5.301070000 1579 43.02740000 34.35000000 31.92030000 12.32270000 11.24750000 9.141770000 1580 51.73770000 54.32140000 49.21600000 22.34460000 24.95590000 23.32900000 1581 87.83300000 76.50100000 63.07830000 60.48220000 59.89370000 41.93410000 1582 90.53710000 83.59260000 63.27080000 65.73400000 68.94630000 43.16010000 1583 48.33880000 46.23340000 42.07950000 17.86460000 18.63230000 16.61360000 1584 48.72600000 49.88810000 59.83330000 21.96810000 22.14410000 34.12330000 1585 50.12510000 63.99630000 63.68790000 26.55730000 32.80820000 39.99060000 1586 69.63940000 92.90350000 68.35380000 49.95560000 70.03520000 50.16380000 1587 38.18340000 32.17790000 8.558430000 8.558010000 8.794730000 1.353890000 1588 42.91600000 42.86710000 10.16880000 11.97800000 14.41440000 2.167540000 1589 41.71460000 48.37630000 8.495730000 12.27160000 17.08430000 2.263980000 1590 59.33560000 47.48860000 20.09590000 22.45870000 21.85300000 5.139160000 1591 53.15240000 42.69860000 22.88380000 17.95560000 17.35470000 5.630020000 1592 64.60080000 41.80730000 34.28510000 26.57470000 21.30630000 11.48600000 1593 28.49860000 10.44500000 64.12100000 10.85900000 5.149960000 37.52280000 1594 28.00580000 10.94620000 79.22110000 14.92940000 6.803950000 59.60970000 1595 33.31020000 11.39720000 91.76740000 20.87700000 9.411010000 82.36070000 1596 24.29870000 51.85700000 32.95350000 8.584540000 16.78080000 10.41670000 1597 35.78510000 56.14170000 41.52040000 13.95390000 21.81680000 16.61130000 1598 37.23700000 92.71380000 44.85950000 25.50620000 57.79520000 23.29560000 1599 94.06410000 91.38920000 44.06370000 68.73430000 78.69640000 24.50660000 1600 49.48460000 24.51080000 9.963120000 13.23580000 9.224770000 1.517400000 1601 58.47810000 36.53700000 9.790210000 19.86300000 16.03610000 2.200240000 1602 75.51810000 47.89960000 13.98210000 35.02570000 28.56560000 4.166810000 1603 95.12100000 50.41750000 10.58050000 55.91360000 40.60530000 4.696900000 1604 93.27820000 56.73490000 35.29560000 56.72830000 44.31590000 14.38550000 1605 42.64440000 19.40900000 9.908480000 9.470910000 6.314650000 1.220660000 1606 64.00300000 15.91920000 27.64300000 23.05430000 12.69280000 6.999650000 1607 80.54170000 13.12060000 39.39630000 38.47260000 20.16730000 14.53900000 1608 75.84040000 6.559250000 44.97420000 34.68650000 17.64250000 18.58760000 1609 75.40710000 9.448770000 56.56360000 36.47930000 18.48450000 29.80320000 1610 76.40660000 9.425710000 68.70390000 40.25780000 20.09950000 44.95270000 1611 93.66940000 15.25820000 73.67470000 59.85560000 30.60220000 53.08110000 1612 93.28570000 11.05820000 82.16670000 61.86240000 30.90370000 66.73010000 1613 62.64310000 41.52330000 68.90260000 31.59910000 23.02820000 45.68390000 1614 77.88310000 66.37780000 93.41680000 57.01970000 49.11530000 89.76810000 1615 81.57670000 76.14010000 93.08360000 63.11690000 59.87810000 90.27810000 1616 25.84920000 17.22890000 34.31350000 5.121730000 3.545520000 9.717040000 1617 33.73150000 16.48200000 38.00140000 7.877900000 4.811290000 12.18690000 1618 33.21550000 13.84860000 44.16370000 8.467680000 4.693090000 16.75970000 1619 40.58890000 9.708940000 47.08030000 11.63920000 5.901140000 19.32370000 1620 42.02770000 29.82290000 47.33890000 13.50160000 10.25730000 20.03460000 1621 49.56690000 92.95380000 51.46780000 32.48720000 61.51960000 29.59910000 1622 59.50140000 92.74930000 59.80420000 40.21080000 65.08580000 38.85360000 1623 13.20880000 18.82710000 8.515120000 1.227360000 1.974400000 0.651108000 1624 9.725300000 21.71300000 7.676270000 1.054630000 2.385080000 0.612118000 1625 13.89980000 31.34460000 29.44330000 3.477570000 5.790780000 7.321900000 1626 19.83930000 37.08660000 29.75320000 5.047550000 8.452600000 7.767280000 1627 24.61240000 42.70710000 29.93680000 6.825100000 11.55080000 8.198230000 1628 72.00620000 46.53040000 29.71300000 32.76240000 26.62560000 9.497910000 1629 75.35880000 49.17100000 39.95640000 37.35390000 30.13010000 16.11590000 1630 85.12870000 62.16350000 39.21230000 49.39820000 43.88130000 17.02880000 1631 23.75940000 22.89050000 9.132140000 3.267210000 3.750080000 0.903773000 1632 27.64320000 53.77680000 9.665940000 8.263310000 17.83580000 2.547560000 1633 27.50480000 61.06970000 10.46640000 9.777210000 22.99900000 3.239910000 1634 39.25760000 64.36940000 26.62940000 15.44450000 28.02290000 8.428450000 1635 56.63680000 82.46490000 69.05720000 36.99750000 52.90550000 49.31010000 1636 59.01280000 81.68560000 81.08530000 41.83980000 54.27490000 67.88420000 1637 73.80670000 90.05650000 94.61830000 60.97280000 71.73990000 94.77030000 1638 28.85250000 41.43050000 32.29360000 7.986860000 11.59360000 9.446710000 1639 26.82920000 41.21900000 36.83320000 7.928760000 11.41720000 12.17790000 1640 33.64080000 49.06910000 39.46800000 11.56600000 16.79040000 14.55330000 1641 45.82290000 50.59230000 51.95290000 18.97060000 21.14700000 25.54790000 1642 6.927460000 7.371970000 11.74920000 0.392162000 0.354467000 0.923638000 1643 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1644 92.39540000 25.11450000 8.421350000 49.43470000 28.02640000 3.038160000 1645 92.15320000 23.21540000 21.52960000 49.57550000 27.62980000 5.925600000 1646 93.17540000 31.61350000 19.42150000 51.35510000 30.64450000 5.571670000 1647 93.70040000 44.29580000 22.33320000 53.77420000 36.51610000 7.188100000 1648 93.33490000 63.20280000 38.10990000 58.57420000 49.32350000 16.77740000 1649 94.90160000 83.79750000 45.42490000 67.29850000 70.35800000 24.67750000 1650 56.89210000 56.10240000 79.50980000 33.25390000 30.74580000 62.63170000 1651 59.42150000 63.25010000 79.25920000 36.42070000 36.88830000 62.89430000 1652 74.60530000 55.77530000 35.71380000 37.37340000 33.76750000 13.67430000 1653 81.33620000 64.14960000 35.39840000 45.52140000 43.27670000 14.47710000 1654 50.15970000 57.41340000 24.58310000 18.98250000 25.37930000 7.207980000 1655 53.38980000 78.03910000 23.45240000 26.03730000 44.15360000 8.860420000 1656 69.79490000 77.31000000 21.73260000 37.34240000 49.36680000 8.692360000 1657 68.66020000 75.53990000 39.92850000 37.73640000 47.85770000 18.15750000 1658 72.13170000 83.94070000 48.42540000 44.56050000 58.71150000 26.24480000 1659 76.88710000 93.48050000 58.37710000 54.11270000 73.07500000 37.95560000 1660 13.22280000 21.21070000 13.11040000 1.502530000 2.505990000 1.401700000 1661 8.791730000 25.11150000 16.07490000 1.500930000 3.280610000 2.130950000 1662 37.93780000 33.19840000 51.14790000 12.79270000 10.80190000 23.63610000 1663 47.66630000 43.81730000 57.88570000 19.98300000 18.30990000 31.46810000 1664 53.48600000 50.56580000 58.07780000 24.40300000 23.79110000 32.26500000 1665 75.96470000 74.12420000 81.24870000 53.03100000 53.48520000 67.91930000 1666 75.33900000 81.00510000 81.85980000 54.73150000 60.27200000 69.72460000 1667 57.27850000 62.61480000 61.57970000 30.03910000 33.72750000 37.44590000 1668 62.00260000 68.93050000 61.23370000 34.74270000 40.63050000 37.77060000 1669 80.72900000 89.22280000 62.09180000 57.05350000 70.02800000 41.94290000 1670 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 1671 62.45130000 54.82130000 47.05890000 29.01270000 28.71980000 21.73480000 1672 89.46820000 54.91930000 47.12390000 53.71550000 41.51150000 22.95530000 1673 92.56280000 69.85830000 48.49190000 60.91900000 55.12440000 25.66990000 1674 97.37590000 82.56330000 66.25030000 74.17960000 72.25260000 47.26680000 1675 23.42170000 19.09850000 18.95350000 3.341310000 3.061140000 2.853010000 1676 23.05450000 16.17310000 25.11930000 3.527760000 2.682070000 4.985570000 1677 33.57610000 20.01910000 28.26380000 6.939780000 4.989640000 6.607010000 1678 46.28940000 59.13770000 38.07590000 18.69450000 26.12500000 14.57890000 1679 45.40980000 68.30740000 51.49170000 22.55730000 34.11820000 26.55950000 1680 14.55530000 38.13250000 34.22550000 4.839220000 8.669130000 10.26530000 1681 10.95130000 81.14360000 43.09330000 15.11860000 41.03230000 20.05060000 1682 14.55460000 92.03560000 54.99620000 21.34340000 54.71670000 32.54240000 1683 18.81450000 90.92650000 85.24840000 29.76420000 56.94540000 75.58580000 1684 8.129490000 21.20500000 20.44930000 1.417360000 2.419670000 3.265640000 1685 10.19820000 42.57610000 18.32330000 3.668360000 9.969310000 3.471990000 1686 20.68270000 51.11980000 18.88390000 6.525610000 15.46410000 4.236310000 1687 27.46350000 67.25480000 56.19750000 16.41600000 30.07240000 31.02160000 1688 36.36560000 66.87460000 81.26200000 25.81800000 33.87880000 66.01710000 1689 50.72150000 81.78850000 87.34250000 38.85970000 52.58910000 78.75840000 1690 32.72810000 54.22630000 56.69840000 15.17790000 21.04010000 30.53150000 1691 42.09730000 59.84390000 71.57770000 23.62180000 28.32570000 50.20110000 1692 14.03950000 17.02960000 35.14720000 3.034680000 2.430080000 10.12270000 1693 19.26820000 16.14000000 53.24250000 6.583920000 3.813700000 24.98430000 1694 46.40470000 13.14150000 59.92200000 16.97380000 8.659200000 32.72130000 1695 51.05760000 10.21550000 69.71620000 21.78590000 10.60100000 45.50070000 1696 51.18120000 36.69570000 64.29720000 22.39140000 16.58460000 38.92730000 1697 46.59570000 33.00360000 84.56080000 25.39020000 16.23010000 69.67280000 1698 65.96720000 32.83750000 93.06280000 40.77130000 23.75660000 86.32200000 1699 14.63980000 16.62080000 22.07700000 1.880320000 1.918270000 3.751820000 1700 17.23970000 14.68150000 21.15560000 2.098630000 1.792560000 3.416270000 1701 42.15860000 9.920290000 24.02330000 9.562690000 5.166350000 4.754040000 1702 41.50750000 29.78940000 57.46940000 15.19950000 10.90010000 30.20170000 1703 54.34670000 56.16770000 61.04210000 26.65900000 27.96300000 36.17100000 1704 54.78350000 55.37480000 69.55780000 28.88100000 28.40380000 47.26000000 1705 54.00890000 56.80990000 88.87460000 34.75010000 31.56930000 79.21360000 1706 61.56990000 64.60550000 87.99430000 41.15350000 39.91790000 78.45650000 1707 23.95580000 36.17130000 63.68960000 11.45000000 10.77740000 37.62480000 1708 21.57830000 44.83780000 78.03250000 16.06490000 16.13220000 58.75240000 1709 23.23400000 46.01480000 89.65480000 20.49550000 18.50060000 79.35410000 1710 32.40820000 45.20790000 90.43230000 23.16250000 19.47480000 80.91750000 1711 35.81890000 27.64400000 77.73980000 17.94560000 11.14700000 57.67630000 1712 44.95750000 28.33860000 93.78270000 27.44180000 15.58090000 86.98290000 1713 77.95890000 32.63230000 95.70340000 52.02280000 29.37730000 92.16500000 1714 15.83310000 8.301670000 40.12350000 3.605240000 1.790020000 13.38040000 1715 24.42350000 34.58180000 48.84640000 8.286790000 8.968500000 21.31090000 1716 28.18150000 38.89930000 47.85810000 9.606950000 11.18850000 20.65660000 1717 58.47090000 44.93760000 62.72570000 27.66060000 22.63680000 37.58780000 1718 74.71380000 56.58070000 68.65630000 43.91060000 36.88420000 46.79540000 1719 76.36710000 63.33440000 70.03340000 47.26840000 42.84950000 49.36940000 1720 76.01370000 68.56500000 70.46970000 48.35870000 47.11060000 50.47050000 1721 14.37560000 20.75060000 17.69280000 1.811080000 2.559100000 2.457920000 1722 19.90870000 20.45960000 33.93390000 3.970860000 3.467750000 9.496720000 1723 16.91480000 21.09480000 45.36770000 5.072980000 3.968250000 17.71510000 1724 26.53640000 25.66030000 81.19730000 15.95350000 9.519160000 63.19870000 1725 28.28470000 36.32000000 69.44800000 14.02900000 11.98940000 45.38950000 1726 26.60460000 48.92450000 69.04150000 15.31990000 17.97230000 45.50330000 1727 10.15610000 25.96490000 31.42420000 2.809040000 4.017680000 8.154460000 1728 7.175940000 24.78720000 34.36660000 2.835840000 3.728480000 9.800620000 1729 11.21300000 82.77610000 35.08200000 14.59170000 42.38870000 14.58780000 1730 10.83460000 34.14810000 8.751910000 2.270160000 6.165280000 1.153060000 1731 10.33580000 40.20560000 9.453530000 2.998430000 8.701480000 1.524920000 1732 13.57460000 61.59840000 10.89740000 7.249680000 22.03830000 3.225330000 1733 45.69050000 90.03710000 16.81670000 25.40290000 55.26310000 8.058720000 1734 54.83300000 93.63120000 17.32250000 31.83550000 62.37130000 8.933570000 1735 39.22320000 58.41210000 8.287070000 13.12940000 23.05820000 2.925930000 1736 61.34490000 58.96540000 53.53670000 30.25930000 31.69040000 28.22040000 1737 75.73710000 59.15140000 53.32920000 41.86890000 37.79690000 28.56630000 1738 85.04780000 58.93170000 59.25770000 52.14420000 42.81600000 35.46330000 1739 90.44980000 67.73040000 68.64670000 62.35240000 53.76630000 48.50560000 1740 64.64400000 43.53250000 61.15950000 31.45610000 24.01830000 35.78820000 1741 77.28640000 43.94130000 62.34610000 42.42440000 29.81920000 37.76100000 1742 76.54340000 82.43200000 76.91820000 54.73590000 61.76330000 61.78180000 1743 24.63700000 28.64700000 30.37510000 5.204540000 5.926370000 7.789480000 1744 27.36620000 27.44370000 37.21190000 6.556670000 6.228150000 11.84040000 1745 71.23330000 26.46770000 47.85040000 32.06970000 18.96340000 21.25810000 1746 88.90610000 42.23230000 56.29810000 52.63720000 34.51180000 31.16770000 1747 100.0000000 71.54560000 57.39730000 72.10740000 61.99620000 35.32320000 1748 72.62400000 82.60020000 10.22300000 40.85030000 55.96730000 6.636520000 1749 78.60640000 91.66280000 7.712270000 49.35470000 69.34280000 7.781170000 1750 84.60600000 90.47150000 55.16330000 59.90370000 72.95650000 34.33420000 1751 25.08170000 18.35240000 2.159400000 3.204220000 2.929100000 0.320365000 1752 24.08080000 15.07380000 8.041820000 2.881240000 2.305740000 0.616119000 1753 28.54990000 16.50270000 13.73290000 4.253900000 3.177020000 1.564720000 1754 56.29940000 29.95140000 18.02710000 18.04690000 13.00610000 3.552200000 1755 78.30350000 35.29620000 24.42750000 36.40610000 24.05610000 6.760050000 1756 81.32960000 46.60440000 24.21370000 40.90150000 30.91150000 7.414650000 1757 26.27830000 11.43940000 14.89540000 3.495020000 2.220760000 1.708040000 1758 34.51370000 8.901450000 9.702980000 5.759990000 3.217250000 0.881305000 1759 54.70800000 57.33890000 10.15900000 20.89000000 26.40330000 3.445650000 1760 65.54300000 69.13180000 15.55920000 31.32830000 39.72460000 5.861640000 1761 81.28970000 70.69660000 12.60260000 45.42090000 48.19560000 6.051720000 1762 84.94480000 71.33230000 72.65720000 58.43190000 54.34220000 54.35240000 1763 86.84560000 79.94240000 72.87180000 63.01540000 63.90200000 55.72370000 1764 94.09760000 86.76520000 73.22930000 73.51270000 75.71590000 57.49320000 1765 55.64250000 30.70830000 24.61870000 18.13320000 13.21280000 5.815110000 1766 72.92480000 32.94970000 28.50700000 31.60610000 20.78580000 8.237680000 1767 91.23640000 42.73570000 34.92020000 51.85900000 34.72140000 13.09980000 1768 92.42900000 42.15230000 89.59010000 66.05730000 40.30440000 81.16860000 1769 74.57330000 35.35210000 65.14260000 39.46950000 24.90450000 40.75740000 1770 89.60480000 41.22600000 65.54000000 55.37810000 35.26830000 42.27140000 1771 90.57630000 48.58280000 80.45840000 61.85030000 41.40980000 65.06760000 1772 93.99890000 53.61820000 90.21130000 70.04960000 47.88360000 83.18350000 1773 15.26050000 9.790820000 14.49720000 1.304710000 0.962394000 1.503890000 1774 14.88470000 6.305030000 10.44470000 1.047690000 0.646937000 0.746645000 1775 17.43230000 89.27840000 19.89510000 16.23540000 49.73870000 8.409780000 1776 21.15290000 92.43610000 46.96070000 21.07030000 55.17240000 24.83820000 1777 9.404060000 95.77970000 16.69830000 17.56070000 57.36810000 8.378110000 1778 10.90150000 93.19380000 30.71250000 17.73300000 54.51240000 13.46400000 1779 7.925520000 49.81750000 75.66210000 14.41820000 17.74020000 55.21750000 1780 10.05420000 57.40870000 93.15360000 21.94600000 25.14190000 86.91400000 1781 18.96840000 68.54880000 93.09150000 25.65520000 34.54090000 87.83700000 1782 16.27140000 24.79810000 24.38620000 2.772590000 3.808320000 4.829270000 1783 23.86770000 30.59000000 22.57470000 4.553860000 6.194840000 4.393490000 1784 36.79490000 38.16410000 19.88810000 9.167940000 11.05620000 3.991470000 1785 44.44040000 48.71870000 26.85770000 14.55130000 18.31680000 7.410390000 1786 46.32680000 51.86340000 58.39640000 20.76280000 22.58620000 32.53370000 1787 47.35350000 53.05870000 66.07100000 23.31120000 24.33700000 42.11880000 1788 47.88670000 60.29150000 66.96600000 25.31010000 29.62230000 43.89760000 1789 48.84390000 60.40150000 75.15250000 28.09230000 30.86700000 55.77950000 1790 36.60340000 30.21780000 35.01660000 9.532020000 8.523260000 10.66630000 1791 44.20360000 33.77070000 36.99030000 13.39420000 11.54620000 12.22350000 1792 43.09590000 37.92230000 38.99850000 13.62980000 13.05610000 13.75940000 1793 53.81170000 42.59840000 42.78970000 20.51080000 18.37860000 17.09930000 1794 60.25020000 51.48560000 51.42310000 27.59340000 26.07070000 25.48740000 1795 61.27190000 65.11520000 69.31170000 35.26540000 37.90730000 47.93900000 1796 60.79130000 75.69880000 93.37280000 45.54510000 50.43420000 89.98620000 1797 12.91550000 16.00120000 79.60210000 12.36530000 6.002950000 60.17630000 1798 11.03360000 60.69610000 85.32300000 19.91530000 26.46560000 72.29640000 1799 9.320230000 73.31300000 92.38560000 25.49820000 38.18080000 86.86650000 1800 24.55070000 67.95010000 10.28400000 10.68610000 28.22440000 3.810970000 1801 33.05230000 87.10770000 1.992420000 18.75290000 48.91570000 5.472030000 1802 51.57970000 89.73270000 1.090860000 28.06860000 56.36750000 6.204030000 1803 56.75900000 93.41700000 29.68440000 33.87210000 63.08580000 13.71960000 1804 67.54810000 92.48720000 55.18240000 45.05210000 67.41650000 33.90560000 1805 21.54690000 31.79450000 17.91700000 3.893810000 6.235690000 2.920230000 1806 25.42490000 42.96040000 24.71840000 6.602120000 11.59570000 5.819920000 1807 24.50290000 59.11870000 29.20540000 9.712490000 21.59690000 8.963620000 1808 31.72180000 78.56410000 36.21490000 17.54730000 40.09040000 14.99300000 1809 34.05710000 93.49540000 90.06870000 36.35270000 62.87090000 85.10550000 1810 6.171330000 32.56300000 29.31560000 2.966020000 5.891120000 7.276690000 1811 10.87510000 47.60420000 30.01130000 5.398680000 13.02160000 8.426690000 1812 7.459780000 59.51570000 63.25700000 12.99190000 22.88640000 38.47280000 1813 7.275610000 29.46760000 31.76850000 2.955600000 4.968320000 8.450680000 1814 10.50970000 29.38700000 43.02480000 4.607110000 5.632360000 16.00890000 1815 23.72870000 44.76010000 58.19320000 11.32700000 14.25420000 31.45710000 1816 19.09810000 35.66020000 40.99280000 6.081570000 8.334950000 14.74870000 1817 17.35560000 54.60440000 75.40140000 16.24410000 21.25820000 55.20000000 1818 17.63160000 71.00810000 73.92040000 19.68990000 34.07240000 54.38840000 1819 22.10720000 61.11340000 71.82700000 17.45870000 25.95210000 50.36860000 1820 25.69470000 63.26460000 92.14820000 25.40570000 30.70580000 85.52920000 1821 28.97770000 75.05990000 92.99630000 29.69870000 41.74780000 88.43440000 1822 29.56730000 87.50460000 92.76310000 33.74310000 55.19490000 89.48610000 1823 50.17600000 23.75860000 24.22780000 14.27530000 9.518130000 5.279400000 1824 50.14880000 21.16940000 31.32520000 14.71650000 9.167340000 8.543420000 1825 52.45870000 26.00350000 39.74820000 17.39020000 11.42950000 14.05090000 1826 53.76200000 23.97700000 53.50690000 20.29020000 12.21160000 26.05120000 1827 92.92190000 31.07650000 52.58570000 55.07230000 31.93480000 26.95620000 1828 42.63100000 19.03390000 33.13220000 10.98490000 6.856390000 9.330300000 1829 43.71330000 41.98600000 34.67570000 13.92920000 14.85450000 11.13760000 1830 42.87610000 51.81380000 38.47930000 15.62950000 20.31340000 14.21830000 1831 40.08450000 60.69320000 38.83030000 16.26130000 25.84290000 15.09770000 1832 39.94720000 69.73620000 46.51040000 19.55860000 33.74430000 21.96820000 1833 47.56400000 69.04060000 64.45120000 26.62930000 36.44130000 41.38270000 1834 90.11850000 39.45760000 40.17180000 50.80930000 32.78290000 16.40230000 1835 89.41120000 48.15580000 47.40040000 52.45230000 37.28270000 22.72290000 1836 26.88210000 14.02620000 23.23100000 4.214170000 2.792330000 4.244040000 1837 37.83440000 8.704100000 66.47070000 14.55430000 6.865690000 40.72680000 1838 44.99870000 11.41510000 77.24490000 20.78390000 9.932730000 56.70750000 1839 79.80600000 11.83950000 83.27340000 47.87070000 23.71510000 67.98720000 1840 85.62180000 10.14660000 93.13920000 57.21050000 27.98440000 86.74860000 1841 6.955840000 15.96340000 13.46850000 0.721096000 1.285340000 1.338720000 1842 9.148030000 16.45510000 10.20470000 0.774760000 1.389960000 0.802748000 1843 7.077630000 13.03310000 14.12770000 0.634821000 0.899684000 1.427700000 1844 30.83790000 54.62690000 20.06460000 9.797020000 19.05270000 4.970830000 1845 34.04260000 70.07630000 32.09110000 15.42570000 32.09770000 11.62590000 1846 35.36460000 90.72200000 32.96190000 22.47990000 54.31900000 14.61360000 1847 51.45950000 51.12730000 15.29200000 17.92470000 21.36630000 3.837650000 1848 64.07090000 54.86550000 10.20830000 26.74550000 27.97630000 3.558220000 1849 72.04310000 55.06040000 9.309800000 33.13600000 31.38520000 3.751360000 1850 71.80590000 69.46530000 10.58600000 36.29830000 42.55910000 5.185820000 1851 77.61620000 97.11760000 11.76830000 50.60070000 75.92480000 9.071060000 1852 90.40350000 95.87340000 29.40320000 64.38250000 81.50940000 15.32140000 1853 59.75030000 63.94480000 23.10520000 26.27200000 33.34600000 7.466310000 1854 59.36880000 76.65060000 28.65170000 29.86460000 44.88440000 11.14020000 1855 78.93250000 94.84510000 35.33430000 52.70220000 74.27770000 17.95620000 1856 82.57270000 94.89020000 70.34980000 63.06670000 78.88790000 53.80980000 1857 97.08060000 95.11860000 83.69380000 83.37740000 89.14450000 75.87760000 1858 33.02580000 22.58430000 59.51320000 11.75910000 7.384240000 32.16460000 1859 64.14330000 29.67960000 71.16270000 31.90880000 19.09950000 48.41570000 1860 70.81380000 29.67590000 81.47450000 40.27480000 23.05520000 64.92280000 1861 93.04610000 31.57080000 90.93760000 65.95990000 36.45580000 83.30280000 1862 55.67180000 14.13320000 21.24130000 16.78060000 9.299430000 4.125540000 1863 70.86700000 21.72900000 22.48900000 28.39660000 16.41200000 5.237170000 1864 71.16150000 38.32100000 19.85350000 30.07930000 21.89660000 4.967020000 1865 76.71910000 53.09470000 24.86480000 37.69140000 32.54410000 7.909200000 1866 52.83800000 47.95140000 27.76060000 18.98820000 20.22030000 7.985850000 1867 52.27000000 59.02900000 44.91740000 22.90430000 28.11400000 19.91770000 1868 60.57930000 67.74080000 54.48990000 31.98310000 38.49390000 29.97730000 1869 63.64410000 75.16580000 55.95120000 36.50060000 46.59100000 32.41430000 1870 63.18820000 76.93040000 68.65850000 39.66760000 49.36470000 48.30990000 1871 67.31060000 80.21650000 77.41800000 46.29300000 55.37070000 61.94190000 1872 11.41120000 8.384000000 5.121350000 0.594233000 0.531309000 0.196975000 1873 9.865510000 12.49620000 5.488910000 0.577094000 0.842478000 0.257014000 1874 11.59200000 6.830190000 13.16770000 0.773084000 0.518731000 1.190570000 1875 31.89960000 32.09930000 38.11860000 8.454920000 8.466820000 12.68520000 1876 31.28730000 35.99430000 37.45710000 8.611290000 9.808510000 12.39340000 1877 29.88300000 37.17460000 78.51210000 17.20920000 13.62770000 59.21970000 1878 65.42610000 39.41130000 76.89340000 35.64030000 24.01550000 57.59510000 1879 11.25980000 15.93530000 18.66530000 1.269320000 1.536580000 2.618560000 1880 6.095600000 13.32330000 25.30700000 1.259840000 1.175220000 4.917900000 1881 5.179510000 23.26480000 50.06480000 4.946740000 4.227510000 21.93700000 1882 17.67950000 62.54500000 62.24910000 14.52210000 25.66210000 37.52750000 1883 80.77240000 62.13650000 66.17410000 50.16540000 43.65900000 44.15110000 1884 92.77800000 77.60610000 76.06330000 69.84180000 65.26260000 60.64640000 1885 20.46300000 12.61770000 13.36990000 2.181370000 1.659090000 1.343690000 1886 17.22590000 14.72180000 9.295510000 1.581310000 1.590310000 0.694621000 1887 15.77670000 8.873010000 8.373420000 1.164310000 0.849381000 0.504940000 1888 18.99130000 13.17520000 6.718370000 1.758670000 1.517360000 0.413179000 1889 66.37670000 29.68200000 6.796000000 24.75160000 16.43380000 1.853750000 1890 68.75040000 61.71390000 26.45330000 32.72760000 35.15050000 8.952350000 1891 68.36830000 67.24870000 25.11750000 33.64500000 39.46010000 8.873000000 1892 68.74070000 87.54500000 32.49470000 40.72710000 60.49740000 14.82650000 1893 63.96910000 83.11060000 47.18190000 37.54910000 54.33870000 24.71640000 1894 63.60650000 90.67610000 92.52760000 52.14740000 67.92330000 90.26040000 1895 8.905190000 22.81510000 38.35530000 3.289490000 3.493290000 12.33570000 1896 2.202260000 27.76820000 45.65090000 4.476300000 5.096060000 18.09310000 1897 20.68510000 30.57130000 82.87120000 15.62240000 10.53950000 66.18150000 1898 20.20010000 38.02830000 88.89100000 18.45040000 14.17520000 77.43290000 1899 34.56200000 39.31120000 89.01110000 22.52500000 16.75120000 77.90530000 1900 33.15890000 56.05440000 93.99940000 26.70970000 26.75840000 88.73100000 1901 27.20840000 56.62390000 79.98260000 20.12150000 24.26380000 62.83100000 1902 30.20600000 59.53460000 92.04860000 25.76130000 28.46350000 85.06770000 1903 50.48200000 69.52760000 91.81940000 36.76820000 41.06020000 85.94140000 1904 38.33960000 47.70170000 63.73810000 17.63610000 18.72420000 38.53030000 1905 37.31210000 49.20590000 72.45900000 19.76470000 20.29610000 50.60410000 1906 78.92650000 93.19590000 77.76260000 60.98610000 75.72730000 64.67090000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 99.99690 108.8960 1 0.000000 77.02890 94.93270 27.23730 42.05040 92.39530 2 100.0000 0.000000 75.91840 67.94000 33.84370 56.78280 3 0.000000 0.000000 53.88990 4.832290 1.932840 25.45160 4 100.0000 68.59390 0.000000 65.77010 57.11770 5.786370 5 0.000000 45.14720 0.000000 3.227610 10.91310 1.229510 6 67.33170 0.000000 0.000000 24.16480 12.45980 1.131960 7 7.958970 7.632930 6.909270 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 99.9969 108.896 1 0.00000 100.000 100.000 37.3737 70.2602 106.194 2 100.000 0.00000 100.000 76.4924 37.2646 101.828 3 0.00000 0.00000 100.000 18.8203 7.52782 99.1264 4 100.000 100.000 0.00000 76.2255 92.4691 9.76917 5 0.00000 100.000 0.00000 18.5534 62.7324 7.06762 6 100.000 0.00000 0.00000 57.6721 29.7367 2.70155 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7749 23.7126 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s37-g109-m0-f1906-ceRGBv2.ti1000644 000765 000000 00000370076 12237536424 023114 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1683" CREATED "Sat Oct 19 13:08:42 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "109" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "96.415999 99.996948 82.488027" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "37" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1906 BEGIN_DATA 1 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 2 30.555600 30.555600 30.555600 6.2331700 6.4646700 5.3327400 3 56.137000 61.170900 29.205000 21.684500 25.888800 6.4774100 4 56.169500 63.967500 57.330500 24.925100 29.399200 21.347500 5 60.654000 62.865100 100.00000 37.945700 35.925100 77.835900 6 62.116200 70.424100 100.00000 40.808700 42.443200 78.509600 7 44.329700 16.185800 0.0000000 9.5272300 5.7909100 0.1448790 8 67.777700 18.726100 0.0000000 24.972300 13.679800 0.1820400 9 86.869600 21.998600 0.0000000 45.972900 24.451100 0.2384890 10 100.00000 25.149800 11.512300 65.997800 34.816500 1.3124300 11 100.00000 45.124800 44.866900 69.590000 41.955900 11.929100 12 100.00000 50.913100 78.889800 75.876800 47.830400 42.740000 13 0.0000000 27.478000 12.892700 1.1475300 3.2899600 1.5272700 14 0.0000000 86.351600 34.051000 13.323300 41.982300 10.741600 15 64.235200 93.515500 100.00000 50.089100 69.026600 81.412700 16 93.753500 93.287300 100.00000 83.551300 85.237500 81.377100 17 100.00000 93.099400 100.00000 93.423500 89.878500 81.347900 18 30.743000 0.0000000 10.867000 4.4228100 2.1916700 0.9409180 19 30.555600 0.0000000 0.0000000 4.2035600 2.0703700 2e-070000 20 33.333300 0.0000000 0.0000000 5.0015100 2.4633800 3e-070000 21 36.111100 0.0000000 0.0000000 5.8952100 2.9035500 3e-070000 22 41.666700 0.0000000 0.0000000 7.9881800 3.9343900 4e-070000 23 43.137800 0.0000000 0.0000000 8.6158700 4.2435500 4e-070000 24 44.444400 0.0000000 0.0000000 9.1993700 4.5309400 5e-070000 25 50.000000 0.0000000 0.0000000 11.975900 5.8984700 6e-070000 26 52.565900 0.0000000 10.780900 13.594900 6.7090400 0.9317590 27 52.777800 0.0000000 0.0000000 13.553100 6.6752500 7e-070000 28 55.555600 0.0000000 0.0000000 15.262500 7.5171900 8e-070000 29 58.333300 0.0000000 0.0000000 17.109200 8.4267200 9e-070000 30 63.888900 0.0000000 0.0000000 21.239400 10.461000 1.1e-0600 31 66.666700 0.0000000 0.0000000 23.533200 11.590700 1.2e-0600 32 69.444400 0.0000000 0.0000000 25.985300 12.798500 1.3e-0600 33 72.222200 0.0000000 0.0000000 28.603200 14.087800 1.5e-0600 34 75.000000 0.0000000 0.0000000 31.391700 15.461200 1.6e-0600 35 77.777800 0.0000000 0.0000000 34.354800 16.920600 1.8e-0600 36 80.555600 0.0000000 0.0000000 37.498500 18.469000 1.9e-0600 37 83.333300 0.0000000 0.0000000 40.829100 20.109400 2.1e-0600 38 86.111100 0.0000000 0.0000000 44.351200 21.844100 2.3e-0600 39 88.888900 0.0000000 0.0000000 48.069800 23.675700 2.5e-0600 40 91.666700 0.0000000 0.0000000 51.990800 25.606800 2.7e-0600 41 94.444400 0.0000000 0.0000000 56.119900 27.640600 2.9e-0600 42 97.222200 0.0000000 0.0000000 60.461800 29.779100 3.1e-0600 43 100.00000 0.0000000 75.335900 71.654500 35.814700 36.954600 44 100.00000 0.0000000 100.00000 78.609400 39.788500 75.704000 45 97.222200 97.222200 97.222200 89.654500 92.984400 76.703300 46 98.148100 98.148100 98.148100 91.871300 95.283500 78.599900 47 12.963000 12.963000 12.963000 1.5008000 1.5565400 1.2840000 48 5.5555600 5.5555600 5.5555600 0.5926540 0.6146660 0.5070410 49 0.0000000 12.632100 9.0628900 0.4046970 0.9834580 0.8652210 50 0.0000000 16.666700 0.0000000 0.3976490 1.3445500 0.1514980 51 0.0000000 19.444400 0.0000000 0.5080090 1.7177000 0.1935440 52 0.0000000 22.222200 0.0000000 0.6368910 2.1534800 0.2426460 53 11.636500 21.400700 0.0000000 1.4763200 2.4513800 0.2274070 54 0.0000000 25.000000 0.0000000 0.7862640 2.6585500 0.2995550 55 0.0000000 33.333300 0.0000000 1.3697000 4.6312700 0.5218340 56 0.0000000 36.111100 0.0000000 1.6144400 5.4588100 0.6150780 57 11.897500 38.540600 0.0000000 2.7551600 6.7037000 0.7051630 58 0.0000000 38.888900 0.0000000 1.8864500 6.3785300 0.7187080 59 0.0000000 41.666700 0.0000000 2.1876100 7.3968600 0.8334490 60 0.0000000 44.444400 0.0000000 2.5193100 8.5183900 0.9598180 61 0.0000000 47.222200 0.0000000 2.8828800 9.7477100 1.0983300 62 0.0000000 50.000000 0.0000000 3.2796900 11.089400 1.2495100 63 0.0000000 52.777800 0.0000000 3.7116000 12.549800 1.4140600 64 0.0000000 55.555600 0.0000000 4.1797300 14.132700 1.5924200 65 0.0000000 58.333300 0.0000000 4.6854600 15.842700 1.7850900 66 0.0000000 61.111100 0.0000000 5.2307600 17.686500 1.9928400 67 0.0000000 63.888900 0.0000000 5.8165400 19.667100 2.2160200 68 0.0000000 66.666700 0.0000000 6.4447200 21.791200 2.4553400 69 0.0000000 69.444400 0.0000000 7.1162500 24.061800 2.7111900 70 0.0000000 72.222200 0.0000000 7.8331600 26.485800 2.9843200 71 0.0000000 75.000000 0.0000000 8.5968100 29.067900 3.2752600 72 0.0000000 77.777800 0.0000000 9.4082700 31.811600 3.5844100 73 0.0000000 80.555600 0.0000000 10.269200 34.722700 3.9124200 74 0.0000000 83.333300 0.0000000 11.181300 37.806800 4.2599200 75 0.0000000 86.111100 0.0000000 12.145900 41.068100 4.6273900 76 0.0000000 88.888900 0.0000000 13.164200 44.511400 5.0153700 77 0.0000000 91.666700 0.0000000 14.238000 48.142200 5.4244700 78 0.0000000 94.444400 0.0000000 15.368800 51.965600 5.8552800 79 0.0000000 97.222200 0.0000000 16.557900 55.986100 6.3083000 80 49.373800 100.00000 32.455000 30.435000 66.506300 12.301600 81 83.164000 100.00000 56.726500 61.775300 82.128200 25.440400 82 14.575800 15.144200 0.0000000 1.5353700 1.7515400 0.1312710 83 10.185200 10.185200 10.185200 1.1089300 1.1501100 0.9487350 84 7.4074100 7.4074100 7.4074100 0.7906960 0.8200630 0.6764740 85 0.0000000 0.0000000 13.888900 0.2324060 0.1327900 1.2948500 86 0.0000000 0.0000000 16.666700 0.3034360 0.1733740 1.6905900 87 0.0000000 0.0000000 19.444400 0.3876490 0.2214910 2.1597800 88 0.0000000 0.0000000 22.222200 0.4859960 0.2776830 2.7077200 89 0.0000000 11.412000 25.476600 0.8561570 1.1493600 3.5505600 90 0.0000000 0.0000000 25.000000 0.5999780 0.3428100 3.3427700 91 0.0000000 0.0000000 30.555600 0.8784310 0.5019090 4.8941600 92 0.0000000 0.0000000 33.333300 1.0451800 0.5971850 5.8232100 93 0.0000000 0.0000000 36.111100 1.2319400 0.7038930 6.8637200 94 0.0000000 0.0000000 38.888900 1.4395000 0.8224870 8.0201400 95 0.0000000 0.0000000 41.666700 1.6693100 0.9537960 9.3005500 96 0.0000000 0.0000000 44.444400 1.9224200 1.0984100 10.710700 97 0.0000000 0.0000000 47.222200 2.1998500 1.2569300 12.256400 98 0.0000000 0.0000000 50.000000 2.5026500 1.4299400 13.943500 99 0.0000000 0.0000000 52.777800 2.8322300 1.6182500 15.779700 100 0.0000000 0.0000000 55.555600 3.1894500 1.8223600 17.770000 101 0.0000000 0.0000000 58.333300 3.5753500 2.0428500 19.920000 102 0.0000000 0.0000000 61.111100 3.9914600 2.2806000 22.238300 103 0.0000000 0.0000000 63.888900 4.4384600 2.5360000 24.728800 104 0.0000000 0.0000000 66.666700 4.9178000 2.8098800 27.399400 105 0.0000000 0.0000000 69.444400 5.4302300 3.1026700 30.254400 106 0.0000000 0.0000000 72.222200 5.9772900 3.4152400 33.302400 107 0.0000000 0.0000000 75.000000 6.5600100 3.7481900 36.549000 108 0.0000000 0.0000000 77.777800 7.1792200 4.1019900 39.998900 109 0.0000000 0.0000000 80.555600 7.8361800 4.4773600 43.659100 110 0.0000000 0.0000000 83.333300 8.5321900 4.8750400 47.536900 111 0.0000000 0.0000000 86.111100 9.2681900 5.2955700 51.637600 112 0.0000000 0.0000000 88.888900 10.045300 5.7395800 55.967200 113 0.0000000 0.0000000 91.666700 10.864700 6.2077400 60.532300 114 0.0000000 0.0000000 94.444400 11.727500 6.7007700 65.339800 115 0.0000000 0.0000000 97.222200 12.634900 7.2191900 70.395000 116 0.0000000 0.0000000 100.00000 13.587800 7.7636400 75.704000 117 22.726400 17.849400 100.00000 16.449400 10.451200 75.872500 118 36.260100 92.799800 100.00000 34.226200 60.370700 81.301600 119 0.0000000 0.0000000 11.111100 0.1735400 0.0991557 0.9668760 120 0.0000000 8.3333300 0.0000000 0.1643170 0.5555970 0.0626025 121 3.7037000 3.7037000 3.7037000 0.3946120 0.4092680 0.3376080 122 0.0000000 4.5024300 0.0000000 0.0886917 0.2998880 0.0337902 123 5.5555600 0.0000000 0.0000000 0.3996780 0.1968520 0.0000000 124 0.0000000 11.111100 0.0000000 0.2274220 0.7689700 0.0866445 125 0.9259260 0.9259260 0.9259260 0.0990209 0.1026990 0.0847166 126 0.0000000 5.5555600 0.0000000 0.1094540 0.3700920 0.0417005 127 1.8518500 1.8518500 1.8518500 0.1980420 0.2053970 0.1694330 128 0.0000000 0.0000000 8.3333300 0.1253860 0.0716420 0.6985880 129 0.0000000 0.0000000 5.5555600 0.0835218 0.0477219 0.4653400 130 0.0000000 2.7777800 0.0000000 0.0548630 0.1855050 0.0209020 131 2.7777800 2.7777800 2.7777800 0.2970630 0.3080960 0.2541500 132 8.3333300 8.3333300 8.3333300 0.8897170 0.9227610 0.7611910 133 13.888900 13.888900 13.888900 1.6491100 1.7103600 1.4108800 134 14.814800 14.814800 14.814800 1.8076300 1.8747700 1.5465100 135 16.666700 16.666700 16.666700 2.1531200 2.2330900 1.8420900 136 17.592600 17.592600 17.592600 2.3416000 2.4285700 2.0033400 137 18.518500 18.518500 18.518500 2.5403000 2.6346400 2.1733300 138 19.444400 19.444400 19.444400 2.7506800 2.8528400 2.3533200 139 20.370400 20.370400 20.370400 2.9721800 3.0825700 2.5428300 140 21.296300 21.296300 21.296300 3.2050400 3.3240800 2.7420500 141 22.222200 22.222200 22.222200 3.4485300 3.5766100 2.9503600 142 23.148100 23.148100 23.148100 3.7064400 3.8441000 3.1710200 143 24.074100 24.074100 24.074100 3.9756300 4.1232900 3.4013200 144 25.000000 25.000000 25.000000 4.2573300 4.4154400 3.6423200 145 25.925900 25.925900 25.925900 4.5517700 4.7208300 3.8942400 146 26.851900 26.851900 26.851900 4.8608500 5.0413800 4.1586700 147 27.777800 27.777800 27.777800 5.1828400 5.3753400 4.4341400 148 28.703700 28.703700 28.703700 5.5184800 5.7234400 4.7213000 149 29.629600 29.629600 29.629600 5.8685100 6.0864700 5.0207600 150 31.481500 31.481500 31.481500 6.6124500 6.8580400 5.6572400 151 32.407400 32.407400 32.407400 7.0063700 7.2665900 5.9942500 152 33.333300 33.333300 33.333300 7.4163900 7.6918400 6.3450400 153 34.259300 34.259300 34.259300 7.8425100 8.1337900 6.7096000 154 35.185200 35.185200 35.185200 8.2832600 8.5909100 7.0866900 155 36.111100 36.111100 36.111100 8.7415800 9.0662500 7.4788000 156 37.037000 37.037000 37.037000 9.2158500 9.5581300 7.8845500 157 37.963000 37.963000 37.963000 9.7070700 10.067600 8.3048100 158 38.888900 38.888900 38.888900 10.214400 10.593800 8.7388500 159 39.814800 39.814800 39.814800 10.740800 11.139700 9.1891800 160 40.740700 40.740700 40.740700 11.284400 11.703500 9.6542700 161 41.666700 41.666700 41.666700 11.845100 12.285000 10.134000 162 42.592600 42.592600 42.592600 12.424900 12.886400 10.630000 163 43.518500 43.518500 43.518500 13.023700 13.507400 11.142300 164 44.444400 44.444400 44.444400 13.641100 14.147700 11.670500 165 45.370400 45.370400 45.370400 14.277400 14.807700 12.215000 166 46.296300 46.296300 46.296300 14.933300 15.487900 12.776100 167 47.222200 47.222200 47.222200 15.609700 16.189500 13.354800 168 48.148100 48.148100 48.148100 16.305100 16.910700 13.949700 169 49.074100 49.074100 49.074100 17.021100 17.653300 14.562300 170 50.000000 50.000000 50.000000 17.758300 18.417800 15.193000 171 50.925900 50.925900 50.925900 18.515900 19.203600 15.841200 172 51.851900 51.851900 51.851900 19.295500 20.012100 16.508100 173 52.777800 52.777800 52.777800 20.096900 20.843300 17.193800 174 53.703700 53.703700 53.703700 20.919700 21.696600 17.897700 175 54.629600 54.629600 54.629600 21.764200 22.572600 18.620200 176 55.555600 55.555600 55.555600 22.631700 23.472200 19.362400 177 56.481500 56.481500 56.481500 23.520800 24.394400 20.123100 178 57.407400 57.407400 57.407400 24.434400 25.341900 20.904700 179 58.333300 58.333300 58.333300 25.370000 26.312200 21.705100 180 59.259300 59.259300 59.259300 26.329700 27.307600 22.526200 181 60.185200 60.185200 60.185200 27.314600 28.329000 23.368800 182 61.111100 61.111100 61.111100 28.322600 29.374500 24.231200 183 62.037000 62.037000 62.037000 29.355000 30.445300 25.114500 184 62.963000 62.963000 62.963000 30.412300 31.541800 26.019000 185 63.888900 63.888900 63.888900 31.494400 32.664100 26.944800 186 64.814800 64.814800 64.814800 32.602800 33.813600 27.893100 187 65.740700 65.740700 65.740700 33.735300 34.988300 28.862000 188 66.666700 66.666700 66.666700 34.895700 36.191800 29.854800 189 67.592600 67.592600 67.592600 36.080900 37.421000 30.868800 190 68.518500 68.518500 68.518500 37.294000 38.679100 31.906600 191 69.444400 69.444400 69.444400 38.531800 39.962900 32.965600 192 70.370400 70.370400 70.370400 39.798900 41.277100 34.049700 193 71.296300 71.296300 71.296300 41.092400 42.618600 35.156300 194 72.222200 72.222200 72.222200 42.413600 43.988900 36.286700 195 73.148100 73.148100 73.148100 43.764100 45.389500 37.442100 196 74.074100 74.074100 74.074100 45.140900 46.817500 38.620000 197 75.000000 75.000000 75.000000 46.548500 48.277300 39.824200 198 75.925900 75.925900 75.925900 47.983800 49.766000 41.052200 199 76.851900 76.851900 76.851900 49.448400 51.284900 42.305200 200 77.777800 77.777800 77.777800 50.942300 52.834300 43.583300 201 78.703700 78.703700 78.703700 52.465600 54.414200 44.886500 202 79.629600 79.629600 79.629600 54.020100 56.026500 46.216500 203 80.555600 80.555600 80.555600 55.603900 57.669100 47.571500 204 81.481500 81.481500 81.481500 57.219900 59.345100 48.954100 205 82.407400 82.407400 82.407400 58.865200 61.051500 50.361700 206 83.333300 83.333300 83.333300 60.542700 62.791200 51.796800 207 84.259300 84.259300 84.259300 62.250900 64.562900 53.258300 208 85.185200 85.185200 85.185200 63.991900 66.368600 54.747800 209 86.111100 86.111100 86.111100 65.765200 68.207800 56.265000 210 87.037000 87.037000 87.037000 67.569800 70.079400 57.808900 211 87.963000 87.963000 87.963000 69.408200 71.986100 59.381700 212 88.888900 88.888900 88.888900 71.279300 73.926700 60.982500 213 89.814800 89.814800 89.814800 73.184300 75.902400 62.612300 214 90.740700 90.740700 90.740700 75.121500 77.911500 64.269700 215 91.666700 91.666700 91.666700 77.093400 79.956700 65.956800 216 92.592600 92.592600 92.592600 79.100100 82.038000 67.673600 217 93.518500 93.518500 93.518500 81.140500 84.154100 69.419200 218 94.444400 94.444400 94.444400 83.216300 86.307000 71.195100 219 95.370400 95.370400 95.370400 85.327100 88.496200 73.001000 220 96.296300 96.296300 96.296300 87.472800 90.721600 74.836800 221 0.0000000 28.010500 23.633300 1.5143900 3.5978600 3.3896600 222 0.0000000 36.556000 36.157800 2.8912700 6.3053000 7.5128800 223 0.0000000 53.413700 72.614800 9.8728800 16.362000 35.202500 224 0.0000000 67.435000 73.526900 12.872500 25.973100 37.326900 225 0.0000000 85.987100 89.467200 22.314100 46.753900 61.508600 226 0.0000000 89.851500 100.00000 27.117900 53.512300 80.858800 227 0.0000000 100.00000 100.00000 31.394400 67.972000 82.488000 228 67.909200 100.00000 100.00000 56.004200 80.093100 82.488000 229 78.170300 100.00000 100.00000 66.182100 85.105900 82.488000 230 49.141100 64.523300 74.254000 23.870300 29.467000 37.926300 231 83.563700 79.108300 100.00000 64.516100 61.198400 79.443100 232 48.473100 40.598300 51.404600 15.898000 14.015400 15.640800 233 76.511500 59.686500 50.795100 40.521600 34.450400 16.337700 234 81.427100 69.766500 60.584000 49.630900 45.543200 24.527000 235 0.0000000 21.564900 34.297900 1.7124300 2.6774200 6.4023200 236 0.0000000 28.048900 33.592500 2.0367200 3.9035000 6.2865600 237 27.215300 26.444600 39.712700 5.7396000 5.4655900 8.7191100 238 57.483500 27.569300 65.039200 22.105900 13.978800 26.172300 239 76.233300 27.802100 85.961900 42.871300 24.612400 51.777100 240 39.638900 16.153600 60.840100 11.503200 7.0721600 22.149000 241 59.479700 44.453300 69.855900 25.942500 20.492500 31.654100 242 63.885900 60.184500 73.078900 32.434600 31.032100 36.204400 243 69.346600 75.436100 82.938500 43.048300 47.059400 50.294900 244 100.00000 92.909900 92.720800 90.945500 88.245800 67.942700 245 51.778700 41.231500 35.206500 16.277900 14.287200 7.3266800 246 67.442000 100.00000 35.355400 43.186800 72.801800 13.353100 247 76.051500 100.00000 33.734600 51.369700 76.823600 12.750700 248 100.00000 100.00000 74.586900 89.299300 95.930700 42.837400 249 100.00000 100.00000 84.045100 91.545100 97.213800 55.349800 250 15.740700 15.740700 15.740700 1.9749000 2.0482500 1.6896100 251 11.111100 11.111100 11.111100 1.2314100 1.2771400 1.0535200 252 38.888900 0.0000000 0.0000000 6.8884500 3.3927400 4e-070000 253 47.222200 0.0000000 0.0000000 10.527000 5.1848100 5e-070000 254 61.111100 0.0000000 0.0000000 19.100400 9.4074400 1e-060000 255 73.350000 0.0000000 30.438000 30.586400 15.133300 4.8566500 256 85.426400 0.0000000 36.831300 44.748300 22.141000 7.1521700 257 89.185500 0.0000000 49.226400 50.894300 25.257300 13.458900 258 100.00000 0.0000000 50.782900 67.614400 33.506300 14.445400 259 100.00000 0.0000000 62.749200 69.272900 34.453900 23.685800 260 100.00000 24.038800 100.00000 79.341800 42.264800 75.983000 261 39.701800 66.050200 52.913600 16.349400 26.480300 18.273700 262 36.533700 73.084200 58.026100 17.635900 32.262500 22.747100 263 100.00000 87.562500 58.700000 81.321500 76.942700 25.044300 264 77.074100 26.855700 0.0000000 34.484900 19.578700 0.3421150 265 100.00000 41.167900 0.0000000 67.153000 39.231400 0.8120030 266 100.00000 54.597100 0.0000000 69.035600 45.596900 1.5292500 267 66.378900 67.401600 0.0000000 29.906000 33.847300 2.5214000 268 75.799900 78.718100 0.0000000 41.920700 48.650400 3.6932900 269 7.8518500 0.0000000 18.745100 0.9300190 0.4868540 2.0347500 270 0.0000000 0.0000000 27.777800 0.7304100 0.4173340 4.0694700 271 57.438800 12.503800 25.867700 17.402300 9.3844800 3.6598800 272 100.00000 21.707700 32.263500 66.612100 34.652300 5.6860800 273 100.00000 30.396600 41.161200 67.786700 36.805900 9.4919900 274 100.00000 35.036900 66.831400 71.485400 39.979600 28.140800 275 100.00000 34.831900 77.153200 73.556700 41.111800 39.775800 276 100.00000 42.396000 100.00000 80.881100 47.469900 76.569500 277 19.377800 23.748500 42.987200 4.3474200 4.3518200 10.227800 278 26.874500 32.421600 42.219900 6.2963300 6.9777700 10.064300 279 27.812000 41.617200 65.032800 10.317100 11.749700 26.637900 280 25.610800 44.477300 100.00000 19.112500 17.774100 76.665400 281 0.0000000 31.288400 75.696200 7.9180500 7.9140900 37.853200 282 0.0000000 42.003200 86.607600 11.630300 12.900600 53.242500 283 0.0000000 52.179100 100.00000 17.203200 19.988300 77.081400 284 0.0000000 66.733000 100.00000 20.048000 29.607200 78.165200 285 0.0000000 33.819100 56.121500 4.6762000 6.6350800 18.732300 286 0.0000000 37.311100 70.723300 7.4062000 9.0883200 32.292200 287 0.0000000 45.062100 70.753200 8.2810500 12.029800 32.656100 288 46.225000 0.0000000 40.714300 11.624200 5.8504600 8.8477500 289 60.179300 0.0000000 47.450300 20.639900 10.341000 12.389000 290 72.916000 0.0000000 53.094200 32.154500 16.063300 15.998000 291 32.461000 56.523800 0.0000000 9.0923400 17.048700 1.6578900 292 41.109300 56.586300 0.0000000 12.121500 18.573300 1.6621900 293 76.707100 60.156900 0.0000000 38.230600 33.385600 1.9197600 294 87.705400 60.799800 0.0000000 51.628600 40.356200 1.9687800 295 85.098200 67.597500 25.961900 50.352000 44.103100 6.1225000 296 85.203500 100.00000 26.047800 61.632500 81.844900 10.389700 297 33.497900 81.351500 0.0000000 15.577000 38.076900 4.0100100 298 36.579500 100.00000 38.240400 25.251000 63.984500 14.523900 299 0.0000000 27.777800 0.0000000 0.9571930 3.2365000 0.3646760 300 0.0000000 30.555600 0.0000000 1.1511700 3.8923900 0.4385800 301 38.551700 28.997400 26.691200 8.4795000 7.2320800 4.1700500 302 54.339300 31.909300 56.194900 19.027100 13.253600 18.728400 303 72.656300 46.485000 65.165800 36.465300 26.366800 26.994300 304 77.014400 63.982400 72.812200 45.457300 39.731400 36.198900 305 90.831700 66.092800 100.00000 70.689400 54.119000 78.108500 306 100.00000 68.372700 100.00000 85.461400 62.956700 78.314500 307 100.00000 57.910600 46.765900 71.780200 48.828900 13.747700 308 100.00000 73.839200 59.431300 77.029600 62.128700 23.967300 309 24.285900 0.0000000 21.238600 3.1728800 1.5981700 2.5042700 310 55.029100 0.0000000 53.179400 17.810000 8.9991100 16.057400 311 67.643200 0.0000000 61.908300 28.493200 14.358200 22.934900 312 78.426100 0.0000000 65.663000 39.812700 19.982600 26.413000 313 87.911800 0.0000000 77.820500 53.927900 27.127700 40.053400 314 100.00000 0.0000000 87.650600 74.715400 37.563600 54.008500 315 0.0000000 44.159500 25.053700 3.0861100 8.7423000 4.3023700 316 0.0000000 60.489300 29.206600 5.9093500 17.721300 6.4254300 317 0.0000000 73.163700 33.790300 9.1612800 27.957400 9.0673000 318 0.0000000 75.156400 87.425400 18.271900 34.720500 56.949500 319 0.0000000 81.041500 100.00000 24.012900 43.013500 79.675800 320 40.543100 44.479400 100.00000 23.642200 20.005900 76.665500 321 54.298100 45.288800 100.00000 30.685500 23.771600 76.704600 322 70.031300 50.126700 100.00000 43.411100 31.981100 76.960700 323 99.074100 99.074100 99.074100 94.125400 97.621200 80.528300 324 19.444400 0.0000000 0.0000000 1.8550200 0.9136470 1e-070000 325 22.222200 0.0000000 0.0000000 2.3256400 1.1454400 1e-070000 326 22.052500 100.00000 0.0000000 20.102200 61.339100 6.7840500 327 72.354800 100.00000 0.0000000 46.539000 74.359900 6.7840500 328 77.830600 100.00000 18.705900 52.583200 77.365500 8.8118600 329 43.669400 49.410300 0.0000000 12.042100 15.153400 1.2163100 330 56.665100 55.612600 0.0000000 20.173000 22.038700 1.5962200 331 83.246200 77.766800 43.874700 51.995200 52.924600 13.993400 332 85.950400 100.00000 77.645500 69.097800 86.034400 46.614100 333 87.882700 100.00000 87.040700 74.029700 88.650700 59.844300 334 53.925900 40.950900 41.747600 18.026800 15.097800 10.142600 335 64.523500 81.166400 44.565200 34.148600 47.203100 14.762100 336 67.630600 100.00000 54.509600 45.223700 73.952700 23.785400 337 47.675000 72.728500 41.439500 20.373400 33.184100 12.227700 338 50.247800 100.00000 44.846000 31.878800 67.294000 17.709500 339 17.368800 34.043100 0.0000000 2.9774300 5.5966600 0.5447210 340 75.270500 39.914600 0.0000000 33.666000 22.342300 0.7597940 341 100.00000 42.198600 18.958100 67.642400 39.841100 2.9292700 342 100.00000 43.829300 32.825200 68.478000 40.864500 6.5761600 343 100.00000 83.617900 65.285800 80.974700 72.828900 30.345400 344 15.408700 23.893300 93.691400 13.503900 9.6490700 64.287900 345 23.382700 100.00000 100.00000 33.939200 69.225400 82.488000 346 26.506900 100.00000 75.904400 27.763500 65.645200 44.433500 347 39.521200 100.00000 83.930700 33.622800 68.683200 55.183500 348 0.0000000 55.993200 47.263500 6.4610000 15.652900 13.902100 349 0.0000000 66.396600 62.615300 10.611100 23.994500 25.995700 350 65.716800 81.850800 67.298500 38.450300 50.209500 32.104400 351 24.422800 45.418200 17.472500 5.7207000 10.478400 2.8256900 352 26.374000 69.303800 20.771900 10.683900 25.752200 5.1092400 353 35.272100 84.359800 45.794800 19.200000 42.929500 15.838300 354 46.294000 100.00000 54.471100 30.922800 66.908700 23.757600 355 18.330100 0.0000000 38.352600 3.0832000 1.6287600 7.7875400 356 15.691000 0.0000000 48.099700 3.6184800 1.9629600 12.773800 357 50.659100 0.0000000 100.00000 25.926400 13.840800 75.704000 358 67.623800 0.0000000 100.00000 37.947500 19.761500 75.704000 359 81.147300 30.497100 100.00000 52.926900 30.452000 76.140900 360 100.00000 78.806000 100.00000 88.330500 72.658000 79.407600 361 100.00000 86.589600 100.00000 90.926800 81.436500 80.396700 362 38.906000 24.011400 0.0000000 7.6257200 5.8670400 0.2784370 363 49.612500 28.201100 0.0000000 12.751700 9.1265300 0.3753490 364 53.419000 76.228700 24.665500 23.470600 37.459100 6.6713800 365 70.496700 85.401700 38.873400 40.290500 54.316900 12.544900 366 0.0000000 100.00000 19.144300 18.184500 60.424300 8.8895700 367 0.0000000 100.00000 34.806900 18.948300 60.860700 13.144800 368 19.052100 100.00000 67.576500 24.682900 63.995800 35.097800 369 56.109600 100.00000 100.00000 47.014100 75.665200 82.488000 370 31.911500 25.182100 78.878200 12.813300 9.1990500 41.726400 371 41.586100 51.339900 81.505300 19.508000 20.307300 46.288100 372 0.0000000 26.687100 54.389100 3.9233700 4.7353600 17.252600 373 0.0000000 42.060000 58.655400 5.8549500 9.6191800 21.031500 374 0.0000000 50.200000 60.020900 7.1340900 13.375700 22.569100 375 0.0000000 77.075700 57.887900 12.709900 33.108600 23.068600 376 0.0000000 88.822200 60.180800 16.987800 46.625600 26.448900 377 0.0000000 88.942300 72.134300 19.143800 47.984700 38.225800 378 0.0000000 100.00000 81.519800 25.880000 64.821300 51.765100 379 57.209700 100.00000 82.787300 42.543700 73.053700 53.541500 380 31.665900 0.0000000 72.948300 10.637800 5.7224100 34.131300 381 29.898800 0.0000000 100.00000 17.615500 9.7473900 75.704000 382 47.901300 32.546600 100.00000 25.762600 17.530400 76.201200 383 70.165400 34.267500 100.00000 41.686300 25.789000 76.256100 384 79.644000 47.341900 100.00000 52.933900 35.517600 76.808500 385 100.00000 56.396200 100.00000 82.938000 54.424400 77.353100 386 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 387 11.492900 0.0000000 7.0182300 0.9709760 0.4865620 0.5886450 388 100.00000 0.0000000 0.0000000 65.021600 32.024900 3.3e-0600 389 100.00000 0.0000000 20.608700 65.448800 32.268900 2.3797100 390 100.00000 100.00000 20.650000 83.256800 92.478200 9.1717700 391 61.699600 71.600700 0.0000000 27.209400 35.554400 2.9217100 392 87.522300 88.329700 0.0000000 59.170500 66.565400 4.9355400 393 91.445700 100.00000 0.0000000 69.478100 85.658000 6.7840500 394 0.0000000 13.888900 0.0000000 0.3045660 1.0298100 0.1160350 395 0.0000000 100.00000 0.0000000 17.806600 60.208400 6.7840500 396 0.0000000 100.00000 47.865700 20.074300 61.504100 19.418500 397 0.0000000 100.00000 60.091400 21.641700 62.399700 28.151400 398 0.0000000 100.00000 71.942500 23.727300 63.591300 39.771400 399 43.190100 27.466300 19.217800 9.9556600 7.6393700 2.4754400 400 74.391000 34.885200 26.376500 32.930700 20.613600 4.2637700 401 88.559500 44.127400 48.830500 52.470000 33.193300 14.160300 402 100.00000 51.990600 55.486500 71.787400 45.965600 19.084600 403 100.00000 74.071300 84.162100 82.105300 65.209300 51.912900 404 67.589900 77.891300 100.00000 47.360200 51.673800 79.301400 405 69.362100 89.615700 100.00000 52.938100 65.968300 80.824300 406 78.373300 88.594100 100.00000 61.654300 69.145600 80.677200 407 87.655700 94.255400 100.00000 75.272200 82.313300 81.529200 408 44.224700 0.0000000 22.749000 9.6054700 4.7708800 2.8217600 409 77.101100 0.0000000 21.194100 34.064100 16.812800 2.4950100 410 100.00000 0.0000000 31.066500 65.929300 32.543500 5.0571800 411 100.00000 78.978400 71.687600 80.665100 68.427100 36.425000 412 100.00000 88.373300 76.222100 84.820400 79.783900 42.982600 413 56.506900 78.786600 0.0000000 25.594100 40.670200 3.7013500 414 58.809500 89.068400 0.0000000 30.671900 53.329700 5.0411200 415 52.089700 100.00000 0.0000000 30.956800 66.685200 6.7840500 416 62.697600 100.00000 0.0000000 38.109900 70.208300 6.7840500 417 63.469000 100.00000 75.476400 45.376500 74.312700 43.909700 418 18.001000 35.661900 22.819400 3.7193500 6.4158700 3.4363400 419 35.211000 39.921100 20.252500 8.0041700 9.7379100 3.0705200 420 75.341400 48.972200 61.104600 38.865100 28.495000 23.424800 421 100.00000 59.660400 65.578200 74.688700 51.432000 28.213300 422 100.00000 79.938700 81.226800 83.096100 70.658000 48.413900 423 27.777800 0.0000000 0.0000000 3.4952400 1.7215000 2e-070000 424 31.302300 30.685400 0.0000000 5.5698600 6.0961400 0.4421970 425 31.688600 37.812000 0.0000000 6.2958700 8.2360000 0.6772570 426 33.358900 72.848700 0.0000000 13.010500 29.521300 3.0483500 427 100.00000 75.034800 0.0000000 73.628300 61.126100 3.2790100 428 100.00000 83.480900 0.0000000 76.252900 70.000400 4.2789300 429 100.00000 100.00000 0.0000000 82.828200 92.233300 6.7840500 430 84.402600 94.095700 14.830000 57.640300 72.386400 7.2214600 431 100.00000 93.069900 37.141700 81.130100 82.820800 12.917600 432 16.666700 0.0000000 0.0000000 1.4520400 0.7151670 1e-070000 433 12.037000 12.037000 12.037000 1.3614400 1.4120100 1.1647700 434 11.111100 0.0000000 0.0000000 0.8304430 0.4090160 0.0000000 435 13.888900 0.0000000 0.0000000 1.1121400 0.5477570 1e-070000 436 22.981000 7.4586800 0.0000000 2.6143600 1.7123600 0.0560153 437 25.000000 0.0000000 0.0000000 2.8710800 1.4140800 1e-070000 438 25.465000 5.1810700 8.4656200 3.1998300 1.8811900 0.7491520 439 51.011800 37.471300 0.0000000 14.279700 12.071100 0.6644410 440 62.512300 49.660600 0.0000000 23.389300 20.848700 1.2303600 441 62.366000 49.396300 24.325900 23.809400 20.988200 4.3958000 442 100.00000 69.579900 36.283000 73.416200 56.912900 9.6560800 443 100.00000 81.771500 41.803900 77.365000 69.036700 13.429200 444 100.00000 100.00000 51.214700 85.471700 93.743700 21.512300 445 6.4814800 6.4814800 6.4814800 0.6916750 0.7173640 0.5917580 446 0.0000000 0.0000000 2.7777800 0.0418646 0.0239202 0.2332480 447 4.6296300 4.6296300 4.6296300 0.4936330 0.5119670 0.4223240 448 8.3333300 0.0000000 0.0000000 0.6000130 0.2955220 0.0000000 449 9.2592600 9.2592600 9.2592600 0.9956850 1.0326700 0.8518510 450 34.230400 14.924800 28.525900 6.3856200 4.1801200 4.4101500 451 43.829400 49.735800 33.134800 13.194100 15.940700 6.9874200 452 68.215900 60.192600 38.840000 31.363000 30.137000 9.9212500 453 71.022500 66.724900 46.947700 36.082000 36.598800 14.558000 454 77.882500 86.678700 67.754700 51.933500 61.656200 33.200000 455 75.348400 100.00000 72.961700 55.688600 79.349500 40.930900 456 74.468100 100.00000 93.429200 60.057900 81.917700 70.338600 457 86.913900 100.00000 100.00000 76.799600 90.335400 82.488000 458 33.551800 45.808600 51.770500 10.471400 13.152700 16.122300 459 35.637700 70.022900 69.602600 18.458200 30.499200 33.190500 460 39.018500 71.474500 100.00000 28.160700 36.998600 78.613100 461 82.225700 70.609500 100.00000 60.477600 52.267600 78.527600 462 19.269300 0.0000000 27.866100 2.5621800 1.3198700 4.0935600 463 30.804200 0.0000000 33.807800 5.3462900 2.7179900 5.9925800 464 39.901100 0.0000000 60.229900 11.133100 5.7873800 21.484800 465 52.228900 0.0000000 72.755700 19.317100 9.9940800 33.910200 466 73.125900 0.0000000 90.909300 40.128800 20.603200 59.263900 467 87.021300 0.0000000 90.060900 55.933000 28.367400 57.864100 468 84.244800 0.0000000 100.00000 55.550800 28.431600 75.704000 469 48.958900 0.0000000 58.345400 14.995100 7.6675100 19.929600 470 86.275800 37.209800 61.289000 50.303200 30.057000 23.046500 471 0.0000000 17.238200 24.314900 0.9892830 1.7424100 3.3372700 472 0.0000000 13.646000 55.824600 3.5225500 2.8476000 18.083600 473 0.0000000 16.761700 82.016600 8.5984300 6.0398800 45.824200 474 0.0000000 27.334400 100.00000 14.516100 10.902500 76.057600 475 0.0000000 36.668900 100.00000 15.254500 13.399200 76.339000 476 0.0000000 43.873600 100.00000 16.036300 16.042600 76.636800 477 36.378600 64.324800 100.00000 25.486000 30.702700 77.956500 478 0.0000000 20.531600 40.721300 2.1447400 2.7880000 9.0629600 479 39.677200 17.494900 100.00000 21.205800 12.754000 75.867300 480 64.757100 18.021400 100.00000 35.976400 20.088100 75.875100 481 90.520700 16.763900 100.00000 64.337200 33.917900 75.856800 482 0.0000000 11.125100 15.095400 0.4894550 0.9196720 1.5447400 483 39.142500 63.768700 13.275000 12.993300 23.143400 3.4224600 484 44.885000 80.809100 26.521200 20.421500 40.010400 7.6721000 485 49.683200 86.220700 42.416100 25.724700 48.005500 14.310500 486 0.0000000 64.854200 42.024300 7.7306300 21.360600 11.772300 487 0.0000000 65.820900 52.169500 9.0064600 22.704300 17.745100 488 0.0000000 77.415200 68.501300 14.552000 34.444800 32.807500 489 30.018800 78.563000 76.524900 20.601100 38.556300 42.091700 490 51.112500 92.271900 100.00000 40.659400 62.924700 81.220500 491 0.0000000 19.205400 19.100500 0.8743110 1.8982900 2.2874100 492 4.2696500 21.425200 16.126500 1.1939200 2.3383900 1.8354900 493 100.00000 26.502200 22.894100 66.409600 35.279100 3.1868800 494 100.00000 93.027900 71.272000 85.592800 85.322500 37.870800 495 14.788600 6.1455800 0.0000000 1.3370500 1.0086700 0.0461779 496 20.273300 0.0000000 10.117400 2.1431300 1.0677700 0.8640720 497 32.213300 0.0000000 19.605500 5.0617700 2.5240400 2.1890800 498 31.634800 15.359000 33.713800 5.9242100 4.0181900 6.0931100 499 30.912100 22.454600 37.113700 6.2536300 5.0570800 7.5142300 500 32.771100 28.809700 36.460000 7.1154300 6.5684700 7.3931200 501 58.173700 48.728900 44.696600 22.040200 19.946300 12.023800 502 65.821900 55.047600 48.003800 29.192200 26.376400 14.274900 503 65.611900 61.626200 48.963400 30.366200 30.559100 15.329600 504 72.621100 72.398500 54.089600 39.870400 42.637200 19.702000 505 76.482300 77.471900 65.632300 47.002200 50.435700 29.932700 506 88.662500 78.401100 65.941700 62.145800 58.709300 30.341300 507 100.00000 84.306200 91.333000 87.298600 77.103300 64.357800 508 75.257500 0.0000000 77.630200 38.803600 19.675200 39.810500 509 77.534800 58.265200 86.677500 48.184500 37.973400 54.281900 510 79.891300 59.754600 100.00000 55.277100 42.623100 77.593400 511 61.062000 45.572000 83.314500 30.254200 23.265700 48.524500 512 68.446200 47.941900 82.865600 36.480500 27.246100 48.004700 513 81.765100 79.894400 84.856000 57.915900 58.288800 53.588800 514 45.448200 39.093300 21.721800 12.040600 11.478000 3.3301500 515 51.777000 53.096000 23.853800 17.283800 19.427100 4.5035900 516 93.960600 68.538900 64.424300 66.806000 53.171600 27.855800 517 100.00000 87.546200 84.389400 86.494000 79.881200 53.894000 518 100.00000 94.405600 84.690200 89.260800 89.013300 55.360300 519 100.00000 100.00000 92.662300 93.997100 98.614900 69.011400 520 44.477700 38.549300 32.414300 12.054200 11.364200 6.2091300 521 60.690000 45.630400 34.215500 22.561400 18.913400 7.1591900 522 69.649700 51.721500 41.111300 31.338500 25.798100 10.384200 523 20.924400 23.472100 0.0000000 2.7990400 3.4054100 0.2673110 524 47.631600 33.875600 5.8437900 12.236100 10.122100 1.0293100 525 51.513100 42.804400 7.4158100 15.249900 14.220700 1.5053000 526 50.883700 45.644000 0.0000000 15.135600 15.174200 1.0181100 527 100.00000 64.933600 0.0000000 71.069400 52.473800 2.3041000 528 100.00000 91.927200 0.0000000 79.363300 80.517600 5.4639700 529 100.00000 100.00000 37.048000 84.127800 92.975900 14.024700 530 22.447800 31.385800 0.0000000 3.5816100 5.2702900 0.4624300 531 21.208800 31.513300 32.105500 4.3382200 5.7480000 5.8651800 532 46.098000 45.822200 31.061600 13.578200 14.546000 6.0826200 533 7.1285900 14.431400 0.0000000 0.8348490 1.3396900 0.1224580 534 0.0000000 18.302400 9.3629400 0.6024940 1.6379500 0.9670050 535 8.6820700 26.218500 0.0000000 1.4851300 3.2115300 0.3270890 536 0.0000000 36.349800 12.185600 1.8314900 5.6451100 1.7093000 537 64.352000 57.345300 20.926700 26.550600 26.114100 4.1573300 538 64.474400 64.250800 21.355700 28.059700 30.887800 4.7749300 539 57.676400 70.324400 39.091100 25.453500 33.850100 10.905500 540 66.330700 71.796400 43.534200 32.804400 38.603800 13.175300 541 74.232900 85.363600 48.970800 44.872300 56.609600 17.827700 542 84.705100 85.303600 59.381900 58.132400 63.185400 25.293400 543 85.570900 91.941300 62.141100 62.151800 72.384300 28.607300 544 0.0000000 76.871300 46.785800 11.292700 32.129200 15.485600 545 21.247400 81.809500 55.507200 16.010100 38.972100 21.800800 546 22.314100 34.973000 27.850500 4.5875800 6.6820000 4.6648800 547 32.484900 33.324300 52.198100 8.8778900 8.5447800 15.905200 548 41.571900 51.890400 53.562900 14.448700 17.659200 17.685900 549 48.772000 52.083800 61.508100 18.974100 20.065200 23.955100 550 64.773700 56.249400 68.613100 31.529000 28.373200 31.020100 551 38.016500 14.582700 18.197700 7.2403800 4.5361800 2.0641700 552 67.503100 12.356300 27.551200 25.233600 13.236100 4.1056400 553 100.00000 58.021500 33.668900 70.715100 48.278800 7.7054500 554 100.00000 67.611300 47.566900 73.925700 55.848900 14.998300 555 23.728200 15.315200 11.875600 3.1509700 2.5786100 1.1839400 556 22.087300 13.455800 16.348500 2.8882300 2.2881000 1.7528000 557 28.014000 67.274400 47.152100 12.332300 25.277200 14.725700 558 52.091500 72.362100 75.210200 27.627200 36.863600 39.800800 559 66.252100 73.133200 88.202200 41.108600 44.360100 57.952900 560 67.203100 83.620600 100.00000 48.860400 57.717000 80.001000 561 37.978300 45.739900 35.766700 10.444400 12.995100 7.7511400 562 40.867000 51.429300 43.250900 12.968500 16.633100 11.421300 563 51.865700 58.597800 42.306200 19.481900 23.411700 11.417900 564 52.004700 64.384900 49.491700 21.472000 27.885800 15.881500 565 43.636500 50.252800 65.449000 16.856000 18.256200 27.470100 566 49.002700 49.953200 69.981100 20.247200 19.862700 32.075500 567 83.217800 54.907800 70.959700 50.478200 37.062200 33.442900 568 26.895800 22.240300 0.0000000 3.9260100 3.7760800 0.2429910 569 62.550000 30.111000 0.0000000 21.307300 13.725000 0.4260760 570 62.451800 40.431200 0.0000000 22.163300 16.838000 0.7810280 571 70.304600 40.419700 7.7375000 28.943500 20.182900 1.4287000 572 72.496100 93.420200 76.629900 50.734600 68.706000 44.241800 573 24.797800 30.952900 68.947400 9.3460000 8.4351600 30.180000 574 23.771000 40.276200 72.695000 10.727800 11.636000 34.615300 575 23.971600 48.185800 71.951500 11.599700 14.894100 34.146800 576 28.890600 48.173700 93.168400 18.108500 18.521000 64.249300 577 52.541000 54.239100 100.00000 30.954200 27.736500 77.210100 578 21.383600 24.762600 35.267000 4.1222100 4.3548200 6.8291700 579 21.194200 33.449300 42.275100 5.2450700 6.7037600 10.123700 580 25.306200 40.513100 44.732600 6.9445400 9.5220500 11.649100 581 28.982200 49.406100 56.712800 10.329800 14.572200 19.861800 582 61.039200 56.180100 60.277300 27.200500 26.094500 23.158900 583 47.642600 23.156500 13.449000 11.645700 7.7320300 1.4997900 584 63.584900 27.656700 11.888000 22.136100 13.659400 1.4134400 585 88.860600 37.348700 0.0000000 49.762900 29.513000 0.6598980 586 91.428500 61.997900 32.624300 58.060800 44.312800 7.6379900 587 93.257300 76.578000 55.647900 66.582800 59.194100 21.287300 588 24.380200 45.725800 0.0000000 5.4255400 10.422600 1.0221800 589 27.861800 63.275100 0.0000000 9.1983700 20.948500 2.1653300 590 71.180000 79.087800 9.0633000 37.547100 46.836600 4.5000200 591 87.354500 90.222500 15.259100 59.929500 69.034400 6.6902600 592 93.229600 91.720400 46.175800 70.639800 76.148200 17.090300 593 19.213500 18.861600 46.901000 4.4688900 3.7684400 12.254600 594 16.526200 33.461600 74.900800 9.3524400 9.1094100 36.955300 595 36.000700 34.440600 100.00000 20.909300 15.598800 76.261700 596 90.188100 38.798300 100.00000 65.342900 38.676900 76.419100 597 89.873900 53.558000 100.00000 66.864400 45.094400 77.166700 598 91.819300 76.218200 100.00000 74.746700 63.730100 79.112500 599 40.774600 58.852800 44.288900 14.315600 21.022000 12.450800 600 42.601500 82.123400 49.692600 21.628400 41.980500 17.855800 601 49.557100 88.114700 59.719600 28.390800 51.473000 25.960600 602 58.199500 27.488600 27.585900 18.676600 11.965800 4.3736100 603 60.196800 26.732000 58.961000 22.986000 14.181900 20.768100 604 60.749700 62.947900 78.487100 31.789400 32.451800 43.051900 605 79.660300 72.648900 81.421800 52.462000 49.431200 47.873300 606 87.969000 78.409000 86.237000 65.718100 60.831500 55.485500 607 18.765700 16.609200 80.692200 10.015900 6.6962400 43.995600 608 17.746000 48.825800 82.215500 12.956100 16.009000 47.133900 609 25.793200 100.00000 91.706600 31.724400 67.920900 67.383900 610 63.761200 100.00000 90.795700 49.547400 76.677600 65.858800 611 79.980500 100.00000 89.507600 64.863600 84.191400 63.747500 612 12.429600 30.619500 13.447200 2.3352000 4.5067700 1.6789700 613 11.158800 53.699200 19.889700 5.0999300 13.702100 3.7133200 614 24.907000 57.734300 75.025700 13.990100 20.618500 38.322200 615 24.699500 58.546800 90.722200 18.115600 23.408800 60.753800 616 72.559200 64.243200 100.00000 48.414700 41.943900 77.949600 617 52.366900 0.0000000 20.460300 13.733200 6.7972500 2.3507100 618 63.011200 0.0000000 20.944100 20.986300 10.370900 2.4459400 619 71.284500 13.089200 21.393200 28.436800 14.852600 2.6430900 620 74.290100 24.910400 45.627600 33.481200 18.907400 11.649700 621 76.148900 29.515600 61.772700 37.765500 22.030500 23.224600 622 75.780800 28.816400 68.887600 38.558100 22.376800 30.058300 623 38.663300 0.0000000 29.900000 7.6459300 3.8321900 4.6897500 624 46.903200 10.863300 49.497100 13.035400 7.2522000 13.711600 625 46.579200 31.188700 50.734700 13.994500 10.559300 14.870700 626 52.845600 47.796600 57.335700 19.988600 18.672500 20.257500 627 57.146400 65.482600 69.085700 27.836600 31.961100 32.226800 628 64.016000 67.692500 71.172300 33.795400 36.418000 34.676100 629 43.880900 32.035600 37.903500 11.571900 9.4593000 8.0782100 630 46.795900 41.917100 46.200200 14.626400 13.771500 12.515700 631 66.718900 58.162000 57.763900 31.724800 29.342800 21.238500 632 72.648500 58.811900 61.802400 37.895900 32.786100 24.660800 633 82.002800 64.653400 67.449400 50.254100 42.439600 30.464800 634 82.878800 74.158500 68.863300 53.951700 51.142700 32.826800 635 84.009200 88.928500 74.117900 61.218100 68.724800 40.516600 636 83.379500 93.027900 88.435400 65.586400 75.794400 60.877200 637 15.572600 20.401500 17.993700 2.2035400 2.7019300 2.1146000 638 16.192000 26.514100 19.909600 2.6690400 3.8786300 2.5794000 639 21.055700 31.956600 20.218700 3.7913700 5.5345400 2.7832200 640 27.327700 41.474100 23.380000 6.0857300 9.2958800 3.7874500 641 82.951200 50.705500 32.438000 44.735100 31.892400 6.8017600 642 86.710400 50.675200 82.200000 56.761700 38.374600 47.216400 643 100.00000 54.549700 90.573800 79.564600 51.589900 60.233900 644 26.526500 23.085700 67.589900 8.9693400 6.7863700 28.586900 645 24.476900 29.522000 87.588100 13.514500 10.527500 54.321100 646 22.475600 72.124800 93.338100 21.558700 34.068200 66.369800 647 0.0000000 66.450700 86.924300 15.885600 27.043700 55.317000 648 0.0000000 73.295800 100.00000 21.710600 35.228800 78.798600 649 33.168000 76.343900 100.00000 27.522200 40.576800 79.126500 650 39.775500 16.018200 26.735400 8.2821100 5.2145200 3.9282400 651 50.866700 20.991600 39.879200 14.550200 8.9545600 8.6824100 652 90.156500 20.212100 54.629100 53.442100 28.128000 17.294800 653 100.00000 19.851100 58.189500 69.102000 35.833000 20.005600 654 100.00000 49.827600 67.412200 73.327700 45.914100 29.386900 655 100.00000 62.666800 76.321800 77.425200 54.716700 40.280300 656 52.541400 32.498700 40.774300 16.307900 11.916900 9.3718000 657 59.801600 38.104100 49.043100 22.345700 16.414300 14.034000 658 58.880200 44.669000 51.991800 22.773300 18.790900 16.215200 659 58.671900 83.733100 56.172400 31.934000 48.677200 22.544900 660 58.950900 92.957900 62.820400 36.558300 60.969000 29.371800 661 66.687700 100.00000 66.660200 46.274400 74.617200 34.177100 662 17.564700 92.766100 30.453900 17.126600 50.907100 10.454200 663 19.082200 84.939900 37.623900 14.874000 41.324100 11.948700 664 20.393700 100.00000 42.039500 21.516700 62.169900 16.266500 665 22.897600 58.563500 22.754500 7.6871300 17.487300 4.6247400 666 50.181400 60.190100 20.352800 17.538700 23.246500 4.2526700 667 75.949200 60.793200 23.103300 38.071000 33.715900 4.8684200 668 56.264300 57.862900 18.493300 20.674500 23.490400 3.7415200 669 59.853300 75.679400 26.057800 27.619000 39.047800 6.9573600 670 64.524000 76.551500 36.144100 32.027900 41.997100 10.322200 671 63.970800 78.811500 54.910200 34.131700 45.142000 20.997500 672 44.862200 52.032000 49.611000 15.442000 18.176100 15.067200 673 44.926100 57.298900 53.601000 16.848600 21.507500 18.064500 674 57.761400 58.743600 53.401100 24.390600 26.002800 18.027100 675 66.421200 74.962800 67.710700 37.016500 43.437500 31.721400 676 67.850000 24.569000 20.617600 25.747300 14.915100 2.6716800 677 74.848800 27.106300 17.464100 32.475100 18.660000 2.1654400 678 77.170000 51.757300 38.395400 38.640800 29.393400 9.1577800 679 79.927200 62.008800 45.421900 44.204200 37.574800 13.302200 680 85.545600 74.401100 49.433700 54.485200 51.373900 16.798600 681 100.00000 23.313200 0.0000000 65.714900 34.368900 0.2641180 682 100.00000 53.439000 16.052800 69.128000 45.103900 3.0524200 683 100.00000 65.274800 20.879200 71.582900 52.983000 4.7662700 684 100.00000 83.633000 22.387200 76.797000 70.456200 7.0425400 685 47.646500 36.338800 24.592800 12.958200 11.152900 3.8671600 686 66.543700 35.239600 32.093100 25.931300 17.281300 5.9793700 687 71.470400 42.336300 45.570800 32.174900 22.549500 12.183400 688 72.272700 48.690700 77.950400 38.959600 28.679300 41.396300 689 80.671200 56.587200 82.035600 50.198700 37.974500 47.360200 690 93.071100 71.571300 85.366300 70.780200 57.706600 53.434000 691 92.286400 85.202300 100.00000 78.306500 73.796600 80.208900 692 93.835400 100.00000 100.00000 86.591100 95.157900 82.488000 693 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 694 82.334500 43.417500 9.9179900 42.154300 27.686700 1.7557600 695 87.747500 50.120600 0.0000000 49.815000 34.061200 1.2563600 696 88.102100 70.764600 0.0000000 54.447400 48.341600 2.8388500 697 87.493600 76.497000 18.582700 55.565300 53.474900 5.4454900 698 100.00000 91.676400 20.582300 79.689700 80.423700 7.8003700 699 75.146300 68.503000 29.864000 39.266800 39.291600 7.3013500 700 81.165500 78.360100 34.159300 48.896900 51.856600 9.7727200 701 83.971300 100.00000 68.421500 64.665000 83.700400 35.965700 702 92.920000 100.00000 76.607700 78.547900 90.670200 45.304100 703 37.439800 44.190600 41.336400 10.485500 12.479600 10.089600 704 41.880700 43.904400 51.161600 13.167200 13.777100 15.627400 705 41.240200 44.328000 80.308700 18.093700 16.760200 44.279600 706 0.0000000 16.996500 44.861800 2.3723100 2.5070600 11.090000 707 0.0000000 24.401600 62.180500 4.9120400 4.9203200 23.462800 708 0.0000000 30.662500 86.403200 10.506900 9.2600200 52.523100 709 18.800500 71.054900 100.00000 22.870200 34.077100 78.571400 710 20.889000 79.786300 100.00000 25.704700 42.692800 79.523600 711 21.393200 86.875800 100.00000 28.186800 50.834100 80.436100 712 21.213800 46.360900 50.532100 7.4766400 11.876400 15.337600 713 25.428200 70.319100 62.580000 14.523300 28.681100 26.328100 714 28.692200 84.758900 75.176700 21.986500 45.059200 41.207900 715 6.3941100 32.956100 33.960800 2.8843700 5.3728100 6.5584100 716 12.801100 43.279100 72.738000 9.4547900 12.001100 34.795300 717 49.661400 46.041700 89.827500 24.834500 20.914800 58.521500 718 78.341900 79.968300 92.045200 56.040700 57.594300 65.014700 719 58.806800 71.867600 69.777400 30.671400 37.895600 33.558100 720 61.675800 76.642700 68.175300 33.785300 43.252300 32.382500 721 85.756300 83.915800 71.161100 61.033700 63.386200 36.451200 722 84.872400 94.187800 71.459900 63.841900 75.990300 38.261200 723 30.271900 32.275100 27.044000 6.1048500 6.7692800 4.3567200 724 40.229200 56.082800 31.542800 12.614100 18.629500 6.8401400 725 39.369500 74.327600 85.984500 24.713100 37.187000 54.649200 726 47.854700 92.202900 93.084900 36.597700 60.663500 68.462300 727 27.527400 51.870300 33.560700 8.0615400 14.356700 7.2625900 728 32.618100 52.284500 39.380600 9.8978300 15.483700 9.6222300 729 40.457800 60.931900 38.877200 14.129200 22.077600 9.9940200 730 65.972900 61.941600 59.161700 32.043600 31.677300 22.651700 731 88.199900 61.158700 61.852900 56.476900 43.278300 24.882300 732 61.764000 20.300500 23.101900 20.655100 11.790700 3.1077400 733 64.184800 20.864000 72.884100 28.161000 16.003000 34.275200 734 86.382400 26.904200 93.233100 56.952100 31.547700 63.556200 735 26.219000 13.787100 7.2672900 3.5458900 2.6258800 0.7240970 736 44.361400 9.8789100 11.985500 9.5498600 5.2896100 1.1382000 737 66.254000 0.0000000 11.553300 23.364400 11.521900 1.0141300 738 89.536200 0.0000000 16.092600 49.253000 24.281100 1.6028300 739 88.582500 0.0000000 28.466700 48.415100 23.906100 4.2641500 740 100.00000 0.0000000 40.537300 66.594900 32.923800 8.7652500 741 100.00000 20.876400 47.753400 67.849600 35.248300 12.786100 742 100.00000 100.00000 63.988500 87.283400 94.778800 31.605800 743 52.283400 53.428900 40.149600 18.621300 20.322100 10.040400 744 52.405400 81.473800 75.895200 30.654600 46.150600 41.663400 745 59.484800 94.260200 77.325100 40.284300 64.573200 45.248300 746 58.903900 80.486900 48.117500 30.048300 44.582400 16.688500 747 58.151600 100.00000 56.900700 38.163700 70.500700 25.574200 748 76.204900 100.00000 61.708300 54.546100 78.625700 29.542500 749 19.090900 73.577700 0.0000000 10.000100 28.612400 3.1240200 750 20.792200 86.792400 0.0000000 14.465200 42.917500 4.7206400 751 34.511900 90.588900 0.0000000 19.183200 49.355100 5.2632100 752 38.520400 100.00000 65.822700 29.326200 66.258100 33.352200 753 46.929300 100.00000 75.396700 34.834000 69.118900 43.812700 754 47.328100 100.00000 91.578300 39.224100 71.611600 67.167200 755 58.050100 60.817400 49.736800 24.558600 27.228700 15.747600 756 58.270500 65.725800 51.008000 25.912600 30.957200 16.965000 757 65.238000 71.715600 51.809800 32.747100 38.583500 18.055400 758 67.244600 73.139900 71.674300 37.976800 42.508900 35.764800 759 78.771500 86.907400 79.538400 55.481800 63.837800 47.030500 760 78.139000 94.576600 100.00000 63.764900 77.032900 81.580300 761 13.970900 64.464000 38.446800 8.4694000 21.450100 10.092200 762 18.842600 78.294100 43.924700 13.200100 34.277700 14.080500 763 16.268800 92.447200 61.355200 19.979000 52.188800 27.993100 764 19.353400 100.00000 83.962200 28.342000 66.083000 55.229200 765 69.935400 48.602500 45.559300 31.542800 24.581100 12.486000 766 92.211000 48.498700 44.594700 57.781200 37.453600 11.956800 767 93.198900 65.693900 53.767500 63.418200 49.435300 18.840600 768 100.00000 66.510700 61.022400 75.407700 55.965700 24.603300 769 35.401000 100.00000 20.850500 23.899400 63.243600 9.2111900 770 58.640900 100.00000 22.448900 35.624500 69.023200 9.5411400 771 91.561200 100.00000 19.980800 70.050100 85.971700 9.0429300 772 46.621200 79.066800 0.0000000 20.030700 38.179700 3.7342600 773 68.233800 81.743500 0.0000000 35.550100 48.282700 4.0586200 774 80.619900 90.484300 0.0000000 51.347800 65.079700 5.2477300 775 53.033100 60.822700 0.0000000 18.876200 24.238200 1.9705500 776 77.308400 70.642600 0.0000000 41.261300 41.756200 2.8268700 777 91.010600 81.770600 74.636800 68.189900 64.895400 40.174800 778 91.077100 88.660600 81.256200 72.228100 73.985600 49.599200 779 34.287400 11.151300 0.0000000 5.5261700 3.3816500 0.0870282 780 40.732900 0.0000000 10.924500 7.7768400 3.8437000 0.9470250 781 51.610900 0.0000000 33.789900 13.948600 6.9547900 5.9862300 782 65.032500 0.0000000 41.625200 23.830600 11.868500 9.2804500 783 75.653400 0.0000000 41.839000 33.756300 16.758700 9.3840700 784 91.306500 12.133000 45.005800 53.701400 27.339200 11.108900 785 30.311300 28.164300 15.382500 5.3892800 5.5144700 1.8730800 786 42.439500 38.197400 11.599900 10.313100 10.340400 1.7115800 787 50.928800 67.640200 0.0000000 19.163500 28.720700 2.5430700 788 61.941000 83.572800 35.367600 32.165800 48.469400 10.864600 789 73.914300 100.00000 48.072000 50.377500 76.431000 19.541300 790 16.879600 38.655900 15.213300 3.6081200 7.1785900 2.1843100 791 17.656600 50.816900 100.00000 18.579000 20.052100 77.000500 792 20.959800 65.061400 100.00000 21.767800 29.345800 78.019000 793 40.017000 84.934800 100.00000 32.641100 51.035200 80.173300 794 41.760600 100.00000 100.00000 39.421600 71.925700 82.488000 795 17.309900 51.109100 0.0000000 4.9877700 12.416600 1.3135900 796 17.028800 62.459100 0.0000000 7.0105200 19.368800 2.0991100 797 38.266200 100.00000 0.0000000 24.463700 63.487200 6.7840500 798 82.593100 100.00000 0.0000000 57.729700 79.871600 6.7840500 799 93.885400 100.00000 85.584400 82.203900 92.645300 57.626700 800 8.6911700 0.0000000 31.113700 1.5377300 0.8291490 5.0722400 801 10.432200 7.7056400 35.342800 2.0994100 1.5655100 6.6219600 802 14.844600 25.889000 40.892600 3.6640700 4.3530100 9.2503200 803 51.490800 25.165800 81.641900 21.705600 13.628800 45.453000 804 71.621400 66.796800 81.863900 42.657200 40.357900 47.925300 805 84.777900 70.576300 82.221900 58.288000 50.743700 48.779400 806 60.789800 0.0000000 31.119500 19.773100 9.8105600 5.0740800 807 62.135200 0.0000000 68.093300 25.048000 12.745000 28.841900 808 63.440500 0.0000000 80.151500 28.622100 14.707300 43.113500 809 22.927000 0.0000000 88.023500 12.255600 6.8087800 54.593200 810 20.289300 33.534100 100.00000 16.965000 13.432100 76.232200 811 10.593000 30.480400 60.115300 5.7673800 6.4523600 21.823900 812 44.749900 35.309600 64.263400 15.381800 12.382100 25.665500 813 24.428000 14.589500 24.558600 3.6595100 2.7914500 3.3599500 814 41.836100 47.555500 23.991100 11.544200 14.189800 4.2180700 815 45.431500 54.104500 23.328000 14.117800 18.349300 4.4480800 816 50.115200 73.341700 59.438900 23.911100 35.572100 23.921600 817 56.739000 78.264600 70.144000 31.152300 43.384900 34.644900 818 65.140600 89.131900 83.123100 43.987600 60.625900 52.285400 819 71.727400 100.00000 82.762300 54.317700 78.852300 53.506000 820 20.477900 53.264700 44.892200 7.7781900 14.936800 12.394500 821 24.925600 60.242000 54.625000 10.977700 20.253600 19.011700 822 34.370300 67.803200 61.324200 16.062500 27.623700 24.980600 823 38.121500 85.528300 69.009600 23.891100 46.677100 34.344000 824 12.606500 20.006400 12.405500 1.7068800 2.3945300 1.3142300 825 27.457800 19.080100 6.5259800 4.0092600 3.4053000 0.7344330 826 29.317700 16.771200 0.0000000 4.2787400 3.2670000 0.1529380 827 55.391200 17.683200 0.0000000 15.593400 8.9395900 0.1661040 828 56.206600 22.598400 15.721100 16.616500 10.100900 1.7977600 829 66.754300 25.265200 57.261200 27.832400 16.293700 19.375700 830 45.799000 24.196100 34.161000 11.671600 7.9752300 6.4040300 831 50.819000 26.279400 32.558100 14.286100 9.6057200 5.8814300 832 56.481900 80.496600 80.804300 34.009900 46.984200 47.903200 833 57.633200 86.700200 100.00000 42.575600 57.737700 80.411900 834 16.537300 33.298600 36.941500 4.0934800 6.0662800 7.7174400 835 11.861300 56.214200 64.453800 9.7304700 17.560400 26.894100 836 0.0000000 61.346300 74.390500 11.707600 21.521700 37.829900 837 0.0000000 89.140600 83.052100 21.719000 49.665900 52.185600 838 0.0000000 100.00000 91.528900 28.629600 66.392400 67.084300 839 86.027000 100.00000 93.879800 73.597100 88.597200 71.126700 840 93.858300 100.00000 93.298000 84.403900 93.905500 70.109900 841 73.150600 32.559100 53.566400 33.753300 20.628700 16.826000 842 80.288000 38.010500 76.977200 45.982200 28.391600 39.667700 843 18.543300 17.126500 31.654200 3.0736600 2.7857800 5.4070900 844 23.537100 13.359500 30.326600 3.7287200 2.7385600 4.9319600 845 43.361700 26.462600 56.721100 12.934800 9.1578900 18.984900 846 43.455900 30.128100 80.971300 17.812800 12.633400 44.652200 847 43.739600 59.523500 83.491900 22.368200 25.888300 49.637200 848 12.612000 13.319900 17.948200 1.6035000 1.6469500 2.0069200 849 13.350000 6.8374800 14.734700 1.4403300 1.1183500 1.4592700 850 6.1072700 0.0000000 8.9566200 0.5751310 0.2939320 0.7536130 851 7.9952500 7.3949400 0.0000000 0.7215720 0.7765310 0.0555428 852 0.0000000 6.3188000 7.3889100 0.2357340 0.4847360 0.6667710 853 88.603900 30.614300 20.893800 49.271700 27.640100 2.8760700 854 88.259900 51.939400 25.080200 51.390800 35.693200 4.7256300 855 90.681400 55.044200 56.831400 58.030300 40.663500 20.295400 856 91.477800 55.853800 77.521100 63.070400 43.850400 41.283600 857 86.375600 23.892900 31.277600 46.340600 24.988700 5.4015900 858 93.961300 35.164800 33.641000 57.978900 33.054000 6.5145900 859 100.00000 71.003100 72.545100 78.577900 60.881100 36.532100 860 100.00000 74.064700 92.127400 84.360600 66.492800 64.487800 861 29.334300 0.0000000 44.647800 5.8234300 3.0212900 10.818900 862 33.679700 9.2576600 67.220100 10.308500 6.0039000 28.023100 863 30.398000 13.923700 56.061600 7.7236300 4.9438100 18.266000 864 29.143400 11.095000 85.466400 13.152900 7.8509300 50.751900 865 39.938300 0.0000000 88.690500 17.280000 9.2984100 55.650300 866 0.0000000 8.2740800 28.925400 0.9524240 1.0026600 4.4595100 867 0.0000000 54.420400 34.614800 5.1126300 14.115200 7.8069500 868 30.179900 55.857600 52.469500 11.129700 17.929100 17.181100 869 29.403300 55.555000 59.378700 11.807100 18.183000 22.364800 870 18.485500 40.785200 39.415900 5.2785200 8.7509600 9.0498800 871 15.521400 48.839900 70.071400 9.9654000 14.329200 32.110500 872 30.058000 52.584200 80.986300 15.691400 18.985500 45.648300 873 64.717300 83.289200 86.112600 42.341800 53.842000 55.894100 874 72.229600 82.459800 85.609600 48.631600 56.127200 55.028900 875 77.277700 82.701800 100.00000 58.365300 61.505400 79.883200 876 86.518900 87.736300 100.00000 71.206900 72.930400 80.555800 877 0.0000000 67.502800 19.564300 7.0336700 22.682400 4.7118500 878 0.0000000 78.037900 20.820500 9.9212700 32.325200 6.0354000 879 0.0000000 77.266300 78.544100 16.611800 35.497300 44.513400 880 16.071000 93.882700 100.00000 30.097300 59.617000 81.470400 881 11.374500 69.586400 82.315400 16.279100 29.330200 48.815200 882 37.801900 69.953800 91.655000 24.593000 33.896000 63.272600 883 46.757900 83.671500 92.427000 32.689100 49.605700 66.127700 884 54.095100 71.826900 83.770200 30.720100 38.137000 51.110600 885 55.992100 78.314900 100.00000 38.701900 47.780000 79.350300 886 24.556000 34.677000 61.335300 8.2893500 8.6889300 22.997900 887 36.125200 40.976300 62.581600 12.234000 12.453700 24.338100 888 51.805900 45.737100 69.726700 21.154800 18.606400 31.578600 889 50.914700 49.005700 77.912500 22.824400 20.862300 41.364800 890 63.996800 57.047200 87.748800 35.493800 31.093000 55.855900 891 71.030900 57.146000 87.439500 41.559400 34.125600 55.380200 892 73.057000 73.100400 100.00000 51.080600 49.540500 78.778400 893 0.0000000 8.4008300 41.262100 1.8001600 1.4939600 9.1698400 894 0.0000000 30.249800 45.143400 3.1185600 4.9532000 11.516800 895 0.0000000 38.399100 46.983500 4.0114300 7.4520400 12.817800 896 0.0000000 47.555500 48.239300 5.2363000 11.221100 13.972700 897 0.0000000 57.703400 60.137400 8.4094200 17.638500 23.146300 898 0.0000000 49.781100 84.778000 12.157000 16.070300 50.878000 899 0.0000000 58.538500 85.968300 13.953900 21.247900 53.221500 900 0.0000000 59.591900 100.00000 18.515300 24.425000 77.581300 901 49.502100 63.217800 100.00000 30.966100 32.705500 77.864600 902 17.828000 21.623600 60.880600 6.1758400 5.1085000 22.270900 903 53.304700 19.340000 67.987200 19.527200 11.478500 28.924600 904 56.181300 34.779000 78.945700 24.610700 17.023600 42.080400 905 60.266300 37.313000 100.00000 33.795700 22.710000 76.362500 906 23.064900 6.8497300 35.875500 3.8336700 2.3737600 6.8220800 907 27.849800 21.784800 51.178600 6.7665800 5.3182700 14.938800 908 27.763500 44.980500 59.020100 9.7541800 12.566900 21.462700 909 35.363800 70.629500 76.792600 20.016800 31.831500 41.577300 910 0.0000000 89.723200 21.577800 13.942800 45.846100 7.7092700 911 20.698400 100.00000 24.180400 20.429900 61.545000 9.9299400 912 33.620600 100.00000 51.611100 25.586000 64.252100 21.773500 913 24.089600 63.465200 33.034600 9.4350200 21.264500 7.8994200 914 43.973400 65.393900 33.009000 16.162600 25.811600 8.0530500 915 25.150100 29.720700 15.429600 4.2636600 5.2711200 1.9207700 916 34.999700 43.275400 14.075400 8.1385900 10.890600 2.2243000 917 43.809300 88.530000 21.989200 22.418900 48.718200 7.6233600 918 52.471700 90.183600 19.792100 27.429800 52.994400 7.4271700 919 67.230700 90.841600 31.658700 38.873400 59.411700 10.551300 920 70.214800 92.295700 65.283100 45.859300 64.810600 31.566400 921 0.0000000 17.550000 69.277700 5.8294100 4.5412400 30.242400 922 0.0000000 16.143200 100.00000 13.966500 9.0442400 75.848300 923 17.676300 0.0000000 61.986800 5.7200100 3.1428000 23.004500 924 43.089900 0.0000000 75.583800 15.281900 8.0539800 37.256400 925 44.558200 10.553900 83.240100 17.973000 10.139700 47.484400 926 56.427000 0.0000000 89.983700 26.189400 13.716000 57.738400 927 100.00000 21.328000 90.627800 76.168300 40.061300 59.023200 928 84.062400 0.0000000 54.972600 44.846400 22.333400 17.339000 929 88.671600 0.0000000 65.850200 52.545200 26.256300 26.595100 930 90.764800 24.425200 65.759700 56.206200 30.235000 26.793800 931 93.942400 29.702200 78.524800 63.798700 35.148200 41.377100 932 100.00000 39.613700 88.110900 76.807200 44.272200 55.478400 933 0.0000000 36.335600 25.487000 2.2569700 5.8845600 4.0866400 934 0.0000000 45.599800 36.700000 3.9406100 9.7441400 8.1144200 935 27.876600 70.676700 41.760600 12.624600 27.809400 12.176300 936 26.683000 93.870400 53.700000 21.317800 54.439300 22.187500 937 17.162700 25.623000 10.932700 2.5118100 3.6269000 1.2613200 938 40.722600 39.756300 0.0000000 9.5800600 10.430600 0.7533590 939 42.283300 68.179300 0.0000000 15.052200 27.071100 2.5925800 940 47.799000 89.080100 0.0000000 24.054000 50.082900 5.0428100 941 60.568600 100.00000 42.589200 38.257100 70.418900 16.538200 942 83.952000 100.00000 43.537900 61.240300 81.745500 17.019900 943 91.844200 100.00000 53.718000 73.005100 87.627700 23.219900 944 79.177700 0.0000000 10.843400 36.084500 17.785900 0.9384000 945 92.975600 9.1488100 10.347600 54.250600 27.256500 0.9561150 946 100.00000 0.0000000 11.154800 65.196000 32.124500 0.9715220 947 100.00000 75.104400 16.976300 73.960200 61.371300 5.0258500 948 100.00000 77.548600 30.389600 75.230000 64.100400 8.3995300 949 100.00000 78.191600 51.112700 77.186400 65.762800 18.293000 950 100.00000 93.782800 56.244200 83.398200 84.937500 24.038400 951 58.011700 33.589300 15.903000 18.562200 13.183000 2.1047500 952 75.514600 50.527300 13.597200 35.511500 27.211200 2.5366500 953 77.190500 83.442000 36.736300 46.208100 55.265100 11.387000 954 91.880300 100.00000 39.654200 71.608000 86.825300 15.144200 955 96.334900 56.667100 24.032300 63.987300 44.204800 4.7797900 956 92.306500 57.546200 66.037900 62.268400 44.157700 28.507700 957 93.074500 77.623300 68.911800 68.748700 61.324600 33.259400 958 19.214700 12.989000 0.0000000 2.0970300 1.8356200 0.1058760 959 19.064200 11.193400 47.239700 4.2273800 2.9185900 12.354000 960 17.645700 8.2914900 57.783000 5.2467100 3.3321400 19.543100 961 55.973100 12.346800 59.096800 19.477600 10.634300 20.639300 962 80.642000 14.033100 61.603800 41.976800 21.888000 22.784800 963 77.999000 41.442900 62.264400 40.933700 26.736500 24.074300 964 78.892500 77.717900 72.742200 51.067700 52.757700 37.472300 965 85.038100 79.779500 74.572600 59.458700 58.750100 39.855000 966 55.557600 72.914800 47.545300 25.516600 35.908500 15.500200 967 75.162000 79.367300 54.471600 44.500800 50.741500 20.743700 968 74.808300 85.056700 58.378400 46.548300 57.218500 24.441700 969 49.437800 41.123700 60.574000 17.707500 15.172000 22.586700 970 51.136800 42.055900 79.973600 22.533500 18.153600 43.725400 971 51.235900 55.218800 83.470700 25.350300 25.065000 49.304300 972 63.626000 55.330900 100.00000 38.758800 32.121500 77.281400 973 16.866700 7.2153400 21.749600 2.0895200 1.4771100 2.6631300 974 18.438800 13.898600 18.921600 2.3770600 2.0806600 2.1821900 975 37.706900 29.456400 20.207900 7.9376300 7.0372800 2.7100400 976 73.671500 73.976900 45.987100 40.419400 44.076000 14.717700 977 80.642600 75.556300 66.282300 51.204900 50.893800 30.354700 978 42.290100 19.513000 40.516500 10.332600 6.6888000 8.9500900 979 64.621100 19.021000 64.559800 26.869800 15.008700 25.543500 980 66.992200 35.629900 69.714100 30.864000 20.168900 31.140600 981 66.381700 52.424400 76.532700 33.841900 27.769000 39.818600 982 66.916400 60.000900 80.775900 36.644700 33.137400 45.866900 983 79.416800 62.854100 79.816100 49.438800 41.111300 44.794300 984 59.763800 28.338200 51.354700 21.770500 13.804600 15.198600 985 60.076200 49.946100 51.412800 24.279900 21.619900 16.104700 986 70.352500 62.612800 56.480200 35.679900 33.844400 20.578600 987 76.166700 65.722600 68.466500 44.086300 40.113200 31.600500 988 9.3784400 24.034000 14.421200 1.6582700 2.9508500 1.6441100 989 8.6677100 41.973100 9.4450400 2.9917100 7.9058800 1.6462100 990 4.2482700 48.797600 64.097200 7.8829800 13.201300 26.105800 991 31.678600 78.211600 66.930800 19.019700 37.315600 31.296800 992 22.788300 50.950100 21.060000 6.2975100 13.025800 3.7729600 993 31.414700 61.196800 21.397700 10.143900 20.192400 4.5365300 994 38.071300 64.704800 69.539700 18.030900 26.632500 32.640800 995 45.122400 70.159700 69.885500 22.324100 32.508100 33.505700 996 44.841100 73.573600 89.111000 27.689500 38.118700 59.446600 997 60.206000 85.556300 92.147800 41.395700 55.773700 65.899600 998 6.2891200 17.026700 31.929100 1.8221900 2.1601100 5.4966600 999 15.184100 33.870100 48.749300 5.0410400 6.7562900 13.705300 1000 18.268700 58.154900 100.00000 19.915900 24.318500 77.476300 1001 9.6395600 34.487300 70.358600 7.7769000 8.5131200 31.795900 1002 74.062600 41.393300 81.000300 40.532600 26.820000 45.087200 1003 82.389600 49.792900 87.981900 52.712200 36.119000 55.765600 1004 88.476900 68.178200 75.408000 60.959100 50.204900 39.634900 1005 89.370800 76.021700 74.530700 64.083900 57.751700 39.373100 1006 88.816800 84.238300 82.391100 67.752000 67.213700 50.574200 1007 35.207600 20.759300 10.395300 6.3200800 4.7621400 1.1077600 1008 41.056000 21.428700 6.7252900 8.4363500 5.8911800 0.7911700 1009 78.460200 21.863000 10.635300 35.893700 19.480200 1.1521700 1010 61.539400 16.535200 8.6179400 19.943000 10.967700 0.8731630 1011 70.417400 13.475500 9.3656600 27.318100 14.310200 0.9031760 1012 80.044400 12.224000 29.039300 37.957800 19.498500 4.5286700 1013 85.715400 41.195100 27.523000 46.689300 29.218100 4.8117300 1014 94.539100 48.796200 29.089100 60.165700 38.661500 5.6281300 1015 58.239800 33.136900 6.2864900 18.493300 13.025200 1.0425500 1016 74.735800 50.353100 0.0000000 34.451100 26.595000 1.2696700 1017 84.121200 52.582900 10.198100 45.644800 33.124000 2.2740900 1018 87.158100 60.782700 19.837900 51.293900 40.212900 4.1993900 1019 54.675000 43.371200 26.532900 17.762900 15.698100 4.6413400 1020 73.543400 43.277400 29.662200 33.113100 23.238600 5.5231300 1021 85.018400 46.472400 37.475400 47.054800 31.315600 8.4759700 1022 40.845900 12.544200 32.057400 8.8832500 5.2176800 5.4836000 1023 54.606600 13.825100 48.887900 17.343800 9.6039800 13.365500 1024 76.506400 41.426000 53.773500 38.093600 25.236200 17.298400 1025 78.444400 68.198700 84.614600 50.768700 45.375300 51.994300 1026 94.908600 84.427000 85.119300 77.385700 72.202100 54.549200 1027 95.703400 93.381800 89.385800 83.178700 84.897700 62.454100 1028 28.140600 33.212500 6.9222500 5.0465900 6.4213400 1.0984900 1029 26.634900 39.556800 4.9125800 5.2585400 8.2465000 1.1574100 1030 31.464700 44.667500 0.0000000 7.0017800 10.806700 0.9704470 1031 38.704000 46.634300 6.4050900 9.7184900 12.891500 1.6047000 1032 48.682400 57.404200 8.5589800 15.914100 20.882500 2.4374500 1033 45.579700 49.456900 13.822700 13.157700 15.740900 2.5051700 1034 73.896400 49.433500 26.251400 34.115700 26.086900 4.8761900 1035 73.203900 68.344400 57.889900 39.926200 39.715000 22.173600 1036 72.389000 70.990400 63.925600 40.719900 42.099500 27.624100 1037 72.746700 69.031200 66.970100 41.102200 40.896400 30.374000 1038 72.864900 76.993500 79.605400 46.014100 49.764300 45.878300 1039 4.2523300 7.4996800 21.851400 0.9259620 0.9203030 2.6863100 1040 10.830500 9.1389200 23.110800 1.5068600 1.3067000 2.9708700 1041 10.275400 37.665700 42.563200 4.2675600 7.3330800 10.413000 1042 6.0288500 42.104700 79.306100 10.208300 12.087000 42.839300 1043 12.539400 76.871800 81.684100 18.220600 36.011700 48.689700 1044 59.455800 75.497700 81.085400 34.600500 42.912900 47.711300 1045 73.312600 86.958100 85.004200 51.098100 61.840400 54.719700 1046 90.584200 87.565100 95.101300 75.048700 74.511000 71.339900 1047 58.821300 37.943600 42.508800 20.982800 15.645200 10.396500 1048 77.247600 65.635000 44.427800 41.902500 38.717900 13.066400 1049 56.781400 51.951600 50.779700 22.231700 21.494000 15.807000 1050 74.030100 63.795300 51.031000 38.815800 36.067800 16.816000 1051 85.230700 69.757100 53.924000 53.384500 47.311500 19.323000 1052 86.988100 79.708100 61.163400 59.504100 58.513400 26.093700 1053 37.906900 41.642000 29.454800 9.5281900 11.068600 5.3872900 1054 52.324200 46.905500 39.684400 17.628800 17.004400 9.4556400 1055 64.313100 46.852400 49.791500 26.891000 21.622300 14.890900 1056 64.043000 54.234700 61.198200 29.320200 26.174100 23.819200 1057 53.806100 61.480200 83.543100 28.062900 29.826700 49.860400 1058 54.468300 62.430000 92.099400 31.076600 32.071400 63.361700 1059 74.540100 65.456400 92.311900 48.144900 42.395800 63.976700 1060 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1061 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1062 5.2577500 18.950900 20.690100 1.2956200 2.0793500 2.5809100 1063 7.2052800 26.422500 26.732600 2.0692100 3.5887900 4.1166900 1064 34.266800 29.988900 25.772800 7.0353100 6.7201900 3.9580100 1065 39.830600 36.209200 24.864100 9.4671400 9.3996300 3.9283400 1066 63.015000 37.923000 38.131100 23.719900 16.958700 8.3748100 1067 32.190100 7.1649200 8.3858400 4.9295000 2.8460700 0.7567690 1068 38.169200 13.246200 42.739400 8.6713100 5.2341600 9.9385100 1069 37.587000 6.0539700 52.502800 9.3277700 5.1597900 15.636700 1070 49.958700 28.212100 65.554200 17.661500 11.919100 26.683200 1071 53.458200 38.396800 71.069600 21.541700 16.367100 32.713900 1072 58.720200 53.785100 72.553700 27.300000 25.122500 35.156700 1073 63.880400 68.880300 91.199700 38.932800 40.173500 62.405800 1074 43.308900 51.378200 73.441300 18.408600 19.637900 36.032000 1075 49.858600 65.000100 82.919000 26.387500 31.174300 49.254300 1076 52.408000 71.056600 100.00000 34.450100 39.781700 78.571600 1077 36.167300 32.972600 71.556900 13.097000 10.781800 33.064900 1078 36.968300 33.737000 89.699300 17.874200 13.668700 57.809300 1079 53.449800 35.868500 87.035300 25.068300 17.696100 53.658300 1080 68.909100 34.614000 83.287600 35.500000 22.429600 48.035100 1081 71.917000 38.938900 93.468100 41.618700 26.862900 64.343000 1082 90.618700 45.763900 94.448100 64.904100 40.656500 66.370400 1083 28.191200 26.841200 60.609000 8.4060800 7.0401200 22.148100 1084 31.881000 91.951700 62.174900 23.083200 53.154300 28.638900 1085 26.773500 49.275100 42.471000 8.1729700 13.328100 10.904300 1086 46.069100 51.842800 41.258000 15.157400 17.884300 10.461900 1087 65.174800 65.581500 40.927700 30.081900 32.835800 11.307400 1088 71.686300 78.582300 41.330000 39.378300 47.407400 12.816200 1089 73.931300 85.495400 72.929200 48.347700 58.750200 38.653300 1090 83.278200 86.424700 82.056700 61.226800 66.212900 50.397400 1091 8.2266100 8.9308600 51.823600 3.4850500 2.4412100 15.198700 1092 9.2443200 10.908700 71.844500 6.7934300 4.4535200 32.961000 1093 84.799300 22.442600 71.355700 49.114400 26.520100 32.577900 1094 90.758900 93.462000 70.889300 71.359600 78.818700 37.516500 1095 60.620700 51.827700 32.983600 23.320700 21.849900 7.0565700 1096 81.781200 69.101200 34.305100 47.084000 43.587900 8.8532700 1097 85.660500 92.798200 40.301900 60.011800 72.120100 14.253300 1098 88.028900 92.436700 49.969800 63.942000 73.708800 19.466300 1099 87.877300 93.217000 87.663800 71.251700 78.789900 59.691400 1100 48.284500 59.216000 50.597200 18.491700 23.333200 16.175300 1101 52.957600 58.758100 57.431300 21.872100 24.812700 21.019900 1102 79.106900 58.280900 57.811900 44.012600 35.460100 21.285000 1103 80.586900 93.085200 58.343100 55.920100 70.601200 25.569500 1104 91.963800 100.00000 65.837800 75.000700 88.754200 33.367100 1105 58.164200 65.464800 15.738400 23.439100 29.382800 3.9000600 1106 69.148800 67.935100 13.041900 32.675800 35.597100 3.7577600 1107 86.065600 70.684600 88.980000 61.794200 52.694400 58.944200 1108 19.231700 0.0000000 75.619800 8.5165700 4.7224800 37.300200 1109 15.761400 62.425300 75.817400 13.575600 23.113200 39.639000 1110 18.346100 70.059000 75.992100 15.735800 29.288400 40.527400 1111 31.742300 92.318300 77.047400 26.044400 55.261700 44.594700 1112 80.581400 100.00000 81.492500 63.402000 83.301400 51.727300 1113 57.670300 67.849500 29.539200 24.202700 31.412800 7.1423000 1114 83.518300 85.988600 31.575400 54.097400 61.678300 9.8338400 1115 91.034700 94.481400 32.148300 67.436800 77.731600 11.274800 1116 70.616800 11.808800 44.401500 29.233700 15.258400 10.781400 1117 82.428500 13.967700 45.506900 42.056000 21.760200 11.402500 1118 92.601900 11.199500 60.703500 57.515700 29.301100 21.974200 1119 57.777900 11.348200 39.484300 18.448700 9.8777900 8.3728700 1120 59.173400 28.338100 44.139900 20.583800 13.159800 10.928100 1121 63.194700 47.279900 62.671800 27.820100 22.386800 24.716700 1122 54.647000 41.126800 58.070900 20.352800 16.446700 20.520300 1123 57.478300 47.470000 57.363700 22.879900 19.965800 20.262400 1124 77.719400 58.664600 67.797600 44.161700 35.871900 30.348200 1125 92.923800 64.559800 73.040100 65.942600 50.192100 36.509900 1126 18.826100 3.8651400 8.0877200 1.9580000 1.1943500 0.7073370 1127 45.875400 63.734900 13.242800 15.869100 24.538600 3.4158600 1128 50.190700 71.479500 10.219100 19.873900 31.862000 3.7839100 1129 72.511100 72.769400 25.729100 37.497800 41.570100 6.5641500 1130 94.717600 79.775300 30.618900 67.441000 62.237200 8.7324200 1131 40.016400 33.798000 39.090300 10.186400 9.2012000 8.6459400 1132 40.418900 46.054500 48.660500 12.560200 14.246400 14.150400 1133 41.860700 60.940400 67.280600 18.293400 24.416500 29.993700 1134 54.690100 61.560800 70.399400 25.652300 28.453000 33.308800 1135 39.584800 47.940200 57.616500 13.608800 15.591100 20.485800 1136 44.928600 71.780200 63.834600 21.567600 33.261600 27.617800 1137 74.864700 81.039000 69.042400 47.029900 53.698400 33.801400 1138 91.962000 93.648100 79.381600 75.012700 80.983800 47.816100 1139 92.379800 93.913600 85.904900 77.391300 82.602300 57.096900 1140 49.279100 42.000400 42.133200 15.524300 14.211000 10.376900 1141 67.854700 41.813300 50.557900 29.333300 21.017500 15.140100 1142 79.692600 51.032800 54.542800 42.994400 31.343100 18.334400 1143 87.587400 50.926100 68.422200 54.960400 37.360800 30.485200 1144 91.570200 57.777900 93.637800 67.904600 47.583100 65.663700 1145 37.818500 26.090000 61.273500 11.360800 8.3695400 22.702600 1146 80.597700 25.813700 78.723400 45.780200 25.540600 41.538500 1147 72.584700 14.888800 64.285900 33.798600 17.973100 25.227500 1148 83.135400 12.875300 82.322400 49.134100 25.645900 46.205000 1149 92.083000 13.055000 84.682000 61.760200 31.927100 49.605700 1150 93.603400 10.065300 94.814500 66.895000 34.465300 66.075000 1151 76.826700 9.8696600 84.664600 42.397500 22.152400 49.548700 1152 80.686900 14.699200 93.839800 49.517800 26.251600 64.398300 1153 39.957600 0.0000000 45.967900 9.3707000 4.7786400 11.541100 1154 47.696100 22.142300 70.804700 17.092400 10.696000 31.964200 1155 62.141500 29.010000 87.976900 30.701800 18.897800 54.916300 1156 65.243700 77.685400 86.791600 41.173800 48.122400 56.250900 1157 72.096800 91.289400 92.844100 53.795400 68.079500 67.907700 1158 47.446400 56.366900 63.151400 19.278900 22.324700 25.697700 1159 46.810200 58.131300 70.644700 20.632000 24.033500 33.318300 1160 49.115100 64.441200 39.691000 18.942100 26.601500 10.639100 1161 57.548200 64.103800 39.294900 23.908800 28.830400 10.434000 1162 59.941000 86.283900 43.781200 32.311200 51.324800 15.012500 1163 19.576100 28.692500 5.1966300 2.9720000 4.4118300 0.8236460 1164 60.467900 62.640000 8.5401300 24.302700 28.006200 2.8305200 1165 65.214400 84.973300 10.788300 34.226100 50.796500 5.4069600 1166 93.236700 91.234800 24.677400 68.951900 74.643400 8.6239600 1167 35.298000 25.047400 5.5646000 6.4955500 5.4851200 0.7666980 1168 36.178300 29.755900 13.380900 7.2314200 6.7359700 1.6463200 1169 36.447800 51.090200 21.536300 9.9151800 14.871400 3.8774100 1170 65.358600 73.586700 25.740300 31.268900 39.144900 6.6518200 1171 40.023700 31.937100 0.0000000 8.5816700 7.8569000 0.4787770 1172 49.263300 30.388900 10.820700 12.886400 9.6495000 1.3698200 1173 69.289100 55.956400 94.605700 41.873800 33.830600 67.245900 1174 69.368300 66.126200 94.397300 43.947600 40.822500 67.663600 1175 90.198500 79.008300 93.629700 71.145800 64.206900 67.631400 1176 24.952900 7.1676100 20.280800 3.4181300 2.1246600 2.3700000 1177 44.826600 9.2164200 28.694200 10.335100 5.6800200 4.3999000 1178 60.642400 58.878000 30.752700 24.432400 25.938500 6.7805200 1179 70.144100 59.699700 30.153800 32.434100 30.337400 6.6536500 1180 68.862200 66.135100 34.261600 32.884400 34.543100 8.5668500 1181 76.372000 68.312900 39.195100 41.133900 40.126200 10.760100 1182 93.799600 80.366000 48.914300 67.732600 63.038400 17.155900 1183 32.944100 16.049800 13.072300 5.4734000 3.7976000 1.3344100 1184 34.004200 12.364900 6.5067300 5.5667500 3.5013600 0.6443410 1185 53.089300 11.808200 16.146400 14.272100 7.7609300 1.7041300 1186 55.429500 27.419400 92.918400 27.363600 17.061400 63.023600 1187 13.779700 20.897200 23.558900 2.2119400 2.7874500 3.2207800 1188 13.881400 25.537300 23.969200 2.4848200 3.6295600 3.4086300 1189 24.731900 43.696800 30.982400 6.1446600 10.108100 5.9549000 1190 67.720700 49.621700 32.133500 28.638700 23.494200 6.6367200 1191 83.349000 58.651400 36.648000 46.864800 36.892300 8.8858000 1192 86.201400 68.298000 43.285500 53.116200 46.045000 12.710000 1193 85.839300 85.168400 46.614700 57.947400 62.832000 16.406300 1194 94.938200 91.193600 61.539200 74.985200 77.841900 27.963800 1195 57.417400 53.841700 42.935600 22.153600 22.278900 11.409300 1196 58.598800 72.141400 57.418100 28.550200 36.898800 22.169900 1197 66.663000 77.331200 61.027200 36.783000 45.221500 25.699400 1198 72.486900 78.623500 60.508700 42.425300 49.122600 25.403200 1199 80.869300 84.139700 64.908400 53.932100 60.019300 30.052000 1200 81.947200 86.361800 94.381100 63.086500 67.339600 69.889000 1201 29.932400 31.239100 36.747200 6.5166600 6.7844000 7.5756600 1202 38.259900 41.373500 36.033900 10.035800 11.263200 7.6540200 1203 44.885200 45.058500 36.825200 13.282000 14.144700 8.1390400 1204 46.916000 44.145500 40.700200 14.443600 14.408800 9.7867200 1205 78.644800 53.599600 74.022700 45.513100 34.027700 36.848400 1206 83.569100 70.519000 75.580800 55.195100 49.054900 40.067600 1207 93.144600 76.777800 82.400000 71.565800 62.219800 49.680400 1208 92.232100 87.428600 90.619800 75.987500 74.719400 63.592700 1209 26.693100 11.057000 45.832800 5.5260100 3.5370100 11.552200 1210 29.289400 0.0000000 59.313600 7.5884900 4.0307300 20.718500 1211 35.919700 7.1066400 94.319700 17.658100 10.023500 65.172000 1212 54.515400 19.859800 100.00000 28.719600 16.735800 75.904400 1213 13.967400 61.868800 26.388000 7.1703000 19.143500 5.7462200 1214 26.381200 78.428500 27.121800 13.474700 34.439000 7.5484000 1215 35.160100 82.005700 36.285400 17.561200 39.769200 11.024200 1216 37.277000 89.369400 41.290400 21.282200 49.163800 14.204700 1217 19.928500 49.600600 48.027100 7.4371100 13.146500 13.957200 1218 16.524300 57.407100 84.600900 14.808800 21.028200 51.099100 1219 18.810600 64.867700 83.571700 16.384400 26.174900 50.178500 1220 43.676100 85.699600 82.951100 29.286200 49.752400 51.562100 1221 0.0000000 56.292900 15.397100 4.5795300 14.727600 3.1428400 1222 15.903600 59.268100 11.966700 6.4074300 17.222700 2.9139400 1223 18.734300 88.859100 16.635400 15.201500 45.506200 6.6968800 1224 48.954000 91.581700 51.262400 28.268800 55.164100 20.171000 1225 21.574400 40.721400 50.708200 6.8755300 9.6041600 15.190300 1226 19.391000 51.020100 59.919700 9.0898800 14.698000 22.531700 1227 38.202000 52.919300 64.830800 14.965500 18.521100 27.036900 1228 56.136300 57.198200 69.274000 25.509000 25.913600 31.778800 1229 71.197500 72.100800 85.088100 44.411800 45.117400 53.072600 1230 72.280300 80.656300 92.481100 50.074400 55.297000 65.841500 1231 83.943300 81.571300 95.744900 64.329300 63.253000 71.712100 1232 36.712700 25.215400 29.442900 7.7169900 6.1728500 4.8557300 1233 45.613700 32.481000 27.762800 11.773200 9.6111900 4.5606400 1234 53.269600 49.695700 31.724500 18.026500 18.297000 6.5047100 1235 53.095600 56.136000 34.527300 19.146600 21.889000 7.8877000 1236 17.073200 19.683600 26.195800 2.6791000 2.8685300 3.8416100 1237 15.454900 23.583200 52.102300 4.7531700 4.6016200 15.588700 1238 16.491800 28.887300 62.740400 6.7104400 6.6203300 24.070800 1239 11.818800 36.701800 63.437000 6.9303800 8.5811000 24.947800 1240 19.971800 40.331700 60.592700 7.8893400 10.084900 22.569400 1241 19.236300 46.358400 61.641500 8.6630000 12.578900 23.754000 1242 16.912700 77.038100 70.068000 16.222800 34.967200 34.422300 1243 63.661400 80.824800 78.676700 38.801800 49.607500 45.104900 1244 66.042700 94.229600 81.631100 46.384200 67.621500 50.955900 1245 69.618000 73.287300 65.663400 39.006200 43.043100 29.507100 1246 69.240600 79.144900 75.597000 42.315700 49.752800 41.015900 1247 69.313300 84.620300 77.288300 44.555300 56.073100 43.803300 1248 31.375700 38.356500 31.761100 7.2099300 8.9183800 5.9825200 1249 32.372000 38.853300 72.199400 12.570000 12.100800 33.993800 1250 66.652100 43.012000 89.405500 36.059700 25.336700 57.691400 1251 61.680500 15.108400 47.557000 22.104500 12.055200 12.582900 1252 79.223400 12.742400 51.014200 38.858800 20.128000 14.699900 1253 83.040000 33.070300 51.207900 44.459100 25.999500 15.237300 1254 84.473600 36.212000 67.948100 49.024800 29.242800 29.311300 1255 87.866000 38.280800 77.136400 55.534500 33.177300 39.878800 1256 85.017800 62.653000 76.345200 55.347300 43.834700 40.308300 1257 85.605100 63.818500 90.732700 60.080500 47.183600 61.180700 1258 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 1259 7.7177500 18.631700 5.9292800 1.1184300 1.9267800 0.6779490 1260 6.8393800 15.739500 13.306000 1.0755900 1.6005000 1.3591700 1261 7.8342000 12.833600 8.7866400 0.9696690 1.2783300 0.8426270 1262 0.0000000 5.7286900 15.825500 0.3934810 0.5418410 1.6066600 1263 10.145900 55.465400 29.860500 5.7479700 14.925700 6.2640300 1264 9.5891800 62.303500 55.785800 9.3955500 20.703200 20.028000 1265 21.092100 100.00000 57.186800 23.344600 63.205100 25.796300 1266 21.630000 73.128900 47.911400 12.569300 29.703000 15.738800 1267 40.188900 72.628900 51.181700 17.971400 32.001500 17.732200 1268 49.350600 75.216900 51.152200 22.920200 36.508000 17.985600 1269 55.316600 89.386200 79.394300 36.019000 56.907200 47.190400 1270 58.626900 90.325200 86.388500 40.369600 60.230900 57.283500 1271 79.637700 89.850700 93.901700 61.525000 70.297600 69.535600 1272 85.568400 92.528900 92.960700 69.491700 77.240400 68.296900 1273 8.1867100 13.512000 21.249900 1.3327600 1.5390200 2.6184000 1274 19.281500 11.024000 38.677800 3.4775400 2.4756400 8.0140200 1275 30.652200 6.8117500 38.601300 5.7807900 3.3465000 7.9466800 1276 38.982600 26.922400 41.094200 9.4458200 7.3860300 9.3698800 1277 14.641000 0.0000000 15.729800 1.4761200 0.7489520 1.5490700 1278 18.349800 6.2441200 14.697400 2.0633200 1.3917600 1.4495700 1279 47.102600 8.4988100 20.759000 11.067600 5.9699000 2.4726700 1280 65.000700 83.949600 24.568600 34.110600 49.750600 7.5777100 1281 72.526700 92.950900 25.407600 44.272400 64.472800 9.0647100 1282 43.526800 74.030200 19.646300 17.505600 32.700600 5.3683600 1283 50.127000 78.046900 35.319600 22.711000 38.690800 10.170400 1284 64.414200 86.079700 64.717700 38.374200 54.314900 30.129300 1285 22.493100 29.055000 25.964900 4.0627400 5.0656000 3.9815900 1286 27.913000 36.044900 40.039500 6.6676500 8.0507000 9.1482400 1287 28.197200 46.828700 46.168600 8.5175300 12.533000 12.731600 1288 33.956700 47.276400 64.785900 12.673700 14.953100 26.672600 1289 40.171800 54.842000 73.751800 17.732500 20.946200 36.609900 1290 31.976600 39.027600 55.191300 9.6417100 10.487300 18.223400 1291 34.360000 62.188200 61.335600 14.799900 23.358800 24.510000 1292 92.521500 73.606400 60.680100 65.371900 56.216500 24.993800 1293 55.587500 37.714900 30.557200 17.929400 14.007100 5.5682600 1294 63.914100 40.812400 29.799200 24.187700 18.021900 5.4559400 1295 80.353100 47.226900 43.091500 41.943000 29.129300 11.106400 1296 85.048200 59.338300 45.878000 49.920700 38.841200 13.349600 1297 39.712100 38.969400 20.778300 9.5308200 10.201600 3.1344900 1298 79.460900 45.891200 19.411000 39.329200 27.213900 3.1838600 1299 78.841800 65.953400 16.563500 42.117000 38.906700 4.0670700 1300 79.268800 84.617500 15.333400 47.907900 57.185400 5.9189600 1301 78.365100 94.216300 19.387700 50.663300 69.104900 7.9681200 1302 24.383300 23.386700 29.254100 4.2470400 4.1691800 4.7603700 1303 33.783900 23.600100 32.667300 6.8514700 5.4999900 5.8602100 1304 42.525200 25.743000 38.064100 10.555900 7.7043700 7.9809200 1305 50.852300 28.560500 45.652900 15.495300 10.708700 11.750700 1306 49.972700 35.293500 48.044500 15.787500 12.403100 13.327200 1307 50.785100 39.676000 45.692100 16.420900 13.936000 12.138000 1308 55.141000 48.471100 53.037300 20.919600 19.360000 17.123000 1309 64.936800 62.845600 69.008100 33.025300 32.840000 31.924200 1310 72.188400 64.295100 74.808600 40.994500 37.764900 38.568200 1311 25.540400 70.851600 70.619900 16.117600 29.974200 34.368100 1312 26.705200 76.261100 84.304600 20.988600 36.910300 52.357800 1313 19.340600 27.112800 33.463000 3.8058700 4.5982300 6.2174400 1314 24.444800 31.322500 47.987800 6.2453000 6.7482600 13.167200 1315 24.072300 36.773400 52.440800 7.1482000 8.5841000 16.187600 1316 43.052200 39.571800 52.531800 13.338100 12.445600 16.356600 1317 42.529100 40.001200 60.979900 14.326900 13.157400 22.888500 1318 8.3919900 38.634400 19.625000 2.8582300 6.8131900 2.9015800 1319 0.0000000 47.799300 17.519900 3.2904000 10.204400 2.9552500 1320 37.917100 91.117100 15.808600 20.830800 50.784800 6.9029100 1321 61.465400 92.472500 27.776500 34.655200 59.186500 9.6163500 1322 30.347600 37.866000 23.265600 6.4572400 8.3726500 3.6159100 1323 36.692700 46.902200 27.076200 9.6294000 12.999500 4.9582100 1324 35.434500 76.580700 27.039700 15.414600 33.796900 7.3154100 1325 21.198600 49.334800 10.301000 5.4836300 11.903800 2.0947000 1326 19.281800 68.474600 52.371600 11.488500 25.743100 18.121400 1327 15.890800 82.865100 67.845800 17.506200 40.871800 32.788500 1328 11.446100 84.261000 76.540700 19.257200 43.241300 42.816500 1329 22.946100 83.716800 88.295700 23.647600 45.100600 59.331800 1330 10.732400 93.153400 42.455000 17.370600 51.549500 15.339800 1331 0.0000000 86.954400 46.831700 14.608400 43.327400 16.773200 1332 32.303400 86.086700 84.082100 25.558600 48.337100 53.243700 1333 36.134800 86.777800 91.151100 28.997900 50.904400 64.385600 1334 56.466500 90.043100 92.865300 40.687400 60.222200 67.759200 1335 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1336 14.492200 3.6107800 26.667500 1.9280600 1.2082400 3.7947800 1337 16.305400 10.177400 29.893600 2.4503600 1.8642600 4.7657300 1338 20.222300 58.333600 39.699200 8.1690300 17.677100 10.165600 1339 30.911400 60.831500 39.889000 10.994000 20.481000 10.438100 1340 64.460300 93.543800 41.088900 38.313900 62.316900 14.736800 1341 25.400900 69.934500 8.6747700 10.326700 26.009300 3.4869900 1342 28.904900 93.055800 12.811800 18.776300 52.006800 6.7977300 1343 47.394200 100.00000 16.582600 28.720200 65.607400 8.4617200 1344 53.652300 100.00000 67.092300 36.877400 69.995000 34.608700 1345 30.788700 57.753400 45.414800 10.859600 18.728200 12.978700 1346 30.370900 64.499600 52.197100 12.865200 23.744600 17.650200 1347 34.598300 65.332000 77.735700 18.703600 27.506900 42.283500 1348 32.909900 56.033700 100.00000 22.725700 24.582000 77.328500 1349 48.382400 80.243500 100.00000 34.874600 47.626300 79.578600 1350 38.476900 60.215700 73.170400 17.957700 23.921300 36.312700 1351 46.928600 93.196200 78.928100 32.680900 59.590800 47.147000 1352 7.0289500 18.299900 38.854200 2.4034400 2.6267500 8.1803600 1353 13.376100 16.421400 39.491400 2.9320700 2.6844900 8.4351600 1354 7.7674000 23.331100 66.528000 6.1460900 5.4182100 27.526200 1355 9.2284300 25.133800 84.786500 10.375100 8.1065400 49.956100 1356 19.775100 36.304600 85.250600 12.575700 11.622000 50.964600 1357 28.449600 48.816600 85.126600 15.767200 17.449300 51.341500 1358 30.079000 58.298800 82.792000 17.147700 22.623900 48.546800 1359 87.970400 62.903800 83.870000 61.093200 46.962100 50.446300 1360 19.905900 24.104100 17.131800 2.9803200 3.6184400 2.0438400 1361 60.771100 48.574800 12.740400 22.127100 19.788400 2.3216900 1362 62.249400 56.073500 7.4114000 24.340900 24.335500 2.2484100 1363 68.148300 60.425100 0.0000000 29.913200 29.443400 1.9401100 1364 68.302500 100.00000 19.366900 43.149400 72.720800 8.9291700 1365 31.781300 48.682300 10.421300 7.7923200 12.768600 2.0708400 1366 34.996900 76.612500 14.530200 14.834500 33.503100 4.8325500 1367 38.269800 79.065200 56.100400 19.722400 38.283600 21.913000 1368 45.977900 78.840000 65.668300 24.390500 40.498400 30.125700 1369 82.603400 14.356400 5.9210700 40.343900 20.799400 0.6183180 1370 92.100200 15.086500 24.069600 53.524000 27.395900 3.2511200 1371 91.656400 59.270300 40.373300 58.400300 42.939800 10.542300 1372 53.546700 25.040400 6.2740600 14.895500 9.6220100 0.8263860 1373 86.371100 36.371900 8.5301600 46.457700 27.625400 1.3403300 1374 85.476800 36.747300 36.391100 46.455500 27.815400 7.6122300 1375 93.833200 45.336100 57.840900 61.330500 38.087500 20.529600 1376 94.728400 47.886500 70.140400 65.092200 41.091300 32.133800 1377 15.217000 8.0924100 8.6863500 1.5576800 1.2386600 0.7907570 1378 13.889100 14.081400 7.7873700 1.5396800 1.6643700 0.7705470 1379 20.123400 20.720500 12.049600 2.7202000 2.9863500 1.2856300 1380 22.962800 19.057000 8.8387400 3.0888300 2.9519600 0.9304870 1381 25.288800 23.465800 6.2311400 3.7270000 3.8689000 0.7895660 1382 86.843600 23.122400 39.177900 47.458100 25.463200 8.4079400 1383 78.797700 15.946300 37.418600 37.186600 19.494300 7.5344600 1384 94.679900 14.121600 39.703400 58.295500 29.731100 8.5011900 1385 100.00000 15.900200 69.448000 70.822900 36.380100 30.399300 1386 100.00000 16.447200 81.124000 73.386800 37.899600 44.583400 1387 100.00000 63.462500 87.195800 80.312200 56.845000 55.481100 1388 26.975500 20.659500 25.733800 4.5007700 3.8902300 3.7392900 1389 26.164800 24.207700 45.385500 5.8780600 5.1957600 11.501200 1390 33.224500 27.949400 45.119200 7.9243500 6.8571300 11.442600 1391 66.043800 32.033400 43.998800 26.149300 16.679300 10.957600 1392 93.734900 36.331700 45.074600 58.663000 33.772400 11.672300 1393 100.00000 38.474500 55.011100 69.982900 40.041300 18.069700 1394 31.717200 17.141200 18.825000 5.3092700 3.8432500 2.2070800 1395 48.359800 18.734500 25.484600 12.204800 7.4414600 3.6452100 1396 58.495900 37.984600 54.888700 22.118100 16.323300 17.961300 1397 65.881200 45.474500 57.945100 29.038600 22.236000 20.619800 1398 16.151400 68.166900 24.155000 8.7495200 24.002600 5.7313100 1399 18.446100 75.710200 33.558900 11.561500 31.197200 9.2556700 1400 25.300500 86.701100 46.661100 17.433700 44.453200 16.640700 1401 25.662400 88.174500 67.661300 21.006800 48.004400 33.313500 1402 32.295600 93.954800 92.278800 30.909000 59.902700 67.349100 1403 7.3670400 37.335700 31.319200 3.1835500 6.6405300 5.7983800 1404 11.176000 42.407700 29.549200 3.9320800 8.5678700 5.4491400 1405 12.045100 48.623100 29.610200 4.8237300 11.334700 5.7748500 1406 10.437000 50.039900 78.233200 11.339600 15.650500 41.835600 1407 42.675200 54.507500 100.00000 26.001300 25.428400 77.227400 1408 39.061400 45.317500 91.018000 20.253400 18.414000 60.447200 1409 44.528700 60.381700 91.525700 25.143600 27.922300 62.231700 1410 42.320700 17.812000 75.176000 15.302300 9.3309400 36.929100 1411 57.240200 14.547100 93.168200 28.016000 15.630900 63.224200 1412 76.367400 14.787100 100.00000 46.748500 25.057900 75.830800 1413 49.488100 48.006100 61.662600 18.768600 18.206600 23.858100 1414 58.085200 55.423400 63.745800 25.509900 24.919600 26.179800 1415 76.324000 92.665400 63.100900 51.728100 68.102100 29.581500 1416 20.560500 34.111500 15.369400 3.7399300 6.0104200 2.0437700 1417 45.429700 34.747000 13.441700 11.369800 9.9240100 1.8058600 1418 47.059000 45.069500 11.058100 13.216700 14.029000 1.9511600 1419 67.138800 44.946500 14.988900 26.780100 20.670700 2.4267800 1420 70.280500 57.860500 11.600700 31.535600 28.824800 2.7709600 1421 77.091300 71.015500 14.981800 41.380600 42.113600 4.3054000 1422 44.974800 82.841000 11.149500 20.633800 41.998200 5.1678500 1423 45.639500 92.908200 9.6629100 24.639300 54.715800 6.4342300 1424 56.885200 93.547300 9.3913900 31.268200 58.734300 6.5079900 1425 48.223000 76.888500 12.101800 20.370700 36.460400 4.5600600 1426 69.529300 90.398700 0.0000000 39.804100 59.298400 5.2351100 1427 75.993300 92.948600 4.8155000 47.255800 65.896500 6.0246400 1428 87.799300 80.073500 0.0000000 56.703200 57.150600 3.8541100 1429 91.134000 87.313000 34.785500 64.942900 68.415200 11.145400 1430 70.311600 53.165900 22.416500 31.053300 26.237500 4.1883000 1431 82.576000 80.169200 23.550500 50.587300 54.268400 6.8662300 1432 56.017800 51.048000 12.615300 19.202600 19.406800 2.4461900 1433 69.338700 51.826800 5.7229900 29.535000 24.836300 1.8353500 1434 87.952400 82.906300 55.938900 61.072400 62.220100 22.262000 1435 95.048000 84.746800 63.503400 73.084400 70.038800 28.817100 1436 15.840600 34.294600 29.903900 3.6383700 6.0511700 5.2439300 1437 14.065200 55.118100 69.142500 10.608200 17.502100 31.498500 1438 11.587700 55.051400 76.968200 11.961300 18.263200 40.530700 1439 5.7253800 60.612100 81.858100 13.699200 22.208800 47.404700 1440 37.516400 77.978600 81.220900 23.852400 39.731100 48.175300 1441 49.048700 82.694800 84.194000 31.188400 47.732300 52.961500 1442 47.425700 56.755000 33.299000 16.064700 20.685700 7.4848500 1443 64.859400 68.604100 31.763000 29.880200 34.748500 7.9172000 1444 34.542500 34.955400 46.583800 9.0215100 8.9716700 12.463500 1445 35.285100 34.871100 63.343100 11.468500 10.329800 24.797300 1446 44.077900 40.318800 71.686300 16.940000 14.692900 33.476100 1447 93.104400 39.277100 71.272300 61.814900 36.467900 32.972400 1448 93.691100 47.927900 79.951700 65.649600 41.550100 43.981000 1449 39.832400 22.483000 25.627700 8.5283400 6.1282100 3.7462700 1450 45.323200 25.926100 24.304700 11.016900 7.8994700 3.4955400 1451 53.742600 30.603900 22.596100 15.786900 11.150800 3.2283500 1452 64.869800 33.142100 22.792400 23.893400 15.718800 3.3470700 1453 67.546000 55.930500 41.942800 30.231100 27.287800 11.053000 1454 76.873000 63.216800 59.394600 42.771800 37.742400 22.946100 1455 86.092800 65.572000 57.476200 53.972400 44.741900 21.598100 1456 86.118500 69.525200 66.424000 56.371900 48.764400 29.877500 1457 90.393800 87.812900 67.322800 67.967900 70.742300 32.919600 1458 43.687200 13.304300 6.4427700 9.2414300 5.3882500 0.6492160 1459 51.841500 14.023300 6.5403100 13.413600 7.5060000 0.6655580 1460 91.283800 23.890400 8.5831700 52.291700 27.857000 0.9962860 1461 92.298600 68.020800 47.438200 61.901000 50.209600 14.959800 1462 92.768500 86.241500 50.925200 68.405600 69.117500 19.182900 1463 27.007200 25.988800 19.538500 4.5485100 4.7105500 2.4982900 1464 29.674100 23.703400 16.234700 4.9748800 4.5357200 1.8962500 1465 33.843100 22.389300 18.409000 6.1581100 4.9257200 2.2218900 1466 54.096700 88.983000 34.528900 28.670400 52.339700 11.285700 1467 58.942000 93.289700 46.717400 34.572200 60.214900 17.638800 1468 4.2878800 24.120700 9.7700100 1.1943100 2.7281000 1.1107500 1469 9.2815000 23.862800 5.2476900 1.4748000 2.8199000 0.7151620 1470 17.772600 32.988500 7.1717400 3.0538600 5.3870000 1.1123300 1471 29.605500 54.041700 10.093300 8.0258700 15.288700 2.3552300 1472 28.881500 58.574500 67.986100 13.653900 20.798900 30.534300 1473 17.143400 32.842300 54.846500 5.9411100 7.0101700 17.753000 1474 38.303300 53.978200 59.966200 14.396300 18.684400 22.751700 1475 42.676400 61.137700 61.539300 17.709900 24.168300 24.605500 1476 19.333900 50.225200 36.437700 6.4058000 12.825300 8.2554600 1477 17.678800 60.508400 49.060400 9.0976400 19.428300 15.302700 1478 14.316000 85.528600 51.091000 15.728800 42.443000 19.195400 1479 77.377400 84.305800 82.861700 53.840400 60.438300 51.249100 1480 78.927700 92.980700 82.533600 58.726800 72.235000 52.023100 1481 58.371700 90.083300 53.941600 33.733000 56.190800 21.783000 1482 67.346800 93.170900 57.433800 42.409300 64.037100 24.861000 1483 73.724300 93.100600 86.030700 54.150200 70.194500 57.160100 1484 79.354700 94.619000 92.069100 62.546000 76.278900 67.096600 1485 34.957400 22.661100 50.681800 8.7523200 6.4182700 14.631400 1486 36.568600 23.189100 69.672300 12.212100 8.4300100 30.759500 1487 42.190700 24.169400 89.358600 19.128400 12.359700 57.003900 1488 58.775000 48.374000 90.715800 31.038600 24.912400 60.102100 1489 32.859400 8.1851700 19.421200 5.4073400 3.1601000 2.2168900 1490 38.841800 5.6975500 17.179200 7.3009200 3.9451300 1.8141000 1491 68.450800 26.325900 32.040400 26.920200 15.834100 5.7065000 1492 81.303400 31.504600 41.994600 41.297900 24.007100 9.9265700 1493 80.585600 43.155900 49.110900 42.298100 27.844600 14.287100 1494 32.530000 83.272600 16.977700 16.234200 40.260900 5.9916500 1495 58.175900 87.721600 15.247500 29.996400 51.567100 6.3293000 1496 67.675000 93.101400 13.171000 39.435400 62.236100 6.8481000 1497 61.653000 76.144400 12.445700 28.630900 39.899200 4.5164200 1498 53.495700 67.082600 12.912000 20.734900 29.128300 3.6649400 1499 56.858500 80.609200 14.526000 26.644800 42.857200 5.2984700 1500 66.260100 92.921900 92.208900 48.959000 67.568000 67.068000 1501 5.6669400 27.975700 46.668800 3.5203000 4.7053200 12.306800 1502 10.736100 38.582700 55.547400 5.8397800 8.4868600 18.470700 1503 14.995800 75.201200 58.634600 13.513100 31.939400 23.460900 1504 41.635300 76.607500 70.797700 22.728000 37.815800 35.167300 1505 44.360400 85.162800 75.841600 27.715100 48.299300 42.071900 1506 10.555100 68.717000 33.752900 8.7879600 24.449500 8.6156900 1507 5.3529100 80.880700 37.090000 12.061300 36.009000 11.209600 1508 13.591500 94.050200 70.581500 21.933600 55.170300 37.271700 1509 10.217800 95.175900 90.408200 26.915100 59.367000 64.407300 1510 54.549000 95.521000 89.944400 40.801000 66.618400 63.702300 1511 36.187400 30.348000 5.4877100 7.1392300 6.8036100 0.8924290 1512 41.506800 28.426600 12.916700 9.1328300 7.4042100 1.5540200 1513 41.348700 33.496300 52.280800 12.011300 10.130300 15.966400 1514 45.245900 31.870100 71.862600 16.726200 12.318800 33.373500 1515 75.666900 71.494400 93.086600 51.027400 48.095700 65.870500 1516 4.6672900 14.585500 7.4993400 0.7747800 1.3334000 0.7528010 1517 8.1057300 11.646100 3.3819400 0.8757540 1.1317400 0.3750720 1518 10.300200 6.7493200 3.8434300 0.9488330 0.8559540 0.3732080 1519 44.411300 23.775500 1.2700500 9.9212400 6.9618700 0.3797360 1520 50.822900 44.214000 18.594800 15.280300 14.748600 2.9569500 1521 70.265800 63.941000 18.191300 32.918400 33.076000 4.1591700 1522 72.881600 85.771800 16.767900 41.580600 55.240800 6.2875400 1523 78.420600 92.400200 35.134600 50.760900 67.069000 12.020800 1524 81.737100 92.598100 49.631300 55.963900 69.964300 19.277900 1525 91.616400 93.760300 59.890000 70.807400 78.750400 26.945500 1526 30.561700 48.789900 26.861000 7.9934400 12.953900 5.0012200 1527 36.003800 50.609100 34.715600 10.365500 14.934000 7.6107500 1528 44.744600 56.387700 40.477400 15.232400 20.125600 10.385500 1529 63.648400 70.574900 59.941500 32.263600 37.575200 24.061900 1530 67.223600 94.786500 72.271100 45.510800 67.696700 39.267600 1531 30.125800 41.499400 29.708400 7.0878400 9.8211900 5.4582700 1532 48.527500 62.723000 30.230500 17.618100 24.822600 6.9128700 1533 80.850300 62.208800 32.679100 44.304800 37.664900 7.6735000 1534 90.270100 75.124600 37.813400 59.982300 54.585600 10.846900 1535 58.175500 40.914800 7.5811300 19.218200 15.549800 1.4364700 1536 91.314800 47.042600 8.7350600 54.473000 35.096900 1.8231400 1537 27.102400 15.313600 63.380200 8.0399800 5.3148600 24.392700 1538 34.845400 13.891200 78.813800 13.200100 7.9664200 41.455100 1539 60.890000 60.620300 91.016900 34.737100 32.773300 61.398200 1540 24.746500 39.078800 36.625000 5.9929000 8.5581200 7.7946000 1541 28.714000 74.129100 35.730100 13.281400 30.763400 9.8960200 1542 27.150200 92.201500 40.325600 19.353600 51.400300 14.172600 1543 7.8382500 53.943100 50.368900 7.0121700 14.930400 15.665800 1544 14.158000 54.367600 56.035700 8.3711200 15.861800 19.644300 1545 10.285200 70.482000 61.064300 12.119800 27.598800 25.009200 1546 93.324700 71.348400 73.702700 68.316000 56.105100 37.903800 1547 96.710600 79.980500 76.081300 76.529100 67.366700 41.709900 1548 13.807600 18.300800 5.4997500 1.6461000 2.1470900 0.6361110 1549 11.760000 22.057300 31.998300 2.4825100 3.1153400 5.6025900 1550 12.739600 25.959900 30.313300 2.6962500 3.8305400 5.1389800 1551 75.430800 26.749400 29.187200 33.533800 19.154200 4.8142700 1552 75.793500 36.684300 36.224100 35.128000 22.218100 7.5440100 1553 76.646300 45.386800 74.694800 42.259300 28.949100 37.187500 1554 76.333600 77.679900 84.890000 51.110400 52.971000 53.380000 1555 79.111300 84.718300 88.145100 57.329900 62.681100 59.225600 1556 7.7846000 5.0516500 26.277600 1.3175700 0.9886670 3.7033600 1557 8.1563300 11.214600 29.713300 1.6491000 1.5422400 4.7211900 1558 8.8412200 52.975900 39.368500 5.8598000 13.816700 9.6592700 1559 10.201200 61.958600 44.427800 8.0752200 19.742500 12.761100 1560 7.4583600 71.798300 46.512600 10.384300 27.585600 14.789600 1561 9.1836600 84.034400 60.842900 16.034900 41.197200 26.357700 1562 13.433600 92.271600 78.341800 22.851200 53.658300 46.240800 1563 24.852300 92.265900 83.520200 25.898000 55.252500 53.321400 1564 39.203000 92.783700 85.505300 30.797500 58.309800 56.319000 1565 45.972400 69.341900 78.765200 24.413900 33.091800 43.977000 1566 45.916500 75.260700 78.506100 25.906500 38.386200 44.241300 1567 51.435100 78.572000 88.037500 32.226200 44.519200 58.291300 1568 31.814300 40.025900 49.316100 8.9858200 10.412400 14.278900 1569 32.787900 47.180600 74.655500 14.200400 15.816900 37.231300 1570 87.543500 78.203800 80.026600 63.489300 59.427500 46.579200 1571 94.803100 87.454600 82.668900 77.661600 75.398900 51.402000 1572 26.303100 31.974800 23.366000 4.9446100 6.1159100 3.4390400 1573 46.649800 46.596700 24.337200 13.612600 14.832400 4.2489600 1574 45.903300 49.670700 44.714600 15.061000 16.904700 12.085800 1575 69.448500 53.879700 52.212600 32.644900 27.541800 16.876500 1576 63.093700 64.377300 47.548500 28.769800 31.458700 14.703900 1577 62.711800 66.088000 60.965900 30.593400 33.609100 24.517100 1578 75.682700 67.461400 64.749100 43.318500 40.855600 28.063000 1579 60.626700 9.2665900 13.645000 19.153000 9.9829200 1.3332700 1580 64.124000 9.4339700 55.596800 24.810600 13.014200 17.872200 1581 80.156400 11.651600 72.537300 43.318500 22.508700 33.752900 1582 91.841800 12.713800 73.054300 58.663100 30.157800 34.356900 1583 50.005200 19.812800 20.445700 12.924100 7.9121800 2.5475500 1584 67.523400 38.364800 18.104800 26.450300 18.349600 2.6219000 1585 93.362100 69.194000 28.393800 62.301300 51.121900 6.9306700 1586 94.210600 84.682800 26.440900 68.072800 67.213900 8.1437100 1587 49.431400 48.496900 54.246800 17.747300 17.820300 17.978000 1588 50.145200 60.116500 61.400700 21.122400 25.254300 24.406200 1589 64.561100 67.415500 76.485300 35.287600 37.050300 40.890000 1590 64.708200 74.751400 76.672100 37.353900 43.574400 41.849200 1591 5.9247100 31.846100 9.4755700 1.8204900 4.5177200 1.2783200 1592 11.122100 33.719500 5.1977600 2.3118100 5.1952300 0.9699440 1593 93.414300 57.839300 10.789000 59.324300 42.498800 2.6823500 1594 93.797300 66.615700 11.787300 61.758700 49.015100 3.4914300 1595 16.279400 11.811700 4.4470100 1.7132300 1.5581100 0.4659960 1596 20.748600 7.8170200 6.0396900 2.3119900 1.5907500 0.5652160 1597 20.205500 23.342800 6.5584100 2.7700500 3.3791800 0.8141620 1598 22.624300 26.792600 29.322600 4.1045400 4.6678300 4.8563800 1599 29.571000 22.638400 22.005900 5.0781000 4.4395100 2.9135400 1600 33.835300 28.474600 30.926000 7.0585200 6.4463500 5.3939700 1601 41.422200 34.876500 34.182800 10.490000 9.5931700 6.7021400 1602 61.053100 44.408600 39.900000 23.092800 18.758300 9.4300000 1603 79.539700 54.442700 49.771000 42.791900 32.790500 15.318100 1604 89.382700 57.321000 50.656800 55.826700 40.689000 16.077500 1605 98.230300 58.403000 53.855900 69.757300 48.164400 18.323800 1606 82.089800 28.322200 24.993000 40.907400 23.064600 3.7194600 1607 83.552800 56.398400 64.766400 50.015700 37.500800 27.202000 1608 94.094800 60.418200 88.703000 70.671600 50.301800 57.609700 1609 93.271400 70.380900 93.700500 73.195400 58.197400 66.829300 1610 39.273300 23.011300 45.957300 9.7822700 6.9377800 11.793200 1611 49.940600 21.816800 48.584100 14.905900 9.3084200 13.300900 1612 49.342500 22.779000 55.787200 15.507200 9.8134500 18.195900 1613 50.596800 34.711900 60.585800 17.702200 13.324600 22.353300 1614 60.299700 38.096700 66.158700 25.137100 17.978700 27.584700 1615 68.870900 51.045400 71.392900 34.714300 27.487700 33.682200 1616 71.677700 55.781000 68.626300 37.572400 31.109500 31.002000 1617 72.383500 59.898400 79.145800 41.246100 35.314300 43.675100 1618 67.344100 36.068700 55.459900 28.903800 19.138800 18.312400 1619 70.417000 35.409200 64.631300 32.996800 21.089100 26.014900 1620 83.534300 38.765100 86.127000 52.223700 31.865300 52.375500 1621 40.851400 33.469600 44.399100 10.953200 9.5354600 11.212800 1622 39.902200 38.004800 44.804200 11.031200 10.778300 11.587800 1623 39.901700 44.494400 71.654400 15.665400 15.473500 33.626100 1624 5.1567300 16.178100 23.750000 1.2981300 1.7801800 3.1912400 1625 9.7091100 27.264300 76.943600 8.6211300 7.4658600 39.292800 1626 12.868400 34.233700 93.300600 13.815600 11.878400 63.881300 1627 2.5867200 37.267500 87.209700 11.480400 11.389700 53.978800 1628 14.456900 42.672600 94.059200 15.085900 15.001300 65.535900 1629 9.4530200 82.560000 92.517900 22.733900 43.625200 66.141100 1630 14.524300 79.376300 27.014600 11.775100 34.445700 7.6305800 1631 35.539300 93.917100 28.064800 21.597100 54.458700 9.9216700 1632 30.025800 67.105800 28.820700 11.392900 24.588200 6.8612600 1633 38.033900 73.313300 43.297700 16.514900 31.755300 13.209100 1634 19.530800 43.741700 24.753900 4.8898300 9.4812200 4.2095400 1635 21.643500 54.964300 29.929900 7.1422300 15.361300 6.2521900 1636 31.494700 81.213700 51.370900 17.605600 39.156700 18.823400 1637 84.315000 81.163900 89.974100 62.876200 62.014300 61.709600 1638 57.920600 49.202600 65.567200 24.712300 21.678700 27.524900 1639 59.679300 50.301000 78.176300 28.651600 24.289200 41.777400 1640 60.531500 75.256300 91.573600 38.178600 44.702000 63.678200 1641 59.785400 80.491300 92.678300 39.554500 49.968600 66.159400 1642 11.051600 82.705300 18.728600 12.160300 37.709000 6.2114700 1643 27.785800 86.622700 27.759100 16.555900 43.827600 8.7616300 1644 81.379700 90.781900 27.183400 53.058300 66.311700 9.1974200 1645 72.697800 78.618100 23.642600 39.273900 47.301000 6.7028600 1646 71.028500 82.967700 28.092500 39.262600 51.341100 8.3708300 1647 74.776300 93.757300 44.252500 48.147800 67.436500 16.355300 1648 29.670900 36.563700 35.489600 6.8135400 8.2355000 7.2514100 1649 29.928000 43.585700 36.301000 7.6941300 10.859100 7.8583700 1650 32.760400 43.629900 43.830800 9.1121100 11.621900 11.308900 1651 35.952700 53.147700 54.033800 12.603100 17.338500 18.096700 1652 55.704300 52.688700 87.969900 28.838200 25.654500 55.917400 1653 36.398800 30.684500 55.788900 10.374200 8.7161400 18.385900 1654 60.343600 29.358100 75.159800 26.194600 16.497000 37.147200 1655 62.121600 39.119100 75.220700 28.379200 20.017100 37.542800 1656 47.258000 65.396800 54.457400 19.741800 27.735600 19.307600 1657 55.062800 68.730900 60.479300 25.782800 33.052200 24.339800 1658 92.539300 86.123500 72.806500 71.512800 70.801300 38.597500 1659 95.201700 85.758000 90.790900 79.903400 74.913400 63.646400 1660 3.8167300 9.7946700 35.050700 1.6291600 1.4593100 6.5276000 1661 10.658300 4.2803900 41.055600 2.4902500 1.5977100 9.0401100 1662 9.2704800 12.779000 61.924100 5.0633600 3.6043000 23.052500 1663 49.785200 93.731400 68.905500 32.260500 59.850600 35.428500 1664 52.919100 35.918200 20.786400 15.666100 12.361900 3.0224900 1665 62.464600 42.534900 21.641900 22.875300 17.912500 3.4582600 1666 73.445500 58.037500 35.922200 35.658400 31.033000 8.5527900 1667 95.374900 64.689600 80.534500 71.374600 53.083700 45.913900 1668 46.382500 33.177500 34.069300 12.562300 10.192500 6.6050900 1669 53.026600 33.422200 33.088800 16.106900 11.992300 6.2617600 1670 71.231000 44.826500 38.042000 31.591500 23.084400 8.6335800 1671 89.677400 81.254600 39.250700 61.124100 60.534800 12.178100 1672 100.00000 88.171300 42.767100 79.684300 76.638700 14.756700 1673 37.539300 56.291500 6.4897600 10.800000 17.777100 2.1857900 1674 38.110200 69.303300 7.4717100 13.793700 27.258200 3.3240000 1675 74.557500 74.689400 9.7329000 39.593100 44.092500 4.0683800 1676 85.114400 81.921800 11.335400 53.954100 57.530100 5.0716300 1677 40.871200 63.609100 81.798400 21.560400 27.887700 47.559900 1678 40.491000 64.805600 92.046700 24.508900 30.324700 63.468900 1679 32.439200 56.530400 91.583200 19.926500 23.242900 62.049700 1680 32.199100 82.668100 93.747100 27.129600 45.924500 68.284400 1681 7.4398100 40.391800 63.612300 6.9738700 9.6907200 25.252600 1682 12.167300 50.628800 91.542900 15.132600 18.054700 61.609400 1683 21.086300 76.203600 90.705600 21.643300 37.325600 62.332800 1684 6.7763500 12.754100 15.588800 1.0330800 1.3139500 1.6324100 1685 5.5138300 6.9410400 11.690300 0.7184730 0.7640640 1.0818100 1686 11.492700 49.659700 8.5351500 4.2231800 11.418700 1.9467500 1687 25.471000 58.860300 9.5279900 7.9021900 17.728400 2.6305300 1688 32.368200 66.888600 16.152300 11.499300 24.453400 4.0866800 1689 40.946000 85.653000 30.019900 20.523800 44.791100 9.2919700 1690 70.321600 91.823500 50.780800 43.687100 63.031100 19.892200 1691 96.537100 93.266600 77.154100 81.289900 83.582800 44.875900 1692 52.438500 52.110500 45.087400 18.942500 19.898700 12.429700 1693 51.804000 57.235700 49.638800 19.927700 22.953100 15.423200 1694 51.166500 57.502100 74.096000 23.519000 25.171900 37.195600 1695 57.869300 57.775500 79.889200 29.046400 28.143800 44.506500 1696 66.900700 65.831400 85.237600 39.016600 37.986800 52.704900 1697 72.543000 74.936800 93.750600 49.003400 49.824800 67.384100 1698 87.666300 90.135400 94.235500 71.708700 75.637200 70.165600 1699 18.161900 75.122100 16.178700 10.582200 30.168700 4.9040700 1700 16.429000 95.265600 12.365000 17.333400 53.946400 7.0934200 1701 38.649000 96.159100 46.127700 24.982300 58.965300 17.763100 1702 32.354300 56.752100 31.380100 10.028100 17.701800 6.8320300 1703 40.151600 71.247100 30.837800 15.845800 29.760800 7.8695400 1704 65.819600 76.665900 48.520700 34.232400 43.267300 16.485400 1705 57.896100 68.557900 46.443500 25.825900 32.811300 14.436600 1706 61.073400 70.403200 77.788400 33.612700 38.378500 42.815900 1707 71.524300 70.175500 77.835900 42.423000 42.551200 42.854500 1708 84.250600 85.292300 77.091700 60.849000 64.771600 43.644100 1709 85.246600 93.200500 80.886400 66.006100 76.046500 49.769500 1710 56.655500 59.371500 64.221400 25.355600 26.952700 26.900100 1711 58.975600 66.461200 64.729700 28.533300 32.892900 27.954700 1712 13.602700 46.181600 20.256900 4.2378400 10.043200 3.3563100 1713 10.714700 71.867500 71.169400 14.299300 29.853300 35.073500 1714 14.898400 83.497900 82.651200 20.823500 43.375500 50.845600 1715 14.541100 91.023200 91.910500 26.109700 54.118900 66.272400 1716 18.369700 63.863000 62.293000 11.680100 22.868100 25.490000 1717 38.488900 86.934900 61.708800 23.266200 47.723100 27.499100 1718 48.427300 86.086600 67.536800 28.351800 49.424900 32.897500 1719 10.561300 67.688700 12.851900 7.6759500 23.112700 3.7127700 1720 21.641800 80.956400 8.6793100 12.750200 36.326000 4.6906300 1721 53.987800 83.465400 26.306400 26.166200 45.368200 7.9498200 1722 53.515400 95.268900 30.647000 30.592800 60.535000 10.910100 1723 40.624700 42.948800 56.716900 13.247500 13.539300 19.539300 1724 62.373800 43.261400 94.604300 34.206800 24.635100 66.528600 1725 46.267000 13.173800 58.833700 13.987900 7.9952400 20.433100 1726 55.834800 7.6022500 68.177900 20.783500 11.078600 28.986500 1727 77.804800 93.307600 73.604100 55.545900 70.890500 40.568200 1728 55.570000 75.063500 38.160400 25.269600 37.440700 10.987900 1729 74.447200 75.384800 37.393400 40.854000 45.376000 10.699300 1730 58.032900 52.178500 25.179500 21.126200 20.896800 4.7647000 1731 82.438700 57.108600 26.072800 44.841700 35.014100 5.3104900 1732 83.269900 74.517400 28.070800 49.957000 49.104500 7.3750200 1733 20.515500 42.428000 6.9810600 4.4085300 8.7528000 1.4524900 1734 18.539200 42.306700 34.382700 5.0909500 9.1274900 7.0645500 1735 8.5907700 28.592500 21.255700 2.0810100 3.9826300 2.8933000 1736 8.7160500 33.944100 21.830300 2.5216700 5.3847000 3.1669700 1737 10.109300 47.284900 41.690200 5.3042600 11.096700 10.413500 1738 28.883500 77.414800 59.229600 16.771800 35.415900 24.192000 1739 36.584000 94.794700 71.927700 27.489900 58.825400 38.881600 1740 36.543000 65.659000 35.635600 13.452900 24.664500 9.0437200 1741 42.061700 78.497400 39.042900 19.232000 37.394900 11.755500 1742 46.902500 92.519600 38.750500 26.375800 55.218600 13.514100 1743 29.454300 52.917500 65.260800 12.317300 17.221800 27.447500 1744 30.696500 54.348500 73.343700 14.421100 19.065100 36.102300 1745 30.712000 65.393600 84.211900 19.157600 27.896400 51.152900 1746 39.383700 78.043300 94.914900 28.443500 42.354800 69.793100 1747 12.740500 25.494100 48.036800 4.0899200 4.5492300 13.046500 1748 7.3385700 57.009800 91.046900 15.646300 21.373200 61.184800 1749 11.712000 64.722700 91.145600 17.594500 26.843700 61.943700 1750 6.1134900 73.965000 92.381900 19.829600 34.635900 64.911600 1751 34.113400 55.895900 23.469300 10.017800 17.223100 4.5975400 1752 40.993200 59.764600 20.775600 13.105900 20.821200 4.3023200 1753 50.276200 64.719800 61.580600 22.191500 28.582300 24.932700 1754 51.439100 71.392200 66.947600 25.358800 34.876900 30.580200 1755 57.577200 84.016000 70.319600 33.605200 49.962900 35.542500 1756 66.145900 87.230900 74.443300 42.080500 57.486200 40.663200 1757 94.117400 86.726100 95.689200 80.118100 76.140300 72.285100 1758 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 1759 18.036000 22.453100 74.020800 8.6412000 6.6306600 35.627900 1760 17.382500 42.773900 83.896700 12.543700 13.553000 49.232500 1761 25.792100 65.179300 92.010700 20.113000 28.401000 63.440000 1762 54.722800 40.030900 15.404900 17.011600 14.196900 2.2663900 1763 65.509800 71.618600 12.828000 30.440600 37.176000 4.0859600 1764 92.233400 72.461800 16.731200 61.018700 52.890100 4.7092100 1765 96.288200 79.531300 92.417500 80.017200 69.016300 65.597100 1766 29.903900 16.323000 23.272200 4.9416100 3.5882700 3.0848300 1767 30.243000 17.842700 41.201600 6.1909900 4.4550600 9.2460200 1768 36.778000 15.239900 49.126600 8.8763100 5.5659500 13.529400 1769 70.912100 13.748000 72.717000 33.726900 17.958000 33.980200 1770 42.356500 9.8320800 39.727600 9.9817000 5.6030300 8.4685000 1771 50.117200 9.1662500 39.083500 13.676500 7.3759600 8.1754500 1772 52.992500 10.571100 80.341900 21.677900 11.908600 43.451500 1773 60.090800 19.397100 79.579200 26.458600 15.092300 42.540900 1774 70.212800 24.048000 91.849700 38.346500 21.864700 61.120700 1775 80.321900 40.822400 92.606000 50.471600 31.783800 62.928200 1776 48.338600 52.644700 56.312500 18.075700 19.821300 19.745200 1777 51.136800 65.997400 69.661300 24.367000 30.601300 32.882400 1778 57.965400 66.918700 80.852000 31.269300 34.811900 46.541000 1779 79.958200 74.372100 88.280100 55.098500 52.238700 58.205600 1780 69.163000 53.096600 60.921200 33.455100 27.661100 23.508300 1781 69.194100 61.795500 66.329400 35.986700 33.622900 29.111500 1782 75.039500 69.706300 73.636000 44.883900 43.347700 37.665500 1783 75.071300 79.784500 74.177900 47.874300 53.042300 39.385900 1784 9.2259700 8.1691800 16.383600 1.1255300 1.0431000 1.7084900 1785 9.3827100 3.8660000 16.712400 1.0625100 0.7677690 1.7266900 1786 26.359200 9.2796900 14.857200 3.6065800 2.3290200 1.4955600 1787 42.054700 18.578900 15.848300 8.9038100 5.7700600 1.7467200 1788 44.611700 68.710400 25.302000 16.823600 28.366400 6.0587100 1789 51.843900 69.232800 26.512500 20.740400 30.672600 6.4175700 1790 93.939100 71.814200 40.633000 64.658700 54.286200 11.752800 1791 27.189100 3.5708500 51.216400 6.0698500 3.4010600 14.756200 1792 43.840200 8.6472700 68.679400 14.382500 7.9939800 29.514900 1793 68.437300 14.949300 81.057400 33.375100 18.042200 44.472500 1794 71.630200 86.004600 92.824100 51.358300 61.156200 67.118600 1795 40.345000 66.089300 46.173100 15.854100 26.202600 14.060400 1796 49.379700 80.104800 59.464700 25.508400 42.109900 24.701400 1797 48.699200 67.709500 48.035700 20.259300 29.488500 15.284700 1798 57.642500 77.877600 59.813800 29.868300 42.274400 24.730300 1799 58.672300 88.448900 67.278500 35.371900 55.369300 32.964500 1800 9.3320300 13.724200 88.290900 10.851300 6.9883200 55.128900 1801 18.881200 8.4930200 94.149900 13.570000 8.0852000 64.882500 1802 46.056800 13.069900 93.307400 21.604200 12.346300 63.448700 1803 63.513000 9.0352900 88.213400 30.972600 16.548400 54.960900 1804 93.493800 28.699800 91.959000 66.655500 36.636600 61.415300 1805 70.489700 11.304800 36.304000 28.429200 14.771300 7.0286000 1806 70.112800 14.347400 54.605600 29.983200 15.930200 17.192700 1807 81.627800 25.429700 57.693800 43.057300 23.825300 19.719300 1808 86.320400 46.929700 59.769300 51.253800 33.755100 22.180300 1809 76.426600 37.577400 19.616300 35.038700 22.356600 2.8595300 1810 91.200900 40.351600 19.704500 53.756400 32.404700 2.9855300 1811 93.023800 51.556300 38.608600 58.916800 39.290000 9.2387300 1812 59.359000 27.667300 34.808600 19.918900 12.644500 6.7233400 1813 65.373300 40.923900 63.665400 28.951400 20.684600 25.323800 1814 82.527600 45.369000 71.585500 48.328800 31.880900 33.591200 1815 93.896900 44.311400 89.064000 67.887400 41.461800 57.200900 1816 53.299000 19.436100 34.008400 15.459600 9.1665100 6.2592700 1817 72.262600 31.528200 41.032800 31.482200 19.171400 9.4638400 1818 73.192700 51.963200 56.657300 36.478400 28.575000 19.967600 1819 79.007600 71.505600 55.124500 46.499600 45.230100 20.362500 1820 80.575700 78.125000 61.626000 51.107000 52.973300 26.310900 1821 32.409000 33.735200 22.534900 6.6270900 7.3575600 3.3100900 1822 34.803600 38.600900 42.552500 9.0667200 9.9679900 10.443400 1823 35.568800 49.450800 44.924300 10.879600 14.753300 12.186300 1824 37.854100 56.362200 49.314700 13.254600 19.206000 15.160500 1825 40.164900 63.352000 57.106700 16.481700 24.851400 21.122300 1826 81.043400 66.188200 92.487100 55.518300 46.515600 64.340000 1827 23.043800 6.1898800 26.298800 3.2603800 2.0103900 3.7174200 1828 53.852100 7.3508000 30.436500 15.214900 7.9811000 4.9113800 1829 64.127400 19.212100 33.453700 22.981600 12.840800 6.0556400 1830 63.469900 17.721600 39.360800 22.821700 12.620500 8.3962400 1831 67.892900 21.201400 48.431400 27.511300 15.429900 13.196400 1832 79.972000 75.811200 51.063700 48.277500 49.488600 17.992700 1833 80.159300 83.726900 50.575100 50.922300 57.967900 18.622200 1834 27.811800 36.157000 14.386100 5.3660500 7.3379800 1.9773200 1835 28.462400 42.462400 15.076500 6.2020300 9.6600500 2.3237200 1836 85.417700 65.673700 10.767300 49.835500 42.512300 3.2981900 1837 94.506200 77.863400 9.8722400 65.798600 59.671600 4.4339500 1838 94.162600 85.818900 10.244400 67.890800 68.236100 5.4648000 1839 94.142000 94.796300 8.6362100 71.306500 79.951900 6.6365600 1840 69.315500 29.253900 6.5460700 27.024100 16.371800 0.9512180 1841 78.672600 33.164200 10.766500 36.869800 22.088400 1.4466900 1842 96.606700 36.846000 7.8779800 61.283300 35.056800 1.3012400 1843 22.807100 12.719400 71.191700 8.4750200 5.4095600 32.252500 1844 30.989300 23.903400 92.332000 16.114700 10.903300 61.938000 1845 49.431100 54.252400 92.317700 26.687300 25.442300 63.144500 1846 56.967200 69.728100 92.015300 34.341500 38.541700 63.860900 1847 28.855100 32.772600 78.722900 12.480900 10.553600 41.724300 1848 30.206200 38.664800 92.297800 17.030300 14.642900 62.313700 1849 5.9350800 26.471800 34.173000 2.4012200 3.7941700 6.4591700 1850 9.9125900 26.781500 38.525900 3.0289800 4.1834200 8.2029100 1851 9.9340400 42.751100 43.052300 4.8324200 9.2043800 10.869300 1852 10.086700 47.441900 52.861900 6.4951400 11.837700 16.947200 1853 8.4932200 93.826600 55.336700 18.884800 53.205600 23.364600 1854 41.519800 92.769700 57.208400 26.023000 55.493500 24.622000 1855 50.627100 81.550100 48.900300 25.290600 43.235400 17.292500 1856 68.280400 85.906700 54.762400 40.095900 54.867400 21.784700 1857 70.625100 85.412000 64.662100 43.544200 56.176800 29.986500 1858 38.435900 37.284800 30.648100 9.3288000 9.6498800 5.5806200 1859 49.482300 43.719900 31.442900 15.055800 14.507400 6.1048900 1860 59.100500 50.354700 39.334700 22.452400 20.802300 9.4876000 1861 61.222500 57.420500 39.676700 25.200300 25.573000 10.090400 1862 61.836900 56.806000 50.542900 26.611700 26.027000 15.967900 1863 64.784300 64.263000 56.428700 31.168000 32.651500 20.674800 1864 68.100100 70.233500 57.221100 35.510700 38.891500 21.826000 1865 80.738900 72.622300 72.481100 51.682900 48.867600 36.621700 1866 82.833900 77.495300 79.716400 57.173600 55.694300 46.082900 1867 24.262500 19.408400 30.501800 4.1004100 3.5514400 5.0699300 1868 23.411300 17.634700 37.922900 4.3493500 3.5037800 7.7701200 1869 23.699000 17.912100 56.286100 6.3392000 4.6666300 18.488900 1870 13.701900 17.582600 30.449200 2.3956700 2.4968400 5.0248300 1871 9.5759500 14.829000 47.908100 3.3037000 2.7720500 12.786900 1872 4.0547400 20.128300 53.208100 3.7156000 3.6113300 16.282400 1873 25.428500 29.234400 55.177700 7.1572900 6.8225700 17.891500 1874 31.456500 42.592800 82.637900 15.101200 14.725200 47.419800 1875 40.952000 53.775100 91.242600 22.307100 23.028400 61.296400 1876 49.449400 71.725500 91.318200 30.140100 37.941400 62.880900 1877 16.853500 14.344200 23.727100 2.3416800 2.1171800 3.1625000 1878 12.371100 33.788000 42.886200 4.1364700 6.2444300 10.439900 1879 1.9216800 34.499200 45.966900 3.6789500 6.2190100 12.100200 1880 10.922100 43.033300 54.037600 6.1508700 10.045100 17.556600 1881 9.4445700 62.351900 67.485600 11.239100 21.786200 30.311900 1882 24.487800 60.749300 63.325200 12.266800 21.282400 26.173600 1883 24.231700 64.740000 72.737500 14.799500 25.113800 36.177000 1884 27.146900 70.010600 84.089100 19.333100 31.178700 51.395500 1885 8.3504900 3.4707700 7.3978000 0.7808680 0.5908070 0.6460830 1886 2.7777800 0.0000000 0.0000000 0.2003350 0.0986703 0.0000000 1887 81.240100 12.487900 18.836500 38.933500 19.966600 2.1514300 1888 92.309200 18.642700 16.865400 53.711000 27.848700 1.9024500 1889 92.789700 15.732200 31.925200 54.957800 28.196500 5.4776400 1890 90.870700 29.362800 49.314200 54.336600 30.029900 13.919100 1891 92.761500 34.896200 58.493500 58.696300 33.538100 20.622600 1892 71.951300 30.232400 75.371600 36.109100 21.565000 37.427600 1893 89.634800 31.175400 83.035400 58.755700 33.065200 47.566700 1894 32.742900 6.8041600 29.598800 5.7831200 3.3005600 4.6494200 1895 40.698200 38.318000 82.580300 17.760600 14.686500 47.160400 1896 47.123300 38.211700 92.049700 23.276500 17.580700 61.873200 1897 75.630600 50.053800 91.564300 46.169500 33.090900 61.612100 1898 83.581000 57.387100 95.057400 57.568000 42.319000 68.150900 1899 84.416700 74.982000 94.992600 62.673900 56.626000 69.590200 1900 20.987700 17.037700 15.034700 2.7797800 2.5778300 1.6060600 1901 32.000400 32.259800 11.571600 6.0715800 6.7091200 1.5048400 1902 38.174600 40.597600 10.001100 8.8449600 10.343200 1.6402900 1903 40.932800 53.338100 12.722300 11.696200 16.762600 2.5978500 1904 51.449500 52.262000 7.2423400 16.520000 18.627100 1.9896200 1905 78.674500 58.312200 12.592600 40.234300 33.356100 2.9170700 1906 81.894400 69.858700 5.7325000 46.387000 43.711100 3.2308200 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 96.41600 99.99690 82.48800 1 0.000000 67.45460 100.0000 20.21840 30.18340 78.23010 2 100.0000 0.000000 69.46800 70.45640 35.13010 30.27950 3 0.000000 0.000000 70.02640 5.542030 3.166550 30.87730 4 100.0000 65.46120 0.000000 71.18840 52.87630 2.349460 5 0.000000 49.64810 0.000000 3.227580 10.91320 1.229660 6 100.0000 4.373660 4.349220 65.17320 32.35370 0.397234 7 3.095820 3.216760 3.448330 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 96.4160 99.9969 82.4880 1 0.00000 100.000 100.000 31.3944 67.9720 82.4880 2 100.000 0.00000 100.000 78.6094 39.7885 75.7040 3 0.00000 0.00000 100.000 13.5878 7.76364 75.7040 4 100.000 100.000 0.00000 82.8282 92.2333 6.78405 5 0.00000 100.000 0.00000 17.8066 60.2084 6.78405 6 100.000 0.00000 0.00000 65.0216 32.0249 0.00000 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 17.7583 18.4178 15.1930 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s37-g109-m0-f1906-cRec709_Gamma22.ti1000644 000765 000000 00000444726 12261120515 024273 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1683" CREATED "Wed Dec 18 02:40:57 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "109" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "37" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1906 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 2 61.91710000 0.000000000 15.48480000 14.66820000 7.527410000 2.244520000 3 81.29090000 0.000000000 21.14620000 26.74190000 13.71780000 4.343140000 4 100.0000000 0.000000000 23.52620000 41.98730000 21.55920000 5.874010000 5 100.0000000 0.000000000 31.62950000 42.67420000 21.83400000 9.491370000 6 100.0000000 0.000000000 47.47550000 44.74570000 22.66260000 20.40020000 7 100.0000000 35.90090000 62.95470000 51.52010000 31.38560000 37.53850000 8 100.0000000 36.79540000 75.08590000 54.81710000 33.03900000 53.87030000 9 100.0000000 44.77640000 100.0000000 65.39710000 40.69830000 99.02170000 10 25.30100000 0.000000000 85.15590000 14.68420000 6.105950000 66.85150000 11 40.31260000 0.000000000 100.0000000 23.64220000 10.10340000 95.31640000 12 46.36090000 26.90050000 100.0000000 27.64690000 15.12530000 96.07470000 13 52.99360000 52.65170000 100.0000000 36.97840000 29.92970000 98.44050000 14 0.000000000 15.52060000 34.11530000 2.289910000 1.866960000 9.127580000 15 41.19340000 16.33130000 40.95610000 9.063530000 5.366600000 13.84290000 16 100.0000000 22.47270000 87.16470000 55.92330000 29.28020000 72.64760000 17 49.35560000 0.000000000 75.56120000 18.47340000 8.397900000 51.73330000 18 85.51700000 0.000000000 83.99590000 41.53280000 19.99070000 66.14240000 19 100.0000000 0.000000000 100.0000000 59.28850000 28.48010000 96.98520000 20 74.65470000 61.34900000 72.77820000 42.86720000 39.18960000 52.34440000 21 73.80950000 73.80950000 73.80950000 48.73970000 51.28030000 55.84720000 22 75.32050000 75.32050000 75.32050000 50.96100000 53.61740000 58.39240000 23 22.62950000 10.78300000 0.000000000 1.837470000 1.343330000 0.162467000 24 24.50980000 0.000000000 0.000000000 1.872090000 0.965119000 0.087641100 25 25.78110000 6.998950000 9.441600000 2.295980000 1.325120000 0.661838000 26 26.66670000 0.000000000 0.000000000 2.253630000 1.161810000 0.105503000 27 33.68790000 0.000000000 0.000000000 3.768040000 1.942540000 0.176399000 28 36.23190000 0.000000000 0.000000000 4.422290000 2.279820000 0.207027000 29 38.88890000 0.000000000 0.000000000 5.167010000 2.663750000 0.241891000 30 41.66670000 0.000000000 0.000000000 6.013600000 3.100190000 0.281524000 31 44.57360000 0.000000000 0.000000000 6.975070000 3.595850000 0.326535000 32 51.22510000 0.000000000 10.49990000 9.597940000 4.933350000 1.112260000 33 50.81300000 0.000000000 0.000000000 9.304160000 4.796570000 0.435570000 34 54.16670000 0.000000000 0.000000000 10.70830000 5.520450000 0.501305000 35 57.69230000 0.000000000 0.000000000 12.30120000 6.341650000 0.575877000 36 61.40350000 0.000000000 0.000000000 14.10890000 7.273550000 0.660502000 37 65.31530000 0.000000000 0.000000000 16.16140000 8.331700000 0.756591000 38 69.44440000 0.000000000 0.000000000 18.49390000 9.534160000 0.865784000 39 73.80950000 0.000000000 0.000000000 21.14720000 10.90200000 0.989997000 40 78.43140000 0.000000000 0.000000000 24.16920000 12.45990000 1.131470000 41 83.33330000 0.000000000 0.000000000 27.61630000 14.23700000 1.292850000 42 88.54170000 0.000000000 0.000000000 31.55500000 16.26760000 1.477230000 43 100.0000000 34.88010000 42.98180000 47.58370000 29.44140000 17.94810000 44 100.0000000 49.95580000 62.99440000 55.54250000 39.41650000 38.92410000 45 100.0000000 81.94110000 72.81640000 73.29760000 71.00650000 56.93650000 46 100.0000000 100.0000000 92.50360000 92.20310000 98.86290000 93.93570000 47 7.826890000 7.826890000 7.826890000 0.350504000 0.368774000 0.401616000 48 9.887010000 0.000000000 0.000000000 0.254232000 0.131064000 0.011901800 49 0.000000000 1.282050000 0.000000000 0.002467370 0.004935110 0.000822559 50 0.000000000 2.501880000 0.000000000 0.010735000 0.021471500 0.003578770 51 0.000000000 2.604170000 0.000000000 0.011723900 0.023449600 0.003908460 52 0.000000000 3.968250000 0.000000000 0.029605900 0.059216200 0.009869850 53 0.000000000 5.376340000 0.000000000 0.057733500 0.115476000 0.019246900 54 12.04240000 12.04240000 12.04240000 0.904105000 0.951231000 1.035950000 55 0.000000000 16.66670000 0.000000000 0.695088000 1.390280000 0.231725000 56 10.43720000 18.42930000 0.000000000 1.153470000 1.881930000 0.302470000 57 0.000000000 20.44030000 0.000000000 1.088860000 2.177890000 0.362999000 58 0.000000000 22.43590000 0.000000000 1.336430000 2.673060000 0.445533000 59 0.000000000 24.50980000 0.000000000 1.623270000 3.246770000 0.541155000 60 0.000000000 26.66670000 0.000000000 1.954090000 3.908470000 0.651443000 61 0.000000000 28.91160000 0.000000000 2.334230000 4.668800000 0.778172000 62 0.000000000 31.25000000 0.000000000 2.769680000 5.539770000 0.923340000 63 0.000000000 33.68790000 0.000000000 3.267220000 6.534910000 1.089210000 64 0.000000000 36.23190000 0.000000000 3.834500000 7.669580000 1.278330000 65 0.000000000 38.88890000 0.000000000 4.480240000 8.961140000 1.493600000 66 0.000000000 41.66670000 0.000000000 5.214310000 10.42940000 1.738320000 67 0.000000000 44.57360000 0.000000000 6.047990000 12.09690000 2.016240000 68 0.000000000 47.61900000 0.000000000 6.994140000 13.98930000 2.331670000 69 0.000000000 50.81300000 0.000000000 8.067510000 16.13620000 2.689500000 70 0.000000000 54.16670000 0.000000000 9.285030000 18.57140000 3.095390000 71 0.000000000 57.69230000 0.000000000 10.66620000 21.33400000 3.555850000 72 0.000000000 61.40350000 0.000000000 12.23360000 24.46910000 4.078380000 73 0.000000000 65.31530000 0.000000000 14.01340000 28.02880000 4.671700000 74 0.000000000 69.44440000 0.000000000 16.03580000 32.07400000 5.345930000 75 0.000000000 73.80950000 0.000000000 18.33640000 36.67560000 6.112900000 76 0.000000000 78.43140000 0.000000000 20.95680000 41.91670000 6.986460000 77 0.000000000 83.33330000 0.000000000 23.94570000 47.89500000 7.982890000 78 0.000000000 88.54170000 0.000000000 27.36090000 54.72590000 9.121430000 79 24.89060000 100.0000000 22.92360000 38.40120000 72.80120000 15.73600000 80 68.11090000 100.0000000 24.05910000 54.26580000 80.97070000 16.89280000 81 100.0000000 23.63880000 0.000000000 42.73760000 24.25810000 2.430320000 82 100.0000000 20.89950000 24.38940000 43.19240000 23.87080000 6.580420000 83 100.0000000 90.75290000 31.39940000 71.53750000 79.60150000 19.00080000 84 100.0000000 100.0000000 32.71420000 78.54200000 93.39810000 21.99390000 85 100.0000000 100.0000000 55.73350000 81.98610000 94.77580000 40.13130000 86 9.887010000 9.887010000 9.887010000 0.585950000 0.616492000 0.671396000 87 2.604170000 0.000000000 0.000000000 0.013521100 0.006970520 0.000632984 88 0.000000000 6.830600000 0.000000000 0.097742800 0.195500000 0.032585000 89 0.000000000 0.000000000 1.282050000 0.001245510 0.000498236 0.006559090 90 9.363300000 9.363300000 9.363300000 0.519852000 0.546949000 0.595659000 91 0.000000000 0.000000000 14.88100000 0.273471000 0.109395000 1.440150000 92 0.000000000 0.000000000 18.51850000 0.442367000 0.176958000 2.329590000 93 0.000000000 0.000000000 20.44030000 0.549649000 0.219874000 2.894550000 94 0.000000000 0.000000000 22.43590000 0.674621000 0.269866000 3.552680000 95 0.000000000 0.000000000 24.50980000 0.819411000 0.327786000 4.315170000 96 0.000000000 0.000000000 26.66670000 0.986409000 0.394589000 5.194610000 97 0.000000000 9.272800000 28.15710000 1.303170000 0.827632000 5.918400000 98 0.000000000 0.000000000 28.91160000 1.178300000 0.471350000 6.205140000 99 0.000000000 9.666790000 36.11500000 2.131710000 1.188430000 10.19120000 100 0.000000000 0.000000000 36.23190000 1.935630000 0.774301000 10.19340000 101 0.000000000 0.000000000 41.66670000 2.632140000 1.052920000 13.86140000 102 0.000000000 0.000000000 44.57360000 3.052980000 1.221270000 16.07750000 103 0.000000000 0.000000000 47.61900000 3.530580000 1.412320000 18.59270000 104 0.000000000 0.000000000 50.81300000 4.072410000 1.629070000 21.44610000 105 0.000000000 0.000000000 54.16670000 4.687010000 1.874920000 24.68270000 106 0.000000000 0.000000000 57.69230000 5.384230000 2.153830000 28.35430000 107 0.000000000 10.86410000 60.56390000 6.262470000 2.939120000 31.64150000 108 0.000000000 0.000000000 61.40350000 6.175440000 2.470330000 32.52100000 109 0.000000000 0.000000000 65.31530000 7.073830000 2.829720000 37.25210000 110 0.000000000 0.000000000 69.44440000 8.094750000 3.238110000 42.62840000 111 0.000000000 0.000000000 73.80950000 9.256090000 3.702670000 48.74430000 112 0.000000000 0.000000000 78.43140000 10.57880000 4.231800000 55.71000000 113 0.000000000 0.000000000 83.33330000 12.08760000 4.835350000 63.65560000 114 0.000000000 0.000000000 88.54170000 13.81160000 5.524990000 72.73430000 115 0.000000000 0.000000000 94.08600000 15.78530000 6.314530000 83.12830000 116 0.000000000 0.000000000 100.0000000 18.05000000 7.220460000 95.05460000 117 24.50700000 100.0000000 100.0000000 55.67890000 79.70520000 107.0630000 118 8.845440000 8.845440000 8.845440000 0.458710000 0.482620000 0.525601000 119 0.000000000 0.000000000 6.830600000 0.049339800 0.019737200 0.259832000 120 6.830600000 0.000000000 0.000000000 0.112726000 0.058113400 0.005277200 121 0.000000000 0.000000000 3.968250000 0.014944800 0.005978310 0.078702200 122 0.000000000 9.887010000 0.000000000 0.220441000 0.440915000 0.073489400 123 3.968250000 0.000000000 0.000000000 0.034144100 0.017602300 0.001598440 124 0.000000000 0.000000000 8.333330000 0.076405000 0.030564000 0.402363000 125 0.000000000 8.333330000 0.000000000 0.151359000 0.302741000 0.050459300 126 0.423012000 0.423012000 0.423012000 0.000572483 0.000602324 0.000655965 127 0.850340000 0.850340000 0.850340000 0.002658610 0.002797190 0.003046300 128 1.282050000 1.282050000 1.282050000 0.006558480 0.006900330 0.007514860 129 1.718210000 1.718210000 1.718210000 0.012487700 0.013138600 0.014308700 130 2.158890000 2.158890000 2.158890000 0.020632100 0.021707500 0.023640800 131 2.604170000 2.604170000 2.604170000 0.031163200 0.032787600 0.035707500 132 3.054100000 3.054100000 3.054100000 0.044244600 0.046550800 0.050696500 133 3.508770000 3.508770000 3.508770000 0.060035900 0.063165200 0.068790500 134 3.968250000 3.968250000 3.968250000 0.078694900 0.082796800 0.090170500 135 4.432620000 4.432620000 4.432620000 0.100379000 0.105612000 0.115017000 136 4.901960000 4.901960000 4.901960000 0.125248000 0.131776000 0.143512000 137 5.376340000 5.376340000 5.376340000 0.153460000 0.161459000 0.175839000 138 0.000000000 0.000000000 5.376340000 0.029143400 0.011658100 0.153475000 139 5.855860000 5.855860000 5.855860000 0.185180000 0.194833000 0.212184000 140 0.000000000 13.15790000 0.000000000 0.413298000 0.826656000 0.137783000 141 6.830600000 6.830600000 6.830600000 0.259808000 0.273351000 0.297695000 142 8.333330000 0.000000000 0.000000000 0.174561000 0.089991300 0.008171990 143 7.326010000 7.326010000 7.326010000 0.303059000 0.318856000 0.347253000 144 12.59690000 12.59690000 12.59690000 0.998196000 1.050230000 1.143760000 145 13.15790000 13.15790000 13.15790000 1.098580000 1.155840000 1.258780000 146 13.72550000 13.72550000 13.72550000 1.205500000 1.268340000 1.381290000 147 14.29980000 14.29980000 14.29980000 1.319220000 1.387990000 1.511600000 148 14.88100000 14.88100000 14.88100000 1.440010000 1.515070000 1.650000000 149 15.46910000 15.46910000 15.46910000 1.568150000 1.649890000 1.796820000 150 16.06430000 16.06430000 16.06430000 1.703910000 1.792730000 1.952380000 151 16.66670000 16.66670000 16.66670000 1.847600000 1.943910000 2.117030000 152 17.27640000 17.27640000 17.27640000 1.999530000 2.103750000 2.291100000 153 17.89370000 17.89370000 17.89370000 2.160010000 2.272600000 2.474990000 154 18.51850000 18.51850000 18.51850000 2.329370000 2.450790000 2.669050000 155 19.15110000 19.15110000 19.15110000 2.507970000 2.638690000 2.873690000 156 19.79170000 19.79170000 19.79170000 2.696150000 2.836680000 3.089310000 157 20.44030000 20.44030000 20.44030000 2.894280000 3.045150000 3.316340000 158 21.09700000 21.09700000 21.09700000 3.102760000 3.264490000 3.555220000 159 21.76220000 21.76220000 21.76220000 3.321980000 3.495130000 3.806400000 160 22.43590000 22.43590000 22.43590000 3.552350000 3.737510000 4.070370000 161 23.11830000 23.11830000 23.11830000 3.794300000 3.992080000 4.347600000 162 23.80950000 23.80950000 23.80950000 4.048290000 4.259300000 4.638630000 163 24.50980000 24.50980000 24.50980000 4.314770000 4.539670000 4.943970000 164 25.21930000 25.21930000 25.21930000 4.594230000 4.833700000 5.264180000 165 25.93820000 25.93820000 25.93820000 4.887180000 5.141920000 5.599840000 166 27.40490000 27.40490000 27.40490000 5.515630000 5.803130000 6.319940000 167 28.15320000 28.15320000 28.15320000 5.852240000 6.157290000 6.705640000 168 28.91160000 28.91160000 28.91160000 6.204570000 6.527980000 7.109340000 169 29.68040000 29.68040000 29.68040000 6.573210000 6.915830000 7.531740000 170 30.45980000 30.45980000 30.45980000 6.958810000 7.321530000 7.973570000 171 31.25000000 31.25000000 31.25000000 7.362030000 7.745770000 8.435590000 172 32.05130000 32.05130000 32.05130000 7.783570000 8.189280000 8.918600000 173 33.68790000 33.68790000 33.68790000 8.684520000 9.137200000 9.950930000 174 34.52380000 34.52380000 34.52380000 9.165470000 9.643220000 10.50200000 175 35.37170000 35.37170000 35.37170000 9.667820000 10.17180000 11.07760000 176 36.23190000 36.23190000 36.23190000 10.19240000 10.72370000 11.67870000 177 37.10460000 37.10460000 37.10460000 10.74020000 11.30000000 12.30630000 178 37.99020000 37.99020000 37.99020000 11.31200000 11.90160000 12.96150000 179 38.88890000 38.88890000 38.88890000 11.90880000 12.52960000 13.64540000 180 39.80100000 39.80100000 39.80100000 12.53180000 13.18500000 14.35920000 181 40.72680000 40.72680000 40.72680000 13.18180000 13.86890000 15.10400000 182 41.66670000 41.66670000 41.66670000 13.86010000 14.58250000 15.88120000 183 42.62090000 42.62090000 42.62090000 14.56770000 15.32700000 16.69200000 184 43.58970000 43.58970000 43.58970000 15.30590000 16.10380000 17.53790000 185 44.57360000 44.57360000 44.57360000 16.07600000 16.91400000 18.42030000 186 45.57290000 45.57290000 45.57290000 16.87930000 17.75910000 19.34070000 187 46.58790000 46.58790000 46.58790000 17.71710000 18.64060000 20.30070000 188 47.61900000 47.61900000 47.61900000 18.59100000 19.56000000 21.30200000 189 75.99960000 78.32660000 51.11640000 47.57310000 55.07020000 29.75040000 190 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 191 25.02420000 16.25630000 100.0000000 20.66760000 9.546800000 95.36570000 192 69.44660000 29.96770000 100.0000000 39.07110000 21.80740000 96.76250000 193 83.75320000 32.50570000 100.0000000 48.99360000 27.65680000 97.36870000 194 100.0000000 33.41400000 100.0000000 62.49760000 34.89870000 98.05500000 195 55.32210000 55.32210000 55.32210000 25.85300000 27.20060000 29.62300000 196 56.49720000 56.49720000 56.49720000 27.07610000 28.48740000 31.02440000 197 57.69230000 57.69230000 57.69230000 28.35170000 29.82950000 32.48600000 198 58.90800000 58.90800000 58.90800000 29.68220000 31.22940000 34.01060000 199 60.14490000 60.14490000 60.14490000 31.07010000 32.68970000 35.60090000 200 61.40350000 61.40350000 61.40350000 32.51800000 34.21290000 37.25990000 201 62.68440000 62.68440000 62.68440000 34.02840000 35.80210000 38.99060000 202 63.98810000 63.98810000 63.98810000 35.60430000 37.46020000 40.79630000 203 65.31530000 65.31530000 65.31530000 37.24860000 39.19020000 42.68040000 204 66.66670000 66.66670000 66.66670000 38.96450000 40.99560000 44.64650000 205 68.04280000 68.04280000 68.04280000 40.75530000 42.87970000 46.69840000 206 69.44440000 69.44440000 69.44440000 42.62450000 44.84630000 48.84020000 207 70.87230000 70.87230000 70.87230000 44.57560000 46.89910000 51.07590000 208 72.32700000 72.32700000 72.32700000 46.61270000 49.04240000 53.41000000 209 96.01450000 96.01450000 96.01450000 86.91360000 91.44390000 99.58770000 210 97.98530000 97.98530000 97.98530000 90.88540000 95.62280000 104.1390000 211 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 212 39.44110000 61.03100000 8.033240000 17.47120000 26.91960000 4.644850000 213 62.09970000 75.12470000 0.000000000 33.52570000 45.58430000 7.032080000 214 76.86080000 76.86080000 76.86080000 53.28110000 56.05840000 61.05080000 215 78.43140000 78.43140000 78.43140000 55.70480000 58.60840000 63.82790000 216 83.33330000 83.33330000 83.33330000 63.64960000 66.96740000 72.93130000 217 85.03400000 85.03400000 85.03400000 66.54140000 70.00980000 76.24470000 218 86.76980000 86.76980000 86.76980000 69.56510000 73.19120000 79.70940000 219 88.54170000 88.54170000 88.54170000 72.72760000 76.51850000 83.33300000 220 90.35090000 90.35090000 90.35090000 76.03590000 79.99920000 87.12370000 221 100.0000000 92.79720000 100.0000000 89.62500000 89.15770000 107.0990000 222 10.95240000 10.95240000 10.95240000 0.733841000 0.772092000 0.840853000 223 0.000000000 94.08600000 0.000000000 31.27090000 62.54650000 10.42490000 224 0.000000000 100.0000000 0.000000000 35.75730000 71.51990000 11.92060000 225 61.17380000 100.0000000 37.87450000 51.88430000 79.58730000 23.81310000 226 77.92510000 100.0000000 37.65080000 61.69100000 84.64620000 24.12800000 227 22.07720000 31.28280000 0.000000000 4.263700000 6.319470000 0.995115000 228 30.51380000 33.20580000 0.000000000 6.196330000 7.893580000 1.197110000 229 40.85400000 55.51850000 0.000000000 15.56100000 22.57480000 3.537420000 230 43.94490000 64.85260000 86.22050000 33.58420000 36.29060000 73.52240000 231 44.98050000 64.31860000 100.0000000 38.71320000 37.98560000 99.90410000 232 58.96730000 63.87070000 100.0000000 44.29780000 40.55790000 100.1060000 233 10.41670000 10.41670000 10.41670000 0.657209000 0.691466000 0.753046000 234 5.376340000 0.000000000 0.000000000 0.066583400 0.034325700 0.003117070 235 0.000000000 0.000000000 2.604170000 0.005918160 0.002367410 0.031166100 236 0.000000000 0.000000000 9.887010000 0.111277000 0.044513600 0.586004000 237 0.000000000 0.000000000 13.15790000 0.208629000 0.083457100 1.098680000 238 0.000000000 0.000000000 16.66670000 0.350875000 0.140359000 1.847770000 239 0.000000000 0.000000000 31.25000000 1.398110000 0.559281000 7.362710000 240 0.000000000 22.64600000 69.45440000 9.461410000 5.967550000 43.09660000 241 8.333330000 8.333330000 8.333330000 0.402325000 0.423296000 0.460994000 242 0.000000000 0.000000000 11.49430000 0.154978000 0.061995000 0.816140000 243 9.663620000 0.000000000 9.469470000 0.342974000 0.165124000 0.544272000 244 14.88100000 0.000000000 0.000000000 0.624794000 0.322099000 0.029249400 245 16.66670000 0.000000000 0.000000000 0.801637000 0.413267000 0.037528300 246 13.15790000 0.000000000 0.000000000 0.476651000 0.245728000 0.022314200 247 11.49430000 11.49430000 11.49430000 0.816064000 0.858602000 0.935066000 248 0.000000000 25.36030000 19.81450000 2.263050000 3.705060000 3.286570000 249 0.000000000 39.54570000 22.01780000 5.295630000 9.556300000 4.958360000 250 0.000000000 84.67100000 44.11780000 27.78390000 50.79600000 23.98560000 251 0.000000000 100.0000000 59.91280000 41.60780000 73.86030000 42.73050000 252 0.000000000 100.0000000 69.84760000 43.95580000 74.79950000 55.09520000 253 0.000000000 66.66200000 55.88970000 19.67780000 31.32400000 31.32850000 254 0.000000000 67.80820000 83.55130000 27.37390000 35.29870000 69.09520000 255 34.85020000 68.65140000 100.0000000 37.74570000 40.58750000 100.4570000 256 0.000000000 0.000000000 33.68790000 1.649260000 0.659748000 8.685330000 257 58.96750000 0.000000000 34.70460000 14.66790000 7.358350000 9.876450000 258 78.96740000 0.000000000 49.50520000 28.37940000 14.18630000 21.39940000 259 100.0000000 34.01180000 53.23880000 49.08740000 29.73850000 26.80530000 260 45.33770000 0.000000000 17.13600000 7.613680000 3.882000000 2.303110000 261 72.86580000 0.000000000 25.05740000 21.41730000 10.94190000 5.492400000 262 72.74110000 59.37150000 78.29600000 42.37940000 37.49720000 60.24490000 263 44.08080000 69.20140000 64.67330000 29.64100000 38.10550000 42.07500000 264 43.80250000 80.19680000 90.20970000 43.11100000 53.23670000 83.43310000 265 61.32920000 100.0000000 92.01900000 64.86140000 84.78760000 91.74410000 266 62.96210000 100.0000000 100.0000000 68.71580000 86.42610000 107.6730000 267 89.52580000 100.0000000 100.0000000 86.13880000 95.40820000 108.4890000 268 18.51850000 0.000000000 0.000000000 1.010670000 0.521029000 0.047314000 269 22.43590000 0.000000000 0.000000000 1.541290000 0.794582000 0.072154900 270 20.44030000 0.000000000 0.000000000 1.255770000 0.647388000 0.058788400 271 28.91160000 0.000000000 0.000000000 2.692040000 1.387820000 0.126027000 272 31.25000000 0.000000000 0.000000000 3.194240000 1.646720000 0.149537000 273 22.34210000 0.000000000 30.15320000 2.819620000 1.304310000 6.877810000 274 23.73760000 11.40410000 56.18160000 7.125590000 3.534780000 26.92930000 275 23.82150000 0.000000000 59.75290000 7.574660000 3.233160000 30.71170000 276 38.09580000 46.39040000 100.0000000 29.59150000 22.97390000 97.48720000 277 0.000000000 34.10970000 29.92730000 4.629120000 7.224750000 7.814140000 278 0.000000000 40.54640000 39.75120000 7.284310000 10.77200000 14.13570000 279 21.15880000 51.09070000 100.0000000 27.56970000 24.24970000 97.84000000 280 26.20660000 58.75550000 100.0000000 31.32230000 30.54690000 98.85770000 281 25.92130000 37.97810000 55.71000000 11.35590000 11.59210000 27.77260000 282 62.15390000 81.70290000 55.94720000 42.45090000 55.34190000 34.82410000 283 88.90800000 100.0000000 58.48830000 73.14910000 90.15550000 42.63300000 284 17.89050000 37.67320000 0.000000000 5.114810000 8.839550000 1.436690000 285 17.93500000 47.85790000 0.000000000 8.013460000 14.62970000 2.401560000 286 61.65550000 74.56310000 37.17810000 35.03580000 45.66290000 17.70540000 287 68.97530000 85.13730000 44.66330000 46.38730000 60.82450000 25.36960000 288 0.000000000 22.09860000 55.30030000 6.198090000 4.547780000 26.26390000 289 0.000000000 51.70010000 59.85560000 14.21870000 19.09760000 33.53910000 290 0.000000000 26.54220000 35.03190000 3.731510000 4.587470000 10.11040000 291 0.000000000 34.59040000 38.81730000 5.715250000 7.827160000 13.01620000 292 53.03030000 53.03030000 53.03030000 23.55600000 24.78380000 26.99100000 293 54.16670000 54.16670000 54.16670000 24.68040000 25.96680000 28.27940000 294 43.95860000 100.0000000 39.71840000 44.89150000 75.95520000 24.71310000 295 49.76010000 100.0000000 63.79000000 51.35840000 78.78700000 47.70220000 296 38.30370000 24.31400000 0.000000000 6.592450000 5.766400000 0.765654000 297 85.57310000 31.27070000 0.000000000 32.04880000 20.64000000 2.295180000 298 100.0000000 38.92660000 0.000000000 45.72830000 30.23990000 3.427340000 299 100.0000000 49.22920000 0.000000000 48.76330000 36.31040000 4.439140000 300 100.0000000 100.0000000 66.31150000 84.30910000 95.70500000 52.36420000 301 28.99490000 34.87900000 36.89350000 8.249990000 9.256200000 11.90970000 302 30.90980000 39.55790000 45.40440000 10.94930000 12.18310000 18.44060000 303 41.60480000 54.05930000 54.06080000 19.90550000 23.44760000 27.93930000 304 62.66550000 72.40420000 100.0000000 50.38190000 49.98430000 101.6050000 305 80.53010000 92.78680000 100.0000000 73.99350000 81.08820000 106.3650000 306 0.000000000 55.47730000 17.69570000 10.18660000 19.73410000 5.370500000 307 0.000000000 70.14450000 30.87550000 17.75500000 33.33400000 12.63520000 308 0.000000000 75.44880000 54.65900000 24.02520000 40.40340000 31.59410000 309 16.39920000 0.000000000 18.34130000 1.206730000 0.572077000 2.317060000 310 20.75670000 0.000000000 15.31960000 1.590430000 0.786244000 1.595960000 311 37.16500000 20.84090000 16.19190000 6.142250000 4.815520000 2.331750000 312 86.14770000 70.72340000 31.27440000 47.80210000 49.26360000 14.33100000 313 100.0000000 83.30310000 42.44820000 67.90700000 70.21320000 24.34670000 314 28.74680000 19.10300000 10.13930000 3.714350000 3.294310000 1.056650000 315 36.20720000 17.04790000 0.000000000 5.146200000 3.737580000 0.450258000 316 75.34070000 46.56770000 0.000000000 28.78310000 24.72460000 3.255670000 317 100.0000000 61.11580000 0.000000000 53.34640000 45.47730000 5.967040000 318 100.0000000 65.47210000 21.65550000 55.95000000 49.68630000 9.913520000 319 49.76950000 44.94320000 0.000000000 15.04790000 16.90120000 2.469330000 320 59.04220000 84.18600000 44.97870000 40.54530000 56.89770000 25.17010000 321 75.07070000 100.0000000 71.86960000 66.43680000 86.32780000 58.91930000 322 78.17490000 100.0000000 100.0000000 77.80300000 91.11090000 108.0990000 323 0.000000000 51.28630000 35.38170000 10.07080000 17.20350000 12.41960000 324 0.000000000 59.46950000 61.05080000 17.49990000 25.24530000 35.91270000 325 0.000000000 100.0000000 91.72330000 50.68390000 77.49090000 90.52690000 326 0.000000000 100.0000000 100.0000000 53.80730000 78.74040000 106.9750000 327 0.000000000 71.86810000 76.09960000 27.19190000 38.54740000 57.89710000 328 0.000000000 78.35560000 74.65600000 30.40340000 45.62440000 56.95370000 329 0.000000000 42.61850000 49.52480000 9.328670000 12.50020000 22.09540000 330 84.09620000 41.63030000 72.55010000 42.29190000 28.49970000 49.98780000 331 100.0000000 48.15640000 72.64310000 57.34480000 39.17370000 51.38670000 332 100.0000000 54.81730000 100.0000000 68.82060000 47.54570000 100.1630000 333 67.49210000 0.000000000 30.63890000 18.70840000 9.490100000 7.862930000 334 75.95750000 0.000000000 57.09010000 27.78570000 13.71670000 28.76200000 335 0.000000000 12.49500000 15.95380000 0.687599000 0.865318000 1.801390000 336 0.000000000 15.84340000 16.47780000 0.963999000 1.380590000 2.009330000 337 0.000000000 23.10560000 12.33880000 1.606870000 2.924160000 1.429170000 338 0.000000000 18.51850000 0.000000000 0.876336000 1.752800000 0.292148000 339 0.000000000 14.88100000 0.000000000 0.541750000 1.083580000 0.180605000 340 0.000000000 11.49430000 0.000000000 0.307013000 0.614071000 0.102350000 341 0.000000000 41.28540000 82.38010000 16.89560000 14.93520000 63.76880000 342 0.000000000 55.81640000 86.33370000 22.98380000 25.06460000 72.11150000 343 80.02510000 62.20590000 100.0000000 55.90040000 45.42180000 100.4340000 344 100.0000000 75.53050000 100.0000000 78.57830000 67.06270000 103.4160000 345 100.0000000 84.03010000 100.0000000 83.67670000 77.26020000 105.1160000 346 100.0000000 0.000000000 64.76230000 48.18130000 24.03690000 38.49250000 347 100.0000000 0.000000000 72.20160000 50.05690000 24.78720000 48.37000000 348 100.0000000 0.000000000 80.92060000 52.56980000 25.79250000 61.60320000 349 58.50770000 51.07550000 52.18400000 25.16420000 24.58780000 26.05330000 350 60.46480000 79.52920000 100.0000000 53.29620000 57.46950000 102.8960000 351 68.57920000 92.82690000 100.0000000 66.39890000 77.21570000 106.0170000 352 0.000000000 29.16900000 46.25070000 5.691490000 6.085330000 18.23140000 353 0.000000000 37.12280000 58.32610000 9.560100000 10.29670000 30.39240000 354 0.000000000 44.56620000 74.74510000 15.56180000 15.89910000 52.12890000 355 28.15260000 22.15680000 37.41010000 5.915980000 4.740210000 11.48890000 356 41.00360000 26.73270000 39.39060000 10.09620000 7.853080000 13.17720000 357 69.45520000 29.12620000 55.20550000 25.75970000 16.23770000 27.39270000 358 15.44980000 0.000000000 10.80860000 0.813893000 0.403950000 0.744652000 359 10.13970000 8.621090000 0.000000000 0.431833000 0.464752000 0.066951800 360 6.340580000 6.340580000 6.340580000 0.220573000 0.232070000 0.252738000 361 0.000000000 9.813930000 0.000000000 0.216874000 0.433779000 0.072300100 362 11.49430000 0.000000000 0.000000000 0.354074000 0.182536000 0.016575800 363 47.61900000 0.000000000 0.000000000 8.066250000 4.158390000 0.377618000 364 94.08600000 0.000000000 0.000000000 36.06440000 18.59230000 1.688340000 365 100.0000000 0.000000000 0.000000000 41.23850000 21.25960000 1.930560000 366 56.19990000 16.26750000 0.000000000 12.27120000 7.304550000 0.763316000 367 59.28570000 37.22500000 0.000000000 17.13030000 14.87270000 1.968080000 368 60.60270000 62.31000000 0.000000000 26.34170000 32.33710000 4.853660000 369 72.28020000 60.15200000 0.000000000 31.88750000 33.79700000 4.843240000 370 85.51460000 70.54220000 0.000000000 45.82960000 48.26910000 6.901980000 371 100.0000000 70.25640000 0.000000000 57.68950000 54.16420000 7.414920000 372 100.0000000 80.03500000 0.000000000 63.14920000 65.08430000 9.235030000 373 100.0000000 85.58330000 17.17210000 67.00380000 72.19460000 12.36840000 374 100.0000000 100.0000000 18.92850000 77.46000000 92.96520000 16.29570000 375 33.41260000 30.61760000 51.35010000 10.51620000 8.871170000 23.00380000 376 38.53290000 50.41740000 71.89030000 21.72860000 21.96590000 48.88090000 377 41.92050000 71.12910000 81.28720000 34.44270000 41.53000000 66.18930000 378 80.03300000 80.03300000 80.03300000 58.23720000 61.27280000 66.72960000 379 81.66670000 81.66670000 81.66670000 60.88360000 64.05710000 69.76190000 380 82.44790000 85.61910000 100.0000000 70.43910000 71.95870000 104.7900000 381 76.09270000 55.39830000 61.09860000 38.47640000 33.61370000 36.47780000 382 88.75680000 85.75110000 66.57110000 64.60050000 70.30960000 48.83170000 383 41.81860000 37.63140000 18.97650000 10.69650000 11.64800000 4.131410000 384 100.0000000 37.76670000 25.23440000 46.31290000 30.01140000 7.931720000 385 100.0000000 44.75900000 37.60600000 49.44270000 34.30780000 15.02820000 386 31.66950000 0.000000000 12.80680000 3.485880000 1.774370000 1.189230000 387 56.61470000 0.000000000 100.0000000 29.85160000 13.30450000 95.60710000 388 71.58350000 0.000000000 100.0000000 37.81990000 17.41240000 95.98010000 389 86.31670000 0.000000000 100.0000000 47.88750000 22.60250000 96.45140000 390 23.42390000 20.90150000 24.87600000 3.684720000 3.499650000 4.918830000 391 32.94390000 20.32240000 25.43170000 5.551270000 4.355310000 5.206560000 392 34.29270000 24.35470000 25.14920000 6.386320000 5.568690000 5.283720000 393 32.86380000 32.86380000 32.86380000 8.224150000 8.652830000 9.423430000 394 29.84320000 76.95160000 49.78310000 26.87660000 43.24250000 27.33670000 395 28.17120000 100.0000000 82.30600000 50.06240000 77.53600000 73.98200000 396 43.43810000 100.0000000 91.32370000 57.13150000 80.83130000 90.08430000 397 49.73120000 49.73120000 49.73120000 20.45280000 21.51890000 23.43530000 398 48.66670000 48.66670000 48.66670000 19.50230000 20.51890000 22.34630000 399 50.81300000 50.81300000 50.81300000 21.44410000 22.56180000 24.57110000 400 51.91260000 51.91260000 51.91260000 22.47790000 23.64950000 25.75570000 401 38.84770000 83.98230000 70.78010000 37.95380000 54.75320000 52.81400000 402 40.17930000 84.16480000 83.53830000 42.17900000 56.67570000 72.41950000 403 54.65380000 26.69600000 38.24830000 15.06050000 10.42040000 12.64700000 404 56.44390000 30.84510000 61.19950000 20.54520000 13.87920000 33.72990000 405 78.55540000 39.05460000 79.45890000 39.66170000 25.90330000 59.97080000 406 35.22600000 0.000000000 25.87440000 5.079870000 2.512200000 5.055850000 407 41.42520000 0.000000000 36.88380000 7.950270000 3.866080000 10.87900000 408 57.61460000 0.000000000 58.40320000 17.79600000 8.535500000 29.70250000 409 66.23340000 66.06460000 60.33480000 36.97610000 39.70900000 36.85970000 410 69.59710000 65.81590000 78.21930000 43.35010000 42.29040000 61.00000000 411 0.000000000 16.09890000 72.85540000 9.639060000 4.886470000 47.58390000 412 0.000000000 13.50730000 84.05030000 12.75530000 5.803020000 65.01210000 413 0.000000000 16.74630000 100.0000000 18.75240000 8.625400000 95.28880000 414 0.000000000 28.76770000 100.0000000 20.35880000 11.83830000 95.82430000 415 0.000000000 46.69080000 100.0000000 24.74780000 20.61710000 97.28750000 416 0.000000000 63.72500000 100.0000000 31.32390000 33.77030000 99.47980000 417 0.000000000 70.48880000 100.0000000 34.62100000 40.36490000 100.5790000 418 0.000000000 77.30660000 100.0000000 38.35150000 47.82650000 101.8230000 419 0.000000000 92.47560000 100.0000000 48.15590000 67.43670000 105.0910000 420 27.90790000 93.21980000 100.0000000 51.18200000 69.79160000 105.3860000 421 66.05040000 18.62400000 33.06870000 19.03480000 10.94750000 9.409320000 422 70.95670000 21.24320000 41.00100000 23.11690000 13.38350000 14.68190000 423 80.21360000 33.37960000 57.07760000 33.85420000 21.59890000 29.95030000 424 82.78150000 49.82900000 69.05370000 42.93850000 32.68560000 45.95310000 425 28.47220000 20.41860000 27.36090000 4.732990000 3.932220000 5.980680000 426 26.66670000 26.66670000 26.66670000 5.194130000 5.464870000 5.951560000 427 25.00060000 29.89990000 25.65980000 5.375190000 6.397700000 5.702440000 428 29.00460000 61.01430000 23.71180000 15.53680000 25.83170000 8.160850000 429 25.13700000 40.47300000 20.04600000 7.397100000 11.01450000 4.496530000 430 46.75670000 44.67980000 20.56140000 14.38500000 16.37760000 5.321960000 431 100.0000000 47.52000000 20.85000000 48.77480000 35.41470000 7.275280000 432 67.85690000 32.24610000 19.03900000 21.01460000 15.18500000 4.288190000 433 100.0000000 61.29560000 34.12620000 55.12170000 46.31300000 14.92900000 434 100.0000000 67.08160000 69.54830000 64.22010000 54.23120000 49.65330000 435 100.0000000 70.22250000 79.40990000 68.54330000 58.47810000 64.65920000 436 100.0000000 79.52570000 82.41200000 74.63940000 69.19190000 71.25130000 437 100.0000000 58.13020000 46.19740000 55.38650000 44.27270000 22.93980000 438 100.0000000 66.80640000 47.23940000 59.43400000 52.10260000 25.10830000 439 57.79460000 38.28510000 32.56210000 18.20840000 15.63660000 10.08090000 440 68.33670000 51.15320000 37.66390000 28.14600000 26.42080000 14.66540000 441 68.55950000 62.56090000 36.57340000 32.70200000 35.55430000 15.49700000 442 52.40230000 47.60350000 31.44680000 18.36280000 19.67900000 10.26120000 443 80.80030000 62.18280000 34.17030000 40.08310000 39.14050000 14.36230000 444 92.19860000 92.19860000 92.19860000 79.49750000 83.64130000 91.09020000 445 94.08600000 94.08600000 94.08600000 83.12060000 87.45320000 95.24160000 446 0.000000000 0.000000000 38.88890000 2.261590000 0.904694000 11.90990000 447 16.57930000 0.000000000 49.60200000 4.654440000 1.953430000 20.37520000 448 29.66910000 0.000000000 51.39330000 7.024990000 3.139320000 22.12180000 449 54.98050000 33.99890000 78.23410000 24.91970000 16.58120000 57.03180000 450 79.31380000 100.0000000 81.30780000 71.97940000 88.87080000 73.38250000 451 0.000000000 16.48150000 10.39610000 0.802487000 1.406250000 0.880523000 452 11.94750000 13.91790000 0.000000000 0.853129000 1.134050000 0.173940000 453 0.000000000 43.12430000 14.66470000 5.888740000 11.35460000 3.269400000 454 0.000000000 100.0000000 34.93750000 37.54410000 72.23470000 21.33020000 455 0.000000000 100.0000000 47.66620000 39.29560000 72.93530000 30.55380000 456 21.61250000 100.0000000 73.29980000 46.29300000 75.89840000 59.99400000 457 24.99010000 24.79890000 0.000000000 3.619380000 4.338770000 0.646752000 458 27.39810000 73.66020000 0.000000000 20.64680000 37.74570000 6.197700000 459 63.60610000 100.0000000 0.000000000 51.00320000 79.37960000 12.63430000 460 75.56300000 100.0000000 0.000000000 58.02510000 82.99960000 12.96300000 461 88.16350000 100.0000000 0.000000000 67.01670000 87.63500000 13.38400000 462 100.0000000 100.0000000 0.000000000 76.99580000 92.77950000 13.85110000 463 88.20830000 90.29510000 0.000000000 59.86110000 73.27080000 10.98840000 464 35.71270000 65.31490000 0.000000000 18.29730000 30.23700000 4.872190000 465 37.22770000 100.0000000 0.000000000 40.45130000 73.93980000 12.14030000 466 42.83300000 100.0000000 24.29820000 42.95130000 75.13570000 16.45340000 467 51.70420000 100.0000000 83.01520000 57.41050000 81.29830000 75.49550000 468 35.09110000 54.60690000 40.96980000 16.10990000 22.04450000 16.70060000 469 40.57540000 71.20350000 87.84200000 36.18810000 42.24170000 77.39020000 470 42.36670000 78.46500000 100.0000000 45.26460000 52.39260000 102.3400000 471 35.63460000 32.93810000 70.39630000 15.71370000 11.75380000 45.16020000 472 42.42690000 38.54890000 100.0000000 28.70210000 19.23620000 96.81260000 473 79.76560000 50.47590000 100.0000000 51.08290000 36.05300000 98.87930000 474 52.05610000 35.50520000 54.14890000 18.16310000 14.26740000 26.34690000 475 85.85260000 56.17620000 53.54140000 44.11410000 37.14880000 28.79430000 476 100.0000000 67.10660000 59.63710000 61.90250000 53.32360000 37.38760000 477 100.0000000 84.12130000 66.45240000 73.03250000 73.09540000 48.77370000 478 0.000000000 9.233710000 21.45970000 0.801417000 0.624084000 3.284800000 479 0.000000000 49.43560000 25.60160000 8.496190000 15.55060000 7.280990000 480 0.000000000 60.59580000 32.46750000 13.40320000 24.37510000 11.96970000 481 0.000000000 67.51550000 63.61060000 21.74670000 32.81710000 40.17200000 482 0.000000000 77.07440000 66.00960000 27.40790000 43.23450000 44.85190000 483 20.63500000 82.70570000 85.92610000 37.76330000 52.93870000 76.00390000 484 52.04800000 70.74240000 70.43520000 34.86200000 41.80440000 50.00480000 485 53.51140000 78.77710000 71.98250000 40.34570000 51.20280000 53.67250000 486 75.98860000 83.98900000 71.14570000 55.44390000 63.76520000 54.13600000 487 21.80240000 26.48110000 18.99840000 3.839480000 4.782180000 3.173680000 488 38.82350000 27.70830000 23.53360000 8.023180000 7.205790000 4.895930000 489 76.54020000 60.89510000 21.41340000 35.52680000 36.07800000 8.283120000 490 92.19920000 66.18930000 20.37410000 49.46770000 46.86070000 9.299030000 491 17.20730000 8.076980000 0.000000000 1.001250000 0.725960000 0.087366000 492 15.36160000 10.87600000 7.626840000 1.004780000 0.914347000 0.453135000 493 13.56440000 11.69650000 38.03600000 2.982590000 1.762440000 11.47330000 494 27.67700000 27.70870000 70.49830000 12.93900000 8.860230000 44.88740000 495 27.49800000 28.50800000 85.37790000 17.42360000 10.86970000 68.00820000 496 33.87950000 47.56370000 84.69580000 23.31810000 20.93140000 68.47120000 497 23.35120000 26.17760000 37.37720000 5.631860000 5.449330000 11.61970000 498 23.48560000 39.08010000 44.10010000 9.215280000 11.12990000 17.29390000 499 27.84190000 59.88190000 46.31350000 17.37590000 25.76130000 21.46550000 500 32.86370000 63.28510000 67.20690000 24.17370000 31.00110000 44.19140000 501 42.06970000 76.48160000 68.72990000 33.88310000 45.99100000 48.56750000 502 20.37710000 34.30470000 28.04440000 5.749430000 7.884730000 6.995130000 503 19.87100000 33.16640000 73.87300000 13.61080000 10.63260000 49.94420000 504 28.72660000 45.01810000 75.48480000 18.56010000 17.62210000 53.39560000 505 29.12020000 66.46850000 76.94460000 27.44100000 34.59600000 58.39690000 506 100.0000000 89.23810000 92.50060000 84.28120000 83.01960000 91.28940000 507 100.0000000 94.09520000 91.69620000 87.43310000 89.78670000 90.91310000 508 37.23780000 32.14600000 36.57230000 9.619970000 9.106810000 11.60760000 509 62.41790000 30.42050000 39.68560000 19.60190000 13.70790000 14.00820000 510 64.58580000 46.21900000 38.69060000 24.55330000 22.12370000 14.69850000 511 61.65950000 63.67760000 41.90270000 30.15580000 34.91290000 19.11920000 512 61.29270000 68.02980000 61.65290000 35.60990000 40.39180000 38.57940000 513 62.59080000 100.0000000 74.36740000 59.88380000 82.87080000 62.16770000 514 0.000000000 84.33740000 32.57880000 26.11700000 49.78610000 16.26480000 515 0.000000000 87.29870000 55.71940000 31.51090000 55.04580000 35.10770000 516 95.00460000 91.42870000 61.46820000 72.39440000 80.19700000 44.10960000 517 40.80220000 40.80200000 25.30140000 11.60070000 13.27130000 6.556410000 518 45.55790000 58.49120000 24.98410000 19.16670000 26.10380000 8.508580000 519 20.09730000 25.52350000 46.00920000 6.257890000 5.482620000 17.88660000 520 24.23940000 27.37730000 61.85970000 10.17420000 7.593940000 33.83050000 521 27.41090000 50.16120000 62.01570000 16.54760000 19.44360000 35.96470000 522 100.0000000 75.17900000 61.15940000 66.45300000 61.89720000 40.53300000 523 81.44940000 72.41410000 48.22790000 47.47520000 50.15910000 26.21060000 524 100.0000000 91.39240000 50.18200000 74.53630000 81.52040000 32.57510000 525 83.85290000 50.10900000 23.64590000 36.57730000 30.38450000 7.906580000 526 86.47520000 59.06140000 23.73920000 41.95270000 38.21310000 9.168940000 527 86.67330000 79.19400000 24.92200000 52.36670000 58.68040000 13.02260000 528 16.20830000 26.78710000 24.44050000 3.541820000 4.661820000 4.981610000 529 14.35570000 62.55940000 51.73830000 17.56040000 27.48620000 26.59050000 530 13.73970000 88.34670000 62.54560000 34.18370000 57.30400000 42.96800000 531 16.91920000 95.34240000 80.50650000 44.22940000 69.30720000 69.77540000 532 22.94520000 100.0000000 90.84760000 51.99160000 78.20110000 88.96170000 533 60.70320000 43.94570000 45.09020000 22.75090000 20.07020000 19.08850000 534 72.43230000 69.39400000 45.54650000 39.50080000 43.76310000 23.14650000 535 79.29220000 100.0000000 62.77130000 66.99580000 86.87550000 47.21500000 536 83.58820000 100.0000000 89.42370000 77.67570000 91.49960000 87.55940000 537 26.11510000 33.31050000 55.77050000 10.33730000 9.483800000 27.48180000 538 41.68280000 47.88490000 63.97120000 19.85670000 19.96770000 38.22900000 539 44.19850000 58.14730000 81.83420000 29.31330000 29.88150000 65.10260000 540 45.51860000 100.0000000 100.0000000 61.11170000 82.50600000 107.3170000 541 19.95420000 47.58030000 35.71680000 10.04830000 15.32860000 12.26070000 542 31.69640000 54.88070000 57.58170000 18.21330000 22.95770000 31.57510000 543 57.49730000 56.30810000 61.47440000 28.51260000 28.99570000 36.54610000 544 64.90000000 56.77150000 67.85300000 33.92410000 31.88510000 44.68770000 545 89.95650000 57.76180000 100.0000000 61.41910000 45.45580000 100.1500000 546 100.0000000 65.92390000 100.0000000 73.59060000 57.08650000 101.7530000 547 39.48200000 0.000000000 20.90950000 5.919690000 2.985040000 3.292800000 548 48.07100000 71.52290000 22.21320000 26.00590000 38.73280000 9.565250000 549 49.73330000 74.16980000 49.91830000 31.32520000 43.21240000 27.21860000 550 57.44140000 87.29910000 88.85360000 52.62630000 64.90010000 82.71180000 551 78.22890000 93.11880000 95.18890000 70.79560000 80.00880000 96.60220000 552 45.24440000 48.73280000 52.38080000 18.92080000 20.17660000 25.71900000 553 61.28350000 57.61820000 52.60280000 29.07900000 30.27410000 27.34600000 554 100.0000000 59.94890000 70.43890000 61.19560000 47.81290000 49.78190000 555 51.65000000 18.92910000 23.58690000 11.31720000 7.112700000 4.723950000 556 50.75490000 23.79650000 29.95250000 12.07560000 8.336570000 7.648680000 557 57.30560000 26.54280000 78.38750000 24.62060000 14.34380000 56.85370000 558 36.64610000 17.74990000 51.49330000 9.525850000 5.611740000 22.56100000 559 41.19630000 19.08160000 70.24160000 15.10180000 8.216320000 44.29870000 560 41.71900000 21.94860000 83.65280000 19.49340000 10.53200000 64.90040000 561 0.000000000 17.31650000 59.47880000 6.513810000 3.815520000 30.57330000 562 0.000000000 22.11800000 87.81490000 14.85870000 8.016230000 71.85970000 563 19.68780000 53.73900000 92.64850000 25.54070000 24.95090000 83.45670000 564 21.79760000 56.49230000 83.98640000 23.92780000 26.03510000 68.22070000 565 23.59090000 75.75060000 83.46080000 33.26320000 44.56930000 70.42250000 566 90.60620000 100.0000000 84.37750000 81.37630000 93.60290000 78.89750000 567 100.0000000 100.0000000 84.53030000 89.46850000 97.76890000 79.53480000 568 53.60230000 43.88580000 36.39890000 18.26440000 17.86710000 12.73530000 569 82.05280000 54.74820000 46.79110000 39.59430000 34.13200000 22.30770000 570 84.65430000 65.36420000 84.37820000 55.04810000 47.78270000 71.44180000 571 51.40070000 40.75650000 50.42760000 18.51430000 16.45640000 23.19260000 572 50.45620000 62.04990000 55.88020000 26.69900000 31.76980000 31.03480000 573 55.63600000 92.34910000 79.42740000 52.24940000 70.24120000 67.81580000 574 68.84040000 100.0000000 84.20890000 66.26800000 85.82040000 77.90560000 575 77.11380000 100.0000000 93.64650000 74.66620000 89.77400000 95.28740000 576 0.000000000 40.21350000 30.09360000 6.109560000 10.16090000 8.384570000 577 0.000000000 47.35390000 39.52450000 9.252470000 14.75610000 14.64550000 578 0.000000000 88.10830000 76.53210000 37.09090000 58.14830000 61.80970000 579 0.000000000 100.0000000 81.64870000 47.31400000 76.14290000 72.78040000 580 27.15160000 53.68000000 36.47290000 13.41140000 20.20090000 13.48740000 581 41.22000000 67.82240000 35.81560000 22.98340000 34.23190000 15.28770000 582 0.000000000 31.36540000 12.79720000 2.988490000 5.663370000 1.964400000 583 0.000000000 53.84960000 68.30110000 16.97050000 21.45530000 44.15590000 584 0.000000000 57.03330000 78.02920000 20.86000000 24.98600000 58.55080000 585 0.000000000 65.31460000 89.17700000 28.04350000 33.64070000 78.55870000 586 21.49060000 12.94430000 19.29580000 2.285000000 1.713950000 2.748600000 587 19.49900000 8.400980000 38.76820000 3.532350000 1.790330000 11.93310000 588 32.38490000 0.000000000 41.30970000 6.037730000 2.814300000 13.76330000 589 58.13340000 23.07060000 46.50590000 17.28160000 10.63170000 18.70950000 590 59.87540000 33.44340000 46.53260000 19.91930000 14.65490000 19.36930000 591 56.65600000 0.000000000 20.29480000 12.36160000 6.310280000 3.402830000 592 89.96110000 22.89740000 23.88560000 34.85010000 19.95180000 6.072920000 593 96.10470000 46.74860000 65.44520000 51.60890000 35.75610000 41.42320000 594 100.0000000 60.62160000 90.08150000 67.47740000 50.78720000 81.44080000 595 19.35790000 0.000000000 70.58230000 9.503460000 3.930320000 44.23180000 596 21.60990000 0.000000000 100.0000000 19.46920000 7.952130000 95.12110000 597 43.75360000 16.31100000 100.0000000 25.40890000 11.99830000 95.58910000 598 33.52480000 16.16000000 29.35530000 5.595920000 3.708330000 6.807580000 599 53.09740000 15.28000000 28.69440000 11.98210000 6.895730000 6.774310000 600 73.22690000 18.15000000 31.34080000 23.02730000 12.95350000 8.662220000 601 100.0000000 20.43470000 33.80250000 43.98830000 24.10090000 11.04370000 602 48.23100000 25.33440000 14.88620000 10.31550000 7.878160000 2.411650000 603 50.13730000 48.76660000 10.35620000 16.52760000 19.44820000 3.528870000 604 59.82760000 53.55640000 0.000000000 22.38130000 24.98370000 3.643000000 605 65.72130000 60.50560000 50.66350000 32.27300000 33.75360000 26.02290000 606 71.34990000 81.60560000 53.46890000 47.05100000 57.67950000 32.53110000 607 93.28490000 89.99310000 75.58200000 73.50150000 78.86520000 62.46610000 608 45.70310000 34.21360000 38.23890000 12.92940000 11.43230000 12.94850000 609 57.91580000 45.87280000 65.02120000 25.85270000 22.08340000 39.61270000 610 80.73210000 48.76280000 84.94140000 45.73140000 33.05980000 70.05060000 611 100.0000000 48.28380000 85.22760000 61.14930000 40.76240000 71.21550000 612 37.04980000 17.07880000 26.25230000 6.331280000 4.242770000 5.480710000 613 75.49840000 18.21270000 100.0000000 41.12080000 20.36840000 96.37680000 614 100.0000000 19.42870000 100.0000000 60.26230000 30.42800000 97.30980000 615 32.29110000 0.000000000 32.03060000 4.909010000 2.360250000 7.933940000 616 86.23280000 45.70770000 31.55070000 37.59310000 28.70450000 11.04410000 617 100.0000000 78.15040000 29.72980000 63.28340000 63.34800000 15.46000000 618 31.34950000 42.01980000 0.000000000 8.528620000 12.28300000 1.921460000 619 32.05270000 46.55850000 33.95920000 11.71220000 15.72590000 11.21700000 620 30.63820000 56.16360000 48.54260000 16.79580000 23.16050000 22.89010000 621 32.10880000 92.39800000 52.59920000 37.83470000 63.61060000 33.31570000 622 42.08340000 100.0000000 52.83990000 46.34220000 76.46410000 35.58080000 623 21.17690000 61.60980000 0.000000000 13.68160000 25.35000000 4.172110000 624 24.79280000 78.35570000 11.33360000 22.98250000 42.87760000 7.852780000 625 23.85880000 85.58550000 0.000000000 27.15660000 51.69760000 8.547680000 626 44.45700000 86.49100000 0.000000000 32.92160000 55.55230000 8.987940000 627 60.20300000 86.66630000 0.000000000 39.61200000 59.17360000 9.334380000 628 64.24030000 61.97410000 24.61800000 28.89470000 33.33600000 9.248830000 629 75.96280000 67.78400000 22.03440000 38.38070000 42.28460000 9.537840000 630 20.97170000 16.82940000 0.000000000 2.038800000 2.105290000 0.298932000 631 27.25820000 15.14450000 0.000000000 2.928110000 2.345480000 0.298434000 632 25.86600000 17.13190000 12.35410000 3.027590000 2.636190000 1.301310000 633 24.48110000 64.66330000 41.54740000 18.19040000 29.42610000 18.43140000 634 57.92580000 86.22630000 100.0000000 56.27300000 65.24660000 104.2410000 635 72.15970000 85.61950000 100.0000000 63.58580000 68.42600000 104.4690000 636 12.68180000 27.14500000 0.000000000 2.471550000 4.290910000 0.697996000 637 14.23610000 44.89660000 11.48680000 6.866340000 12.64460000 2.890030000 638 51.11860000 64.78990000 0.000000000 23.19430000 32.39560000 5.030800000 639 72.58410000 71.82800000 0.000000000 37.65400000 45.05300000 6.712000000 640 57.23310000 62.99580000 21.54840000 25.64640000 32.36440000 8.131350000 641 62.44760000 70.49180000 76.94100000 41.35610000 44.75270000 59.61870000 642 82.11600000 69.90580000 76.60660000 53.05300000 50.34640000 59.57530000 643 100.0000000 86.53360000 82.79220000 79.16890000 78.05960000 73.35330000 644 22.74710000 7.369350000 0.000000000 1.704210000 1.050050000 0.112880000 645 22.47250000 0.000000000 9.858920000 1.657410000 0.841671000 0.654764000 646 46.01160000 8.977250000 12.51790000 7.844780000 4.287300000 1.394160000 647 48.84370000 18.79590000 16.69750000 9.787260000 6.349190000 2.556450000 648 100.0000000 21.94210000 14.90470000 42.78550000 23.91480000 3.800020000 649 52.19150000 0.000000000 25.67010000 10.77550000 5.450290000 5.239190000 650 53.27960000 0.000000000 40.38710000 12.78410000 6.306710000 13.42580000 651 56.94610000 62.89910000 83.91050000 37.12500000 36.87090000 69.48890000 652 60.17860000 74.46660000 85.01130000 44.82400000 49.40780000 73.37360000 653 86.97960000 78.26180000 100.0000000 69.25100000 64.58120000 103.4280000 654 92.25750000 86.89760000 100.0000000 78.84690000 77.54320000 105.4250000 655 63.60000000 73.10110000 59.52080000 38.96100000 46.07080000 37.06650000 656 81.21360000 85.27600000 62.79290000 57.77240000 66.43250000 43.78080000 657 74.52230000 74.42130000 56.16280000 45.34650000 50.51260000 33.96340000 658 85.78550000 76.94080000 69.57710000 57.65480000 58.61110000 50.88350000 659 87.37370000 83.93670000 78.74420000 65.64730000 68.72930000 65.74510000 660 91.18700000 100.0000000 93.94530000 85.15630000 95.16930000 96.35170000 661 40.46980000 43.80690000 39.20420000 13.76390000 15.47260000 14.32820000 662 45.33140000 48.82630000 40.30430000 17.07510000 19.49150000 15.68660000 663 54.58840000 61.28080000 43.58240000 25.97810000 31.13940000 19.87210000 664 31.52060000 32.02880000 25.53130000 7.075530000 7.884770000 5.847700000 665 78.42260000 38.73580000 29.77620000 29.86200000 21.84350000 9.232460000 666 100.0000000 52.43420000 34.18860000 51.58650000 39.23130000 13.78410000 667 100.0000000 71.97020000 37.88150000 60.71970000 56.80920000 18.95540000 668 100.0000000 100.0000000 43.99610000 79.96240000 93.96630000 29.47400000 669 100.0000000 100.0000000 76.14890000 86.90930000 96.74520000 66.05780000 670 71.24000000 41.17770000 36.50330000 26.61020000 21.03400000 12.97160000 671 88.52360000 40.60740000 38.33800000 38.65990000 26.99220000 14.66120000 672 100.0000000 45.30560000 53.87760000 52.13920000 35.65070000 28.41430000 673 46.77060000 0.000000000 30.70170000 9.098270000 4.535110000 7.444590000 674 47.31370000 0.000000000 45.97410000 11.22080000 5.407210000 17.58170000 675 60.94750000 0.000000000 50.62220000 17.91830000 8.770920000 21.91910000 676 76.55270000 11.20140000 45.64800000 26.42150000 13.68010000 18.11150000 677 82.78670000 24.71230000 51.27210000 33.02620000 19.00010000 23.69990000 678 95.48090000 26.18390000 57.40780000 44.45380000 25.08890000 30.41740000 679 58.74570000 48.08500000 34.08710000 21.63870000 21.56830000 11.89460000 680 58.41890000 100.0000000 51.03060000 52.51270000 79.68300000 34.16110000 681 66.35610000 100.0000000 62.01730000 58.80250000 82.67130000 45.94410000 682 21.74530000 43.51240000 66.99120000 14.65390000 15.20610000 41.36610000 683 20.14880000 57.76620000 77.72320000 22.28290000 26.16970000 58.23250000 684 19.31470000 63.83250000 100.0000000 32.48190000 34.44050000 99.54820000 685 0.000000000 30.50640000 77.85560000 13.03560000 9.417760000 55.69030000 686 40.89530000 33.46900000 82.32780000 20.76130000 14.12520000 63.32240000 687 58.01660000 47.50390000 81.63710000 30.96390000 24.95690000 63.74300000 688 83.79200000 70.06600000 82.33760000 56.07710000 51.82790000 68.75500000 689 92.55140000 80.64030000 84.32980000 69.46790000 67.45210000 74.39650000 690 100.0000000 81.26100000 90.75050000 78.47480000 72.40680000 86.26790000 691 83.46430000 0.000000000 37.39040000 29.78620000 15.11610000 12.22130000 692 100.0000000 0.000000000 39.22790000 43.54360000 22.18180000 14.07000000 693 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 694 69.32350000 0.000000000 11.89490000 18.59030000 9.564520000 1.742490000 695 87.54370000 0.000000000 29.90560000 32.04730000 16.37480000 8.124870000 696 87.59700000 0.000000000 59.20460000 36.51890000 18.16820000 31.45740000 697 63.88070000 16.49490000 57.12980000 21.33990000 11.40140000 28.69690000 698 70.81340000 19.58330000 65.92900000 27.51700000 14.82300000 39.26030000 699 17.81740000 8.998160000 13.22490000 1.318590000 0.921437000 1.214220000 700 38.49720000 0.000000000 10.07040000 5.169130000 2.651450000 0.846736000 701 39.63830000 39.69460000 0.000000000 10.07540000 12.15250000 1.814760000 702 67.30380000 69.91580000 34.19500000 35.24380000 42.13620000 15.20960000 703 100.0000000 77.78710000 52.30810000 66.15920000 64.15920000 31.64980000 704 100.0000000 88.28170000 58.28180000 73.92900000 77.83540000 39.98860000 705 29.03730000 20.68520000 0.000000000 3.835620000 3.636830000 0.499869000 706 47.42040000 21.68400000 0.000000000 9.232340000 6.600340000 0.787516000 707 48.61740000 29.35360000 0.000000000 10.85630000 9.179780000 1.199830000 708 68.86110000 49.52410000 0.000000000 25.77820000 24.60860000 3.391610000 709 73.35050000 76.47670000 80.25170000 51.81070000 54.85780000 66.17900000 710 74.43580000 76.37780000 90.31970000 55.74170000 56.41920000 83.58430000 711 74.55520000 78.58470000 100.0000000 60.71690000 60.46330000 103.0830000 712 32.25470000 9.881260000 69.76430000 11.82160000 5.476750000 43.29510000 713 85.30070000 0.000000000 71.13630000 37.60530000 18.40080000 46.30670000 714 100.0000000 0.000000000 90.11410000 55.59520000 27.00270000 77.53590000 715 53.21400000 21.91130000 59.79500000 17.39240000 10.17700000 31.58190000 716 44.88690000 20.34700000 52.31830000 12.50380000 7.544860000 23.55910000 717 45.68670000 28.77550000 56.65410000 14.84740000 10.48640000 28.35920000 718 52.01820000 41.33870000 66.14930000 22.19480000 18.20980000 40.47310000 719 51.92900000 50.32510000 80.91580000 28.98740000 25.36090000 62.75480000 720 75.32660000 70.11590000 100.0000000 56.54370000 51.38140000 101.5500000 721 89.44770000 70.14100000 100.0000000 66.71120000 56.64210000 102.0300000 722 42.31170000 23.40940000 60.45430000 13.65500000 8.528650000 32.20590000 723 64.17900000 22.00220000 76.46820000 26.83500000 14.57930000 53.84410000 724 77.86630000 24.09700000 88.53160000 39.15980000 20.91470000 74.35110000 725 100.0000000 38.52610000 88.64100000 59.47300000 35.57660000 76.30760000 726 0.000000000 8.181900000 9.892880000 0.256798000 0.335345000 0.635235000 727 0.000000000 11.65050000 9.474220000 0.417580000 0.673105000 0.638976000 728 7.753130000 15.07650000 9.008760000 0.797162000 1.228200000 0.670426000 729 16.67160000 12.32770000 0.000000000 1.160270000 1.129810000 0.156937000 730 15.95990000 22.44370000 10.78740000 2.201020000 3.104720000 1.189800000 731 33.95420000 33.17700000 40.48740000 9.464160000 9.283870000 14.24590000 732 47.27290000 38.41070000 54.85170000 17.11620000 14.74030000 27.19950000 733 50.96860000 51.56870000 63.99790000 24.46450000 24.20330000 38.83640000 734 52.01230000 57.73870000 65.78540000 27.66530000 29.29550000 41.86490000 735 43.14060000 42.59360000 50.12490000 15.91630000 15.87390000 22.94090000 736 43.62520000 45.23460000 81.67050000 24.46330000 20.55030000 63.28960000 737 0.000000000 15.99340000 22.96430000 1.344890000 1.553790000 3.950940000 738 0.000000000 14.50330000 26.38760000 1.475820000 1.409580000 5.246490000 739 0.000000000 17.35990000 43.97340000 3.723560000 2.706040000 15.85870000 740 0.000000000 28.07560000 85.09060000 14.84360000 9.439470000 67.37450000 741 17.21650000 25.98770000 100.0000000 20.75730000 11.35730000 95.71040000 742 41.84320000 55.50730000 100.0000000 33.91770000 29.94700000 98.60520000 743 67.79650000 60.01030000 100.0000000 47.22390000 39.52880000 99.75350000 744 15.25980000 36.25620000 18.39330000 4.936290000 8.195660000 3.606210000 745 27.07950000 50.99610000 15.48300000 10.76100000 17.58540000 4.391380000 746 38.60350000 80.17900000 21.16390000 27.67480000 46.85650000 10.69610000 747 50.22310000 85.66580000 69.87700000 42.71880000 58.85030000 52.12160000 748 51.65320000 93.93320000 70.66810000 49.21690000 70.66090000 55.13710000 749 14.06140000 21.22930000 22.89120000 2.440160000 2.933500000 4.133530000 750 18.60510000 19.92710000 29.78170000 3.308440000 3.088960000 7.014340000 751 19.17770000 19.18230000 45.22650000 5.190570000 3.717600000 16.96670000 752 60.76550000 27.28400000 54.19390000 20.53570000 13.09560000 26.04050000 753 81.10260000 29.85140000 62.85540000 35.02210000 21.02200000 36.28900000 754 85.61290000 0.000000000 14.10990000 29.54830000 15.20490000 2.653020000 755 100.0000000 0.000000000 14.37110000 41.49180000 21.36100000 3.264410000 756 100.0000000 0.000000000 55.98950000 46.27940000 23.27610000 28.47690000 757 42.76940000 0.000000000 51.76840000 10.61190000 4.980690000 22.64100000 758 49.18180000 0.000000000 62.33210000 15.04260000 7.017680000 34.01780000 759 67.97980000 49.32600000 61.81590000 31.47130000 26.72030000 36.34880000 760 74.73760000 48.90760000 69.64540000 37.29980000 29.29980000 46.39040000 761 90.04730000 59.58720000 79.23600000 55.01800000 44.11550000 62.32550000 762 100.0000000 70.93110000 89.07880000 72.03550000 60.46210000 81.23970000 763 23.76640000 23.80620000 30.59900000 4.606890000 4.481200000 7.619110000 764 23.30380000 44.84120000 28.92710000 8.983280000 13.59280000 8.333880000 765 27.29860000 55.73610000 31.01230000 13.63460000 21.54860000 10.64730000 766 26.53630000 71.71550000 59.98600000 25.30750000 37.92210000 36.73510000 767 30.11020000 77.07970000 70.36390000 31.44660000 45.19510000 50.74180000 768 22.20010000 56.16650000 61.43930000 17.74490000 23.36260000 35.98550000 769 48.55560000 62.90240000 61.22280000 27.45480000 32.59660000 37.00550000 770 61.55950000 79.49130000 78.08480000 46.24880000 54.67760000 63.03010000 771 13.38080000 0.000000000 23.86040000 1.267010000 0.563964000 4.090880000 772 14.27500000 10.29410000 26.89760000 1.816400000 1.177930000 5.401080000 773 9.517950000 93.23400000 40.81320000 33.40040000 62.43420000 23.47400000 774 23.00240000 100.0000000 51.43680000 41.56870000 74.03260000 34.02610000 775 35.79650000 29.39830000 17.44010000 7.115470000 7.218510000 3.050480000 776 54.74500000 38.02940000 18.50050000 15.66810000 14.35880000 4.259710000 777 64.11150000 44.38620000 19.41040000 21.99630000 20.17920000 5.307380000 778 22.56100000 19.55370000 14.29510000 2.798290000 2.880030000 1.720700000 779 24.79370000 20.27930000 9.873540000 3.101160000 3.174610000 1.030880000 780 23.88150000 31.16760000 13.32550000 4.736320000 6.505040000 2.130460000 781 25.29050000 42.90740000 14.22060000 7.815120000 12.25760000 3.251430000 782 42.72870000 91.70460000 46.39470000 39.24650000 63.72790000 27.70850000 783 43.30150000 100.0000000 73.50800000 51.47520000 78.56340000 60.53430000 784 18.11680000 71.67090000 33.06960000 19.73480000 35.50900000 14.11380000 785 31.01190000 81.57540000 40.13610000 28.41390000 48.29000000 20.53040000 786 54.07270000 82.50660000 51.16080000 38.22780000 54.00930000 30.07930000 787 68.00790000 83.26180000 66.32680000 48.88050000 59.83730000 47.32730000 788 71.02220000 89.31100000 75.42530000 57.02460000 69.67740000 61.32810000 789 37.99510000 49.63350000 45.57690000 15.77700000 19.13740000 19.66810000 790 51.06860000 64.58560000 48.09160000 26.68690000 33.63790000 23.99900000 791 74.73920000 64.06820000 56.04660000 40.22130000 40.09260000 32.10130000 792 86.87830000 64.76980000 65.26600000 51.08540000 45.94460000 43.19340000 793 68.55300000 52.04780000 51.16970000 30.61630000 27.93250000 25.45540000 794 74.61400000 100.0000000 50.22500000 61.38420000 84.27280000 33.83860000 795 34.72570000 29.31790000 0.000000000 6.435030000 6.890900000 0.990997000 796 45.33130000 34.74340000 0.000000000 10.73510000 10.72530000 1.504530000 797 64.33660000 50.37310000 19.76690000 24.05890000 24.09440000 6.059410000 798 67.49820000 80.05980000 28.94420000 40.48000000 53.28340000 14.34330000 799 74.84460000 92.77000000 27.11870000 53.14550000 72.28910000 16.51800000 800 86.32540000 93.50130000 35.49800000 62.53960000 77.82050000 21.42490000 801 44.10030000 42.79230000 33.27960000 13.94800000 15.21380000 10.61770000 802 77.76300000 42.92130000 46.82450000 32.68670000 24.72120000 20.88310000 803 100.0000000 50.01180000 48.29650000 52.67090000 38.29850000 23.70700000 804 100.0000000 58.80370000 58.78420000 57.97270000 45.75250000 35.18670000 805 49.06600000 53.58050000 16.72930000 18.03440000 22.71520000 5.288590000 806 51.72790000 82.32920000 14.07750000 33.23430000 51.72030000 9.500530000 807 58.72380000 91.38130000 29.44070000 43.34430000 65.74440000 16.83360000 808 33.48480000 31.84640000 15.13420000 6.889320000 7.805340000 2.631210000 809 62.08230000 30.88320000 11.65810000 17.31270000 12.91330000 2.418280000 810 73.36060000 46.41810000 20.39870000 28.02460000 24.20070000 6.062730000 811 82.27270000 56.12990000 31.75110000 38.33830000 34.50470000 12.22930000 812 100.0000000 58.82420000 80.25670000 63.49820000 47.97640000 64.24290000 813 24.42680000 0.000000000 23.48130000 2.603870000 1.256240000 4.013940000 814 34.64300000 10.45340000 33.76020000 5.913200000 3.226960000 8.997020000 815 73.30910000 28.35490000 35.30240000 24.89780000 15.94480000 11.34800000 816 88.95890000 44.94610000 55.79890000 43.04590000 30.75830000 29.89400000 817 91.31340000 51.81390000 64.34300000 49.03370000 36.99000000 40.43160000 818 0.000000000 68.58330000 18.42890000 16.03940000 31.38090000 7.506080000 819 0.000000000 100.0000000 20.76630000 36.32640000 71.74760000 14.91760000 820 29.44020000 50.77730000 0.000000000 10.85650000 17.55550000 2.816500000 821 46.80150000 75.59660000 0.000000000 27.09180000 42.65990000 6.806640000 822 74.50120000 86.10490000 0.000000000 47.31770000 62.59610000 9.588970000 823 100.0000000 90.11500000 0.000000000 69.68010000 78.14700000 11.41230000 824 18.59550000 15.33530000 12.93830000 1.799770000 1.763900000 1.299470000 825 15.00760000 18.85270000 11.41480000 1.700660000 2.212330000 1.137450000 826 11.90250000 20.33030000 14.33220000 1.710130000 2.450030000 1.702540000 827 15.59650000 47.52640000 40.09670000 10.07600000 15.25430000 15.09270000 828 19.54530000 55.45550000 47.47300000 14.42270000 21.54660000 21.78050000 829 55.14850000 55.68980000 47.92650000 24.58970000 26.91470000 22.66930000 830 29.93690000 32.03810000 19.46950000 6.325980000 7.547630000 3.712200000 831 29.48390000 38.28240000 16.50390000 7.482030000 10.24300000 3.382740000 832 53.80570000 44.48070000 19.70880000 17.07960000 17.68430000 5.172610000 833 56.31270000 44.66490000 100.0000000 35.78880000 25.38480000 97.62600000 834 24.15380000 16.00640000 47.43610000 5.949600000 3.607000000 18.73290000 835 52.65640000 11.74090000 60.01840000 16.25750000 8.180450000 31.50770000 836 61.04320000 0.000000000 72.71340000 22.88390000 10.76280000 47.81850000 837 71.97920000 0.000000000 72.55420000 28.92440000 13.88190000 47.87650000 838 100.0000000 22.44880000 75.72540000 52.36930000 27.85340000 53.94690000 839 38.23240000 14.60070000 15.51140000 5.796290000 3.724910000 1.983960000 840 37.62780000 26.10880000 11.10890000 6.814770000 6.265880000 1.604000000 841 84.46880000 60.44460000 0.000000000 40.26800000 38.30370000 5.271520000 842 84.39410000 79.76790000 0.000000000 50.14550000 58.14230000 8.580280000 843 17.26440000 85.03100000 12.52600000 26.08510000 50.58840000 9.371430000 844 24.37850000 85.29240000 24.22610000 27.85000000 51.67950000 12.69410000 845 29.44980000 92.41030000 70.89890000 41.33500000 64.95720000 54.76890000 846 32.23320000 92.21880000 79.19290000 44.14780000 65.93460000 67.04200000 847 0.000000000 31.75610000 20.89160000 3.445970000 5.969670000 3.993540000 848 10.04600000 32.26090000 24.33170000 4.040240000 6.399870000 5.249140000 849 10.71340000 34.09690000 34.49450000 5.395750000 7.562010000 10.28190000 850 0.000000000 38.08910000 88.58740000 18.10740000 14.09210000 74.24380000 851 0.000000000 37.72600000 100.0000000 22.24090000 15.60280000 96.45180000 852 0.000000000 55.76420000 100.0000000 27.94790000 27.01780000 98.35430000 853 0.000000000 76.37510000 87.61140000 33.26190000 44.93590000 77.65420000 854 0.000000000 84.57570000 100.0000000 42.78790000 56.69990000 103.3020000 855 40.58680000 86.39530000 100.0000000 49.64960000 61.99750000 103.9630000 856 0.000000000 20.96170000 19.59730000 1.651910000 2.502360000 3.022170000 857 0.000000000 21.48350000 25.98760000 2.146850000 2.802680000 5.313140000 858 0.000000000 28.10760000 29.18890000 3.397150000 4.869370000 7.068190000 859 0.000000000 42.73640000 57.63380000 10.88550000 13.17630000 30.12910000 860 17.25660000 41.91740000 88.63040000 19.99100000 16.55120000 74.69660000 861 20.52660000 43.18900000 100.0000000 24.96000000 19.15970000 96.99500000 862 12.00800000 16.03750000 30.69920000 2.372990000 2.016260000 7.311500000 863 0.000000000 11.95510000 47.15080000 3.789420000 2.051490000 18.30460000 864 68.61660000 34.67060000 48.03700000 25.09210000 17.68720000 20.95700000 865 26.97300000 7.585030000 21.26390000 3.033560000 1.677350000 3.306510000 866 28.03720000 13.74780000 22.07170000 3.622140000 2.467870000 3.696610000 867 44.44590000 57.30230000 32.37330000 18.95050000 25.19580000 11.78500000 868 46.35540000 64.51050000 40.99470000 23.77910000 32.21040000 18.27650000 869 78.24200000 75.52010000 42.62350000 46.09200000 52.07160000 22.12530000 870 88.99550000 100.0000000 44.95610000 70.78000000 89.21580000 29.79700000 871 23.17550000 35.62420000 100.0000000 23.39970000 15.46330000 96.36380000 872 22.53850000 79.42800000 100.0000000 41.15370000 51.12000000 102.3110000 873 21.46490000 86.49030000 100.0000000 45.43460000 59.91760000 103.7830000 874 77.26570000 39.34020000 63.08260000 34.53460000 23.86910000 37.13570000 875 91.14840000 38.82030000 70.89640000 46.56880000 29.65470000 47.67560000 876 49.13710000 19.62670000 41.86060000 12.29760000 7.511030000 14.74020000 877 66.70270000 16.65020000 43.99030000 20.58540000 11.29950000 16.64200000 878 66.60390000 24.23800000 90.27090000 32.86670000 17.63070000 77.21280000 879 15.88780000 9.812490000 60.81760000 6.984940000 3.224410000 31.94850000 880 16.62800000 18.80960000 70.16340000 9.984660000 5.537420000 43.94470000 881 29.48100000 19.30090000 80.42780000 14.94990000 7.840770000 59.32790000 882 33.63620000 28.33740000 100.0000000 24.03880000 13.62380000 95.97500000 883 57.98430000 34.22350000 100.0000000 33.87110000 20.39850000 96.76460000 884 71.57780000 41.17980000 100.0000000 42.89770000 27.57390000 97.67390000 885 27.36500000 14.96390000 32.12660000 4.419680000 2.921040000 8.119090000 886 25.74040000 17.46540000 41.12070000 5.412400000 3.638750000 13.81950000 887 36.83170000 29.49490000 40.49320000 9.495810000 8.230940000 14.04500000 888 53.63430000 40.70800000 45.52900000 18.63110000 16.59040000 18.98720000 889 69.22160000 55.94360000 63.74080000 35.03600000 32.08650000 39.48850000 890 81.57560000 67.59720000 64.65400000 48.38140000 46.57960000 42.69950000 891 100.0000000 75.55880000 72.81330000 69.52780000 63.46770000 55.67570000 892 30.75130000 10.16490000 0.000000000 3.317500000 2.058110000 0.222448000 893 71.72010000 29.22750000 0.000000000 22.24370000 15.01650000 1.726400000 894 88.30800000 33.53120000 16.10970000 34.93170000 22.77180000 4.261450000 895 42.65910000 12.61900000 0.000000000 6.710100000 4.018930000 0.422159000 896 44.61400000 20.82540000 20.23150000 8.660820000 6.087120000 3.535320000 897 65.19510000 21.41230000 17.15000000 17.67570000 10.85960000 3.123250000 898 79.20220000 25.61830000 21.16570000 27.07730000 16.54670000 4.877810000 899 100.0000000 33.23080000 32.55190000 45.93840000 28.21290000 11.04170000 900 58.70940000 22.14750000 40.73970000 16.58720000 10.19030000 14.22360000 901 68.66920000 32.91920000 71.15570000 29.68830000 18.92930000 46.85280000 902 67.87960000 46.00060000 87.04160000 37.37400000 27.35420000 73.03620000 903 12.36270000 12.00450000 17.01560000 1.120610000 1.036770000 2.065980000 904 7.338990000 8.884260000 13.15340000 0.514719000 0.499956000 1.162120000 905 10.45030000 0.000000000 16.10640000 0.612635000 0.278240000 1.727370000 906 0.000000000 61.33130000 44.47620000 15.24030000 25.62130000 20.06820000 907 0.000000000 72.07790000 43.30800000 20.26920000 35.95620000 20.89260000 908 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 909 20.75090000 100.0000000 0.000000000 37.05540000 72.18910000 11.98130000 910 51.15000000 100.0000000 0.000000000 45.19770000 76.38670000 12.36250000 911 77.74670000 100.0000000 19.30070000 59.94940000 83.93570000 15.58190000 912 32.68640000 45.15060000 56.73630000 14.93750000 16.33780000 29.57040000 913 34.58240000 62.15150000 59.29940000 22.27500000 29.47520000 34.49580000 914 43.14000000 62.32400000 72.56960000 28.04930000 32.19670000 51.47940000 915 75.79010000 82.95700000 78.01240000 56.57880000 63.15850000 64.01070000 916 75.31730000 83.64360000 83.44630000 58.37480000 64.53560000 72.92890000 917 31.30270000 22.32770000 18.29100000 4.958890000 4.469840000 2.858020000 918 58.70500000 26.12820000 20.26140000 15.18860000 10.54170000 4.060350000 919 80.64610000 33.80300000 20.95230000 29.56780000 20.06310000 5.356760000 920 85.65890000 43.50430000 20.91650000 35.65140000 26.82460000 6.329870000 921 100.0000000 55.94420000 18.36990000 51.64140000 41.37160000 7.542410000 922 66.31280000 16.47050000 8.713490000 17.47070000 10.00230000 1.451840000 923 70.43800000 18.09280000 0.000000000 19.91350000 11.50210000 1.170840000 924 84.44360000 41.32970000 0.000000000 33.55400000 24.90230000 3.038580000 925 87.68660000 52.78880000 0.000000000 39.66230000 33.47240000 4.370910000 926 90.39140000 60.74140000 46.19600000 48.27110000 42.23810000 22.92090000 927 32.82840000 15.49950000 9.752010000 4.260300000 3.063490000 0.932731000 928 85.65190000 19.32350000 0.000000000 30.29670000 17.04750000 1.694080000 929 86.71720000 23.52940000 29.87530000 32.89310000 19.01410000 8.574940000 930 91.71990000 22.47760000 36.50520000 37.40960000 21.05070000 12.40690000 931 100.0000000 20.27700000 42.99380000 45.12830000 24.52750000 17.13810000 932 100.0000000 18.79230000 53.68910000 46.74020000 24.90870000 26.43890000 933 100.0000000 21.54140000 65.40360000 49.55540000 26.54210000 39.70090000 934 44.74540000 0.000000000 87.00670000 20.32480000 8.942920000 70.31940000 935 59.73730000 0.000000000 87.09070000 26.59930000 12.17440000 70.76040000 936 60.40630000 18.81370000 100.0000000 32.56720000 16.05160000 95.99420000 937 23.08700000 31.31040000 47.90040000 7.999450000 7.840240000 19.83920000 938 24.94370000 36.94110000 49.32650000 9.762260000 10.53280000 21.51560000 939 16.43120000 24.17240000 34.10100000 4.045530000 4.227490000 9.482510000 940 13.64120000 28.34540000 34.93230000 4.537100000 5.450630000 10.17570000 941 12.81970000 36.27820000 61.67500000 10.53110000 10.41760000 34.14110000 942 17.76940000 64.77970000 87.77130000 28.23350000 33.42140000 75.98080000 943 0.000000000 34.17510000 46.02740000 6.648260000 8.055120000 18.37740000 944 9.124870000 46.21950000 48.22980000 10.39410000 14.66330000 21.31470000 945 11.56130000 51.55810000 48.00720000 12.28280000 18.28380000 21.72140000 946 18.01240000 68.30480000 62.03190000 22.72890000 33.94430000 38.45680000 947 26.88500000 75.18640000 89.06640000 35.38370000 44.97710000 80.15950000 948 0.000000000 21.29130000 33.61400000 2.832370000 3.038860000 9.040540000 949 0.000000000 22.48860000 43.19180000 4.192040000 3.826440000 15.44960000 950 10.17930000 25.33830000 55.13180000 6.890080000 5.581960000 26.25500000 951 0.000000000 30.16520000 67.80210000 10.24230000 8.197720000 41.29700000 952 0.000000000 36.01110000 66.70060000 11.19130000 10.53060000 40.27310000 953 0.000000000 48.23990000 70.87520000 15.66230000 17.78020000 46.98290000 954 0.000000000 49.36980000 87.74640000 21.11240000 20.56190000 73.82970000 955 49.89540000 48.53140000 90.40460000 30.68960000 24.97750000 78.99180000 956 72.15050000 53.64460000 88.64430000 43.05210000 34.08950000 76.89170000 957 76.73420000 61.23540000 89.67740000 49.39820000 41.87870000 79.93410000 958 83.75440000 83.00560000 90.04310000 65.99510000 67.61050000 84.69570000 959 91.07600000 93.89350000 100.0000000 82.75600000 86.79510000 107.0050000 960 43.74140000 26.28040000 25.01590000 9.441310000 7.577750000 5.457700000 961 44.36440000 32.29390000 24.29270000 10.68400000 9.835200000 5.547270000 962 71.68410000 47.10700000 49.72510000 30.54400000 25.43740000 23.65450000 963 81.08540000 51.23590000 62.34610000 40.60620000 32.39360000 37.58530000 964 28.99570000 15.28440000 19.23240000 3.764620000 2.738280000 2.850060000 965 37.11470000 17.29310000 21.55210000 6.034130000 4.158610000 3.721760000 966 50.30430000 32.87410000 41.52470000 14.80910000 11.92940000 15.21590000 967 51.82130000 43.41200000 42.07370000 18.11080000 17.49840000 16.51820000 968 22.99790000 30.34530000 17.87630000 4.633200000 6.195910000 3.097350000 969 24.45630000 49.67610000 22.19570000 10.19780000 16.57690000 6.115710000 970 32.57170000 69.86880000 31.98090000 21.22210000 34.89890000 13.32860000 971 64.04420000 74.48940000 52.52450000 38.56800000 47.15420000 30.02890000 972 69.60880000 91.56370000 54.39820000 52.77830000 70.39440000 35.60570000 973 17.35660000 25.35960000 7.664840000 2.689630000 3.976760000 0.959083000 974 22.03940000 23.18640000 8.731830000 3.003410000 3.671550000 0.994241000 975 48.14900000 36.33130000 11.82430000 12.28760000 12.04280000 2.541540000 976 50.31260000 42.10680000 9.314630000 14.53760000 15.40550000 2.719120000 977 40.14760000 30.49840000 8.575990000 8.248630000 8.140550000 1.563230000 978 46.73490000 30.74180000 9.519240000 10.51450000 9.375010000 1.792140000 979 77.80350000 36.75040000 12.52090000 27.88900000 20.22950000 3.415640000 980 93.45710000 39.76000000 9.447170000 40.34090000 27.76880000 3.761980000 981 15.48340000 16.10000000 23.30050000 2.059070000 1.933180000 4.107430000 982 11.65030000 52.68610000 21.35440000 9.705920000 17.90340000 6.116340000 983 8.573970000 54.17830000 58.06270000 14.93580000 20.86030000 31.86180000 984 0.000000000 62.62910000 71.79880000 21.48770000 29.04050000 50.13110000 985 0.000000000 83.49290000 87.49370000 37.50130000 53.47910000 78.87110000 986 52.19650000 29.06000000 29.46980000 13.46000000 10.30180000 7.720770000 987 52.61620000 27.63650000 43.72990000 15.08690000 10.57780000 16.59080000 988 83.71650000 40.32900000 43.17320000 35.59560000 25.22700000 17.91140000 989 32.57340000 9.977770000 14.83940000 3.996020000 2.362590000 1.670110000 990 38.59660000 10.97870000 9.759600000 5.467680000 3.218300000 0.899961000 991 40.13800000 64.52960000 24.08600000 19.97290000 30.46360000 8.961090000 992 58.50810000 71.54790000 25.95580000 30.74000000 41.16180000 11.19740000 993 59.90080000 81.27120000 23.61820000 36.77780000 52.51700000 12.15780000 994 78.65260000 93.99060000 49.20600000 59.31510000 76.46230000 31.52280000 995 80.36090000 94.54030000 71.79080000 65.80860000 79.84020000 57.58980000 996 50.23890000 56.85300000 45.76930000 22.63850000 26.63010000 20.90920000 997 49.67790000 56.27560000 71.29110000 27.52750000 28.19340000 48.94240000 998 14.57700000 17.66670000 38.46940000 3.595480000 2.771530000 11.92060000 999 9.550060000 22.98440000 40.16440000 4.072850000 3.911580000 13.26690000 1000 0.000000000 27.87150000 54.54190000 6.912250000 6.210990000 25.77820000 1001 0.000000000 88.07100000 66.23810000 34.33760000 57.00660000 47.43450000 1002 0.000000000 89.06220000 84.97020000 40.33190000 60.48270000 75.67760000 1003 25.66520000 62.60780000 56.01860000 19.88590000 28.62380000 30.93010000 1004 24.04830000 81.43200000 58.12130000 30.02870000 48.63940000 36.49190000 1005 37.42280000 34.80080000 30.67950000 9.600150000 10.00410000 8.462530000 1006 36.21170000 38.97410000 30.96660000 10.28910000 11.82960000 8.924230000 1007 43.93670000 38.05240000 38.21070000 13.20450000 12.89690000 13.19810000 1008 55.45670000 37.45530000 62.20240000 21.75570000 16.60600000 35.36180000 1009 65.20940000 40.74270000 68.08300000 28.81710000 21.32970000 43.22060000 1010 71.48090000 51.41070000 76.90560000 38.11680000 30.76930000 57.03650000 1011 32.35660000 25.79440000 57.62820000 10.63560000 7.559080000 29.05200000 1012 32.13090000 58.72770000 68.19230000 22.26460000 27.04670000 44.81290000 1013 42.72870000 66.63260000 72.23530000 29.82580000 36.09490000 51.66610000 1014 41.47480000 73.57190000 72.85510000 33.15470000 43.08350000 53.71730000 1015 73.11570000 72.99850000 81.04950000 49.97970000 51.02170000 66.81760000 1016 72.28640000 26.60680000 61.61760000 28.36670000 16.79190000 34.36470000 1017 89.88840000 24.83550000 68.14670000 42.05710000 23.26560000 42.98030000 1018 88.24480000 21.42170000 59.65490000 38.32530000 20.88060000 32.38780000 1019 88.59320000 19.88410000 100.0000000 50.67020000 25.55850000 96.87540000 1020 78.54590000 13.28850000 53.56910000 29.24330000 15.17450000 25.36370000 1021 86.74900000 9.401890000 78.41320000 40.93780000 20.17640000 57.15970000 1022 21.59330000 7.775350000 21.11190000 2.136970000 1.226450000 3.217520000 1023 18.90740000 10.55210000 24.14050000 2.104810000 1.371200000 4.307800000 1024 15.53730000 10.77600000 70.52080000 9.326650000 4.236510000 44.21600000 1025 21.94490000 42.57210000 80.79470000 18.22740000 16.20850000 61.35990000 1026 29.94610000 45.38430000 93.37250000 24.72420000 20.29510000 83.98220000 1027 19.57760000 44.99910000 61.76400000 13.57330000 15.44340000 35.05460000 1028 22.10230000 71.77560000 100.0000000 36.78490000 42.47890000 100.8730000 1029 11.05620000 33.79960000 67.23890000 11.15630000 9.766480000 40.81990000 1030 14.86970000 35.88150000 87.50970000 17.83720000 13.21330000 72.16350000 1031 35.97110000 90.71830000 92.81210000 48.53370000 66.10020000 90.49870000 1032 9.432820000 28.79550000 32.10300000 4.026350000 5.339290000 8.594020000 1033 9.681850000 39.47110000 48.95190000 8.623430000 10.88470000 21.31110000 1034 13.55680000 74.41290000 49.79390000 23.07160000 39.15860000 26.75870000 1035 13.96580000 92.70620000 50.72260000 34.87110000 62.44970000 31.47930000 1036 40.41100000 91.54340000 58.71910000 40.66190000 64.02670000 39.55460000 1037 14.66270000 38.11660000 56.44210000 10.02270000 10.93880000 28.47810000 1038 9.146370000 43.03200000 66.17310000 13.09140000 14.21830000 40.21250000 1039 13.09180000 48.99630000 78.37970000 18.48160000 19.36320000 58.13390000 1040 24.55280000 67.06880000 83.67680000 28.93080000 35.55850000 69.27390000 1041 67.17910000 68.21620000 95.07100000 48.76280000 46.16400000 90.99940000 1042 66.32290000 9.497340000 24.85670000 17.76180000 9.358670000 5.300380000 1043 77.66930000 5.962900000 32.00580000 25.20180000 12.92970000 8.891640000 1044 74.34970000 0.000000000 39.86920000 23.87800000 12.03390000 13.58620000 1045 66.23090000 0.000000000 45.05520000 19.78990000 9.841200000 17.24210000 1046 69.59150000 0.000000000 61.74340000 24.83100000 12.07910000 33.78800000 1047 73.29480000 0.000000000 86.35100000 33.89540000 15.96430000 69.81010000 1048 59.86120000 9.327330000 80.49230000 24.73500000 11.74590000 59.66940000 1049 68.76090000 11.92170000 80.13350000 29.51890000 14.43080000 59.36170000 1050 72.80070000 28.46930000 78.65430000 33.41820000 19.34840000 57.77150000 1051 82.70820000 26.83020000 82.23610000 40.88370000 22.66100000 63.75870000 1052 79.53830000 28.65840000 72.30510000 36.06150000 20.96800000 48.51600000 1053 89.22540000 54.45160000 82.06590000 53.17310000 40.00710000 66.17950000 1054 90.60870000 58.43210000 91.91070000 59.16100000 45.05270000 84.17110000 1055 62.91930000 54.46120000 72.09840000 33.07330000 29.98500000 50.12290000 1056 79.15590000 57.33970000 75.15320000 44.81710000 37.61530000 55.38000000 1057 25.81650000 9.360290000 48.14880000 5.911600000 2.919920000 19.21400000 1058 34.70160000 0.000000000 74.45170000 13.45600000 5.847290000 49.87010000 1059 50.01260000 12.88660000 86.01790000 22.34030000 10.60620000 68.80500000 1060 52.28030000 11.09180000 95.35200000 26.44530000 12.17710000 86.16650000 1061 49.36220000 35.20240000 30.78140000 13.68130000 12.24000000 8.730600000 1062 61.05550000 34.22760000 30.13710000 18.60800000 14.46700000 8.578580000 1063 77.47540000 33.41840000 32.95390000 28.30740000 19.17740000 10.44610000 1064 81.75690000 44.67690000 39.88120000 34.94970000 26.76620000 15.85470000 1065 92.84720000 48.43430000 40.64100000 44.78020000 33.57630000 17.18220000 1066 92.56660000 83.97880000 44.37460000 62.17450000 67.86230000 25.66850000 1067 92.49490000 82.82300000 91.13060000 73.07640000 71.04650000 86.99560000 1068 68.23460000 60.02420000 84.10860000 41.76640000 37.38400000 69.67790000 1069 76.58880000 67.79010000 84.48440000 50.60360000 47.22630000 71.74890000 1070 20.49240000 16.06830000 23.37350000 2.642400000 2.229180000 4.160330000 1071 18.48710000 15.03910000 28.01550000 2.660870000 2.067970000 6.022010000 1072 35.80350000 40.26790000 60.04140000 15.02340000 14.24720000 32.76970000 1073 38.80770000 40.28280000 71.03100000 18.49140000 15.73730000 46.65430000 1074 75.29070000 9.375780000 22.83990000 22.98950000 12.06190000 4.794500000 1075 91.81370000 5.633450000 21.27870000 34.84090000 17.98720000 4.783400000 1076 70.10230000 10.94280000 16.97030000 19.52200000 10.43110000 2.898400000 1077 100.0000000 35.49470000 13.39280000 45.12040000 28.67700000 4.294650000 1078 100.0000000 72.72690000 17.92860000 59.40060000 56.92740000 10.01750000 1079 38.74110000 27.95240000 33.48680000 8.918900000 7.627560000 9.534060000 1080 39.92820000 44.21370000 89.58950000 25.59030000 20.37570000 76.87780000 1081 39.74530000 60.90810000 91.98910000 32.46010000 32.84060000 83.36830000 1082 50.28520000 72.78590000 100.0000000 44.92480000 47.47440000 101.4080000 1083 50.64700000 93.07770000 100.0000000 57.82610000 73.06440000 105.6680000 1084 0.000000000 50.09680000 49.93000000 11.73790000 17.20770000 23.24190000 1085 0.000000000 56.54920000 49.13040000 13.98870000 21.92820000 23.31790000 1086 71.59080000 73.00310000 62.52270000 44.09880000 48.56480000 40.73160000 1087 80.28860000 81.69760000 75.42680000 58.07800000 62.85320000 59.95770000 1088 86.31580000 88.73620000 79.99630000 68.37860000 74.79210000 68.74620000 1089 91.48730000 94.72520000 80.87750000 76.96790000 85.49370000 71.77150000 1090 43.75660000 35.97250000 31.62040000 11.90620000 11.57580000 9.127810000 1091 48.74360000 50.46260000 36.03800000 18.34970000 21.03510000 13.12020000 1092 59.05680000 55.21080000 35.48960000 24.48290000 26.78390000 13.57410000 1093 89.96960000 56.96420000 36.59140000 45.03560000 38.38780000 15.40520000 1094 92.33740000 64.47690000 61.50560000 54.42550000 47.56370000 38.80090000 1095 92.47220000 71.39850000 66.06640000 59.01680000 54.89220000 45.50840000 1096 94.22790000 72.17840000 84.10230000 65.97550000 58.50470000 72.46830000 1097 41.55820000 9.007340000 15.52800000 6.459120000 3.561810000 1.921240000 1098 56.23680000 18.01430000 15.74290000 12.76330000 7.768470000 2.449340000 1099 73.87490000 48.71800000 11.93500000 28.71080000 25.69970000 4.330130000 1100 66.27130000 42.06580000 10.17140000 22.12940000 19.30000000 3.180030000 1101 68.64970000 58.59610000 26.42580000 30.03580000 31.75860000 9.615640000 1102 71.87920000 58.21770000 46.01060000 34.10460000 33.35800000 21.80090000 1103 78.33020000 60.28920000 58.63110000 41.43020000 38.15940000 34.42460000 1104 51.62020000 89.91650000 39.17520000 40.23460000 62.49720000 21.99040000 1105 52.91770000 93.21670000 50.92490000 44.90400000 68.16390000 32.24060000 1106 37.59250000 55.81250000 34.71470000 16.47440000 23.01220000 12.80870000 1107 44.16110000 57.91210000 45.30420000 20.75380000 26.30190000 20.56840000 1108 47.45750000 61.42150000 66.60550000 27.63250000 31.56630000 43.34540000 1109 10.34000000 24.03200000 28.56580000 2.982570000 3.712860000 6.574490000 1110 8.180590000 27.95190000 39.81180000 4.716130000 5.373730000 13.27080000 1111 12.00190000 27.96030000 43.66230000 5.475400000 5.705390000 16.10460000 1112 28.65260000 52.76370000 69.77230000 19.58270000 22.16240000 46.11770000 1113 59.46540000 58.02690000 71.55060000 32.59530000 31.84330000 49.74050000 1114 58.82650000 69.88360000 71.87900000 37.83100000 42.63390000 52.00600000 1115 65.90970000 72.50010000 84.68400000 46.63790000 48.76860000 72.59530000 1116 65.30690000 75.66500000 93.23120000 50.99400000 53.25230000 88.68880000 1117 8.637010000 13.89220000 23.50510000 1.401930000 1.327840000 4.099780000 1118 10.04890000 12.61570000 32.37080000 2.151010000 1.493760000 8.093930000 1119 11.14340000 26.73980000 65.06640000 9.311300000 6.908630000 37.61140000 1120 17.16700000 28.08300000 76.37760000 13.02430000 8.812530000 53.32200000 1121 49.55880000 35.10650000 92.22400000 27.49040000 17.73840000 81.15810000 1122 16.07490000 6.882630000 30.86140000 2.199920000 1.124570000 7.230640000 1123 13.64900000 0.000000000 33.42810000 2.138070000 0.914957000 8.562850000 1124 10.76920000 9.331460000 50.48710000 4.516100000 2.152600000 21.22380000 1125 23.98870000 47.66350000 49.74180000 12.68020000 16.49310000 22.88440000 1126 33.96430000 46.54740000 49.12530000 14.26990000 16.79650000 22.30810000 1127 83.70040000 80.35170000 56.71070000 55.17120000 60.65630000 35.97770000 1128 93.06960000 82.53180000 60.27330000 64.58340000 67.41250000 40.68250000 1129 85.64860000 51.28680000 40.04280000 39.97760000 32.55520000 16.81910000 1130 86.76860000 62.80340000 41.91850000 45.70470000 42.33940000 19.74490000 1131 88.93000000 100.0000000 73.11270000 76.68250000 91.57100000 61.15000000 1132 8.798020000 52.18820000 11.03060000 8.893720000 17.27020000 3.606860000 1133 0.000000000 83.51930000 19.26230000 24.54580000 48.32330000 10.56240000 1134 61.92770000 91.56840000 17.87570000 44.24460000 66.49930000 12.64970000 1135 64.14790000 93.34670000 74.92120000 55.83150000 73.30480000 61.34620000 1136 18.93650000 33.66820000 22.50070000 5.003440000 7.345340000 4.712780000 1137 17.78570000 34.71050000 43.28850000 7.276810000 8.601010000 16.28220000 1138 43.90640000 38.43040000 44.41800000 14.14200000 13.42090000 17.72530000 1139 72.99020000 51.40220000 46.00950000 32.18250000 28.49760000 20.96310000 1140 95.29380000 61.17030000 51.67920000 53.44870000 45.07710000 28.03900000 1141 33.56620000 18.26590000 7.694710000 4.652540000 3.653430000 0.796105000 1142 54.54730000 14.45850000 8.715890000 11.46730000 6.656940000 1.122710000 1143 80.83650000 11.60690000 9.507080000 26.24500000 13.98390000 1.851370000 1144 89.07810000 47.55880000 6.013770000 38.98900000 30.45040000 4.018530000 1145 17.19690000 9.355120000 9.083400000 1.146350000 0.870106000 0.591612000 1146 14.24390000 9.120650000 14.09570000 0.994815000 0.758881000 1.366390000 1147 12.56290000 7.858770000 16.62000000 0.912293000 0.627561000 1.900920000 1148 8.378210000 5.868590000 22.89900000 0.952259000 0.513339000 3.747550000 1149 33.84310000 20.88740000 38.51670000 7.162500000 5.132060000 12.21960000 1150 44.12910000 26.18410000 45.60270000 11.91030000 8.556190000 17.85030000 1151 66.06670000 53.70380000 48.40630000 29.34480000 28.23240000 23.08880000 1152 69.75230000 59.36200000 56.43470000 35.16110000 34.39480000 31.67310000 1153 70.36200000 84.62000000 79.18910000 54.60680000 63.67200000 66.04810000 1154 45.26930000 51.58910000 46.56000000 18.91790000 21.74780000 20.81390000 1155 48.22140000 54.83630000 53.48770000 22.39050000 25.17870000 27.57580000 1156 59.70500000 66.92590000 65.58300000 35.18710000 39.26500000 43.13850000 1157 75.71870000 69.58640000 77.21440000 48.69810000 47.83890000 60.24380000 1158 82.53220000 75.24290000 87.78180000 59.71670000 57.61920000 79.01140000 1159 25.20420000 18.36430000 21.47670000 3.463900000 2.992280000 3.607210000 1160 31.08700000 25.10760000 28.76840000 6.034810000 5.517590000 6.856180000 1161 31.98830000 47.19450000 27.83140000 11.30390000 15.88350000 8.150290000 1162 41.18920000 48.90780000 28.76790000 14.44570000 18.32430000 8.884710000 1163 45.83790000 54.41380000 58.22620000 22.29040000 24.78020000 32.40840000 1164 50.59950000 53.60030000 75.02610000 27.88620000 26.73760000 53.98490000 1165 51.70540000 57.81070000 86.80850000 33.60570000 31.70410000 73.66430000 1166 55.31840000 69.15400000 89.76350000 41.33840000 43.25570000 80.78200000 1167 68.25010000 70.49650000 89.72730000 48.59820000 48.01860000 81.25260000 1168 90.85760000 72.54750000 93.61500000 66.66470000 58.77380000 89.66470000 1169 25.58990000 14.75130000 25.94700000 3.518560000 2.495600000 5.164800000 1170 56.68030000 10.42770000 23.80010000 12.84760000 6.902530000 4.681640000 1171 66.99420000 71.33980000 22.46910000 34.78010000 43.11140000 10.03640000 1172 76.42520000 83.26310000 26.33920000 47.69180000 59.96000000 14.09230000 1173 77.44850000 89.14830000 38.80890000 53.53440000 68.57360000 22.21610000 1174 84.05580000 85.74210000 42.65440000 56.41120000 66.61090000 24.41100000 1175 87.28880000 85.11600000 52.18930000 59.98710000 67.67040000 32.53930000 1176 19.44020000 19.12170000 9.513580000 2.167200000 2.501500000 0.904563000 1177 17.27100000 21.15110000 0.000000000 2.040840000 2.794880000 0.431928000 1178 13.60460000 57.76910000 32.96240000 12.78260000 22.28990000 11.86950000 1179 7.582270000 63.09380000 40.10830000 15.54880000 27.01630000 17.08270000 1180 19.16120000 63.91500000 47.34090000 17.93590000 28.68010000 22.85990000 1181 29.89250000 70.63990000 51.92380000 23.81700000 36.50270000 28.17670000 1182 48.41880000 70.89530000 55.33310000 30.06090000 39.84460000 31.85300000 1183 57.10200000 73.44090000 54.49620000 34.91170000 44.37380000 31.62310000 1184 58.89180000 75.34280000 63.59640000 38.72620000 47.67580000 42.12820000 1185 71.29350000 81.49640000 86.12590000 55.39080000 60.90400000 76.95960000 1186 79.25030000 94.44740000 91.01590000 70.93800000 81.69400000 88.95020000 1187 16.40880000 21.30530000 27.32120000 3.007840000 3.201280000 5.913070000 1188 20.95440000 26.05650000 30.24020000 4.484070000 4.918520000 7.530820000 1189 25.19000000 31.84310000 38.44850000 7.080510000 7.680940000 12.67080000 1190 37.06100000 39.28580000 43.79640000 12.16640000 12.73450000 17.21230000 1191 36.86280000 43.59280000 43.76620000 13.28530000 15.06040000 17.57900000 1192 47.47250000 43.83040000 56.88410000 19.05990000 17.87600000 29.80620000 1193 51.86910000 48.13670000 67.71100000 24.55420000 22.40750000 43.16670000 1194 59.46690000 30.98180000 69.99050000 24.10180000 15.50870000 44.89060000 1195 66.38850000 31.93440000 86.46610000 32.76560000 19.69000000 70.78990000 1196 80.86750000 37.67520000 90.80780000 44.63050000 27.52530000 79.49450000 1197 88.25870000 43.49320000 100.0000000 55.11400000 34.83530000 98.43180000 1198 32.44540000 24.13450000 74.71970000 14.54720000 8.730720000 50.76150000 1199 46.42890000 27.20290000 79.03530000 20.42980000 12.32040000 57.69550000 1200 47.96030000 42.41640000 92.30250000 28.75150000 21.12500000 81.89370000 1201 13.91180000 10.39840000 94.81590000 16.84090000 7.193150000 84.66040000 1202 80.58710000 11.59490000 93.17480000 41.41830000 20.03230000 82.67330000 1203 81.45730000 56.15340000 93.44410000 51.86740000 39.86430000 86.46650000 1204 9.645520000 15.95060000 17.52830000 1.263880000 1.543230000 2.286040000 1205 8.204680000 14.82590000 13.40640000 0.923434000 1.248710000 1.331870000 1206 7.749110000 27.39930000 12.46070000 2.407960000 4.299240000 1.673130000 1207 17.36480000 30.45250000 14.45030000 3.750330000 5.788460000 2.263470000 1208 15.35800000 36.79830000 9.258380000 4.733560000 8.319490000 1.861210000 1209 58.02130000 43.80050000 0.000000000 18.27570000 18.06160000 2.523250000 1210 59.63590000 46.21890000 42.67100000 22.55460000 21.03120000 17.40980000 1211 65.03110000 47.71770000 52.42020000 27.39430000 24.04980000 26.05790000 1212 23.49720000 16.77070000 89.35460000 16.50290000 7.926210000 74.52590000 1213 31.13840000 23.60730000 92.05340000 19.70890000 10.64180000 79.87650000 1214 31.12070000 70.27690000 92.91700000 34.98400000 40.70070000 86.50980000 1215 38.06560000 78.78560000 94.96860000 42.20780000 51.32090000 92.13970000 1216 0.000000000 8.751510000 15.92700000 0.486106000 0.464183000 1.728410000 1217 26.63360000 17.68490000 17.17900000 3.414430000 2.892610000 2.344220000 1218 29.92720000 14.39480000 14.02060000 3.647890000 2.600530000 1.567200000 1219 30.15280000 25.43870000 24.16840000 5.508940000 5.363620000 4.909600000 1220 32.86670000 38.97590000 78.98610000 18.81540000 15.14310000 58.24830000 1221 42.01380000 50.55410000 79.87980000 25.11500000 23.51880000 60.94390000 1222 44.41370000 59.50830000 76.16580000 28.25710000 30.37400000 56.36270000 1223 51.01320000 77.24640000 79.56940000 40.57110000 49.74280000 64.69900000 1224 65.05200000 87.52360000 79.20910000 53.50320000 65.93420000 66.57450000 1225 70.29250000 88.08400000 86.97530000 59.32500000 69.21010000 79.84180000 1226 83.36310000 91.83870000 85.98360000 70.23890000 78.73610000 79.37180000 1227 20.92520000 14.40970000 7.403710000 1.885870000 1.714750000 0.540366000 1228 22.42610000 10.50420000 8.432340000 1.870070000 1.328910000 0.568994000 1229 20.19900000 12.71080000 9.363850000 1.705190000 1.436340000 0.704936000 1230 29.56330000 38.62460000 8.615580000 7.323080000 10.31820000 2.036670000 1231 35.44760000 58.04520000 28.05020000 16.12720000 24.23580000 9.606970000 1232 51.10960000 73.66190000 42.80340000 30.47260000 42.49000000 21.23390000 1233 55.46970000 67.66460000 42.43620000 29.16910000 37.20680000 20.00800000 1234 72.01710000 66.90440000 50.85850000 38.88880000 41.51090000 27.35150000 1235 86.49270000 71.77820000 63.66910000 53.90390000 52.61870000 42.37050000 1236 91.51330000 74.50800000 73.59980000 61.84960000 58.61520000 56.26950000 1237 64.69370000 68.51370000 51.50000000 35.58660000 40.97240000 28.01940000 1238 79.70000000 87.07990000 51.94120000 55.68860000 67.37580000 32.47290000 1239 56.59080000 33.20910000 21.75700000 15.58710000 12.66300000 4.927970000 1240 85.19130000 32.61020000 29.58960000 33.27020000 21.52440000 8.900810000 1241 90.11700000 37.12310000 49.75790000 40.73660000 26.55700000 23.36300000 1242 89.57600000 59.41100000 66.44560000 51.09480000 42.38380000 43.99300000 1243 34.01070000 7.923460000 23.51490000 4.731390000 2.553890000 4.164620000 1244 40.41070000 12.04700000 27.46240000 7.014870000 4.000230000 5.918310000 1245 60.77930000 8.629280000 29.26820000 15.16930000 7.923050000 7.075030000 1246 89.84010000 10.12580000 27.38140000 33.85950000 17.67970000 7.108460000 1247 73.70900000 40.15130000 21.53010000 26.50640000 20.72920000 5.834200000 1248 85.02560000 67.95600000 19.32900000 44.64040000 45.65650000 9.008160000 1249 84.63190000 77.75350000 35.46020000 50.97820000 56.59210000 17.91390000 1250 94.13080000 90.60700000 41.29800000 67.46750000 77.21690000 24.87910000 1251 41.88200000 49.02930000 19.11730000 14.01440000 18.24190000 5.269440000 1252 49.32450000 67.06090000 32.06770000 25.04530000 34.78760000 13.15170000 1253 52.53720000 76.36370000 34.29300000 31.48870000 45.37270000 16.08860000 1254 61.71810000 83.98980000 35.57660000 40.49040000 56.82820000 18.58210000 1255 68.57350000 93.16000000 36.68700000 50.57520000 71.26960000 21.51970000 1256 24.10780000 55.98850000 6.646890000 11.83740000 20.92210000 3.658200000 1257 37.97630000 79.35550000 6.026390000 26.44520000 45.55380000 7.595630000 1258 54.87680000 90.69990000 6.654740000 39.91520000 63.40200000 10.37880000 1259 13.49890000 15.55930000 11.57800000 1.259260000 1.518140000 1.052090000 1260 7.187780000 10.93610000 8.120690000 0.473457000 0.644276000 0.477767000 1261 11.53160000 7.374730000 9.783310000 0.581021000 0.458728000 0.627834000 1262 12.99940000 12.43740000 7.408730000 0.888261000 0.993227000 0.454126000 1263 75.39510000 17.14250000 14.00280000 23.13790000 12.99850000 2.543740000 1264 80.65440000 23.68420000 9.506500000 27.30890000 16.30180000 2.242620000 1265 44.66050000 12.80570000 61.30070000 13.54710000 6.851300000 32.85910000 1266 64.62790000 10.91290000 65.72640000 23.23570000 11.55690000 38.60020000 1267 68.89110000 51.80010000 100.0000000 44.63750000 33.42190000 98.71100000 1268 19.31500000 22.29380000 37.86630000 4.559500000 4.060770000 11.72330000 1269 16.98030000 21.03020000 53.40640000 6.537900000 4.566610000 24.35270000 1270 22.65460000 18.77910000 59.62720000 8.267570000 4.935120000 30.86280000 1271 20.66520000 12.16960000 33.37790000 3.250520000 2.005850000 8.686760000 1272 28.70600000 8.071700000 33.04200000 4.371740000 2.280690000 8.494370000 1273 56.20930000 11.49140000 33.65730000 13.56940000 7.260840000 9.314080000 1274 85.50580000 18.31040000 38.68970000 32.31540000 17.67040000 13.42930000 1275 92.36730000 30.70230000 43.56460000 40.19850000 24.34330000 17.79730000 1276 59.20700000 18.09170000 23.35030000 14.59180000 8.673410000 4.766110000 1277 74.56590000 23.11670000 52.11860000 27.36010000 15.72650000 24.16490000 1278 22.72510000 8.494840000 16.01930000 2.064800000 1.261720000 1.820440000 1279 26.86120000 7.008940000 14.79060000 2.663220000 1.495370000 1.562690000 1280 28.99330000 0.000000000 17.79490000 3.114050000 1.558580000 2.260880000 1281 58.92700000 34.69870000 53.56200000 20.94700000 15.44700000 25.84650000 1282 74.82270000 36.58890000 68.83090000 33.64720000 22.24610000 44.13080000 1283 87.54690000 38.00520000 85.96440000 47.98290000 29.56520000 71.02030000 1284 34.92040000 11.85040000 61.34220000 10.56810000 5.223860000 32.74990000 1285 38.32820000 0.000000000 61.87880000 11.28560000 5.092590000 33.31140000 1286 51.42340000 16.20090000 74.18310000 19.56430000 9.974470000 49.95340000 1287 53.24110000 25.25650000 92.83660000 27.37200000 14.91500000 81.78070000 1288 22.46520000 45.22700000 40.92690000 10.32090000 14.29940000 15.48010000 1289 21.65880000 80.34910000 45.07930000 26.65620000 46.19100000 23.91580000 1290 13.74400000 82.33380000 39.08770000 26.13030000 47.82600000 19.84270000 1291 25.02910000 100.0000000 38.33830000 39.90950000 73.40730000 23.55460000 1292 27.08830000 100.0000000 63.29270000 44.69100000 75.36310000 46.79180000 1293 37.84820000 42.38550000 19.58560000 10.78240000 13.53880000 4.667870000 1294 36.93500000 55.45270000 17.65210000 14.78810000 22.09250000 5.571860000 1295 76.42300000 76.20400000 18.98380000 42.96630000 51.29910000 10.08650000 1296 91.53620000 92.74590000 16.85700000 64.60930000 78.25000000 13.58500000 1297 93.62880000 60.61500000 10.80070000 47.70600000 42.23150000 6.346180000 1298 93.45590000 76.64590000 9.034880000 55.54850000 58.20280000 8.785660000 1299 93.18620000 76.55200000 22.87310000 55.88240000 58.22450000 11.98330000 1300 20.44170000 0.000000000 41.26980000 3.833300000 1.678490000 13.63150000 1301 47.04740000 10.50440000 42.47150000 10.85190000 5.651300000 14.90870000 1302 48.74630000 32.24440000 46.33900000 14.78460000 11.64300000 18.89800000 1303 59.36740000 40.74250000 52.07310000 22.36160000 18.40030000 24.90110000 1304 58.84450000 46.40900000 59.01380000 25.11640000 22.10680000 32.60720000 1305 31.53690000 14.78950000 39.81550000 6.175340000 3.701930000 12.87370000 1306 39.46260000 9.455890000 43.57590000 8.440680000 4.312620000 15.61310000 1307 52.33830000 18.31300000 50.37010000 14.77930000 8.427230000 21.78700000 1308 65.67720000 17.61430000 50.02290000 21.07840000 11.57750000 21.74700000 1309 75.78070000 16.73400000 74.60460000 32.58720000 16.74620000 51.18930000 1310 79.63250000 12.64400000 83.64210000 37.55570000 18.51560000 65.47160000 1311 70.96490000 11.54160000 55.42560000 24.63580000 12.59100000 26.97320000 1312 80.25190000 54.90080000 56.50330000 40.12750000 34.29180000 31.46350000 1313 82.11310000 64.41390000 69.42170000 48.41530000 44.20350000 48.38040000 1314 86.16750000 64.48740000 78.18860000 53.85680000 46.78010000 61.26550000 1315 49.35830000 16.96210000 33.70920000 11.10240000 6.605460000 9.346870000 1316 56.50380000 20.08690000 84.28110000 25.19070000 13.11090000 66.15800000 1317 58.73250000 32.97550000 90.03250000 30.23970000 18.56230000 77.09310000 1318 63.37790000 41.81470000 92.84980000 35.71380000 24.44240000 83.20510000 1319 18.22570000 30.76070000 58.66580000 9.237110000 8.088440000 30.35470000 1320 25.82040000 35.61140000 68.37560000 13.61420000 11.59550000 42.52770000 1321 28.50410000 50.39510000 73.65420000 19.74490000 20.87650000 51.28220000 1322 32.12720000 59.05590000 80.20260000 25.73460000 28.65360000 62.41660000 1323 45.99470000 85.81360000 90.18290000 47.39550000 60.69150000 84.59700000 1324 15.47380000 21.75820000 18.91590000 2.393620000 3.035120000 2.889290000 1325 15.90640000 25.63220000 16.67320000 2.865840000 4.096180000 2.480390000 1326 20.18780000 55.84830000 15.37550000 11.44660000 20.61060000 4.915390000 1327 28.83270000 69.43920000 18.98060000 19.17610000 33.63500000 7.929640000 1328 39.50610000 72.26810000 47.61570000 26.38390000 39.18190000 24.67590000 1329 40.07390000 76.62770000 59.48320000 31.18980000 44.97510000 37.22250000 1330 27.02650000 70.12950000 38.92700000 20.97330000 34.87720000 17.50690000 1331 25.70730000 68.52210000 73.29040000 26.76380000 35.86210000 53.28180000 1332 29.13870000 77.23560000 78.44620000 33.58250000 46.16950000 62.61570000 1333 21.23530000 33.54800000 36.47630000 6.567600000 7.965240000 11.48840000 1334 26.04390000 39.57090000 39.76990000 9.170160000 11.36370000 14.16340000 1335 30.06180000 49.52460000 41.18780000 13.12370000 17.78870000 16.19250000 1336 45.87930000 79.99090000 40.06470000 31.73120000 48.56900000 20.35980000 1337 42.92780000 40.19030000 10.51750000 11.36530000 12.99520000 2.577680000 1338 46.70460000 50.85460000 0.000000000 15.81150000 20.15000000 3.056200000 1339 50.79300000 71.43330000 10.28710000 26.48070000 38.96990000 6.763040000 1340 82.75780000 91.11170000 23.36110000 57.07390000 72.59690000 14.87000000 1341 89.25470000 100.0000000 26.04300000 68.81030000 88.45150000 18.35530000 1342 25.30660000 25.44050000 15.81420000 4.083090000 4.684630000 2.327690000 1343 42.28920000 23.76920000 27.65890000 8.799240000 6.665470000 6.425880000 1344 42.41420000 31.26660000 50.41010000 13.02810000 10.37090000 22.29100000 1345 51.19680000 46.60620000 52.94590000 20.58840000 20.00310000 26.14260000 1346 61.39830000 53.98240000 59.29940000 29.04160000 27.99290000 33.85310000 1347 67.01870000 60.82590000 61.24950000 35.22630000 35.23950000 37.13700000 1348 66.35330000 62.13950000 68.64310000 37.18090000 36.90090000 46.52400000 1349 66.12580000 67.98210000 72.58700000 40.83060000 42.73720000 52.86520000 1350 27.29240000 24.28420000 44.33600000 6.979440000 5.611020000 16.53090000 1351 33.32590000 22.98140000 49.16320000 8.875780000 6.230020000 20.58640000 1352 44.52770000 30.44040000 72.26740000 18.40970000 12.35140000 47.72990000 1353 54.01100000 40.65930000 85.18880000 28.26920000 20.44380000 68.95960000 1354 53.35080000 78.63690000 88.49320000 45.22950000 53.01620000 80.15840000 1355 5.289650000 18.25210000 21.32240000 1.516270000 1.972230000 3.462420000 1356 9.990740000 48.41170000 60.76840000 13.54870000 17.05520000 34.21580000 1357 12.69660000 74.42590000 60.74560000 25.14640000 39.99220000 38.00600000 1358 11.58230000 85.49500000 67.98480000 33.41840000 53.94580000 49.14500000 1359 52.36930000 93.79700000 92.18930000 56.09640000 73.28830000 90.30740000 1360 9.752770000 40.23020000 15.66460000 5.379960000 9.904600000 3.233000000 1361 13.75560000 73.92280000 15.43580000 19.22030000 37.18900000 7.719030000 1362 35.22400000 87.12680000 13.89310000 30.80000000 55.05790000 10.23680000 1363 48.99650000 90.97280000 17.93280000 38.04080000 62.67740000 12.25400000 1364 55.93330000 100.0000000 21.03210000 47.83400000 77.67820000 15.54060000 1365 59.42210000 26.74850000 0.000000000 15.09430000 10.70220000 1.270380000 1366 62.55000000 32.72090000 35.72090000 19.63530000 14.45550000 11.58940000 1367 78.79990000 31.21640000 48.91670000 30.92840000 19.61410000 21.78960000 1368 78.92260000 41.80360000 56.02950000 34.80430000 25.15680000 29.48610000 1369 66.80880000 35.15880000 53.44300000 25.12490000 17.75560000 25.95490000 1370 87.71440000 37.25530000 56.54700000 40.13900000 26.15020000 29.93730000 1371 45.49590000 38.56780000 28.67140000 12.85260000 13.02350000 7.900550000 1372 53.29380000 38.60660000 27.94520000 15.83490000 14.58280000 7.711680000 1373 60.61290000 43.90320000 27.72980000 20.63720000 19.19950000 8.253070000 1374 62.07250000 50.44730000 28.92170000 23.56870000 23.80260000 9.533490000 1375 60.99880000 61.57400000 33.08450000 27.79860000 32.42130000 13.10110000 1376 65.85960000 72.02540000 44.60360000 36.89240000 44.46240000 22.66450000 1377 15.29680000 17.32400000 2.773950000 1.427450000 1.858680000 0.319189000 1378 23.74730000 16.12110000 3.650080000 2.404870000 2.197460000 0.362616000 1379 56.93420000 11.31200000 46.88680000 15.65720000 8.117690000 18.62790000 1380 87.75290000 0.000000000 47.60250000 34.46800000 17.36180000 20.02700000 1381 89.68810000 13.84640000 71.95440000 41.67510000 21.16020000 47.76420000 1382 68.21810000 26.70260000 46.50960000 23.09540000 14.42880000 19.13920000 1383 78.09140000 47.82880000 45.66250000 34.22090000 27.75450000 20.42890000 1384 79.58350000 65.37180000 44.78320000 42.08150000 42.18210000 22.09320000 1385 92.87870000 70.15320000 44.32630000 54.46830000 52.07630000 22.98970000 1386 96.81760000 76.73000000 43.24910000 61.23430000 60.88590000 23.50110000 1387 63.13510000 37.94500000 20.13030000 19.77480000 16.43460000 4.916080000 1388 75.08570000 45.80500000 34.71700000 30.14330000 24.86980000 12.44830000 1389 56.50320000 25.96280000 25.44720000 14.48290000 10.09890000 5.850790000 1390 67.39970000 23.59300000 26.42700000 19.77720000 12.30020000 6.400820000 1391 68.10620000 35.87530000 27.40250000 22.51850000 17.05830000 7.595410000 1392 67.27210000 37.12040000 61.34390000 27.45210000 19.44490000 34.60730000 1393 67.00710000 36.35280000 80.14170000 32.05190000 20.97710000 60.50480000 1394 31.84940000 36.21340000 46.14710000 10.45570000 10.69610000 18.78490000 1395 41.09420000 35.68970000 48.31850000 13.18850000 11.88510000 20.70830000 1396 54.47120000 58.95980000 53.93310000 26.67220000 29.82450000 28.68660000 1397 55.55650000 64.94820000 54.06000000 29.82930000 35.38710000 29.72010000 1398 58.93150000 92.73740000 57.19610000 48.46640000 69.35010000 38.52330000 1399 23.30890000 40.77440000 31.36050000 8.057170000 11.37230000 9.156040000 1400 21.13100000 61.44750000 29.57720000 14.84270000 25.69960000 10.67170000 1401 30.07930000 77.52070000 28.34930000 24.49080000 42.81930000 12.88960000 1402 30.64380000 93.14980000 43.28200000 36.51200000 63.90800000 25.41210000 1403 33.87540000 93.78080000 89.28170000 48.92930000 69.69460000 84.60720000 1404 15.42160000 44.29680000 49.87330000 10.55010000 13.84420000 22.60400000 1405 11.04860000 49.78430000 67.70380000 15.69250000 18.65610000 42.90030000 1406 15.82490000 60.16670000 69.17260000 20.43870000 26.97720000 46.19570000 1407 11.63120000 66.22050000 69.35460000 22.87920000 32.30640000 47.33950000 1408 18.17790000 83.41550000 73.49100000 34.13640000 52.16670000 56.32850000 1409 19.10240000 84.92900000 81.30600000 37.49810000 55.07330000 68.67300000 1410 16.92920000 15.20640000 8.363820000 1.474840000 1.594910000 0.633854000 1411 15.04160000 10.79010000 11.75450000 1.069690000 0.929292000 0.976350000 1412 61.96120000 24.04710000 8.025080000 16.01920000 10.56130000 1.563060000 1413 69.31300000 36.62620000 10.90860000 22.48200000 17.40410000 2.898780000 1414 69.03530000 37.21010000 0.000000000 22.32100000 17.54340000 2.210070000 1415 67.88160000 58.16570000 11.08430000 28.59360000 30.84680000 5.197330000 1416 69.22200000 75.30010000 7.446430000 37.58420000 47.81520000 7.561530000 1417 69.40150000 82.18090000 13.29880000 41.90590000 56.05710000 9.731450000 1418 40.06020000 45.13560000 9.055490000 11.82410000 15.31490000 2.813820000 1419 58.62520000 55.59190000 13.35720000 22.78940000 26.31870000 5.009500000 1420 93.28890000 76.33590000 61.33260000 61.30070000 60.20480000 40.67800000 1421 100.0000000 92.12370000 70.03370000 79.33950000 84.27190000 55.31120000 1422 100.0000000 91.81580000 80.55680000 82.09350000 85.02310000 70.89450000 1423 37.51190000 44.70150000 31.70440000 12.30260000 15.21130000 9.852630000 1424 38.77250000 64.43970000 50.55520000 22.76370000 31.46630000 25.98280000 1425 46.57900000 81.67730000 57.66250000 35.97360000 51.93930000 36.32000000 1426 37.89800000 47.01030000 38.97460000 13.95350000 17.02480000 14.46290000 1427 53.71150000 49.92600000 40.20290000 20.70550000 21.91540000 15.89240000 1428 62.54770000 64.25440000 53.92960000 32.85320000 36.46920000 29.64000000 1429 82.81320000 73.57220000 72.65450000 54.38620000 54.03550000 54.42740000 1430 91.24240000 80.43600000 76.49260000 65.87570000 65.69290000 61.68950000 1431 95.71310000 91.10280000 84.37550000 79.00460000 82.54390000 76.88450000 1432 28.00690000 29.19880000 33.52220000 6.527260000 6.718170000 9.504420000 1433 51.94740000 57.36590000 33.64350000 21.94550000 26.76250000 12.62920000 1434 75.67040000 70.52860000 59.42590000 44.67550000 46.99990000 36.83880000 1435 77.15440000 74.38650000 69.93540000 50.18650000 52.61590000 50.60380000 1436 82.07250000 79.23770000 95.46830000 64.43910000 63.15820000 94.23340000 1437 74.44020000 81.33730000 90.41780000 58.71240000 62.30180000 84.74400000 1438 7.931670000 7.666880000 28.08430000 1.388020000 0.774959000 5.870710000 1439 9.161100000 6.118350000 32.78390000 1.845190000 0.885715000 8.216590000 1440 27.16110000 16.01780000 65.70960000 10.15160000 5.351150000 38.07070000 1441 51.18480000 22.85090000 67.68000000 18.49520000 10.71700000 41.18920000 1442 51.31540000 32.91130000 67.28510000 20.16300000 14.13040000 41.24740000 1443 62.14900000 48.64710000 75.22340000 31.46940000 25.99170000 53.94340000 1444 30.41250000 42.36530000 37.98560000 10.56520000 13.22820000 13.25400000 1445 33.68220000 64.62890000 38.09710000 19.61970000 30.19160000 16.12390000 1446 53.77890000 69.96800000 62.99160000 33.37550000 40.65510000 40.32790000 1447 63.27410000 81.85920000 94.77550000 54.13640000 60.23800000 92.85520000 1448 66.51760000 94.85780000 97.11750000 65.58620000 79.12370000 100.5340000 1449 33.61960000 52.77730000 82.37460000 24.30440000 24.18760000 65.15510000 1450 32.82570000 62.86520000 89.71130000 30.65840000 33.29000000 79.32570000 1451 19.33500000 40.95770000 53.22090000 10.64140000 12.41970000 25.47070000 1452 19.93180000 49.93740000 58.35000000 14.47320000 18.35170000 31.71430000 1453 19.17480000 59.17520000 59.68900000 18.17210000 25.44230000 34.36840000 1454 24.24470000 80.64830000 64.36180000 30.95820000 48.24860000 43.58030000 1455 82.76320000 80.71670000 68.84150000 57.46670000 61.85000000 50.53420000 1456 83.41490000 90.19190000 73.41710000 65.31900000 74.92140000 58.97130000 1457 90.75820000 94.14970000 72.89110000 73.64060000 83.41830000 59.42050000 1458 91.40140000 95.16160000 88.00840000 79.53170000 87.02730000 84.04750000 1459 27.57990000 24.91490000 9.323140000 4.207510000 4.656200000 1.189640000 1460 32.50980000 25.28360000 8.392620000 5.300000000 5.303770000 1.151240000 1461 35.17220000 35.66120000 51.44050000 12.02960000 11.21580000 23.46130000 1462 38.70010000 42.20990000 54.63250000 15.25310000 15.27680000 27.17970000 1463 60.45990000 41.78960000 59.66290000 24.68170000 19.84610000 32.91600000 1464 79.69270000 47.47990000 75.72890000 41.77530000 30.72220000 55.06400000 1465 43.77020000 53.68880000 37.55120000 17.90140000 22.50560000 14.37690000 1466 61.83970000 77.23190000 46.29640000 37.90720000 49.23500000 24.90040000 1467 63.61610000 93.84640000 46.66500000 49.72410000 71.40990000 28.86390000 1468 79.87430000 31.65350000 7.228130000 28.06270000 18.69030000 2.421780000 1469 78.97170000 41.28830000 8.621800000 29.73000000 22.90470000 3.286110000 1470 78.88420000 60.53030000 9.470580000 36.43270000 36.36950000 5.630890000 1471 92.96490000 67.14380000 8.617540000 50.09900000 47.92490000 7.041730000 1472 76.31460000 55.23060000 24.05260000 33.23490000 31.43000000 8.436210000 1473 76.91100000 70.85700000 73.43720000 49.06640000 49.12300000 54.87700000 1474 89.11610000 82.42400000 81.96210000 67.03630000 67.91580000 70.66560000 1475 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 1476 14.89180000 9.188780000 84.13190000 13.15730000 5.635780000 65.09660000 1477 38.59820000 30.74210000 91.32450000 22.53840000 13.87790000 78.98530000 1478 45.90050000 55.34830000 91.87480000 32.15710000 29.30230000 82.48630000 1479 52.06290000 65.20300000 93.38430000 39.30290000 39.19420000 86.88440000 1480 36.68050000 67.60750000 58.62470000 25.23880000 34.81120000 34.62440000 1481 39.14660000 86.57100000 63.43590000 37.91600000 57.43930000 43.86160000 1482 80.45210000 93.13650000 62.96250000 62.66640000 76.95390000 45.75600000 1483 20.09030000 32.93790000 9.193970000 4.413190000 6.880410000 1.592630000 1484 24.91190000 44.29220000 5.971850000 7.941330000 12.94450000 2.272550000 1485 48.44400000 49.45600000 28.71890000 17.13910000 19.98660000 9.040770000 1486 1.282050000 0.000000000 0.000000000 0.002845590 0.001466990 0.000133215 1487 12.31020000 7.378170000 3.623660000 0.539760000 0.448779000 0.122332000 1488 25.09170000 25.87530000 52.47880000 8.171870000 6.422980000 23.72470000 1489 49.75660000 50.84270000 58.02230000 22.41410000 22.91790000 31.82100000 1490 67.11950000 50.64260000 68.49610000 33.02130000 28.00530000 44.83170000 1491 90.63510000 73.66410000 79.55100000 62.39000000 58.00810000 65.11560000 1492 93.49340000 76.72100000 90.69540000 70.09280000 64.09320000 85.00280000 1493 93.86620000 89.05670000 93.31550000 79.09390000 80.12670000 92.55670000 1494 8.489120000 11.73120000 25.72570000 1.414400000 1.100600000 4.915550000 1495 9.658560000 30.17480000 51.95610000 7.082530000 6.964470000 23.38770000 1496 13.45710000 40.91060000 72.84040000 14.50020000 13.87250000 49.04100000 1497 13.41760000 75.18470000 76.43670000 29.58990000 42.45040000 59.03100000 1498 11.56650000 76.38050000 92.47300000 35.32580000 45.80790000 86.63410000 1499 8.219330000 14.67910000 40.00630000 3.102040000 2.101670000 12.85870000 1500 40.45570000 10.67110000 80.07270000 16.96850000 7.855990000 58.65700000 1501 90.32610000 44.89810000 82.23370000 50.85540000 33.98480000 65.41510000 1502 25.95820000 28.55840000 9.048570000 4.487600000 5.675930000 1.339100000 1503 32.75260000 35.71890000 11.82420000 7.422810000 9.324630000 2.273220000 1504 58.84300000 34.44520000 9.059520000 16.37000000 13.52220000 2.228750000 1505 68.88600000 93.81220000 8.557420000 49.32060000 71.54560000 11.63540000 1506 75.60990000 91.34390000 12.38710000 51.78250000 70.17590000 11.77440000 1507 98.91070000 92.15040000 16.17700000 70.45920000 80.63660000 13.57420000 1508 90.17560000 88.46520000 28.92900000 61.33870000 72.02910000 16.85530000 1509 41.29840000 52.86840000 10.12230000 14.81720000 20.69370000 3.827770000 1510 67.68790000 51.89430000 11.31390000 26.08020000 25.97270000 4.423560000 1511 84.57860000 51.29430000 15.22660000 37.05620000 31.29840000 5.596300000 1512 88.89200000 54.42700000 57.67610000 46.59460000 37.33020000 32.95520000 1513 98.20490000 55.61970000 61.91390000 55.75850000 42.62980000 38.25460000 1514 63.26370000 27.53590000 61.74810000 23.41480000 14.46200000 34.32810000 1515 89.31320000 25.44830000 77.99010000 44.37440000 24.28700000 57.11650000 1516 40.35680000 10.28570000 33.20730000 7.444100000 4.010080000 8.757710000 1517 57.94010000 10.03830000 40.53350000 15.12290000 7.848570000 13.70310000 1518 89.26810000 16.03600000 51.14970000 36.89780000 19.49260000 23.47680000 1519 88.72050000 28.34670000 94.90080000 50.01800000 27.24580000 86.94860000 1520 6.406330000 61.95980000 26.37510000 13.53940000 25.39480000 9.235190000 1521 10.30520000 61.75510000 58.68950000 18.25770000 27.15840000 33.58630000 1522 14.84570000 75.52300000 70.67030000 28.31950000 42.25970000 50.75930000 1523 71.63780000 92.33520000 71.14890000 58.34640000 73.63970000 55.89340000 1524 80.79340000 92.71820000 80.37330000 67.24210000 78.32980000 70.09090000 1525 28.14170000 34.14900000 82.47010000 17.71720000 12.76690000 63.45540000 1526 32.53770000 37.52720000 93.35840000 23.15140000 16.29280000 83.26540000 1527 59.48130000 21.32110000 35.37030000 16.18630000 9.906190000 10.68210000 1528 80.35680000 26.93820000 41.75710000 30.13610000 18.19700000 15.78720000 1529 91.72960000 25.37020000 48.08430000 39.46580000 22.52910000 21.17510000 1530 39.37660000 8.712400000 19.19090000 5.955960000 3.263010000 2.823930000 1531 61.82400000 10.99740000 18.79570000 15.05790000 8.123570000 3.170330000 1532 81.93600000 12.79310000 19.14060000 27.47240000 14.68470000 3.880330000 1533 80.85380000 13.42110000 29.96850000 27.54820000 14.69550000 8.068650000 1534 48.73410000 11.27730000 36.94480000 10.80230000 5.772620000 11.13510000 1535 56.06450000 9.347140000 53.46490000 16.30010000 8.166390000 24.59050000 1536 78.11170000 11.41750000 67.52730000 31.86710000 15.99840000 41.30530000 1537 89.31420000 33.87920000 74.81190000 45.00660000 27.01230000 52.82060000 1538 93.25980000 33.66400000 91.62890000 53.52650000 30.71730000 81.17210000 1539 40.08660000 19.79030000 36.49150000 8.503880000 5.662530000 10.95140000 1540 37.76420000 22.44570000 31.25270000 7.580160000 5.732270000 8.036840000 1541 38.05550000 20.87610000 45.21500000 9.217610000 6.081380000 17.20150000 1542 51.83190000 26.64370000 51.29020000 15.82680000 10.57460000 22.99670000 1543 54.98120000 60.89750000 63.68770000 29.77060000 32.40940000 39.76390000 1544 70.54120000 75.62750000 68.90820000 46.44470000 51.74350000 49.25290000 1545 83.27750000 89.39340000 93.14380000 70.95850000 76.28270000 91.91500000 1546 86.32730000 93.42830000 92.65370000 75.89930000 83.08020000 92.03310000 1547 9.199380000 18.01970000 26.99980000 2.055930000 2.168000000 5.623680000 1548 5.552590000 31.23070000 37.46870000 4.921330000 6.402730000 11.89980000 1549 41.73450000 31.30460000 63.74540000 15.52080000 11.35470000 36.52070000 1550 45.84600000 38.08320000 76.91350000 21.83290000 16.43720000 55.14020000 1551 51.52850000 68.49240000 83.06040000 37.15170000 40.86190000 68.83320000 1552 64.37050000 85.16590000 90.24290000 55.17270000 64.07190000 84.95000000 1553 65.47230000 93.84180000 90.86040000 61.95920000 76.41400000 88.11540000 1554 61.26160000 8.723490000 10.79670000 14.33970000 7.625450000 1.424120000 1555 93.76940000 14.97010000 7.880620000 36.41450000 19.57990000 2.214710000 1556 95.81800000 53.96070000 8.979600000 46.83820000 37.80580000 5.301200000 1557 94.55830000 57.33980000 25.24520000 47.86160000 40.19630000 9.820290000 1558 41.37220000 61.73740000 63.54950000 24.96100000 30.47910000 39.47760000 1559 41.64900000 70.61710000 95.05960000 38.79210000 42.83360000 90.85960000 1560 16.32560000 77.49600000 29.20980000 22.38230000 41.70220000 13.18720000 1561 43.83750000 89.85650000 28.59490000 36.13680000 60.45570000 15.79340000 1562 41.16260000 74.11550000 28.52940000 25.50310000 40.48690000 12.46900000 1563 48.64210000 76.45990000 63.50740000 34.91830000 46.65200000 42.02370000 1564 71.34330000 85.74370000 94.16910000 60.93570000 67.43830000 92.70810000 1565 83.75370000 88.69680000 97.30280000 72.38670000 76.13160000 99.97100000 1566 60.71220000 63.21020000 71.80010000 35.51210000 36.65970000 50.86450000 1567 64.14920000 62.80450000 80.76820000 39.67400000 38.23580000 64.43880000 1568 83.89870000 77.65290000 82.94180000 60.49510000 60.24300000 71.14670000 1569 37.21140000 30.75440000 30.62190000 8.700540000 8.300820000 8.152150000 1570 42.88850000 30.05220000 30.89420000 10.31320000 8.932530000 8.326880000 1571 59.32170000 41.04600000 74.54670000 27.58390000 20.61750000 52.11540000 1572 69.94870000 43.66970000 78.03230000 35.03290000 25.43560000 57.89550000 1573 74.45670000 42.72600000 91.32000000 41.85010000 28.04820000 80.69450000 1574 84.58680000 48.08620000 93.69590000 51.32580000 35.26220000 86.09040000 1575 18.70670000 4.021550000 25.98470000 1.995660000 0.966461000 4.965460000 1576 16.85060000 28.55450000 29.65650000 4.338630000 5.464770000 7.357850000 1577 20.43270000 30.19420000 41.76810000 6.469070000 6.841910000 14.85060000 1578 92.17240000 52.90250000 49.01590000 47.04840000 36.90730000 24.36580000 1579 46.21060000 13.00410000 9.323140000 8.051390000 4.737360000 1.002770000 1580 93.86960000 28.51910000 7.580240000 38.20930000 23.05370000 2.761640000 1581 93.66660000 32.96770000 64.77130000 45.77220000 27.42020000 39.28360000 1582 98.60830000 34.52490000 80.21590000 54.55060000 31.95810000 61.55730000 1583 33.40760000 9.409310000 19.47030000 4.391030000 2.500160000 2.840140000 1584 47.82610000 9.150090000 21.98280000 8.974530000 4.828150000 3.840010000 1585 58.02250000 52.18720000 24.45660000 21.82720000 23.85950000 7.729790000 1586 67.32500000 91.71930000 63.37920000 53.46310000 70.69280000 45.53230000 1587 29.74940000 38.62260000 31.46640000 8.699130000 10.87240000 9.080680000 1588 32.55060000 37.76960000 34.55970000 9.440050000 10.90280000 10.75160000 1589 10.04570000 23.00900000 8.062900000 1.747010000 2.989680000 0.857473000 1590 9.833160000 31.29920000 9.135890000 3.123990000 5.725860000 1.430830000 1591 12.10440000 32.92750000 92.89610000 18.85350000 12.55960000 81.88810000 1592 17.00700000 48.55450000 92.12740000 23.20960000 21.06190000 81.84270000 1593 27.54230000 58.13830000 91.04750000 27.95380000 28.82050000 81.06820000 1594 26.91780000 25.58570000 20.18240000 4.619190000 4.968320000 3.517330000 1595 28.27740000 34.05380000 24.99470000 6.765130000 8.355990000 5.740580000 1596 33.34100000 53.33430000 94.24160000 28.50010000 26.18590000 86.59520000 1597 52.36340000 76.94800000 93.64830000 45.65920000 51.56740000 89.44470000 1598 55.45930000 86.60470000 94.38030000 53.23430000 64.29990000 92.91760000 1599 9.268960000 24.27360000 19.99890000 2.333540000 3.501650000 3.298970000 1600 8.039270000 25.08180000 24.92050000 2.718960000 3.838890000 5.052660000 1601 10.16250000 30.93110000 27.75850000 4.055390000 5.986420000 6.589240000 1602 17.48190000 55.32230000 38.77420000 12.86360000 20.81190000 15.11700000 1603 41.78820000 56.61380000 49.20640000 20.07950000 25.10480000 23.67770000 1604 45.20510000 64.77120000 55.71230000 25.93830000 33.22130000 31.18150000 1605 57.82580000 83.37010000 63.05750000 42.88000000 56.93440000 43.04810000 1606 58.40820000 92.63990000 64.89160000 49.83640000 69.75720000 47.39020000 1607 57.84030000 57.55050000 43.27560000 25.84030000 28.74080000 19.18160000 1608 64.80720000 58.39420000 42.87200000 29.64240000 31.21990000 19.15390000 1609 81.14370000 61.49570000 46.73430000 41.70760000 39.33250000 23.15260000 1610 94.27920000 68.48990000 52.88690000 56.22940000 51.56760000 30.29990000 1611 38.23740000 22.72420000 7.264100000 6.409540000 5.338380000 0.988773000 1612 52.38790000 28.07000000 9.728890000 12.24490000 9.547670000 1.760620000 1613 71.89270000 27.02690000 11.47390000 22.12520000 14.37630000 2.418250000 1614 72.12110000 36.51460000 38.48240000 26.20850000 19.04690000 13.87920000 1615 77.58510000 53.72380000 40.46840000 35.18680000 31.39280000 17.14460000 1616 81.86070000 67.96370000 54.01580000 46.50620000 46.14220000 30.87330000 1617 84.33710000 75.84260000 59.86240000 53.65840000 55.88700000 38.56960000 1618 88.63350000 93.52210000 63.83090000 69.21230000 80.71980000 47.18410000 1619 36.79230000 34.26300000 23.84060000 8.736240000 9.449250000 5.404940000 1620 38.82170000 63.55090000 43.76270000 21.27390000 30.21720000 20.08090000 1621 8.665770000 24.29570000 16.29750000 2.116500000 3.416420000 2.298680000 1622 4.893440000 77.26590000 22.80100000 21.03110000 40.86650000 10.44380000 1623 10.91490000 95.41940000 74.13870000 41.91690000 68.41440000 59.99100000 1624 18.52660000 94.11210000 91.07250000 46.99640000 68.98450000 87.86370000 1625 13.55250000 39.47590000 31.06670000 6.519100000 10.07560000 8.835520000 1626 10.18010000 47.04700000 31.11330000 8.466490000 14.31610000 9.575290000 1627 55.88030000 64.55620000 31.29360000 26.52760000 33.79020000 12.47530000 1628 92.14180000 68.23450000 30.75840000 51.22370000 49.15570000 13.86620000 1629 42.47600000 26.43230000 17.79880000 8.595440000 7.229660000 3.067710000 1630 50.28350000 28.57160000 23.16230000 12.09010000 9.525700000 4.994410000 1631 64.97980000 41.00880000 29.42330000 22.23910000 18.79850000 8.875840000 1632 69.77070000 58.21900000 38.11550000 31.73090000 32.26330000 15.89770000 1633 74.04900000 63.42550000 66.73300000 41.85140000 40.22260000 44.43010000 1634 92.73570000 68.58590000 73.41570000 59.68680000 52.87820000 55.01130000 1635 23.52090000 8.103320000 26.15220000 2.797340000 1.544250000 5.104250000 1636 73.95550000 12.02320000 36.22360000 23.51290000 12.40130000 11.29550000 1637 93.03790000 10.10160000 36.30910000 37.36260000 19.38000000 11.96550000 1638 92.98570000 33.72840000 36.11010000 40.34050000 25.43820000 12.85550000 1639 95.64780000 37.01650000 56.96330000 46.64930000 29.41170000 30.66290000 1640 43.89410000 17.10390000 21.85930000 8.116250000 5.203000000 3.915960000 1641 43.82970000 34.17480000 20.06030000 10.62100000 10.42060000 4.216330000 1642 43.96650000 33.61410000 42.93900000 12.83150000 11.11740000 16.21010000 1643 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1644 10.57550000 7.191060000 41.52520000 3.016780000 1.415970000 13.80840000 1645 14.22530000 13.47070000 46.30940000 4.321620000 2.490520000 17.65820000 1646 90.82920000 73.79620000 52.83220000 56.14180000 55.64210000 31.03800000 1647 29.74380000 24.75610000 16.71830000 4.878040000 4.937480000 2.547730000 1648 34.87160000 23.81390000 15.72100000 5.897550000 5.266720000 2.323270000 1649 38.86730000 95.43630000 11.34690000 37.57780000 67.25840000 11.79170000 1650 21.03530000 69.30720000 7.704450000 17.36810000 32.65010000 5.723940000 1651 19.97770000 88.69510000 33.97430000 30.33970000 56.22250000 18.06070000 1652 38.97410000 86.95330000 35.74110000 33.36350000 56.01810000 18.90070000 1653 49.14750000 89.31520000 56.08120000 41.59510000 62.26420000 36.34440000 1654 10.37630000 22.13150000 45.95930000 4.845210000 4.046030000 17.64280000 1655 9.621520000 19.13700000 93.62070000 16.79560000 8.253630000 82.55220000 1656 17.14360000 66.02610000 96.73680000 31.98380000 35.85610000 93.19050000 1657 9.972640000 16.52020000 21.66040000 1.565230000 1.746910000 3.527590000 1658 6.228270000 12.63330000 19.18030000 0.947818000 0.994507000 2.646890000 1659 17.30930000 5.549470000 16.20610000 1.262990000 0.704903000 1.798750000 1660 16.90170000 10.48020000 19.16590000 1.554380000 1.118230000 2.634680000 1661 91.86690000 24.64820000 17.29500000 36.24420000 21.08100000 4.154340000 1662 92.83600000 46.80430000 14.69800000 42.01890000 31.62810000 5.285730000 1663 30.38930000 8.210570000 26.74520000 4.143260000 2.238800000 5.417780000 1664 45.80420000 7.753490000 26.66530000 8.521020000 4.470670000 5.583760000 1665 66.80460000 9.653160000 37.81300000 19.31840000 10.02410000 12.06210000 1666 86.83170000 7.470950000 64.93910000 37.33390000 18.61670000 38.23680000 1667 95.51290000 13.84020000 67.12690000 45.25260000 23.14710000 41.46140000 1668 96.91570000 13.98040000 78.86940000 49.67430000 25.07280000 58.35600000 1669 98.31900000 52.74360000 91.58190000 63.36240000 43.94770000 83.11940000 1670 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 1671 15.87180000 18.37830000 21.64100000 2.204930000 2.344180000 3.602730000 1672 21.06800000 17.33820000 35.30080000 3.928240000 2.939590000 9.941710000 1673 78.75010000 20.14560000 62.82620000 31.93490000 17.27900000 35.69430000 1674 87.15240000 43.09040000 64.41850000 42.95260000 29.68570000 39.43480000 1675 93.96310000 49.06140000 76.79440000 53.52860000 37.51700000 57.35810000 1676 43.55900000 21.72490000 7.574500000 7.937650000 5.933380000 1.051640000 1677 50.04850000 19.26680000 8.302160000 10.03090000 6.581940000 1.139090000 1678 49.88320000 41.32320000 24.45400000 14.86940000 15.17310000 6.418790000 1679 52.21810000 53.37070000 24.85580000 19.71200000 23.40770000 7.909010000 1680 53.08420000 64.38580000 73.24370000 32.92260000 36.08030000 52.93250000 1681 52.82390000 72.00140000 78.69680000 38.15400000 44.21600000 62.38820000 1682 58.69620000 85.39240000 81.49170000 49.55100000 61.72650000 69.62390000 1683 65.72500000 94.91730000 86.18890000 61.28420000 77.42250000 79.94710000 1684 27.14180000 39.57980000 65.11460000 14.02620000 13.33350000 38.66300000 1685 28.06280000 68.45490000 66.65790000 25.45640000 35.33650000 44.25470000 1686 18.62200000 37.05100000 33.95270000 6.728780000 9.254740000 10.22680000 1687 45.38000000 41.67790000 36.78580000 14.47430000 14.97660000 12.61830000 1688 49.42000000 43.86190000 46.48620000 17.93850000 17.52770000 19.98970000 1689 13.45480000 1.879270000 13.47100000 0.726048000 0.357416000 1.182350000 1690 7.435150000 3.563150000 8.989660000 0.249469000 0.152868000 0.489512000 1691 9.243810000 12.66830000 4.844610000 0.622680000 0.882829000 0.259083000 1692 10.68730000 15.98690000 79.37910000 11.79790000 5.769220000 57.42670000 1693 15.38260000 47.31940000 82.79770000 19.48720000 18.91020000 65.09020000 1694 10.62780000 60.77340000 89.30410000 26.33170000 29.70410000 78.11960000 1695 14.51280000 71.91610000 93.35460000 33.42580000 41.15010000 87.51470000 1696 18.74590000 55.48850000 68.64530000 18.72010000 23.27460000 44.86950000 1697 34.77850000 62.83740000 77.98940000 27.36040000 32.00640000 59.50190000 1698 57.83950000 64.34330000 78.27910000 36.46290000 37.71070000 60.57170000 1699 83.38360000 29.34230000 36.74250000 32.06050000 19.87760000 12.61040000 1700 91.20910000 48.31210000 51.66460000 45.12750000 33.49550000 26.22830000 1701 20.75440000 7.144120000 8.883350000 1.494430000 0.920426000 0.559847000 1702 18.58630000 2.543210000 9.590140000 1.134020000 0.589121000 0.599410000 1703 19.55990000 21.68090000 16.65030000 2.729530000 3.206930000 2.310360000 1704 23.92550000 19.72370000 18.71120000 3.234570000 3.109780000 2.801930000 1705 26.92020000 38.37250000 24.60690000 7.478030000 10.21840000 5.910920000 1706 30.35210000 47.65870000 45.97700000 13.27120000 16.86680000 19.68800000 1707 58.94820000 47.35840000 53.58470000 24.38510000 22.30160000 27.01070000 1708 92.39340000 47.20020000 91.65690000 56.41530000 37.54620000 82.39040000 1709 32.13320000 10.47810000 44.90470000 6.749680000 3.493090000 16.58380000 1710 37.16270000 9.643500000 52.93930000 9.341290000 4.610760000 23.75780000 1711 38.52090000 45.93380000 52.44080000 15.88620000 17.27820000 25.37700000 1712 43.52750000 51.61750000 60.69100000 20.99010000 22.52400000 34.79080000 1713 56.82720000 56.23620000 94.26830000 37.83500000 32.64360000 87.40150000 1714 14.20940000 6.448480000 21.09390000 1.239630000 0.698881000 3.157170000 1715 13.35880000 11.66180000 21.93830000 1.451900000 1.144860000 3.510410000 1716 7.281980000 6.370480000 19.21630000 0.693459000 0.426552000 2.561020000 1717 48.47800000 42.34540000 72.67870000 22.73970000 18.71090000 49.31090000 1718 67.56720000 57.96210000 90.89970000 42.82200000 36.38440000 81.47020000 1719 24.35650000 19.94840000 30.55310000 4.208960000 3.548390000 7.436940000 1720 33.04690000 22.75190000 33.62780000 6.633110000 5.275890000 9.279800000 1721 34.88410000 27.09090000 43.83380000 9.034310000 7.321100000 16.36140000 1722 42.16200000 34.22080000 58.20870000 15.04470000 12.14270000 30.33180000 1723 43.64180000 40.50270000 60.53700000 17.54310000 15.62630000 33.46530000 1724 56.12600000 50.67390000 61.16190000 25.71980000 24.45730000 35.45560000 1725 73.26120000 86.05020000 62.69000000 52.96310000 64.70660000 43.57870000 1726 70.64210000 46.84820000 29.42170000 27.17470000 23.88550000 9.596920000 1727 79.84470000 48.14330000 30.07740000 33.58730000 27.80350000 10.33410000 1728 73.13510000 54.71840000 32.93940000 31.78860000 30.30210000 12.40190000 1729 77.57040000 66.52270000 37.03660000 40.21040000 42.15470000 16.66600000 1730 87.62090000 73.65960000 41.35590000 51.68160000 53.44550000 21.16430000 1731 91.51400000 80.91150000 50.67450000 60.42160000 63.99920000 30.38780000 1732 41.90160000 18.88950000 12.07940000 7.176700000 5.038860000 1.500510000 1733 45.10410000 17.62120000 27.74460000 9.020820000 5.692600000 6.264690000 1734 45.64730000 22.10820000 35.75520000 10.52380000 7.129110000 10.67620000 1735 51.04380000 37.14850000 37.05260000 15.48180000 13.76080000 12.49850000 1736 60.08480000 37.89240000 44.43100000 20.71430000 16.61100000 18.00500000 1737 69.27780000 39.67450000 46.47600000 26.42500000 20.18680000 20.04720000 1738 70.32690000 45.39390000 54.75790000 30.11040000 24.31470000 28.26790000 1739 71.99000000 44.46610000 60.71950000 32.05870000 24.76270000 34.67230000 1740 92.34860000 54.79390000 71.75980000 52.83920000 40.37350000 50.61210000 1741 45.86120000 26.55920000 34.14180000 11.06120000 8.381610000 9.938050000 1742 72.09460000 79.43680000 39.62960000 43.99120000 54.40320000 20.53960000 1743 90.05440000 93.65740000 51.62800000 67.92870000 80.49370000 34.06390000 1744 48.63010000 31.94790000 17.96010000 11.76880000 10.33600000 3.542670000 1745 48.90770000 62.93060000 16.45350000 21.80790000 30.37370000 6.501430000 1746 59.88100000 70.02130000 12.14000000 29.85600000 39.61560000 6.989490000 1747 59.04690000 83.08920000 70.52030000 45.11020000 57.61010000 52.63190000 1748 9.103390000 41.45100000 37.10930000 7.407370000 11.23650000 12.47270000 1749 9.408230000 52.65960000 40.87770000 11.47810000 18.58110000 16.21050000 1750 11.30390000 72.01740000 39.43950000 20.04550000 35.85480000 18.09110000 1751 8.793930000 80.65780000 49.00720000 26.24480000 46.18380000 27.24480000 1752 12.97410000 93.10710000 84.59510000 43.51580000 66.36030000 76.00390000 1753 11.87550000 91.21520000 93.46470000 45.14820000 64.84530000 91.68180000 1754 37.06610000 33.78190000 9.361640000 8.035290000 9.011410000 1.833250000 1755 81.74720000 55.75580000 10.84800000 36.50460000 33.49320000 5.256590000 1756 96.83920000 55.54790000 39.64670000 50.59940000 40.38260000 17.49680000 1757 66.82150000 31.21550000 30.06080000 21.03910000 14.79990000 8.477130000 1758 71.13230000 30.01020000 41.12290000 24.58780000 16.14200000 15.22400000 1759 80.12900000 37.14790000 47.07530000 32.82810000 22.54030000 20.66550000 1760 81.37660000 48.17520000 55.08530000 38.24890000 29.80880000 29.23160000 1761 52.88340000 31.74140000 36.23140000 14.96020000 11.74430000 11.62420000 1762 58.49970000 37.58210000 37.40970000 18.91550000 15.68140000 12.91550000 1763 67.72040000 43.33610000 42.03790000 25.86800000 21.46550000 16.84880000 1764 68.40190000 80.69100000 71.15100000 48.73500000 57.25630000 53.24040000 1765 74.28950000 93.93850000 84.18830000 64.97600000 78.33470000 76.49380000 1766 10.02600000 19.31840000 18.28000000 1.653840000 2.230770000 2.597000000 1767 13.76690000 37.46590000 42.46770000 7.398840000 9.625220000 15.85480000 1768 15.61920000 41.12610000 41.40640000 8.357810000 11.53100000 15.39330000 1769 50.75930000 48.85220000 44.55360000 19.73120000 20.80390000 18.96270000 1770 57.58550000 50.42670000 46.61990000 23.55410000 23.53150000 20.96380000 1771 58.39040000 53.53370000 77.44300000 31.96690000 28.72460000 57.78540000 1772 61.71880000 60.42240000 89.56110000 40.24030000 36.63930000 79.19310000 1773 76.20570000 71.11310000 92.79290000 54.89400000 51.61420000 87.33090000 1774 30.66890000 26.30560000 34.07430000 6.652590000 6.049670000 9.681570000 1775 30.57750000 30.30580000 43.00520000 8.455660000 7.876850000 15.86520000 1776 31.22940000 45.50880000 63.46410000 16.16060000 16.96270000 37.22930000 1777 41.04130000 45.25430000 69.21930000 20.10700000 18.72070000 44.68200000 1778 52.84170000 10.08820000 17.51160000 10.76230000 5.845200000 2.611620000 1779 56.50760000 26.01350000 13.83000000 13.83570000 9.852910000 2.392960000 1780 56.50770000 40.10340000 9.704170000 16.65310000 15.68970000 2.710740000 1781 59.20520000 49.51670000 9.644020000 20.74900000 22.00000000 3.705320000 1782 62.27090000 52.82710000 42.86730000 26.14030000 26.19860000 18.36570000 1783 34.65540000 34.16450000 60.85200000 13.43400000 11.22910000 33.19320000 1784 34.92240000 86.78270000 79.98950000 41.30470000 58.88490000 67.09160000 1785 10.21760000 34.60110000 48.88080000 7.478050000 8.567650000 20.86140000 1786 8.280890000 36.40590000 77.26430000 14.28300000 11.93410000 55.20310000 1787 2.830890000 47.29000000 93.51860000 22.48120000 20.01700000 84.32680000 1788 9.079290000 56.87970000 93.41170000 26.08700000 27.00280000 85.28010000 1789 23.13730000 53.30020000 51.93270000 14.88320000 20.48370000 25.56380000 1790 36.83970000 56.18710000 52.48380000 19.02360000 24.24300000 26.59730000 1791 79.17670000 60.11510000 53.32830000 40.88230000 37.88760000 28.89810000 1792 88.98040000 65.88100000 57.38730000 51.50340000 47.13960000 34.28020000 1793 68.98400000 55.64800000 58.18060000 33.56290000 31.29660000 33.02260000 1794 72.89750000 66.65110000 62.54210000 41.65820000 42.48500000 39.70970000 1795 72.70060000 78.79460000 62.34410000 48.01100000 55.44410000 41.64210000 1796 62.54680000 75.35950000 69.97440000 42.11830000 49.25820000 50.43380000 1797 67.22760000 75.21370000 74.30730000 45.72660000 50.86290000 56.64790000 1798 27.22930000 45.37920000 52.85270000 13.09110000 15.57560000 25.59270000 1799 25.59290000 86.54230000 54.60150000 32.84950000 55.01450000 33.89150000 1800 42.12690000 93.92000000 77.38010000 47.57980000 69.58800000 64.75390000 1801 49.90340000 93.09600000 85.24610000 52.19980000 70.80070000 77.51690000 1802 82.40070000 15.68250000 43.33120000 30.41810000 16.25270000 16.57230000 1803 93.41590000 11.62210000 43.57040000 38.72040000 20.09310000 17.05930000 1804 94.42080000 41.44460000 44.82590000 44.59170000 30.28210000 19.69790000 1805 72.30130000 29.60780000 23.52040000 23.41660000 15.63710000 5.707360000 1806 94.49990000 42.90000000 24.47830000 42.79110000 30.21980000 7.861170000 1807 93.78330000 51.31480000 27.24570000 45.08760000 35.36340000 9.870550000 1808 93.69610000 64.15350000 34.75810000 50.97420000 46.07400000 15.46760000 1809 13.60560000 3.773660000 8.565580000 0.620721000 0.349977000 0.460292000 1810 8.493280000 4.844490000 13.25740000 0.440043000 0.270518000 1.140870000 1811 8.039510000 12.18090000 14.29340000 0.760392000 0.880925000 1.441880000 1812 7.959570000 9.385610000 17.76080000 0.757938000 0.636006000 2.198010000 1813 30.41950000 19.17070000 55.61240000 8.922700000 5.430180000 26.61090000 1814 35.42150000 24.14980000 65.63970000 12.93030000 8.172700000 38.38100000 1815 41.29970000 6.059120000 28.83980000 7.144710000 3.659440000 6.472470000 1816 61.38650000 24.42300000 31.10910000 17.09520000 11.04440000 8.486960000 1817 62.18350000 21.93420000 66.69000000 23.18300000 12.98400000 40.10110000 1818 92.74990000 63.33160000 75.88440000 57.88000000 48.14270000 57.81010000 1819 75.76430000 21.21790000 25.42640000 24.46890000 14.26670000 6.120670000 1820 91.72760000 31.90830000 24.24240000 37.80560000 23.70240000 6.775620000 1821 92.66770000 41.59760000 30.73410000 41.42270000 28.91200000 10.46290000 1822 34.73850000 20.36810000 20.00350000 5.635890000 4.448950000 3.309200000 1823 34.95050000 29.87950000 23.98100000 7.376180000 7.438150000 5.140950000 1824 33.31270000 39.00080000 23.15550000 8.908130000 11.20250000 5.483260000 1825 34.63330000 47.66070000 21.75230000 11.64230000 16.33280000 5.842580000 1826 18.73750000 28.09740000 22.00470000 3.875670000 5.177790000 4.183590000 1827 18.12960000 43.58480000 21.91900000 7.362310000 12.26810000 5.339480000 1828 15.35580000 49.78290000 26.96310000 9.392370000 16.17500000 7.924830000 1829 13.13090000 51.98410000 76.12660000 18.86380000 21.17310000 55.02300000 1830 10.13200000 61.84970000 77.43090000 22.98260000 29.11410000 58.31550000 1831 13.11880000 69.90130000 80.95540000 28.08430000 37.32110000 65.17480000 1832 12.08750000 80.70140000 90.31500000 37.13670000 50.60630000 83.43400000 1833 13.95390000 87.61590000 95.76300000 43.68880000 60.31970000 95.36010000 1834 7.746070000 22.19640000 30.09030000 2.740450000 3.202000000 7.217240000 1835 8.759250000 19.39830000 33.02030000 2.743530000 2.672910000 8.643930000 1836 9.636590000 70.19510000 52.27560000 20.99450000 34.69930000 28.31220000 1837 13.69020000 94.77580000 59.93090000 38.15180000 66.16940000 41.44850000 1838 34.36870000 94.82340000 65.20380000 42.79730000 68.47860000 47.90220000 1839 10.02070000 32.56110000 19.23370000 3.774340000 6.391130000 3.554980000 1840 12.67250000 39.94690000 25.22720000 6.064600000 10.08150000 6.202780000 1841 16.17840000 65.09810000 23.14890000 15.38470000 28.50040000 8.478480000 1842 74.73970000 69.00400000 31.65730000 38.98930000 43.41020000 13.86470000 1843 78.35000000 78.89450000 32.18850000 46.83620000 55.49140000 16.06420000 1844 94.56950000 82.12510000 33.40090000 61.28050000 65.83160000 17.96150000 1845 93.50710000 83.18640000 71.26800000 68.00070000 69.47900000 54.74660000 1846 47.35720000 9.781050000 51.48660000 12.37640000 6.215800000 22.52110000 1847 56.84000000 10.71820000 69.10190000 20.17560000 9.867090000 42.81250000 1848 61.81070000 11.95530000 93.00060000 30.03780000 14.20500000 81.81560000 1849 74.90180000 32.61820000 93.69650000 40.52690000 23.60440000 84.41040000 1850 26.14480000 7.480630000 38.08540000 4.437230000 2.215250000 11.51630000 1851 29.40430000 9.712140000 80.47010000 14.19890000 6.341810000 59.14590000 1852 36.55880000 8.734410000 91.59510000 19.55920000 8.613720000 78.63210000 1853 38.91590000 19.32340000 93.20740000 21.60010000 10.77810000 81.99370000 1854 60.97710000 49.63480000 92.28050000 36.68290000 28.53880000 82.86510000 1855 82.53530000 69.15680000 93.54330000 58.51390000 51.95610000 88.64060000 1856 89.95180000 79.24370000 95.03160000 70.24420000 66.17500000 93.65290000 1857 79.90160000 57.15670000 68.54820000 43.49330000 37.02720000 46.09010000 1858 82.70100000 58.97790000 86.08480000 51.33620000 41.58740000 73.37330000 1859 93.40880000 65.88040000 90.28300000 64.19330000 52.63090000 82.34020000 1860 54.43410000 58.30410000 8.502090000 21.82130000 27.44720000 4.566560000 1861 66.88670000 64.52660000 11.66570000 30.83290000 36.13280000 6.188880000 1862 75.38500000 66.68780000 8.871600000 36.90940000 40.79580000 6.389120000 1863 84.16040000 74.53850000 11.81260000 47.12430000 52.09240000 8.434380000 1864 85.01800000 95.60700000 12.31640000 61.43290000 79.74160000 13.10020000 1865 61.01910000 81.83790000 9.502460000 37.02820000 53.23960000 8.859710000 1866 81.36110000 83.19460000 11.29800000 50.20660000 61.28600000 9.966000000 1867 91.46390000 82.97130000 12.04180000 57.78010000 64.97900000 10.39750000 1868 17.84940000 13.98640000 17.50770000 1.795780000 1.582390000 2.260270000 1869 21.71290000 13.79990000 15.32690000 2.184930000 1.774050000 1.756910000 1870 24.56710000 10.40450000 13.52770000 2.350100000 1.552060000 1.338040000 1871 26.84150000 13.11000000 8.609910000 2.778330000 2.031520000 0.676030000 1872 37.24580000 13.71810000 5.053530000 5.177430000 3.338690000 0.504931000 1873 30.81770000 9.887580000 8.874270000 3.406060000 2.073100000 0.680571000 1874 32.86510000 4.970980000 10.43150000 3.742390000 1.986990000 0.842597000 1875 93.27310000 10.96280000 15.45170000 35.95630000 18.91300000 3.313090000 1876 97.85910000 12.71090000 26.85370000 40.70640000 21.43830000 7.243590000 1877 93.57270000 10.56640000 57.50860000 41.23480000 21.01900000 29.90930000 1878 92.48770000 16.76680000 87.94680000 49.04340000 24.75710000 73.52460000 1879 44.20170000 8.333100000 70.40400000 15.34180000 7.170240000 44.30560000 1880 70.86660000 12.64440000 90.87470000 34.34030000 16.57640000 78.04730000 1881 89.89990000 7.958610000 93.17920000 48.21890000 23.27650000 82.94970000 1882 2.278750000 17.88220000 14.53320000 1.081170000 1.732110000 1.638170000 1883 4.808100000 19.05500000 9.402750000 1.084860000 1.933120000 0.838253000 1884 10.08900000 17.25600000 7.888740000 1.083810000 1.664810000 0.619228000 1885 20.87280000 26.33510000 26.38880000 4.179950000 4.865880000 5.771640000 1886 24.01530000 32.92320000 31.32270000 6.301620000 7.698050000 8.519790000 1887 36.74870000 53.91840000 60.58500000 19.74980000 23.13520000 34.85310000 1888 39.99000000 54.86990000 67.32620000 22.60810000 24.96310000 43.26270000 1889 39.07640000 75.70140000 80.79010000 35.89910000 45.98370000 66.16850000 1890 62.20400000 77.18780000 80.93280000 46.08460000 52.48690000 67.11720000 1891 13.76380000 61.93160000 12.39660000 13.17550000 25.27880000 5.144260000 1892 15.10640000 93.97690000 13.80900000 32.06900000 62.81270000 11.65040000 1893 10.33520000 93.05690000 25.73860000 31.71640000 61.56120000 14.99420000 1894 33.80780000 94.28710000 28.14850000 36.32660000 65.24290000 16.50240000 1895 33.75620000 47.42440000 10.15250000 10.83420000 15.86220000 3.109110000 1896 32.60230000 62.71240000 12.26240000 16.49930000 27.50990000 5.377080000 1897 38.20140000 71.85610000 13.63850000 22.48010000 37.22640000 7.184200000 1898 49.91040000 82.09450000 28.30070000 33.23860000 51.40400000 14.06340000 1899 51.51450000 98.64320000 35.76580000 46.16930000 75.09920000 21.92390000 1900 39.69420000 79.69000000 46.31740000 30.43060000 47.52570000 24.98170000 1901 48.40710000 84.09700000 78.61440000 43.42690000 57.43040000 64.53250000 1902 10.67390000 16.88190000 54.57410000 5.780750000 3.491250000 25.34530000 1903 12.89870000 20.95260000 64.63690000 8.519290000 5.300440000 36.81110000 1904 13.09300000 23.89150000 80.18950000 13.11340000 7.755680000 59.02710000 1905 18.04050000 26.44490000 90.81200000 17.47510000 10.17060000 77.58330000 1906 34.16230000 84.72860000 93.19740000 44.18130000 57.86360000 89.87320000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 100.0000 108.9060 1 0.000000 46.01940 100.0000 24.53780 20.19710 97.21750 2 100.0000 0.000000 75.89170 51.07860 25.19590 53.75030 3 0.000000 0.000000 54.91730 4.831040 1.932540 25.44110 4 100.0000 63.84210 0.000000 54.56610 47.91680 6.373640 5 0.000000 34.30650 0.000000 3.400610 6.801720 1.133680 6 78.47690 0.000000 0.000000 24.20010 12.47580 1.132910 7 8.084850 7.632750 6.875820 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 100.000 108.906 1 0.00000 100.000 100.000 53.8073 78.7404 106.975 2 100.000 0.00000 100.000 59.2885 28.4801 96.9852 3 0.00000 0.00000 100.000 18.0500 7.22046 95.0546 4 100.000 100.000 0.00000 76.9958 92.7795 13.8511 5 0.00000 100.000 0.00000 35.7573 71.5199 11.9206 6 100.000 0.00000 0.00000 41.2385 21.2596 1.93056 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7756 23.7148 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s37-g109-m0-f1906-csRGB.ti1000644 000765 000000 00000416452 12261120515 022644 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "1683" CREATED "Wed Dec 18 02:53:36 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "109" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "37" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1906 BEGIN_DATA 1 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 2 0.00000000 0.00000000 16.6667000 0.42690900 0.17077500 2.24818000 3 0.00000000 0.00000000 28.9116000 1.22673000 0.49072500 6.46020000 4 69.1767000 52.9595000 31.8457000 28.1571000 27.2146000 11.5949000 5 73.0911000 61.3454000 46.8864000 35.6658000 35.7547000 22.6523000 6 36.8074000 18.8819000 0.00000000 5.66444000 4.49820000 0.56976600 7 41.0601000 49.0410000 0.00000000 13.1304000 17.6660000 2.71800000 8 60.8263000 55.9227000 0.00000000 23.2997000 26.5050000 3.88825000 9 63.9596000 67.5076000 0.00000000 29.9024000 37.3567000 5.63492000 10 0.00000000 9.88701000 0.00000000 0.35216600 0.70438500 0.11740300 11 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 12 0.00000000 1.28205000 0.00000000 0.03523460 0.07047430 0.01174630 13 0.00000000 2.60417000 0.00000000 0.07213290 0.14427600 0.02404720 14 0.00000000 6.83060000 0.00000000 0.20686700 0.41376400 0.06896400 15 0.00000000 0.00000000 11.4943000 0.22569700 0.09028450 1.18856000 16 2.60417000 0.00000000 0.00000000 0.08319000 0.04288690 0.00389450 17 5.37634000 0.00000000 0.00000000 0.17682200 0.09115680 0.00827783 18 6.83060000 0.00000000 0.00000000 0.23857700 0.12299300 0.01116890 19 8.33333000 0.00000000 0.00000000 0.31462900 0.16220100 0.01472920 20 9.36330000 9.36330000 9.36330000 0.86159600 0.90650600 0.98723700 21 14.8810000 0.00000000 0.00000000 0.79742800 0.41109800 0.03733120 22 17.5201000 0.00000000 7.24483000 1.18109000 0.59581800 0.64584000 23 20.4403000 0.00000000 0.00000000 1.42224000 0.73320500 0.06658140 24 18.5185000 0.00000000 0.00000000 1.18238000 0.60955000 0.05535240 25 28.1509000 13.7812000 0.00000000 3.26139000 2.57949000 0.32604000 26 34.2279000 9.87732000 0.00000000 4.30816000 2.74301000 0.30244600 27 33.6879000 0.00000000 0.00000000 3.82879000 1.97385000 0.17924300 28 36.2319000 0.00000000 0.00000000 4.45269000 2.29549000 0.20845100 29 38.8889000 0.00000000 0.00000000 5.16359000 2.66198000 0.24173100 30 41.6667000 0.00000000 0.00000000 5.97340000 3.07946000 0.27964200 31 44.5736000 0.00000000 0.00000000 6.89567000 3.55492000 0.32281700 32 47.6190000 0.00000000 0.00000000 7.94502000 4.09589000 0.37194300 33 50.8130000 0.00000000 0.00000000 9.14000000 4.71194000 0.42788500 34 54.1667000 0.00000000 0.00000000 10.5018000 5.41398000 0.49163600 35 57.6923000 0.00000000 0.00000000 12.0527000 6.21353000 0.56424300 36 61.4035000 0.00000000 0.00000000 13.8224000 7.12585000 0.64708900 37 65.3153000 0.00000000 0.00000000 15.8420000 8.16699000 0.74163400 38 69.4444000 0.00000000 0.00000000 18.1500000 9.35687000 0.84968500 39 73.8095000 0.00000000 0.00000000 20.7913000 10.7185000 0.97333500 40 78.4314000 0.00000000 0.00000000 23.8183000 12.2791000 1.11504000 41 83.3333000 0.00000000 0.00000000 27.2947000 14.0712000 1.27779000 42 100.000000 20.0277000 25.3588000 43.3700000 24.0118000 7.29978000 43 100.000000 25.5377000 50.6302000 47.1051000 26.6419000 23.4679000 44 100.000000 46.8233000 79.3540000 58.5850000 38.8300000 60.5063000 45 11.4943000 0.00000000 0.00000000 0.51564500 0.26583000 0.02413970 46 0.00000000 11.4943000 0.00000000 0.44710900 0.89428300 0.14905500 47 0.00000000 0.00000000 1.28205000 0.01778610 0.00711491 0.09366500 48 0.00000000 0.00000000 2.60417000 0.03641210 0.01456580 0.19175300 49 0.00000000 3.96825000 0.00000000 0.10965700 0.21933000 0.03655680 50 10.9524000 10.9524000 10.9524000 1.09857000 1.15583000 1.25876000 51 0.00000000 25.0904000 15.8185000 2.22084000 3.82001000 2.65786000 52 63.7398000 100.000000 20.2143000 51.3759000 79.5013000 15.8342000 53 21.5327000 30.2666000 0.00000000 4.23704000 6.14305000 0.96246600 54 41.4543000 87.4813000 0.00000000 32.3155000 55.8630000 9.07984000 55 100.000000 90.0025000 19.8399000 69.9845000 77.8141000 14.4175000 56 31.8765000 28.2753000 0.00000000 5.74132000 6.40953000 0.93463700 57 31.4730000 46.6307000 0.00000000 9.91551000 14.8887000 2.35133000 58 30.0122000 55.1973000 0.00000000 12.5105000 20.5351000 3.30446000 59 37.3384000 67.7684000 0.00000000 19.6471000 32.2580000 5.19116000 60 0.00000000 24.5098000 0.00000000 1.75002000 3.50029000 0.58341100 61 0.00000000 22.4359000 0.00000000 1.47369000 2.94760000 0.49129100 62 0.00000000 31.2500000 0.00000000 2.84579000 5.69200000 0.94871400 63 0.00000000 33.6879000 0.00000000 3.31989000 6.64026000 1.10676000 64 0.00000000 36.2319000 0.00000000 3.86087000 7.72230000 1.28711000 65 0.00000000 38.8889000 0.00000000 4.47728000 8.95522000 1.49261000 66 0.00000000 41.6667000 0.00000000 5.17945000 10.3597000 1.72670000 67 0.00000000 44.5736000 0.00000000 5.97914000 11.9592000 1.99329000 68 0.00000000 47.6190000 0.00000000 6.88902000 13.7791000 2.29662000 69 0.00000000 50.8130000 0.00000000 7.92517000 15.8515000 2.64205000 70 0.00000000 54.1667000 0.00000000 9.10595000 18.2132000 3.03569000 71 0.00000000 57.6923000 0.00000000 10.4508000 20.9030000 3.48401000 72 0.00000000 61.4035000 0.00000000 11.9852000 23.9722000 3.99556000 73 0.00000000 65.3153000 0.00000000 13.7363000 27.4747000 4.57934000 74 0.00000000 69.4444000 0.00000000 15.7376000 31.4776000 5.24652000 75 0.00000000 73.8095000 0.00000000 18.0278000 36.0583000 6.01002000 76 0.00000000 78.4314000 0.00000000 20.6525000 41.3081000 6.88503000 77 0.00000000 83.3333000 0.00000000 23.6669000 47.3373000 7.88993000 78 0.00000000 88.5417000 0.00000000 27.1348000 54.2736000 9.04604000 79 0.00000000 94.0860000 0.00000000 31.1340000 62.2726000 10.3793000 80 23.5893000 100.000000 0.00000000 37.6298000 72.4852000 12.0082000 81 76.8786000 100.000000 25.9974000 59.5242000 83.6579000 18.2109000 82 0.00000000 15.3371000 0.00000000 0.72920900 1.45852000 0.24309900 83 10.4167000 10.4167000 10.4167000 1.01549000 1.06842000 1.16357000 84 0.00000000 0.00000000 3.96825000 0.05535390 0.02214300 0.29150400 85 0.00000000 0.00000000 5.37634000 0.07739450 0.03095980 0.40757400 86 3.96825000 0.00000000 0.00000000 0.12646600 0.06519700 0.00592045 87 0.00000000 0.00000000 6.83060000 0.10442500 0.04177250 0.54991900 88 0.00000000 0.00000000 8.33333000 0.13771300 0.05508860 0.72522000 89 7.32601000 7.32601000 7.32601000 0.60422000 0.63571400 0.69232900 90 0.00000000 0.00000000 9.88701000 0.17777100 0.07111290 0.93617300 91 0.00000000 0.00000000 14.8810000 0.34903300 0.13962200 1.83807000 92 0.00000000 0.00000000 18.5185000 0.51752400 0.20702300 2.72538000 93 0.00000000 0.00000000 20.4403000 0.62251100 0.24902000 3.27826000 94 0.00000000 0.00000000 22.4359000 0.74390800 0.29758200 3.91756000 95 0.00000000 0.00000000 24.5098000 0.88339500 0.35338000 4.65212000 96 0.00000000 0.00000000 26.6667000 1.04342000 0.41739500 5.49485000 97 0.00000000 0.00000000 31.2500000 1.43653000 0.57465000 7.56504000 98 0.00000000 0.00000000 33.6879000 1.67585000 0.67038400 8.82534000 99 0.00000000 0.00000000 36.2319000 1.94893000 0.77962400 10.2634000 100 0.00000000 0.00000000 38.8889000 2.26009000 0.90409600 11.9021000 101 0.00000000 0.00000000 41.6667000 2.61454000 1.04588000 13.7687000 102 0.00000000 0.00000000 44.5736000 3.01822000 1.20737000 15.8945000 103 0.00000000 0.00000000 47.6190000 3.47752000 1.39110000 18.3133000 104 0.00000000 10.5877000 50.0104000 4.25708000 2.32991000 20.4858000 105 0.00000000 0.00000000 50.8130000 4.00056000 1.60033000 21.0677000 106 0.00000000 0.00000000 57.6923000 5.27546000 2.11032000 27.7815000 107 0.00000000 10.2594000 60.6074000 6.25165000 3.09759000 31.0826000 108 0.00000000 0.00000000 61.4035000 6.05004000 2.42017000 31.8606000 109 0.00000000 0.00000000 65.3153000 6.93399000 2.77378000 36.5157000 110 0.00000000 0.00000000 69.4444000 7.94423000 3.17790000 41.8358000 111 0.00000000 0.00000000 73.8095000 9.10031000 3.64036000 47.9239000 112 0.00000000 0.00000000 78.4314000 10.4252000 4.17036000 54.9012000 113 0.00000000 0.00000000 83.3333000 11.9469000 4.77905000 62.9143000 114 0.00000000 0.00000000 88.5417000 13.6974000 5.47932000 72.1331000 115 0.00000000 17.9367000 100.000000 19.0168000 9.15415000 95.3769000 116 88.1599000 40.0548000 100.000000 53.8048000 32.7268000 98.0938000 117 100.000000 45.6306000 100.000000 65.5748000 41.0537000 99.0809000 118 100.000000 56.1483000 100.000000 69.1369000 48.1785000 100.268000 119 100.000000 93.6926000 100.000000 90.1279000 90.1636000 107.266000 120 8.84544000 8.84544000 8.84544000 0.79099600 0.83222600 0.90634200 121 0.42301200 0.42301200 0.42301200 0.03138030 0.03301600 0.03595640 122 0.85034000 0.85034000 0.85034000 0.06308090 0.06636900 0.07227960 123 1.28205000 1.28205000 1.28205000 0.09365630 0.09853810 0.10731400 124 1.71821000 1.71821000 1.71821000 0.12601200 0.13258000 0.14438800 125 2.15889000 2.15889000 2.15889000 0.15870300 0.16697600 0.18184600 126 2.60417000 2.60417000 2.60417000 0.19173500 0.20172900 0.21969500 127 3.05410000 3.05410000 3.05410000 0.22511200 0.23684600 0.25793900 128 3.50877000 3.50877000 3.50877000 0.25754400 0.27096800 0.29510000 129 3.96825000 3.96825000 3.96825000 0.29147700 0.30667000 0.33398100 130 4.43262000 4.43262000 4.43262000 0.32737600 0.34444000 0.37511500 131 4.90196000 4.90196000 4.90196000 0.36530600 0.38434800 0.41857700 132 5.37634000 5.37634000 5.37634000 0.40753600 0.42877900 0.46696400 133 5.85586000 5.85586000 5.85586000 0.45167200 0.47521500 0.51753700 134 6.34058000 6.34058000 6.34058000 0.49897600 0.52498500 0.57173900 135 6.83060000 6.83060000 6.83060000 0.54986800 0.57853000 0.63005200 136 8.30362000 0.00000000 6.50490000 0.41106600 0.20059700 0.53074600 137 0.00000000 5.37634000 0.00000000 0.15332000 0.30666200 0.05111280 138 0.00000000 8.33333000 0.00000000 0.27281100 0.54566200 0.09094810 139 0.00000000 13.1579000 0.00000000 0.55919000 1.11846000 0.18642000 140 0.00000000 16.6667000 0.00000000 0.84571300 1.69155000 0.28193900 141 12.0424000 12.0424000 12.0424000 1.28254000 1.34939000 1.46956000 142 8.33333000 8.33333000 8.33333000 0.72515300 0.76295100 0.83089800 143 12.5969000 12.5969000 12.5969000 1.38126000 1.45326000 1.58269000 144 13.1579000 13.1579000 13.1579000 1.48637000 1.56385000 1.70312000 145 14.2998000 14.2998000 14.2998000 1.71429000 1.80364000 1.96427000 146 14.8810000 14.8810000 14.8810000 1.83790000 1.93370000 2.10591000 147 15.4691000 15.4691000 15.4691000 1.96767000 2.07023000 2.25460000 148 16.0643000 16.0643000 16.0643000 2.10448000 2.21418000 2.41136000 149 16.6667000 16.6667000 16.6667000 2.24797000 2.36515000 2.57578000 150 17.2764000 17.2764000 17.2764000 2.39959000 2.52467000 2.74951000 151 17.8937000 17.8937000 17.8937000 2.55825000 2.69160000 2.93130000 152 18.5185000 18.5185000 18.5185000 2.72512000 2.86717000 3.12251000 153 20.4866000 16.7833000 21.2127000 2.95295000 2.71677000 3.86994000 154 19.1511000 19.1511000 19.1511000 2.90120000 3.05243000 3.32427000 155 19.7917000 19.7917000 19.7917000 3.08534000 3.24617000 3.53526000 156 20.4403000 20.4403000 20.4403000 3.27795000 3.44881000 3.75596000 157 21.0970000 21.0970000 21.0970000 3.48114000 3.66259000 3.98877000 158 21.7622000 21.7622000 21.7622000 3.69364000 3.88617000 4.23226000 159 22.4359000 22.4359000 22.4359000 3.91719000 4.12137000 4.48841000 160 23.1183000 23.1183000 23.1183000 4.15005000 4.36637000 4.75523000 161 23.8095000 23.8095000 23.8095000 4.39484000 4.62392000 5.03571000 162 24.5098000 24.5098000 24.5098000 4.65168000 4.89415000 5.33001000 163 25.2193000 25.2193000 25.2193000 4.91919000 5.17560000 5.63653000 164 25.9382000 25.9382000 25.9382000 5.19991000 5.47095000 5.95818000 165 26.6667000 26.6667000 26.6667000 5.49434000 5.78073000 6.29555000 166 27.4049000 27.4049000 27.4049000 5.80154000 6.10394000 6.64754000 167 28.1532000 28.1532000 28.1532000 6.12347000 6.44266000 7.01643000 168 28.9116000 28.9116000 28.9116000 6.45960000 6.79631000 7.40157000 169 29.6804000 29.6804000 29.6804000 6.81141000 7.16645000 7.80468000 170 30.4598000 30.4598000 30.4598000 7.17946000 7.55369000 8.22640000 171 31.2500000 31.2500000 31.2500000 7.56434000 7.95863000 8.66740000 172 32.0513000 32.0513000 32.0513000 7.96519000 8.38037000 9.12671000 173 32.8638000 32.8638000 32.8638000 8.38552000 8.82262000 9.60834000 174 34.5238000 34.5238000 34.5238000 9.28310000 9.76697000 10.6368000 175 35.3717000 35.3717000 35.3717000 9.76237000 10.2712000 11.1860000 176 36.2319000 36.2319000 36.2319000 10.2625000 10.7974000 11.7590000 177 37.1046000 37.1046000 37.1046000 10.7856000 11.3478000 12.3584000 178 37.9902000 37.9902000 37.9902000 11.3310000 11.9217000 12.9834000 179 38.8889000 38.8889000 38.8889000 11.9010000 12.5213000 13.6364000 180 39.8010000 39.8010000 39.8010000 12.4964000 13.1478000 14.3187000 181 40.7268000 40.7268000 40.7268000 13.1183000 13.8021000 15.0313000 182 41.6667000 41.6667000 41.6667000 13.7674000 14.4850000 15.7750000 183 42.6209000 42.6209000 42.6209000 14.4458000 15.1988000 16.5524000 184 43.5897000 43.5897000 43.5897000 15.1530000 15.9429000 17.3627000 185 44.5736000 44.5736000 44.5736000 15.8930000 16.7214000 18.2106000 186 49.7312000 49.7312000 49.7312000 20.1078000 21.1559000 23.0400000 187 48.6667000 48.6667000 48.6667000 19.1905000 20.1908000 21.9889000 188 78.7055000 54.5393000 64.6816000 40.0341000 33.5769000 39.9407000 189 91.2369000 100.000000 94.3484000 85.0632000 95.1117000 96.7769000 190 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 191 74.8146000 19.1546000 0.00000000 22.5209000 13.2311000 1.36718000 192 75.0389000 46.8602000 0.00000000 28.2282000 24.4329000 3.22860000 193 83.3332000 59.7250000 0.00000000 38.5705000 36.6245000 5.03686000 194 85.4011000 77.6601000 0.00000000 49.0448000 55.2734000 8.08454000 195 100.000000 79.9121000 0.00000000 62.7764000 64.3387000 9.11076000 196 100.000000 100.000000 38.8708000 79.2537000 93.6828000 25.7417000 197 32.9326000 47.3097000 19.6518000 11.0253000 15.7027000 5.47994000 198 37.5945000 55.0599000 69.6933000 22.2535000 24.5567000 45.5405000 199 41.5563000 64.1361000 78.6368000 29.6204000 33.6466000 59.9009000 200 22.8036000 44.6781000 42.2498000 10.4553000 13.9999000 16.2668000 201 53.0303000 53.0303000 53.0303000 23.1121000 24.3168000 26.4824000 202 54.1667000 54.1667000 54.1667000 24.2043000 25.4660000 27.7339000 203 57.6923000 57.6923000 57.6923000 27.7789000 29.2269000 31.8298000 204 58.9080000 58.9080000 58.9080000 29.0800000 30.5958000 33.3206000 205 66.6667000 66.6667000 66.6667000 38.2069000 40.1984000 43.7783000 206 68.0428000 68.0428000 68.0428000 39.9789000 42.0628000 45.8088000 207 69.4444000 69.4444000 69.4444000 41.8319000 44.0124000 47.9320000 208 70.8723000 70.8723000 70.8723000 43.7690000 46.0505000 50.1516000 209 72.3270000 72.3270000 72.3270000 45.7978000 48.1850000 52.4762000 210 73.8095000 73.8095000 73.8095000 47.9194000 50.4172000 54.9073000 211 75.3205000 75.3205000 75.3205000 50.1398000 52.7533000 57.4514000 212 78.4314000 78.4314000 78.4314000 54.8961000 57.7576000 62.9013000 213 80.0330000 80.0330000 80.0330000 57.4443000 60.4385000 65.8211000 214 81.6667000 81.6667000 81.6667000 60.1128000 63.2462000 68.8788000 215 83.3333000 83.3333000 83.3333000 62.9085000 66.1875000 72.0820000 216 85.0340000 85.0340000 85.0340000 65.8380000 69.2698000 75.4388000 217 86.7698000 86.7698000 86.7698000 68.9077000 72.4995000 78.9561000 218 88.5417000 88.5417000 88.5417000 72.1264000 75.8860000 82.6442000 219 90.3509000 90.3509000 90.3509000 75.5015000 79.4370000 86.5115000 220 92.1986000 92.1986000 92.1986000 79.0418000 83.1618000 90.5680000 221 94.0860000 94.0860000 94.0860000 82.7566000 87.0703000 94.8245000 222 0.00000000 26.6667000 0.00000000 2.06703000 4.13437000 0.68909600 223 0.00000000 28.9116000 0.00000000 2.43018000 4.86071000 0.81015800 224 21.3944000 32.9260000 19.0278000 5.26246000 7.35169000 3.99509000 225 25.8243000 74.1865000 78.8382000 31.0180000 41.8431000 61.7261000 226 45.0531000 100.000000 81.4174000 54.1501000 79.6923000 71.9581000 227 41.9352000 87.6775000 74.4040000 41.8606000 59.9128000 57.9215000 228 49.9668000 100.000000 92.8660000 59.8298000 82.1676000 92.6855000 229 57.3468000 100.000000 100.000000 65.7026000 84.8727000 107.532000 230 13.7255000 13.7255000 13.7255000 1.59730000 1.68056000 1.83022000 231 7.82689000 7.82689000 7.82689000 0.66359100 0.69818000 0.76035900 232 9.88701000 0.00000000 0.00000000 0.40614900 0.20938200 0.01901370 233 11.4943000 11.4943000 11.4943000 1.18845000 1.25040000 1.36176000 234 0.00000000 14.7380000 16.1171000 1.08162000 1.52031000 2.34305000 235 0.00000000 52.9030000 54.2995000 13.2706000 19.1489000 27.2189000 236 0.00000000 64.3131000 62.5846000 19.5837000 29.0744000 37.6519000 237 0.00000000 75.7363000 64.0699000 25.7416000 40.8544000 41.3592000 238 62.2042000 74.7744000 79.7536000 43.6050000 48.7816000 63.8536000 239 0.00000000 0.00000000 13.1579000 0.28227500 0.11291700 1.48651000 240 9.88701000 9.88701000 9.88701000 0.93608600 0.98487900 1.07259000 241 43.0569000 0.00000000 13.7172000 6.70770000 3.42302000 1.89568000 242 83.4215000 0.00000000 12.9932000 27.6359000 14.2152000 2.73569000 243 69.8537000 54.4524000 0.00000000 27.5995000 27.9028000 3.93148000 244 100.000000 68.9399000 0.00000000 56.7227000 52.2303000 7.09259000 245 26.6667000 0.00000000 0.00000000 2.38388000 1.22896000 0.11160000 246 33.5875000 0.00000000 16.6107000 4.22964000 2.13149000 2.41303000 247 47.0285000 0.00000000 70.5000000 15.9499000 7.27374000 43.6255000 248 51.5373000 0.00000000 100.000000 27.4751000 12.0794000 95.4959000 249 27.4229000 0.00000000 48.9007000 6.20288000 2.77244000 19.5100000 250 50.8130000 50.8130000 50.8130000 21.0657000 22.1638000 24.1376000 251 51.9126000 51.9126000 51.9126000 22.0666000 23.2168000 25.2844000 252 62.6844000 62.6844000 62.6844000 33.3405000 35.0784000 38.2024000 253 63.9881000 63.9881000 63.9881000 34.8907000 36.7093000 39.9786000 254 65.3153000 65.3153000 65.3153000 36.5123000 38.4155000 41.8367000 255 67.6397000 70.9754000 100.000000 51.6883000 49.0878000 101.363000 256 70.5852000 31.5385000 49.3606000 25.4769000 17.0047000 21.6354000 257 100.000000 42.4629000 50.7080000 50.6131000 33.6373000 24.7023000 258 100.000000 52.5415000 61.8828000 55.9146000 40.7663000 37.1813000 259 100.000000 66.2064000 68.0761000 62.9934000 52.6109000 46.6753000 260 100.000000 76.5691000 73.0725000 69.7069000 63.9619000 55.3163000 261 27.2882000 22.7735000 18.4724000 4.52757000 4.52599000 3.33545000 262 66.7800000 24.0443000 60.3224000 24.1428000 14.2768000 31.9791000 263 66.8303000 42.3604000 100.000000 40.0815000 26.5424000 97.6232000 264 96.0145000 96.0145000 96.0145000 86.6550000 91.1719000 99.2914000 265 97.9853000 97.9853000 97.9853000 90.7476000 95.4778000 103.981000 266 0.00000000 18.8027000 65.5411000 8.04158000 4.90419000 37.1468000 267 0.00000000 15.3374000 74.1723000 9.92973000 5.13902000 48.6946000 268 0.00000000 26.6091000 85.2871000 14.6452000 9.15158000 66.9726000 269 0.00000000 78.1576000 90.6561000 34.9395000 46.7654000 82.9180000 270 0.00000000 89.8220000 100.000000 46.0800000 63.2846000 104.399000 271 0.00000000 26.1623000 35.3821000 3.84515000 4.72247000 10.4327000 272 0.00000000 55.0384000 48.9651000 13.1212000 20.3352000 22.5906000 273 39.7091000 56.5992000 53.5278000 19.8975000 24.6197000 27.1827000 274 26.6827000 29.5435000 41.3635000 7.50002000 7.33835000 14.5154000 275 25.1134000 32.6554000 40.5051000 7.69338000 8.30481000 14.1063000 276 67.4026000 43.3795000 71.4353000 31.0883000 23.4269000 47.2289000 277 100.000000 68.2652000 82.1017000 67.9414000 56.1830000 67.8225000 278 100.000000 82.0766000 89.2049000 78.0403000 72.5784000 82.9154000 279 100.000000 86.4337000 100.000000 84.9862000 79.8795000 105.552000 280 0.00000000 14.8810000 0.00000000 0.69143900 1.38298000 0.23050800 281 0.00000000 18.5185000 0.00000000 1.02522000 2.05060000 0.34178300 282 0.00000000 20.4403000 0.00000000 1.23320000 2.46659000 0.41111800 283 100.000000 88.2853000 47.3729000 71.6353000 76.5550000 29.0283000 284 100.000000 100.000000 53.6957000 81.5056000 94.5836000 37.6006000 285 28.9116000 0.00000000 0.00000000 2.80269000 1.44487000 0.13120700 286 31.2500000 0.00000000 0.00000000 3.28202000 1.69198000 0.15364600 287 58.6565000 88.5522000 0.00000000 39.6410000 60.7317000 9.63359000 288 100.000000 90.4737000 0.00000000 69.7305000 78.2479000 11.4291000 289 100.000000 100.000000 0.00000000 76.9958000 92.7795000 13.8511000 290 74.1385000 65.4802000 0.00000000 34.8121000 38.4539000 5.58801000 291 85.5045000 100.000000 48.7685000 68.3413000 87.8951000 32.5530000 292 87.3313000 100.000000 79.9559000 76.9792000 91.5137000 70.6658000 293 100.000000 100.000000 92.2027000 92.0080000 98.7848000 92.9083000 294 18.7434000 0.00000000 20.8347000 1.85464000 0.88155400 3.45632000 295 38.5989000 0.00000000 39.7440000 7.44938000 3.56709000 12.6981000 296 61.5736000 0.00000000 58.2790000 19.3006000 9.32702000 29.0564000 297 71.6739000 0.00000000 57.7827000 24.7662000 12.1563000 28.7895000 298 85.3798000 0.00000000 71.3378000 37.2629000 18.2359000 45.7665000 299 39.1222000 28.9134000 27.0566000 8.73334000 7.98658000 6.71044000 300 51.9991000 27.0365000 38.0397000 13.8914000 10.0659000 12.5210000 301 42.2480000 34.5511000 28.3889000 10.8327000 10.6415000 7.68175000 302 46.2937000 54.0547000 38.9122000 18.8056000 22.8912000 15.2891000 303 59.0730000 59.4949000 74.7537000 33.2379000 32.6529000 53.6255000 304 0.00000000 47.5201000 54.8500000 11.5819000 15.6068000 27.1625000 305 0.00000000 55.6605000 70.5899000 17.9012000 22.6222000 46.6074000 306 0.00000000 54.7659000 87.4626000 22.6501000 23.9846000 73.2723000 307 75.3516000 86.0229000 100.000000 65.2478000 69.2959000 104.549000 308 89.2974000 100.000000 100.000000 85.7085000 95.1864000 108.469000 309 100.000000 20.9825000 0.00000000 42.5347000 23.8523000 2.36268000 310 100.000000 36.4148000 0.00000000 45.1402000 29.0636000 3.23129000 311 100.000000 48.4046000 0.00000000 48.3748000 35.5333000 4.30962000 312 33.7175000 17.0488000 25.0251000 5.63704000 4.10796000 5.31947000 313 34.0769000 23.0498000 73.3962000 14.4599000 8.72137000 48.0272000 314 33.2369000 23.7245000 100.000000 23.4153000 12.4237000 95.7762000 315 49.2345000 38.2349000 100.000000 30.9082000 20.2640000 96.8947000 316 86.7582000 0.00000000 48.9521000 33.5795000 16.8849000 20.8355000 317 100.000000 0.00000000 55.0769000 46.0050000 23.1664000 27.0322000 318 42.0744000 100.000000 0.00000000 41.8556000 74.6637000 12.2061000 319 56.8070000 100.000000 0.00000000 47.4090000 77.5267000 12.4660000 320 69.6723000 100.000000 0.00000000 54.0398000 80.9451000 12.7765000 321 79.8582000 100.000000 0.00000000 60.5593000 84.3060000 13.0817000 322 46.1648000 42.5688000 9.78286000 13.0283000 14.7436000 3.07574000 323 47.4135000 45.8365000 0.00000000 14.2188000 16.7535000 2.48452000 324 15.3966000 0.00000000 33.3519000 2.48823000 1.09316000 8.68405000 325 35.7725000 0.00000000 76.8041000 14.2826000 6.21420000 52.5852000 326 37.1448000 11.2158000 100.000000 23.1697000 10.4974000 95.4174000 327 18.6933000 0.00000000 57.1841000 6.37755000 2.69017000 27.3051000 328 27.2367000 41.5433000 100.000000 25.6837000 18.7973000 96.8869000 329 38.0461000 63.6178000 100.000000 35.9404000 35.6825000 99.6057000 330 52.8261000 63.9176000 100.000000 41.0885000 38.5377000 99.8855000 331 55.8241000 79.9013000 100.000000 50.7970000 56.0684000 102.758000 332 62.0156000 93.6615000 100.000000 62.9935000 76.1404000 105.989000 333 23.4178000 0.00000000 28.5489000 3.04231000 1.43025000 6.38521000 334 38.3079000 0.00000000 27.9665000 6.15025000 3.03811000 6.27662000 335 40.5845000 71.2645000 41.5040000 24.9132000 37.2933000 19.4772000 336 100.000000 80.7136000 53.0026000 67.6488000 67.0690000 32.3614000 337 100.000000 91.5156000 60.3612000 76.3047000 82.0749000 42.3598000 338 100.000000 100.000000 81.9491000 88.5009000 97.3819000 74.4390000 339 13.1579000 0.00000000 0.00000000 0.64490700 0.33246900 0.03019100 340 16.6667000 0.00000000 0.00000000 0.97535100 0.50282200 0.04566060 341 20.0078000 10.5642000 0.00000000 1.75701000 1.48555000 0.19415900 342 22.4359000 0.00000000 0.00000000 1.69959000 0.87619000 0.07956560 343 24.5098000 0.00000000 0.00000000 2.01827000 1.04048000 0.09448450 344 28.9054000 17.3614000 13.5002000 4.00717000 3.38397000 1.98749000 345 56.7073000 66.4255000 27.6108000 26.9837000 34.9503000 11.1861000 346 68.6655000 66.5336000 35.3024000 33.8569000 38.4861000 15.3224000 347 67.6382000 75.8418000 57.2494000 41.4609000 49.2149000 34.5041000 348 79.9942000 100.000000 63.7227000 67.2195000 86.9812000 47.6610000 349 100.000000 100.000000 68.8408000 84.7872000 95.8963000 54.8820000 350 26.8965000 100.000000 19.8303000 38.7701000 73.0051000 15.1312000 351 27.9193000 100.000000 34.1964000 40.0984000 73.5582000 21.1454000 352 29.0282000 100.000000 57.4040000 43.8011000 75.0640000 39.5318000 353 42.8583000 100.000000 71.0676000 50.4626000 78.1349000 56.2600000 354 76.0227000 100.000000 84.1885000 70.1929000 87.8604000 77.3378000 355 19.6643000 55.9092000 21.4062000 11.7591000 20.4693000 6.89395000 356 41.2323000 77.3060000 25.6365000 26.8016000 43.3898000 12.0212000 357 42.8565000 78.7145000 38.2774000 29.3478000 45.7872000 18.7503000 358 59.8397000 100.000000 37.2696000 50.8842000 79.0795000 23.4189000 359 0.00000000 100.000000 0.00000000 35.7573000 71.5199000 11.9206000 360 0.00000000 100.000000 67.4781000 43.2104000 74.5013000 51.1698000 361 17.7690000 100.000000 94.5109000 52.7305000 78.4362000 95.5858000 362 76.0348000 0.00000000 28.0582000 23.3739000 11.9165000 7.12337000 363 82.9342000 0.00000000 39.6858000 29.3600000 14.8635000 13.6862000 364 100.000000 0.00000000 64.5170000 47.9863000 23.9590000 37.4659000 365 100.000000 0.00000000 74.4693000 50.5215000 24.9731000 50.8166000 366 100.000000 0.00000000 87.0715000 54.4277000 26.5357000 71.3874000 367 100.000000 75.7765000 90.8789000 74.8866000 65.3132000 84.8154000 368 100.000000 77.0883000 100.000000 79.1568000 68.2197000 103.609000 369 20.3453000 28.4538000 45.1797000 6.86993000 6.67692000 17.2098000 370 19.3643000 47.7253000 91.8824000 23.1016000 20.4660000 80.8052000 371 19.8654000 77.0379000 100.000000 39.2375000 47.5972000 101.732000 372 39.5065000 88.8728000 100.000000 50.7524000 64.7055000 104.427000 373 33.6879000 33.6879000 33.6879000 8.82452000 9.28450000 10.1114000 374 47.7079000 48.8515000 36.8918000 17.2796000 19.4808000 13.4572000 375 100.000000 48.1857000 35.4499000 50.1675000 36.1390000 14.0940000 376 100.000000 57.4781000 79.9609000 62.4918000 46.3488000 62.7194000 377 51.1371000 0.00000000 22.6494000 10.0246000 5.08050000 4.42282000 378 100.000000 0.00000000 24.2636000 42.1045000 21.6061000 6.49136000 379 100.000000 20.6712000 66.9668000 49.8265000 26.7108000 40.9424000 380 100.000000 40.5993000 89.5833000 60.2054000 36.6915000 77.6304000 381 45.0033000 38.6033000 64.7860000 18.2572000 15.1708000 37.6630000 382 44.8552000 71.7347000 65.8011000 30.9534000 40.2574000 43.0853000 383 52.1146000 93.2643000 65.5389000 47.1633000 68.8194000 47.4196000 384 15.0501000 18.2562000 0.00000000 1.81214000 2.41715000 0.37106900 385 42.1428000 14.3362000 0.00000000 6.76719000 4.45039000 0.50243000 386 53.6150000 33.7819000 0.00000000 13.6091000 11.9732000 1.59395000 387 67.1779000 36.5802000 0.00000000 20.7988000 16.5698000 2.10234000 388 71.4718000 47.1145000 28.8485000 27.3050000 23.9314000 9.58264000 389 48.1901000 29.1231000 26.0440000 11.6132000 9.53323000 6.44653000 390 65.3376000 33.2576000 32.3490000 20.6285000 15.2561000 9.93888000 391 27.5469000 13.7453000 45.1339000 6.24529000 3.75587000 16.6438000 392 27.4709000 16.2870000 57.4533000 8.56860000 5.01794000 27.9197000 393 57.5777000 23.2859000 68.2970000 21.2390000 12.4160000 41.4042000 394 63.5233000 18.2339000 100.000000 33.9433000 16.8935000 96.0843000 395 76.2726000 14.7472000 100.000000 41.1052000 20.1163000 96.3289000 396 88.8404000 55.0141000 100.000000 59.0025000 42.3166000 99.6710000 397 46.7615000 28.2587000 48.4834000 13.5765000 10.0271000 20.1687000 398 55.3221000 55.3221000 55.3221000 25.3445000 26.6656000 29.0403000 399 56.4972000 56.4972000 56.4972000 26.5357000 27.9189000 30.4052000 400 76.9891000 58.4012000 56.0227000 38.5298000 35.2285000 30.7007000 401 76.8608000 76.8608000 76.8608000 52.4641000 55.1988000 60.1146000 402 88.5417000 0.00000000 0.00000000 31.2942000 16.1331000 1.46502000 403 94.0860000 0.00000000 0.00000000 35.9064000 18.5108000 1.68094000 404 100.000000 0.00000000 0.00000000 41.2385000 21.2596000 1.93056000 405 100.000000 0.00000000 33.8436000 42.9304000 21.9365000 10.8405000 406 100.000000 0.00000000 44.9515000 44.3115000 22.4889000 18.1137000 407 62.5636000 0.00000000 45.4303000 17.5478000 8.68335000 17.2283000 408 81.2833000 22.8833000 45.7614000 30.5310000 17.6432000 18.5325000 409 100.000000 59.5449000 49.8634000 56.2805000 45.2005000 25.8900000 410 100.000000 70.2014000 51.3270000 61.4491000 55.1412000 28.8378000 411 57.1719000 20.6334000 21.9860000 13.7867000 8.88848000 4.73870000 412 60.1449000 60.1449000 60.1449000 30.4378000 32.0244000 34.8764000 413 61.4035000 61.4035000 61.4035000 31.8576000 33.5182000 36.5033000 414 65.2262000 100.000000 64.7714000 58.3580000 82.3850000 48.5058000 415 67.6999000 100.000000 92.9612000 68.2029000 86.4801000 93.2622000 416 0.00000000 45.4657000 26.3957000 7.25988000 12.8850000 7.46315000 417 0.00000000 55.7776000 31.3458000 11.1525000 19.9937000 10.8480000 418 0.00000000 72.1916000 41.6187000 19.7660000 35.3615000 19.4552000 419 0.00000000 87.7354000 63.9648000 33.2007000 55.8123000 43.7269000 420 0.00000000 63.0037000 42.4410000 15.4032000 26.4583000 18.5463000 421 0.00000000 100.000000 46.1323000 39.0058000 72.8194000 29.0278000 422 0.00000000 100.000000 56.6738000 40.8310000 73.5495000 38.6396000 423 33.5525000 100.000000 100.000000 57.6042000 80.6978000 107.153000 424 0.00000000 23.3030000 48.2525000 5.16369000 4.60303000 19.3706000 425 47.6190000 47.6190000 47.6190000 18.3116000 19.2660000 20.9818000 426 46.5879000 46.5879000 46.5879000 17.4705000 18.3812000 20.0182000 427 45.5729000 45.5729000 45.5729000 16.6643000 17.5329000 19.0943000 428 0.00000000 12.3918000 23.7358000 1.33538000 1.34370000 4.53682000 429 0.00000000 36.1284000 66.2915000 11.0034000 10.5429000 39.0139000 430 0.00000000 34.2860000 73.4302000 12.4387000 10.4845000 48.5227000 431 0.00000000 76.5023000 73.3919000 28.5173000 42.6607000 53.8312000 432 0.00000000 100.000000 77.6648000 45.9555000 75.5994000 65.6262000 433 0.00000000 100.000000 88.9518000 49.5986000 77.0568000 84.8112000 434 0.00000000 100.000000 100.000000 53.8073000 78.7404000 106.975000 435 0.00000000 34.9716000 32.4233000 5.13587000 7.79385000 9.35326000 436 0.00000000 36.8820000 45.5848000 7.17318000 9.28070000 18.0109000 437 0.00000000 42.5365000 63.5113000 11.9291000 13.4312000 36.1264000 438 0.00000000 52.7088000 75.0199000 18.0179000 20.9378000 52.5583000 439 15.7222000 52.1904000 72.0889000 17.9112000 20.7056000 48.3074000 440 65.7812000 0.00000000 17.5456000 16.5614000 8.48377000 3.22180000 441 100.000000 18.5631000 14.8921000 42.6177000 23.4590000 4.11423000 442 100.000000 41.4457000 20.4451000 46.9828000 31.7525000 6.91771000 443 100.000000 62.0749000 32.3110000 55.0519000 46.4275000 14.1221000 444 100.000000 78.1501000 36.3980000 63.6931000 63.0237000 19.1224000 445 100.000000 85.1249000 66.6746000 73.3251000 73.8243000 48.4283000 446 100.000000 84.3063000 75.0120000 74.9672000 73.6251000 59.7157000 447 0.00000000 0.00000000 54.1667000 4.59661000 1.83876000 24.2066000 448 0.00000000 0.00000000 94.0860000 15.7162000 6.28688000 82.7643000 449 0.00000000 0.00000000 100.000000 18.0500000 7.22046000 95.0546000 450 28.9642000 0.00000000 100.000000 20.8631000 8.67068000 95.1863000 451 68.3981000 0.00000000 100.000000 35.5978000 16.2669000 95.8761000 452 86.2952000 0.00000000 100.000000 47.5799000 22.4440000 96.4371000 453 100.000000 0.00000000 100.000000 59.2885000 28.4801000 96.9852000 454 0.00000000 16.9762000 23.7684000 1.70599000 2.08137000 4.67145000 455 0.00000000 25.9782000 23.5052000 2.77617000 4.25044000 4.94021000 456 0.00000000 75.3928000 33.1251000 20.5223000 38.4574000 14.8266000 457 0.00000000 100.000000 33.5843000 37.4225000 72.1860000 20.6899000 458 79.0044000 28.9423000 15.2225000 27.0093000 17.4977000 3.85827000 459 100.000000 30.5159000 13.0154000 44.2266000 26.7929000 4.29338000 460 100.000000 32.0860000 42.8660000 47.0188000 28.3776000 17.5558000 461 100.000000 33.0270000 61.4877000 50.4938000 30.0617000 34.9498000 462 100.000000 33.5669000 100.000000 62.5837000 35.0711000 98.0837000 463 46.9084000 0.00000000 50.1170000 11.5751000 5.51882000 20.8086000 464 53.4785000 0.00000000 62.4921000 16.5021000 7.78091000 33.5964000 465 62.5063000 0.00000000 74.0068000 23.5298000 11.0729000 48.8826000 466 63.6388000 84.8822000 73.4439000 48.6254000 60.6529000 56.3190000 467 0.00000000 16.3313000 34.9046000 2.61865000 2.35197000 9.76901000 468 0.00000000 29.8552000 100.000000 20.6433000 12.4075000 95.9192000 469 0.00000000 39.5867000 100.000000 22.6980000 16.5172000 96.6042000 470 0.00000000 48.0261000 100.000000 25.0664000 21.2544000 97.3937000 471 0.00000000 64.4945000 100.000000 31.4073000 33.9370000 99.5076000 472 0.00000000 72.1798000 100.000000 35.2016000 41.5261000 100.773000 473 0.00000000 79.2782000 100.000000 39.2063000 49.5362000 102.108000 474 90.0262000 79.1503000 100.000000 71.6229000 66.1345000 103.603000 475 24.4487000 19.3394000 28.5514000 4.31616000 3.73699000 6.76444000 476 31.2955000 16.0691000 34.2407000 5.81691000 3.97462000 9.54497000 477 56.2265000 47.4287000 100.000000 36.2724000 26.7546000 97.8649000 478 68.8133000 53.3736000 100.000000 44.6532000 34.0269000 98.8270000 479 17.5750000 18.1377000 25.8666000 3.04343000 2.92080000 5.55158000 480 20.5283000 14.7083000 50.2793000 6.02187000 3.65847000 20.8855000 481 22.8431000 19.6863000 48.2526000 6.48615000 4.63632000 19.3074000 482 20.6885000 33.3283000 66.6728000 11.9595000 10.1479000 39.3688000 483 21.2163000 43.3572000 68.3592000 14.8338000 15.1291000 42.3468000 484 44.5776000 43.9873000 80.3501000 23.7157000 19.5838000 60.2230000 485 28.4520000 26.1515000 44.6727000 7.73480000 6.58929000 16.7594000 486 33.2281000 23.8127000 57.5393000 10.6204000 7.32462000 28.3461000 487 57.4497000 22.1056000 83.7912000 25.4693000 13.8589000 64.7316000 488 62.3252000 31.8948000 100.000000 35.3003000 20.5182000 96.7124000 489 42.8299000 26.0092000 61.2484000 14.3164000 9.60584000 32.6356000 490 42.0214000 31.1964000 84.0315000 21.0912000 13.6773000 65.3374000 491 52.0978000 91.3291000 87.2307000 51.9976000 68.4867000 79.8978000 492 0.00000000 76.6485000 20.5885000 20.2466000 39.4864000 9.86287000 493 0.00000000 88.1084000 23.0152000 27.6173000 53.9882000 13.0616000 494 0.00000000 100.000000 20.4639000 36.3812000 71.7695000 15.2062000 495 23.6218000 100.000000 46.5862000 40.9523000 73.8149000 29.4792000 496 58.6368000 100.000000 51.1017000 52.2972000 79.5789000 33.8339000 497 26.7482000 48.9025000 57.0820000 14.8481000 17.8902000 29.6871000 498 26.8018000 50.1993000 71.3416000 18.5631000 20.0562000 47.1085000 499 30.1735000 47.3567000 80.4365000 20.8970000 19.6057000 60.5149000 500 29.2966000 53.4785000 80.3134000 22.7298000 23.5953000 60.9902000 501 37.6174000 75.3036000 92.6932000 38.8633000 46.2708000 86.5246000 502 28.8359000 0.00000000 21.3240000 3.46289000 1.70728000 3.68417000 503 31.0980000 12.0577000 18.7983000 4.26479000 2.85502000 3.11530000 504 48.9663000 9.32131000 26.2879000 9.77368000 5.39958000 5.84285000 505 61.0950000 34.1019000 37.0883000 19.1205000 14.6754000 12.5516000 506 25.8750000 14.8220000 16.6641000 3.35876000 2.70162000 2.58159000 507 26.9606000 19.4328000 38.8711000 5.81551000 4.40202000 12.3786000 508 40.0533000 24.8324000 40.6826000 9.77517000 7.41727000 13.9451000 509 35.2738000 30.6030000 45.5487000 10.0989000 8.88917000 17.7529000 510 35.8131000 42.3095000 56.2952000 14.6967000 14.9429000 28.3172000 511 36.0418000 51.4314000 56.4495000 17.5700000 20.5553000 29.4071000 512 35.2578000 94.8251000 61.0267000 41.8672000 67.9441000 42.1932000 513 61.0517000 100.000000 85.0769000 61.9231000 83.5633000 78.4787000 514 23.3120000 41.7215000 34.7474000 8.81067000 12.0467000 11.2257000 515 51.8465000 52.8676000 34.4662000 19.9417000 22.9002000 12.5784000 516 57.8692000 62.4105000 45.2196000 27.6687000 32.3470000 21.0993000 517 60.3535000 67.8708000 54.6981000 32.9584000 38.6527000 30.3355000 518 82.6859000 69.5629000 73.8533000 51.7291000 49.0681000 54.5088000 519 89.9431000 75.3014000 82.6753000 63.0131000 59.1183000 69.6044000 520 56.2938000 70.7126000 59.2610000 33.4016000 40.8973000 35.4621000 521 58.0208000 77.9231000 78.6746000 43.0555000 51.2017000 62.6406000 522 66.5060000 83.8328000 86.1060000 53.3377000 61.6239000 76.4996000 523 16.7060000 16.5341000 11.6677000 2.04445000 2.26526000 1.54123000 524 19.5012000 14.4504000 0.00000000 1.95860000 1.98466000 0.27987500 525 28.2861000 67.5890000 15.0578000 17.8567000 31.1642000 6.94197000 526 31.5765000 86.3819000 24.3562000 29.8876000 53.4069000 13.3074000 527 41.9174000 100.000000 51.1308000 45.8623000 76.2609000 33.5588000 528 0.00000000 32.3014000 24.0887000 3.89874000 6.43172000 5.51181000 529 10.8030000 38.3130000 25.0821000 5.73004000 9.28913000 6.33570000 530 0.00000000 41.4835000 31.2491000 6.56785000 10.8382000 9.27529000 531 30.8540000 66.2924000 50.9924000 21.4240000 31.6536000 26.1118000 532 41.5014000 74.3580000 57.8077000 29.5504000 41.8325000 34.2917000 533 0.00000000 24.4674000 41.4282000 4.32707000 4.52172000 14.1838000 534 9.46456000 31.7926000 40.3015000 5.76383000 7.06589000 13.8321000 535 0.00000000 34.0136000 49.3569000 7.14333000 8.27617000 20.9136000 536 23.9170000 61.2393000 60.6099000 19.7176000 27.1746000 35.0231000 537 23.2421000 61.8018000 68.5222000 21.6878000 28.3384000 44.7480000 538 26.1010000 68.9530000 69.9220000 25.8414000 35.3882000 47.7495000 539 34.1397000 70.6265000 81.6417000 31.6832000 39.2741000 65.7084000 540 33.5278000 82.2493000 82.6037000 38.4834000 52.6023000 69.5197000 541 33.8777000 100.000000 89.3203000 53.6019000 79.1056000 85.6771000 542 28.1550000 88.2341000 63.8633000 36.1772000 57.8580000 43.8436000 543 57.9741000 87.4978000 68.9795000 46.4260000 62.2501000 50.5922000 544 76.1409000 100.000000 74.1426000 67.2380000 86.6874000 61.3723000 545 51.5196000 72.8123000 47.3101000 30.3359000 41.2068000 24.3306000 546 71.7375000 79.6155000 46.3058000 44.1449000 54.0899000 25.2801000 547 77.7756000 81.9393000 55.4850000 51.0039000 59.5624000 34.2001000 548 46.4902000 81.2220000 49.3019000 33.6332000 50.0715000 27.5379000 549 67.4860000 87.4658000 49.4040000 47.1927000 63.0821000 29.4222000 550 72.5684000 100.000000 53.3734000 60.2272000 83.6207000 36.2992000 551 89.1592000 100.000000 60.0835000 73.3145000 90.2155000 43.7811000 552 90.3956000 100.000000 72.1438000 77.2012000 91.8865000 58.9997000 553 29.8028000 20.1863000 0.00000000 4.18512000 3.94622000 0.54117100 554 61.4974000 21.3196000 28.5935000 16.4050000 10.3026000 7.41335000 555 72.7091000 23.1695000 36.2066000 23.6195000 14.2795000 11.7123000 556 88.0030000 21.0123000 100.000000 50.2156000 25.7324000 96.9329000 557 44.0538000 9.13984000 42.0603000 9.70468000 5.15872000 14.4655000 558 49.5370000 10.3155000 50.4772000 12.9708000 6.78966000 21.2982000 559 48.6745000 40.0144000 74.0637000 22.2544000 17.4725000 50.2681000 560 55.9450000 49.1029000 84.3550000 30.9076000 25.4419000 67.6465000 561 65.0507000 66.9770000 83.6727000 42.2789000 41.9635000 69.0689000 562 73.4081000 80.7438000 75.8822000 52.2656000 58.5542000 59.2952000 563 72.8697000 86.0401000 76.3604000 55.4580000 65.2168000 61.1319000 564 80.5454000 100.000000 92.4904000 76.1601000 90.6024000 92.7219000 565 15.4432000 20.6300000 63.5905000 8.64157000 5.56316000 34.8750000 566 16.8352000 24.6145000 75.3919000 12.3001000 7.85868000 50.8852000 567 20.0464000 34.3406000 83.3266000 16.7703000 12.3939000 64.1187000 568 20.2038000 100.000000 83.0035000 48.9897000 76.9739000 74.3406000 569 15.0707000 20.3553000 14.4976000 2.37229000 3.00115000 2.20164000 570 19.1594000 34.2319000 10.0930000 4.87484000 7.58636000 2.16968000 571 45.9345000 78.3104000 0.00000000 27.9351000 44.9569000 7.20558000 572 74.6200000 78.0854000 0.00000000 41.7538000 51.8843000 7.81456000 573 60.4254000 58.5765000 16.3322000 24.5586000 28.6547000 6.39409000 574 66.4911000 81.0967000 16.6634000 39.1692000 53.1941000 10.4405000 575 33.8612000 36.6244000 0.00000000 7.81806000 9.89246000 1.49748000 576 41.8650000 58.2225000 0.00000000 16.6967000 24.4377000 3.83716000 577 53.0618000 70.4422000 17.9772000 26.7759000 37.8647000 8.46651000 578 15.3818000 22.4825000 31.4700000 3.78222000 3.97828000 8.20700000 579 15.3956000 25.9552000 56.4799000 7.84141000 6.36891000 27.2128000 580 20.3931000 37.6901000 77.4225000 15.7358000 13.1668000 54.7957000 581 0.00000000 44.8865000 41.0255000 8.59884000 13.1506000 15.3466000 582 0.00000000 86.0461000 50.7035000 29.4207000 52.4739000 29.4508000 583 0.00000000 35.7009000 19.5025000 4.31374000 7.71619000 4.24937000 584 55.1263000 38.4437000 16.6524000 15.7081000 14.5372000 4.21260000 585 55.1060000 45.3067000 16.3713000 17.5071000 18.1691000 4.75096000 586 100.000000 57.5601000 15.6572000 52.0185000 42.2106000 7.40709000 587 62.7596000 17.3963000 0.00000000 15.4182000 9.30566000 0.98374700 588 70.2019000 19.5563000 14.1469000 20.0479000 11.9834000 2.93150000 589 100.000000 16.4149000 42.3451000 44.7670000 23.9875000 16.4542000 590 100.000000 18.3648000 100.000000 60.2983000 30.4998000 97.3218000 591 75.7817000 38.0130000 94.6243000 42.2427000 26.2751000 86.2979000 592 78.4985000 47.0958000 100.000000 48.6414000 32.9785000 98.4145000 593 0.00000000 65.3860000 17.8611000 14.2533000 27.7339000 7.14007000 594 0.00000000 63.7096000 29.4325000 14.2723000 26.5114000 11.0320000 595 73.1849000 80.1714000 29.8528000 43.4045000 54.4345000 15.0805000 596 71.4323000 64.6613000 24.1894000 33.6213000 37.1771000 9.91648000 597 81.3915000 75.9789000 23.7458000 45.9491000 52.1475000 11.9957000 598 84.9536000 79.4576000 35.3220000 51.6172000 57.9655000 18.1578000 599 100.000000 90.6028000 36.0615000 71.7525000 79.2040000 21.6235000 600 13.7881000 0.00000000 15.9070000 1.09097000 0.51707200 2.10051000 601 12.2453000 6.01814000 16.3069000 1.15823000 0.81049700 2.24668000 602 9.05294000 0.00000000 18.0941000 0.85122100 0.38153900 2.62866000 603 37.6400000 38.4076000 20.9112000 9.83351000 11.4699000 5.10337000 604 40.5428000 67.8459000 22.9127000 21.3559000 33.1060000 9.32522000 605 44.7383000 100.000000 39.2245000 45.0088000 76.0235000 24.3655000 606 0.00000000 26.7444000 74.1770000 11.2810000 7.83963000 49.1515000 607 0.00000000 36.6175000 86.2937000 16.8716000 13.0647000 69.3794000 608 35.0006000 45.4429000 84.7124000 22.7716000 19.5580000 67.5558000 609 38.6579000 60.2998000 81.4105000 27.9513000 30.1971000 63.7738000 610 44.6856000 63.3988000 91.7436000 34.6366000 35.2348000 82.7803000 611 67.4292000 62.9872000 100.000000 47.7277000 41.3410000 100.077000 612 37.7224000 32.1708000 55.4759000 12.7061000 10.4743000 26.7341000 613 50.8884000 45.5050000 56.8184000 20.5208000 19.2674000 29.3815000 614 50.9923000 49.8397000 66.7691000 24.0910000 22.8623000 41.3046000 615 67.5389000 79.2922000 100.000000 56.2766000 58.3488000 102.909000 616 7.82780000 14.7692000 27.0071000 2.04018000 1.94100000 5.87576000 617 0.00000000 9.01566000 31.4103000 1.75766000 1.19296000 7.74605000 618 0.00000000 16.2490000 86.7506000 13.8876000 6.84806000 69.1494000 619 0.00000000 63.0659000 86.8413000 25.8224000 30.6703000 73.2799000 620 0.00000000 30.8471000 34.1482000 4.49473000 6.23238000 9.99989000 621 27.6844000 33.9545000 36.2828000 7.89759000 8.85505000 11.5388000 622 26.8197000 37.8473000 57.3463000 11.8471000 11.7852000 28.9410000 623 26.9427000 44.2815000 58.0090000 13.6676000 15.1818000 30.1963000 624 31.9295000 45.6229000 64.3319000 16.4184000 17.0192000 37.5657000 625 40.6713000 60.3600000 63.8527000 23.8116000 28.6479000 38.8444000 626 42.8906000 48.4110000 17.9175000 13.9776000 17.7473000 5.24198000 627 48.1448000 55.3402000 15.6060000 18.0563000 23.4305000 5.56013000 628 59.9984000 53.7909000 30.1867000 23.4430000 25.2458000 10.6553000 629 60.7712000 53.1287000 52.1083000 26.4657000 26.1168000 25.7930000 630 70.4655000 64.8839000 63.3354000 38.7627000 39.3310000 39.5027000 631 77.6987000 71.1497000 65.4242000 46.8923000 48.0307000 43.2796000 632 50.4731000 36.2752000 32.6076000 14.4461000 13.0126000 9.96531000 633 82.2063000 38.0713000 32.1423000 32.2743000 22.8196000 10.6797000 634 85.8719000 67.9547000 41.5988000 46.8072000 46.0947000 20.0882000 635 89.5817000 76.9634000 48.9405000 55.6166000 57.6362000 27.5302000 636 28.4148000 26.0934000 15.7369000 5.07168000 5.50913000 2.81557000 637 41.4253000 31.2870000 15.4564000 9.12611000 8.89671000 3.19225000 638 74.6854000 41.2570000 20.3491000 27.0357000 21.3964000 5.94124000 639 82.1852000 48.6711000 30.3125000 35.0268000 28.6220000 10.7560000 640 15.4690000 16.4962000 38.9741000 3.95469000 3.00925000 12.2742000 641 13.7054000 12.9541000 78.0248000 11.5406000 5.56792000 54.4798000 642 15.3566000 25.0257000 100.000000 20.7160000 11.3014000 95.7019000 643 17.9876000 34.2255000 100.000000 22.6010000 14.6591000 96.2506000 644 34.9328000 34.7881000 100.000000 25.7251000 16.4445000 96.4306000 645 42.0527000 47.1286000 100.000000 30.8788000 23.8364000 97.5858000 646 100.000000 66.6600000 100.000000 73.6591000 57.2235000 101.776000 647 52.4646000 58.4362000 0.00000000 20.5455000 26.5494000 4.04195000 648 52.0983000 68.3348000 0.00000000 24.8330000 35.3446000 5.51367000 649 86.7832000 69.1216000 0.00000000 45.4834000 46.5715000 6.59256000 650 80.2388000 42.3527000 10.3536000 30.6215000 23.7252000 3.96663000 651 83.8240000 43.4101000 0.00000000 33.3091000 25.5615000 3.17873000 652 87.7637000 53.9877000 0.00000000 39.7170000 33.8969000 4.44997000 653 0.00000000 59.5816000 67.5714000 18.6925000 25.4254000 43.1089000 654 0.00000000 67.9143000 84.2828000 27.2330000 34.8595000 69.5333000 655 76.7054000 94.0951000 100.000000 71.8509000 81.1886000 106.497000 656 75.9931000 100.000000 100.000000 75.9990000 90.1808000 108.014000 657 35.9603000 15.8334000 13.9682000 5.46752000 3.92764000 2.10936000 658 68.6177000 24.9522000 8.72428000 19.6325000 12.7949000 2.20646000 659 70.4690000 73.5208000 17.8125000 37.1032000 45.6030000 9.37218000 660 90.8337000 80.6559000 21.7063000 55.8447000 61.3569000 12.5591000 661 100.000000 81.9871000 23.5895000 64.8735000 67.2218000 13.8527000 662 40.9219000 24.3780000 10.9029000 7.68841000 6.51047000 1.93770000 663 57.6581000 25.5515000 0.00000000 13.9360000 10.0039000 1.19661000 664 72.5460000 30.4842000 0.00000000 22.7101000 15.7242000 1.83841000 665 87.2973000 37.2515000 41.8011000 37.0335000 24.8618000 16.6462000 666 89.0416000 36.8891000 54.1236000 40.2921000 26.1926000 26.9846000 667 75.5371000 0.00000000 51.1769000 25.9576000 12.9126000 22.4218000 668 86.9215000 0.00000000 60.2090000 35.8097000 17.7918000 31.9172000 669 86.8102000 20.6376000 75.5268000 40.7650000 21.7734000 52.2713000 670 100.000000 18.8467000 77.5836000 52.4721000 27.4482000 55.8640000 671 100.000000 21.5360000 88.4665000 56.2718000 29.4530000 74.3795000 672 53.5554000 0.00000000 46.0774000 13.4857000 6.57799000 17.5436000 673 64.2681000 38.0970000 49.2779000 23.3172000 17.9541000 21.8617000 674 82.0410000 45.6055000 50.3578000 36.5541000 27.7134000 23.9890000 675 21.2398000 10.3873000 10.5741000 2.10752000 1.62819000 1.23796000 676 22.7059000 10.1719000 16.1055000 2.50841000 1.79324000 2.31797000 677 21.7960000 0.00000000 14.0786000 1.92422000 0.95539400 1.74375000 678 23.0958000 8.34071000 21.8881000 2.77969000 1.75660000 3.91028000 679 47.0122000 35.7141000 41.5761000 14.0781000 12.5195000 15.3164000 680 55.0240000 42.1068000 42.8998000 18.9454000 17.3088000 16.9230000 681 63.9584000 51.8072000 44.0939000 26.3373000 25.5077000 18.9948000 682 64.3593000 57.3953000 46.0863000 28.9085000 29.8700000 21.2337000 683 64.4685000 86.3802000 64.0952000 47.7036000 61.9225000 44.2992000 684 66.0725000 87.4000000 100.000000 60.6524000 68.3045000 104.600000 685 0.00000000 52.5751000 39.2556000 10.8388000 17.9906000 14.9847000 686 0.00000000 64.6638000 53.5248000 17.9136000 28.6632000 28.0648000 687 0.00000000 75.1534000 53.4394000 23.2326000 39.3269000 29.7614000 688 13.7792000 63.6740000 77.7462000 23.9040000 30.4192000 58.1931000 689 17.6391000 62.9527000 86.3973000 26.7031000 31.0675000 72.5199000 690 17.8172000 62.0341000 100.000000 31.4088000 32.3052000 99.1926000 691 17.2145000 86.0362000 100.000000 44.5163000 58.6214000 103.581000 692 20.5135000 93.7393000 100.000000 50.3565000 69.7121000 105.414000 693 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 694 0.00000000 5.20604000 9.05781000 0.30321800 0.35749900 0.86864200 695 7.45454000 6.86764000 0.00000000 0.47705700 0.55520300 0.08202750 696 0.00000000 13.6716000 8.89404000 0.74845900 1.25469000 0.99658700 697 0.00000000 18.2132000 8.98359000 1.14827000 2.05074000 1.14108000 698 46.3500000 35.1600000 35.6958000 13.0138000 11.8757000 11.5096000 699 51.0737000 45.9182000 36.4193000 17.5837000 18.2965000 12.9314000 700 69.6307000 73.0838000 60.7487000 41.8012000 47.0476000 37.8497000 701 94.7150000 84.5319000 79.2067000 71.5516000 71.9409000 65.9813000 702 100.000000 93.6017000 90.6345000 86.4506000 88.5841000 88.2349000 703 0.00000000 37.5751000 12.4268000 4.42246000 8.43504000 2.73991000 704 11.5305000 39.7655000 8.20517000 5.34523000 9.70661000 2.29717000 705 17.6833000 54.8635000 0.00000000 10.4491000 19.2871000 3.17219000 706 14.5211000 82.5774000 25.8124000 24.9284000 47.1615000 12.9169000 707 61.1753000 83.6583000 26.7392000 38.6336000 55.2411000 14.1262000 708 81.4898000 84.1263000 26.1284000 51.1341000 62.1390000 14.5517000 709 84.0277000 92.1349000 100.000000 75.5496000 80.9417000 106.254000 710 4.93140000 8.51672000 12.7139000 0.70779600 0.75219200 1.50504000 711 0.00000000 8.82618000 7.72253000 0.42028300 0.64274300 0.75014900 712 51.4617000 13.5635000 0.00000000 9.98394000 6.02151000 0.63618800 713 85.2319000 48.4782000 58.3367000 41.2809000 31.2866000 32.1982000 714 89.7101000 62.7509000 70.9959000 53.1523000 45.1030000 49.6441000 715 100.000000 61.9996000 72.6852000 62.2748000 49.2644000 52.3212000 716 34.0902000 19.8703000 22.3933000 5.83439000 4.65848000 4.47658000 717 38.2027000 22.3235000 20.3583000 7.05142000 5.73030000 3.97313000 718 57.7602000 31.1399000 18.2386000 15.4128000 12.0821000 4.15822000 719 93.3334000 39.7247000 65.0659000 46.8168000 30.2930000 39.4187000 720 100.000000 49.0735000 69.3635000 56.5123000 39.1308000 46.1080000 721 22.6081000 24.9118000 0.00000000 3.53103000 4.50242000 0.68299500 722 41.3271000 27.8832000 0.00000000 8.13014000 7.54580000 1.02809000 723 41.2160000 39.4027000 15.3714000 10.8096000 12.3635000 3.75384000 724 34.9176000 40.1623000 37.1358000 10.9673000 12.5312000 12.5961000 725 34.2450000 41.2948000 42.9103000 11.8256000 13.3196000 16.5358000 726 59.8114000 45.1484000 50.1473000 23.0789000 20.5716000 23.1343000 727 64.8339000 45.6032000 65.1896000 28.7672000 23.3537000 39.1820000 728 42.7496000 36.5885000 44.4688000 13.2511000 12.3346000 17.4227000 729 42.0252000 54.1495000 46.8888000 18.5466000 22.6823000 21.0331000 730 55.8776000 55.2866000 48.4614000 24.3719000 26.2829000 22.7190000 731 59.4972000 56.1482000 65.0955000 29.6265000 29.0996000 40.1305000 732 77.1353000 77.8988000 100.000000 61.3348000 59.7317000 102.910000 733 83.4851000 84.6567000 100.000000 69.9789000 70.3973000 104.513000 734 33.9828000 0.00000000 63.1076000 10.3244000 4.58030000 34.0245000 735 34.5230000 9.66104000 72.1198000 13.0096000 6.21356000 45.8119000 736 78.3363000 27.3463000 80.0150000 36.8307000 20.9544000 59.2570000 737 33.3212000 26.9928000 33.4526000 7.51232000 6.82565000 9.57932000 738 32.5012000 39.5737000 32.2659000 9.73494000 11.7373000 9.79076000 739 79.8980000 46.9539000 61.7610000 37.6411000 28.6200000 35.6608000 740 89.7452000 64.9522000 82.7358000 57.5864000 48.4724000 67.9371000 741 88.8270000 82.0253000 96.8531000 71.1466000 68.6472000 97.4812000 742 60.2346000 73.0580000 71.8339000 39.4357000 45.5005000 51.6028000 743 71.7682000 74.9834000 84.5148000 50.5364000 52.3538000 72.0815000 744 73.3590000 80.6161000 85.0888000 54.9967000 59.5180000 74.2233000 745 74.1053000 86.5262000 85.9571000 59.5495000 67.4638000 77.0366000 746 8.77034000 13.6659000 0.00000000 0.93544100 1.36796000 0.21475200 747 12.9049000 11.3974000 0.00000000 1.06530000 1.20382000 0.17622800 748 25.2003000 7.65098000 0.00000000 2.37295000 1.58230000 0.18037800 749 25.4283000 0.00000000 9.79682000 2.34455000 1.18845000 1.02435000 750 67.3049000 0.00000000 10.3154000 17.1207000 8.80429000 1.79235000 751 74.5255000 59.9814000 21.8616000 33.3347000 34.0021000 8.51564000 752 77.9805000 92.9123000 31.6877000 55.2513000 73.2387000 18.9714000 753 16.9971000 30.9814000 25.9951000 4.79817000 6.50969000 6.20254000 754 13.9102000 36.8644000 36.0345000 6.63898000 9.14250000 11.5154000 755 0.00000000 20.0013000 56.7382000 6.27050000 4.40314000 27.1804000 756 73.0404000 16.5932000 85.8486000 33.9245000 17.2593000 68.5056000 757 82.8899000 19.9587000 86.2219000 41.0485000 21.4226000 69.5914000 758 92.2466000 74.0129000 89.0279000 66.3419000 59.5284000 80.6860000 759 67.3789000 52.8337000 58.4113000 31.0181000 28.1696000 32.2167000 760 77.1757000 55.0890000 70.8130000 40.7161000 34.0575000 47.9170000 761 87.7648000 88.0158000 77.3604000 67.5587000 73.4074000 63.5973000 762 90.3996000 100.000000 87.5507000 81.9096000 93.7704000 83.7785000 763 81.3887000 75.4980000 63.2918000 51.3131000 53.8583000 41.5940000 764 83.9610000 91.4171000 73.3353000 65.8986000 76.2410000 58.2621000 765 100.000000 92.7827000 74.0614000 80.5735000 85.2627000 60.2766000 766 100.000000 92.3519000 82.4627000 82.7548000 85.6285000 73.3264000 767 25.3128000 16.0994000 21.3817000 3.62288000 2.96915000 3.93719000 768 60.8813000 11.4250000 39.8060000 16.3809000 8.82802000 13.2835000 769 70.4808000 0.00000000 40.9583000 21.2793000 10.6789000 14.1557000 770 84.8959000 15.8490000 57.0429000 34.3803000 18.2768000 28.6921000 771 47.8490000 0.00000000 35.9522000 9.94567000 4.90578000 10.4750000 772 47.7610000 24.5767000 40.8337000 12.2607000 8.64336000 14.1534000 773 49.4557000 34.2755000 79.2155000 22.7214000 15.5900000 57.6915000 774 0.00000000 22.4403000 25.2236000 2.40877000 3.32256000 5.41279000 775 9.80588000 24.2695000 24.3296000 2.98811000 3.98821000 5.17628000 776 22.2200000 39.3357000 41.3743000 8.83026000 11.0638000 15.1718000 777 23.3847000 41.1958000 50.3833000 10.8254000 12.6337000 22.4564000 778 45.2895000 51.5859000 50.3085000 19.2387000 21.6236000 23.6826000 779 52.3959000 59.2313000 60.7520000 26.7503000 29.5457000 35.2683000 780 71.0584000 60.1147000 73.5233000 39.5619000 36.3349000 52.2168000 781 73.1509000 70.6306000 77.7882000 46.9555000 47.2861000 60.2991000 782 0.00000000 18.7298000 30.9735000 2.45754000 2.65840000 7.77725000 783 0.00000000 15.4839000 42.9132000 3.52498000 2.59658000 14.9055000 784 0.00000000 87.6804000 74.8366000 35.9282000 56.8435000 58.2750000 785 0.00000000 90.0822000 86.5029000 41.2095000 61.6306000 77.8432000 786 10.0931000 74.4473000 76.1652000 28.5596000 40.8794000 57.5576000 787 0.00000000 83.8702000 88.1170000 37.5613000 53.4473000 79.3589000 788 45.8080000 8.20932000 63.8056000 14.1616000 6.93620000 35.1058000 789 71.8823000 0.00000000 70.0095000 27.6879000 13.3397000 43.5140000 790 76.9057000 0.00000000 84.4992000 35.1195000 16.6814000 65.9814000 791 88.0008000 0.00000000 84.9753000 43.3479000 20.9052000 67.1862000 792 50.3535000 20.7424000 48.1790000 13.7967000 8.58330000 19.6223000 793 51.9607000 59.8326000 48.9025000 24.5972000 29.0623000 23.6168000 794 51.0781000 64.6615000 66.1687000 29.8137000 34.4895000 42.4909000 795 50.1177000 67.4712000 77.2431000 33.7075000 38.1284000 58.3912000 796 44.2301000 19.7595000 32.9421000 9.53961000 6.45105000 9.13023000 797 79.8737000 17.1944000 61.2615000 31.7269000 16.9896000 33.1583000 798 92.8396000 31.4197000 81.3765000 49.0400000 28.2451000 62.2300000 799 24.7106000 52.3918000 28.3711000 11.7008000 18.4691000 9.13901000 800 32.0788000 80.9769000 40.0073000 28.0494000 47.1240000 20.1940000 801 45.0750000 95.3146000 100.000000 57.1758000 74.9932000 106.074000 802 0.00000000 10.2136000 15.1076000 0.72879600 0.88421400 2.01089000 803 0.00000000 6.73548000 16.0357000 0.60160200 0.56572100 2.16605000 804 42.7717000 12.5052000 15.5611000 7.20580000 4.43354000 2.45515000 805 59.9299000 24.4301000 18.9079000 15.3794000 10.4480000 4.02599000 806 66.6818000 34.0696000 24.0860000 20.8372000 15.6882000 6.40503000 807 100.000000 34.4042000 26.1413000 45.7090000 28.5965000 8.36831000 808 72.3324000 19.8590000 21.8363000 21.7483000 12.8648000 5.03804000 809 82.3662000 21.7923000 20.1417000 28.5861000 16.7355000 4.89866000 810 81.4211000 50.3010000 48.1117000 37.2152000 30.2862000 22.5217000 811 80.7088000 56.1407000 91.0124000 49.8217000 38.6178000 81.2364000 812 18.2912000 13.6485000 32.6972000 3.32742000 2.41719000 8.55236000 813 16.1489000 10.7375000 38.8244000 3.57432000 2.17732000 12.0376000 814 16.1989000 0.00000000 43.5500000 3.79863000 1.62657000 15.1683000 815 13.3539000 39.0146000 47.7974000 8.67496000 10.7599000 19.9952000 816 25.3086000 75.8627000 56.1056000 26.2806000 41.4324000 32.6281000 817 31.7913000 92.3575000 79.5649000 44.0182000 65.7689000 66.8097000 818 25.4089000 38.2012000 0.00000000 6.47884000 9.74284000 1.53917000 819 24.1767000 41.0099000 9.82702000 7.14869000 11.0999000 2.68877000 820 22.9329000 50.2750000 40.1546000 11.9359000 17.3724000 15.3984000 821 28.1802000 70.9467000 47.4155000 22.6126000 35.7632000 23.7724000 822 27.2738000 70.0808000 58.3315000 23.9579000 35.5697000 33.9322000 823 33.7771000 82.3605000 100.000000 44.9496000 55.3081000 102.919000 824 16.9412000 43.6520000 80.1240000 17.6597000 16.3300000 59.5501000 825 20.7671000 47.7488000 100.000000 26.4454000 21.8363000 97.4334000 826 20.9762000 55.2941000 100.000000 29.0683000 27.0406000 98.2997000 827 57.6371000 10.1612000 22.2653000 13.1278000 7.22865000 4.54524000 828 63.5860000 0.00000000 24.0082000 15.7774000 8.03570000 5.16639000 829 83.1624000 0.00000000 22.3236000 27.9053000 14.3009000 5.15111000 830 49.5991000 17.5028000 15.5322000 9.97527000 6.47125000 2.69613000 831 61.9731000 40.0962000 11.1824000 19.0967000 16.9090000 3.38844000 832 100.000000 59.8336000 0.00000000 52.5597000 43.9037000 5.70476000 833 100.000000 77.0333000 62.3307000 67.3282000 63.4375000 41.4732000 834 100.000000 89.8635000 92.6777000 84.4859000 83.4580000 91.2683000 835 17.9107000 33.7812000 23.4477000 5.26093000 7.57566000 5.43094000 836 21.0594000 41.7547000 26.0963000 7.70747000 11.5819000 7.06865000 837 68.5369000 51.9539000 38.6203000 28.1704000 26.6118000 15.3283000 838 78.7275000 70.8369000 40.6225000 42.9466000 46.2734000 19.6563000 839 79.4559000 78.1103000 42.5600000 47.7209000 54.6663000 22.3730000 840 81.7716000 78.0770000 55.4901000 51.4466000 56.3143000 33.5550000 841 6.40496000 18.7501000 18.1738000 1.76847000 2.41136000 2.99331000 842 0.00000000 18.9103000 15.8690000 1.45687000 2.28840000 2.41416000 843 11.3578000 15.8636000 13.0919000 1.55932000 1.92063000 1.75548000 844 47.0163000 11.6144000 5.43451000 8.26314000 4.92558000 0.92615500 845 49.9449000 0.00000000 9.23306000 8.96611000 4.60380000 1.25574000 846 100.000000 0.00000000 14.1715000 41.5590000 21.3879000 3.61836000 847 100.000000 73.0842000 18.7830000 59.4043000 56.7439000 10.6071000 848 74.7422000 56.1399000 59.4811000 36.8690000 32.9720000 33.9903000 849 75.4469000 64.4310000 60.5494000 41.0305000 40.2621000 36.3584000 850 0.00000000 27.4890000 61.0757000 8.17507000 6.78427000 32.2185000 851 0.00000000 45.2991000 75.4213000 15.7392000 16.1990000 52.3572000 852 0.00000000 44.4393000 84.4212000 18.2414000 16.8023000 66.7599000 853 0.00000000 56.1769000 100.000000 27.9093000 26.9405000 98.3415000 854 0.00000000 31.4607000 54.0177000 7.45410000 7.59827000 25.0232000 855 0.00000000 45.8854000 59.6149000 12.0307000 14.9922000 31.9748000 856 23.2714000 100.000000 65.8655000 44.6452000 75.2860000 49.2059000 857 24.3174000 100.000000 75.0836000 47.1996000 76.3266000 61.8051000 858 61.4085000 100.000000 75.4613000 59.1438000 82.4719000 62.9212000 859 32.8781000 46.4007000 39.0508000 12.4373000 15.8220000 14.3495000 860 39.7626000 46.8608000 68.1223000 19.6784000 19.1463000 42.5585000 861 51.2070000 52.6674000 80.6725000 28.9665000 26.3676000 61.7766000 862 50.6113000 53.2810000 89.8353000 32.0008000 27.9043000 77.8908000 863 55.0704000 56.1410000 100.000000 38.7830000 32.5260000 98.8466000 864 79.5845000 60.4886000 100.000000 54.2570000 43.1010000 100.072000 865 87.3098000 21.4490000 0.00000000 31.6712000 18.3342000 1.87001000 866 86.3254000 34.2648000 0.00000000 32.9914000 22.1126000 2.52975000 867 91.2638000 41.8191000 26.5430000 39.7662000 28.1308000 8.75319000 868 100.000000 47.5585000 45.0329000 51.1935000 36.2349000 20.4668000 869 100.000000 57.5580000 57.1522000 56.8040000 44.1236000 32.6125000 870 61.7966000 35.3107000 58.6668000 23.1502000 16.7353000 30.6976000 871 61.0969000 36.0910000 69.5535000 25.4722000 17.8967000 43.8981000 872 82.4811000 39.5980000 72.6837000 40.1148000 26.5695000 49.1060000 873 89.4018000 50.3399000 90.4764000 54.1358000 37.7778000 79.8327000 874 42.0620000 18.0114000 49.3181000 10.8193000 6.59087000 20.3613000 875 66.4741000 21.4764000 50.9530000 21.8508000 12.8116000 22.4170000 876 78.5784000 28.0551000 52.8643000 30.5658000 18.6506000 24.8394000 877 89.6812000 60.8769000 56.4530000 49.0022000 42.1394000 31.9206000 878 51.1682000 40.3608000 30.4402000 15.4829000 15.0130000 9.21940000 879 52.4852000 46.4785000 28.6917000 17.5527000 18.6178000 9.00140000 880 55.2673000 75.2766000 31.4043000 31.2621000 43.9171000 14.4350000 881 31.8023000 49.4160000 27.9512000 12.0092000 17.1364000 8.68244000 882 46.4531000 64.2945000 35.9260000 22.7134000 31.1828000 14.8591000 883 49.2642000 92.3235000 41.0918000 40.9152000 65.0826000 23.7132000 884 73.7580000 100.000000 39.9907000 58.9133000 83.1806000 25.5164000 885 15.5434000 23.2930000 11.2570000 2.66341000 3.70015000 1.71690000 886 10.8464000 21.6311000 0.00000000 1.84327000 2.98938000 0.47988100 887 22.6617000 65.6241000 0.00000000 15.6125000 28.6554000 4.70837000 888 26.0711000 76.3622000 0.00000000 21.7311000 40.0817000 6.59146000 889 73.4664000 87.9950000 0.00000000 47.3337000 64.1273000 9.88366000 890 90.1386000 100.000000 0.00000000 68.3422000 88.3184000 13.4460000 891 12.3270000 6.44840000 0.00000000 0.77039000 0.68210600 0.09106580 892 13.6156000 0.00000000 9.39496000 0.84826400 0.41831300 0.89791700 893 13.9505000 5.68313000 12.3763000 1.13147000 0.79685500 1.43005000 894 90.4307000 25.1116000 36.6348000 36.6537000 21.3901000 12.6510000 895 100.000000 60.6310000 41.2402000 55.4522000 45.5959000 19.2877000 896 44.4192000 56.8796000 23.6365000 17.7985000 24.1218000 8.03077000 897 47.4056000 100.000000 23.1551000 44.4165000 75.8927000 16.4519000 898 87.4552000 100.000000 20.6154000 66.8236000 87.4624000 16.6768000 899 100.000000 100.000000 22.4518000 77.7407000 93.0775000 17.7741000 900 43.8983000 36.1675000 0.00000000 10.5210000 11.1345000 1.59479000 901 63.7619000 44.0269000 0.00000000 20.8439000 19.3914000 2.64459000 902 100.000000 46.2714000 13.5019000 48.0106000 34.3330000 5.64294000 903 100.000000 53.1447000 89.6843000 64.0746000 44.3732000 79.0971000 904 28.0513000 8.98871000 81.2651000 14.2328000 6.48586000 59.6815000 905 39.3661000 0.00000000 90.7861000 19.7931000 8.52969000 76.5816000 906 49.2323000 27.7402000 100.000000 28.8229000 16.0943000 96.1998000 907 92.8011000 95.5213000 100.000000 85.0766000 89.6116000 107.426000 908 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 909 0.00000000 26.9261000 10.1685000 2.29273000 4.28865000 1.68037000 910 0.00000000 46.8065000 17.7641000 7.11828000 13.4706000 4.73754000 911 0.00000000 54.9713000 16.8451000 9.83842000 18.9819000 5.42677000 912 19.6882000 55.4711000 67.0789000 18.2717000 22.8089000 41.9948000 913 47.7547000 58.5591000 73.9491000 27.9305000 29.3744000 52.0995000 914 20.6560000 0.00000000 71.9152000 10.0380000 4.18303000 45.2898000 915 21.6119000 0.00000000 87.5700000 14.9415000 6.15964000 70.4314000 916 22.4199000 31.7570000 89.3662000 18.6254000 12.3522000 74.7204000 917 76.7238000 31.9615000 100.000000 43.7018000 24.8682000 97.1093000 918 28.9596000 0.00000000 39.3561000 5.12983000 2.37687000 12.3371000 919 38.6564000 0.00000000 53.5205000 9.57725000 4.42013000 23.8207000 920 43.5290000 10.0220000 81.8278000 18.3815000 8.68578000 60.8131000 921 52.9453000 0.00000000 85.0332000 22.4958000 10.1531000 66.3106000 922 67.9759000 0.00000000 88.6350000 31.0382000 14.4152000 73.1151000 923 78.3935000 7.11263000 93.7709000 39.6080000 18.9418000 83.3236000 924 90.5688000 60.5873000 96.3991000 61.1815000 46.8996000 92.8753000 925 89.5558000 67.7709000 100.000000 65.0672000 53.5904000 101.527000 926 0.00000000 7.80211000 38.9186000 2.51228000 1.40268000 12.0041000 927 26.1540000 7.22191000 58.9095000 8.03968000 3.83812000 29.2661000 928 29.7970000 62.6742000 88.1437000 29.0765000 32.0388000 75.7223000 929 31.5128000 70.3446000 100.000000 37.5834000 41.3337000 100.610000 930 45.7470000 71.2995000 100.000000 42.0284000 44.3584000 100.959000 931 57.0514000 71.5516000 100.000000 46.6319000 46.9268000 101.213000 932 56.2560000 22.5119000 32.2622000 14.4220000 9.46000000 9.10231000 933 82.0863000 27.6872000 31.8902000 30.1093000 18.6567000 9.86252000 934 82.1438000 52.3836000 43.2767000 37.7259000 31.6906000 18.9832000 935 82.3167000 66.5388000 48.1276000 44.4217000 43.7385000 24.7517000 936 84.1040000 68.0243000 61.7112000 49.0148000 46.8780000 38.5283000 937 65.2123000 64.1587000 48.9945000 32.6880000 36.0274000 24.6134000 938 66.4107000 79.4780000 52.1479000 41.9445000 52.7219000 30.1496000 939 25.7413000 31.9471000 24.4090000 6.07567000 7.45043000 5.71116000 940 33.2420000 33.2593000 23.3587000 7.76227000 8.70885000 5.48756000 941 66.7941000 46.4800000 21.6027000 23.8785000 21.9393000 6.60147000 942 81.6464000 56.5266000 18.5323000 36.5798000 33.6360000 7.28125000 943 100.000000 66.3153000 22.1036000 56.1672000 49.9629000 10.4721000 944 100.000000 74.5676000 79.6406000 70.4721000 62.4667000 64.8991000 945 100.000000 84.8244000 83.2035000 77.7750000 75.2889000 72.8356000 946 68.3069000 44.4801000 40.7750000 25.9452000 21.9235000 15.9557000 947 68.4576000 51.6827000 64.6179000 32.5751000 28.2183000 39.2224000 948 75.6997000 51.4628000 77.1232000 40.1863000 31.6522000 56.6157000 949 59.9188000 44.1205000 77.0396000 28.9625000 22.4592000 55.3056000 950 70.1161000 44.4577000 91.0661000 39.0847000 27.2903000 79.7179000 951 55.3500000 0.00000000 32.6865000 12.5835000 6.30526000 8.80957000 952 66.4299000 0.00000000 32.0761000 17.9618000 9.08486000 8.74858000 953 88.9846000 0.00000000 34.5489000 33.4149000 17.0224000 10.7798000 954 89.8686000 56.1326000 66.2789000 49.3694000 39.2365000 42.5148000 955 29.0931000 35.9995000 22.8165000 7.41620000 9.39023000 5.44886000 956 32.5555000 37.2486000 43.1107000 10.4702000 11.1460000 16.3326000 957 34.7249000 36.1051000 48.1913000 11.4773000 11.1952000 20.2588000 958 39.9069000 40.6511000 71.0650000 18.7310000 15.9886000 45.9331000 959 48.9084000 41.3607000 85.1114000 26.0440000 19.5496000 68.0736000 960 74.3237000 31.9838000 69.3471000 32.0191000 20.0218000 43.6882000 961 100.000000 36.2529000 70.9058000 53.4249000 32.3199000 47.0386000 962 19.2060000 5.46842000 9.56532000 1.59087000 1.03282000 1.00128000 963 16.9747000 5.40631000 0.00000000 1.16245000 0.82838600 0.09864220 964 15.5334000 8.40065000 8.99822000 1.28985000 1.05664000 0.94368000 965 54.5043000 27.0116000 28.8887000 13.9899000 10.2187000 7.65524000 966 61.0826000 31.3499000 41.0446000 19.0600000 13.7857000 14.9310000 967 60.8189000 47.2428000 56.6439000 25.3742000 22.5504000 29.5798000 968 69.0396000 47.0485000 56.6959000 29.7062000 24.6937000 29.8182000 969 54.5483000 35.7285000 42.2326000 17.1038000 14.0738000 15.9185000 970 74.0488000 41.6982000 52.3106000 30.3904000 22.8768000 25.1477000 971 90.2236000 55.5250000 55.8860000 47.1866000 38.0269000 30.6472000 972 84.1209000 44.2054000 42.3424000 36.4583000 27.2031000 17.5107000 973 84.2038000 57.6392000 59.9907000 44.1184000 37.5644000 35.0540000 974 62.6666000 68.6179000 39.7803000 32.1514000 39.0516000 18.2693000 975 79.4704000 84.4134000 41.2291000 51.4524000 62.4004000 22.7345000 976 89.8620000 95.0523000 47.7818000 67.7264000 81.8162000 30.5860000 977 32.7254000 24.2044000 13.6009000 5.61330000 5.39415000 2.31149000 978 32.0170000 25.6574000 8.03178000 5.49384000 5.65986000 1.48775000 979 38.2844000 25.2294000 5.96598000 6.93626000 6.31542000 1.31292000 980 62.8184000 31.4663000 9.56750000 17.5891000 13.3330000 2.53277000 981 63.1998000 76.5277000 25.6854000 35.2443000 47.0761000 12.3067000 982 20.1273000 28.9180000 11.5984000 4.04206000 5.66683000 2.08077000 983 19.3000000 44.3023000 18.0444000 7.67180000 12.6593000 4.62590000 984 16.2117000 70.8209000 22.8136000 18.1360000 33.6680000 9.56911000 985 36.9299000 58.1047000 25.0120000 16.1682000 23.9888000 8.59696000 986 52.7164000 60.1973000 30.9887000 22.7841000 28.6158000 11.7239000 987 51.3174000 60.7057000 38.7159000 23.2640000 29.0852000 16.1250000 988 54.0993000 78.8114000 44.0691000 34.2969000 48.3366000 22.9632000 989 86.9532000 81.4599000 50.2463000 56.4322000 62.0258000 29.4660000 990 31.8026000 0.00000000 30.2015000 4.74166000 2.28967000 7.21674000 991 33.7396000 9.93237000 38.3180000 6.38649000 3.56596000 11.8359000 992 43.5817000 42.8800000 58.1039000 17.4354000 16.5424000 30.3612000 993 59.8233000 54.1247000 69.4109000 30.0780000 28.0855000 45.4325000 994 39.6412000 47.4400000 43.2002000 15.0328000 17.5688000 17.3968000 995 49.0259000 60.2682000 55.9838000 24.9017000 29.3441000 30.2437000 996 55.9816000 60.4405000 66.0062000 29.9569000 31.8083000 41.7631000 997 59.0020000 67.8645000 82.1335000 39.1776000 41.0610000 66.4720000 998 60.7763000 78.4970000 92.7615000 49.4236000 54.4402000 87.6781000 999 64.6457000 84.3945000 92.0711000 54.7998000 62.6748000 87.6458000 1000 18.0848000 29.4883000 40.9346000 6.17964000 6.64997000 14.1576000 1001 14.6054000 54.7608000 40.0090000 12.4959000 20.0088000 15.7808000 1002 10.7009000 65.8949000 57.9822000 19.8008000 30.3879000 32.7796000 1003 11.0035000 69.9966000 65.8049000 23.5469000 35.1044000 42.4858000 1004 11.6963000 41.9314000 37.4300000 7.86568000 11.6075000 12.7594000 1005 14.3201000 57.7241000 36.0793000 13.1412000 22.0859000 13.6974000 1006 26.9400000 58.1048000 48.8534000 16.7226000 23.9564000 23.0041000 1007 60.9907000 41.8811000 27.5740000 19.9699000 17.9401000 8.25655000 1008 74.1191000 41.9212000 28.8026000 27.4510000 21.8006000 9.14332000 1009 92.7565000 54.5562000 41.4854000 46.6065000 37.4590000 18.3532000 1010 91.6440000 62.9355000 42.8303000 49.2558000 43.8594000 20.4004000 1011 94.4717000 75.5836000 43.4311000 58.1072000 57.8498000 23.0720000 1012 82.8499000 75.4883000 73.1608000 54.8192000 55.3741000 54.5690000 1013 82.3741000 90.1083000 78.6213000 65.3073000 74.3715000 65.8569000 1014 12.4870000 38.2236000 18.3531000 5.41808000 9.14515000 4.14841000 1015 11.4284000 45.8894000 23.3140000 7.67506000 13.3107000 6.36457000 1016 10.3206000 50.2939000 42.1524000 10.8651000 16.7995000 16.7165000 1017 17.1137000 51.2055000 52.8210000 13.4337000 18.3869000 25.6509000 1018 14.5994000 56.3276000 82.7472000 22.4468000 24.9371000 65.2651000 1019 26.7823000 36.0799000 49.4019000 9.99643000 10.4009000 21.2119000 1020 29.9795000 52.2991000 52.8690000 15.8127000 20.1733000 25.9149000 1021 30.2771000 58.4937000 54.5062000 18.5086000 24.9954000 28.2729000 1022 46.6422000 70.6819000 59.2370000 29.5573000 38.8924000 35.2514000 1023 54.0047000 76.9348000 67.9593000 37.7851000 47.9707000 46.9562000 1024 52.0829000 74.8749000 72.1605000 36.9101000 45.6641000 52.2243000 1025 44.0482000 47.0846000 25.7297000 14.4189000 17.3033000 7.67458000 1026 65.2606000 52.4479000 24.2977000 25.1698000 25.4781000 8.14366000 1027 80.2516000 62.2974000 31.0925000 38.8718000 38.2443000 12.7854000 1028 51.3506000 42.6167000 50.4492000 18.7233000 17.2642000 22.9916000 1029 50.9000000 51.1158000 60.5604000 23.0708000 23.1346000 34.0111000 1030 51.4573000 55.3730000 75.7108000 28.5797000 27.8050000 54.3519000 1031 87.1859000 64.5420000 75.8484000 53.2730000 46.2094000 56.8085000 1032 95.3008000 72.0223000 83.0094000 65.8771000 57.9333000 69.7856000 1033 22.9774000 19.9199000 0.00000000 2.95483000 3.26782000 0.47505400 1034 22.6222000 19.5791000 6.92024000 2.97014000 3.20753000 1.01924000 1035 33.1971000 16.9661000 42.3895000 7.29978000 4.74655000 14.7460000 1036 38.5978000 55.1453000 100.000000 32.6013000 28.7788000 98.4490000 1037 18.6701000 41.9774000 60.8622000 12.3953000 13.5165000 33.0545000 1038 16.3357000 52.1878000 87.1101000 22.5410000 22.5633000 72.3699000 1039 11.8301000 60.4108000 92.3469000 27.1679000 29.4314000 83.2173000 1040 75.0976000 61.1778000 92.7557000 48.7158000 41.0063000 85.1111000 1041 6.65643000 14.2212000 6.60926000 0.96957900 1.43665000 0.75068800 1042 11.4454000 11.1279000 4.59963000 1.00106000 1.13817000 0.50659900 1043 8.40758000 0.00000000 12.0792000 0.56326800 0.26210500 1.30412000 1044 7.17520000 8.54327000 16.2652000 0.94647000 0.86081600 2.25768000 1045 27.9345000 13.6809000 24.4669000 4.09347000 2.89595000 4.95789000 1046 43.7098000 37.3543000 25.0753000 11.6518000 12.0091000 6.54616000 1047 51.9454000 37.4526000 22.8856000 14.4978000 13.5272000 5.89789000 1048 58.4816000 47.3665000 33.4658000 20.8812000 20.6855000 11.5571000 1049 74.9771000 59.5830000 69.0350000 40.5912000 36.6736000 46.0367000 1050 78.5115000 69.4002000 76.9936000 49.5903000 47.7413000 59.0286000 1051 38.9121000 28.7550000 32.3714000 9.11795000 8.09121000 9.17402000 1052 60.7735000 43.6924000 35.7881000 21.1404000 19.1851000 12.5455000 1053 72.9191000 46.5350000 65.3814000 33.7414000 26.3261000 39.7303000 1054 26.8095000 4.89061000 17.0489000 2.99132000 1.69421000 2.50092000 1055 86.5115000 11.9757000 21.8025000 30.8795000 16.5477000 5.25679000 1056 88.3470000 12.2536000 32.5847000 33.2006000 17.6725000 9.86465000 1057 100.000000 19.3168000 34.3659000 44.0938000 24.1765000 11.4967000 1058 100.000000 18.2353000 56.2049000 47.2175000 25.2464000 28.5004000 1059 48.1175000 65.9105000 27.2901000 23.2329000 32.6579000 10.8065000 1060 51.5978000 82.0291000 35.2571000 34.1324000 51.2948000 17.7546000 1061 52.5702000 83.2097000 58.9837000 38.9656000 54.4671000 37.4889000 1062 80.6123000 86.6750000 87.7343000 64.6082000 70.1503000 80.4633000 1063 84.6541000 87.1847000 93.1362000 69.8425000 73.1355000 90.9425000 1064 92.4941000 88.7705000 100.000000 79.8882000 79.6207000 105.771000 1065 54.5208000 43.7871000 0.00000000 16.4075000 17.0037000 2.41749000 1066 60.0039000 86.1686000 15.0966000 39.0166000 57.9609000 11.0079000 1067 68.8090000 94.7694000 12.0131000 49.6743000 72.5675000 12.6610000 1068 87.0319000 88.3271000 0.00000000 57.0888000 69.4956000 10.4058000 1069 56.6039000 56.3921000 43.8585000 24.4185000 27.0118000 19.2104000 1070 63.1533000 64.0752000 54.9164000 32.6077000 35.8095000 30.0197000 1071 71.6215000 65.0493000 69.4702000 41.0041000 40.4299000 47.3184000 1072 77.0391000 76.2525000 71.3037000 50.6962000 53.9481000 51.9050000 1073 62.6023000 60.7798000 56.3775000 31.1582000 32.8809000 30.9961000 1074 67.3818000 71.9012000 66.6721000 41.2352000 45.6643000 44.6806000 1075 88.3965000 83.0931000 67.0977000 62.0519000 66.0480000 48.0580000 1076 85.1645000 24.9132000 9.81345000 30.6473000 18.4617000 2.86952000 1077 84.8495000 23.8760000 40.7483000 32.5829000 18.9776000 15.0192000 1078 91.8402000 27.1027000 65.9324000 43.2083000 24.6267000 39.5867000 1079 91.9915000 27.6312000 87.6343000 49.7218000 27.3812000 72.8116000 1080 54.5895000 20.8314000 56.7856000 17.0551000 10.1019000 27.7611000 1081 61.0883000 29.5073000 61.4894000 22.2675000 14.5385000 33.4428000 1082 70.8801000 36.0053000 75.3210000 32.3281000 21.2239000 52.3049000 1083 78.5997000 40.8415000 85.3432000 41.5039000 27.3111000 69.1609000 1084 76.6886000 59.8474000 84.8197000 46.4082000 39.3050000 70.3071000 1085 100.000000 65.0764000 89.7528000 68.9882000 54.1621000 80.8555000 1086 5.93960000 4.40087000 17.3183000 0.77919000 0.53036200 2.46046000 1087 14.6339000 60.3559000 12.9593000 12.5889000 23.5897000 5.33201000 1088 47.4882000 61.3297000 13.3838000 20.1420000 28.0966000 5.88482000 1089 62.6788000 72.6365000 8.12612000 31.9901000 42.3004000 7.17507000 1090 61.7601000 79.2388000 0.00000000 35.1324000 49.4859000 7.70052000 1091 75.1295000 60.1989000 10.5150000 33.3005000 34.1788000 5.86848000 1092 93.3656000 60.0954000 11.4234000 46.9403000 41.1429000 6.63930000 1093 93.1554000 91.1787000 75.4327000 73.6571000 79.9183000 61.6213000 1094 94.0347000 91.4627000 84.5552000 77.4088000 81.8341000 76.4256000 1095 32.7491000 16.3799000 8.44607000 4.57239000 3.55773000 1.18152000 1096 47.0471000 23.3985000 0.00000000 9.33954000 7.18776000 0.89525100 1097 46.7222000 30.8548000 9.78221000 10.5743000 9.54749000 2.20200000 1098 47.9393000 85.1640000 16.9568000 33.3553000 54.0442000 10.9824000 1099 47.3985000 93.9624000 72.5700000 47.6700000 69.6476000 56.8618000 1100 50.7593000 95.1528000 84.0124000 53.2269000 73.4540000 75.1495000 1101 7.90427000 30.0643000 29.6903000 4.21668000 5.92940000 7.70718000 1102 11.9873000 37.7551000 70.8378000 13.0631000 12.0223000 45.1545000 1103 10.8699000 41.0640000 86.0331000 18.3300000 15.4226000 69.2973000 1104 31.6276000 51.7727000 91.8471000 26.4980000 24.1945000 81.2777000 1105 53.0186000 86.4034000 94.5811000 51.6049000 62.8880000 92.7849000 1106 33.2115000 26.8475000 27.5695000 6.92777000 6.55287000 6.74390000 1107 43.2099000 26.5051000 27.5902000 9.61182000 7.85815000 6.86326000 1108 91.6916000 25.3809000 29.2884000 37.0024000 21.7127000 8.84211000 1109 93.4444000 51.9506000 67.9081000 51.2280000 37.8812000 44.2338000 1110 0.00000000 39.7682000 42.0305000 7.35640000 10.4523000 15.5898000 1111 11.7507000 40.4205000 44.2822000 8.36767000 11.1811000 17.3168000 1112 29.3468000 30.2860000 34.8711000 7.35857000 7.54953000 10.5036000 1113 39.2093000 33.2971000 37.6497000 10.6060000 10.0352000 12.4462000 1114 41.2281000 56.0139000 42.5826000 18.3759000 23.7018000 17.9589000 1115 42.7692000 64.6029000 42.4450000 22.4402000 31.1586000 19.0856000 1116 44.5716000 70.3446000 71.7144000 31.6237000 39.3605000 50.6622000 1117 43.7772000 76.0202000 81.6548000 37.3045000 46.5032000 66.8293000 1118 87.5038000 79.9297000 84.1197000 64.2226000 63.6906000 72.8693000 1119 57.4219000 28.9010000 24.9725000 15.2745000 11.3738000 6.19395000 1120 78.2770000 29.0260000 24.5426000 27.0492000 17.4794000 6.59114000 1121 79.8000000 37.5162000 23.2710000 29.7121000 21.3898000 6.74757000 1122 92.9695000 69.4852000 31.0827000 52.1268000 50.1036000 14.3711000 1123 100.000000 71.3086000 39.9428000 60.3231000 55.6055000 20.0879000 1124 72.0506000 86.3967000 36.3984000 47.3423000 62.2935000 19.8433000 1125 83.9513000 87.8243000 51.4115000 58.4966000 69.2341000 31.7897000 1126 22.3579000 21.9575000 15.1692000 3.46261000 3.84199000 2.45137000 1127 39.1891000 21.4666000 80.9871000 17.8053000 9.89501000 59.6969000 1128 55.3002000 30.3201000 82.0806000 25.2095000 15.6354000 62.2127000 1129 90.2131000 30.9301000 97.9515000 52.6523000 29.2914000 93.1419000 1130 79.3199000 11.2186000 48.4918000 28.4740000 14.8994000 20.3312000 1131 89.5519000 19.3744000 51.8275000 37.3979000 20.4530000 23.8652000 1132 90.2331000 43.3497000 52.6575000 42.6188000 29.8368000 26.1695000 1133 48.8892000 25.6107000 54.0965000 14.9003000 9.98479000 25.1678000 1134 56.2376000 47.1955000 67.7944000 25.6860000 22.4049000 42.4447000 1135 55.5948000 48.7318000 75.5061000 27.9300000 24.0421000 53.3546000 1136 62.8408000 56.5183000 77.5532000 34.7020000 31.5489000 57.5452000 1137 68.9181000 70.0717000 92.3491000 48.9667000 47.3396000 85.5296000 1138 28.9886000 41.1408000 39.5165000 10.1975000 12.4726000 14.1229000 1139 29.9706000 44.0561000 47.7132000 12.3385000 14.6155000 20.4768000 1140 41.3965000 47.6228000 50.7920000 16.7788000 18.4176000 23.6218000 1141 47.6881000 62.9307000 53.5482000 25.1051000 31.2082000 28.1996000 1142 49.4914000 73.0087000 55.0290000 30.9851000 41.5443000 31.3236000 1143 49.8435000 100.000000 62.4982000 50.8144000 78.5557000 45.4564000 1144 16.0292000 48.9382000 55.6471000 13.0917000 17.0341000 28.1515000 1145 11.4896000 47.8589000 63.9639000 14.0998000 16.8430000 37.2105000 1146 7.53925000 53.6300000 63.5637000 15.7128000 20.5747000 37.3681000 1147 57.6370000 79.0944000 64.0239000 39.7081000 50.9505000 42.5163000 1148 72.8382000 47.7868000 36.2422000 29.0769000 25.0702000 13.5286000 1149 81.1494000 54.6112000 37.4111000 37.0648000 32.6286000 15.2669000 1150 88.4582000 66.1964000 52.3495000 49.6449000 46.1073000 28.6532000 1151 91.7143000 74.0458000 56.3405000 57.0535000 55.7902000 34.0158000 1152 91.6922000 76.5585000 64.0856000 60.0817000 59.2507000 43.1196000 1153 25.0661000 39.9199000 18.6341000 7.36376000 10.7597000 4.43313000 1154 26.1379000 78.2803000 90.3825000 37.2043000 48.0517000 82.5313000 1155 39.6321000 81.0558000 90.0175000 41.8295000 52.9352000 82.5446000 1156 43.5497000 85.8163000 89.1304000 45.7517000 59.5202000 81.9586000 1157 10.6845000 53.9164000 25.6052000 10.4354000 18.6514000 8.09649000 1158 12.9734000 71.5626000 33.6351000 19.1260000 34.6471000 14.4359000 1159 14.8919000 63.9047000 26.8338000 14.9434000 27.0132000 9.96432000 1160 19.9992000 69.3365000 40.0181000 19.4490000 33.0326000 17.9342000 1161 22.3264000 70.4532000 87.1143000 31.1378000 38.6533000 75.0301000 1162 22.5362000 82.0571000 86.9351000 37.7158000 51.8628000 76.9119000 1163 33.3055000 23.9006000 19.8160000 5.99265000 5.49467000 3.82327000 1164 38.0793000 24.3203000 16.7786000 7.09612000 6.16720000 3.08157000 1165 47.2265000 39.1110000 19.6250000 12.9126000 13.3173000 4.91248000 1166 23.3198000 8.96138000 68.4622000 9.83145000 4.62986000 40.7186000 1167 24.6469000 18.1469000 78.3019000 13.4151000 7.18278000 55.1239000 1168 49.4915000 16.9613000 100.000000 27.5566000 13.4173000 95.7498000 1169 52.0382000 85.9584000 100.000000 53.0552000 62.9466000 103.966000 1170 35.0806000 57.8199000 66.8873000 21.9741000 26.0752000 42.1865000 1171 51.7469000 70.4157000 74.7038000 35.0879000 41.1064000 55.0867000 1172 68.6663000 72.4715000 77.0896000 45.0368000 47.7525000 59.4167000 1173 13.1219000 93.9325000 17.4926000 32.1268000 62.5597000 12.8253000 1174 17.3963000 92.3701000 27.7317000 32.0443000 60.7229000 15.9457000 1175 14.0449000 93.0902000 68.1511000 38.7322000 64.2080000 50.2897000 1176 11.2980000 91.9678000 74.1775000 39.2714000 63.0803000 58.3399000 1177 7.17048000 19.8576000 14.3661000 1.75102000 2.59897000 2.12956000 1178 7.94219000 23.9433000 10.1042000 2.14929000 3.56838000 1.53941000 1179 23.9036000 87.4340000 0.00000000 28.2958000 53.7429000 8.88243000 1180 39.0114000 93.3927000 11.2916000 36.0338000 64.0051000 11.6042000 1181 90.2666000 94.9929000 22.2452000 65.2401000 80.7876000 15.9910000 1182 89.6608000 100.000000 38.0205000 70.1081000 88.9798000 24.7788000 1183 25.5918000 76.6139000 17.4368000 22.2562000 40.5122000 9.07581000 1184 28.3189000 93.8167000 88.2664000 47.2220000 68.6960000 82.0659000 1185 0.00000000 87.6700000 38.8271000 28.7880000 53.9758000 20.7088000 1186 9.57143000 90.8814000 50.6409000 33.1414000 59.3591000 30.5282000 1187 29.2934000 18.5213000 6.06934000 3.99331000 3.57079000 0.94891600 1188 51.0773000 21.4003000 12.3565000 10.8436000 7.55872000 2.21995000 1189 53.5923000 19.0101000 40.4533000 13.7933000 8.42535000 13.7735000 1190 54.3138000 31.9563000 45.6625000 16.7204000 12.6748000 18.2238000 1191 63.4612000 40.6426000 45.0510000 22.8655000 18.7261000 18.5939000 1192 66.7733000 48.6350000 50.7985000 27.8433000 24.5957000 24.2371000 1193 67.5439000 61.3019000 53.9250000 33.5582000 34.5031000 28.7514000 1194 73.1367000 67.6504000 54.3514000 39.8495000 42.0527000 30.2899000 1195 91.1734000 66.8443000 64.8088000 54.7116000 48.8837000 42.2774000 1196 93.8970000 76.8027000 70.2950000 63.6094000 61.1029000 51.2258000 1197 33.4919000 29.7198000 25.1979000 7.28473000 7.46231000 5.94505000 1198 34.9810000 35.6647000 30.6839000 9.25882000 10.1598000 8.72711000 1199 47.0960000 40.9647000 37.1872000 14.8126000 14.8163000 12.8657000 1200 55.1841000 44.4545000 39.2597000 19.1868000 18.4506000 14.6363000 1201 66.7724000 56.7601000 38.6542000 28.9515000 29.6395000 15.8931000 1202 73.4647000 62.2563000 36.9596000 34.9612000 36.1313000 15.7804000 1203 84.3917000 90.7954000 36.4852000 58.7810000 72.7156000 21.3035000 1204 50.1135000 77.0332000 21.8196000 29.4118000 44.5311000 10.7410000 1205 61.8792000 93.1077000 40.0481000 46.8681000 69.0240000 23.4560000 1206 68.9138000 93.5840000 75.1019000 58.0612000 74.5043000 60.9081000 1207 67.9110000 93.9305000 91.0540000 62.8808000 76.7804000 87.9936000 1208 15.2376000 23.6254000 27.0469000 3.53294000 4.11495000 6.23315000 1209 13.8690000 33.9458000 53.7460000 8.59701000 8.91676000 24.9553000 1210 47.3080000 33.0549000 61.0353000 16.9971000 12.8129000 32.8719000 1211 42.8750000 31.9930000 51.0210000 13.3691000 10.8584000 22.5482000 1212 47.7685000 39.6280000 58.9489000 18.1882000 15.6536000 31.0544000 1213 31.5471000 9.30654000 6.93962000 3.77362000 2.41010000 0.82498300 1214 34.4320000 0.00000000 8.89297000 4.15719000 2.12566000 0.98494500 1215 78.4177000 14.9306000 7.64856000 24.6263000 13.7138000 1.98889000 1216 86.9384000 13.2161000 13.4880000 30.8869000 16.7255000 3.14381000 1217 93.8033000 32.7164000 7.15137000 38.8993000 24.6817000 3.29653000 1218 100.000000 36.1727000 36.0863000 47.0189000 29.7287000 13.3915000 1219 67.5655000 24.0775000 26.5525000 19.8014000 12.5978000 6.81082000 1220 69.9839000 36.7382000 44.0581000 25.3836000 18.6463000 17.6937000 1221 80.7674000 36.4901000 44.2543000 32.3312000 22.1419000 18.1487000 1222 100.000000 40.6322000 57.7231000 51.4312000 33.1952000 31.3822000 1223 43.0901000 0.00000000 23.5756000 7.23381000 3.63469000 4.61145000 1224 75.8009000 9.27588000 34.1792000 24.1124000 12.7058000 10.2326000 1225 87.0796000 12.7995000 38.7940000 32.9218000 17.5049000 13.4304000 1226 95.4397000 15.8908000 48.3634000 41.4611000 22.1118000 20.9309000 1227 93.2924000 15.2979000 90.0510000 50.1807000 25.3036000 76.8341000 1228 77.1007000 21.8333000 71.3275000 32.7522000 17.9868000 45.9420000 1229 86.9026000 29.6738000 71.7887000 41.1159000 24.0112000 47.3030000 1230 100.000000 33.6316000 79.7429000 55.3677000 32.2058000 60.0172000 1231 79.8030000 34.3349000 48.7475000 31.8738000 21.1357000 21.5710000 1232 80.0971000 38.3300000 57.7124000 34.5916000 23.6711000 30.4198000 1233 79.4459000 39.2244000 64.4704000 35.8115000 24.4522000 38.1462000 1234 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1235 5.41526000 3.96062000 11.6484000 0.51828800 0.40304900 1.25879000 1236 25.8602000 4.95713000 7.92984000 2.51049000 1.48619000 0.82730500 1237 39.6631000 13.7867000 24.9501000 6.90275000 4.35167000 5.27103000 1238 40.9385000 11.5431000 32.3349000 7.74490000 4.48305000 8.53106000 1239 47.6055000 8.97951000 31.2275000 9.67887000 5.27586000 8.02718000 1240 49.6154000 26.0184000 31.7837000 12.1362000 9.00709000 8.89354000 1241 26.2152000 23.1349000 28.0035000 5.01824000 4.77526000 6.68797000 1242 26.7382000 32.4717000 30.0455000 6.80099000 7.92278000 8.12179000 1243 26.0480000 38.9421000 29.5855000 8.05073000 10.6682000 8.37184000 1244 31.3751000 50.9313000 45.7146000 14.4598000 18.9119000 19.5876000 1245 47.3456000 83.0643000 66.2171000 38.4902000 53.8986000 45.8405000 1246 49.9372000 26.4534000 18.5357000 11.3556000 8.81435000 3.82023000 1247 70.4461000 33.0908000 15.5188000 22.3132000 16.2103000 3.92287000 1248 71.3845000 40.4958000 11.7493000 24.4082000 19.7957000 3.76072000 1249 76.2664000 83.7396000 15.1827000 46.6597000 59.5357000 10.9282000 1250 85.5931000 83.6589000 14.9947000 53.2201000 62.8418000 11.1790000 1251 93.2649000 93.0284000 12.6451000 65.8106000 78.9494000 13.1551000 1252 77.0904000 53.6578000 7.05960000 31.9448000 29.6991000 4.62172000 1253 86.2224000 64.3345000 20.5488000 43.3866000 42.0162000 9.12012000 1254 12.8825000 8.55894000 29.0938000 2.14863000 1.38542000 6.66649000 1255 11.0765000 4.96174000 36.9244000 2.65233000 1.34018000 10.7462000 1256 10.0724000 14.6163000 56.3582000 6.10011000 3.56050000 26.6374000 1257 28.3032000 23.3886000 65.4475000 11.2473000 7.36492000 37.3374000 1258 36.1511000 20.6982000 89.6873000 19.7961000 10.4517000 74.8884000 1259 69.6240000 15.0448000 62.1468000 25.1715000 13.3053000 33.8059000 1260 72.0745000 10.8387000 76.8538000 30.0845000 14.9629000 53.5169000 1261 73.0680000 31.5224000 84.7556000 35.6353000 21.2377000 67.2768000 1262 52.7931000 28.1283000 64.6070000 18.9991000 12.4269000 36.8765000 1263 56.7168000 38.2780000 91.9811000 30.8726000 20.6209000 80.6152000 1264 21.2209000 8.35501000 26.3704000 2.82136000 1.74309000 5.53633000 1265 18.2670000 10.4685000 55.8939000 6.46082000 3.33402000 26.1047000 1266 70.7230000 39.9645000 57.4909000 28.8795000 21.3241000 30.0362000 1267 80.7531000 68.2337000 56.6099000 45.6261000 45.4057000 32.8895000 1268 80.3904000 79.6095000 69.4443000 54.4744000 58.8703000 50.1334000 1269 80.3118000 78.9201000 84.6201000 58.4285000 59.7848000 73.2818000 1270 58.8851000 53.1620000 58.4532000 26.7778000 26.1563000 32.0960000 1271 59.9336000 67.1292000 65.1564000 34.5966000 38.7081000 41.7978000 1272 60.6111000 67.7059000 70.5346000 36.5323000 39.9676000 48.8986000 1273 22.7740000 25.0793000 32.2342000 5.11006000 5.17533000 8.75183000 1274 26.9185000 24.4583000 35.2518000 6.01236000 5.47436000 10.3891000 1275 62.4230000 46.9967000 44.6603000 24.0603000 21.9959000 18.8636000 1276 72.4944000 52.2430000 45.6041000 31.5595000 28.4000000 20.4314000 1277 79.0624000 58.0372000 44.9651000 37.9139000 34.9101000 20.8588000 1278 87.6623000 73.0992000 71.7822000 56.7914000 54.4825000 52.3495000 1279 89.8332000 74.0500000 93.9043000 66.1425000 59.2505000 89.9699000 1280 40.2792000 13.1502000 8.33446000 6.25684000 4.03903000 1.17190000 1281 46.5599000 8.52526000 10.2123000 8.03934000 4.54165000 1.43287000 1282 58.6856000 4.55061000 10.1886000 12.8257000 6.77871000 1.60896000 1283 65.8729000 76.0497000 65.0677000 42.2927000 49.6235000 43.3905000 1284 68.2966000 84.1894000 79.9577000 52.5938000 61.8106000 66.2203000 1285 73.3659000 85.1443000 92.9842000 60.6568000 66.3833000 89.8257000 1286 29.1881000 32.6522000 50.9015000 9.98621000 9.30655000 22.3192000 1287 29.3254000 62.2966000 74.8105000 24.6353000 29.9854000 53.6474000 1288 44.3828000 82.9153000 76.7831000 40.1736000 54.3031000 60.4711000 1289 10.7711000 25.5428000 46.5571000 5.67532000 5.36058000 18.1019000 1290 9.13507000 30.6733000 58.9808000 8.63705000 7.88026000 30.0916000 1291 0.00000000 70.1178000 76.8151000 26.0291000 36.1406000 57.7594000 1292 8.84841000 70.1076000 91.6763000 31.2359000 38.2548000 83.4133000 1293 13.2416000 68.8587000 100.000000 34.1456000 38.4462000 100.234000 1294 39.7665000 77.0537000 100.000000 43.3105000 49.7104000 101.925000 1295 25.8982000 51.1166000 65.3034000 17.2089000 19.9903000 39.2828000 1296 44.0105000 51.0281000 64.6728000 21.4930000 22.1711000 38.7056000 1297 46.0651000 59.9500000 67.9891000 26.3473000 29.5867000 44.0492000 1298 48.7099000 46.1310000 51.5442000 18.9037000 18.8222000 24.2669000 1299 53.0197000 57.4185000 52.8197000 24.7176000 27.5950000 26.8324000 1300 76.0697000 91.1465000 57.6779000 56.4879000 71.5272000 38.4664000 1301 83.9122000 91.8379000 62.5772000 63.5052000 75.7676000 44.3417000 1302 18.5955000 24.0151000 5.23513000 2.94798000 4.00753000 1.01136000 1303 14.9037000 25.7886000 17.5374000 3.20206000 4.46831000 3.14849000 1304 11.1045000 35.0051000 28.9939000 5.31522000 7.93326000 7.71868000 1305 10.2093000 57.8417000 55.8861000 15.8582000 23.2109000 29.4384000 1306 11.7449000 80.8075000 74.1706000 31.8179000 48.1265000 55.8363000 1307 30.3426000 82.4790000 73.3109000 35.1789000 51.4315000 55.0571000 1308 37.5637000 74.1389000 70.6017000 31.2512000 42.1910000 49.6971000 1309 44.9582000 75.9361000 88.0613000 39.7631000 47.4556000 77.9852000 1310 29.7058000 29.3662000 56.8334000 10.5737000 8.58506000 27.8593000 1311 29.4105000 31.2134000 77.4959000 15.8892000 11.2341000 54.5273000 1312 27.7693000 58.2186000 76.3974000 23.0750000 26.5883000 55.4379000 1313 26.1639000 84.1890000 54.4199000 31.1564000 51.4796000 32.6343000 1314 39.8709000 84.1228000 60.1102000 35.3900000 53.4680000 38.7160000 1315 13.7931000 31.9006000 0.00000000 3.66676000 6.29667000 1.02217000 1316 17.9310000 43.2481000 0.00000000 6.72022000 11.7871000 1.92104000 1317 18.4912000 52.0820000 10.5561000 9.73696000 17.4096000 3.87941000 1318 36.0840000 86.8316000 34.2858000 32.1184000 54.9061000 18.0145000 1319 44.5134000 91.0316000 48.3832000 39.3654000 62.7705000 28.9059000 1320 42.9380000 52.6733000 28.6888000 16.1432000 20.9032000 9.51553000 1321 77.1821000 54.2341000 27.2211000 33.1941000 30.5421000 9.84466000 1322 88.6039000 55.9794000 31.3261000 42.5713000 36.3052000 12.3313000 1323 33.2564000 40.7658000 11.4894000 8.89897000 11.9035000 3.01092000 1324 36.2453000 49.9742000 11.5085000 12.3275000 17.6793000 3.94822000 1325 37.8676000 57.3841000 14.2804000 15.5370000 23.3070000 5.38246000 1326 48.4032000 87.0851000 29.2411000 35.6221000 57.0231000 15.7087000 1327 64.4813000 86.2271000 39.5896000 43.3037000 59.9991000 21.5995000 1328 74.7265000 95.1830000 47.2423000 56.7548000 76.3176000 29.6595000 1329 26.0130000 48.6839000 9.93550000 9.67344000 15.6929000 3.45828000 1330 30.2883000 63.2894000 24.1770000 16.7514000 27.5571000 8.94393000 1331 28.9659000 69.5397000 33.7616000 20.2823000 33.6971000 14.2594000 1332 11.4849000 25.6845000 90.6598000 16.8832000 9.88338000 76.7576000 1333 13.5199000 40.2223000 93.9310000 21.1400000 16.2265000 84.0895000 1334 9.98752000 20.8996000 47.6773000 5.18584000 4.18068000 18.8099000 1335 9.46979000 27.3294000 65.4532000 9.51700000 7.32417000 37.4277000 1336 36.0280000 38.7618000 83.8733000 20.9695000 16.0120000 65.5249000 1337 45.3832000 40.0202000 93.1446000 27.2842000 19.3525000 82.8202000 1338 11.2736000 0.00000000 25.0336000 1.42023000 0.62580900 4.87269000 1339 0.00000000 8.35732000 24.0179000 1.12290000 0.88743500 4.56241000 1340 7.23444000 5.24934000 23.7109000 1.23489000 0.76231400 4.42106000 1341 15.1372000 16.5374000 29.6203000 2.94415000 2.60741000 7.10096000 1342 36.5246000 40.6101000 29.2018000 10.6851000 12.6464000 8.43920000 1343 40.9599000 45.2768000 37.2199000 14.0047000 16.1599000 13.1874000 1344 46.5342000 45.9771000 40.9599000 16.4720000 17.6859000 15.7626000 1345 53.5002000 47.9403000 45.2618000 20.3302000 20.4972000 19.2313000 1346 54.6713000 46.9608000 50.2177000 21.3015000 20.4569000 23.2682000 1347 73.7197000 46.6421000 83.5805000 39.3504000 28.6792000 66.5027000 1348 81.3601000 13.8115000 26.3959000 27.4921000 14.9565000 6.79700000 1349 89.6090000 34.3167000 27.9536000 36.7487000 23.9331000 8.69176000 1350 100.000000 52.3157000 27.4163000 50.7835000 38.5867000 10.5520000 1351 56.2074000 51.2913000 16.0838000 19.8724000 22.2060000 5.33826000 1352 57.3435000 64.8608000 14.0552000 25.7353000 33.3110000 6.72979000 1353 90.0469000 72.4953000 25.7159000 50.7996000 51.7884000 12.4084000 1354 89.0054000 77.3301000 40.7907000 54.1741000 57.3446000 21.3159000 1355 91.6303000 88.2309000 41.3475000 63.3107000 72.3077000 24.1038000 1356 30.8761000 8.85577000 49.1194000 7.21799000 3.73423000 19.8281000 1357 41.5453000 11.1402000 54.2609000 10.9754000 5.75591000 24.7171000 1358 40.5609000 14.6168000 68.0068000 13.8961000 7.28261000 40.4231000 1359 45.7134000 25.2492000 73.1952000 18.0651000 11.0354000 47.9963000 1360 92.3777000 43.1314000 81.6729000 51.4374000 33.4737000 63.5995000 1361 38.7820000 23.8002000 33.8604000 8.47971000 6.62864000 9.71000000 1362 59.4033000 22.2913000 52.1013000 18.5300000 11.2252000 23.3303000 1363 65.5029000 19.8708000 77.0819000 27.1399000 14.5696000 53.9430000 1364 67.8294000 50.3369000 79.3308000 35.6863000 28.6911000 59.7192000 1365 92.0153000 51.8428000 80.4751000 53.4632000 38.5751000 62.5228000 1366 57.8223000 69.5585000 47.2273000 31.3238000 39.2032000 23.8233000 1367 65.6294000 94.4503000 56.2346000 52.4066000 73.0698000 37.4881000 1368 67.3068000 95.4915000 81.9712000 60.6428000 77.7366000 72.1515000 1369 15.2123000 19.5476000 54.7413000 6.66648000 4.57712000 25.1864000 1370 25.2403000 16.5355000 66.7397000 10.2452000 5.67976000 38.6806000 1371 24.6779000 23.1611000 90.7957000 18.1107000 9.98805000 76.9701000 1372 10.1035000 22.2737000 36.9195000 3.89992000 3.93347000 11.1781000 1373 11.7971000 33.6699000 37.3514000 5.93078000 7.74101000 12.0675000 1374 6.46377000 63.9944000 37.0383000 15.3918000 27.1909000 15.1336000 1375 26.4007000 26.1933000 8.96374000 4.48451000 5.25559000 1.58124000 1376 49.2452000 37.1599000 8.64521000 12.7571000 12.6028000 2.52195000 1377 51.5226000 52.2701000 9.81108000 18.0213000 21.7804000 4.17504000 1378 52.2599000 53.6068000 24.9246000 19.5291000 23.1785000 8.22989000 1379 60.0719000 61.0915000 26.4603000 26.0497000 30.9051000 9.97801000 1380 66.2048000 74.0476000 35.3199000 36.3294000 45.4729000 16.5508000 1381 74.2035000 84.8282000 63.0061000 52.0775000 62.6801000 42.9195000 1382 82.2281000 85.4245000 79.9250000 62.3890000 68.0616000 66.8585000 1383 88.8443000 84.7672000 92.0830000 71.0990000 71.4378000 88.5013000 1384 8.73053000 17.5435000 25.5519000 2.22356000 2.41383000 5.37378000 1385 7.72201000 29.5689000 44.3631000 5.81345000 6.42767000 16.5948000 1386 8.90085000 39.8741000 55.7623000 9.96310000 11.5775000 27.3784000 1387 19.6943000 75.4932000 65.1685000 27.1852000 41.3658000 42.7162000 1388 17.4074000 83.9177000 69.0907000 32.9522000 51.7741000 49.4279000 1389 14.0100000 84.1685000 83.2983000 36.8580000 53.5570000 70.9578000 1390 7.94515000 83.7677000 95.0963000 40.3409000 54.4870000 92.7901000 1391 16.2564000 10.1834000 24.5882000 2.19009000 1.57377000 4.84778000 1392 19.2353000 13.6708000 22.8971000 2.63961000 2.15769000 4.33227000 1393 78.4121000 20.0185000 32.3262000 26.5307000 15.2604000 9.61693000 1394 77.6296000 27.7499000 63.4363000 32.0144000 19.0760000 36.0680000 1395 1.28205000 0.00000000 0.00000000 0.04063560 0.02094880 0.00190234 1396 51.6803000 11.8158000 45.0924000 13.0428000 7.06051000 16.8915000 1397 59.8589000 7.91279000 52.3508000 17.5900000 8.95156000 23.1717000 1398 60.4356000 9.46643000 65.5393000 20.6629000 10.3342000 37.5276000 1399 63.2200000 9.73176000 81.7364000 26.5216000 12.8619000 61.0390000 1400 72.4177000 69.3202000 82.6311000 47.3224000 46.3132000 67.8859000 1401 80.7547000 76.9655000 90.4583000 59.6064000 58.4604000 83.5027000 1402 18.1984000 11.6791000 15.0115000 1.95834000 1.64968000 2.07255000 1403 16.3062000 12.2046000 10.2843000 1.61993000 1.54576000 1.20349000 1404 14.2492000 20.5638000 19.7365000 2.56954000 3.10939000 3.51975000 1405 7.90391000 19.1555000 22.9205000 2.15898000 2.64458000 4.45988000 1406 45.7313000 18.2710000 25.7634000 9.25916000 6.14596000 5.80632000 1407 66.4694000 17.3010000 35.8325000 19.2782000 11.0622000 11.1020000 1408 70.0029000 19.1798000 45.0866000 22.6635000 12.9514000 17.5172000 1409 70.5717000 37.9850000 66.2309000 30.2244000 21.0825000 39.9593000 1410 17.6667000 12.0189000 100.000000 19.6154000 8.74148000 95.2657000 1411 36.3826000 11.7630000 90.4946000 19.3457000 9.00025000 76.1455000 1412 63.1755000 10.8356000 91.1217000 29.7403000 14.2475000 77.7988000 1413 65.3369000 34.3085000 91.5533000 34.0748000 20.9780000 79.6940000 1414 22.9450000 5.92735000 38.0885000 4.11061000 2.12508000 11.5339000 1415 24.3739000 24.7426000 58.5356000 9.22488000 6.77300000 29.3672000 1416 30.1687000 31.1103000 68.3182000 13.5353000 10.2791000 41.4252000 1417 29.9494000 42.3755000 70.3577000 16.5567000 15.5609000 44.9998000 1418 45.8715000 56.7385000 83.3434000 29.3585000 28.7142000 66.6337000 1419 51.8303000 62.3779000 82.7402000 33.7056000 34.4394000 66.4941000 1420 51.6130000 69.4629000 85.0252000 37.7025000 41.3710000 71.5210000 1421 58.1055000 71.0829000 92.1795000 43.8224000 45.4674000 85.1111000 1422 80.0185000 70.8290000 100.000000 59.4079000 52.9551000 101.703000 1423 38.5865000 6.85578000 18.6516000 5.81225000 3.24438000 3.06921000 1424 45.2878000 8.34179000 19.2730000 7.96433000 4.44703000 3.36085000 1425 53.7056000 0.00000000 16.5260000 10.7282000 5.48211000 2.69733000 1426 57.0967000 9.31042000 27.5344000 13.2159000 7.16199000 6.51555000 1427 58.8202000 11.0648000 45.2011000 16.1057000 8.56763000 17.1045000 1428 67.9117000 7.75151000 45.1764000 20.6241000 10.6392000 17.2474000 1429 69.4925000 12.7656000 54.3822000 23.3458000 12.2890000 25.4445000 1430 94.7655000 17.5498000 59.1928000 43.0073000 22.9061000 31.4095000 1431 25.5439000 6.93212000 13.1160000 2.68044000 1.66243000 1.65118000 1432 25.7704000 12.0453000 7.14068000 2.82114000 2.15820000 0.84885300 1433 38.1524000 72.6489000 12.7756000 22.6300000 37.4692000 7.44793000 1434 52.5864000 75.9132000 9.57770000 29.2124000 43.5403000 7.75241000 1435 51.7243000 93.2108000 10.6298000 40.1796000 65.9442000 11.6543000 1436 29.8198000 59.4821000 11.4264000 14.3829000 23.9803000 5.04264000 1437 41.6390000 65.1861000 10.7985000 19.8451000 30.5106000 5.91344000 1438 8.28366000 9.37882000 22.3850000 1.37744000 1.10695000 4.02311000 1439 13.1751000 12.1879000 20.7267000 1.77778000 1.57348000 3.56042000 1440 14.4828000 4.54298000 21.9322000 1.59878000 0.92978500 3.82724000 1441 10.5060000 47.2664000 13.2746000 7.51305000 13.9056000 3.79017000 1442 15.2090000 68.8253000 10.4679000 16.4501000 31.3614000 6.20561000 1443 36.1507000 80.4586000 11.3117000 26.5218000 46.1162000 8.65573000 1444 92.3172000 90.2730000 30.1404000 64.0785000 74.9679000 18.0895000 1445 24.4733000 2.95056000 23.0369000 2.87706000 1.51423000 4.24413000 1446 31.8283000 8.92011000 23.2358000 4.50441000 2.67758000 4.45153000 1447 44.8852000 31.1100000 23.6101000 10.6393000 9.57605000 5.59101000 1448 54.7954000 37.3350000 55.2456000 19.6778000 15.6926000 27.1441000 1449 55.3417000 43.8654000 59.8082000 22.4926000 19.5144000 32.5089000 1450 21.8884000 19.2073000 33.9207000 4.41763000 3.71034000 9.39287000 1451 19.2720000 23.0685000 36.8058000 4.84235000 4.57220000 11.1835000 1452 20.5606000 22.2889000 44.1104000 5.84470000 4.83205000 16.0959000 1453 66.0653000 70.1787000 48.8848000 36.0375000 42.0709000 25.5097000 1454 74.1172000 74.4429000 56.7911000 44.4574000 49.6105000 33.9488000 1455 86.3980000 75.8146000 68.6261000 56.4877000 56.6443000 48.5144000 1456 23.4744000 13.3799000 37.4550000 4.51880000 2.94241000 11.2786000 1457 21.8326000 7.09124000 45.8356000 5.03408000 2.54820000 17.0205000 1458 24.6163000 79.1588000 75.7590000 32.7668000 47.0812000 57.9239000 1459 23.6509000 92.4608000 93.1090000 47.1593000 66.9718000 90.8944000 1460 14.0618000 89.8193000 81.8313000 40.2184000 61.0202000 69.7697000 1461 11.5545000 97.4388000 84.4288000 46.5329000 72.6136000 76.0548000 1462 26.2481000 69.6126000 64.3901000 24.8507000 35.5252000 40.7639000 1463 69.3476000 77.3238000 77.3229000 48.1965000 53.3799000 60.6942000 1464 77.7402000 93.9735000 77.8821000 64.6622000 78.2467000 65.4878000 1465 83.6000000 69.2951000 14.1577000 43.4738000 45.6273000 8.19327000 1466 94.4342000 74.1340000 11.2156000 54.6305000 55.1666000 8.90590000 1467 94.3314000 81.8467000 9.22476000 59.0067000 64.1431000 10.1100000 1468 75.8224000 9.03716000 12.6342000 22.6509000 12.1028000 2.52447000 1469 92.4152000 11.9797000 8.15613000 35.0893000 18.7843000 2.47624000 1470 91.3351000 25.2801000 18.7531000 35.9609000 21.2383000 4.98102000 1471 93.0151000 47.7189000 39.8821000 44.2904000 32.8316000 16.4966000 1472 93.1979000 62.2472000 50.0297000 51.3624000 44.3685000 26.1348000 1473 93.3563000 70.6007000 61.3876000 57.6515000 53.2611000 38.9368000 1474 94.5102000 87.7144000 64.4331000 69.5686000 74.5274000 45.9878000 1475 68.0494000 27.4687000 18.2359000 20.0459000 13.5318000 4.19319000 1476 92.5492000 31.3544000 44.4868000 40.4615000 24.7654000 18.4020000 1477 93.3379000 47.7330000 49.6927000 45.9998000 33.5543000 24.0358000 1478 92.5695000 54.9491000 50.0424000 47.8735000 38.1809000 25.1354000 1479 92.1150000 89.7260000 56.0231000 67.1338000 75.5510000 36.9768000 1480 44.6013000 43.1921000 28.4051000 13.6791000 15.2148000 8.42168000 1481 58.6264000 53.3604000 38.1147000 23.4649000 24.9312000 14.9323000 1482 67.4870000 63.6565000 42.6341000 32.7544000 35.8337000 19.5800000 1483 77.3229000 69.4411000 48.3879000 42.4064000 44.8079000 25.2825000 1484 57.9116000 51.7760000 44.7526000 23.4521000 23.9933000 19.3519000 1485 60.8387000 51.0991000 63.1906000 28.0109000 25.6063000 37.2491000 1486 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1487 6.13008000 10.1266000 4.08710000 0.63020600 0.86098600 0.43190300 1488 38.4588000 43.6064000 6.36233000 10.8451000 14.0503000 2.63947000 1489 58.8278000 43.6868000 9.33759000 18.4703000 18.0068000 3.35666000 1490 65.5802000 68.7000000 25.8981000 32.3335000 39.3661000 11.0550000 1491 74.9721000 72.6739000 30.5890000 40.3198000 46.4809000 14.0549000 1492 89.6720000 78.1803000 90.1397000 66.9718000 63.3201000 83.4536000 1493 96.2745000 84.2795000 92.5870000 77.2602000 74.1206000 89.6699000 1494 36.4860000 24.4445000 44.9849000 9.33696000 7.04255000 17.0008000 1495 40.9878000 25.7789000 52.5261000 12.0009000 8.55972000 23.5537000 1496 55.0920000 28.0963000 49.7300000 17.0096000 11.7344000 21.3837000 1497 54.5066000 34.1078000 59.6337000 19.7244000 14.5696000 31.5083000 1498 36.7581000 17.0951000 32.1987000 7.00143000 4.74776000 8.55179000 1499 40.0053000 18.0123000 41.2150000 9.01015000 5.79646000 14.0357000 1500 56.8512000 41.1035000 67.3202000 24.1182000 19.0482000 41.2694000 1501 76.6512000 58.3304000 77.5236000 43.4871000 37.1402000 58.1160000 1502 51.5285000 16.7800000 23.3468000 11.0812000 6.89100000 4.95760000 1503 66.8941000 13.7425000 28.6263000 18.5073000 10.2961000 7.31590000 1504 76.5458000 7.25226000 66.4558000 29.9837000 14.9585000 39.0735000 1505 92.7163000 10.0940000 79.5166000 45.8483000 22.9343000 58.3682000 1506 46.3651000 17.0524000 39.8682000 10.7657000 6.58361000 13.1875000 1507 45.9103000 30.7411000 41.8608000 12.7380000 10.3476000 15.1669000 1508 47.6128000 35.0290000 48.9995000 15.2402000 12.7728000 21.0483000 1509 74.3608000 50.8250000 50.1053000 32.9498000 28.3101000 24.0712000 1510 52.7865000 33.8589000 35.8069000 15.1844000 12.5890000 11.5973000 1511 55.7271000 39.5399000 49.6577000 19.6157000 16.5563000 22.1151000 1512 62.9054000 41.9122000 56.9572000 24.9525000 20.0572000 29.4440000 1513 66.2048000 57.4988000 59.4073000 32.3233000 31.4158000 33.8487000 1514 31.0287000 23.6357000 48.8714000 8.54174000 6.39836000 20.0616000 1515 32.1763000 36.9866000 63.4589000 14.0201000 12.4604000 35.7661000 1516 32.0578000 38.4743000 74.7484000 17.1960000 14.2831000 50.9174000 1517 22.2154000 28.8821000 52.5378000 8.39373000 7.43100000 23.5368000 1518 34.3654000 36.9676000 92.1532000 23.0100000 16.1080000 80.4904000 1519 7.96712000 12.1527000 35.8354000 2.68984000 1.89398000 10.2082000 1520 9.75497000 7.37208000 44.8070000 3.67916000 1.88468000 16.1677000 1521 11.5005000 4.28143000 51.1631000 4.69560000 2.12812000 21.4481000 1522 10.5451000 7.86620000 65.3944000 7.65303000 3.51557000 36.7179000 1523 56.8671000 64.7385000 90.7231000 39.6202000 38.7503000 81.2510000 1524 83.2840000 68.3111000 93.3232000 57.8598000 50.5714000 87.5859000 1525 67.7711000 29.3993000 36.2830000 21.6608000 14.6732000 11.9367000 1526 74.0150000 41.0558000 36.3917000 27.9071000 21.6122000 13.0111000 1527 72.9628000 41.9524000 43.2717000 28.3505000 22.0900000 17.6204000 1528 72.5312000 59.4962000 51.5611000 35.3064000 34.3245000 26.4103000 1529 93.9983000 66.9699000 70.6363000 58.6000000 50.8120000 49.9670000 1530 93.2028000 84.0903000 72.5624000 68.0613000 69.9347000 55.8319000 1531 94.1703000 96.8704000 83.9595000 81.3936000 89.9422000 76.7573000 1532 5.20862000 13.0007000 10.2704000 0.90670000 1.25890000 1.18365000 1533 10.0736000 31.9004000 76.1645000 13.1485000 10.0571000 52.4193000 1534 7.99173000 32.8836000 89.2909000 17.4158000 12.0552000 74.5872000 1535 92.4706000 42.9395000 90.8499000 54.5642000 34.6495000 79.9124000 1536 47.6174000 52.7222000 45.2193000 19.6422000 22.5129000 19.6239000 1537 50.0670000 64.7735000 47.6542000 25.8208000 32.9296000 23.2526000 1538 55.4982000 90.9072000 57.1164000 45.0358000 65.3811000 37.2987000 1539 19.0346000 48.9293000 31.4689000 10.0057000 15.8337000 10.1668000 1540 25.3608000 59.6328000 41.9611000 16.0496000 24.6513000 17.8232000 1541 34.7371000 66.7805000 59.2054000 24.0909000 33.1946000 34.4057000 1542 54.5251000 34.4502000 25.6416000 15.0960000 12.8331000 6.74195000 1543 58.1475000 45.8966000 24.7591000 19.5284000 19.4131000 7.44059000 1544 66.7473000 59.3136000 27.7717000 28.8587000 31.2348000 10.4390000 1545 81.4989000 68.9510000 30.1564000 42.7874000 44.9002000 13.4154000 1546 93.7174000 80.9088000 33.8137000 59.4231000 63.3177000 17.9428000 1547 97.2061000 84.2589000 57.6112000 68.1879000 70.5665000 37.5945000 1548 36.6828000 30.3574000 21.4372000 7.93325000 7.99391000 4.69757000 1549 39.7946000 35.0997000 33.2690000 10.6672000 10.6761000 10.0587000 1550 42.1050000 39.9063000 32.5887000 12.4008000 13.2311000 10.1054000 1551 47.2719000 40.4491000 42.3365000 15.3903000 14.8437000 16.2311000 1552 68.5349000 56.1383000 53.5742000 31.9580000 30.5725000 27.7407000 1553 70.5379000 84.9173000 68.7465000 51.2519000 62.1833000 50.0178000 1554 78.0474000 93.6027000 69.0371000 62.1713000 76.8308000 52.6534000 1555 35.8203000 48.7321000 48.1035000 15.1427000 18.1453000 21.3346000 1556 37.3561000 50.3607000 60.5170000 18.3789000 20.3389000 33.6700000 1557 46.6922000 54.4222000 61.3766000 22.8602000 24.7449000 35.2533000 1558 64.8768000 55.2023000 84.0129000 37.2641000 31.8938000 67.9694000 1559 65.5599000 54.9596000 92.2160000 40.3892000 33.0409000 82.9640000 1560 67.9567000 91.8788000 94.5071000 62.6770000 74.2798000 94.2518000 1561 24.5916000 36.7088000 32.1927000 7.52554000 9.59373000 9.45653000 1562 39.4770000 39.7756000 44.3379000 13.0085000 13.3318000 17.5294000 1563 50.9397000 52.9602000 57.4557000 23.0879000 24.1702000 30.8540000 1564 81.0732000 67.4945000 84.7585000 52.8426000 47.7399000 71.4905000 1565 80.8535000 72.8959000 84.2912000 55.2933000 53.1197000 71.5938000 1566 44.7647000 29.0518000 35.8026000 11.3143000 9.25680000 11.1555000 1567 58.6094000 37.8594000 35.3653000 18.5623000 15.6386000 11.7546000 1568 58.4413000 92.5078000 94.1603000 58.1060000 72.6205000 93.4821000 1569 79.2634000 95.4559000 93.6374000 72.1075000 83.1406000 93.7386000 1570 86.6511000 82.2832000 75.7196000 62.4418000 65.2254000 59.8036000 1571 90.0048000 84.8084000 82.9566000 68.9223000 70.7186000 72.0041000 1572 90.9497000 95.0378000 88.4589000 78.7735000 86.3208000 84.1566000 1573 71.9839000 32.3665000 28.7161000 23.9287000 16.7355000 8.31293000 1574 76.2698000 32.0028000 35.9160000 27.2741000 18.2747000 12.1216000 1575 76.5051000 49.5191000 54.9931000 34.7736000 28.5058000 28.5718000 1576 79.2433000 73.0987000 75.3339000 51.5435000 51.6642000 57.1869000 1577 12.8003000 9.75662000 14.3026000 1.28631000 1.13769000 1.85886000 1578 5.65335000 11.9988000 12.7575000 0.93512300 1.16312000 1.58010000 1579 9.31241000 5.09228000 9.53579000 0.68283800 0.54609800 0.95081500 1580 13.5223000 3.57506000 6.37802000 0.86979000 0.58387900 0.56743800 1581 53.0635000 10.4542000 15.5261000 10.8020000 6.09589000 2.57877000 1582 62.3010000 23.3189000 39.0351000 18.1372000 11.4446000 13.1943000 1583 72.4302000 26.6969000 42.4719000 24.7286000 15.5096000 15.9635000 1584 90.9946000 29.4868000 49.3620000 39.5758000 23.7231000 22.1905000 1585 31.1131000 20.2770000 30.6336000 5.84663000 4.65849000 7.82048000 1586 32.1974000 23.8722000 37.8181000 7.28207000 5.97538000 11.9422000 1587 32.9787000 42.4886000 50.3670000 12.9882000 14.2574000 22.6416000 1588 35.7750000 62.8043000 62.9070000 23.3137000 29.9820000 38.0075000 1589 38.4435000 6.58493000 8.76460000 5.38574000 3.05226000 1.08200000 1590 39.7295000 18.2769000 6.70370000 6.50444000 4.82748000 1.12330000 1591 49.2648000 23.0911000 7.30952000 10.2212000 7.56884000 1.52211000 1592 58.6218000 23.1895000 8.38926000 14.1922000 9.63215000 1.83982000 1593 79.8137000 33.5456000 9.28761000 28.2236000 19.4170000 3.10829000 1594 91.6663000 41.5660000 6.91720000 39.1072000 27.7989000 3.86138000 1595 10.3151000 80.4482000 61.3607000 28.3383000 46.3709000 39.1208000 1596 9.84262000 92.2069000 95.7107000 46.4844000 66.2331000 95.9765000 1597 9.59687000 65.0068000 67.5626000 21.4548000 30.3775000 43.9080000 1598 55.7943000 65.1608000 73.0180000 33.7503000 36.6593000 51.8629000 1599 55.3181000 76.2056000 85.9844000 43.1779000 49.5249000 74.4846000 1600 55.6239000 81.1460000 86.4955000 46.4133000 55.5222000 76.3768000 1601 30.3499000 43.9359000 91.8288000 23.7651000 19.1411000 80.4110000 1602 28.6044000 61.4615000 94.2793000 30.5429000 31.7525000 87.2824000 1603 28.0742000 69.9512000 93.6768000 34.1978000 39.5778000 87.4057000 1604 31.9497000 88.3270000 95.1189000 46.5303000 62.1915000 93.9967000 1605 17.9945000 3.86999000 17.1034000 1.67599000 0.97107200 2.44432000 1606 18.2051000 9.46303000 17.5013000 1.94169000 1.43578000 2.61997000 1607 16.0570000 19.2635000 23.0756000 2.80113000 2.99145000 4.54642000 1608 31.8103000 22.1635000 27.2105000 5.92878000 5.06774000 6.35992000 1609 40.9321000 22.4463000 28.7523000 8.44089000 6.40125000 7.15036000 1610 47.1284000 19.7579000 61.0547000 14.9014000 8.70971000 32.2122000 1611 51.2526000 18.2280000 70.0110000 18.3976000 10.0289000 43.3665000 1612 49.4824000 33.1456000 70.1154000 19.9571000 14.1180000 44.2143000 1613 57.3869000 31.7978000 74.2450000 24.0827000 15.7277000 50.0979000 1614 26.2227000 8.24895000 33.2664000 4.20711000 2.37922000 8.79625000 1615 36.8408000 47.8908000 35.6573000 13.4691000 17.0797000 12.4679000 1616 40.8845000 56.6657000 35.3701000 17.6402000 23.7973000 13.3807000 1617 60.9981000 77.3399000 57.8264000 38.9388000 49.1751000 35.2339000 1618 69.9503000 92.0665000 62.5489000 54.3873000 71.3150000 43.9297000 1619 12.0471000 27.6192000 5.24428000 2.84874000 4.75095000 1.16089000 1620 7.37885000 31.6256000 16.3512000 3.59307000 6.13356000 3.15630000 1621 18.3809000 79.6426000 33.2866000 24.1768000 44.0094000 15.7901000 1622 30.6534000 88.8381000 49.2030000 34.2273000 57.8044000 28.9136000 1623 36.5802000 87.8767000 82.2668000 42.8246000 60.3416000 70.2227000 1624 42.2799000 94.0543000 92.1410000 52.2614000 71.3975000 89.5975000 1625 8.26723000 45.7607000 45.8467000 9.84137000 14.0932000 19.0042000 1626 12.5555000 75.7325000 49.9116000 23.5395000 40.0390000 26.6617000 1627 8.04608000 85.2761000 56.9360000 30.3527000 52.0645000 35.3155000 1628 62.0017000 52.4300000 9.47573000 22.7694000 24.3124000 4.36560000 1629 65.3859000 64.1053000 10.5367000 29.2557000 34.6263000 6.17119000 1630 73.1480000 65.1776000 14.1424000 34.3687000 37.9789000 7.19360000 1631 78.2370000 73.7988000 9.52177000 41.8761000 48.3247000 8.00036000 1632 82.8132000 91.9123000 9.69514000 56.6135000 73.0039000 12.0127000 1633 90.2371000 63.6741000 36.2038000 47.5955000 43.5889000 16.1046000 1634 100.000000 68.7226000 61.1632000 62.6125000 54.4134000 38.6426000 1635 21.5028000 15.1330000 10.3906000 2.47066000 2.30875000 1.32206000 1636 19.2583000 9.94108000 5.48117000 1.70623000 1.39778000 0.59485800 1637 20.3277000 5.06198000 5.33228000 1.62712000 1.04196000 0.51715300 1638 19.1867000 4.68399000 12.9966000 1.67023000 1.02320000 1.55818000 1639 35.1227000 10.0638000 58.9628000 10.0696000 5.08951000 29.4580000 1640 52.5289000 9.44285000 78.5366000 20.6077000 9.90328000 55.6359000 1641 79.2773000 83.3187000 93.7146000 63.6320000 66.1275000 91.0542000 1642 81.2438000 92.2989000 94.9182000 71.6224000 79.3277000 95.5788000 1643 100.000000 100.000000 100.000000 95.0458000 100.000000 108.906000 1644 63.7225000 61.9372000 66.9822000 34.5473000 35.0986000 43.3861000 1645 63.2482000 66.5137000 75.0133000 38.4905000 39.9842000 55.1463000 1646 10.3360000 27.1489000 31.3735000 4.02533000 5.08836000 8.36008000 1647 8.62217000 25.4602000 36.4399000 4.18876000 4.73104000 11.0310000 1648 7.84511000 38.5070000 62.2149000 10.9021000 11.4120000 34.2711000 1649 11.5671000 56.8969000 61.5021000 16.7303000 22.9750000 35.3774000 1650 32.7599000 66.5432000 83.7404000 30.0082000 35.3269000 68.5496000 1651 9.74452000 17.7657000 69.8317000 9.38999000 5.32179000 42.6916000 1652 8.96266000 21.1583000 79.9241000 12.5426000 7.16488000 57.7295000 1653 28.6185000 26.2001000 83.5129000 16.7467000 10.2097000 64.0138000 1654 40.4037000 29.1059000 92.8359000 23.3070000 13.9113000 81.3764000 1655 45.5729000 48.1517000 92.1613000 29.2833000 23.8398000 81.6677000 1656 29.9319000 56.8267000 61.6358000 19.2174000 24.2131000 35.6374000 1657 34.1323000 68.3582000 73.0876000 28.0321000 35.9827000 52.1333000 1658 64.4959000 74.9554000 85.6052000 46.7582000 50.3412000 73.7870000 1659 80.6159000 89.3749000 85.2322000 65.6178000 73.5231000 76.6154000 1660 81.7152000 95.2903000 86.1485000 71.0377000 82.7097000 79.7118000 1661 58.8449000 65.5513000 58.7156000 31.9167000 36.3771000 34.0795000 1662 63.8563000 77.1306000 70.6552000 43.2179000 50.8596000 50.8124000 1663 91.4430000 80.6426000 80.3169000 66.6406000 65.7209000 66.8132000 1664 94.5292000 89.6151000 92.9753000 79.4738000 80.6011000 91.5612000 1665 38.4389000 31.4702000 64.0273000 14.5609000 11.0261000 36.1393000 1666 39.6611000 32.0455000 73.0178000 17.2612000 12.3197000 48.0335000 1667 66.3987000 52.4548000 72.9943000 33.7981000 29.0049000 50.3494000 1668 67.1503000 63.3849000 73.7344000 38.7789000 38.0268000 52.8887000 1669 32.5712000 60.3196000 31.8118000 16.5863000 25.4877000 11.8542000 1670 43.5249000 70.0647000 33.4488000 24.2569000 36.1453000 14.3542000 1671 27.8346000 90.2382000 15.7226000 31.3059000 58.1458000 11.5897000 1672 74.9005000 91.5888000 17.1412000 51.2268000 69.8463000 13.1371000 1673 79.6644000 92.3963000 51.2739000 58.6280000 74.1152000 32.6010000 1674 72.6507000 72.8654000 45.6150000 40.7574000 46.6514000 23.4782000 1675 96.1756000 73.1415000 50.5287000 59.3596000 56.3716000 28.4705000 1676 99.1759000 93.5284000 50.9548000 75.2117000 83.9124000 33.3307000 1677 29.9055000 42.3738000 26.4762000 9.39752000 12.6953000 7.34718000 1678 28.6956000 47.9712000 34.1943000 11.4883000 16.1139000 11.5639000 1679 31.1855000 55.4381000 36.7834000 14.8580000 21.6476000 13.9384000 1680 39.6077000 62.2887000 53.8855000 22.2802000 29.3245000 28.3077000 1681 34.0819000 55.7897000 44.6264000 16.6592000 22.6569000 19.3556000 1682 33.1255000 55.9793000 89.2082000 27.4138000 27.0486000 76.8010000 1683 10.3624000 19.0198000 38.0999000 3.67913000 3.24638000 11.7801000 1684 20.9011000 15.2534000 91.0476000 16.7959000 8.04580000 77.1427000 1685 78.3676000 26.6679000 92.3716000 40.9168000 22.4217000 81.1877000 1686 24.3919000 14.6851000 28.9315000 3.90331000 2.87338000 6.78791000 1687 32.1872000 9.34113000 29.8794000 5.12056000 2.96792000 7.17596000 1688 39.6976000 6.08474000 34.8852000 7.37217000 3.85717000 9.79818000 1689 51.7418000 18.0245000 33.4542000 12.1335000 7.51276000 9.46928000 1690 61.0357000 25.9256000 44.9223000 18.6636000 12.1687000 17.4507000 1691 62.0595000 32.7473000 50.9701000 21.3089000 15.1699000 22.9162000 1692 83.5002000 32.0719000 61.7796000 36.5504000 22.5892000 34.5756000 1693 83.7408000 35.7809000 79.6774000 42.1581000 26.0703000 59.4245000 1694 86.7653000 34.8663000 90.3049000 47.7806000 28.2700000 78.0093000 1695 38.1947000 15.9168000 20.1240000 6.35546000 4.36273000 3.67664000 1696 46.1035000 21.3484000 21.4151000 9.43182000 6.77269000 4.37573000 1697 62.6365000 38.2252000 19.6368000 19.3372000 16.3136000 5.15560000 1698 87.5590000 41.6639000 16.7160000 36.1231000 26.2614000 5.41492000 1699 93.8943000 50.9532000 18.3256000 44.2213000 34.5753000 7.00496000 1700 95.0506000 51.8400000 34.1013000 46.7419000 36.1858000 13.5298000 1701 35.5267000 17.6074000 52.5732000 9.51605000 5.79598000 23.1950000 1702 37.1181000 21.2045000 64.0791000 12.6524000 7.71795000 35.6641000 1703 38.1263000 52.9271000 74.4452000 22.8876000 23.5818000 51.9689000 1704 41.4034000 66.3109000 74.1284000 29.2861000 35.1240000 53.3988000 1705 44.0851000 79.0702000 79.0204000 38.3692000 49.7805000 63.1579000 1706 55.3716000 84.6739000 84.7139000 47.9486000 59.7097000 73.9818000 1707 36.6752000 38.5338000 58.5521000 14.4083000 13.3190000 30.3751000 1708 46.6691000 45.9325000 69.9572000 22.0593000 19.9049000 45.0074000 1709 58.8504000 60.2677000 92.6892000 39.2850000 35.5746000 84.4299000 1710 5.59814000 12.7079000 20.0477000 1.31338000 1.39107000 3.34620000 1711 12.3791000 13.8739000 18.6583000 1.71953000 1.73472000 2.99533000 1712 8.35553000 14.7758000 17.6406000 1.47196000 1.71780000 2.73552000 1713 5.06513000 22.5288000 29.1025000 2.89332000 3.55321000 7.04954000 1714 64.6343000 39.5474000 30.5726000 21.4906000 17.8066000 9.50464000 1715 92.0214000 38.9583000 38.0871000 40.8034000 27.4577000 14.4893000 1716 59.3603000 59.4872000 35.8876000 25.9188000 29.7357000 14.3888000 1717 63.8596000 79.1801000 41.5198000 38.7642000 51.0063000 21.4052000 1718 42.1526000 93.8539000 28.2713000 38.2551000 65.5501000 16.7831000 1719 58.3720000 94.6912000 26.6346000 44.9974000 69.9763000 16.5917000 1720 27.3070000 33.7896000 8.98498000 5.99373000 8.03182000 2.04040000 1721 32.6467000 32.9279000 7.46679000 6.87453000 8.23255000 1.84482000 1722 39.5535000 33.6599000 7.86369000 8.79221000 9.43838000 2.02341000 1723 17.7303000 15.2696000 6.05154000 1.90433000 2.04563000 0.76276300 1724 16.2636000 11.1806000 4.71997000 1.42708000 1.36240000 0.53672800 1725 11.5590000 6.66695000 5.19907000 0.79509700 0.69892800 0.48297800 1726 17.7979000 19.9416000 8.04693000 2.40734000 2.97403000 1.13376000 1727 25.5842000 18.4770000 10.1837000 3.40306000 3.24876000 1.42339000 1728 71.3295000 47.0480000 11.2472000 26.1952000 23.4448000 4.28646000 1729 71.2992000 70.1803000 62.8234000 41.7204000 44.6919000 39.7787000 1730 74.9890000 81.0859000 69.3830000 51.7251000 58.7907000 50.1812000 1731 41.6202000 46.9903000 55.0770000 17.4208000 18.3696000 27.6126000 1732 43.6943000 55.9564000 57.4831000 21.6172000 25.0520000 31.1303000 1733 53.1767000 57.5277000 68.7593000 28.2448000 29.0822000 44.8577000 1734 60.5967000 60.2546000 84.5920000 37.2799000 34.8602000 69.5368000 1735 78.4024000 72.8845000 92.9222000 56.6049000 53.4380000 87.4197000 1736 33.5887000 31.5734000 40.0444000 9.11530000 8.73572000 13.8060000 1737 38.5581000 29.7068000 39.8041000 10.0127000 8.69884000 13.5929000 1738 88.6122000 29.0416000 57.0510000 38.9510000 23.1268000 29.3958000 1739 52.4598000 9.01725000 38.1117000 12.2674000 6.52860000 11.9685000 1740 51.6141000 9.37328000 58.0566000 15.1291000 7.66369000 28.7187000 1741 57.5900000 11.4267000 72.7404000 21.2574000 10.5989000 47.0976000 1742 81.7626000 11.0855000 77.5498000 36.7369000 18.3906000 54.8929000 1743 88.1050000 8.30035000 93.5607000 46.7360000 22.7041000 83.2595000 1744 66.4093000 26.3299000 69.1746000 26.3263000 15.6542000 42.9158000 1745 79.6171000 47.2317000 72.7391000 40.2116000 29.7623000 49.7958000 1746 81.1482000 46.1534000 80.4009000 43.1748000 30.5482000 61.3958000 1747 84.7794000 46.5193000 94.7461000 50.8927000 34.1194000 87.5994000 1748 21.8770000 45.6776000 49.2151000 11.6527000 14.9296000 21.8379000 1749 40.6941000 75.2076000 51.1041000 28.5324000 42.1520000 27.8642000 1750 41.9028000 88.8684000 55.1008000 38.1781000 59.7523000 34.5302000 1751 93.9503000 97.1615000 60.9944000 75.2424000 87.8235000 44.2354000 1752 92.9602000 96.1050000 74.1539000 76.8058000 87.0366000 60.9519000 1753 7.00478000 12.6917000 29.5920000 2.05912000 1.69460000 6.95844000 1754 7.67865000 3.97731000 29.8486000 1.69871000 0.88777000 6.94063000 1755 91.3556000 3.15767000 56.5452000 38.7250000 19.5108000 28.1890000 1756 90.7174000 18.8540000 70.0291000 42.2136000 22.4011000 44.5240000 1757 91.5265000 39.0261000 71.0312000 46.5960000 29.7535000 47.0753000 1758 90.1777000 47.3904000 71.2131000 47.8367000 33.8132000 48.0441000 1759 91.0392000 71.3435000 74.7033000 59.3858000 54.3457000 56.3611000 1760 96.1955000 79.3749000 82.2305000 70.5673000 66.5351000 69.8957000 1761 38.9448000 46.6791000 29.8254000 13.0859000 16.3939000 9.32296000 1762 56.3761000 71.6679000 40.6680000 30.8237000 40.6657000 19.2436000 1763 56.7209000 88.7628000 46.8772000 42.2633000 61.9125000 27.3463000 1764 7.79277000 18.9064000 9.97522000 1.53192000 2.35080000 1.31787000 1765 13.0426000 15.8972000 7.57142000 1.53251000 1.92970000 0.92209700 1766 9.73654000 18.5176000 3.99029000 1.47751000 2.27721000 0.65346500 1767 41.7224000 20.9725000 15.0500000 7.64127000 5.82083000 2.58674000 1768 76.3924000 21.1859000 54.9987000 28.5254000 16.1166000 26.5152000 1769 88.8966000 43.8812000 60.2477000 43.1631000 30.1666000 33.9612000 1770 92.7993000 54.9547000 61.4191000 50.2537000 39.1590000 36.6405000 1771 92.7389000 59.9568000 77.1797000 56.1804000 44.6847000 58.3752000 1772 19.8306000 25.5392000 21.0979000 3.90205000 4.75191000 4.17711000 1773 19.4757000 28.0565000 69.7744000 11.6151000 8.45755000 43.1026000 1774 16.2900000 47.1343000 77.3400000 17.7780000 18.0030000 55.4949000 1775 12.1563000 58.6566000 77.0116000 21.4102000 25.9717000 56.3389000 1776 9.38739000 64.7929000 74.2490000 23.0912000 30.8730000 53.0793000 1777 11.3238000 74.1427000 83.3250000 30.6573000 41.4603000 68.9945000 1778 17.2616000 35.5206000 49.0061000 8.44359000 9.42550000 20.7659000 1779 17.7130000 59.0289000 52.4346000 16.3618000 24.2555000 26.2684000 1780 32.7182000 82.0464000 65.6368000 33.4676000 50.3712000 44.7009000 1781 30.9723000 93.1131000 73.3644000 42.6095000 66.0752000 57.5688000 1782 9.55017000 24.9731000 20.5259000 2.82814000 4.08079000 3.92820000 1783 9.88841000 29.1723000 20.7818000 3.52331000 5.41604000 4.22722000 1784 11.7706000 70.2768000 54.6583000 21.3838000 34.4741000 30.0994000 1785 22.5219000 69.2922000 78.4903000 27.8155000 36.3836000 60.2948000 1786 74.0848000 8.18643000 18.8569000 21.7658000 11.5536000 3.88857000 1787 93.8792000 8.59480000 19.2334000 36.5686000 19.2120000 4.69242000 1788 72.0156000 12.0158000 24.6475000 21.0541000 11.4645000 5.78477000 1789 92.8942000 7.44104000 28.2567000 36.2878000 18.9172000 7.87924000 1790 92.0816000 61.3456000 26.5855000 47.1940000 41.9666000 11.0493000 1791 78.9282000 59.5446000 39.0232000 37.6362000 35.7693000 16.8544000 1792 80.6562000 62.1610000 67.9571000 45.2464000 40.7320000 45.1630000 1793 82.1332000 66.2710000 78.5814000 51.0732000 46.1798000 61.1029000 1794 67.5250000 57.9512000 64.7570000 34.4113000 32.6226000 40.1448000 1795 75.5030000 64.1975000 65.7531000 42.1310000 40.5358000 42.4903000 1796 80.8631000 83.4664000 66.2235000 56.4095000 63.5177000 46.7610000 1797 21.8455000 26.1285000 28.6605000 4.80485000 5.28468000 7.08575000 1798 20.6021000 32.9632000 33.5925000 6.28397000 7.75969000 9.89967000 1799 17.4468000 50.8576000 47.2050000 12.4128000 17.7932000 20.6689000 1800 17.3181000 66.1556000 46.6716000 18.5067000 30.1343000 22.2989000 1801 13.2837000 76.5778000 92.7274000 35.4369000 45.5736000 86.6372000 1802 8.83673000 95.9900000 93.7301000 48.5061000 71.5780000 92.9339000 1803 35.3042000 31.9086000 16.2030000 7.59399000 8.27665000 3.32412000 1804 48.7904000 30.4424000 16.7647000 11.5012000 9.88472000 3.56352000 1805 67.5033000 51.5859000 15.3445000 25.5995000 25.3125000 5.46800000 1806 68.2003000 92.8886000 28.6935000 48.8869000 69.9629000 17.2617000 1807 27.2499000 51.5189000 19.7890000 11.2408000 17.8507000 5.92370000 1808 30.9125000 75.2996000 28.4216000 23.2465000 39.8346000 12.6770000 1809 31.8698000 76.8166000 45.5742000 26.2933000 42.4544000 23.3983000 1810 39.4114000 76.5382000 65.7371000 31.8963000 44.6585000 43.8055000 1811 52.7911000 84.0594000 74.1758000 43.2651000 57.0710000 56.9670000 1812 54.7772000 91.4244000 75.9004000 49.6220000 67.7750000 61.2417000 1813 9.10150000 14.1702000 46.1340000 4.24159000 2.75386000 17.3369000 1814 9.76187000 8.97032000 84.0396000 12.8781000 5.68376000 64.2412000 1815 11.7155000 6.82073000 93.3591000 16.1807000 6.86453000 81.4162000 1816 54.3082000 8.96115000 93.6480000 26.4155000 12.2722000 82.4883000 1817 35.8897000 7.45095000 44.7595000 7.64378000 3.93458000 16.3185000 1818 42.8882000 37.1352000 51.0545000 14.4581000 13.0212000 22.9384000 1819 41.8392000 41.8094000 50.0969000 15.1232000 15.0940000 22.4523000 1820 59.7968000 82.3415000 54.2568000 40.6898000 54.6462000 32.5841000 1821 59.5178000 83.3240000 79.1246000 47.1997000 58.2321000 64.4886000 1822 60.3211000 91.1157000 83.5318000 54.2540000 69.5643000 73.5262000 1823 22.2532000 36.3446000 42.5341000 8.29020000 9.72762000 15.7579000 1824 21.1140000 35.9432000 61.8945000 11.4667000 10.8375000 33.7600000 1825 61.0415000 42.4558000 84.3693000 31.3173000 22.7281000 67.1258000 1826 73.1485000 52.1955000 91.8185000 43.6493000 33.2566000 82.0677000 1827 91.1913000 67.1245000 90.9864000 62.6133000 52.2621000 83.1467000 1828 17.3075000 4.60144000 28.5926000 2.37273000 1.27529000 6.40992000 1829 13.1143000 44.5278000 55.9607000 11.5423000 14.2373000 28.0086000 1830 8.54835000 48.6127000 73.7868000 16.6232000 18.2123000 50.3073000 1831 9.75222000 51.1610000 92.4009000 23.5266000 22.3279000 82.1430000 1832 44.1521000 56.6382000 91.6558000 31.6056000 29.4845000 81.6621000 1833 40.3808000 48.7680000 77.2652000 22.9230000 21.4194000 55.7683000 1834 45.3678000 69.0616000 90.9667000 37.2667000 40.6091000 82.1959000 1835 48.1153000 75.5680000 92.8342000 42.3727000 48.2939000 87.0050000 1836 26.4329000 27.0651000 22.1512000 5.19686000 5.75571000 4.64117000 1837 33.2079000 40.6161000 19.2486000 9.18010000 11.9531000 4.73878000 1838 49.5582000 46.3907000 21.0776000 15.8319000 17.7547000 6.05201000 1839 78.1454000 48.6277000 18.6615000 31.3565000 26.8046000 6.27355000 1840 86.5926000 53.0129000 16.4333000 38.8652000 32.8877000 6.48133000 1841 28.9440000 12.8073000 12.9647000 3.61862000 2.62694000 1.75940000 1842 33.1014000 7.86496000 13.2572000 4.23011000 2.52088000 1.76233000 1843 38.0452000 6.81206000 24.3917000 6.01239000 3.30453000 4.90787000 1844 58.9727000 12.4512000 58.3778000 18.5715000 9.70581000 29.2731000 1845 68.4338000 16.2080000 69.1215000 26.2347000 13.8105000 42.4949000 1846 70.3882000 64.7847000 91.6860000 47.0161000 42.5544000 83.4304000 1847 70.9120000 76.6820000 92.1630000 53.6467000 55.0743000 86.4160000 1848 15.6639000 42.5762000 32.6964000 7.87116000 11.9261000 10.1479000 1849 12.6990000 60.8078000 48.2331000 15.9128000 25.2055000 22.7646000 1850 81.8908000 60.3594000 52.9461000 42.1582000 38.3623000 28.1103000 1851 83.0130000 65.0166000 65.3585000 47.6005000 43.9243000 42.3686000 1852 28.2776000 20.6665000 21.5986000 4.63075000 4.17683000 4.18588000 1853 46.8274000 17.6593000 77.4941000 18.7518000 9.88996000 54.1143000 1854 67.3401000 23.7594000 91.9284000 33.5084000 17.9965000 79.8686000 1855 51.4050000 19.9313000 90.9544000 25.1047000 13.0073000 77.4856000 1856 50.6097000 29.1888000 89.6061000 25.6114000 15.2561000 75.3581000 1857 59.3335000 47.8144000 92.0479000 34.7232000 26.4916000 81.6747000 1858 69.6432000 31.6661000 57.1697000 26.3604000 17.3325000 29.0635000 1859 63.2254000 28.7043000 79.8401000 27.9884000 16.7320000 58.6282000 1860 66.5182000 37.7043000 81.4635000 32.0434000 21.4373000 61.9541000 1861 71.7449000 63.7870000 82.2482000 44.1503000 40.7735000 66.3447000 1862 72.3227000 92.3948000 83.8545000 61.8639000 74.8536000 74.6954000 1863 18.6218000 27.1198000 26.2093000 4.34034000 5.29455000 6.07755000 1864 18.4647000 28.6711000 34.3585000 5.31155000 6.08474000 10.0440000 1865 18.1468000 79.0218000 45.4790000 25.2932000 43.8572000 23.6473000 1866 19.1271000 93.9282000 48.2692000 35.8521000 64.1157000 29.2547000 1867 7.24653000 48.8004000 32.9280000 9.11973000 15.2986000 10.8528000 1868 21.6759000 61.1093000 33.1846000 15.0738000 25.1890000 12.5836000 1869 31.8421000 64.2683000 40.5961000 19.1382000 29.2573000 17.6084000 1870 39.6063000 64.3155000 48.3437000 22.2341000 30.7562000 23.5959000 1871 46.3830000 65.1307000 62.1403000 27.3699000 33.6580000 37.6110000 1872 55.1036000 68.9763000 63.3686000 32.8892000 39.2215000 39.8304000 1873 22.3362000 17.2539000 16.0791000 2.98573000 2.83006000 2.48710000 1874 62.0647000 15.6861000 14.6677000 15.2510000 8.94941000 2.70776000 1875 62.2883000 10.7132000 18.7049000 15.1913000 8.36325000 3.57747000 1876 89.2702000 34.4634000 16.9734000 35.8002000 23.5713000 4.97587000 1877 88.5286000 48.8547000 24.7270000 39.4624000 31.0482000 8.62418000 1878 83.6431000 46.1164000 35.4497000 35.8167000 27.7965000 13.2398000 1879 83.6292000 52.6797000 70.3005000 44.2474000 34.5917000 47.1363000 1880 85.1500000 56.6288000 79.5833000 49.4597000 39.1500000 61.4143000 1881 85.9982000 58.4064000 87.2819000 53.2991000 41.8853000 74.7870000 1882 94.9057000 58.8160000 90.2562000 61.8270000 46.4078000 80.6787000 1883 59.6899000 9.62858000 33.5928000 14.9920000 8.03859000 9.49478000 1884 74.3726000 11.0215000 40.6153000 24.0414000 12.7279000 14.1726000 1885 83.6245000 6.60294000 64.1824000 34.3786000 17.2466000 36.4828000 1886 95.0239000 8.86180000 67.9689000 44.5959000 22.5587000 41.7048000 1887 22.7178000 26.6070000 15.9818000 4.19444000 5.17152000 2.85307000 1888 27.7570000 32.4613000 15.3725000 6.02794000 7.63170000 3.09273000 1889 54.1538000 31.1844000 10.7489000 13.5327000 11.1601000 2.50297000 1890 59.4123000 33.7222000 3.52573000 16.2312000 13.3010000 1.96955000 1891 90.0977000 50.4268000 7.13100000 40.4574000 32.4173000 4.70522000 1892 91.3020000 65.1066000 9.87571000 47.3608000 44.6442000 7.05178000 1893 55.7748000 15.7304000 8.76301000 12.1045000 7.35536000 1.55834000 1894 64.4296000 12.3121000 6.32989000 15.9656000 8.96299000 1.38435000 1895 87.9619000 9.44633000 44.7910000 34.2115000 17.7722000 17.6134000 1896 86.7079000 76.4119000 58.2728000 54.7228000 56.5089000 36.2904000 1897 88.9212000 89.3370000 64.7338000 66.0852000 74.3912000 46.5096000 1898 14.5675000 30.7001000 14.2668000 3.83669000 6.01500000 2.65849000 1899 9.20632000 33.4203000 9.72162000 3.80303000 6.78866000 2.01813000 1900 15.1653000 81.5507000 12.5114000 23.6269000 45.6182000 8.92004000 1901 12.4619000 92.5283000 37.0172000 32.6051000 61.0795000 20.7549000 1902 13.9339000 92.7035000 58.3810000 36.2330000 62.7511000 38.5846000 1903 11.0645000 83.0005000 41.4320000 26.5226000 48.1959000 21.4468000 1904 30.1775000 92.0409000 41.4677000 35.2668000 61.8590000 23.6482000 1905 64.3624000 95.3992000 68.5505000 55.1819000 75.2547000 52.0761000 1906 89.9603000 95.5155000 93.5205000 80.1593000 87.3642000 93.9001000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 100.0000 108.9060 1 0.000000 46.30660 100.0000 24.53780 20.19710 97.21750 2 100.0000 0.000000 76.43500 51.07860 25.19590 53.75030 3 0.000000 0.000000 55.41690 4.831040 1.932540 25.44110 4 100.0000 64.42970 0.000000 54.56610 47.91680 6.373650 5 0.000000 34.08240 0.000000 3.400610 6.801720 1.133680 6 78.98890 0.000000 0.000000 24.20010 12.47580 1.132910 7 5.026730 4.490490 3.592540 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 100.000 108.906 1 0.00000 100.000 100.000 53.8073 78.7404 106.975 2 100.000 0.00000 100.000 59.2885 28.4801 96.9852 3 0.00000 0.00000 100.000 18.0500 7.22046 95.0546 4 100.000 100.000 0.00000 76.9958 92.7795 13.8511 5 0.00000 100.000 0.00000 35.7573 71.5199 11.9206 6 100.000 0.00000 0.00000 41.2385 21.2596 1.93056 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.3442 21.4046 23.3108 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s37-g109-m10-b10-f0.ti1000644 000765 000000 00000341534 12237536424 022122 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "10" CREATED "Sat Oct 19 04:41:32 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "109" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "10" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "37" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1906 BEGIN_DATA 1 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 2 66.66670 55.55560 22.22220 27.66380 28.80500 8.753170 3 77.77780 55.55560 22.22220 34.39540 32.27580 9.068600 4 11.11110 11.11110 0.000000 1.902210 2.087030 1.162310 5 0.925926 0.925926 0.925926 1.067440 1.070950 1.077290 6 11.11110 11.11110 11.11110 2.113710 2.171620 2.276280 7 14.81480 14.81480 14.81480 2.805360 2.899240 3.068910 8 22.22220 11.11110 22.22220 3.793810 2.978720 5.025140 9 22.22220 0.000000 33.33330 4.275260 2.500960 9.628240 10 11.11110 0.000000 11.11110 1.694700 1.333730 2.136610 11 5.555560 0.000000 0.000000 1.181870 1.093770 1.008520 12 8.333330 0.000000 0.000000 1.311460 1.160590 1.014590 13 13.88890 0.000000 0.000000 1.700330 1.361090 1.032820 14 16.66670 0.000000 0.000000 1.965730 1.497930 1.045250 15 19.44440 0.000000 0.000000 2.282070 1.661040 1.060080 16 22.22220 0.000000 0.000000 2.651820 1.851680 1.077400 17 22.22220 11.11110 11.11110 3.282320 2.774160 2.331040 18 27.77780 0.000000 0.000000 3.560620 2.320270 1.119990 19 30.55560 0.000000 0.000000 4.103910 2.600380 1.145440 20 36.11110 0.000000 0.000000 5.378020 3.257320 1.205150 21 38.88890 0.000000 0.000000 6.112500 3.636020 1.239560 22 41.66670 0.000000 0.000000 6.914250 4.049410 1.277130 23 44.44440 11.11110 11.11110 8.415420 5.420800 2.571570 24 44.44440 0.000000 0.000000 7.784920 4.498330 1.317930 25 52.77780 0.000000 0.000000 10.82610 6.066380 1.460440 26 55.55560 11.11110 0.000000 12.40690 7.503300 1.654540 27 55.55560 11.11110 11.11110 12.61840 7.587890 2.768520 28 55.55560 0.000000 0.000000 11.98790 6.665410 1.514880 29 55.55560 0.000000 11.11110 12.19940 6.750000 2.628850 30 66.66670 11.11110 0.000000 17.83180 10.30040 1.908750 31 66.66670 11.11110 11.11110 18.04330 10.38500 3.022720 32 66.66670 0.000000 0.000000 17.41280 9.462500 1.769080 33 66.66670 0.000000 11.11110 17.62430 9.547090 2.883050 34 77.77780 11.11110 0.000000 24.56340 13.77120 2.224170 35 77.77780 11.11110 11.11110 24.77490 13.85580 3.338150 36 77.77780 0.000000 0.000000 24.14440 12.93330 2.084500 37 77.77780 0.000000 11.11110 24.35590 13.01790 3.198480 38 88.88890 11.11110 0.000000 32.67870 17.95550 2.604450 39 88.88890 11.11110 11.11110 32.89020 18.04010 3.718420 40 88.88890 0.000000 0.000000 32.25970 17.11760 2.464780 41 88.88890 0.000000 11.11110 32.47120 17.20220 3.578750 42 100.0000 22.22220 22.22220 43.98550 25.20560 7.198750 43 100.0000 33.33330 22.22220 45.76940 28.77300 7.793400 44 100.0000 44.44440 22.22220 48.43660 34.10650 8.682460 45 100.0000 55.55560 22.22220 52.08120 41.39470 9.897320 46 11.11110 0.000000 0.000000 1.483210 1.249140 1.022640 47 0.000000 5.555560 0.000000 1.157710 1.315370 1.052570 48 0.000000 8.333330 0.000000 1.270080 1.540080 1.090030 49 0.000000 13.88890 0.000000 1.607280 2.214390 1.202430 50 0.000000 16.66670 0.000000 1.837420 2.674600 1.279140 51 0.000000 19.44440 0.000000 2.111730 3.223140 1.370580 52 0.000000 22.22220 0.000000 2.432350 3.864300 1.477450 53 0.000000 22.22220 11.11110 2.643840 3.948880 2.591430 54 0.000000 25.00000 0.000000 2.801280 4.602050 1.600430 55 0.000000 33.33330 11.11110 4.427770 7.516230 3.186070 56 0.000000 33.33330 0.000000 4.216270 7.431640 2.072100 57 0.000000 36.11110 0.000000 4.796330 8.591590 2.265450 58 0.000000 38.88890 0.000000 5.433220 9.865210 2.477750 59 0.000000 44.44440 11.11110 7.094920 12.84980 4.075130 60 0.000000 44.44440 0.000000 6.883430 12.76520 2.961160 61 0.000000 50.00000 0.000000 8.578170 16.15420 3.526080 62 0.000000 52.77780 0.000000 9.520570 18.03870 3.840210 63 0.000000 55.55560 11.11110 10.73950 20.13790 5.290000 64 0.000000 55.55560 0.000000 10.52800 20.05330 4.176030 65 0.000000 63.88890 0.000000 13.95260 26.90160 5.317570 66 0.000000 66.66670 11.11110 15.44360 29.54480 6.858050 67 11.11110 66.66670 11.11110 15.92680 29.79400 6.880690 68 0.000000 66.66670 0.000000 15.23210 29.46020 5.744080 69 11.11110 66.66670 0.000000 15.71530 29.70940 5.766720 70 0.000000 77.77780 0.000000 21.06930 41.13290 7.689810 71 0.000000 77.77780 11.11110 21.28070 41.21750 8.803780 72 0.000000 80.55560 0.000000 22.71350 44.42100 8.237910 73 0.000000 83.33330 0.000000 24.43380 47.86110 8.811350 74 0.000000 86.11110 0.000000 26.23110 51.45520 9.410450 75 0.000000 88.88890 11.11110 28.31790 55.28970 11.14950 76 0.000000 88.88890 0.000000 28.10640 55.20520 10.03550 77 0.000000 91.66670 0.000000 30.06050 59.11280 10.68690 78 0.000000 94.44440 0.000000 32.09440 63.18010 11.36490 79 0.000000 97.22220 0.000000 34.20900 67.40870 12.06980 80 0.000000 100.0000 0.000000 36.40520 71.80050 12.80180 81 0.000000 11.11110 0.000000 1.419000 1.837890 1.139670 82 0.000000 0.000000 2.777780 1.038420 1.015370 1.202380 83 0.000000 0.000000 5.555560 1.079600 1.031840 1.419290 84 0.000000 0.000000 8.333330 1.136320 1.054520 1.718030 85 0.000000 0.000000 13.88890 1.306530 1.122590 2.614520 86 0.000000 0.000000 16.66670 1.422690 1.169050 3.226370 87 0.000000 0.000000 19.44440 1.561150 1.224430 3.955660 88 0.000000 0.000000 22.22220 1.722990 1.289150 4.808070 89 0.000000 0.000000 25.00000 1.909210 1.363630 5.788910 90 0.000000 0.000000 27.77780 2.120770 1.448240 6.903200 91 0.000000 0.000000 30.55560 2.358560 1.543340 8.155680 92 0.000000 0.000000 33.33330 2.623440 1.649270 9.550840 93 0.000000 0.000000 36.11110 2.916230 1.766370 11.09300 94 0.000000 0.000000 38.88890 3.237710 1.894940 12.78620 95 0.000000 0.000000 41.66670 3.588630 2.035290 14.63460 96 0.000000 0.000000 44.44440 3.969720 2.187700 16.64180 97 5.555560 5.555560 50.00000 5.164730 2.938970 21.20860 98 0.000000 0.000000 50.00000 4.825150 2.529820 21.14750 99 0.000000 0.000000 52.77780 5.300830 2.720060 23.65290 100 0.000000 0.000000 55.55560 5.809350 2.923430 26.33130 101 0.000000 0.000000 58.33330 6.351300 3.140180 29.18590 102 0.000000 0.000000 61.11110 6.927310 3.370550 32.21970 103 0.000000 0.000000 63.88890 7.537950 3.614770 35.43600 104 0.000000 0.000000 66.66670 8.183790 3.873060 38.83780 105 0.000000 0.000000 69.44440 8.865390 4.145660 42.42780 106 0.000000 0.000000 72.22220 9.583300 4.432780 46.20910 107 0.000000 0.000000 75.00000 10.33800 4.734630 50.18440 108 0.000000 0.000000 77.77780 11.13010 5.051420 54.35650 109 0.000000 0.000000 80.55560 11.96010 5.383350 58.72800 110 0.000000 0.000000 83.33330 12.82850 5.730630 63.30170 111 0.000000 0.000000 86.11110 13.73570 6.093460 68.08000 112 0.000000 0.000000 88.88890 14.68220 6.472010 73.06550 113 0.000000 0.000000 91.66670 15.66850 6.866490 78.26070 114 0.000000 0.000000 94.44440 16.69520 7.277080 83.66810 115 0.000000 0.000000 97.22220 17.76260 7.703960 89.29010 116 0.000000 0.000000 100.0000 18.87110 8.147310 95.12900 117 0.000000 0.000000 47.22220 4.381660 2.352450 18.81160 118 0.000000 0.000000 11.11110 1.211500 1.084590 2.113970 119 0.000000 11.11110 11.11110 1.630500 1.922480 2.253640 120 1.851850 1.851850 1.851850 1.134880 1.141900 1.154580 121 2.777780 2.777780 2.777780 1.202330 1.212850 1.231860 122 3.703700 3.703700 3.703700 1.269770 1.283800 1.309150 123 4.629630 4.629630 4.629630 1.339810 1.357480 1.389420 124 5.555560 5.555560 5.555560 1.419190 1.440980 1.480380 125 6.481480 6.481480 6.481480 1.508440 1.534880 1.582660 126 0.000000 2.777780 0.000000 1.076120 1.152220 1.025370 127 7.407410 7.407410 7.407410 1.607890 1.639500 1.696630 128 12.96300 12.96300 12.96300 2.435280 2.509920 2.644800 129 8.333330 8.333330 8.333330 1.717860 1.755190 1.822650 130 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 131 9.259260 9.259260 9.259260 1.838630 1.882230 1.961050 132 10.18520 10.18520 10.18520 1.970480 2.020950 2.112160 133 13.88890 13.88890 13.88890 2.614140 2.698070 2.849770 134 15.74070 15.74070 15.74070 3.009190 3.113670 3.302490 135 17.59260 17.59260 17.59260 3.455550 3.583230 3.814000 136 18.51850 18.51850 18.51850 3.698510 3.838840 4.092440 137 19.44440 19.44440 19.44440 3.954950 4.108610 4.386320 138 20.37040 20.37040 20.37040 4.225080 4.392780 4.695870 139 21.29630 21.29630 21.29630 4.509080 4.691550 5.021330 140 22.22220 22.22220 22.22220 4.807160 5.005130 5.362920 141 23.14810 23.14810 23.14810 5.119510 5.333720 5.720870 142 24.07410 24.07410 24.07410 5.446320 5.677520 6.095380 143 25.00000 25.00000 25.00000 5.787770 6.036730 6.486680 144 25.92590 25.92590 25.92590 6.144050 6.411540 6.894970 145 26.85190 26.85190 26.85190 6.515330 6.802130 7.320450 146 27.77780 27.77780 27.77780 6.901790 7.208690 7.763330 147 28.70370 28.70370 28.70370 7.303610 7.631390 8.223800 148 29.62960 29.62960 29.62960 7.720940 8.070430 8.702060 149 30.55560 30.55560 30.55560 8.153970 8.525970 9.198290 150 31.48150 31.48150 31.48150 8.602840 8.998190 9.712700 151 32.40740 32.40740 32.40740 9.067730 9.487250 10.24540 152 33.33330 33.33330 33.33330 9.548790 9.993330 10.79670 153 34.25930 34.25930 34.25930 10.04620 10.51660 11.36670 154 35.18520 35.18520 35.18520 10.56010 11.05720 11.95560 155 36.11110 36.11110 36.11110 11.09060 11.61530 12.56360 156 37.03700 37.03700 37.03700 11.63790 12.19100 13.19080 157 37.96300 37.96300 37.96300 12.20210 12.78460 13.83740 158 38.88890 38.88890 38.88890 12.78340 13.39620 14.50360 159 39.81480 39.81480 39.81480 13.38200 14.02580 15.18950 160 40.74070 40.74070 40.74070 13.99790 14.67380 15.89530 161 41.66670 41.66670 41.66670 14.63130 15.34020 16.62120 162 42.59260 42.59260 42.59260 15.28240 16.02510 17.36730 163 43.51850 43.51850 43.51850 15.95130 16.72870 18.13380 164 44.44440 44.44440 44.44440 16.63810 17.45120 18.92090 165 45.37040 45.37040 45.37040 17.34290 18.19270 19.72860 166 46.29630 46.29630 46.29630 18.06600 18.95340 20.55720 167 47.22220 47.22220 47.22220 18.80730 19.73330 21.40680 168 48.14810 48.14810 48.14810 19.56710 20.53260 22.27750 169 49.07410 49.07410 49.07410 20.34550 21.35150 23.16960 170 50.00000 50.00000 50.00000 21.14270 22.19010 24.08310 171 50.92590 50.92590 50.92590 21.95860 23.04850 25.01810 172 51.85190 51.85190 51.85190 22.79350 23.92680 25.97490 173 52.77780 52.77780 52.77780 23.64750 24.82520 26.95360 174 53.70370 53.70370 53.70370 24.52070 25.74380 27.95430 175 54.62960 54.62960 54.62960 25.41330 26.68280 28.97710 176 55.55560 55.55560 55.55560 26.32530 27.64220 30.02220 177 56.48150 56.48150 56.48150 27.25680 28.62220 31.08980 178 57.40740 57.40740 57.40740 28.20810 29.62290 32.17990 179 58.33330 58.33330 58.33330 29.17910 30.64440 33.29270 180 59.25930 59.25930 59.25930 30.17010 31.68700 34.42830 181 60.18520 60.18520 60.18520 31.18110 32.75050 35.58690 182 61.11110 61.11110 61.11110 32.21230 33.83530 36.76860 183 62.03700 62.03700 62.03700 33.26370 34.94140 37.97350 184 62.96300 62.96300 62.96300 34.33550 36.06900 39.20180 185 63.88890 63.88890 63.88890 35.42780 37.21810 40.45350 186 64.81480 64.81480 64.81480 36.54070 38.38880 41.72890 187 65.74070 65.74070 65.74070 37.67430 39.58140 43.02800 188 66.66670 66.66670 66.66670 38.82870 40.79580 44.35090 189 67.59260 67.59260 67.59260 40.00410 42.03230 45.69780 190 68.51850 68.51850 68.51850 41.20040 43.29080 47.06880 191 69.44440 69.44440 69.44440 42.41790 44.57160 48.46410 192 70.37040 70.37040 70.37040 43.65670 45.87480 49.88360 193 71.29630 71.29630 71.29630 44.91680 47.20040 51.32770 194 72.22220 72.22220 72.22220 46.19830 48.54860 52.79630 195 73.14810 73.14810 73.14810 47.50140 49.91950 54.28960 196 74.07410 74.07410 74.07410 48.82620 51.31310 55.80780 197 75.00000 75.00000 75.00000 50.17270 52.72960 57.35080 198 75.92590 75.92590 75.92590 51.54100 54.16920 58.91900 199 76.85190 76.85190 76.85190 52.93140 55.63180 60.51220 200 77.77780 77.77780 77.77780 54.34380 57.11760 62.13080 201 78.70370 78.70370 78.70370 55.77830 58.62680 63.77480 202 79.62960 79.62960 79.62960 57.23510 60.15930 65.44420 203 80.55560 80.55560 80.55560 58.71420 61.71540 67.13930 204 81.48150 81.48150 81.48150 60.21590 63.29510 68.86010 205 82.40740 82.40740 82.40740 61.74000 64.89850 70.60670 206 83.33330 83.33330 83.33330 63.28680 66.52570 72.37930 207 84.25930 84.25930 84.25930 64.85630 68.17680 74.17800 208 85.18520 85.18520 85.18520 66.44870 69.85200 76.00280 209 86.11110 86.11110 86.11110 68.06400 71.55130 77.85390 210 87.03700 87.03700 87.03700 69.70230 73.27480 79.73130 211 87.96300 87.96300 87.96300 71.36370 75.02260 81.63530 212 88.88890 88.88890 88.88890 73.04830 76.79480 83.56580 213 89.81480 89.81480 89.81480 74.75620 78.59150 85.52310 214 90.74070 90.74070 90.74070 76.48750 80.41290 87.50710 215 91.66670 91.66670 91.66670 78.24230 82.25890 89.51800 216 92.59260 92.59260 92.59260 80.02060 84.12970 91.55600 217 93.51850 93.51850 93.51850 81.82260 86.02540 93.62100 218 94.44440 94.44440 94.44440 83.64840 87.94610 95.71330 219 95.37040 95.37040 95.37040 85.49800 89.89190 97.83290 220 96.29630 96.29630 96.29630 87.37150 91.86280 99.97990 221 97.22220 97.22220 97.22220 89.26900 93.85900 102.1540 222 98.14810 98.14810 98.14810 91.19060 95.88050 104.3570 223 16.66670 16.66670 16.66670 3.225840 3.341590 3.550770 224 12.03700 12.03700 12.03700 2.268550 2.334520 2.453730 225 25.00000 0.000000 0.000000 3.077280 2.071050 1.097340 226 58.33330 0.000000 0.000000 13.22610 7.303840 1.572900 227 61.11110 0.000000 0.000000 14.54210 7.982370 1.634560 228 63.88890 0.000000 0.000000 15.93730 8.701700 1.699930 229 83.33330 0.000000 0.000000 28.02450 14.93390 2.266320 230 86.11110 0.000000 0.000000 30.09720 16.00260 2.363440 231 100.0000 0.000000 11.11110 42.04170 22.13680 4.027200 232 100.0000 11.11110 11.11110 42.46070 22.97460 4.166870 233 100.0000 11.11110 0.000000 42.24920 22.89010 3.052900 234 100.0000 0.000000 0.000000 41.83020 22.05220 2.913230 235 55.55560 22.22220 0.000000 13.42030 9.529710 1.992330 236 55.55560 22.22220 11.11110 13.63180 9.614290 3.106300 237 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 238 77.77780 22.22220 11.11110 25.78820 15.88220 3.675930 239 77.77780 22.22220 0.000000 25.57670 15.79760 2.561960 240 100.0000 22.22220 11.11110 43.47400 25.00100 4.504660 241 100.0000 22.22220 0.000000 43.26250 24.91650 3.390680 242 100.0000 33.33330 0.000000 45.04640 28.48380 3.985330 243 33.33330 33.33330 11.11110 8.136850 9.428640 3.359870 244 33.33330 33.33330 0.000000 7.925350 9.344060 2.245900 245 55.55560 33.33330 11.11110 15.41570 13.18160 3.700950 246 55.55560 33.33330 0.000000 15.20420 13.09710 2.586970 247 77.77780 33.33330 11.11110 27.57210 19.44950 4.270580 248 77.77780 33.33330 0.000000 27.36060 19.36490 3.156600 249 100.0000 33.33330 11.11110 45.25790 28.56840 5.099300 250 33.33330 22.22220 11.11110 6.352930 5.861300 2.765230 251 33.33330 22.22220 0.000000 6.141430 5.776710 1.651250 252 33.33330 44.44440 11.11110 10.80400 14.76220 4.248930 253 33.33330 44.44440 0.000000 10.59250 14.67760 3.134960 254 55.55560 44.44440 11.11110 18.08290 18.51520 4.590010 255 55.55560 44.44440 0.000000 17.87140 18.43060 3.476030 256 77.77780 44.44440 11.11110 30.23930 24.78310 5.159640 257 77.77780 44.44440 0.000000 30.02780 24.69850 4.045660 258 100.0000 44.44440 11.11110 47.92510 33.90200 5.988360 259 100.0000 44.44440 0.000000 47.71360 33.81740 4.874390 260 100.0000 66.66670 22.22220 56.78530 50.80160 11.46540 261 33.33330 55.55560 11.11110 14.44860 22.05030 5.463800 262 33.33330 55.55560 0.000000 14.23710 21.96570 4.349830 263 55.55560 55.55560 11.11110 21.72740 25.80330 5.804870 264 55.55560 55.55560 0.000000 21.51590 25.71870 4.690900 265 77.77780 55.55560 11.11110 33.88390 32.07120 6.374500 266 77.77780 55.55560 0.000000 33.67240 31.98660 5.260530 267 100.0000 55.55560 11.11110 51.56970 41.19010 7.203230 268 100.0000 55.55560 0.000000 51.35820 41.10550 6.089260 269 94.44440 61.11110 16.66670 49.02440 43.14040 8.820970 270 33.33330 66.66670 11.11110 19.15270 31.45720 7.031850 271 33.33330 66.66670 0.000000 18.94120 31.37260 5.917880 272 55.55560 66.66670 11.11110 26.43150 35.21020 7.372920 273 55.55560 66.66670 0.000000 26.22000 35.12560 6.258950 274 77.77780 66.66670 11.11110 38.58800 41.47810 7.942550 275 77.77780 66.66670 0.000000 38.37650 41.39350 6.828580 276 100.0000 66.66670 11.11110 56.27380 50.59700 8.771280 277 100.0000 66.66670 0.000000 56.06230 50.51240 7.657310 278 100.0000 77.77780 0.000000 61.89940 62.18510 9.603040 279 33.33330 77.77780 11.11110 24.98980 43.12990 8.977580 280 33.33330 77.77780 0.000000 24.77830 43.04530 7.863610 281 55.55560 77.77780 11.11110 32.26870 46.88290 9.318650 282 55.55560 77.77780 0.000000 32.05720 46.79830 8.204680 283 77.77780 77.77780 11.11110 44.42510 53.15080 9.888280 284 77.77780 77.77780 0.000000 44.21360 53.06620 8.774310 285 100.0000 77.77780 11.11110 62.11090 62.26960 10.71700 286 100.0000 88.88890 11.11110 69.14800 76.34190 13.06270 287 100.0000 88.88890 0.000000 68.93650 76.25730 11.94880 288 33.33330 88.88890 11.11110 32.02690 57.20220 11.32330 289 33.33330 88.88890 0.000000 31.81550 57.11760 10.20930 290 55.55560 88.88890 11.11110 39.30580 60.95520 11.66440 291 55.55560 88.88890 0.000000 39.09430 60.87060 10.55040 292 77.77780 88.88890 11.11110 51.46220 67.22310 12.23400 293 77.77780 88.88890 0.000000 51.25070 67.13850 11.12000 294 0.000000 61.11110 0.000000 12.74280 24.48240 4.914310 295 0.000000 75.00000 0.000000 19.50000 37.99480 7.166710 296 22.22220 100.0000 11.11110 38.26850 72.73680 13.99320 297 22.22220 100.0000 0.000000 38.05700 72.65220 12.87920 298 44.44440 100.0000 11.11110 43.40160 75.38340 14.23370 299 44.44440 100.0000 0.000000 43.19010 75.29880 13.11980 300 66.66670 100.0000 11.11110 53.02950 80.34760 14.68490 301 66.66670 100.0000 0.000000 52.81800 80.26300 13.57090 302 88.88890 100.0000 0.000000 67.66500 87.91810 14.26660 303 100.0000 100.0000 11.11110 77.44690 92.93730 15.82900 304 100.0000 100.0000 0.000000 77.23540 92.85270 14.71510 305 22.22220 11.11110 0.000000 3.070820 2.689570 1.217070 306 22.22220 0.000000 11.11110 2.863320 1.936270 2.191370 307 44.44440 11.11110 0.000000 8.203920 5.336220 1.457600 308 44.44440 0.000000 11.11110 7.996410 4.582910 2.431900 309 47.22220 0.000000 0.000000 8.726100 4.983600 1.362030 310 50.00000 0.000000 0.000000 9.739340 5.506030 1.409510 311 80.55560 0.000000 0.000000 26.04060 13.91100 2.173360 312 91.66670 0.000000 0.000000 34.51330 18.27960 2.570370 313 94.44440 0.000000 0.000000 36.85880 19.48890 2.680280 314 97.22220 0.000000 0.000000 39.29750 20.74630 2.794550 315 38.88890 5.555560 16.66670 6.692910 4.120450 3.518510 316 33.33330 11.11110 11.11110 5.339580 3.834890 2.427440 317 33.33330 11.11110 0.000000 5.128090 3.750310 1.313470 318 33.33330 0.000000 11.11110 4.920580 2.997000 2.287770 319 33.33330 0.000000 0.000000 4.709080 2.912420 1.173800 320 69.44440 0.000000 0.000000 18.97010 10.26540 1.842050 321 72.22220 0.000000 0.000000 20.61030 11.11110 1.918900 322 75.00000 0.000000 0.000000 22.33460 12.00020 1.999700 323 11.11110 22.22220 0.000000 2.915550 4.113440 1.500100 324 11.11110 22.22220 11.11110 3.127050 4.198020 2.614070 325 22.22220 22.22220 11.11110 4.295660 4.800560 2.668830 326 22.22220 22.22220 0.000000 4.084170 4.715980 1.554850 327 44.44440 22.22220 11.11110 9.428760 7.447210 2.909350 328 44.44440 22.22220 0.000000 9.217260 7.362620 1.795380 329 66.66670 22.22220 11.11110 19.05670 12.41140 3.360500 330 66.66670 22.22220 0.000000 18.84520 12.32680 2.246530 331 88.88890 22.22220 11.11110 33.90360 20.06650 4.056200 332 88.88890 22.22220 0.000000 33.69210 19.98190 2.942230 333 11.11110 33.33330 0.000000 4.699480 7.680780 2.094740 334 11.11110 33.33330 11.11110 4.910970 7.765370 3.208710 335 22.22220 33.33330 11.11110 6.079590 8.367910 3.263470 336 22.22220 33.33330 0.000000 5.868090 8.283320 2.149500 337 44.44440 33.33330 11.11110 11.21270 11.01460 3.504000 338 44.44440 33.33330 0.000000 11.00120 10.93000 2.390030 339 66.66670 33.33330 11.11110 20.84060 15.97870 3.955150 340 66.66670 33.33330 0.000000 20.62910 15.89410 2.841180 341 88.88890 33.33330 11.11110 35.68750 23.63380 4.650850 342 88.88890 33.33330 0.000000 35.47600 23.54930 3.536880 343 11.11110 44.44440 0.000000 7.366630 13.01440 2.983800 344 11.11110 44.44440 11.11110 7.578130 13.09890 4.097770 345 22.22220 44.44440 11.11110 8.746740 13.70150 4.152530 346 22.22220 44.44440 0.000000 8.535250 13.61690 3.038560 347 44.44440 44.44440 11.11110 13.87980 16.34810 4.393060 348 44.44440 44.44440 0.000000 13.66830 16.26350 3.279090 349 66.66670 44.44440 11.11110 23.50770 21.31230 4.844210 350 66.66670 44.44440 0.000000 23.29620 21.22770 3.730240 351 88.88890 44.44440 11.11110 38.35470 28.96740 5.539910 352 88.88890 44.44440 0.000000 38.14320 28.88280 4.425940 353 11.11110 55.55560 0.000000 11.01120 20.30250 4.198670 354 11.11110 55.55560 11.11110 11.22270 20.38710 5.312640 355 22.22220 55.55560 11.11110 12.39130 20.98960 5.367400 356 22.22220 55.55560 0.000000 12.17980 20.90500 4.253430 357 44.44440 55.55560 11.11110 17.52440 23.63620 5.607930 358 44.44440 55.55560 0.000000 17.31290 23.55170 4.493960 359 66.66670 55.55560 11.11110 27.15230 28.60040 6.059070 360 66.66670 55.55560 0.000000 26.94080 28.51580 4.945100 361 88.88890 55.55560 11.11110 41.99920 36.25550 6.754780 362 88.88890 55.55560 0.000000 41.78770 36.17100 5.640800 363 88.88890 88.88890 11.11110 59.57760 71.40740 12.61430 364 88.88890 88.88890 0.000000 59.36610 71.32280 11.50030 365 22.22220 66.66670 11.11110 17.09540 30.39650 6.935450 366 22.22220 66.66670 0.000000 16.88390 30.31190 5.821480 367 44.44440 66.66670 11.11110 22.22850 33.04310 7.175980 368 44.44440 66.66670 0.000000 22.01700 32.95860 6.062000 369 66.66670 66.66670 11.11110 31.85640 38.00730 7.627120 370 66.66670 66.66670 0.000000 31.64490 37.92270 6.513150 371 88.88890 66.66670 11.11110 46.70330 45.66240 8.322820 372 88.88890 66.66670 0.000000 46.49180 45.57790 7.208850 373 11.11110 77.77780 0.000000 21.55250 41.38200 7.712450 374 11.11110 77.77780 11.11110 21.76400 41.46660 8.826420 375 22.22220 77.77780 11.11110 22.93260 42.06920 8.881180 376 22.22220 77.77780 0.000000 22.72110 41.98460 7.767210 377 44.44440 77.77780 11.11110 28.06570 44.71580 9.121710 378 44.44440 77.77780 0.000000 27.85420 44.63120 8.007740 379 66.66670 77.77780 11.11110 37.69360 49.68000 9.572850 380 66.66670 77.77780 0.000000 37.48210 49.59540 8.458880 381 88.88890 77.77780 11.11110 52.54050 57.33510 10.26860 382 88.88890 77.77780 0.000000 52.32900 57.25050 9.154580 383 11.11110 88.88890 0.000000 28.58960 55.45430 10.05820 384 11.11110 88.88890 11.11110 28.80110 55.53890 11.17210 385 22.22220 88.88890 11.11110 29.96970 56.14140 11.22690 386 22.22220 88.88890 0.000000 29.75820 56.05680 10.11290 387 44.44440 88.88890 11.11110 35.10280 58.78810 11.46740 388 44.44440 88.88890 0.000000 34.89130 58.70350 10.35350 389 66.66670 88.88890 11.11110 44.73070 63.75220 11.91860 390 66.66670 88.88890 0.000000 44.51920 63.66770 10.80460 391 0.000000 69.44440 0.000000 16.58250 32.16060 6.194200 392 0.000000 72.22220 0.000000 18.00470 35.00470 6.668290 393 0.000000 100.0000 11.11110 36.61670 71.88510 13.91580 394 11.11110 100.0000 11.11110 37.09990 72.13420 13.93840 395 11.11110 100.0000 0.000000 36.88840 72.04970 12.82450 396 33.33330 100.0000 11.11110 40.32580 73.79750 14.08960 397 33.33330 100.0000 0.000000 40.11430 73.71290 12.97560 398 55.55560 100.0000 11.11110 47.60460 77.55050 14.43070 399 55.55560 100.0000 0.000000 47.39310 77.46590 13.31670 400 77.77780 100.0000 11.11110 59.76110 83.81840 15.00030 401 77.77780 100.0000 0.000000 59.54960 83.73380 13.88630 402 88.88890 100.0000 11.11110 67.87640 88.00270 15.38060 403 99.07410 99.07410 99.07410 93.13640 97.92750 106.5860 404 33.33330 11.11110 22.22220 5.851080 4.039460 5.121540 405 33.33330 0.000000 22.22220 5.432070 3.201570 4.981870 406 55.55560 11.11110 22.22220 13.12990 7.792450 5.462610 407 55.55560 0.000000 22.22220 12.71090 6.954560 5.322940 408 77.77780 11.11110 22.22220 25.28640 14.06030 6.032240 409 77.77780 0.000000 22.22220 24.86740 13.22250 5.892570 410 100.0000 11.11110 22.22220 42.97220 23.17920 6.860970 411 100.0000 0.000000 22.22220 42.55320 22.34130 6.721300 412 0.000000 11.11110 22.22220 2.141990 2.127040 4.947740 413 11.11110 11.11110 22.22220 2.625200 2.376180 4.970380 414 11.11110 0.000000 22.22220 2.206200 1.538290 4.830710 415 22.22220 0.000000 22.22220 3.374810 2.140830 4.885470 416 44.44440 11.11110 22.22220 8.926910 5.625370 5.265670 417 44.44440 0.000000 22.22220 8.507910 4.787480 5.126000 418 66.66670 11.11110 22.22220 18.55480 10.58950 5.716810 419 66.66670 0.000000 22.22220 18.13580 9.751650 5.577140 420 88.88890 11.11110 22.22220 33.40170 18.24470 6.412510 421 88.88890 0.000000 22.22220 32.98270 17.40680 6.272840 422 0.000000 22.22220 22.22220 3.155340 4.153450 5.285520 423 11.11110 22.22220 22.22220 3.638540 4.402590 5.308160 424 33.33330 22.22220 22.22220 6.864420 6.065860 5.459320 425 44.44440 22.22220 22.22220 9.940260 7.651770 5.603450 426 55.55560 22.22220 22.22220 14.14330 9.818860 5.800400 427 66.66670 22.22220 22.22220 19.56820 12.61600 6.054600 428 77.77780 22.22220 22.22220 26.29970 16.08680 6.370030 429 88.88890 22.22220 22.22220 34.41510 20.27110 6.750300 430 88.88890 66.66670 22.22220 47.21480 45.86700 11.01690 431 0.000000 33.33330 22.22220 4.939260 7.720790 5.880170 432 11.11110 33.33330 22.22220 5.422470 7.969930 5.902810 433 22.22220 33.33330 22.22220 6.591080 8.572470 5.957570 434 33.33330 33.33330 22.22220 8.648340 9.633210 6.053970 435 44.44440 33.33330 22.22220 11.72420 11.21910 6.198100 436 55.55560 33.33330 22.22220 15.92720 13.38620 6.395040 437 66.66670 33.33330 22.22220 21.35210 16.18330 6.649240 438 77.77780 33.33330 22.22220 28.08360 19.65410 6.964670 439 88.88890 33.33330 22.22220 36.19900 23.83840 7.344940 440 94.44440 50.00000 27.77780 45.55780 35.09140 11.10960 441 0.000000 44.44440 22.22220 7.606420 13.05440 6.769230 442 11.11110 44.44440 22.22220 8.089630 13.30350 6.791870 443 22.22220 44.44440 22.22220 9.258240 13.90600 6.846630 444 33.33330 44.44440 22.22220 11.31550 14.96680 6.943030 445 44.44440 44.44440 22.22220 14.39130 16.55270 7.087160 446 55.55560 44.44440 22.22220 18.59430 18.71980 7.284100 447 66.66670 44.44440 22.22220 24.01920 21.51690 7.538300 448 77.77780 44.44440 22.22220 30.75080 24.98770 7.853730 449 88.88890 44.44440 22.22220 38.86620 29.17200 8.234000 450 88.88890 55.55560 22.22220 42.51070 36.46010 9.448870 451 0.000000 55.55560 22.22220 11.25100 20.34250 7.984090 452 11.11110 55.55560 22.22220 11.73420 20.59160 8.006740 453 22.22220 55.55560 22.22220 12.90280 21.19420 8.061500 454 33.33330 55.55560 22.22220 14.96010 22.25490 8.157900 455 44.44440 55.55560 22.22220 18.03590 23.84080 8.302020 456 55.55560 55.55560 22.22220 22.23890 26.00790 8.498970 457 0.000000 30.55560 0.000000 3.691500 6.382250 1.897170 458 0.000000 41.66670 0.000000 6.128440 11.25550 2.709500 459 0.000000 47.22220 0.000000 7.699560 14.39720 3.233200 460 0.000000 58.33330 0.000000 11.60170 22.20040 4.533930 461 0.000000 66.66670 22.22220 15.95510 29.74940 9.552140 462 11.11110 66.66670 22.22220 16.43830 29.99850 9.574790 463 22.22220 66.66670 22.22220 17.60690 30.60110 9.629540 464 33.33330 66.66670 22.22220 19.66420 31.66180 9.725940 465 44.44440 66.66670 22.22220 22.74000 33.24770 9.870070 466 55.55560 66.66670 22.22220 26.94300 35.41480 10.06700 467 66.66670 66.66670 22.22220 32.36790 38.21190 10.32120 468 77.77780 66.66670 22.22220 39.09950 41.68270 10.63660 469 77.77780 77.77780 22.22220 44.93660 53.35530 12.58240 470 0.000000 27.77780 0.000000 3.220400 5.440180 1.740140 471 0.000000 77.77780 22.22220 21.79220 41.42200 11.49790 472 11.11110 77.77780 22.22220 22.27540 41.67120 11.52050 473 22.22220 77.77780 22.22220 23.44410 42.27370 11.57530 474 33.33330 77.77780 22.22220 25.50130 43.33450 11.67170 475 44.44440 77.77780 22.22220 28.57720 44.92040 11.81580 476 55.55560 77.77780 22.22220 32.78020 47.08750 12.01270 477 66.66670 77.77780 22.22220 38.20510 49.88450 12.26700 478 77.77780 88.88890 55.55560 56.06010 69.06190 36.45140 479 88.88890 77.77780 22.22220 53.05200 57.53970 12.96270 480 100.0000 77.77780 22.22220 62.62240 62.47420 13.41110 481 0.000000 88.88890 22.22220 28.82940 55.49430 13.84360 482 11.11110 88.88890 22.22220 29.31260 55.74350 13.86620 483 22.22220 88.88890 22.22220 30.48120 56.34600 13.92100 484 33.33330 88.88890 22.22220 32.53840 57.40670 14.01740 485 44.44440 88.88890 22.22220 35.61430 58.99260 14.16150 486 55.55560 88.88890 22.22220 39.81730 61.15970 14.35850 487 66.66670 88.88890 22.22220 45.24220 63.95680 14.61270 488 77.77780 88.88890 22.22220 51.97370 67.42760 14.92810 489 88.88890 88.88890 22.22220 60.08910 71.61190 15.30840 490 100.0000 88.88890 22.22220 69.65950 76.54650 15.75680 491 0.000000 100.0000 22.22220 37.12820 72.08970 16.60990 492 11.11110 100.0000 22.22220 37.61140 72.33880 16.63250 493 22.22220 100.0000 22.22220 38.78000 72.94140 16.68730 494 33.33330 100.0000 22.22220 40.83730 74.00210 16.78370 495 44.44440 100.0000 22.22220 43.91310 75.58800 16.92780 496 55.55560 100.0000 22.22220 48.11610 77.75510 17.12480 497 66.66670 100.0000 22.22220 53.54100 80.55220 17.37900 498 77.77780 100.0000 22.22220 60.27260 84.02300 17.69440 499 88.88890 100.0000 22.22220 68.38790 88.20730 18.07470 500 100.0000 100.0000 22.22220 77.95840 93.14180 18.52310 501 100.0000 100.0000 66.66670 84.41920 95.72570 52.55280 502 2.777780 0.000000 0.000000 1.087780 1.045260 1.004110 503 44.44440 11.11110 33.33330 9.827360 5.985490 10.00840 504 44.44440 0.000000 33.33330 9.408360 5.147600 9.868770 505 66.66670 11.11110 33.33330 19.45530 10.94970 10.45960 506 66.66670 0.000000 33.33330 19.03630 10.11180 10.31990 507 88.88890 11.11110 33.33330 34.30220 18.60480 11.15530 508 100.0000 11.11110 33.33330 43.87260 23.53930 11.60370 509 100.0000 0.000000 33.33330 43.45360 22.70140 11.46410 510 100.0000 55.55560 77.77780 61.48830 45.15690 59.44570 511 88.88890 55.55560 77.77780 51.91790 40.22240 58.99730 512 22.22220 11.11110 33.33330 4.694270 3.338850 9.767910 513 33.33330 11.11110 33.33330 6.751530 4.399580 9.864310 514 33.33330 0.000000 33.33330 6.332520 3.561690 9.724640 515 55.55560 11.11110 33.33330 14.03040 8.152580 10.20540 516 55.55560 0.000000 33.33330 13.61140 7.314680 10.06570 517 77.77780 11.11110 33.33330 26.18680 14.42050 10.77500 518 77.77780 0.000000 33.33330 25.76780 13.58260 10.63530 519 88.88890 0.000000 33.33330 33.88320 17.76690 11.01560 520 0.000000 22.22220 33.33330 4.055790 4.513570 10.02830 521 11.11110 22.22220 33.33330 4.539000 4.762710 10.05090 522 22.22220 22.22220 33.33330 5.707610 5.365250 10.10570 523 33.33330 22.22220 33.33330 7.764870 6.425980 10.20210 524 44.44440 22.22220 33.33330 10.84070 8.011900 10.34620 525 55.55560 22.22220 33.33330 15.04370 10.17900 10.54320 526 66.66670 22.22220 33.33330 20.46860 12.97610 10.79740 527 77.77780 22.22220 33.33330 27.20020 16.44690 11.11280 528 88.88890 22.22220 33.33330 35.31550 20.63120 11.49310 529 100.0000 22.22220 33.33330 44.88600 25.56570 11.94150 530 0.000000 33.33330 33.33330 5.839710 8.080910 10.62290 531 11.11110 33.33330 33.33330 6.322920 8.330060 10.64560 532 22.22220 33.33330 33.33330 7.491530 8.932600 10.70030 533 44.44440 33.33330 33.33330 12.62460 11.57920 10.94090 534 55.55560 33.33330 33.33330 16.82760 13.74630 11.13780 535 66.66670 33.33330 33.33330 22.25250 16.54340 11.39200 536 77.77780 33.33330 33.33330 28.98410 20.01420 11.70740 537 88.88890 33.33330 33.33330 37.09950 24.19850 12.08770 538 100.0000 33.33330 33.33330 46.66990 29.13310 12.53620 539 0.000000 44.44440 33.33330 8.506870 13.41450 11.51200 540 11.11110 44.44440 33.33330 8.990080 13.66360 11.53460 541 22.22220 44.44440 33.33330 10.15870 14.26620 11.58940 542 33.33330 44.44440 33.33330 12.21600 15.32690 11.68580 543 44.44440 44.44440 33.33330 15.29180 16.91280 11.82990 544 55.55560 44.44440 33.33330 19.49480 19.07990 12.02690 545 66.66670 44.44440 33.33330 24.91970 21.87700 12.28110 546 77.77780 44.44440 33.33330 31.65120 25.34780 12.59650 547 88.88890 44.44440 33.33330 39.76660 29.53210 12.97680 548 100.0000 44.44440 33.33330 49.33700 34.46670 13.42520 549 0.000000 55.55560 33.33330 12.15140 20.70260 12.72690 550 11.11110 55.55560 33.33330 12.63460 20.95180 12.74950 551 22.22220 55.55560 33.33330 13.80330 21.55430 12.80430 552 33.33330 55.55560 33.33330 15.86050 22.61500 12.90070 553 44.44440 55.55560 33.33330 18.93640 24.20090 13.04480 554 55.55560 55.55560 33.33330 23.13940 26.36800 13.24170 555 66.66670 55.55560 33.33330 28.56430 29.16510 13.49590 556 77.77780 55.55560 33.33330 35.29580 32.63590 13.81140 557 88.88890 55.55560 33.33330 43.41120 36.82020 14.19160 558 100.0000 55.55560 33.33330 52.98160 41.75480 14.64010 559 0.000000 66.66670 33.33330 16.85550 30.10950 14.29490 560 11.11110 66.66670 33.33330 17.33880 30.35870 14.31760 561 22.22220 66.66670 33.33330 18.50740 30.96120 14.37230 562 33.33330 66.66670 33.33330 20.56460 32.02190 14.46870 563 44.44440 66.66670 33.33330 23.64050 33.60780 14.61280 564 55.55560 66.66670 33.33330 27.84350 35.77490 14.80980 565 66.66670 66.66670 33.33330 33.26840 38.57200 15.06400 566 77.77780 66.66670 33.33330 39.99990 42.04280 15.37940 567 88.88890 66.66670 33.33330 48.11530 46.22710 15.75970 568 100.0000 66.66670 33.33330 57.68570 51.16170 16.20810 569 0.000000 77.77780 33.33330 22.69270 41.78220 16.24060 570 11.11110 77.77780 33.33330 23.17590 42.03130 16.26330 571 22.22220 77.77780 33.33330 24.34450 42.63380 16.31800 572 33.33330 77.77780 33.33330 26.40180 43.69460 16.41440 573 44.44440 77.77780 33.33330 29.47760 45.28050 16.55860 574 55.55560 77.77780 33.33330 33.68060 47.44760 16.75550 575 66.66670 77.77780 33.33330 39.10550 50.24470 17.00970 576 77.77780 77.77780 33.33330 45.83710 53.71550 17.32510 577 88.88890 77.77780 33.33330 53.95240 57.89980 17.70540 578 100.0000 77.77780 33.33330 63.52290 62.83430 18.15390 579 0.000000 88.88890 33.33330 29.72980 55.85440 18.58640 580 11.11110 88.88890 33.33330 30.21300 56.10360 18.60900 581 22.22220 88.88890 33.33330 31.38160 56.70610 18.66380 582 33.33330 88.88890 33.33330 33.43890 57.76680 18.76020 583 44.44440 88.88890 33.33330 36.51470 59.35280 18.90430 584 55.55560 88.88890 33.33330 40.71770 61.51980 19.10120 585 66.66670 88.88890 33.33330 46.14260 64.31690 19.35540 586 77.77780 88.88890 33.33330 52.87420 67.78770 19.67090 587 88.88890 88.88890 33.33330 60.98960 71.97210 20.05110 588 100.0000 88.88890 33.33330 70.56000 76.90660 20.49960 589 0.000000 100.0000 33.33330 38.02870 72.44980 21.35270 590 11.11110 100.0000 33.33330 38.51190 72.69890 21.37530 591 22.22220 100.0000 33.33330 39.68050 73.30150 21.43010 592 33.33330 100.0000 33.33330 41.73770 74.36220 21.52650 593 44.44440 100.0000 33.33330 44.81360 75.94810 21.67060 594 55.55560 100.0000 33.33330 49.01660 78.11520 21.86750 595 66.66670 100.0000 33.33330 54.44150 80.91230 22.12170 596 77.77780 100.0000 33.33330 61.17300 84.38310 22.43720 597 88.88890 100.0000 33.33330 69.28840 88.56740 22.81740 598 100.0000 100.0000 33.33330 78.85880 93.50200 23.26590 599 22.22220 11.11110 44.44440 6.040540 3.877270 16.85890 600 22.22220 0.000000 44.44440 5.621530 3.039380 16.71920 601 44.44440 11.11110 44.44440 11.17360 6.523910 17.09940 602 44.44440 0.000000 44.44440 10.75460 5.686020 16.95970 603 66.66670 11.11110 44.44440 20.80150 11.48810 17.55050 604 66.66670 0.000000 44.44440 20.38250 10.65020 17.41090 605 88.88890 11.11110 44.44440 35.64850 19.14320 18.24620 606 100.0000 11.11110 44.44440 45.21890 24.07780 18.69470 607 100.0000 0.000000 44.44440 44.79990 23.23990 18.55500 608 0.000000 11.11110 44.44440 4.388720 3.025590 16.78150 609 11.11110 11.11110 44.44440 4.871920 3.274730 16.80410 610 11.11110 0.000000 44.44440 4.452920 2.436840 16.66440 611 33.33330 11.11110 44.44440 8.097800 4.938000 16.95530 612 33.33330 0.000000 44.44440 7.678800 4.100110 16.81560 613 55.55560 11.11110 44.44440 15.37660 8.691000 17.29630 614 55.55560 0.000000 44.44440 14.95760 7.853110 17.15670 615 77.77780 11.11110 44.44440 27.53310 14.95890 17.86600 616 77.77780 0.000000 44.44440 27.11410 14.12100 17.72630 617 88.88890 0.000000 44.44440 35.22950 18.30530 18.10660 618 0.000000 22.22220 44.44440 5.402060 5.051990 17.11920 619 11.11110 22.22220 44.44440 5.885270 5.301140 17.14190 620 22.22220 22.22220 44.44440 7.053880 5.903680 17.19670 621 33.33330 22.22220 44.44440 9.111150 6.964410 17.29300 622 44.44440 22.22220 44.44440 12.18700 8.550320 17.43720 623 55.55560 22.22220 44.44440 16.39000 10.71740 17.63410 624 66.66670 22.22220 44.44440 21.81490 13.51450 17.88830 625 77.77780 22.22220 44.44440 28.54640 16.98530 18.20380 626 88.88890 22.22220 44.44440 36.66180 21.16960 18.58400 627 100.0000 22.22220 44.44440 46.23220 26.10420 19.03250 628 0.000000 33.33330 44.44440 7.185980 8.619340 17.71390 629 11.11110 33.33330 44.44440 7.669190 8.868480 17.73650 630 22.22220 33.33330 44.44440 8.837800 9.471020 17.79130 631 33.33330 33.33330 44.44440 10.89510 10.53180 17.88770 632 44.44440 33.33330 44.44440 13.97090 12.11770 18.03180 633 55.55560 33.33330 44.44440 18.17390 14.28470 18.22880 634 66.66670 33.33330 44.44440 23.59880 17.08180 18.48300 635 77.77780 33.33330 44.44440 30.33030 20.55260 18.79840 636 88.88890 33.33330 44.44440 38.44570 24.73700 19.17870 637 100.0000 33.33330 44.44440 48.01620 29.67150 19.62710 638 0.000000 44.44440 44.44440 9.853140 13.95290 18.60300 639 11.11110 44.44440 44.44440 10.33630 14.20210 18.62560 640 22.22220 44.44440 44.44440 11.50500 14.80460 18.68040 641 33.33330 44.44440 44.44440 13.56220 15.86530 18.77680 642 55.55560 44.44440 44.44440 20.84110 19.61830 19.11780 643 66.66670 44.44440 44.44440 26.26600 22.41540 19.37200 644 77.77780 44.44440 44.44440 32.99750 25.88620 19.68750 645 88.88890 44.44440 44.44440 41.11290 30.07050 20.06770 646 100.0000 44.44440 44.44440 50.68330 35.00510 20.51620 647 0.000000 55.55560 44.44440 13.49770 21.24100 19.81780 648 11.11110 55.55560 44.44440 13.98090 21.49020 19.84050 649 22.22220 55.55560 44.44440 15.14950 22.09270 19.89520 650 33.33330 55.55560 44.44440 17.20680 23.15340 19.99160 651 44.44440 55.55560 44.44440 20.28260 24.73940 20.13580 652 55.55560 55.55560 44.44440 24.48560 26.90640 20.33270 653 66.66670 55.55560 44.44440 29.91050 29.70350 20.58690 654 77.77780 55.55560 44.44440 36.64210 33.17430 20.90230 655 88.88890 55.55560 44.44440 44.75750 37.35870 21.28260 656 100.0000 55.55560 44.44440 54.32790 42.29320 21.73110 657 0.000000 66.66670 44.44440 18.20180 30.64790 21.38590 658 11.11110 66.66670 44.44440 18.68500 30.89710 21.40850 659 22.22220 66.66670 44.44440 19.85360 31.49960 21.46330 660 33.33330 66.66670 44.44440 21.91090 32.56030 21.55970 661 44.44440 66.66670 44.44440 24.98670 34.14630 21.70380 662 55.55560 66.66670 44.44440 29.18970 36.31330 21.90070 663 66.66670 66.66670 44.44440 34.61460 39.11040 22.15490 664 77.77780 66.66670 44.44440 41.34620 42.58120 22.47040 665 88.88890 66.66670 44.44440 49.46160 46.76560 22.85060 666 100.0000 66.66670 44.44440 59.03200 51.70010 23.29910 667 0.000000 77.77780 44.44440 24.03900 42.32060 23.33160 668 11.11110 77.77780 44.44440 24.52220 42.56970 23.35420 669 22.22220 77.77780 44.44440 25.69080 43.17230 23.40900 670 33.33330 77.77780 44.44440 27.74800 44.23300 23.50540 671 44.44440 77.77780 44.44440 30.82390 45.81890 23.64950 672 55.55560 77.77780 44.44440 35.02690 47.98600 23.84650 673 66.66670 77.77780 44.44440 40.45180 50.78310 24.10070 674 77.77780 77.77780 44.44440 47.18330 54.25390 24.41610 675 88.88890 77.77780 44.44440 55.29870 58.43820 24.79640 676 100.0000 77.77780 44.44440 64.86910 63.37280 25.24480 677 0.000000 88.88890 44.44440 31.07610 56.39290 25.67730 678 11.11110 88.88890 44.44440 31.55930 56.64200 25.70000 679 22.22220 88.88890 44.44440 32.72790 57.24450 25.75470 680 33.33330 88.88890 44.44440 34.78520 58.30530 25.85110 681 44.44440 88.88890 44.44440 37.86100 59.89120 25.99530 682 55.55560 88.88890 44.44440 42.06400 62.05830 26.19220 683 66.66670 88.88890 44.44440 47.48890 64.85540 26.44640 684 77.77780 88.88890 44.44440 54.22040 68.32620 26.76180 685 88.88890 88.88890 44.44440 62.33580 72.51050 27.14210 686 100.0000 88.88890 44.44440 71.90630 77.44500 27.59060 687 0.000000 100.0000 44.44440 39.37490 72.98820 28.44360 688 11.11110 100.0000 44.44440 39.85810 73.23740 28.46630 689 22.22220 100.0000 44.44440 41.02670 73.83990 28.52100 690 33.33330 100.0000 44.44440 43.08400 74.90060 28.61740 691 44.44440 100.0000 44.44440 46.15980 76.48650 28.76160 692 55.55560 100.0000 44.44440 50.36290 78.65360 28.95850 693 66.66670 100.0000 44.44440 55.78770 81.45070 29.21270 694 77.77780 100.0000 44.44440 62.51930 84.92150 29.52810 695 88.88890 100.0000 44.44440 70.63470 89.10580 29.90840 696 100.0000 100.0000 44.44440 80.20510 94.04040 30.35690 697 0.000000 11.11110 55.55560 6.228350 3.761330 26.47100 698 33.33330 11.11110 55.55560 9.937430 5.673740 26.64480 699 33.33330 0.000000 55.55560 9.518430 4.835850 26.50510 700 55.55560 11.11110 55.55560 17.21630 9.426740 26.98590 701 55.55560 0.000000 55.55560 16.79730 8.588850 26.84620 702 77.77780 11.11110 55.55560 29.37270 15.69460 27.55550 703 77.77780 0.000000 55.55560 28.95370 14.85670 27.41580 704 100.0000 11.11110 55.55560 47.05850 24.81350 28.38420 705 100.0000 0.000000 55.55560 46.63950 23.97560 28.24450 706 11.11110 0.000000 55.55560 6.292550 3.172580 26.35400 707 11.11110 11.11110 55.55560 6.711560 4.010470 26.49360 708 22.22220 11.11110 55.55560 7.880170 4.613010 26.54840 709 22.22220 0.000000 55.55560 7.461170 3.775120 26.40870 710 44.44440 11.11110 55.55560 13.01330 7.259650 26.78890 711 44.44440 0.000000 55.55560 12.59430 6.421760 26.64920 712 66.66670 11.11110 55.55560 22.64120 12.22380 27.24010 713 66.66670 0.000000 55.55560 22.22220 11.38590 27.10040 714 88.88890 11.11110 55.55560 37.48810 19.87890 27.93580 715 88.88890 0.000000 55.55560 37.06910 19.04110 27.79610 716 0.000000 22.22220 55.55560 7.241690 5.787730 26.80880 717 11.11110 22.22220 55.55560 7.724900 6.036870 26.83140 718 22.22220 22.22220 55.55560 8.893510 6.639410 26.88620 719 33.33330 22.22220 55.55560 10.95080 7.700150 26.98260 720 44.44440 22.22220 55.55560 14.02660 9.286060 27.12670 721 55.55560 22.22220 55.55560 18.22960 11.45310 27.32360 722 66.66670 22.22220 55.55560 23.65450 14.25020 27.57780 723 77.77780 22.22220 55.55560 30.38610 17.72100 27.89330 724 88.88890 22.22220 55.55560 38.50140 21.90540 28.27350 725 100.0000 22.22220 55.55560 48.07190 26.83990 28.72200 726 0.000000 33.33330 55.55560 9.025620 9.355070 27.40340 727 11.11110 33.33330 55.55560 9.508820 9.604220 27.42610 728 22.22220 33.33330 55.55560 10.67740 10.20680 27.48080 729 33.33330 33.33330 55.55560 12.73470 11.26750 27.57720 730 44.44440 33.33330 55.55560 15.81050 12.85340 27.72130 731 55.55560 33.33330 55.55560 20.01350 15.02050 27.91830 732 66.66670 33.33330 55.55560 25.43840 17.81760 28.17250 733 77.77780 33.33330 55.55560 32.17000 21.28840 28.48790 734 88.88890 33.33330 55.55560 40.28540 25.47270 28.86820 735 100.0000 33.33330 55.55560 49.85580 30.40720 29.31660 736 0.000000 44.44440 55.55560 11.69280 14.68860 28.29250 737 11.11110 44.44440 55.55560 12.17600 14.93780 28.31510 738 22.22220 44.44440 55.55560 13.34460 15.54030 28.36990 739 33.33330 44.44440 55.55560 15.40190 16.60110 28.46630 740 44.44440 44.44440 55.55560 18.47770 18.18700 28.61040 741 55.55560 44.44440 55.55560 22.68070 20.35410 28.80740 742 66.66670 44.44440 55.55560 28.10560 23.15120 29.06160 743 77.77780 44.44440 55.55560 34.83710 26.62200 29.37700 744 88.88890 44.44440 55.55560 42.95250 30.80630 29.75730 745 100.0000 44.44440 55.55560 52.52290 35.74080 30.20570 746 0.000000 55.55560 55.55560 15.33730 21.97680 29.50730 747 11.11110 55.55560 55.55560 15.82060 22.22590 29.53000 748 22.22220 55.55560 55.55560 16.98920 22.82850 29.58470 749 33.33330 55.55560 55.55560 19.04640 23.88920 29.68110 750 44.44440 55.55560 55.55560 22.12230 25.47510 29.82530 751 66.66670 55.55560 55.55560 31.75020 30.43930 30.27640 752 77.77780 55.55560 55.55560 38.48170 33.91010 30.59180 753 88.88890 55.55560 55.55560 46.59710 38.09440 30.97210 754 100.0000 55.55560 55.55560 56.16750 43.02890 31.42060 755 0.000000 66.66670 55.55560 20.04150 31.38370 31.07540 756 11.11110 66.66670 55.55560 20.52470 31.63280 31.09800 757 22.22220 66.66670 55.55560 21.69330 32.23540 31.15280 758 33.33330 66.66670 55.55560 23.75050 33.29610 31.24920 759 44.44440 66.66670 55.55560 26.82640 34.88200 31.39330 760 55.55560 66.66670 55.55560 31.02940 37.04910 31.59030 761 66.66670 66.66670 55.55560 36.45430 39.84620 31.84450 762 77.77780 66.66670 55.55560 43.18580 43.31700 32.15990 763 88.88890 66.66670 55.55560 51.30120 47.50130 32.54020 764 100.0000 66.66670 55.55560 60.87160 52.43580 32.98860 765 0.000000 77.77780 55.55560 25.87860 43.05630 33.02110 766 11.11110 77.77780 55.55560 26.36180 43.30550 33.04380 767 22.22220 77.77780 55.55560 27.53040 43.90800 33.09850 768 33.33330 77.77780 55.55560 29.58770 44.96870 33.19490 769 44.44440 77.77780 55.55560 32.66350 46.55460 33.33910 770 55.55560 77.77780 55.55560 36.86650 48.72170 33.53600 771 66.66670 77.77780 55.55560 42.29140 51.51880 33.79020 772 77.77780 77.77780 55.55560 49.02300 54.98960 34.10560 773 88.88890 77.77780 55.55560 57.13830 59.17390 34.48590 774 88.88890 88.88890 55.55560 64.17550 73.24620 36.83160 775 0.000000 88.88890 55.55560 32.91570 57.12860 35.36690 776 11.11110 88.88890 55.55560 33.39890 57.37770 35.38950 777 22.22220 88.88890 55.55560 34.56750 57.98030 35.44430 778 33.33330 88.88890 55.55560 36.62480 59.04100 35.54070 779 44.44440 88.88890 55.55560 39.70060 60.62690 35.68480 780 55.55560 88.88890 55.55560 43.90360 62.79400 35.88170 781 66.66670 88.88890 55.55560 49.32850 65.59110 36.13590 782 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 783 100.0000 77.77780 55.55560 66.70880 64.10850 34.93440 784 100.0000 88.88890 55.55560 73.74590 78.18080 37.28010 785 0.000000 100.0000 55.55560 41.21460 73.72400 38.13320 786 11.11110 100.0000 55.55560 41.69780 73.97310 38.15580 787 22.22220 100.0000 55.55560 42.86640 74.57560 38.21060 788 33.33330 100.0000 55.55560 44.92360 75.63640 38.30700 789 44.44440 100.0000 55.55560 47.99950 77.22230 38.45110 790 55.55560 100.0000 55.55560 52.20250 79.38940 38.64800 791 66.66670 100.0000 55.55560 57.62740 82.18650 38.90220 792 77.77780 100.0000 55.55560 64.35890 85.65730 39.21770 793 88.88890 100.0000 55.55560 72.47430 89.84160 39.59790 794 100.0000 100.0000 55.55560 82.04470 94.77610 40.04640 795 22.22220 11.11110 66.66670 10.25460 5.562640 39.05480 796 22.22220 0.000000 66.66670 9.835610 4.724750 38.91520 797 44.44440 11.11110 66.66670 15.38770 8.209280 39.29530 798 44.44440 0.000000 66.66670 14.96870 7.371390 39.15570 799 66.66670 11.11110 66.66670 25.01560 13.17350 39.74650 800 66.66670 0.000000 66.66670 24.59660 12.33560 39.60680 801 88.88890 11.11110 66.66670 39.86250 20.82860 40.44220 802 100.0000 11.11110 66.66670 49.43300 25.76310 40.89060 803 100.0000 0.000000 66.66670 49.01400 24.92520 40.75100 804 0.000000 11.11110 66.66670 8.602790 4.710950 38.97740 805 11.11110 11.11110 66.66670 9.086000 4.960090 39.00010 806 11.11110 0.000000 66.66670 8.666990 4.122200 38.86040 807 33.33330 11.11110 66.66670 12.31190 6.623370 39.15120 808 33.33330 0.000000 66.66670 11.89290 5.785480 39.01160 809 55.55560 11.11110 66.66670 19.59070 10.37640 39.49230 810 55.55560 0.000000 66.66670 19.17170 9.538470 39.35260 811 77.77780 11.11110 66.66670 31.74720 16.64430 40.06190 812 77.77780 0.000000 66.66670 31.32810 15.80640 39.92230 813 88.88890 0.000000 66.66670 39.44350 19.99070 40.30250 814 0.000000 22.22220 66.66670 9.616140 6.737360 39.31520 815 11.11110 22.22220 66.66670 10.09930 6.986500 39.33780 816 22.22220 22.22220 66.66670 11.26800 7.589040 39.39260 817 33.33330 22.22220 66.66670 13.32520 8.649770 39.48900 818 44.44440 22.22220 66.66670 16.40110 10.23570 39.63310 819 55.55560 22.22220 66.66670 20.60410 12.40280 39.83010 820 66.66670 22.22220 66.66670 26.02900 15.19990 40.08430 821 77.77780 22.22220 66.66670 32.76050 18.67070 40.39970 822 88.88890 22.22220 66.66670 40.87590 22.85500 40.78000 823 100.0000 22.22220 66.66670 50.44630 27.78950 41.22840 824 0.000000 33.33330 66.66670 11.40010 10.30470 39.90980 825 11.11110 33.33330 66.66670 11.88330 10.55380 39.93250 826 22.22220 33.33330 66.66670 13.05190 11.15640 39.98730 827 33.33330 33.33330 66.66670 15.10910 12.21710 40.08370 828 44.44440 33.33330 66.66670 18.18500 13.80300 40.22780 829 55.55560 33.33330 66.66670 22.38800 15.97010 40.42470 830 66.66670 33.33330 66.66670 27.81290 18.76720 40.67890 831 77.77780 33.33330 66.66670 34.54440 22.23800 40.99440 832 88.88890 33.33330 66.66670 42.65980 26.42230 41.37460 833 100.0000 33.33330 66.66670 52.23020 31.35690 41.82310 834 0.000000 44.44440 66.66670 14.06720 15.63830 40.79890 835 11.11110 44.44440 66.66670 14.55040 15.88740 40.82160 836 22.22220 44.44440 66.66670 15.71900 16.49000 40.87630 837 33.33330 44.44440 66.66670 17.77630 17.55070 40.97270 838 44.44440 44.44440 66.66670 20.85210 19.13660 41.11680 839 55.55560 44.44440 66.66670 25.05510 21.30370 41.31380 840 66.66670 44.44440 66.66670 30.48000 24.10080 41.56800 841 77.77780 44.44440 66.66670 37.21160 27.57160 41.88340 842 88.88890 44.44440 66.66670 45.32700 31.75590 42.26370 843 100.0000 44.44440 66.66670 54.89740 36.69040 42.71210 844 0.000000 55.55560 66.66670 17.71180 22.92640 42.01380 845 11.11110 55.55560 66.66670 18.19500 23.17550 42.03640 846 22.22220 55.55560 66.66670 19.36360 23.77810 42.09120 847 33.33330 55.55560 66.66670 21.42090 24.83880 42.18760 848 44.44440 55.55560 66.66670 24.49670 26.42470 42.33170 849 55.55560 55.55560 66.66670 28.69970 28.59180 42.52870 850 66.66670 55.55560 66.66670 34.12460 31.38890 42.78290 851 77.77780 55.55560 66.66670 40.85610 34.85970 43.09830 852 88.88890 55.55560 66.66670 48.97150 39.04400 43.47860 853 100.0000 55.55560 66.66670 58.54200 43.97860 43.92700 854 0.000000 66.66670 66.66670 22.41590 32.33330 43.58180 855 11.11110 66.66670 66.66670 22.89910 32.58240 43.60450 856 22.22220 66.66670 66.66670 24.06770 33.18500 43.65920 857 33.33330 66.66670 66.66670 26.12500 34.24570 43.75560 858 44.44440 66.66670 66.66670 29.20080 35.83160 43.89980 859 55.55560 66.66670 66.66670 33.40380 37.99870 44.09670 860 77.77780 66.66670 66.66670 45.56030 44.26660 44.66630 861 88.88890 66.66670 66.66670 53.67560 48.45090 45.04660 862 100.0000 66.66670 66.66670 63.24610 53.38550 45.49510 863 0.000000 77.77780 66.66670 28.25300 44.00600 45.52760 864 11.11110 77.77780 66.66670 28.73620 44.25510 45.55020 865 22.22220 77.77780 66.66670 29.90490 44.85760 45.60500 866 33.33330 77.77780 66.66670 31.96210 45.91840 45.70140 867 44.44440 77.77780 66.66670 35.03800 47.50430 45.84550 868 55.55560 77.77780 66.66670 39.24100 49.67140 46.04240 869 66.66670 77.77780 66.66670 44.66590 52.46850 46.29660 870 77.77780 77.77780 66.66670 51.39740 55.93930 46.61210 871 88.88890 77.77780 66.66670 59.51280 60.12360 46.99230 872 100.0000 77.77780 66.66670 69.08320 65.05810 47.44080 873 0.000000 88.88890 66.66670 35.29020 58.07820 47.87330 874 11.11110 88.88890 66.66670 35.77340 58.32740 47.89590 875 22.22220 88.88890 66.66670 36.94200 58.92990 47.95070 876 33.33330 88.88890 66.66670 38.99920 59.99060 48.04710 877 44.44440 88.88890 66.66670 42.07510 61.57650 48.19120 878 55.55560 88.88890 66.66670 46.27810 63.74360 48.38820 879 66.66670 88.88890 66.66670 51.70300 66.54070 48.64240 880 77.77780 88.88890 66.66670 58.43450 70.01150 48.95780 881 88.88890 88.88890 66.66670 66.54990 74.19580 49.33810 882 100.0000 88.88890 66.66670 76.12030 79.13040 49.78650 883 0.000000 100.0000 66.66670 43.58900 74.67360 50.63960 884 11.11110 100.0000 66.66670 44.07220 74.92270 50.66220 885 22.22220 100.0000 66.66670 45.24080 75.52530 50.71700 886 33.33330 100.0000 66.66670 47.29810 76.58600 50.81340 887 44.44440 100.0000 66.66670 50.37390 78.17190 50.95750 888 55.55560 100.0000 66.66670 54.57690 80.33900 51.15450 889 66.66670 100.0000 66.66670 60.00180 83.13610 51.40870 890 77.77780 100.0000 66.66670 66.73340 86.60690 51.72410 891 88.88890 100.0000 66.66670 74.84870 90.79120 52.10440 892 11.11110 11.11110 33.33330 3.525650 2.736310 9.713150 893 22.22220 11.11110 77.77780 13.20100 6.740990 54.57360 894 22.22220 0.000000 77.77780 12.78200 5.903100 54.43390 895 44.44440 11.11110 77.77780 18.33410 9.387630 54.81410 896 44.44440 0.000000 77.77780 17.91510 8.549740 54.67440 897 66.66670 11.11110 77.77780 27.96200 14.35180 55.26520 898 66.66670 0.000000 77.77780 27.54300 13.51390 55.12560 899 88.88890 11.11110 77.77780 42.80890 22.00690 55.96090 900 100.0000 11.11110 77.77780 52.37930 26.94150 56.40940 901 100.0000 0.000000 77.77780 51.96030 26.10360 56.26970 902 0.000000 11.11110 77.77780 11.54910 5.889310 54.49620 903 11.11110 11.11110 77.77780 12.03240 6.138450 54.51880 904 11.11110 0.000000 77.77780 11.61330 5.300560 54.37910 905 33.33330 11.11110 77.77780 15.25820 7.801720 54.67000 906 33.33330 0.000000 77.77780 14.83920 6.963830 54.53030 907 55.55560 11.11110 77.77780 22.53710 11.55470 55.01100 908 55.55560 0.000000 77.77780 22.11810 10.71680 54.87140 909 77.77780 11.11110 77.77780 34.69350 17.82260 55.58070 910 77.77780 0.000000 77.77780 34.27450 16.98470 55.44100 911 88.88890 0.000000 77.77780 42.38990 21.16900 55.82130 912 0.000000 22.22220 77.77780 12.56250 7.915710 54.83390 913 11.11110 22.22220 77.77780 13.04570 8.164850 54.85660 914 22.22220 22.22220 77.77780 14.21430 8.767400 54.91130 915 33.33330 22.22220 77.77780 16.27160 9.828130 55.00770 916 44.44440 22.22220 77.77780 19.34740 11.41400 55.15190 917 55.55560 22.22220 77.77780 23.55040 13.58110 55.34880 918 66.66670 22.22220 77.77780 28.97530 16.37820 55.60300 919 77.77780 22.22220 77.77780 35.70680 19.84900 55.91840 920 88.88890 22.22220 77.77780 43.82220 24.03330 56.29870 921 100.0000 22.22220 77.77780 53.39270 28.96790 56.74720 922 0.000000 33.33330 77.77780 14.34640 11.48310 55.42860 923 11.11110 33.33330 77.77780 14.82960 11.73220 55.45120 924 22.22220 33.33330 77.77780 15.99820 12.33470 55.50600 925 33.33330 33.33330 77.77780 18.05550 13.39550 55.60240 926 44.44440 33.33330 77.77780 21.13130 14.98140 55.74650 927 55.55560 33.33330 77.77780 25.33430 17.14850 55.94350 928 66.66670 33.33330 77.77780 30.75920 19.94560 56.19770 929 77.77780 33.33330 77.77780 37.49080 23.41640 56.51310 930 88.88890 33.33330 77.77780 45.60620 27.60070 56.89340 931 100.0000 33.33330 77.77780 55.17660 32.53520 57.34180 932 0.000000 44.44440 77.77780 17.01360 16.81660 56.31770 933 11.11110 44.44440 77.77780 17.49680 17.06580 56.34030 934 22.22220 44.44440 77.77780 18.66540 17.66830 56.39510 935 33.33330 44.44440 77.77780 20.72270 18.72900 56.49150 936 44.44440 44.44440 77.77780 23.79850 20.31500 56.63560 937 55.55560 44.44440 77.77780 28.00150 22.48200 56.83250 938 66.66670 44.44440 77.77780 33.42640 25.27910 57.08670 939 77.77780 44.44440 77.77780 40.15790 28.74990 57.40220 940 88.88890 44.44440 77.77780 48.27330 32.93430 57.78240 941 100.0000 44.44440 77.77780 57.84370 37.86880 58.23090 942 0.000000 55.55560 77.77780 20.65810 24.10480 57.53250 943 11.11110 55.55560 77.77780 21.14130 24.35390 57.55520 944 22.22220 55.55560 77.77780 22.31000 24.95640 57.60990 945 33.33330 55.55560 77.77780 24.36720 26.01720 57.70630 946 44.44440 55.55560 77.77780 27.44310 27.60310 57.85040 947 55.55560 55.55560 77.77780 31.64610 29.77020 58.04740 948 66.66670 55.55560 77.77780 37.07100 32.56730 58.30160 949 77.77780 55.55560 77.77780 43.80250 36.03810 58.61700 950 11.11110 0.000000 33.33330 3.106650 1.898420 9.573480 951 0.000000 11.11110 33.33330 3.042450 2.487160 9.690500 952 0.000000 66.66670 77.77780 25.36220 33.51170 59.10060 953 11.11110 66.66670 77.77780 25.84550 33.76080 59.12320 954 22.22220 66.66670 77.77780 27.01410 34.36330 59.17800 955 33.33330 66.66670 77.77780 29.07130 35.42410 59.27440 956 44.44440 66.66670 77.77780 32.14720 37.01000 59.41850 957 55.55560 66.66670 77.77780 36.35020 39.17710 59.61540 958 66.66670 66.66670 77.77780 41.77510 41.97420 59.86960 959 77.77780 66.66670 77.77780 48.50660 45.44500 60.18510 960 88.88890 66.66670 77.77780 56.62200 49.62930 60.56530 961 5.555560 61.11110 5.555560 13.00430 24.60800 5.342120 962 0.000000 77.77780 77.77780 31.19940 45.18430 61.04630 963 11.11110 77.77780 77.77780 31.68260 45.43340 61.06890 964 22.22220 77.77780 77.77780 32.85120 46.03600 61.12370 965 33.33330 77.77780 77.77780 34.90850 47.09670 61.22010 966 44.44440 77.77780 77.77780 37.98430 48.68260 61.36420 967 55.55560 77.77780 77.77780 42.18730 50.84970 61.56120 968 66.66670 77.77780 77.77780 47.61220 53.64680 61.81540 969 88.88890 77.77780 77.77780 62.45910 61.30190 62.51110 970 5.555560 72.22220 27.77780 19.30740 35.54670 12.58000 971 0.000000 88.88890 77.77780 38.23650 59.25660 63.39200 972 11.11110 88.88890 77.77780 38.71970 59.50570 63.41470 973 22.22220 88.88890 77.77780 39.88830 60.10830 63.46940 974 33.33330 88.88890 77.77780 41.94560 61.16900 63.56580 975 44.44440 88.88890 77.77780 45.02140 62.75490 63.71000 976 55.55560 88.88890 77.77780 49.22440 64.92200 63.90690 977 66.66670 88.88890 77.77780 54.64930 67.71910 64.16110 978 77.77780 88.88890 77.77780 61.38090 71.18990 64.47650 979 5.555560 83.33330 27.77780 25.73650 48.40310 14.72310 980 5.555560 94.44440 27.77780 33.39700 63.72210 17.27660 981 0.000000 100.0000 77.77780 46.53530 75.85190 66.15830 982 11.11110 100.0000 77.77780 47.01860 76.10110 66.18100 983 22.22220 100.0000 77.77780 48.18720 76.70360 66.23570 984 33.33330 100.0000 77.77780 50.24440 77.76430 66.33210 985 44.44440 100.0000 77.77780 53.32030 79.35030 66.47630 986 55.55560 100.0000 77.77780 57.52330 81.51730 66.67320 987 66.66670 100.0000 77.77780 62.94820 84.31440 66.92740 988 77.77780 100.0000 77.77780 69.67970 87.78520 67.24280 989 88.88890 100.0000 77.77780 77.79510 91.96960 67.62310 990 100.0000 100.0000 88.88890 90.91760 98.32470 86.78060 991 16.66670 5.555560 27.77780 3.244210 2.261540 7.001030 992 33.33330 11.11110 88.88890 18.81030 9.222320 73.37900 993 33.33330 0.000000 88.88890 18.39130 8.384430 73.23930 994 55.55560 11.11110 88.88890 26.08910 12.97530 73.72010 995 55.55560 0.000000 88.88890 25.67010 12.13740 73.58040 996 77.77780 11.11110 88.88890 38.24560 19.24320 74.28970 997 77.77780 0.000000 88.88890 37.82660 18.40530 74.15000 998 100.0000 11.11110 88.88890 55.93140 28.36210 75.11840 999 100.0000 0.000000 88.88890 55.51240 27.52420 74.97870 1000 0.000000 11.11110 88.88890 15.10120 7.309900 73.20520 1001 11.11110 0.000000 88.88890 15.16540 6.721150 73.08820 1002 11.11110 11.11110 88.88890 15.58440 7.559050 73.22780 1003 22.22220 0.000000 88.88890 16.33400 7.323700 73.14290 1004 44.44440 11.11110 88.88890 21.88610 10.80820 73.52310 1005 44.44440 0.000000 88.88890 21.46710 9.970340 73.38340 1006 66.66670 11.11110 88.88890 31.51400 15.77240 73.97430 1007 66.66670 0.000000 88.88890 31.09500 14.93450 73.83460 1008 88.88890 11.11110 88.88890 46.36090 23.42750 74.67000 1009 88.88890 0.000000 88.88890 45.94190 22.58960 74.53030 1010 0.000000 22.22220 88.88890 16.11450 9.336310 73.54300 1011 11.11110 22.22220 88.88890 16.59770 9.585450 73.56560 1012 22.22220 22.22220 88.88890 17.76640 10.18800 73.62040 1013 33.33330 22.22220 88.88890 19.82360 11.24870 73.71680 1014 44.44440 22.22220 88.88890 22.89950 12.83460 73.86090 1015 55.55560 22.22220 88.88890 27.10250 15.00170 74.05780 1016 66.66670 22.22220 88.88890 32.52740 17.79880 74.31200 1017 77.77780 22.22220 88.88890 39.25890 21.26960 74.62750 1018 88.88890 22.22220 88.88890 47.37430 25.45390 75.00770 1019 88.88890 55.55560 88.88890 55.46990 41.64300 77.70630 1020 0.000000 33.33330 88.88890 17.89850 12.90370 74.13760 1021 11.11110 33.33330 88.88890 18.38170 13.15280 74.16020 1022 22.22220 33.33330 88.88890 19.55030 13.75530 74.21500 1023 33.33330 33.33330 88.88890 21.60750 14.81610 74.31140 1024 44.44440 33.33330 88.88890 24.68340 16.40200 74.45550 1025 55.55560 33.33330 88.88890 28.88640 18.56910 74.65250 1026 66.66670 33.33330 88.88890 34.31130 21.36620 74.90670 1027 77.77780 33.33330 88.88890 41.04280 24.83700 75.22210 1028 88.88890 33.33330 88.88890 49.15820 29.02130 75.60240 1029 88.88890 44.44440 88.88890 51.82540 34.35480 76.49140 1030 0.000000 44.44440 88.88890 20.56560 18.23720 75.02670 1031 11.11110 44.44440 88.88890 21.04880 18.48640 75.04930 1032 22.22220 44.44440 88.88890 22.21740 19.08890 75.10410 1033 33.33330 44.44440 88.88890 24.27470 20.14960 75.20050 1034 44.44440 44.44440 88.88890 27.35050 21.73560 75.34460 1035 55.55560 44.44440 88.88890 31.55350 23.90260 75.54150 1036 66.66670 44.44440 88.88890 36.97840 26.69970 75.79570 1037 77.77780 44.44440 88.88890 43.71000 30.17050 76.11120 1038 5.555560 38.88890 27.77780 6.735860 10.40720 8.389480 1039 5.555560 50.00000 27.77780 9.880810 16.69620 9.437800 1040 0.000000 55.55560 88.88890 24.21020 25.52530 76.24150 1041 11.11110 55.55560 88.88890 24.69340 25.77450 76.26420 1042 22.22220 55.55560 88.88890 25.86200 26.37700 76.31890 1043 33.33330 55.55560 88.88890 27.91930 27.43780 76.41530 1044 44.44440 55.55560 88.88890 30.99510 29.02370 76.55950 1045 55.55560 55.55560 88.88890 35.19810 31.19080 76.75640 1046 66.66670 55.55560 88.88890 40.62300 33.98790 77.01060 1047 77.77780 55.55560 88.88890 47.35460 37.45870 77.32600 1048 88.88890 77.77780 88.88890 66.01120 62.72250 81.22010 1049 88.88890 77.77780 100.0000 70.20010 64.39780 103.2840 1050 0.000000 66.66670 88.88890 28.91430 34.93220 77.80960 1051 11.11110 66.66670 88.88890 29.39750 35.18140 77.83220 1052 22.22220 66.66670 88.88890 30.56610 35.78390 77.88700 1053 33.33330 66.66670 88.88890 32.62340 36.84470 77.98340 1054 44.44440 66.66670 88.88890 35.69920 38.43060 78.12750 1055 55.55560 66.66670 88.88890 39.90220 40.59770 78.32450 1056 66.66670 66.66670 88.88890 45.32710 43.39480 78.57870 1057 77.77780 66.66670 88.88890 52.05870 46.86560 78.89410 1058 88.88890 66.66670 88.88890 60.17400 51.04990 79.27440 1059 5.555560 61.11110 27.77780 14.04550 25.02440 10.82600 1060 0.000000 77.77780 88.88890 34.75140 46.60490 79.75530 1061 11.11110 77.77780 88.88890 35.23460 46.85400 79.77800 1062 22.22220 77.77780 88.88890 36.40330 47.45660 79.83270 1063 33.33330 77.77780 88.88890 38.46050 48.51730 79.92910 1064 44.44440 77.77780 88.88890 41.53640 50.10320 80.07320 1065 55.55560 77.77780 88.88890 45.73940 52.27030 80.27020 1066 66.66670 77.77780 88.88890 51.16430 55.06740 80.52440 1067 77.77780 77.77780 88.88890 57.89580 58.53820 80.83980 1068 77.77780 88.88890 88.88890 64.93290 72.61050 83.18550 1069 5.555560 27.77780 27.77780 4.523040 5.982190 7.651870 1070 0.000000 88.88890 88.88890 41.78860 60.67720 82.10100 1071 11.11110 88.88890 88.88890 42.27180 60.92630 82.12370 1072 22.22220 88.88890 88.88890 43.44040 61.52890 82.17840 1073 33.33330 88.88890 88.88890 45.49760 62.58960 82.27480 1074 44.44440 88.88890 88.88890 48.57350 64.17550 82.41900 1075 55.55560 88.88890 88.88890 52.77650 66.34260 82.61590 1076 66.66670 88.88890 88.88890 58.20140 69.13970 82.87010 1077 5.555560 83.33330 16.66670 25.03840 48.12400 11.04620 1078 5.555560 94.44440 16.66670 32.69900 63.44290 13.59980 1079 0.000000 100.0000 88.88890 50.08740 77.27250 84.86730 1080 11.11110 100.0000 88.88890 50.57060 77.52170 84.89000 1081 22.22220 100.0000 88.88890 51.73920 78.12420 84.94470 1082 33.33330 100.0000 88.88890 53.79650 79.18490 85.04110 1083 44.44440 100.0000 88.88890 56.87230 80.77090 85.18530 1084 55.55560 100.0000 88.88890 61.07530 82.93790 85.38220 1085 66.66670 100.0000 88.88890 66.50020 85.73500 85.63640 1086 77.77780 100.0000 88.88890 73.23180 89.20580 85.95180 1087 88.88890 100.0000 88.88890 81.34710 93.39020 86.33210 1088 22.22220 11.11110 88.88890 16.75300 8.161590 73.28260 1089 22.22220 11.11110 100.0000 20.94190 9.836890 95.34600 1090 22.22220 0.000000 100.0000 20.52290 8.999000 95.20640 1091 44.44440 11.11110 100.0000 26.07500 12.48350 95.58660 1092 44.44440 0.000000 100.0000 25.65600 11.64560 95.44690 1093 66.66670 11.11110 100.0000 35.70290 17.44770 96.03770 1094 66.66670 0.000000 100.0000 35.28390 16.60980 95.89800 1095 88.88890 11.11110 100.0000 50.54990 25.10280 96.73340 1096 100.0000 11.11110 100.0000 60.12030 30.03740 97.18190 1097 100.0000 0.000000 100.0000 59.70130 29.19950 97.04220 1098 0.000000 11.11110 100.0000 19.29010 8.985200 95.26860 1099 11.11110 11.11110 100.0000 19.77330 9.234350 95.29130 1100 11.11110 0.000000 100.0000 19.35430 8.396460 95.15160 1101 33.33330 11.11110 100.0000 22.99920 10.89760 95.44240 1102 33.33330 0.000000 100.0000 22.58020 10.05970 95.30280 1103 55.55560 11.11110 100.0000 30.27800 14.65060 95.78350 1104 55.55560 0.000000 100.0000 29.85900 13.81270 95.64380 1105 77.77780 11.11110 100.0000 42.43450 20.91850 96.35310 1106 77.77780 0.000000 100.0000 42.01550 20.08060 96.21350 1107 88.88890 0.000000 100.0000 50.13080 24.26490 96.59370 1108 0.000000 22.22220 100.0000 20.30350 11.01160 95.60640 1109 11.11110 22.22220 100.0000 20.78670 11.26080 95.62910 1110 22.22220 22.22220 100.0000 21.95530 11.86330 95.68380 1111 33.33330 22.22220 100.0000 24.01250 12.92400 95.78020 1112 44.44440 22.22220 100.0000 27.08840 14.50990 95.92430 1113 55.55560 22.22220 100.0000 31.29140 16.67700 96.12130 1114 66.66670 22.22220 100.0000 36.71630 19.47410 96.37550 1115 77.77780 22.22220 100.0000 43.44780 22.94490 96.69090 1116 88.88890 22.22220 100.0000 51.56320 27.12920 97.07120 1117 5.555560 16.66670 27.77780 3.140060 3.216610 7.190870 1118 0.000000 33.33330 100.0000 22.08740 14.57900 96.20110 1119 11.11110 33.33330 100.0000 22.57060 14.82810 96.22370 1120 22.22220 33.33330 100.0000 23.73920 15.43060 96.27850 1121 33.33330 33.33330 100.0000 25.79650 16.49140 96.37490 1122 44.44440 33.33330 100.0000 28.87230 18.07730 96.51900 1123 55.55560 33.33330 100.0000 33.07530 20.24440 96.71590 1124 66.66670 33.33330 100.0000 38.50020 23.04150 96.97010 1125 77.77780 33.33330 100.0000 45.23170 26.51230 97.28560 1126 88.88890 33.33330 100.0000 53.34710 30.69660 97.66580 1127 88.88890 44.44440 100.0000 56.01430 36.03020 98.55490 1128 0.000000 44.44440 100.0000 24.75450 19.91250 97.09010 1129 11.11110 44.44440 100.0000 25.23770 20.16170 97.11280 1130 22.22220 44.44440 100.0000 26.40640 20.76420 97.16750 1131 33.33330 44.44440 100.0000 28.46360 21.82490 97.26390 1132 44.44440 44.44440 100.0000 31.53950 23.41090 97.40800 1133 55.55560 44.44440 100.0000 35.74250 25.57790 97.60500 1134 66.66670 44.44440 100.0000 41.16740 28.37500 97.85920 1135 77.77780 44.44440 100.0000 47.89890 31.84580 98.17460 1136 5.555560 38.88890 16.66670 6.037790 10.12800 4.712650 1137 5.555560 50.00000 16.66670 9.182740 16.41700 5.760980 1138 0.000000 55.55560 100.0000 28.39910 27.20060 98.30500 1139 11.11110 55.55560 100.0000 28.88230 27.44980 98.32760 1140 22.22220 55.55560 100.0000 30.05090 28.05230 98.38240 1141 33.33330 55.55560 100.0000 32.10820 29.11310 98.47880 1142 44.44440 55.55560 100.0000 35.18400 30.69900 98.62290 1143 55.55560 55.55560 100.0000 39.38700 32.86610 98.81990 1144 66.66670 55.55560 100.0000 44.81190 35.66320 99.07410 1145 77.77780 55.55560 100.0000 51.54350 39.13400 99.38950 1146 88.88890 55.55560 100.0000 59.65880 43.31830 99.76980 1147 5.555560 16.66670 16.66670 2.441990 2.937430 3.514040 1148 0.000000 66.66670 100.0000 33.10320 36.60750 99.87300 1149 11.11110 66.66670 100.0000 33.58640 36.85670 99.89570 1150 22.22220 66.66670 100.0000 34.75500 37.45920 99.95040 1151 33.33330 66.66670 100.0000 36.81230 38.52000 100.0470 1152 44.44440 66.66670 100.0000 39.88810 40.10590 100.1910 1153 55.55560 66.66670 100.0000 44.09110 42.27300 100.3880 1154 66.66670 66.66670 100.0000 49.51600 45.07010 100.6420 1155 77.77780 66.66670 100.0000 56.24760 48.54090 100.9580 1156 88.88890 66.66670 100.0000 64.36300 52.72520 101.3380 1157 100.0000 66.66670 100.0000 73.93340 57.65970 101.7860 1158 0.000000 77.77780 100.0000 38.94040 48.28020 101.8190 1159 11.11110 77.77780 100.0000 39.42360 48.52930 101.8410 1160 22.22220 77.77780 100.0000 40.59220 49.13190 101.8960 1161 33.33330 77.77780 100.0000 42.64940 50.19260 101.9930 1162 44.44440 77.77780 100.0000 45.72530 51.77850 102.1370 1163 55.55560 77.77780 100.0000 49.92830 53.94560 102.3340 1164 66.66670 77.77780 100.0000 55.35320 56.74270 102.5880 1165 77.77780 77.77780 100.0000 62.08470 60.21350 102.9030 1166 5.555560 61.11110 16.66670 13.34740 24.74520 7.149210 1167 5.555560 72.22220 16.66670 18.60930 35.26750 8.903190 1168 0.000000 88.88890 100.0000 45.97750 62.35250 104.1640 1169 11.11110 88.88890 100.0000 46.46070 62.60160 104.1870 1170 22.22220 88.88890 100.0000 47.62930 63.20420 104.2420 1171 33.33330 88.88890 100.0000 49.68660 64.26490 104.3380 1172 44.44440 88.88890 100.0000 52.76240 65.85080 104.4820 1173 55.55560 88.88890 100.0000 56.96540 68.01790 104.6790 1174 66.66670 88.88890 100.0000 62.39030 70.81500 104.9340 1175 77.77780 88.88890 100.0000 69.12180 74.28580 105.2490 1176 88.88890 88.88890 100.0000 77.23720 78.47010 105.6290 1177 100.0000 88.88890 100.0000 86.80760 83.40460 106.0780 1178 0.000000 100.0000 100.0000 54.27630 78.94780 106.9310 1179 11.11110 100.0000 100.0000 54.75950 79.19700 106.9530 1180 22.22220 100.0000 100.0000 55.92810 79.79950 107.0080 1181 33.33330 100.0000 100.0000 57.98540 80.86020 107.1050 1182 44.44440 100.0000 100.0000 61.06120 82.44620 107.2490 1183 55.55560 100.0000 100.0000 65.26420 84.61320 107.4460 1184 66.66670 100.0000 100.0000 70.68910 87.41030 107.7000 1185 77.77780 100.0000 100.0000 77.42070 90.88110 108.0150 1186 88.88890 100.0000 100.0000 85.53610 95.06550 108.3960 1187 16.66670 5.555560 5.555560 2.203040 1.845140 1.517110 1188 27.77780 5.555560 5.555560 3.797940 2.667470 1.591840 1189 38.88890 5.555560 5.555560 6.349820 3.983230 1.711420 1190 50.00000 5.555560 5.555560 9.976650 5.853240 1.881370 1191 61.11110 5.555560 5.555560 14.77950 8.329580 2.106420 1192 72.22220 5.555560 5.555560 20.84760 11.45830 2.390760 1193 83.33330 5.555560 5.555560 28.26180 15.28110 2.738180 1194 94.44440 5.555560 5.555560 37.09610 19.83610 3.152140 1195 94.44440 83.33330 5.555560 60.37230 66.38190 10.91090 1196 94.44440 83.33330 16.66670 60.71540 66.51910 12.71800 1197 27.77780 16.66670 5.555560 4.477650 4.026700 1.818410 1198 38.88890 16.66670 5.555560 7.029530 5.342460 1.937990 1199 50.00000 16.66670 5.555560 10.65640 7.212470 2.107940 1200 61.11110 16.66670 5.555560 15.45920 9.688810 2.332990 1201 72.22220 16.66670 5.555560 21.52730 12.81760 2.617330 1202 83.33330 16.66670 5.555560 28.94150 16.64040 2.964750 1203 94.44440 16.66670 5.555560 37.77580 21.19540 3.378710 1204 16.66670 16.66670 5.555560 2.882750 3.204370 1.743680 1205 16.66670 27.77780 5.555560 4.265740 5.969950 2.204680 1206 27.77780 27.77780 5.555560 5.860630 6.792290 2.279410 1207 38.88890 27.77780 5.555560 8.412510 8.108040 2.398990 1208 50.00000 27.77780 5.555560 12.03930 9.978050 2.568940 1209 61.11110 27.77780 5.555560 16.84210 12.45440 2.793990 1210 72.22220 27.77780 5.555560 22.91030 15.58310 3.078330 1211 83.33330 27.77780 5.555560 30.32450 19.40590 3.425750 1212 94.44440 27.77780 5.555560 39.15880 23.96090 3.839710 1213 5.555560 16.66670 5.555560 2.098900 2.800210 1.706950 1214 5.555560 27.77780 5.555560 3.481880 5.565790 2.167950 1215 27.77780 38.88890 5.555560 8.073450 11.21730 3.017030 1216 38.88890 38.88890 5.555560 10.62530 12.53310 3.136600 1217 50.00000 38.88890 5.555560 14.25220 14.40310 3.306550 1218 61.11110 38.88890 5.555560 19.05500 16.87940 3.531600 1219 72.22220 38.88890 5.555560 25.12310 20.00820 3.815940 1220 83.33330 38.88890 5.555560 32.53730 23.83100 4.163360 1221 94.44440 38.88890 5.555560 41.37170 28.38600 4.577320 1222 16.66670 38.88890 5.555560 6.478560 10.39500 2.942290 1223 16.66670 50.00000 5.555560 9.623510 16.68400 3.990620 1224 27.77780 50.00000 5.555560 11.21840 17.50630 4.065350 1225 38.88890 50.00000 5.555560 13.77030 18.82210 4.184930 1226 50.00000 50.00000 5.555560 17.39710 20.69210 4.354870 1227 61.11110 50.00000 5.555560 22.19990 23.16840 4.579930 1228 72.22220 50.00000 5.555560 28.26810 26.29720 4.864270 1229 83.33330 50.00000 5.555560 35.68230 30.12000 5.211690 1230 94.44440 50.00000 5.555560 44.51660 34.67500 5.625650 1231 94.44440 61.11110 5.555560 48.68130 43.00320 7.013880 1232 94.44440 83.33330 27.77780 61.41340 66.79830 16.39480 1233 27.77780 61.11110 5.555560 15.38310 25.83450 5.453590 1234 38.88890 61.11110 5.555560 17.93500 27.15030 5.573160 1235 50.00000 61.11110 5.555560 21.56180 29.02030 5.743110 1236 61.11110 61.11110 5.555560 26.36460 31.49660 5.968160 1237 72.22220 61.11110 5.555560 32.43270 34.62540 6.252500 1238 83.33330 61.11110 5.555560 39.84690 38.44820 6.599920 1239 94.44440 72.22220 5.555560 53.94320 53.52550 8.767860 1240 16.66670 61.11110 5.555560 13.78820 25.01220 5.378850 1241 16.66670 72.22220 5.555560 19.05010 35.53450 7.132830 1242 27.77780 72.22220 5.555560 20.64500 36.35680 7.207560 1243 38.88890 72.22220 5.555560 23.19680 37.67260 7.327140 1244 50.00000 72.22220 5.555560 26.82370 39.54260 7.497090 1245 61.11110 72.22220 5.555560 31.62650 42.01890 7.722140 1246 72.22220 72.22220 5.555560 37.69460 45.14770 8.006480 1247 83.33330 72.22220 5.555560 45.10880 48.97050 8.353900 1248 83.33330 83.33330 5.555560 51.53790 61.82690 10.49700 1249 5.555560 50.00000 5.555560 8.839650 16.27980 3.953890 1250 16.66670 83.33330 5.555560 25.47920 48.39090 9.275890 1251 27.77780 83.33330 5.555560 27.07410 49.21320 9.350620 1252 38.88890 83.33330 5.555560 29.62600 50.52900 9.470200 1253 50.00000 83.33330 5.555560 33.25280 52.39900 9.640140 1254 61.11110 83.33330 5.555560 38.05560 54.87530 9.865190 1255 72.22220 83.33330 5.555560 44.12370 58.00410 10.14950 1256 5.555560 72.22220 5.555560 18.26620 35.13030 7.096100 1257 5.555560 83.33330 5.555560 24.69530 47.98670 9.239160 1258 5.555560 94.44440 5.555560 32.35590 63.30570 11.79270 1259 16.66670 94.44440 5.555560 33.13970 63.70990 11.82940 1260 27.77780 94.44440 5.555560 34.73460 64.53220 11.90420 1261 38.88890 94.44440 5.555560 37.28650 65.84790 12.02370 1262 50.00000 94.44440 5.555560 40.91330 67.71800 12.19370 1263 61.11110 94.44440 5.555560 45.71610 70.19430 12.41870 1264 72.22220 94.44440 5.555560 51.78430 73.32300 12.70310 1265 83.33330 94.44440 5.555560 59.19850 77.14580 13.05050 1266 94.44440 94.44440 5.555560 68.03280 81.70080 13.46450 1267 94.44440 94.44440 27.77780 69.07400 82.11720 18.94840 1268 16.66670 16.66670 27.77780 3.923920 3.620770 7.227600 1269 16.66670 27.77780 27.77780 5.306900 6.386350 7.688600 1270 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1271 50.00000 5.555560 16.66670 10.31970 5.990450 3.688450 1272 61.11110 5.555560 16.66670 15.12250 8.466800 3.913510 1273 72.22220 5.555560 16.66670 21.19070 11.59550 4.197850 1274 83.33330 5.555560 16.66670 28.60490 15.41830 4.545270 1275 94.44440 5.555560 16.66670 37.43920 19.97340 4.959230 1276 94.44440 38.88890 16.66670 41.71470 28.52320 6.384410 1277 27.77780 16.66670 16.66670 4.820740 4.163920 3.625500 1278 38.88890 16.66670 16.66670 7.372610 5.479680 3.745080 1279 50.00000 16.66670 16.66670 10.99940 7.349680 3.915030 1280 61.11110 16.66670 16.66670 15.80230 9.826020 4.140080 1281 72.22220 16.66670 16.66670 21.87040 12.95480 4.424420 1282 83.33330 16.66670 16.66670 29.28460 16.77760 4.771840 1283 94.44440 16.66670 16.66670 38.11890 21.33260 5.185800 1284 94.44440 38.88890 27.77780 42.41280 28.80240 10.06120 1285 27.77780 5.555560 16.66670 4.141030 2.804690 3.398930 1286 27.77780 27.77780 16.66670 6.203720 6.929500 4.086500 1287 38.88890 27.77780 16.66670 8.755600 8.245260 4.206080 1288 50.00000 27.77780 16.66670 12.38240 10.11530 4.376030 1289 61.11110 27.77780 16.66670 17.18520 12.59160 4.601080 1290 72.22220 27.77780 16.66670 23.25340 15.72040 4.885420 1291 83.33330 27.77780 16.66670 30.66760 19.54320 5.232840 1292 94.44440 27.77780 16.66670 39.50190 24.09820 5.646800 1293 100.0000 77.77780 100.0000 79.77050 69.33240 103.7320 1294 16.66670 27.77780 16.66670 4.608830 6.107170 4.011770 1295 27.77780 38.88890 16.66670 8.416540 11.35450 4.824110 1296 38.88890 38.88890 16.66670 10.96840 12.67030 4.943690 1297 50.00000 38.88890 16.66670 14.59530 14.54030 5.113640 1298 61.11110 38.88890 16.66670 19.39810 17.01660 5.338690 1299 72.22220 38.88890 16.66670 25.46620 20.14540 5.623030 1300 83.33330 38.88890 16.66670 32.88040 23.96820 5.970450 1301 100.0000 55.55560 88.88890 65.04040 46.57750 78.15480 1302 100.0000 55.55560 100.0000 69.22930 48.25280 100.2180 1303 16.66670 50.00000 16.66670 9.966600 16.82120 5.797710 1304 27.77780 50.00000 16.66670 11.56150 17.64350 5.872440 1305 38.88890 50.00000 16.66670 14.11340 18.95930 5.992020 1306 50.00000 50.00000 16.66670 17.74020 20.82930 6.161960 1307 61.11110 50.00000 16.66670 22.54300 23.30560 6.387010 1308 72.22220 50.00000 16.66670 28.61110 26.43440 6.671360 1309 83.33330 50.00000 16.66670 36.02540 30.25720 7.018770 1310 94.44440 50.00000 16.66670 44.85970 34.81220 7.432740 1311 100.0000 88.88890 77.77780 79.06670 80.30870 65.30530 1312 100.0000 100.0000 77.77780 87.36550 96.90410 68.07160 1313 27.77780 61.11110 16.66670 15.72620 25.97170 7.260680 1314 38.88890 61.11110 16.66670 18.27800 27.28750 7.380250 1315 50.00000 61.11110 16.66670 21.90490 29.15750 7.550200 1316 61.11110 61.11110 16.66670 26.70770 31.63380 7.775250 1317 72.22220 61.11110 16.66670 32.77580 34.76260 8.059590 1318 83.33330 61.11110 16.66670 40.19000 38.58540 8.407010 1319 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 1320 16.66670 61.11110 16.66670 14.13130 25.14940 7.185940 1321 16.66670 72.22220 16.66670 19.39320 35.67170 8.939920 1322 27.77780 72.22220 16.66670 20.98800 36.49400 9.014650 1323 38.88890 72.22220 16.66670 23.53990 37.80980 9.134230 1324 50.00000 72.22220 16.66670 27.16680 39.67980 9.304180 1325 61.11110 72.22220 16.66670 31.96960 42.15610 9.529230 1326 72.22220 72.22220 16.66670 38.03770 45.28490 9.813570 1327 83.33330 72.22220 16.66670 45.45190 49.10770 10.16100 1328 94.44440 72.22220 16.66670 54.28630 53.66270 10.57490 1329 100.0000 77.77780 88.88890 75.58160 67.65710 81.66850 1330 100.0000 88.88890 88.88890 82.61870 81.72930 84.01430 1331 27.77780 83.33330 16.66670 27.41720 49.35050 11.15770 1332 38.88890 83.33330 16.66670 29.96900 50.66620 11.27730 1333 50.00000 83.33330 16.66670 33.59590 52.53620 11.44720 1334 61.11110 83.33330 16.66670 38.39870 55.01260 11.67230 1335 72.22220 83.33330 16.66670 44.46680 58.14130 11.95660 1336 83.33330 83.33330 16.66670 51.88100 61.96410 12.30400 1337 5.555560 38.88890 5.555560 5.694700 9.990820 2.905560 1338 16.66670 83.33330 16.66670 25.82230 48.52810 11.08300 1339 16.66670 94.44440 16.66670 33.48280 63.84710 13.63650 1340 27.77780 94.44440 16.66670 35.07770 64.66940 13.71120 1341 38.88890 94.44440 16.66670 37.62960 65.98520 13.83080 1342 50.00000 94.44440 16.66670 41.25640 67.85520 14.00080 1343 61.11110 94.44440 16.66670 46.05920 70.33150 14.22580 1344 72.22220 94.44440 16.66670 52.12740 73.46030 14.51020 1345 83.33330 94.44440 16.66670 59.54160 77.28310 14.85760 1346 94.44440 94.44440 16.66670 68.37590 81.83810 15.27150 1347 5.555560 5.555560 16.66670 1.762280 1.578200 3.287470 1348 16.66670 5.555560 16.66670 2.546130 1.982360 3.324200 1349 27.77780 5.555560 27.77780 4.839100 3.083870 7.075760 1350 38.88890 5.555560 27.77780 7.390980 4.399630 7.195340 1351 50.00000 5.555560 27.77780 11.01780 6.269640 7.365280 1352 61.11110 5.555560 27.77780 15.82060 8.745980 7.590330 1353 72.22220 5.555560 27.77780 21.88880 11.87470 7.874680 1354 83.33330 5.555560 27.77780 29.30300 15.69750 8.222090 1355 94.44440 5.555560 27.77780 38.13730 20.25250 8.636050 1356 100.0000 44.44440 88.88890 61.39580 39.28940 76.93990 1357 100.0000 44.44440 100.0000 65.58470 40.96470 99.00330 1358 27.77780 16.66670 27.77780 5.518810 4.443100 7.302330 1359 38.88890 16.66670 27.77780 8.070690 5.758860 7.421910 1360 50.00000 16.66670 27.77780 11.69750 7.628870 7.591850 1361 61.11110 16.66670 27.77780 16.50030 10.10520 7.816910 1362 72.22220 16.66670 27.77780 22.56850 13.23400 8.101250 1363 83.33330 16.66670 27.77780 29.98270 17.05680 8.448670 1364 94.44440 16.66670 27.77780 38.81700 21.61180 8.862630 1365 100.0000 22.22220 88.88890 56.94470 30.38850 75.45620 1366 100.0000 22.22220 100.0000 61.13360 32.06380 97.51960 1367 38.88890 27.77780 27.77780 9.453670 8.524440 7.882910 1368 50.00000 27.77780 27.77780 13.08050 10.39440 8.052850 1369 61.11110 27.77780 27.77780 17.88330 12.87080 8.277900 1370 72.22220 27.77780 27.77780 23.95150 15.99950 8.562250 1371 83.33330 27.77780 27.77780 31.36570 19.82230 8.909660 1372 94.44440 27.77780 27.77780 40.20000 24.37730 9.323630 1373 100.0000 33.33330 88.88890 58.72860 33.95580 76.05080 1374 100.0000 33.33330 100.0000 62.91750 35.63110 98.11430 1375 27.77780 38.88890 27.77780 9.114610 11.63370 8.500940 1376 38.88890 38.88890 27.77780 11.66650 12.94950 8.620520 1377 50.00000 38.88890 27.77780 15.29330 14.81950 8.790470 1378 61.11110 38.88890 27.77780 20.09610 17.29580 9.015520 1379 72.22220 38.88890 27.77780 26.16430 20.42460 9.299860 1380 83.33330 38.88890 27.77780 33.57850 24.24740 9.647280 1381 16.66670 38.88890 16.66670 6.821650 10.53220 4.749380 1382 16.66670 38.88890 27.77780 7.519720 10.81140 8.426210 1383 16.66670 50.00000 27.77780 10.66470 17.10040 9.474530 1384 27.77780 50.00000 27.77780 12.25960 17.92270 9.549270 1385 38.88890 50.00000 27.77780 14.81140 19.23850 9.668840 1386 50.00000 50.00000 27.77780 18.43830 21.10850 9.838790 1387 61.11110 50.00000 27.77780 23.24110 23.58480 10.06380 1388 72.22220 50.00000 27.77780 29.30920 26.71360 10.34820 1389 83.33330 50.00000 27.77780 36.72340 30.53640 10.69560 1390 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1391 5.555560 27.77780 16.66670 3.824970 5.703010 3.975040 1392 16.66670 61.11110 27.77780 14.82930 25.42860 10.86280 1393 27.77780 61.11110 27.77780 16.42420 26.25090 10.93750 1394 38.88890 61.11110 27.77780 18.97610 27.56670 11.05710 1395 50.00000 61.11110 27.77780 22.60290 29.43670 11.22700 1396 61.11110 61.11110 27.77780 27.40580 31.91300 11.45210 1397 72.22220 61.11110 27.77780 33.47390 35.04180 11.73640 1398 83.33330 61.11110 27.77780 40.88810 38.86460 12.08380 1399 94.44440 61.11110 27.77780 49.72240 43.41960 12.49780 1400 100.0000 66.66670 77.77780 66.19240 54.56380 61.01380 1401 100.0000 66.66670 88.88890 69.74450 55.98440 79.72280 1402 16.66670 72.22220 27.77780 20.09120 35.95090 12.61670 1403 38.88890 72.22220 27.77780 24.23800 38.08900 12.81110 1404 50.00000 72.22220 27.77780 27.86480 39.95900 12.98100 1405 61.11110 72.22220 27.77780 32.66760 42.43530 13.20610 1406 72.22220 72.22220 27.77780 38.73580 45.56410 13.49040 1407 83.33330 72.22220 27.77780 46.15000 49.38690 13.83780 1408 94.44440 72.22220 27.77780 54.98430 53.94190 14.25180 1409 100.0000 77.77780 77.77780 72.02960 66.23650 62.95950 1410 27.77780 72.22220 27.77780 21.68610 36.77320 12.69150 1411 27.77780 83.33330 27.77780 28.11520 49.62960 14.83450 1412 38.88890 83.33330 27.77780 30.66710 50.94540 14.95410 1413 50.00000 83.33330 27.77780 34.29390 52.81540 15.12410 1414 61.11110 83.33330 27.77780 39.09680 55.29170 15.34910 1415 72.22220 83.33330 27.77780 45.16490 58.42050 15.63350 1416 83.33330 83.33330 27.77780 52.57910 62.24330 15.98090 1417 88.88890 88.88890 77.77780 69.49630 75.37420 64.85680 1418 16.66670 83.33330 27.77780 26.52030 48.80730 14.75980 1419 16.66670 94.44440 27.77780 34.18090 64.12630 17.31330 1420 27.77780 94.44440 27.77780 35.77580 64.94860 17.38810 1421 38.88890 94.44440 27.77780 38.32770 66.26430 17.50760 1422 50.00000 94.44440 27.77780 41.95450 68.13440 17.67760 1423 61.11110 94.44440 27.77780 46.75730 70.61070 17.90260 1424 72.22220 94.44440 27.77780 52.82540 73.73940 18.18700 1425 83.33330 94.44440 27.77780 60.23970 77.56220 18.53440 1426 5.555560 5.555560 27.77780 2.460350 1.857380 6.964300 1427 5.555560 5.555560 38.88890 3.577290 2.304090 12.84730 1428 16.66670 5.555560 38.88890 4.361150 2.708250 12.88410 1429 27.77780 5.555560 38.88890 5.956040 3.530580 12.95880 1430 38.88890 5.555560 38.88890 8.507920 4.846340 13.07840 1431 50.00000 5.555560 38.88890 12.13480 6.716350 13.24830 1432 61.11110 5.555560 38.88890 16.93760 9.192690 13.47340 1433 72.22220 5.555560 38.88890 23.00570 12.32140 13.75770 1434 83.33330 5.555560 38.88890 30.41990 16.14420 14.10510 1435 94.44440 5.555560 38.88890 39.25420 20.69920 14.51910 1436 94.44440 72.22220 83.33330 65.69200 58.22430 70.65020 1437 94.44440 72.22220 94.44440 69.55870 59.77070 91.01670 1438 94.44440 83.33330 94.44440 75.98790 72.62710 93.15980 1439 38.88890 16.66670 38.88890 9.187630 6.205570 13.30500 1440 50.00000 16.66670 38.88890 12.81450 8.075570 13.47490 1441 61.11110 16.66670 38.88890 17.61730 10.55190 13.70000 1442 72.22220 16.66670 38.88890 23.68540 13.68070 13.98430 1443 83.33330 16.66670 38.88890 31.09960 17.50350 14.33170 1444 94.44440 16.66670 38.88890 39.93400 22.05850 14.74570 1445 94.44440 61.11110 72.22220 57.18500 46.40410 51.80370 1446 94.44440 72.22220 72.22220 62.44690 56.92640 53.55770 1447 16.66670 27.77780 38.88890 6.423840 6.833060 13.57160 1448 27.77780 27.77780 38.88890 8.018740 7.655390 13.64640 1449 50.00000 27.77780 38.88890 14.19740 10.84120 13.93590 1450 61.11110 27.77780 38.88890 19.00030 13.31750 14.16100 1451 72.22220 27.77780 38.88890 25.06840 16.44620 14.44530 1452 83.33330 27.77780 38.88890 32.48260 20.26900 14.79270 1453 94.44440 27.77780 38.88890 41.31690 24.82410 15.20670 1454 94.44440 50.00000 72.22220 53.02030 38.07590 50.41550 1455 94.44440 50.00000 94.44440 60.13220 40.92020 87.87450 1456 83.33330 50.00000 83.33330 47.43110 34.81880 67.09410 1457 50.00000 38.88890 38.88890 16.41030 15.26620 14.67350 1458 61.11110 38.88890 38.88890 21.21310 17.74250 14.89860 1459 72.22220 38.88890 38.88890 27.28120 20.87130 15.18290 1460 83.33330 38.88890 38.88890 34.69540 24.69410 15.53030 1461 94.44440 38.88890 38.88890 43.52980 29.24910 15.94430 1462 94.44440 50.00000 83.33330 56.26540 39.37380 67.50800 1463 94.44440 61.11110 83.33330 60.43010 47.70200 68.89630 1464 94.44440 61.11110 94.44440 64.29690 49.24840 89.26270 1465 38.88890 50.00000 38.88890 15.92840 19.68520 15.55190 1466 50.00000 50.00000 38.88890 19.55520 21.55520 15.72180 1467 61.11110 50.00000 38.88890 24.35800 24.03150 15.94690 1468 72.22220 50.00000 38.88890 30.42620 27.16030 16.23120 1469 83.33330 50.00000 38.88890 37.84040 30.98310 16.57860 1470 94.44440 50.00000 38.88890 46.67470 35.53810 16.99260 1471 5.555560 50.00000 38.88890 10.99780 17.14290 15.32080 1472 5.555560 61.11110 38.88890 15.16240 25.47110 16.70910 1473 27.77780 61.11110 38.88890 17.54120 26.69760 16.82050 1474 38.88890 61.11110 38.88890 20.09310 28.01340 16.94010 1475 50.00000 61.11110 38.88890 23.71990 29.88340 17.11010 1476 61.11110 61.11110 38.88890 28.52270 32.35970 17.33510 1477 72.22220 61.11110 38.88890 34.59080 35.48850 17.61950 1478 83.33330 61.11110 38.88890 42.00500 39.31130 17.96690 1479 94.44440 61.11110 38.88890 50.83940 43.86630 18.38080 1480 94.44440 83.33330 72.22220 68.87600 69.78280 55.70070 1481 94.44440 83.33330 83.33330 72.12110 71.08070 72.79330 1482 27.77780 38.88890 38.88890 10.23160 12.08040 14.38400 1483 38.88890 72.22220 38.88890 25.35490 38.53570 18.69410 1484 50.00000 72.22220 38.88890 28.98180 40.40570 18.86410 1485 61.11110 72.22220 38.88890 33.78460 42.88200 19.08910 1486 72.22220 72.22220 38.88890 39.85270 46.01080 19.37340 1487 83.33330 72.22220 38.88890 47.26690 49.83360 19.72090 1488 94.44440 72.22220 38.88890 56.10130 54.38860 20.13480 1489 94.44440 72.22220 50.00000 57.68870 55.02350 28.49600 1490 27.77780 72.22220 38.88890 22.80310 37.21990 18.57450 1491 27.77780 83.33330 38.88890 29.23220 50.07630 20.71760 1492 38.88890 83.33330 38.88890 31.78410 51.39210 20.83720 1493 50.00000 83.33330 38.88890 35.41090 53.26210 21.00710 1494 61.11110 83.33330 38.88890 40.21370 55.73850 21.23220 1495 72.22220 83.33330 38.88890 46.28180 58.86720 21.51650 1496 83.33330 83.33330 38.88890 53.69610 62.69000 21.86390 1497 94.44440 83.33330 38.88890 62.53040 67.24500 22.27790 1498 5.555560 16.66670 38.88890 4.257000 3.663320 13.07390 1499 5.555560 94.44440 38.88890 34.51400 64.16880 23.15970 1500 27.77780 94.44440 38.88890 36.89270 65.39530 23.27110 1501 38.88890 94.44440 38.88890 39.44460 66.71110 23.39070 1502 50.00000 94.44440 38.88890 43.07140 68.58110 23.56060 1503 61.11110 94.44440 38.88890 47.87420 71.05740 23.78570 1504 72.22220 94.44440 38.88890 53.94240 74.18620 24.07000 1505 83.33330 94.44440 38.88890 61.35660 78.00890 24.41750 1506 94.44440 94.44440 38.88890 70.19090 82.56400 24.83140 1507 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 1508 16.66670 5.555560 50.00000 5.948590 3.343130 21.24530 1509 27.77780 5.555560 50.00000 7.543480 4.165460 21.32000 1510 38.88890 5.555560 50.00000 10.09540 5.481210 21.43960 1511 50.00000 5.555560 50.00000 13.72220 7.351220 21.60950 1512 61.11110 5.555560 50.00000 18.52500 9.827560 21.83460 1513 72.22220 5.555560 50.00000 24.59310 12.95630 22.11890 1514 83.33330 5.555560 50.00000 32.00740 16.77910 22.46640 1515 94.44440 5.555560 50.00000 40.84170 21.33410 22.88030 1516 94.44440 83.33330 50.00000 64.11780 67.87990 30.63910 1517 16.66670 16.66670 38.88890 5.040860 4.067480 13.11060 1518 16.66670 16.66670 50.00000 6.628300 4.702350 21.47190 1519 38.88890 16.66670 50.00000 10.77510 6.840440 21.66620 1520 50.00000 16.66670 50.00000 14.40190 8.710450 21.83610 1521 61.11110 16.66670 50.00000 19.20470 11.18680 22.06120 1522 72.22220 16.66670 50.00000 25.27280 14.31550 22.34550 1523 83.33330 16.66670 50.00000 32.68710 18.13830 22.69290 1524 94.44440 16.66670 50.00000 41.52140 22.69330 23.10690 1525 94.44440 38.88890 83.33330 53.12050 33.08480 66.45970 1526 94.44440 38.88890 94.44440 56.98720 34.63120 86.82620 1527 38.88890 27.77780 38.88890 10.57060 8.971150 13.76600 1528 38.88890 27.77780 50.00000 12.15810 9.606030 22.12720 1529 50.00000 27.77780 50.00000 15.78490 11.47600 22.29710 1530 61.11110 27.77780 50.00000 20.58770 13.95240 22.52220 1531 72.22220 27.77780 50.00000 26.65580 17.08110 22.80650 1532 83.33330 27.77780 50.00000 34.07000 20.90390 23.15390 1533 94.44440 27.77780 50.00000 42.90440 25.45890 23.56790 1534 94.44440 38.88890 50.00000 45.11720 29.88400 24.30550 1535 94.44440 38.88890 61.11110 47.21940 30.72470 35.37780 1536 94.44440 50.00000 61.11110 50.36430 37.01370 36.42610 1537 38.88890 38.88890 50.00000 14.37090 14.03100 22.86480 1538 50.00000 38.88890 50.00000 17.99770 15.90110 23.03470 1539 61.11110 38.88890 50.00000 22.80050 18.37740 23.25980 1540 72.22220 38.88890 50.00000 28.86870 21.50610 23.54410 1541 83.33330 38.88890 50.00000 36.28290 25.32890 23.89150 1542 83.33330 50.00000 61.11110 41.53000 32.45870 36.01210 1543 16.66670 38.88890 50.00000 10.22410 11.89300 22.67050 1544 16.66670 50.00000 50.00000 13.36910 18.18200 23.71880 1545 27.77780 50.00000 50.00000 14.96390 19.00430 23.79350 1546 38.88890 50.00000 50.00000 17.51580 20.32010 23.91310 1547 61.11110 50.00000 50.00000 25.94550 24.66640 24.30810 1548 72.22220 50.00000 50.00000 32.01360 27.79520 24.59250 1549 83.33330 50.00000 50.00000 39.42780 31.61800 24.93990 1550 94.44440 50.00000 50.00000 48.26210 36.17300 25.35380 1551 94.44440 61.11110 61.11110 54.52900 45.34190 37.81430 1552 27.77780 50.00000 38.88890 13.37650 18.36940 15.43230 1553 27.77780 61.11110 50.00000 19.12860 27.33250 25.18180 1554 38.88890 61.11110 50.00000 21.68050 28.64820 25.30130 1555 50.00000 61.11110 50.00000 25.30730 30.51830 25.47130 1556 61.11110 61.11110 50.00000 30.11010 32.99460 25.69630 1557 72.22220 61.11110 50.00000 36.17830 36.12330 25.98070 1558 83.33330 61.11110 50.00000 43.59250 39.94610 26.32810 1559 94.44440 61.11110 50.00000 52.42680 44.50120 26.74210 1560 94.44440 72.22220 61.11110 59.79090 55.86420 39.56830 1561 94.44440 83.33330 61.11110 66.22000 68.72060 41.71140 1562 27.77780 72.22220 50.00000 24.39050 37.85480 26.93570 1563 38.88890 72.22220 50.00000 26.94240 39.17050 27.05530 1564 50.00000 72.22220 50.00000 30.56920 41.04060 27.22530 1565 61.11110 72.22220 50.00000 35.37200 43.51690 27.45030 1566 72.22220 72.22220 50.00000 41.44020 46.64560 27.73470 1567 83.33330 72.22220 50.00000 48.85440 50.46840 28.08210 1568 83.33330 72.22220 61.11110 50.95650 51.30920 39.15440 1569 16.66670 72.22220 38.88890 21.20820 36.39760 18.49980 1570 16.66670 83.33330 38.88890 27.63730 49.25400 20.64280 1571 27.77780 83.33330 50.00000 30.81960 50.71120 29.07880 1572 38.88890 83.33330 50.00000 33.37150 52.02700 29.19840 1573 50.00000 83.33330 50.00000 36.99830 53.89700 29.36830 1574 61.11110 83.33330 50.00000 41.80110 56.37330 29.59340 1575 72.22220 83.33330 50.00000 47.86930 59.50210 29.87770 1576 83.33330 83.33330 50.00000 55.28350 63.32490 30.22510 1577 5.555560 83.33330 50.00000 28.44090 49.48470 28.96730 1578 16.66670 83.33330 50.00000 29.22470 49.88890 29.00410 1579 16.66670 94.44440 50.00000 36.88530 65.20780 31.55760 1580 27.77780 94.44440 50.00000 38.48020 66.03020 31.63230 1581 38.88890 94.44440 50.00000 41.03200 67.34590 31.75190 1582 50.00000 94.44440 50.00000 44.65890 69.21590 31.92190 1583 61.11110 94.44440 50.00000 49.46170 71.69230 32.14690 1584 72.22220 94.44440 50.00000 55.52980 74.82100 32.43130 1585 83.33330 94.44440 50.00000 62.94400 78.64380 32.77870 1586 94.44440 94.44440 50.00000 71.77840 83.19880 33.19260 1587 94.44440 94.44440 61.11110 73.88050 84.03960 44.26490 1588 16.66670 5.555560 61.11110 8.050750 4.183860 32.31760 1589 27.77780 5.555560 61.11110 9.645640 5.006190 32.39230 1590 38.88890 5.555560 61.11110 12.19750 6.321940 32.51190 1591 50.00000 5.555560 61.11110 15.82440 8.191950 32.68180 1592 61.11110 5.555560 61.11110 20.62720 10.66830 32.90690 1593 72.22220 5.555560 61.11110 26.69530 13.79700 33.19120 1594 83.33330 5.555560 61.11110 34.10950 17.61980 33.53860 1595 94.44440 5.555560 61.11110 42.94380 22.17480 33.95260 1596 27.77780 16.66670 38.88890 6.635750 4.889810 13.18540 1597 27.77780 16.66670 50.00000 8.223190 5.524690 21.54660 1598 27.77780 16.66670 61.11110 10.32540 6.365420 32.61890 1599 38.88890 16.66670 61.11110 12.87720 7.681170 32.73850 1600 50.00000 16.66670 61.11110 16.50410 9.551180 32.90840 1601 61.11110 16.66670 61.11110 21.30690 12.02750 33.13340 1602 72.22220 16.66670 61.11110 27.37500 15.15630 33.41780 1603 83.33330 16.66670 61.11110 34.78920 18.97910 33.76520 1604 94.44440 16.66670 61.11110 43.62360 23.53410 34.17920 1605 94.44440 27.77780 83.33330 50.90770 28.65970 65.72210 1606 27.77780 27.77780 50.00000 9.606180 8.290270 22.00760 1607 27.77780 27.77780 61.11110 11.70830 9.131000 33.07990 1608 38.88890 27.77780 61.11110 14.26020 10.44680 33.19950 1609 50.00000 27.77780 61.11110 17.88700 12.31680 33.36940 1610 61.11110 27.77780 61.11110 22.68990 14.79310 33.59440 1611 72.22220 27.77780 61.11110 28.75800 17.92190 33.87880 1612 83.33330 27.77780 61.11110 36.17220 21.74470 34.22620 1613 94.44440 27.77780 61.11110 45.00650 26.29970 34.64020 1614 94.44440 27.77780 72.22220 47.66250 27.36190 48.62950 1615 27.77780 38.88890 50.00000 11.81900 12.71530 22.74520 1616 27.77780 38.88890 61.11110 13.92120 13.55600 33.81750 1617 38.88890 38.88890 61.11110 16.47300 14.87180 33.93710 1618 50.00000 38.88890 61.11110 20.09990 16.74180 34.10700 1619 61.11110 38.88890 61.11110 24.90270 19.21810 34.33210 1620 72.22220 38.88890 61.11110 30.97080 22.34690 34.61640 1621 83.33330 38.88890 61.11110 38.38500 26.16970 34.96380 1622 94.44440 38.88890 72.22220 49.87530 31.78690 49.36710 1623 16.66670 27.77780 50.00000 8.011290 7.467940 21.93290 1624 16.66670 38.88890 61.11110 12.32630 12.73370 33.74280 1625 27.77780 50.00000 61.11110 17.06610 19.84500 34.86580 1626 38.88890 50.00000 61.11110 19.61800 21.16080 34.98540 1627 50.00000 50.00000 61.11110 23.24480 23.03080 35.15530 1628 61.11110 50.00000 61.11110 28.04760 25.50710 35.38040 1629 72.22220 50.00000 61.11110 34.11580 28.63590 35.66470 1630 72.22220 61.11110 61.11110 38.28040 36.96410 37.05300 1631 72.22220 72.22220 61.11110 43.54230 47.48640 38.80690 1632 5.555560 38.88890 50.00000 9.440250 11.48880 22.63370 1633 5.555560 50.00000 50.00000 12.58520 17.77780 23.68210 1634 27.77780 61.11110 61.11110 21.23080 28.17320 36.25400 1635 38.88890 61.11110 61.11110 23.78270 29.48900 36.37360 1636 50.00000 61.11110 61.11110 27.40950 31.35900 36.54360 1637 83.33330 61.11110 61.11110 45.69460 40.78690 37.40040 1638 83.33330 72.22220 72.22220 53.61250 52.37140 53.14370 1639 16.66670 61.11110 38.88890 15.94630 25.87530 16.74580 1640 16.66670 61.11110 50.00000 17.53370 26.51020 25.10700 1641 16.66670 72.22220 50.00000 22.79560 37.03250 26.86100 1642 27.77780 72.22220 61.11110 26.49270 38.69550 38.00800 1643 38.88890 72.22220 61.11110 29.04450 40.01130 38.12760 1644 50.00000 72.22220 61.11110 32.67140 41.88130 38.29750 1645 61.11110 72.22220 61.11110 37.47420 44.35760 38.52260 1646 72.22220 83.33330 72.22220 52.62740 61.40500 54.93940 1647 72.22220 83.33330 83.33330 55.87260 62.70290 72.03190 1648 72.22220 83.33330 94.44440 59.73930 64.24930 92.39840 1649 16.66670 72.22220 61.11110 24.89780 37.87320 37.93330 1650 16.66670 83.33330 61.11110 31.32690 50.72960 40.07630 1651 27.77780 83.33330 61.11110 32.92180 51.55200 40.15110 1652 38.88890 83.33330 61.11110 35.47370 52.86770 40.27070 1653 50.00000 83.33330 61.11110 39.10050 54.73770 40.44060 1654 61.11110 83.33330 61.11110 43.90330 57.21410 40.66570 1655 72.22220 83.33330 61.11110 49.97140 60.34280 40.95000 1656 83.33330 83.33330 61.11110 57.38560 64.16560 41.29740 1657 83.33330 83.33330 72.22220 60.04160 65.22780 55.28680 1658 16.66670 94.44440 38.88890 35.29780 64.57300 23.19640 1659 16.66670 94.44440 61.11110 38.98740 66.04860 42.62990 1660 27.77780 94.44440 61.11110 40.58230 66.87090 42.70460 1661 38.88890 94.44440 61.11110 43.13420 68.18670 42.82420 1662 50.00000 94.44440 61.11110 46.76100 70.05670 42.99410 1663 61.11110 94.44440 61.11110 51.56380 72.53300 43.21920 1664 72.22220 94.44440 61.11110 57.63200 75.66180 43.50350 1665 83.33330 94.44440 61.11110 65.04620 79.48460 43.85100 1666 5.555560 5.555560 61.11110 7.266890 3.779700 32.28080 1667 5.555560 5.555560 72.22220 9.922880 4.841920 46.27020 1668 16.66670 5.555560 72.22220 10.70670 5.246080 46.30690 1669 27.77780 5.555560 72.22220 12.30160 6.068410 46.38170 1670 38.88890 5.555560 72.22220 14.85350 7.384170 46.50120 1671 50.00000 5.555560 72.22220 18.48030 9.254180 46.67120 1672 61.11110 5.555560 72.22220 23.28310 11.73050 46.89620 1673 72.22220 5.555560 72.22220 29.35130 14.85930 47.18060 1674 83.33330 5.555560 72.22220 36.76550 18.68210 47.52800 1675 94.44440 5.555560 72.22220 45.59980 23.23710 47.94200 1676 94.44440 5.555560 83.33330 48.84500 24.53490 65.03450 1677 94.44440 5.555560 94.44440 52.71170 26.08140 85.40100 1678 94.44440 27.77780 94.44440 54.77440 30.20620 86.08860 1679 38.88890 16.66670 72.22220 15.53320 8.743400 46.72780 1680 50.00000 16.66670 72.22220 19.16000 10.61340 46.89780 1681 61.11110 16.66670 72.22220 23.96290 13.08970 47.12280 1682 72.22220 16.66670 72.22220 30.03100 16.21850 47.40710 1683 83.33330 16.66670 72.22220 37.44520 20.04130 47.75460 1684 94.44440 16.66670 72.22220 46.27950 24.59630 48.16850 1685 94.44440 16.66670 83.33330 49.52470 25.89420 65.26110 1686 27.77780 16.66670 72.22220 12.98130 7.427640 46.60820 1687 27.77780 27.77780 72.22220 14.36430 10.19320 47.06920 1688 38.88890 27.77780 72.22220 16.91620 11.50900 47.18880 1689 50.00000 27.77780 72.22220 20.54300 13.37900 47.35870 1690 61.11110 27.77780 72.22220 25.34580 15.85530 47.58380 1691 72.22220 27.77780 72.22220 31.41400 18.98410 47.86810 1692 83.33330 27.77780 72.22220 38.82820 22.80690 48.21560 1693 16.66670 27.77780 61.11110 10.11340 8.308670 33.00510 1694 16.66670 27.77780 72.22220 12.76940 9.370890 46.99450 1695 16.66670 38.88890 72.22220 14.98220 13.79590 47.73210 1696 27.77780 38.88890 72.22220 16.57710 14.61820 47.80680 1697 38.88890 38.88890 72.22220 19.12900 15.93400 47.92640 1698 50.00000 38.88890 72.22220 22.75590 17.80400 48.09640 1699 61.11110 38.88890 72.22220 27.55870 20.28040 48.32140 1700 72.22220 38.88890 72.22220 33.62680 23.40910 48.60580 1701 83.33330 38.88890 72.22220 41.04100 27.23190 48.95320 1702 83.33330 50.00000 94.44440 51.29780 36.36520 87.46050 1703 5.555560 38.88890 61.11110 11.54240 12.32950 33.70600 1704 5.555560 38.88890 72.22220 14.19840 13.39180 47.69540 1705 5.555560 50.00000 72.22220 17.34330 19.68080 48.74370 1706 38.88890 50.00000 72.22220 22.27400 22.22300 48.97470 1707 50.00000 50.00000 72.22220 25.90080 24.09300 49.14470 1708 61.11110 50.00000 72.22220 30.70360 26.56940 49.36970 1709 72.22220 50.00000 72.22220 36.77170 29.69810 49.65410 1710 83.33330 50.00000 72.22220 44.18600 33.52090 50.00150 1711 83.33330 61.11110 72.22220 48.35060 41.84910 51.38970 1712 83.33330 72.22220 83.33330 56.85770 53.66930 70.23630 1713 27.77780 50.00000 72.22220 19.72210 20.90730 48.85520 1714 27.77780 61.11110 72.22220 23.88680 29.23540 50.24340 1715 38.88890 61.11110 72.22220 26.43860 30.55120 50.36300 1716 50.00000 61.11110 72.22220 30.06550 32.42120 50.53290 1717 61.11110 61.11110 72.22220 34.86830 34.89760 50.75800 1718 72.22220 61.11110 72.22220 40.93640 38.02630 51.04230 1719 16.66670 38.88890 38.88890 8.636660 11.25810 14.30930 1720 16.66670 50.00000 38.88890 11.78160 17.54710 15.35760 1721 16.66670 61.11110 61.11110 19.63590 27.35090 36.17930 1722 16.66670 61.11110 72.22220 22.29190 28.41310 50.16870 1723 27.77780 72.22220 72.22220 29.14860 39.75770 51.99740 1724 38.88890 72.22220 72.22220 31.70050 41.07350 52.11700 1725 50.00000 72.22220 72.22220 35.32740 42.94350 52.28690 1726 61.11110 72.22220 72.22220 40.13020 45.41990 52.51200 1727 61.11110 72.22220 94.44440 47.24210 48.26420 89.97100 1728 5.555560 72.22220 38.88890 20.42430 35.99340 18.46310 1729 5.555560 83.33330 38.88890 26.85340 48.84990 20.60610 1730 16.66670 83.33330 72.22220 33.98290 51.79180 54.06570 1731 27.77780 83.33330 72.22220 35.57780 52.61420 54.14040 1732 38.88890 83.33330 72.22220 38.12960 53.92990 54.26000 1733 50.00000 83.33330 72.22220 41.75650 55.79990 54.43000 1734 61.11110 83.33330 72.22220 46.55930 58.27630 54.65500 1735 5.555560 72.22220 50.00000 22.01180 36.62830 26.82430 1736 5.555560 83.33330 61.11110 30.54300 50.32550 40.03960 1737 5.555560 94.44440 61.11110 38.20360 65.64440 42.59320 1738 5.555560 94.44440 72.22220 40.85960 66.70660 56.58250 1739 16.66670 94.44440 72.22220 41.64340 67.11080 56.61920 1740 27.77780 94.44440 72.22220 43.23830 67.93310 56.69400 1741 38.88890 94.44440 72.22220 45.79020 69.24890 56.81350 1742 50.00000 94.44440 72.22220 49.41700 71.11890 56.98350 1743 61.11110 94.44440 72.22220 54.21980 73.59520 57.20850 1744 72.22220 94.44440 72.22220 60.28800 76.72400 57.49290 1745 83.33330 94.44440 72.22220 67.70220 80.54680 57.84030 1746 94.44440 94.44440 72.22220 76.53650 85.10180 58.25430 1747 94.44440 94.44440 83.33330 79.78170 86.39960 75.34680 1748 16.66670 5.555560 83.33330 13.95190 6.543940 63.39950 1749 27.77780 5.555560 83.33330 15.54680 7.366270 63.47420 1750 38.88890 5.555560 83.33330 18.09870 8.682030 63.59380 1751 50.00000 5.555560 83.33330 21.72550 10.55200 63.76370 1752 61.11110 5.555560 83.33330 26.52830 13.02840 63.98880 1753 72.22220 5.555560 83.33330 32.59640 16.15710 64.27310 1754 83.33330 5.555560 83.33330 40.01070 19.97990 64.62060 1755 16.66670 16.66670 61.11110 8.730460 5.543080 32.54410 1756 16.66670 16.66670 72.22220 11.38640 6.605310 46.53350 1757 16.66670 16.66670 83.33330 14.63160 7.903170 63.62610 1758 27.77780 16.66670 83.33330 16.22650 8.725500 63.70080 1759 38.88890 16.66670 83.33330 18.77840 10.04130 63.82040 1760 50.00000 16.66670 83.33330 22.40520 11.91130 63.99030 1761 61.11110 16.66670 83.33330 27.20800 14.38760 64.21540 1762 72.22220 16.66670 83.33330 33.27610 17.51640 64.49970 1763 83.33330 16.66670 83.33330 40.69040 21.33920 64.84710 1764 94.44440 16.66670 94.44440 53.39140 27.44060 85.62760 1765 5.555560 16.66670 61.11110 7.946600 5.138930 32.50740 1766 5.555560 16.66670 72.22220 10.60260 6.201150 46.49680 1767 27.77780 27.77780 83.33330 17.60950 11.49110 64.16180 1768 38.88890 27.77780 83.33330 20.16140 12.80680 64.28140 1769 50.00000 27.77780 83.33330 23.78820 14.67680 64.45130 1770 61.11110 27.77780 83.33330 28.59100 17.15320 64.67640 1771 72.22220 27.77780 83.33330 34.65910 20.28190 64.96070 1772 83.33330 27.77780 83.33330 42.07330 24.10470 65.30810 1773 83.33330 27.77780 94.44440 45.94010 25.65120 85.67460 1774 16.66670 27.77780 83.33330 16.01460 10.66880 64.08710 1775 16.66670 38.88890 83.33330 18.22740 15.09380 64.82470 1776 27.77780 38.88890 83.33330 19.82230 15.91610 64.89940 1777 38.88890 38.88890 83.33330 22.37420 17.23190 65.01900 1778 50.00000 38.88890 83.33330 26.00100 19.10190 65.18890 1779 61.11110 38.88890 83.33330 30.80380 21.57820 65.41400 1780 72.22220 38.88890 83.33330 36.87200 24.70700 65.69830 1781 83.33330 38.88890 83.33330 44.28620 28.52980 66.04570 1782 16.66670 50.00000 61.11110 15.47120 19.02270 34.79110 1783 16.66670 50.00000 72.22220 18.12720 20.08490 48.78040 1784 16.66670 50.00000 83.33330 21.37240 21.38280 65.87300 1785 27.77780 50.00000 83.33330 22.96720 22.20510 65.94770 1786 38.88890 50.00000 83.33330 25.51910 23.52090 66.06730 1787 50.00000 50.00000 83.33330 29.14600 25.39090 66.23730 1788 61.11110 50.00000 83.33330 33.94880 27.86720 66.46230 1789 72.22220 50.00000 83.33330 40.01690 30.99600 66.74660 1790 5.555560 27.77780 50.00000 7.227430 7.063780 21.89610 1791 5.555560 27.77780 61.11110 9.329580 7.904510 32.96840 1792 5.555560 27.77780 72.22220 11.98560 8.966730 46.95780 1793 16.66670 61.11110 83.33330 25.53700 29.71100 67.26120 1794 27.77780 61.11110 83.33330 27.13190 30.53330 67.33600 1795 38.88890 61.11110 83.33330 29.68380 31.84910 67.45550 1796 50.00000 61.11110 83.33330 33.31060 33.71910 67.62550 1797 61.11110 61.11110 83.33330 38.11340 36.19540 67.85050 1798 72.22220 61.11110 83.33330 44.18160 39.32420 68.13490 1799 83.33330 61.11110 83.33330 51.59580 43.14700 68.48230 1800 83.33330 61.11110 94.44440 55.46250 44.69340 88.84880 1801 16.66670 72.22220 72.22220 27.55380 38.93540 51.92260 1802 16.66670 72.22220 83.33330 30.79890 40.23330 69.01520 1803 27.77780 72.22220 83.33330 32.39380 41.05560 69.08990 1804 38.88890 72.22220 83.33330 34.94570 42.37140 69.20950 1805 50.00000 72.22220 83.33330 38.57250 44.24140 69.37950 1806 61.11110 72.22220 83.33330 43.37530 46.71770 69.60450 1807 72.22220 72.22220 83.33330 49.44350 49.84650 69.88890 1808 72.22220 72.22220 94.44440 53.31020 51.39290 90.25530 1809 5.555560 83.33330 72.22220 33.19900 51.38770 54.02900 1810 5.555560 83.33330 83.33330 36.44420 52.68550 71.12150 1811 16.66670 83.33330 83.33330 37.22800 53.08970 71.15830 1812 27.77780 83.33330 83.33330 38.82290 53.91200 71.23300 1813 38.88890 83.33330 83.33330 41.37480 55.22780 71.35260 1814 50.00000 83.33330 83.33330 45.00160 57.09780 71.52250 1815 61.11110 83.33330 83.33330 49.80440 59.57410 71.74760 1816 61.11110 83.33330 94.44440 53.67120 61.12060 92.11400 1817 5.555560 94.44440 50.00000 36.10140 64.80370 31.52090 1818 5.555560 94.44440 83.33330 44.10470 68.00450 73.67510 1819 16.66670 94.44440 83.33330 44.88860 68.40870 73.71180 1820 27.77780 94.44440 83.33330 46.48350 69.23100 73.78650 1821 38.88890 94.44440 83.33330 49.03530 70.54670 73.90610 1822 50.00000 94.44440 83.33330 52.66220 72.41670 74.07610 1823 61.11110 94.44440 83.33330 57.46500 74.89310 74.30110 1824 72.22220 94.44440 83.33330 63.53310 78.02180 74.58550 1825 83.33330 94.44440 83.33330 70.94730 81.84460 74.93290 1826 5.555560 5.555560 83.33330 13.16800 6.139780 63.36280 1827 5.555560 5.555560 94.44440 17.03480 7.686230 83.72920 1828 16.66670 5.555560 94.44440 17.81860 8.090390 83.76600 1829 27.77780 5.555560 94.44440 19.41350 8.912720 83.84070 1830 38.88890 5.555560 94.44440 21.96540 10.22850 83.96030 1831 50.00000 5.555560 94.44440 25.59220 12.09850 84.13020 1832 61.11110 5.555560 94.44440 30.39500 14.57480 84.35530 1833 72.22220 5.555560 94.44440 36.46320 17.70360 84.63960 1834 83.33330 5.555560 94.44440 43.87740 21.52640 84.98700 1835 5.555560 16.66670 83.33330 13.84770 7.499010 63.58930 1836 5.555560 16.66670 94.44440 17.71450 9.045460 83.95580 1837 16.66670 16.66670 94.44440 18.49830 9.449620 83.99250 1838 27.77780 16.66670 94.44440 20.09320 10.27190 84.06730 1839 38.88890 16.66670 94.44440 22.64510 11.58770 84.18680 1840 50.00000 16.66670 94.44440 26.27190 13.45770 84.35680 1841 61.11110 16.66670 94.44440 31.07470 15.93410 84.58180 1842 72.22220 16.66670 94.44440 37.14290 19.06280 84.86620 1843 83.33330 16.66670 94.44440 44.55710 22.88560 85.21360 1844 83.33330 72.22220 94.44440 60.72440 55.21570 90.60270 1845 83.33330 83.33330 94.44440 67.15350 68.07210 92.74580 1846 16.66670 27.77780 94.44440 19.88130 12.21520 84.45350 1847 27.77780 27.77780 94.44440 21.47620 13.03750 84.52830 1848 38.88890 27.77780 94.44440 24.02810 14.35330 84.64780 1849 50.00000 27.77780 94.44440 27.65490 16.22330 84.81780 1850 61.11110 27.77780 94.44440 32.45770 18.69960 85.04280 1851 72.22220 27.77780 94.44440 38.52590 21.82840 85.32720 1852 5.555560 16.66670 50.00000 5.844440 4.298200 21.43510 1853 5.555560 38.88890 83.33330 17.44350 14.68960 64.78790 1854 5.555560 38.88890 94.44440 21.31030 16.23610 85.15440 1855 16.66670 38.88890 94.44440 22.09410 16.64020 85.19110 1856 27.77780 38.88890 94.44440 23.68900 17.46260 85.26590 1857 38.88890 38.88890 94.44440 26.24090 18.77830 85.38550 1858 50.00000 38.88890 94.44440 29.86770 20.64830 85.55540 1859 61.11110 38.88890 94.44440 34.67050 23.12470 85.78040 1860 72.22220 38.88890 94.44440 40.73870 26.25340 86.06480 1861 83.33330 38.88890 94.44440 48.15290 30.07620 86.41220 1862 5.555560 27.77780 83.33330 15.23070 10.26460 64.05030 1863 5.555560 27.77780 94.44440 19.09750 11.81100 84.41680 1864 16.66670 50.00000 94.44440 25.23910 22.92920 86.23950 1865 27.77780 50.00000 94.44440 26.83400 23.75160 86.31420 1866 38.88890 50.00000 94.44440 29.38590 25.06730 86.43380 1867 50.00000 50.00000 94.44440 33.01270 26.93730 86.60370 1868 61.11110 50.00000 94.44440 37.81550 29.41370 86.82880 1869 72.22220 50.00000 94.44440 43.88360 32.54240 87.11310 1870 72.22220 61.11110 94.44440 48.04830 40.87060 88.50140 1871 5.555560 50.00000 94.44440 24.45520 22.52510 86.20270 1872 5.555560 61.11110 94.44440 28.61990 30.85330 87.59100 1873 16.66670 61.11110 94.44440 29.40380 31.25740 87.62770 1874 27.77780 61.11110 94.44440 30.99860 32.07980 87.70240 1875 38.88890 61.11110 94.44440 33.55050 33.39550 87.82200 1876 50.00000 61.11110 94.44440 37.17740 35.26550 87.99200 1877 61.11110 61.11110 94.44440 41.98020 37.74190 88.21700 1878 5.555560 50.00000 83.33330 20.58850 20.97860 65.83630 1879 5.555560 61.11110 83.33330 24.75320 29.30680 67.22450 1880 5.555560 72.22220 83.33330 30.01510 39.82910 68.97850 1881 5.555560 72.22220 94.44440 33.88180 41.37560 89.34490 1882 16.66670 72.22220 94.44440 34.66560 41.77970 89.38170 1883 27.77780 72.22220 94.44440 36.26050 42.60210 89.45640 1884 38.88890 72.22220 94.44440 38.81240 43.91780 89.57600 1885 50.00000 72.22220 94.44440 42.43920 45.78780 89.74590 1886 5.555560 38.88890 38.88890 7.852810 10.85390 14.27250 1887 5.555560 61.11110 50.00000 16.74990 26.10600 25.07030 1888 5.555560 61.11110 61.11110 18.85200 26.94670 36.14260 1889 5.555560 72.22220 61.11110 24.11390 37.46900 37.89660 1890 5.555560 72.22220 72.22220 26.76990 38.53130 51.88590 1891 16.66670 83.33330 94.44440 41.09480 54.63620 91.52470 1892 27.77780 83.33330 94.44440 42.68960 55.45850 91.59950 1893 38.88890 83.33330 94.44440 45.24150 56.77420 91.71900 1894 50.00000 83.33330 94.44440 48.86840 58.64420 91.88900 1895 5.555560 27.77780 38.88890 5.639990 6.428900 13.53490 1896 5.555560 50.00000 61.11110 14.68740 18.61850 34.75430 1897 5.555560 61.11110 72.22220 21.50800 28.00900 50.13190 1898 5.555560 83.33330 94.44440 40.31090 54.23200 91.48800 1899 5.555560 94.44440 94.44440 47.97140 69.55090 94.04150 1900 16.66670 94.44440 94.44440 48.75530 69.95510 94.07830 1901 27.77780 94.44440 94.44440 50.35020 70.77740 94.15300 1902 38.88890 94.44440 94.44440 52.90210 72.09320 94.27260 1903 50.00000 94.44440 94.44440 56.52890 73.96320 94.44250 1904 61.11110 94.44440 94.44440 61.33170 76.43950 94.66760 1905 72.22220 94.44440 94.44440 67.39990 79.56830 94.95190 1906 83.33330 94.44440 94.44440 74.81410 83.39110 95.29930 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s41-g121-m0-f2527-caRGB.ti1000644 000765 000000 00000603413 12261120515 022602 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "2280" CREATED "Wed Dec 18 02:33:28 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "121" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045794 99.996943 108.895612" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "41" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 2527 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 2 34.85590000 25.39880000 49.83750000 10.65970000 7.636090000 22.04440000 3 52.86060000 26.41390000 58.56920000 20.98920000 12.99660000 31.60940000 4 48.56120000 48.56120000 48.56120000 19.40950000 20.42060000 22.23780000 5 47.61900000 47.61900000 47.61900000 18.59100000 19.55940000 21.30000000 6 50.51020000 100.0000000 78.91960000 42.57720000 73.82650000 66.56390000 7 60.72510000 100.0000000 79.39950000 49.14040000 77.19320000 67.65480000 8 100.0000000 23.86720000 0.000000000 58.46650000 32.42290000 3.004180000 9 100.0000000 81.86290000 0.000000000 69.61970000 70.13390000 7.252820000 10 100.0000000 100.0000000 0.000000000 76.22550000 92.46910000 9.769170000 11 100.0000000 100.0000000 19.92540000 76.76730000 92.68580000 12.62300000 12 10.20410000 10.20410000 10.20410000 0.628073000 0.660790000 0.719594000 13 10.20410000 0.000000000 0.000000000 0.381103000 0.196503000 0.017852100 14 3.554500000 0.000000000 0.000000000 0.037481000 0.019325900 0.001755730 15 4.807690000 0.000000000 0.000000000 0.072820900 0.037547700 0.003411170 16 6.097560000 0.000000000 0.000000000 0.122817000 0.063326500 0.005753140 17 7.425740000 0.000000000 0.000000000 0.189442000 0.097679400 0.008874060 18 8.793970000 0.000000000 0.000000000 0.274788000 0.141685000 0.012872000 19 9.259260000 9.259260000 9.259260000 0.507234000 0.533657000 0.581146000 20 14.26230000 7.157360000 0.000000000 0.852080000 0.600406000 0.058691800 21 17.95580000 0.000000000 0.000000000 1.320680000 0.680967000 0.061865100 22 19.66290000 0.000000000 0.000000000 1.612660000 0.831516000 0.075542300 23 21.42860000 0.000000000 0.000000000 1.948380000 1.004620000 0.091268400 24 23.25580000 0.000000000 0.000000000 2.332540000 1.202700000 0.109264000 25 25.14790000 0.000000000 0.000000000 2.770380000 1.428450000 0.129773000 26 27.10840000 0.000000000 0.000000000 3.267670000 1.684870000 0.153068000 27 29.14110000 0.000000000 0.000000000 3.830870000 1.975260000 0.179450000 28 31.25000000 0.000000000 0.000000000 4.467150000 2.303340000 0.209256000 29 33.43950000 0.000000000 0.000000000 5.184520000 2.673230000 0.242860000 30 35.71430000 0.000000000 0.000000000 5.991940000 3.089550000 0.280682000 31 38.07950000 0.000000000 0.000000000 6.899430000 3.557470000 0.323192000 32 40.54050000 0.000000000 0.000000000 7.918240000 4.082780000 0.370916000 33 43.10340000 0.000000000 0.000000000 9.061030000 4.672020000 0.424448000 34 45.77460000 0.000000000 0.000000000 10.34200000 5.332530000 0.484454000 35 48.56120000 0.000000000 0.000000000 11.77730000 6.072590000 0.551688000 36 51.47060000 0.000000000 0.000000000 13.38510000 6.901580000 0.627001000 37 54.51130000 0.000000000 0.000000000 15.18590000 7.830130000 0.711358000 38 57.69230000 0.000000000 0.000000000 17.20330000 8.870320000 0.805858000 39 61.02360000 0.000000000 0.000000000 19.46380000 10.03590000 0.911750000 40 64.51610000 0.000000000 0.000000000 21.99810000 11.34260000 1.030460000 41 68.18180000 0.000000000 0.000000000 24.84080000 12.80840000 1.163630000 42 72.03390000 0.000000000 0.000000000 28.03230000 14.45390000 1.313120000 43 76.08700000 0.000000000 0.000000000 31.61850000 16.30300000 1.481110000 44 80.35710000 0.000000000 0.000000000 35.65280000 18.38320000 1.670090000 45 84.86240000 0.000000000 0.000000000 40.19710000 20.72630000 1.882960000 46 89.62260000 0.000000000 0.000000000 45.32330000 23.36950000 2.123090000 47 87.81160000 0.000000000 24.81720000 44.21160000 22.69470000 6.654960000 48 67.84020000 0.000000000 25.31380000 25.48520000 13.03450000 5.981880000 49 100.0000000 0.000000000 27.25710000 58.75130000 30.16840000 8.385960000 50 100.0000000 0.000000000 45.78680000 61.04900000 31.08740000 20.48770000 51 100.0000000 67.08540000 77.34540000 76.08080000 60.08950000 61.98120000 52 14.70590000 0.000000000 0.000000000 0.851327000 0.438959000 0.039878900 53 8.793970000 8.793970000 8.793970000 0.452861000 0.476451000 0.518850000 54 0.000000000 2.336450000 0.000000000 0.004792060 0.016202800 0.001825460 55 0.000000000 0.000000000 8.793970000 0.089672400 0.035867500 0.472304000 56 0.000000000 4.807690000 0.000000000 0.023426900 0.079210400 0.008924080 57 0.000000000 6.097560000 0.000000000 0.039510800 0.133593000 0.015051000 58 0.000000000 7.425740000 0.000000000 0.060944400 0.206064000 0.023215800 59 0.000000000 8.793970000 0.000000000 0.088400600 0.298898000 0.033674800 60 0.000000000 14.70590000 0.000000000 0.273876000 0.926025000 0.104329000 61 0.000000000 17.95580000 0.000000000 0.424871000 1.436560000 0.161848000 62 0.000000000 19.66290000 0.000000000 0.518801000 1.754160000 0.197629000 63 0.000000000 21.42860000 0.000000000 0.626803000 2.119330000 0.238771000 64 0.000000000 23.25580000 0.000000000 0.750391000 2.537210000 0.285849000 65 0.000000000 25.14790000 0.000000000 0.891244000 3.013460000 0.339505000 66 0.000000000 27.10840000 0.000000000 1.051230000 3.554390000 0.400448000 67 0.000000000 29.14110000 0.000000000 1.232410000 4.167000000 0.469467000 68 11.38760000 27.16980000 0.000000000 1.541590000 3.822230000 0.425167000 69 0.000000000 33.43950000 0.000000000 1.667890000 5.639420000 0.635354000 70 0.000000000 35.71430000 0.000000000 1.927640000 6.517690000 0.734302000 71 0.000000000 38.07950000 0.000000000 2.219580000 7.504810000 0.845514000 72 0.000000000 40.54050000 0.000000000 2.547340000 8.613010000 0.970368000 73 0.000000000 43.10340000 0.000000000 2.914980000 9.856070000 1.110410000 74 0.000000000 45.77460000 0.000000000 3.327080000 11.24950000 1.267400000 75 0.000000000 48.56120000 0.000000000 3.788820000 12.81070000 1.443290000 76 0.000000000 51.47060000 0.000000000 4.306050000 14.55950000 1.640320000 77 0.000000000 54.51130000 0.000000000 4.885390000 16.51840000 1.861010000 78 0.000000000 57.69230000 0.000000000 5.534390000 18.71280000 2.108240000 79 0.000000000 61.02360000 0.000000000 6.261620000 21.17170000 2.385260000 80 0.000000000 64.51610000 0.000000000 7.076890000 23.92820000 2.695830000 81 0.000000000 68.18180000 0.000000000 7.991430000 27.02050000 3.044210000 82 0.000000000 72.03390000 0.000000000 9.018120000 30.49190000 3.435310000 83 0.000000000 76.08700000 0.000000000 10.17180000 34.39280000 3.874790000 84 0.000000000 80.35710000 0.000000000 11.46970000 38.78110000 4.369190000 85 0.000000000 89.62260000 0.000000000 14.58070000 49.30010000 5.554300000 86 0.000000000 94.66020000 0.000000000 16.44410000 55.60050000 6.264120000 87 0.000000000 100.0000000 0.000000000 18.55340000 62.73240000 7.067620000 88 42.19890000 100.0000000 70.68200000 35.97600000 70.70120000 53.68810000 89 43.42190000 100.0000000 100.0000000 46.58260000 75.00850000 106.6250000 90 0.000000000 13.15790000 0.000000000 0.214448000 0.725087000 0.081690500 91 7.877280000 7.877280000 7.877280000 0.355486000 0.374004000 0.407287000 92 0.000000000 0.000000000 2.336450000 0.004861000 0.001944320 0.025602800 93 0.000000000 0.000000000 3.554500000 0.012231300 0.004892320 0.064422100 94 0.000000000 0.000000000 4.807690000 0.023763900 0.009505170 0.125164000 95 0.000000000 0.000000000 6.097560000 0.040079300 0.016031100 0.211097000 96 0.000000000 0.000000000 7.425740000 0.061821100 0.024727500 0.325611000 97 8.333330000 8.333330000 8.333330000 0.402325000 0.423283000 0.460951000 98 0.000000000 0.000000000 13.15790000 0.217533000 0.087009700 1.145740000 99 8.634310000 0.000000000 14.64960000 0.539420000 0.246279000 1.463340000 100 0.000000000 0.000000000 14.70590000 0.277816000 0.111122000 1.463260000 101 0.000000000 12.93730000 20.39370000 0.776863000 0.926708000 3.082170000 102 0.000000000 7.581490000 17.94020000 0.493952000 0.387746000 2.289950000 103 0.000000000 0.000000000 23.25580000 0.761187000 0.304462000 4.009160000 104 10.19960000 0.000000000 22.03090000 1.056530000 0.466619000 3.577210000 105 0.000000000 0.000000000 25.14790000 0.904066000 0.361612000 4.761710000 106 0.000000000 0.000000000 27.10840000 1.066350000 0.426523000 5.616450000 107 0.000000000 0.000000000 29.14110000 1.250140000 0.500036000 6.584470000 108 0.000000000 8.549250000 35.05150000 1.959530000 1.031460000 9.914910000 109 0.000000000 0.000000000 33.43950000 1.691880000 0.676725000 8.911120000 110 0.000000000 0.000000000 35.71430000 1.955370000 0.782116000 10.29890000 111 0.000000000 0.000000000 38.07950000 2.251510000 0.900569000 11.85870000 112 0.000000000 0.000000000 40.54050000 2.583990000 1.033550000 13.60980000 113 0.000000000 0.000000000 43.10340000 2.956920000 1.182720000 15.57400000 114 0.000000000 0.000000000 45.77460000 3.374950000 1.349920000 17.77580000 115 0.000000000 0.000000000 48.56120000 3.843330000 1.537270000 20.24280000 116 0.000000000 0.000000000 51.47060000 4.368000000 1.747130000 23.00620000 117 0.000000000 0.000000000 54.51130000 4.955680000 1.982190000 26.10150000 118 0.000000000 0.000000000 57.69230000 5.614010000 2.245510000 29.56890000 119 0.000000000 0.000000000 61.02360000 6.351700000 2.540580000 33.45440000 120 0.000000000 0.000000000 64.51610000 7.178700000 2.871360000 37.81020000 121 0.000000000 0.000000000 68.18180000 8.106400000 3.242430000 42.69630000 122 0.000000000 0.000000000 72.03390000 9.147860000 3.659000000 48.18170000 123 0.000000000 0.000000000 76.08700000 10.31820000 4.127100000 54.34560000 124 0.000000000 0.000000000 80.35710000 11.63470000 4.653690000 61.27980000 125 0.000000000 0.000000000 84.86240000 13.11770000 5.246850000 69.09060000 126 0.000000000 0.000000000 89.62260000 14.79050000 5.915970000 77.90150000 127 0.000000000 67.50750000 100.0000000 26.63900000 33.96410000 102.1050000 128 0.000000000 73.52590000 100.0000000 28.25430000 39.42590000 102.7200000 129 0.000000000 82.29630000 100.0000000 30.90750000 48.39680000 103.7310000 130 73.66590000 92.55310000 100.0000000 63.91810000 75.62670000 106.4670000 131 83.40530000 100.0000000 100.0000000 76.06860000 90.21190000 108.0070000 132 10.68380000 10.68380000 10.68380000 0.694840000 0.731036000 0.796090000 133 0.000000000 10.20410000 0.000000000 0.122603000 0.414542000 0.046703600 134 11.65800000 0.000000000 0.000000000 0.510823000 0.263389000 0.023928600 135 0.000000000 0.000000000 10.20410000 0.124367000 0.049744700 0.655038000 136 0.380518000 0.380518000 0.380518000 0.000453573 0.000477201 0.000519667 137 0.764526000 0.764526000 0.764526000 0.002104020 0.002213620 0.002410610 138 1.152070000 1.152070000 1.152070000 0.005184470 0.005454540 0.005939930 139 1.543210000 1.543210000 1.543210000 0.009860140 0.010373800 0.011296900 140 1.937980000 1.937980000 1.937980000 0.016272000 0.017119700 0.018643100 141 2.336450000 2.336450000 2.336450000 0.024548900 0.025827700 0.028126000 142 2.738650000 2.738650000 2.738650000 0.034812500 0.036626000 0.039885300 143 3.144650000 3.144650000 3.144650000 0.047181000 0.049638700 0.054056100 144 3.554500000 3.554500000 3.554500000 0.061770100 0.064987900 0.070771100 145 3.968250000 3.968250000 3.968250000 0.078694900 0.082794300 0.090162100 146 4.385960000 4.385960000 4.385960000 0.098070200 0.103179000 0.112361000 147 4.807690000 4.807690000 4.807690000 0.120012000 0.126263000 0.137499000 148 5.233490000 5.233490000 5.233490000 0.144636000 0.152170000 0.165712000 149 5.663430000 5.663430000 5.663430000 0.172061000 0.181024000 0.197133000 150 2.336450000 0.000000000 0.000000000 0.014895800 0.007680530 0.000697768 151 0.000000000 1.152070000 0.000000000 0.001012030 0.003421870 0.000385518 152 6.097560000 6.097560000 6.097560000 0.202407000 0.212951000 0.231901000 153 13.15790000 0.000000000 0.000000000 0.666598000 0.343709000 0.031225600 154 6.535950000 6.535950000 6.535950000 0.235796000 0.248080000 0.270156000 155 0.000000000 0.000000000 1.152070000 0.001026590 0.000410620 0.005407050 156 6.978650000 6.978650000 6.978650000 0.272354000 0.286542000 0.312041000 157 7.425740000 7.425740000 7.425740000 0.312207000 0.328471000 0.357701000 158 12.65270000 12.65270000 12.65270000 1.007950000 1.060450000 1.154820000 159 13.15790000 13.15790000 13.15790000 1.098580000 1.155810000 1.258660000 160 13.66840000 13.66840000 13.66840000 1.194510000 1.256730000 1.368570000 161 14.18440000 14.18440000 14.18440000 1.295920000 1.363430000 1.484760000 162 14.70590000 14.70590000 14.70590000 1.403020000 1.476110000 1.607460000 163 15.23300000 15.23300000 15.23300000 1.515990000 1.594970000 1.736900000 164 16.30430000 16.30430000 16.30430000 1.760420000 1.852120000 2.016940000 165 16.84880000 16.84880000 16.84880000 1.892300000 1.990870000 2.168040000 166 17.39930000 17.39930000 17.39930000 2.030930000 2.136720000 2.326870000 167 17.95580000 17.95580000 17.95580000 2.176540000 2.289920000 2.493700000 168 18.51850000 18.51850000 18.51850000 2.329370000 2.450710000 2.668800000 169 19.08750000 19.08750000 19.08750000 2.489680000 2.619380000 2.852470000 170 19.66290000 19.66290000 19.66290000 2.657730000 2.796170000 3.045000000 171 20.24480000 20.24480000 20.24480000 2.833780000 2.981390000 3.246710000 172 20.83330000 20.83330000 20.83330000 3.018110000 3.175330000 3.457900000 173 21.42860000 21.42860000 21.42860000 3.211000000 3.378270000 3.678900000 174 22.03070000 22.03070000 22.03070000 3.412760000 3.590540000 3.910060000 175 22.63970000 22.63970000 22.63970000 3.623700000 3.812460000 4.151730000 176 23.25580000 23.25580000 23.25580000 3.844120000 4.044370000 4.404280000 177 23.87910000 23.87910000 23.87910000 4.074370000 4.286610000 4.668070000 178 24.50980000 24.50980000 24.50980000 4.314770000 4.539540000 4.943510000 179 25.14790000 25.14790000 25.14790000 4.565690000 4.803520000 5.230990000 180 25.79370000 25.79370000 25.79370000 4.827480000 5.078960000 5.530930000 181 26.44710000 26.44710000 26.44710000 5.100540000 5.366240000 5.843780000 182 27.10840000 27.10840000 27.10840000 5.385250000 5.665780000 6.169970000 183 27.77780000 27.77780000 27.77780000 5.682010000 5.978000000 6.509980000 184 28.45530000 28.45530000 28.45530000 5.991250000 6.303350000 6.864280000 185 29.14110000 29.14110000 29.14110000 6.313420000 6.642300000 7.233390000 186 29.83540000 29.83540000 29.83540000 6.648950000 6.995310000 7.617820000 187 30.53830000 30.53830000 30.53830000 6.998330000 7.362880000 8.018100000 188 31.25000000 31.25000000 31.25000000 7.362030000 7.745540000 8.434810000 189 31.97060000 31.97060000 31.97060000 7.740570000 8.143800000 8.868510000 190 32.70040000 32.70040000 32.70040000 8.134480000 8.558220000 9.319810000 191 33.43950000 33.43950000 33.43950000 8.544290000 8.989380000 9.789340000 192 34.18800000 34.18800000 34.18800000 8.970570000 9.437870000 10.27770000 193 34.94620000 34.94620000 34.94620000 9.413920000 9.904310000 10.78570000 194 35.71430000 35.71430000 35.71430000 9.874940000 10.38940000 11.31390000 195 36.49240000 36.49240000 36.49240000 10.35430000 10.89370000 11.86310000 196 37.28070000 37.28070000 37.28070000 10.85260000 11.41790000 12.43400000 197 38.07950000 38.07950000 38.07950000 11.37050000 11.96280000 13.02740000 198 38.88890000 38.88890000 38.88890000 11.90880000 12.52920000 13.64420000 199 39.70920000 39.70920000 39.70920000 12.46830000 13.11780000 14.28510000 200 40.54050000 40.54050000 40.54050000 13.04960000 13.72940000 14.95110000 201 41.38320000 41.38320000 41.38320000 13.65360000 14.36480000 15.64310000 202 42.23740000 42.23740000 42.23740000 14.28100000 15.02500000 16.36200000 203 43.10340000 43.10340000 43.10340000 14.93290000 15.71080000 17.10890000 204 49.46050000 67.26490000 48.48920000 23.85020000 34.08270000 23.70620000 205 52.85610000 100.0000000 53.95470000 37.58880000 71.98710000 33.25130000 206 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 207 21.93140000 16.97860000 67.77670000 10.42690000 5.527620000 42.37950000 208 31.70320000 36.72790000 72.97360000 16.07330000 13.07370000 50.57180000 209 45.52700000 57.91290000 100.0000000 34.62070000 31.66760000 101.7310000 210 54.57500000 77.65050000 100.0000000 44.68250000 51.34430000 103.8920000 211 28.45310000 0.000000000 16.36850000 3.986390000 2.014790000 2.022200000 212 37.93420000 0.000000000 12.76760000 7.045270000 3.609120000 1.392820000 213 39.21870000 22.40750000 18.68820000 8.523620000 6.322060000 3.086850000 214 46.88340000 35.51580000 31.62840000 14.30200000 12.65780000 9.120060000 215 54.51130000 54.51130000 54.51130000 25.02700000 26.33070000 28.67390000 216 55.55560000 55.55560000 55.55560000 26.09350000 27.45280000 29.89580000 217 56.61580000 56.61580000 56.61580000 27.20120000 28.61820000 31.16490000 218 57.69230000 57.69230000 57.69230000 28.35170000 29.82860000 32.48300000 219 58.78550000 58.78550000 58.78550000 29.54660000 31.08580000 33.85210000 220 59.89580000 59.89580000 59.89580000 30.78780000 32.39170000 35.27420000 221 61.02360000 61.02360000 61.02360000 32.07720000 33.74810000 36.75140000 222 62.16930000 62.16930000 62.16930000 33.41650000 35.15730000 38.28590000 223 63.33330000 63.33330000 63.33330000 34.80800000 36.62120000 39.88010000 224 64.51610000 64.51610000 64.51610000 36.25370000 38.14220000 41.53640000 225 65.71820000 65.71820000 65.71820000 37.75580000 39.72250000 43.25740000 226 66.93990000 66.93990000 66.93990000 39.31660000 41.36470000 45.04570000 227 68.18180000 68.18180000 68.18180000 40.93870000 43.07130000 46.90410000 228 69.44440000 69.44440000 69.44440000 42.62450000 44.84490000 48.83560000 229 70.72830000 70.72830000 70.72830000 44.37670000 46.68840000 50.84320000 230 72.03390000 72.03390000 72.03390000 46.19820000 48.60480000 52.93010000 231 73.36180000 73.36180000 73.36180000 48.09190000 50.59720000 55.09980000 232 74.71260000 74.71260000 74.71260000 50.06090000 52.66870000 57.35570000 233 76.08700000 76.08700000 76.08700000 52.10840000 54.82290000 59.70150000 234 77.48540000 77.48540000 77.48540000 54.23790000 57.06330000 62.14130000 235 78.90860000 78.90860000 78.90860000 56.45290000 59.39370000 64.67910000 236 80.35710000 80.35710000 80.35710000 58.75720000 61.81800000 67.31910000 237 81.83180000 81.83180000 81.83180000 61.15470000 64.34040000 70.06600000 238 83.33330000 83.33330000 83.33330000 63.64970000 66.96530000 72.92450000 239 84.86240000 84.86240000 84.86240000 66.24640000 69.69730000 75.89960000 240 86.41980000 86.41980000 86.41980000 68.94950000 72.54120000 78.99660000 241 88.00620000 88.00620000 88.00620000 71.76390000 75.50220000 82.22110000 242 89.62260000 89.62260000 89.62260000 74.69460000 78.58560000 85.57890000 243 91.26980000 91.26980000 91.26980000 77.74710000 81.79710000 89.07610000 244 92.94870000 92.94870000 92.94870000 80.92700000 85.14260000 92.71940000 245 94.66020000 94.66020000 94.66020000 84.24030000 88.62850000 96.51550000 246 96.40520000 96.40520000 96.40520000 87.69330000 92.26150000 100.4720000 247 0.000000000 20.05800000 77.42050000 11.26210000 6.120460000 56.66890000 248 0.000000000 24.80130000 100.0000000 19.68480000 10.45070000 99.45570000 249 0.000000000 33.04620000 100.0000000 20.44540000 13.02240000 99.74550000 250 33.23480000 34.71100000 100.0000000 25.74580000 16.28700000 100.0560000 251 0.000000000 19.63500000 42.41970000 3.371920000 2.890540000 15.23290000 252 0.000000000 30.00680000 76.09260000 11.63420000 8.571870000 54.85520000 253 0.000000000 69.03380000 76.62350000 18.69150000 31.95990000 58.32050000 254 0.000000000 49.00830000 63.91290000 10.89790000 15.88420000 38.50970000 255 0.000000000 54.25670000 100.0000000 23.65570000 23.87710000 100.9680000 256 41.66580000 62.87190000 100.0000000 33.91630000 34.47160000 102.0670000 257 0.000000000 26.78230000 30.17520000 2.373400000 4.000920000 7.499220000 258 0.000000000 31.76760000 40.49930000 4.068190000 6.069130000 14.14700000 259 0.000000000 44.12370000 40.20630000 5.606240000 11.39130000 14.53330000 260 22.73250000 93.17430000 100.0000000 36.92080000 62.37100000 105.2800000 261 22.31670000 100.0000000 100.0000000 39.50410000 71.35870000 106.2940000 262 0.000000000 0.000000000 94.66020000 16.68070000 6.672000000 87.85700000 263 0.000000000 0.000000000 100.0000000 18.82030000 7.527820000 99.12640000 264 100.0000000 26.12530000 100.0000000 77.46160000 40.54160000 102.1970000 265 52.46910000 52.46910000 52.46910000 23.01130000 24.21000000 26.36440000 266 53.48260000 53.48260000 53.48260000 24.00010000 25.25030000 27.49730000 267 38.93650000 65.99410000 34.88420000 16.54070000 29.62900000 12.95270000 268 61.51970000 100.0000000 33.73890000 40.09230000 73.63870000 17.08330000 269 83.21900000 100.0000000 35.15080000 58.94650000 83.34150000 18.81620000 270 30.17060000 36.59300000 0.000000000 6.168300000 9.007540000 0.968309000 271 50.74840000 49.45080000 0.000000000 16.91870000 20.02290000 2.109900000 272 68.04880000 73.43480000 0.000000000 34.14280000 44.56480000 4.742590000 273 81.39500000 100.0000000 0.000000000 55.22670000 81.64180000 8.785520000 274 86.59260000 100.0000000 83.40000000 73.20070000 89.44950000 75.53530000 275 69.66530000 57.28650000 47.65010000 35.18070000 33.32830000 22.71270000 276 100.0000000 64.74640000 49.89620000 68.88420000 55.48490000 26.90550000 277 47.61740000 23.80130000 0.000000000 12.06950000 8.486010000 0.829187000 278 54.66390000 32.36350000 0.000000000 16.83170000 13.12650000 1.307010000 279 62.50080000 34.88320000 47.49180000 26.00510000 18.23050000 20.93360000 280 81.12660000 34.08490000 100.0000000 56.96770000 32.18200000 101.4950000 281 27.92200000 0.000000000 40.45780000 6.059640000 2.827000000 13.71220000 282 36.11400000 0.000000000 56.55730000 11.51440000 5.315590000 28.59230000 283 57.98760000 0.000000000 75.72770000 27.60880000 13.05480000 54.59790000 284 88.34440000 0.000000000 79.88550000 55.39880000 27.23660000 62.54870000 285 30.97860000 15.39940000 29.41460000 5.961460000 3.794790000 7.041880000 286 58.47540000 34.86200000 27.52370000 20.65160000 15.75880000 7.333850000 287 74.14470000 73.97910000 50.66240000 43.65150000 49.42120000 27.26110000 288 74.64730000 100.0000000 53.86140000 53.69770000 80.29530000 33.90980000 289 76.36760000 62.81220000 36.12860000 40.55350000 39.79820000 14.59840000 290 100.0000000 76.81310000 42.40250000 70.91080000 65.99630000 21.68060000 291 100.0000000 61.45650000 33.40620000 65.72000000 51.91540000 14.01580000 292 100.0000000 80.72670000 68.38190000 77.41690000 72.17450000 50.08740000 293 100.0000000 87.59170000 89.27660000 86.20120000 82.47910000 85.22420000 294 100.0000000 100.0000000 93.21760000 92.35220000 98.91960000 94.70850000 295 46.73050000 31.22270000 100.0000000 31.07760000 17.95810000 100.1800000 296 66.01730000 42.28060000 100.0000000 44.75380000 28.90600000 101.2750000 297 100.0000000 43.24650000 100.0000000 79.42870000 47.19270000 102.9470000 298 100.0000000 57.18940000 100.0000000 81.92120000 55.62050000 103.8960000 299 100.0000000 78.16830000 100.0000000 87.28620000 73.76030000 105.9400000 300 27.57640000 53.54660000 0.000000000 8.090300000 17.63180000 1.948290000 301 45.25830000 63.47420000 0.000000000 16.91520000 28.28770000 3.073520000 302 48.57160000 100.0000000 0.000000000 30.33630000 68.80790000 7.619570000 303 60.04070000 100.0000000 0.000000000 37.33440000 72.41620000 7.947380000 304 100.0000000 100.0000000 48.93730000 80.13460000 94.03270000 30.35840000 305 100.0000000 100.0000000 61.92730000 82.78590000 95.09320000 44.32270000 306 100.0000000 100.0000000 74.54440000 86.08920000 96.41440000 61.72120000 307 0.000000000 31.25000000 0.000000000 1.437100000 4.859110000 0.547442000 308 0.000000000 84.86240000 0.000000000 12.93160000 43.72410000 4.926090000 309 45.90720000 100.0000000 19.01340000 29.45020000 68.29450000 10.12960000 310 0.000000000 16.00620000 14.45860000 0.597622000 1.222760000 1.535400000 311 0.000000000 13.87090000 17.04440000 0.625169000 0.968046000 2.116010000 312 14.56380000 15.95840000 27.82150000 2.290160000 1.989660000 6.110410000 313 15.34290000 19.48840000 29.23630000 2.702410000 2.705600000 6.869440000 314 45.77460000 45.77460000 45.77460000 17.04410000 17.93190000 19.52770000 315 46.69030000 46.69030000 46.69030000 17.80290000 18.73030000 20.39710000 316 48.84070000 87.47880000 100.0000000 44.57190000 60.42130000 104.9510000 317 0.000000000 26.88270000 63.74430000 8.023250000 6.285980000 37.21560000 318 0.000000000 40.34880000 65.57910000 9.962300000 11.50010000 40.15400000 319 0.000000000 68.25040000 65.92260000 15.53650000 30.09110000 42.69760000 320 11.65800000 11.65800000 11.65800000 0.841856000 0.885710000 0.964528000 321 16.30430000 0.000000000 0.000000000 1.068190000 0.550777000 0.050037500 322 94.66020000 0.000000000 0.000000000 51.11550000 26.35600000 2.394420000 323 100.0000000 0.000000000 0.000000000 57.67210000 29.73670000 2.701550000 324 100.0000000 60.56250000 0.000000000 63.83010000 50.55820000 5.047350000 325 100.0000000 70.03590000 0.000000000 66.14920000 58.39950000 5.930780000 326 98.18480000 98.18480000 98.18480000 91.29280000 96.04850000 104.5960000 327 31.46740000 45.81860000 39.18570000 10.26770000 14.57110000 14.11210000 328 30.47930000 61.65450000 62.16070000 17.24820000 26.48210000 37.47850000 329 37.28180000 57.96900000 66.35140000 19.81400000 25.36040000 42.65500000 330 48.97970000 74.21430000 76.57130000 32.09420000 42.93200000 59.33970000 331 0.000000000 0.000000000 11.65800000 0.166698000 0.066676700 0.877999000 332 0.000000000 3.554500000 0.000000000 0.012057800 0.040769700 0.004593240 333 9.729270000 9.729270000 9.729270000 0.565588000 0.595051000 0.648004000 334 62.57230000 47.44110000 0.000000000 24.16600000 22.77440000 2.334510000 335 77.34730000 71.59350000 0.000000000 41.67900000 46.98620000 4.924890000 336 89.23330000 70.96100000 0.000000000 53.61680000 52.64880000 5.426640000 337 20.79350000 9.957850000 0.000000000 1.939830000 1.333160000 0.129686000 338 37.15700000 29.76390000 0.000000000 7.828250000 7.736050000 0.798038000 339 48.70280000 60.15330000 30.16240000 19.26840000 27.16430000 9.968980000 340 23.26070000 27.49300000 17.57510000 3.829070000 5.033930000 2.687840000 341 46.85370000 45.02680000 25.47170000 15.02430000 16.83400000 6.629780000 342 100.0000000 44.37260000 32.58870000 62.37780000 40.88180000 12.30530000 343 53.76030000 16.00820000 0.000000000 15.05970000 8.710850000 0.815715000 344 79.94610000 42.35690000 0.000000000 38.05800000 27.66160000 2.719920000 345 100.0000000 50.68020000 0.000000000 61.83400000 43.80910000 4.286980000 346 100.0000000 85.08590000 37.54250000 72.86100000 74.58740000 19.15020000 347 100.0000000 84.84940000 62.87090000 77.38160000 76.15890000 43.34800000 348 100.0000000 86.16900000 100.0000000 89.86590000 82.48290000 106.9220000 349 15.47010000 0.000000000 41.43820000 3.663160000 1.575250000 14.32600000 350 13.68960000 36.98560000 66.48000000 10.47710000 10.48090000 41.21470000 351 34.47550000 66.47570000 100.0000000 31.92290000 35.94240000 102.2650000 352 36.05180000 79.60550000 100.0000000 36.17260000 48.66980000 103.6930000 353 0.000000000 54.20180000 33.16110000 6.485670000 16.97730000 10.58670000 354 0.000000000 100.0000000 55.46350000 23.70150000 64.79150000 34.18240000 355 0.000000000 100.0000000 77.52060000 29.30400000 67.03240000 63.69080000 356 0.000000000 100.0000000 100.0000000 37.37370000 70.26020000 106.1940000 357 34.76440000 42.94000000 27.98960000 9.681820000 13.14340000 7.391500000 358 43.98150000 43.98150000 43.98150000 15.61010000 16.42320000 17.88470000 359 44.87180000 44.87180000 44.87180000 16.31350000 17.16330000 18.69060000 360 51.54530000 32.55160000 68.44940000 23.17640000 15.50950000 44.29350000 361 72.69860000 33.24780000 72.95800000 39.65920000 24.08050000 51.51890000 362 100.0000000 35.25890000 77.98700000 70.43940000 40.43020000 60.79040000 363 36.32290000 0.000000000 31.82710000 7.736440000 3.813560000 8.284720000 364 49.43870000 0.000000000 36.66070000 14.32160000 7.144960000 11.48250000 365 56.61380000 0.000000000 48.49850000 20.33640000 10.04260000 20.95850000 366 66.43310000 0.000000000 59.09380000 29.37950000 14.46420000 32.27070000 367 100.0000000 0.000000000 76.36580000 68.07360000 33.89720000 57.48610000 368 100.0000000 0.000000000 100.0000000 76.49240000 37.26460000 101.8280000 369 0.000000000 69.72800000 29.15720000 9.647070000 28.88710000 9.790570000 370 0.000000000 84.89230000 33.74660000 14.66790000 44.44850000 14.02200000 371 0.000000000 100.0000000 33.92320000 20.29960000 63.43080000 16.26470000 372 0.000000000 36.02790000 20.38220000 2.534600000 6.872040000 3.748300000 373 29.41750000 37.03620000 45.43730000 9.319760000 10.40490000 18.46760000 374 49.51690000 49.51690000 49.51690000 20.25950000 21.31490000 23.21170000 375 50.48660000 50.48660000 50.48660000 21.14230000 22.24370000 24.22310000 376 51.47060000 51.47060000 51.47060000 22.05910000 23.20820000 25.27350000 377 78.65870000 54.54670000 67.70190000 46.89030000 37.27400000 45.49520000 378 78.96910000 76.36770000 100.0000000 63.38730000 59.89230000 104.6400000 379 80.95670000 83.27780000 100.0000000 67.46730000 68.16270000 105.5500000 380 15.00500000 34.41730000 0.000000000 2.666900000 6.467290000 0.718615000 381 22.72780000 44.10800000 0.000000000 5.284140000 11.51180000 1.272010000 382 22.19700000 74.49020000 0.000000000 11.81360000 33.91100000 3.796830000 383 36.40790000 100.0000000 0.000000000 24.80430000 65.95540000 7.360430000 384 90.20110000 100.0000000 73.92710000 74.20740000 90.30870000 60.23150000 385 51.88050000 41.50000000 62.08520000 22.89970000 18.72950000 36.40720000 386 54.02700000 47.19340000 69.84710000 26.99720000 23.12770000 47.07630000 387 55.22590000 14.82510000 31.29680000 17.36860000 9.585290000 8.541620000 388 100.0000000 22.63560000 43.21470000 61.35290000 33.31690000 18.63350000 389 100.0000000 34.47110000 55.64880000 64.64120000 37.84020000 30.69520000 390 100.0000000 50.25180000 55.85830000 66.98600000 45.64030000 31.79870000 391 100.0000000 53.43380000 73.28610000 71.84880000 49.34590000 54.52550000 392 0.000000000 0.000000000 17.95580000 0.430983000 0.172386000 2.269980000 393 0.000000000 0.000000000 16.30430000 0.348586000 0.139429000 1.836000000 394 0.000000000 0.000000000 19.66290000 0.526265000 0.210498000 2.771830000 395 0.000000000 0.000000000 21.42860000 0.635821000 0.254318000 3.348860000 396 0.000000000 0.000000000 31.25000000 1.457780000 0.583088000 7.678110000 397 0.000000000 18.57950000 34.60020000 2.281740000 2.278070000 9.780040000 398 37.66800000 48.50020000 72.48300000 19.78870000 19.95820000 50.59960000 399 63.17460000 50.16370000 100.0000000 43.89420000 32.11700000 101.6600000 400 75.57350000 53.89580000 100.0000000 54.73630000 39.70090000 102.4010000 401 0.000000000 51.97610000 16.39990000 4.752700000 15.01710000 3.535690000 402 0.000000000 100.0000000 19.56680000 19.07400000 62.94060000 9.809730000 403 31.25770000 100.0000000 39.75120000 25.49760000 66.02680000 20.31080000 404 0.000000000 16.30430000 0.000000000 0.343642000 1.161920000 0.130905000 405 0.000000000 11.65800000 0.000000000 0.164334000 0.555644000 0.062600500 406 12.15280000 12.15280000 12.15280000 0.922432000 0.970483000 1.056850000 407 13.61900000 17.17490000 0.000000000 1.104350000 1.673490000 0.180453000 408 23.67580000 28.25310000 0.000000000 3.577520000 5.143820000 0.552228000 409 84.57740000 31.73820000 0.000000000 41.38780000 25.60120000 2.435510000 410 100.0000000 37.49290000 0.000000000 59.81720000 36.98970000 3.518680000 411 33.21140000 0.000000000 88.16290000 19.37290000 8.339410000 75.37740000 412 41.98140000 0.000000000 100.0000000 27.37070000 11.93650000 99.52700000 413 57.36930000 0.000000000 100.0000000 35.81250000 16.28930000 99.92240000 414 71.95550000 0.000000000 100.0000000 46.78550000 21.94720000 100.4360000 415 72.13000000 100.0000000 100.0000000 65.48830000 84.75660000 107.5110000 416 0.000000000 28.56560000 20.12220000 1.733190000 4.209630000 3.365520000 417 0.000000000 70.80420000 49.79750000 12.74480000 30.98350000 24.70120000 418 0.000000000 79.51880000 61.69290000 17.71410000 40.49910000 38.53620000 419 15.76580000 15.76580000 15.76580000 1.635060000 1.720230000 1.873310000 420 11.16840000 11.16840000 11.16840000 0.766047000 0.805952000 0.877673000 421 21.73970000 0.000000000 22.23700000 2.700900000 1.312870000 3.727220000 422 73.94690000 0.000000000 48.71890000 33.56640000 16.85980000 21.77870000 423 82.05620000 71.10890000 100.0000000 64.91750000 56.41410000 104.2140000 424 0.000000000 76.97930000 41.18780000 13.11160000 36.35630000 18.06770000 425 0.000000000 88.59700000 48.19670000 17.99650000 49.57990000 25.32570000 426 0.000000000 100.0000000 65.47300000 25.96830000 65.69830000 46.12210000 427 0.000000000 100.0000000 88.45570000 32.92370000 68.48030000 82.75570000 428 18.82910000 66.46770000 55.53380000 14.18470000 28.36980000 30.13750000 429 24.07220000 85.90470000 70.48130000 24.51970000 49.69920000 51.10530000 430 32.28160000 100.0000000 76.80830000 33.88580000 69.41990000 62.77760000 431 39.48200000 100.0000000 93.26790000 42.16990000 73.04250000 92.45770000 432 29.01120000 75.87640000 71.45860000 22.89140000 39.73470000 51.36850000 433 62.55460000 76.36070000 100.0000000 49.62680000 52.79120000 103.9950000 434 71.37580000 77.66810000 100.0000000 56.93490000 57.67710000 104.4670000 435 14.65910000 0.000000000 16.52230000 1.204290000 0.579452000 1.930020000 436 13.07190000 18.26110000 12.63610000 1.296990000 1.909230000 1.246920000 437 32.66130000 17.92490000 12.67820000 5.546620000 4.049640000 1.447720000 438 39.45810000 36.81440000 58.12390000 15.22810000 13.09690000 31.19210000 439 50.76570000 50.08020000 59.91660000 23.14070000 22.84430000 34.28690000 440 62.76560000 57.88210000 68.45220000 34.45850000 32.79590000 46.16300000 441 39.29150000 0.000000000 26.81190000 8.432500000 4.227590000 5.828490000 442 48.40830000 0.000000000 28.21070000 12.86000000 6.496220000 6.678840000 443 60.23410000 85.80290000 34.49970000 33.97530000 55.27420000 15.47730000 444 79.70430000 89.14160000 62.40150000 56.09950000 69.44480000 42.26740000 445 81.58210000 100.0000000 66.09670000 62.98350000 84.76590000 48.67150000 446 37.42680000 35.54420000 22.40130000 9.250580000 10.15480000 4.730070000 447 60.39040000 48.10630000 23.54130000 23.51550000 22.66930000 6.422980000 448 62.91340000 58.15260000 26.06250000 27.42400000 30.16590000 8.271290000 449 79.00360000 65.29300000 25.34690000 42.53090000 42.64350000 9.221550000 450 100.0000000 84.62970000 51.39680000 74.88010000 74.93920000 30.53170000 451 100.0000000 92.90590000 60.50970000 79.68810000 85.59000000 41.55110000 452 100.0000000 92.41150000 70.27160000 81.93220000 85.93880000 54.27030000 453 33.70640000 42.18190000 42.65110000 10.94480000 13.27460000 16.52290000 454 39.84780000 49.13670000 48.61570000 15.36480000 18.61900000 22.13120000 455 60.39080000 61.12640000 54.52600000 30.26610000 33.04190000 29.40210000 456 62.13230000 67.97750000 60.15960000 34.34450000 39.74610000 36.39420000 457 77.82340000 75.98700000 62.83020000 50.14220000 54.13490000 41.09130000 458 19.74500000 31.15170000 0.000000000 3.054680000 5.664720000 0.619898000 459 33.81710000 33.52400000 0.000000000 6.991330000 8.410900000 0.887825000 460 43.23030000 38.32820000 0.000000000 11.37140000 12.31530000 1.284900000 461 100.0000000 44.88310000 12.31540000 61.04640000 40.58520000 4.905860000 462 100.0000000 61.29760000 17.21600000 64.38860000 51.27510000 7.179790000 463 100.0000000 69.17780000 17.53490000 66.33150000 57.79640000 7.999020000 464 23.37680000 29.40000000 56.55840000 8.990150000 7.614970000 28.89510000 465 24.05590000 49.61270000 60.29250000 12.66980000 17.19840000 34.20980000 466 22.73690000 49.68510000 67.10590000 14.03170000 17.74730000 42.85030000 467 29.33030000 40.85520000 80.00630000 18.00010000 15.37340000 61.86190000 468 27.52300000 42.93880000 100.0000000 25.08950000 19.04330000 100.3860000 469 28.86080000 0.000000000 21.84720000 4.413740000 2.199080000 3.670100000 470 37.90290000 0.000000000 20.18860000 7.386980000 3.744370000 3.257330000 471 46.52430000 0.000000000 19.93260000 11.26040000 5.743370000 3.358210000 472 79.84400000 42.39390000 55.14720000 43.04820000 29.66220000 29.49310000 473 85.59140000 73.83360000 57.51820000 56.05830000 55.54290000 34.91870000 474 29.13840000 23.27210000 24.94020000 5.469360000 4.871060000 5.141350000 475 28.59240000 25.47010000 33.06810000 6.241390000 5.653700000 9.216170000 476 44.05770000 42.44400000 34.32380000 14.11770000 15.14670000 10.95640000 477 71.67910000 47.15160000 46.92730000 34.84540000 27.73080000 21.42680000 478 76.12790000 48.61080000 75.92010000 45.72170000 33.26910000 57.01330000 479 86.76560000 56.89920000 100.0000000 66.39520000 47.44190000 103.1490000 480 21.51550000 14.94890000 20.66930000 2.837050000 2.208540000 3.293690000 481 24.59010000 13.09910000 19.37150000 3.358640000 2.281380000 2.886710000 482 32.57300000 11.14450000 16.92030000 5.420680000 3.177760000 2.277940000 483 45.13630000 0.000000000 42.84000000 12.94480000 6.337240000 15.83520000 484 54.41580000 0.000000000 55.79680000 20.34380000 9.886440000 28.18300000 485 17.17630000 7.342380000 8.716110000 1.345250000 0.853824000 0.541915000 486 45.86620000 0.000000000 11.17330000 10.53940000 5.416740000 1.286300000 487 74.29880000 0.000000000 21.34370000 30.63750000 15.72440000 4.725380000 488 78.02580000 35.73340000 64.48080000 42.51750000 26.62390000 40.06520000 489 81.65890000 35.01960000 73.88120000 48.45320000 29.15520000 53.37430000 490 20.12060000 100.0000000 57.00000000 25.71670000 65.79370000 35.94120000 491 18.69740000 100.0000000 69.64470000 28.49090000 66.87410000 51.87210000 492 17.84480000 100.0000000 81.94050000 32.00100000 68.26190000 71.09530000 493 29.69610000 100.0000000 88.60890000 36.97160000 70.56110000 83.23140000 494 19.37230000 33.98540000 29.04760000 4.530390000 7.145110000 7.269620000 495 16.06370000 37.23600000 35.07670000 5.026140000 8.428870000 10.75220000 496 18.59510000 100.0000000 33.51160000 21.67960000 64.14780000 16.08790000 497 0.000000000 59.14810000 61.64380000 12.34070000 22.36460000 36.43360000 498 0.000000000 61.44370000 76.71380000 16.86280000 25.69580000 57.75660000 499 0.000000000 34.68510000 72.95680000 11.21520000 9.874640000 50.23840000 500 0.000000000 44.49790000 87.63930000 17.20660000 16.20280000 75.35140000 501 0.000000000 57.55430000 87.65720000 19.59190000 24.24880000 76.29090000 502 16.54880000 24.18770000 40.65920000 4.522490000 4.375500000 14.06100000 503 21.02790000 21.58560000 44.05300000 5.608190000 4.358190000 16.66880000 504 28.02710000 44.24890000 50.08830000 10.71840000 13.89990000 23.01030000 505 60.02030000 47.51590000 53.31400000 27.09820000 23.77640000 27.11220000 506 62.92580000 47.31960000 63.62480000 31.36460000 25.62300000 39.00960000 507 85.04890000 71.76980000 66.67750000 57.05540000 54.16040000 45.95180000 508 100.0000000 78.73130000 79.97890000 80.15220000 71.41870000 67.52600000 509 8.994400000 10.95870000 0.000000000 0.432180000 0.633848000 0.068163400 510 8.596750000 0.000000000 8.024070000 0.334725000 0.164113000 0.398358000 511 0.000000000 10.97260000 11.17400000 0.295686000 0.547060000 0.854605000 512 0.000000000 7.184060000 9.308790000 0.158291000 0.232250000 0.556841000 513 37.52180000 76.54890000 17.15190000 17.37700000 38.45340000 6.292060000 514 56.33900000 100.0000000 18.37580000 35.33520000 71.33290000 10.22090000 515 25.58930000 58.73000000 29.15820000 9.885850000 21.44580000 8.920310000 516 29.92190000 77.79780000 52.59200000 19.32190000 40.04190000 28.38220000 517 43.10660000 92.55820000 78.77920000 35.85240000 62.04920000 65.05130000 518 79.79130000 94.07540000 82.71360000 63.72280000 77.90670000 73.12510000 519 100.0000000 55.93050000 39.40830000 65.26950000 48.18690000 17.45870000 520 100.0000000 68.75580000 44.37290000 68.96400000 58.52070000 22.40300000 521 100.0000000 76.59010000 54.55820000 72.95750000 66.61760000 32.78380000 522 24.51050000 25.07110000 14.22820000 3.761900000 4.446620000 1.820630000 523 23.14410000 24.46620000 58.39480000 8.912380000 6.332830000 30.79420000 524 24.31520000 13.27040000 37.02800000 4.908170000 2.912070000 11.35420000 525 21.98100000 15.43040000 43.73090000 5.417370000 3.312700000 16.28950000 526 19.71550000 20.56390000 49.79980000 6.256920000 4.397040000 21.68980000 527 52.93870000 25.66090000 50.53250000 19.36570000 12.17010000 23.11610000 528 49.38240000 22.01420000 37.65200000 15.08120000 9.428040000 12.39370000 529 74.09560000 25.57890000 49.14610000 34.69810000 20.08580000 22.53250000 530 86.67530000 25.17100000 90.24730000 58.02100000 30.73910000 81.41330000 531 100.0000000 34.79880000 89.47550000 74.22990000 41.78720000 81.01560000 532 34.45150000 51.44320000 0.000000000 9.836870000 17.39690000 1.897720000 533 51.97630000 56.20760000 0.000000000 18.90200000 24.72160000 2.631390000 534 56.77340000 66.11530000 0.000000000 24.07490000 33.81470000 3.622880000 535 57.25940000 82.79720000 0.000000000 29.17030000 50.14270000 5.458910000 536 48.68120000 76.33350000 56.79930000 27.51060000 42.91380000 33.02880000 537 48.03260000 80.57900000 66.92320000 30.81760000 48.05740000 45.91640000 538 16.82430000 12.15900000 21.73020000 1.980480000 1.461910000 3.575680000 539 16.79960000 0.000000000 53.52080000 5.900650000 2.492080000 25.12330000 540 22.21200000 0.000000000 100.0000000 20.92880000 8.614990000 99.22520000 541 33.87290000 12.31300000 100.0000000 24.33910000 10.90450000 99.44690000 542 43.39490000 42.11730000 100.0000000 30.78690000 21.63660000 100.6130000 543 31.50840000 54.20840000 67.69170000 17.35350000 21.85400000 44.07560000 544 37.53610000 53.83050000 76.03080000 21.73840000 23.63530000 56.38090000 545 56.78850000 53.49700000 77.45970000 32.03590000 28.71020000 59.08940000 546 65.50110000 59.67170000 83.23250000 41.27390000 36.90850000 69.54170000 547 73.58620000 74.87170000 90.96880000 54.47940000 54.45720000 85.61410000 548 20.09370000 34.27510000 24.96970000 4.342340000 7.182090000 5.437810000 549 24.65880000 49.36080000 33.12570000 8.237810000 15.31010000 10.34860000 550 34.84030000 63.17480000 39.89600000 14.92600000 26.77130000 15.97840000 551 54.10300000 100.0000000 42.53630000 36.36230000 71.58290000 22.89420000 552 68.07050000 100.0000000 70.51330000 52.03360000 78.98610000 54.20020000 553 26.70340000 40.17820000 57.40490000 11.21150000 12.29560000 30.34550000 554 30.05500000 65.68340000 80.61120000 23.17730000 31.69090000 64.70300000 555 0.000000000 24.67190000 33.44220000 2.546740000 3.566260000 9.238220000 556 0.000000000 25.15600000 39.68250000 3.357100000 4.001630000 13.32410000 557 70.63190000 28.33880000 53.79410000 32.81880000 19.68660000 27.05130000 558 85.37040000 27.72590000 65.27710000 49.19900000 27.68140000 41.12650000 559 100.0000000 93.61050000 87.44080000 87.72800000 89.59410000 82.60530000 560 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 561 64.65240000 58.36290000 37.17400000 29.91270000 31.44390000 14.44520000 562 66.30230000 83.64720000 41.99230000 38.67950000 55.52030000 20.57120000 563 70.83630000 100.0000000 42.18200000 48.39060000 77.79090000 23.18450000 564 28.26790000 31.26090000 12.90440000 5.229580000 6.793640000 1.813460000 565 36.96000000 31.18590000 16.77940000 8.263160000 8.317260000 2.803350000 566 46.81940000 36.77730000 17.67900000 13.34080000 12.72240000 3.486070000 567 73.77860000 37.88750000 26.45020000 32.75240000 23.06090000 7.541130000 568 89.84530000 57.27100000 27.75030000 52.13990000 42.36000000 10.12230000 569 100.0000000 78.08130000 28.70180000 69.64850000 66.62690000 13.17140000 570 100.0000000 91.55430000 33.65730000 74.66910000 82.09040000 17.56180000 571 100.0000000 100.0000000 35.62030000 78.16950000 93.24670000 20.00860000 572 29.35430000 100.0000000 26.13600000 23.43020000 65.13320000 12.43280000 573 31.37600000 100.0000000 64.01330000 30.11650000 67.87860000 44.44380000 574 15.00180000 14.08520000 0.000000000 1.138560000 1.300860000 0.136555000 575 12.18550000 8.539980000 0.000000000 0.645915000 0.570550000 0.057947000 576 0.000000000 12.85750000 8.241780000 0.281581000 0.720276000 0.487171000 577 29.26060000 84.06430000 37.73920000 18.73870000 45.70100000 16.63280000 578 40.67540000 87.05420000 51.03560000 25.94100000 52.07370000 28.16460000 579 12.17660000 21.86260000 14.63010000 1.491870000 2.614590000 1.722590000 580 0.000000000 21.68460000 10.91970000 0.787752000 2.233170000 1.005430000 581 0.000000000 48.73210000 78.87310000 14.98560000 17.37690000 60.27290000 582 0.000000000 60.06170000 100.0000000 24.86690000 27.97240000 101.4300000 583 0.000000000 92.02780000 100.0000000 34.27550000 59.78450000 105.0140000 584 0.000000000 52.10300000 50.78040000 8.663490000 16.65190000 24.01820000 585 0.000000000 59.26670000 52.03570000 10.34620000 21.64380000 25.80230000 586 59.60370000 66.46440000 64.63740000 33.24550000 37.95890000 41.71040000 587 69.25790000 80.50200000 67.57440000 45.17480000 55.37130000 47.45520000 588 21.28440000 35.12000000 20.36400000 4.345870000 7.498730000 3.791460000 589 31.92830000 50.78610000 22.25680000 9.555390000 16.82830000 5.452230000 590 76.50040000 92.25350000 19.48490000 48.05210000 69.24380000 10.13500000 591 12.07730000 10.86920000 17.48560000 1.099520000 0.923586000 2.220830000 592 0.000000000 8.251320000 14.27610000 0.337120000 0.363935000 1.400130000 593 11.11830000 12.14200000 15.84620000 0.967372000 0.975913000 1.814460000 594 0.000000000 27.92740000 12.19890000 1.306520000 3.868510000 1.397620000 595 13.58120000 41.01680000 0.000000000 3.328290000 9.205610000 1.029090000 596 35.98650000 79.56670000 0.000000000 17.31590000 41.08870000 4.560640000 597 100.0000000 84.15510000 18.43350000 70.82440000 72.84610000 9.942730000 598 45.13620000 35.36000000 36.65440000 13.98370000 12.37480000 12.09260000 599 80.99590000 38.95600000 35.65700000 40.56100000 27.37540000 12.85090000 600 100.0000000 61.00940000 90.89940000 79.18830000 57.00040000 85.44860000 601 100.0000000 68.06110000 100.0000000 84.45270000 64.17990000 104.8600000 602 0.000000000 90.95520000 22.79020000 15.78980000 51.21780000 9.572290000 603 0.000000000 100.0000000 45.00680000 21.80510000 64.03300000 24.19420000 604 52.83490000 100.0000000 89.70200000 47.55050000 75.97020000 85.78510000 605 64.36730000 100.0000000 93.14310000 56.53840000 80.45660000 92.88290000 606 76.22220000 100.0000000 92.73170000 66.23800000 85.47590000 92.52320000 607 86.29060000 100.0000000 93.01410000 76.30270000 90.65310000 93.55300000 608 93.65090000 100.0000000 92.50220000 84.33380000 94.81640000 92.91870000 609 64.88670000 58.61090000 53.08150000 32.68130000 32.73030000 27.84580000 610 80.68240000 60.12650000 60.17520000 48.19100000 41.50400000 36.43380000 611 100.0000000 63.64380000 60.15580000 70.69500000 55.42100000 37.73480000 612 100.0000000 87.73020000 75.44840000 81.71300000 80.82770000 61.34890000 613 100.0000000 94.23860000 80.10290000 85.50940000 89.41540000 69.75870000 614 21.44330000 20.77120000 17.28340000 2.932910000 3.143630000 2.401580000 615 57.95290000 17.91580000 15.79980000 18.12280000 10.51830000 2.688310000 616 100.0000000 21.14360000 14.78670000 58.56190000 31.90700000 4.414380000 617 100.0000000 18.76820000 24.40760000 58.98690000 31.65870000 7.338790000 618 100.0000000 22.30080000 61.23110000 64.75570000 34.61000000 36.66730000 619 32.32020000 16.48740000 20.96150000 5.768440000 3.913470000 3.549940000 620 45.61130000 30.21870000 17.86580000 12.02210000 9.974660000 3.234180000 621 61.97100000 32.79400000 18.91880000 22.21600000 15.97790000 4.098230000 622 100.0000000 36.11730000 17.79880000 60.07060000 36.58640000 5.680760000 623 55.08280000 73.86240000 0.000000000 25.06760000 40.23190000 4.357880000 624 67.20720000 90.03140000 0.000000000 38.79400000 62.20520000 6.737530000 625 100.0000000 91.01420000 0.000000000 72.75530000 80.73600000 8.447280000 626 54.06580000 45.65670000 0.000000000 18.22260000 18.87590000 1.958860000 627 74.64260000 48.74860000 0.000000000 34.13450000 28.54990000 2.875560000 628 74.64520000 69.67260000 26.91380000 39.74610000 44.38800000 10.14070000 629 74.02440000 94.23960000 31.05150000 47.48540000 70.98040000 15.16850000 630 72.66890000 100.0000000 30.60100000 48.52400000 78.02480000 15.73810000 631 91.16550000 100.0000000 50.31970000 69.76640000 88.65810000 31.16200000 632 36.87660000 23.77490000 0.000000000 7.216900000 5.978420000 0.601232000 633 72.38450000 30.40170000 0.000000000 29.68590000 19.18280000 1.842510000 634 89.25010000 61.40130000 50.12760000 55.37850000 46.26570000 26.22820000 635 100.0000000 72.52770000 59.17440000 72.76280000 63.06460000 37.45410000 636 37.71730000 18.53640000 33.03570000 8.858900000 5.683080000 9.166250000 637 61.43500000 16.31850000 100.0000000 38.91820000 18.87730000 100.1830000 638 91.61550000 14.45730000 100.0000000 66.65350000 32.94740000 101.4550000 639 42.74910000 0.000000000 67.01210000 16.70170000 7.709320000 41.51880000 640 47.45770000 0.000000000 79.13310000 22.44530000 10.27250000 59.77020000 641 71.59980000 0.000000000 83.80740000 40.42380000 19.36750000 68.51150000 642 84.37980000 0.000000000 100.0000000 58.51650000 27.99590000 100.9860000 643 91.34700000 33.33670000 100.0000000 67.74020000 37.49890000 101.9710000 644 51.69530000 10.47790000 22.19650000 14.33090000 7.682210000 4.301020000 645 56.95570000 0.000000000 19.26940000 17.22730000 8.824500000 3.434710000 646 80.27910000 29.46580000 25.34640000 37.75930000 22.98170000 6.992330000 647 34.31190000 12.42090000 0.000000000 5.675560000 3.467770000 0.328977000 648 43.53140000 13.69780000 0.000000000 9.494320000 5.566770000 0.523015000 649 49.82330000 15.40330000 15.94120000 13.09600000 7.583170000 2.446500000 650 73.79390000 17.50730000 23.66520000 30.75350000 16.91720000 5.703840000 651 73.47050000 25.41960000 39.42710000 32.61950000 19.15310000 14.52040000 652 32.21190000 41.50490000 61.70890000 13.96730000 14.13590000 35.53170000 653 45.65360000 43.21140000 72.87200000 22.59660000 18.96530000 51.02130000 654 90.54670000 65.89000000 100.0000000 72.59030000 56.49370000 104.1220000 655 91.39530000 75.26620000 100.0000000 76.07070000 65.50810000 105.1260000 656 23.31940000 12.78650000 14.80850000 2.830050000 2.003610000 1.672430000 657 80.43230000 40.04800000 20.94250000 38.81040000 27.04740000 5.802240000 658 38.00290000 18.88320000 0.000000000 7.343570000 5.146560000 0.502567000 659 76.18050000 18.66970000 0.000000000 32.16690000 17.91230000 1.661460000 660 86.32130000 61.19430000 0.000000000 48.03280000 42.82020000 4.354850000 661 90.71580000 100.0000000 0.000000000 65.10140000 86.73330000 9.248080000 662 52.57140000 63.73600000 23.29780000 21.67700000 30.83250000 7.306620000 663 52.97920000 66.27580000 67.82170000 29.78390000 35.94620000 45.73030000 664 52.30540000 78.97510000 85.31450000 38.17930000 49.78800000 74.75780000 665 21.90080000 34.60990000 38.65500000 6.170050000 8.067360000 13.03750000 666 24.06610000 46.95750000 39.18530000 8.431920000 14.15450000 14.08760000 667 27.15730000 65.27110000 45.35350000 13.84800000 27.56270000 20.33750000 668 76.80890000 64.78770000 70.58550000 48.17280000 44.29460000 50.30980000 669 79.69580000 73.39580000 82.16830000 56.62730000 54.71380000 69.57820000 670 40.17090000 33.25830000 38.99950000 11.78130000 10.52290000 13.48930000 671 42.91460000 33.58020000 83.38940000 23.27940000 15.36750000 67.54230000 672 29.51800000 21.62140000 55.80920000 9.798840000 6.280860000 27.91590000 673 28.26590000 24.96820000 76.14700000 14.79570000 8.947700000 54.94200000 674 35.89700000 28.61910000 90.65420000 22.41150000 13.19580000 80.62210000 675 57.27360000 29.31460000 100.0000000 36.99880000 20.47890000 100.3950000 676 0.000000000 36.06860000 34.48970000 3.780890000 7.385090000 10.28860000 677 0.000000000 44.45880000 47.80580000 6.833440000 12.03570000 20.74540000 678 17.45920000 23.68010000 23.07470000 2.770720000 3.579620000 4.296410000 679 16.86840000 23.63610000 29.78190000 3.240180000 3.747430000 7.257230000 680 21.00890000 20.88000000 36.21140000 4.473230000 3.769970000 10.92970000 681 32.47570000 48.50900000 80.47110000 20.31240000 19.95540000 63.13870000 682 31.25360000 69.96430000 79.56310000 24.30980000 35.45550000 63.38730000 683 0.000000000 13.52340000 33.47230000 1.923300000 1.448310000 9.017120000 684 0.000000000 10.79040000 46.93330000 3.704310000 1.894950000 18.83320000 685 40.49450000 14.79460000 51.87830000 12.62050000 6.788660000 23.88460000 686 44.84290000 20.62310000 73.15360000 19.92430000 10.83000000 50.52670000 687 67.24970000 46.53450000 82.12580000 39.75510000 28.97260000 66.72830000 688 88.61280000 61.93340000 81.91240000 62.81220000 49.52040000 68.45350000 689 100.0000000 63.98910000 83.57040000 77.30490000 58.31000000 72.14760000 690 100.0000000 76.60120000 85.42330000 81.30480000 69.96620000 76.73310000 691 54.04730000 31.18440000 34.01970000 18.09070000 13.22380000 10.49770000 692 78.17710000 32.44600000 48.30920000 38.92060000 24.10150000 22.17920000 693 100.0000000 46.32680000 63.45970000 68.01080000 44.05570000 40.46480000 694 100.0000000 49.16110000 80.14150000 73.13070000 47.52430000 65.10310000 695 27.58750000 0.000000000 30.16690000 4.744980000 2.290610000 7.264060000 696 40.59270000 0.000000000 49.37160000 11.92650000 5.688600000 21.36520000 697 42.37320000 27.07370000 51.76940000 14.19910000 9.813600000 24.10910000 698 59.91390000 24.86130000 64.05380000 26.62900000 15.40370000 38.42360000 699 59.51140000 84.07730000 73.67710000 40.70190000 56.18160000 56.32110000 700 27.25420000 34.15440000 30.08850000 6.395010000 8.149310000 7.884920000 701 39.66860000 50.47050000 33.62440000 13.38520000 18.52170000 10.94450000 702 17.97740000 26.83700000 16.66510000 2.718170000 4.305670000 2.380230000 703 19.27540000 30.41460000 13.27950000 3.119540000 5.462690000 1.757230000 704 23.51720000 37.10130000 7.216680000 4.544770000 8.343230000 1.216260000 705 24.74600000 66.05320000 27.02270000 11.18590000 27.00220000 8.541810000 706 59.41490000 70.63050000 75.44570000 37.11730000 42.71490000 57.49300000 707 85.41880000 89.71420000 100.0000000 74.21290000 77.96520000 106.6030000 708 92.07770000 89.06070000 100.0000000 81.29950000 80.95120000 106.8580000 709 0.000000000 32.54040000 46.73830000 5.104040000 6.724550000 19.20760000 710 0.000000000 40.58930000 100.0000000 21.37440000 16.16370000 100.0990000 711 22.13250000 58.51610000 100.0000000 26.62190000 27.91180000 101.3990000 712 23.35120000 69.66850000 100.0000000 29.55360000 37.07460000 102.4290000 713 49.25840000 70.31600000 100.0000000 39.52460000 42.70930000 102.9530000 714 0.000000000 17.75920000 56.35940000 5.747410000 3.535200000 28.24520000 715 0.000000000 26.85660000 55.50680000 6.186760000 5.544850000 27.55360000 716 25.83790000 58.57140000 54.68950000 13.65320000 22.85810000 28.60680000 717 36.91150000 88.66310000 81.76080000 32.76850000 56.30300000 69.38470000 718 93.59850000 100.0000000 83.02410000 80.91730000 93.44280000 75.24520000 719 50.05670000 59.14210000 42.71280000 21.33290000 27.41330000 18.08150000 720 59.32160000 78.32110000 43.26400000 32.11130000 47.27590000 20.68810000 721 15.76510000 22.90820000 0.000000000 1.717980000 2.966070000 0.323008000 722 87.83640000 21.48740000 0.000000000 43.99100000 24.48950000 2.271360000 723 92.46120000 22.12810000 29.60620000 50.50750000 27.82050000 9.347850000 724 100.0000000 20.34330000 70.62260000 66.98950000 35.13030000 49.04460000 725 100.0000000 19.50940000 81.24590000 70.10160000 36.22860000 65.67600000 726 19.54820000 0.000000000 15.09160000 1.886140000 0.938517000 1.623580000 727 21.56610000 0.000000000 10.48280000 2.107940000 1.071630000 0.787589000 728 29.01030000 0.000000000 10.40020000 3.922830000 2.007690000 0.860724000 729 31.85640000 25.04070000 15.82850000 5.869520000 5.518700000 2.274830000 730 39.66720000 61.11910000 18.84060000 14.31020000 25.32810000 5.270330000 731 40.68500000 70.95550000 24.69940000 17.57330000 33.95940000 8.273970000 732 42.07400000 45.36130000 20.73200000 12.44450000 15.69390000 4.758930000 733 64.01130000 45.59840000 21.48440000 25.55970000 22.55850000 5.637600000 734 72.33190000 51.71200000 22.08420000 33.31790000 29.56760000 6.560730000 735 74.37370000 79.42730000 37.14960000 43.38600000 54.16050000 16.89870000 736 81.29960000 80.92930000 46.25460000 51.68210000 59.63280000 24.33970000 737 84.99740000 100.0000000 57.41190000 64.44550000 85.75290000 38.21090000 738 45.29830000 50.10840000 61.11960000 20.53990000 21.48620000 35.59000000 739 51.31880000 63.90080000 73.52820000 29.79810000 34.11410000 53.66970000 740 58.34660000 67.98460000 100.0000000 44.39630000 43.46980000 102.9770000 741 68.96250000 68.30560000 100.0000000 52.31440000 47.78940000 103.3760000 742 86.87970000 0.000000000 56.57360000 47.70590000 23.97620000 30.30550000 743 86.45710000 0.000000000 67.78310000 49.87960000 24.79340000 44.11080000 744 100.0000000 0.000000000 88.49310000 72.05570000 35.49000000 78.46020000 745 20.52510000 0.000000000 33.75810000 3.499810000 1.604800000 9.181940000 746 19.59300000 0.000000000 83.23980000 14.17240000 5.853770000 66.29350000 747 19.30980000 46.27660000 100.0000000 23.77780000 19.84940000 100.4970000 748 16.32210000 79.88860000 100.0000000 31.21420000 46.36550000 103.4900000 749 0.000000000 59.38210000 43.79560000 8.959510000 21.16430000 18.37580000 750 30.67360000 71.58440000 44.30080000 16.32340000 33.54210000 20.13060000 751 61.68280000 40.51310000 0.000000000 22.47270000 18.87600000 1.902470000 752 78.42190000 45.10270000 9.337940000 37.11460000 28.35400000 3.348700000 753 87.34430000 53.15140000 0.000000000 47.44930000 37.70850000 3.766640000 754 63.72700000 73.38150000 27.00730000 31.86160000 43.22320000 10.15160000 755 65.31320000 77.06130000 77.78230000 43.89120000 51.35390000 62.08770000 756 66.65950000 100.0000000 86.14790000 55.74940000 80.34350000 79.58810000 757 45.33210000 100.0000000 60.42220000 34.89170000 70.43800000 40.27540000 758 55.30590000 100.0000000 69.20020000 42.60550000 74.16560000 51.91330000 759 9.127770000 19.87300000 0.000000000 0.829320000 1.949430000 0.216274000 760 0.000000000 17.32460000 10.58070000 0.527399000 1.381710000 0.858980000 761 16.20140000 46.03850000 23.42920000 5.196540000 12.24520000 5.408040000 762 29.73400000 57.07610000 83.13410000 21.94690000 25.35550000 68.28040000 763 28.44790000 56.67490000 92.14520000 24.67690000 26.15640000 85.00260000 764 60.47440000 72.26980000 91.32760000 43.58020000 46.71660000 85.55180000 765 66.24310000 83.09720000 100.0000000 54.48170000 61.29770000 104.9220000 766 15.94760000 62.72580000 0.000000000 7.669630000 23.01680000 2.581700000 767 18.19710000 84.83310000 0.000000000 14.28180000 44.39220000 4.986060000 768 21.10210000 100.0000000 0.000000000 20.43710000 63.70370000 7.155860000 769 70.92080000 100.0000000 0.000000000 45.64190000 76.69970000 8.336530000 770 83.62130000 100.0000000 19.00620000 57.95740000 82.99330000 11.46290000 771 92.05820000 100.0000000 18.55600000 67.09300000 87.70670000 11.75990000 772 15.80990000 8.815280000 25.73040000 2.037880000 1.195490000 5.088260000 773 11.72020000 0.000000000 30.84440000 1.933330000 0.833064000 7.484860000 774 32.76690000 0.000000000 74.65170000 14.85290000 6.514230000 52.34880000 775 55.83540000 20.32940000 77.12180000 27.19660000 14.39370000 56.94710000 776 71.55970000 21.00350000 100.0000000 47.04810000 23.80130000 100.6490000 777 64.38610000 26.65290000 83.28340000 35.50030000 19.75130000 67.70670000 778 68.23010000 32.56110000 100.0000000 45.27290000 25.67490000 100.8910000 779 90.09760000 82.22480000 100.0000000 76.73770000 71.96150000 105.8700000 780 58.14470000 51.90480000 42.13930000 24.70110000 24.98030000 17.30890000 781 66.11740000 59.97170000 48.65720000 33.10340000 33.89220000 23.71420000 782 66.19530000 77.03270000 55.41190000 38.86640000 49.39690000 32.13120000 783 0.000000000 14.89710000 100.0000000 19.10210000 8.480530000 99.23380000 784 20.24060000 16.69390000 100.0000000 20.90100000 9.637860000 99.34480000 785 20.33290000 27.77720000 100.0000000 21.66540000 12.17300000 99.63030000 786 56.84330000 59.70560000 100.0000000 41.43980000 36.29260000 102.1800000 787 39.52960000 40.42190000 51.69300000 14.43110000 14.18370000 24.54040000 788 41.36460000 59.77730000 53.73350000 19.06180000 26.42040000 27.95660000 789 16.07270000 51.21530000 0.000000000 5.294320000 14.93490000 1.670970000 790 24.98930000 61.56190000 0.000000000 9.115820000 22.99330000 2.559760000 791 76.45220000 64.37180000 0.000000000 38.99530000 40.28630000 4.179370000 792 79.28710000 80.74280000 0.000000000 46.20820000 57.04080000 6.037020000 793 88.55860000 79.60740000 0.000000000 55.38400000 60.75340000 6.348090000 794 91.73860000 86.55700000 27.92520000 62.35460000 70.72270000 13.37520000 795 0.000000000 12.60010000 58.69750000 6.026340000 2.991660000 30.78810000 796 0.000000000 13.40450000 83.97420000 13.04100000 5.882140000 67.59530000 797 0.000000000 63.98060000 87.71210000 21.05430000 29.13580000 76.94280000 798 0.000000000 80.46560000 90.06860000 26.45660000 44.87720000 83.13880000 799 32.80830000 86.59780000 100.0000000 37.31240000 55.80600000 104.5100000 800 0.000000000 19.17750000 24.66040000 1.357020000 2.006710000 4.748120000 801 0.000000000 17.94980000 28.24080000 1.591330000 1.902210000 6.307100000 802 0.000000000 36.81950000 28.61430000 3.262250000 7.449890000 7.110740000 803 0.000000000 49.59240000 39.32970000 6.385320000 14.38350000 14.24340000 804 0.000000000 83.50180000 53.39780000 17.21580000 44.09150000 29.69730000 805 0.000000000 90.31800000 64.74160000 22.06470000 53.03880000 43.75090000 806 0.000000000 89.35180000 76.05230000 24.79190000 53.09610000 59.80870000 807 0.000000000 88.94810000 87.45360000 28.35520000 54.09350000 79.27800000 808 0.000000000 40.35820000 50.24120000 6.664040000 10.18470000 22.77580000 809 0.000000000 40.28270000 57.62420000 8.111290000 10.73270000 30.44900000 810 0.000000000 50.22040000 58.35340000 9.835830000 16.09560000 31.87320000 811 0.000000000 78.92300000 81.52580000 23.03440000 42.07900000 67.45650000 812 43.81960000 92.95640000 100.0000000 44.01590000 65.79560000 105.5850000 813 100.0000000 93.32030000 100.0000000 92.42890000 91.14890000 107.8990000 814 58.67700000 0.000000000 12.67450000 18.05600000 9.286820000 1.891630000 815 85.87750000 0.000000000 14.67670000 41.53870000 21.38610000 3.389740000 816 100.0000000 0.000000000 16.28050000 58.01950000 29.87570000 4.531640000 817 100.0000000 0.000000000 36.81070000 59.76190000 30.57260000 13.70860000 818 100.0000000 44.29040000 41.90160000 63.54510000 41.31090000 18.51530000 819 29.28080000 21.90570000 0.000000000 4.529270000 4.220640000 0.431965000 820 27.26460000 25.73680000 0.000000000 4.246990000 4.877120000 0.512250000 821 49.52160000 37.15560000 0.000000000 14.39850000 13.45010000 1.377030000 822 62.27730000 55.68830000 0.000000000 25.47450000 27.80790000 2.903980000 823 64.22470000 100.0000000 49.73080000 44.38340000 75.58250000 29.41840000 824 71.62580000 100.0000000 62.74540000 52.99010000 79.70770000 43.92990000 825 79.63770000 100.0000000 75.03270000 63.51430000 84.75790000 61.40830000 826 93.13990000 100.0000000 100.0000000 86.70120000 95.69430000 108.5050000 827 0.000000000 20.43710000 21.36760000 1.196640000 2.162380000 3.543080000 828 0.000000000 28.13100000 26.30200000 2.138240000 4.255060000 5.689960000 829 15.14820000 52.10490000 48.62320000 9.186410000 16.96720000 22.02740000 830 49.47830000 84.12790000 82.74170000 37.36630000 54.18670000 70.75790000 831 63.38330000 87.50240000 100.0000000 53.81070000 65.20850000 105.3870000 832 0.000000000 34.91360000 13.02420000 2.046570000 6.285730000 1.818880000 833 0.000000000 42.59940000 13.32860000 3.064320000 9.693860000 2.260750000 834 0.000000000 60.89890000 15.03210000 6.525060000 21.19320000 3.910140000 835 0.000000000 71.31180000 19.84680000 9.357650000 30.03860000 6.189180000 836 30.47470000 86.86720000 27.46920000 18.93790000 48.64670000 11.16580000 837 50.04890000 88.32710000 27.00540000 27.76410000 54.65860000 11.53840000 838 49.91740000 100.0000000 30.92010000 32.49040000 69.75390000 15.15470000 839 60.85060000 0.000000000 36.62360000 21.40920000 10.80000000 11.79050000 840 81.17350000 0.000000000 36.51630000 38.50750000 19.61770000 12.52200000 841 100.0000000 0.000000000 56.29360000 62.99110000 31.86430000 30.71680000 842 100.0000000 0.000000000 65.77470000 65.16240000 32.73270000 42.15280000 843 100.0000000 58.27430000 66.53860000 71.01290000 51.94020000 45.32280000 844 100.0000000 74.97480000 69.67720000 76.02230000 66.43450000 51.23560000 845 24.78530000 13.34650000 23.58750000 3.689800000 2.445780000 4.345970000 846 27.16130000 6.122370000 26.03330000 4.297110000 2.217100000 5.307110000 847 55.23770000 22.86710000 36.21750000 18.37410000 11.31290000 11.62860000 848 81.86260000 23.59030000 39.36670000 40.33490000 22.73620000 14.79280000 849 84.59250000 26.64200000 47.14640000 44.52970000 25.44340000 21.22370000 850 87.50980000 29.34650000 57.39540000 49.80890000 28.62700000 31.72670000 851 35.06830000 25.52530000 8.820790000 6.767360000 6.117880000 1.095920000 852 35.85120000 38.62230000 8.966880000 8.425940000 10.89520000 1.648270000 853 41.49970000 43.57440000 0.000000000 11.32160000 14.39270000 1.527760000 854 64.82760000 64.10550000 0.000000000 29.21050000 35.05800000 3.699670000 855 88.91620000 90.62110000 0.000000000 59.48170000 73.48240000 7.777750000 856 17.95840000 29.33380000 84.62220000 15.60760000 10.12330000 69.19940000 857 36.35520000 43.74620000 88.01580000 23.45600000 19.08020000 76.30180000 858 69.15630000 68.76530000 91.24000000 49.15480000 46.89930000 85.32890000 859 100.0000000 83.77980000 92.20530000 85.98770000 78.54090000 90.41440000 860 74.31200000 79.71440000 72.03650000 50.43650000 57.23980000 53.88440000 861 81.51600000 85.07790000 79.22060000 61.07320000 67.45020000 66.06700000 862 71.33970000 0.000000000 12.53790000 27.63720000 14.22760000 2.315810000 863 76.53300000 0.000000000 42.18660000 34.84790000 17.64210000 16.35500000 864 36.93770000 14.63100000 61.32790000 13.14500000 6.811300000 34.22770000 865 35.87450000 24.56360000 100.0000000 25.71790000 13.50950000 99.73230000 866 15.18460000 43.00850000 56.72500000 9.223410000 12.44290000 29.63740000 867 12.01470000 58.64050000 57.90120000 11.94100000 21.94070000 32.01560000 868 0.000000000 79.03930000 72.18420000 20.25000000 41.07190000 52.61620000 869 0.000000000 44.50920000 29.76450000 4.437860000 11.10070000 8.089830000 870 19.51560000 70.50330000 32.80260000 11.81010000 30.55180000 11.89330000 871 36.40360000 70.51450000 31.87090000 16.37650000 32.92630000 11.58830000 872 40.20120000 100.0000000 33.40570000 28.01480000 67.41560000 16.32310000 873 41.47140000 100.0000000 83.68130000 39.59650000 72.11180000 74.45100000 874 57.91990000 100.0000000 100.0000000 54.72660000 79.20770000 107.0070000 875 0.000000000 21.91370000 17.48320000 1.064870000 2.388860000 2.391470000 876 0.000000000 45.83110000 22.77010000 4.062780000 11.57070000 5.098150000 877 0.000000000 59.13890000 27.24140000 6.922060000 20.19130000 7.903470000 878 84.54860000 64.02830000 58.92200000 52.71120000 46.44240000 35.49160000 879 89.30580000 68.18550000 67.90820000 60.99910000 53.42570000 47.47160000 880 31.04080000 21.19960000 16.06000000 5.351020000 4.474290000 2.215420000 881 37.36530000 23.26420000 14.50050000 7.638380000 6.059320000 2.014770000 882 61.28450000 25.10290000 13.46440000 20.76390000 13.22360000 2.463770000 883 63.58270000 24.26890000 52.75120000 26.73900000 15.61560000 25.59580000 884 63.18100000 35.94050000 82.64000000 35.33790000 22.39100000 66.90250000 885 66.10330000 59.23630000 100.0000000 47.89150000 39.32500000 102.4480000 886 8.249780000 11.95340000 38.96490000 2.780660000 1.657450000 12.55090000 887 0.000000000 12.97670000 69.37820000 8.630520000 4.072180000 44.44050000 888 0.000000000 41.39600000 75.45600000 12.79800000 13.07000000 54.37540000 889 91.25780000 59.51370000 76.30620000 63.47140000 48.50740000 59.15720000 890 100.0000000 73.44950000 91.40350000 82.52910000 67.73950000 87.63340000 891 36.09240000 29.44830000 39.53930000 9.839220000 8.404410000 13.64920000 892 39.18940000 36.04030000 47.74340000 13.01840000 11.91970000 20.59410000 893 56.72470000 38.53460000 47.13540000 22.45300000 17.68970000 20.60300000 894 70.70750000 33.17450000 34.35720000 30.34420000 20.13490000 11.34270000 895 100.0000000 31.46620000 37.48850000 61.30650000 35.54020000 14.71500000 896 100.0000000 37.40250000 68.02270000 67.87060000 40.17700000 45.99180000 897 32.70790000 22.93150000 64.05220000 12.73160000 7.832490000 37.72330000 898 37.29750000 40.28380000 92.27650000 24.87450000 18.20040000 84.33050000 899 54.65980000 40.79990000 100.0000000 36.68070000 24.13960000 100.8260000 900 21.91080000 42.21210000 45.20430000 8.113310000 11.78160000 18.44870000 901 20.02870000 47.42610000 49.22230000 9.235530000 14.61100000 22.30270000 902 33.25050000 51.27230000 52.96690000 14.04210000 18.93730000 26.36910000 903 62.16220000 50.34930000 73.03720000 33.80430000 28.09540000 52.18220000 904 85.85730000 53.41690000 83.92930000 58.71570000 42.18320000 71.14260000 905 42.98970000 27.92270000 43.19870000 13.10170000 9.626830000 16.49920000 906 43.45050000 36.98930000 64.36890000 18.44720000 14.65250000 38.84590000 907 54.97910000 43.98540000 86.20610000 32.10060000 23.71500000 73.40530000 908 79.06270000 64.18140000 87.59450000 55.46280000 47.01990000 78.35370000 909 8.260220000 14.60640000 0.000000000 0.509258000 1.035770000 0.114000000 910 7.447140000 16.21380000 8.650030000 0.616580000 1.280660000 0.593711000 911 11.73980000 14.12910000 7.219640000 0.827652000 1.138740000 0.425907000 912 17.37620000 12.22620000 0.000000000 1.411200000 1.250510000 0.127065000 913 16.74100000 0.000000000 24.51100000 1.986590000 0.925513000 4.553520000 914 33.98310000 29.98830000 35.60400000 8.626390000 7.984620000 10.98070000 915 38.28980000 44.65100000 38.14720000 12.39400000 15.15600000 13.43220000 916 55.42850000 58.26320000 38.35090000 23.69610000 28.16000000 14.93770000 917 68.95390000 70.94590000 58.49830000 39.97290000 44.93280000 35.00010000 918 72.59220000 77.19520000 59.67550000 45.05990000 52.62420000 37.18600000 919 87.13620000 79.97900000 59.23650000 59.90500000 62.72800000 37.65730000 920 92.43610000 100.0000000 64.29780000 74.19020000 90.59580000 46.86940000 921 51.06020000 57.15910000 21.40980000 19.20860000 25.36950000 6.024100000 922 51.36770000 69.18320000 20.64960000 22.16420000 35.00660000 6.854600000 923 60.44480000 75.90460000 20.93350000 29.78240000 44.28100000 7.928300000 924 65.64940000 67.44510000 16.97160000 31.04030000 38.32010000 6.048320000 925 75.02810000 100.0000000 18.40340000 49.66720000 78.72260000 10.90010000 926 21.15830000 26.07990000 7.685280000 2.926910000 4.268150000 0.807712000 927 19.45670000 26.03720000 12.43490000 2.729840000 4.142090000 1.452120000 928 16.37330000 38.70990000 14.79100000 3.660730000 8.449240000 2.409050000 929 25.12070000 39.15540000 39.84650000 7.611310000 10.39920000 14.13110000 930 26.83930000 66.07880000 59.48970000 16.66200000 29.27190000 34.62410000 931 32.11310000 76.30160000 79.39380000 26.30820000 41.58390000 63.79680000 932 59.01890000 86.51470000 87.89240000 45.74690000 60.61110000 80.61880000 933 59.68040000 86.35360000 94.47250000 48.57870000 61.63110000 93.46090000 934 75.20570000 67.97000000 62.67110000 45.49060000 45.42070000 39.93990000 935 88.11640000 81.77490000 67.14190000 63.42140000 65.95090000 47.86310000 936 35.41390000 100.0000000 16.72470000 24.80370000 65.91250000 9.284850000 937 65.95210000 100.0000000 18.69210000 42.11350000 74.82590000 10.62890000 938 26.75530000 40.18960000 0.000000000 5.673880000 10.08690000 1.100710000 939 29.49370000 44.64060000 14.44190000 7.349000000 12.78060000 2.789730000 940 36.17190000 44.20750000 16.07480000 9.581680000 13.73220000 3.242220000 941 51.93620000 68.31300000 32.98350000 23.31960000 34.83110000 12.34270000 942 85.67340000 69.06440000 75.07890000 59.28740000 52.96790000 57.82910000 943 85.57950000 91.53220000 76.25520000 66.58900000 76.90040000 62.34620000 944 11.83130000 13.27160000 21.61000000 1.393940000 1.270090000 3.519520000 945 0.000000000 8.202500000 25.70140000 1.024250000 0.635807000 5.024130000 946 0.000000000 12.62790000 25.89200000 1.159850000 1.047970000 5.151690000 947 23.33900000 9.102010000 79.95320000 13.95270000 6.136980000 60.75080000 948 21.30140000 59.10100000 77.89720000 18.62470000 25.07000000 59.54290000 949 23.52400000 66.76130000 87.30420000 23.98400000 32.61590000 76.55670000 950 24.25750000 59.57690000 66.83900000 16.25840000 24.50670000 43.25130000 951 38.83650000 67.28180000 74.62710000 24.85370000 33.91210000 55.37290000 952 72.52350000 74.10180000 79.21930000 49.32580000 51.63110000 64.37650000 953 59.33080000 52.50590000 57.30760000 28.32690000 26.85790000 31.70780000 954 85.58050000 54.88310000 61.17080000 52.29330000 40.43520000 37.43920000 955 21.40320000 7.378880000 10.02700000 2.123080000 1.253090000 0.744229000 956 26.83420000 10.58800000 0.000000000 3.328380000 2.097220000 0.200338000 957 64.61590000 17.79190000 0.000000000 22.48930000 12.78910000 1.192590000 958 89.61280000 53.18190000 14.72720000 50.21830000 39.12070000 5.353160000 959 100.0000000 54.04620000 19.24960000 62.96850000 46.14760000 7.173110000 960 45.55360000 25.61000000 8.286320000 11.23890000 8.444120000 1.247110000 961 45.16720000 29.18360000 0.000000000 11.27900000 9.358510000 0.941401000 962 44.40170000 42.89690000 47.71500000 16.25400000 16.21860000 21.02700000 963 45.14660000 74.58710000 72.36510000 29.00920000 41.78840000 52.84900000 964 48.87870000 80.88700000 92.68710000 39.50960000 51.87590000 88.87230000 965 61.46700000 93.69850000 100.0000000 54.67550000 72.09060000 106.1780000 966 83.86140000 20.15230000 23.64400000 40.49880000 22.35980000 6.200880000 967 100.0000000 54.48380000 49.85510000 66.62420000 47.86560000 26.00850000 968 42.71790000 19.06910000 15.64130000 9.686860000 6.347620000 2.276660000 969 53.94460000 24.15140000 16.65440000 16.02160000 10.55540000 2.929610000 970 64.86250000 44.41170000 12.88950000 25.57960000 22.08610000 3.323530000 971 72.09880000 57.43350000 17.02150000 33.95100000 33.16450000 5.421530000 972 46.70340000 34.67550000 50.39710000 16.78580000 13.34940000 23.15860000 973 64.27400000 34.07740000 53.47860000 28.30710000 19.02840000 26.71070000 974 69.08110000 35.65380000 78.39150000 38.50560000 24.08330000 59.96080000 975 45.13050000 30.61390000 60.33770000 17.59400000 12.29130000 33.62580000 976 46.16220000 44.19910000 65.97410000 21.15630000 18.86380000 41.38170000 977 51.53050000 53.54060000 71.52070000 27.12060000 26.39960000 49.84750000 978 64.21270000 56.33380000 89.50940000 41.77250000 34.88250000 80.70550000 979 17.23230000 7.434060000 33.64130000 2.981990000 1.514390000 9.109640000 980 18.96160000 8.442410000 94.64020000 18.24260000 7.709840000 87.91680000 981 16.16560000 63.84680000 100.0000000 26.78510000 31.45410000 101.8100000 982 15.62160000 87.06870000 100.0000000 33.47510000 54.29230000 104.3840000 983 7.596750000 38.01060000 49.89010000 6.488380000 9.208990000 22.33260000 984 16.98280000 52.82090000 68.64860000 13.95580000 19.30670000 45.13300000 985 17.16200000 65.25870000 75.36820000 18.55790000 29.19640000 56.04350000 986 27.63530000 52.44230000 16.62590000 8.259710000 17.07420000 3.785450000 987 80.65660000 60.49440000 17.42060000 42.49170000 39.46540000 6.147650000 988 83.47140000 82.98600000 16.69210000 51.44050000 61.75940000 8.438870000 989 91.08860000 81.56540000 20.31070000 59.38720000 64.51950000 9.691810000 990 94.22770000 86.38360000 60.08220000 70.18830000 74.01340000 39.82260000 991 93.27340000 95.18820000 100.0000000 84.94980000 89.32700000 107.7860000 992 17.90750000 43.01690000 29.29210000 5.479430000 10.99530000 7.826760000 993 15.17170000 81.80680000 46.76700000 16.37940000 42.22160000 23.22150000 994 16.79780000 54.05340000 29.83270000 7.252490000 17.32940000 8.813260000 995 21.34450000 65.99960000 37.14000000 11.50250000 27.00340000 14.14930000 996 45.03830000 82.22750000 43.21070000 25.01780000 47.12890000 20.72280000 997 50.21210000 91.52300000 61.18780000 34.33460000 60.71990000 40.06300000 998 43.76410000 87.15190000 66.44420000 30.73960000 54.25490000 46.00180000 999 7.068260000 17.20230000 17.89590000 0.984431000 1.566070000 2.408610000 1000 12.31700000 18.68370000 18.23570000 1.486060000 2.043360000 2.552160000 1001 7.545030000 17.99360000 23.42170000 1.396220000 1.853640000 4.244120000 1002 48.73930000 16.17840000 52.66830000 16.80510000 9.101770000 24.88490000 1003 46.72570000 9.099030000 36.19440000 12.92940000 6.706820000 11.14900000 1004 75.52790000 0.000000000 58.25940000 36.84590000 18.33510000 31.66920000 1005 32.64590000 15.34270000 25.48810000 6.149600000 3.924660000 5.249390000 1006 35.62690000 24.18140000 34.20120000 8.555160000 6.548630000 9.954250000 1007 64.30110000 43.54930000 34.51050000 26.63220000 22.06660000 11.70960000 1008 63.69860000 49.65250000 37.39260000 27.53140000 25.34650000 13.91090000 1009 63.25900000 55.91950000 56.08580000 31.50950000 30.44390000 30.74350000 1010 17.54620000 48.57520000 38.30470000 7.327480000 14.37850000 13.51650000 1011 14.33110000 72.31530000 73.53200000 19.47160000 34.99770000 53.91550000 1012 19.54480000 74.15860000 100.0000000 30.02520000 40.85320000 102.8630000 1013 31.33890000 64.65070000 86.83920000 25.40360000 31.87530000 75.59840000 1014 39.41800000 74.20330000 100.0000000 35.89060000 43.91400000 103.1420000 1015 19.39440000 35.09380000 49.41780000 7.413390000 8.675550000 21.81630000 1016 20.72100000 40.38700000 50.81830000 8.583040000 11.17330000 23.41690000 1017 47.86860000 42.79230000 50.16880000 18.40870000 17.23550000 23.37330000 1018 58.80080000 69.86750000 62.34450000 33.02900000 40.42390000 39.12000000 1019 84.23560000 84.63670000 68.77850000 60.66640000 67.16510000 50.27230000 1020 75.60370000 65.36920000 44.13500000 41.57760000 41.95160000 20.64090000 1021 100.0000000 92.26180000 47.18830000 76.82220000 83.72940000 27.62740000 1022 71.00400000 73.08470000 27.94410000 37.60830000 45.93800000 10.82290000 1023 77.46190000 82.02040000 57.98710000 50.56420000 59.79710000 36.01340000 1024 86.00180000 90.84840000 68.96210000 64.72840000 75.46310000 51.44000000 1025 61.14900000 50.63170000 33.06530000 25.35560000 24.78430000 11.19130000 1026 72.50180000 56.64630000 40.19160000 36.28570000 33.65000000 16.71050000 1027 77.07830000 64.22230000 62.00580000 46.11640000 43.09450000 38.84270000 1028 90.78210000 80.59160000 77.35280000 68.86570000 67.34960000 62.93510000 1029 100.0000000 84.96800000 80.33770000 82.26760000 78.23180000 68.88840000 1030 100.0000000 100.0000000 85.30020000 89.49240000 97.77570000 79.64600000 1031 40.42050000 44.80920000 65.89730000 18.56250000 17.79880000 41.19100000 1032 42.32360000 58.82790000 73.00330000 23.90200000 27.78870000 52.22760000 1033 46.64560000 66.64930000 82.43310000 30.68740000 36.18320000 68.21630000 1034 55.80490000 70.50080000 83.08220000 37.11130000 42.33530000 69.96880000 1035 77.90660000 82.44620000 83.03670000 57.94610000 63.20760000 72.04690000 1036 46.04550000 52.71100000 47.33960000 18.64860000 22.19810000 21.35910000 1037 49.59160000 52.41320000 56.41530000 22.15970000 23.64960000 30.43350000 1038 57.76590000 71.33990000 56.73630000 31.49120000 40.90930000 32.67310000 1039 60.96470000 100.0000000 61.93150000 44.53730000 75.37140000 42.53620000 1040 30.48120000 49.96020000 38.89990000 10.62160000 16.76080000 14.16230000 1041 36.60390000 57.97880000 40.29790000 14.47020000 23.19900000 15.85900000 1042 35.59230000 63.33040000 47.54750000 16.41010000 27.50570000 22.19180000 1043 45.14420000 67.30690000 62.11910000 24.40420000 34.07810000 38.21830000 1044 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1045 24.67790000 16.65760000 12.90140000 3.226320000 2.671710000 1.358920000 1046 26.76920000 13.27920000 10.36330000 3.525910000 2.430180000 0.909964000 1047 26.94060000 7.868980000 14.12560000 3.546850000 1.997800000 1.516630000 1048 42.06630000 15.08170000 77.95610000 19.76180000 9.760580000 57.83760000 1049 74.50520000 45.11290000 81.47330000 45.40620000 31.25890000 65.80910000 1050 75.87210000 70.60160000 90.20390000 55.05320000 51.37700000 83.77570000 1051 55.00470000 63.39700000 67.71170000 30.28360000 34.20520000 45.37120000 1052 64.32990000 65.90030000 70.04110000 37.87430000 39.78260000 49.14740000 1053 66.35080000 77.55120000 71.11510000 42.89780000 51.48640000 51.97710000 1054 68.38920000 85.20580000 72.63370000 47.37050000 60.73480000 55.20990000 1055 13.99000000 26.90080000 20.89410000 2.397900000 4.128710000 3.597370000 1056 8.655230000 28.54710000 21.91680000 2.111300000 4.386550000 3.980090000 1057 28.51130000 31.19470000 37.65210000 7.278980000 7.601290000 12.28430000 1058 29.28890000 32.39660000 43.38620000 8.429100000 8.457070000 16.57360000 1059 70.39800000 35.19400000 48.22030000 32.30190000 21.56620000 21.89110000 1060 71.08510000 44.45980000 56.37610000 35.68340000 26.72400000 30.56980000 1061 64.52740000 42.55400000 49.02910000 28.76560000 22.49880000 22.78460000 1062 71.11880000 69.55020000 53.41010000 40.34160000 44.17590000 29.41280000 1063 70.38410000 36.92240000 19.09540000 29.20710000 20.94570000 4.636870000 1064 82.21500000 47.25810000 20.49400000 41.63600000 31.62830000 6.151690000 1065 82.96550000 56.40580000 38.74910000 45.85360000 38.46410000 16.12000000 1066 84.51220000 77.36560000 40.91360000 53.02140000 57.27000000 19.77220000 1067 91.19490000 86.07580000 41.74710000 63.18820000 70.49390000 21.80480000 1068 19.23280000 20.84250000 0.000000000 2.125810000 2.785990000 0.296600000 1069 18.39580000 20.40500000 7.778500000 2.024200000 2.648640000 0.640252000 1070 42.89840000 26.76780000 27.09320000 11.05390000 8.506190000 6.418980000 1071 69.93630000 30.00000000 24.85800000 28.46340000 18.33880000 6.372760000 1072 100.0000000 49.51640000 26.70600000 62.65860000 43.52090000 9.642730000 1073 94.56900000 41.05560000 21.37710000 54.25870000 35.40870000 6.718240000 1074 93.20400000 77.59040000 24.37290000 60.86520000 61.71530000 10.80430000 1075 18.63620000 0.000000000 67.58210000 9.383650000 3.919040000 41.94180000 1076 14.86460000 10.17650000 68.34510000 9.142700000 4.121060000 43.00880000 1077 12.17300000 21.31260000 83.14020000 13.72050000 7.399370000 66.30670000 1078 12.44710000 0.000000000 11.04400000 0.737956000 0.363389000 0.807141000 1079 8.507910000 6.740540000 0.000000000 0.304770000 0.298293000 0.030732600 1080 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1081 8.220720000 23.96330000 7.424730000 1.100240000 2.856940000 0.641935000 1082 21.22890000 26.07750000 46.23610000 6.324200000 5.628060000 18.62950000 1083 27.09900000 44.36400000 67.74820000 14.36440000 15.38200000 43.43750000 1084 55.16370000 72.45550000 75.76320000 34.94500000 43.01210000 58.04830000 1085 67.80350000 83.50300000 81.35180000 48.97290000 59.63250000 68.86400000 1086 75.97860000 86.80330000 100.0000000 63.93080000 69.73340000 105.7800000 1087 39.95500000 45.90500000 53.33440000 15.74030000 17.16360000 26.51270000 1088 67.42140000 49.62530000 57.51160000 33.78490000 28.16260000 32.01460000 1089 47.44530000 40.32780000 36.70770000 15.78540000 15.11460000 12.42290000 1090 50.88370000 44.30230000 36.64490000 18.21720000 18.02640000 12.68920000 1091 80.23510000 59.57990000 35.48140000 43.40170000 39.17850000 14.07920000 1092 88.31270000 68.18720000 35.76570000 53.83360000 50.43460000 15.43170000 1093 91.61680000 100.0000000 35.77840000 68.08730000 88.04590000 19.63560000 1094 31.53100000 49.68390000 32.55540000 10.13520000 16.45830000 10.13230000 1095 32.10580000 54.24910000 100.0000000 28.39480000 26.31640000 101.1900000 1096 23.94160000 42.71190000 77.39500000 16.05590000 15.22710000 57.62640000 1097 78.06470000 44.35660000 100.0000000 55.37900000 35.27460000 101.8760000 1098 90.14530000 47.39090000 100.0000000 68.31790000 43.33970000 102.6450000 1099 30.91950000 88.96120000 0.000000000 18.70900000 50.75360000 5.668970000 1100 43.66900000 89.67490000 0.000000000 23.92400000 54.17130000 5.998210000 1101 33.49010000 62.50790000 18.42880000 12.25960000 25.18540000 5.161960000 1102 41.27870000 86.96340000 18.25740000 22.33200000 50.56700000 7.938910000 1103 41.19150000 93.87430000 37.07780000 26.46920000 59.66800000 17.71790000 1104 12.60040000 25.54090000 26.90340000 2.576910000 3.849950000 5.903140000 1105 10.76560000 24.36980000 29.73400000 2.567230000 3.555940000 7.219610000 1106 0.000000000 34.68550000 38.48670000 4.112440000 7.033810000 12.82800000 1107 0.000000000 71.33600000 88.36980000 23.16670000 35.58160000 78.88910000 1108 45.56950000 72.18500000 93.50370000 35.53590000 42.40690000 89.44450000 1109 0.000000000 20.29980000 51.08130000 4.852150000 3.599740000 22.83720000 1110 17.23340000 18.93760000 60.17280000 7.842860000 4.700490000 32.67560000 1111 18.62830000 30.78750000 67.30670000 10.70200000 8.592300000 42.09730000 1112 18.40790000 32.33360000 76.59340000 13.41370000 10.14440000 55.79970000 1113 16.36550000 63.68280000 89.32690000 22.63780000 29.68220000 80.00750000 1114 10.24170000 46.51220000 9.670840000 3.940850000 11.89430000 1.912850000 1115 16.65220000 60.29830000 9.656880000 7.328230000 21.24320000 2.956030000 1116 23.21750000 93.75420000 8.329910000 18.50370000 55.66710000 6.661120000 1117 0.000000000 22.16300000 68.42560000 8.845290000 5.550340000 43.28990000 1118 0.000000000 29.57600000 86.18660000 14.84520000 9.733580000 71.96880000 1119 0.000000000 37.99110000 87.46500000 16.22700000 13.07380000 74.67760000 1120 17.58110000 36.82250000 100.0000000 22.14280000 15.14870000 99.97090000 1121 35.50410000 18.51860000 52.36780000 10.90660000 6.401960000 24.34770000 1122 46.64490000 17.37010000 60.17220000 17.33280000 9.356820000 33.09180000 1123 66.46330000 42.28450000 65.14830000 33.61350000 24.49160000 40.79430000 1124 95.31570000 45.40660000 71.50820000 64.16740000 41.41110000 51.08790000 1125 40.14650000 19.29220000 26.09900000 9.228490000 6.070650000 5.719300000 1126 62.58200000 17.75160000 42.23920000 23.81620000 13.14030000 16.01710000 1127 75.32710000 26.03990000 65.69230000 39.36010000 22.18840000 41.15800000 1128 75.63680000 28.25110000 85.72590000 45.77270000 25.34890000 72.54650000 1129 34.01040000 8.988900000 41.85530000 8.245810000 4.196990000 14.88680000 1130 35.54570000 19.31240000 45.27500000 9.723060000 6.061430000 17.81960000 1131 47.21180000 54.81040000 44.11940000 19.12650000 23.67090000 18.79480000 1132 55.82880000 55.65630000 44.16920000 24.23890000 26.79150000 19.13120000 1133 59.61760000 26.77530000 0.000000000 19.51420000 12.99340000 1.255890000 1134 69.00280000 59.09270000 10.45610000 31.46870000 32.92870000 4.108230000 1135 100.0000000 75.95480000 12.03100000 67.98370000 64.06970000 7.502510000 1136 27.67270000 0.000000000 48.78900000 7.302210000 3.316130000 20.61240000 1137 45.68310000 0.000000000 88.95950000 24.84750000 11.12920000 77.12180000 1138 61.13780000 0.000000000 88.54260000 33.94540000 15.83750000 76.76720000 1139 83.96170000 0.000000000 87.54460000 53.31160000 25.86410000 75.82360000 1140 94.17510000 27.30350000 89.47210000 66.34500000 35.56490000 80.38820000 1141 19.48440000 11.24290000 15.30700000 2.035780000 1.449420000 1.729860000 1142 27.15050000 23.82030000 16.28520000 4.417540000 4.504300000 2.286190000 1143 50.38340000 34.64720000 16.13760000 14.91520000 12.81840000 3.080110000 1144 53.87510000 40.01950000 14.75990000 17.55490000 16.11410000 3.111470000 1145 54.74630000 45.09010000 15.67290000 18.86850000 18.91520000 3.627450000 1146 54.59840000 52.62160000 17.00810000 20.14260000 23.29590000 4.450750000 1147 58.62350000 69.68650000 40.34650000 28.76120000 38.56020000 17.49560000 1148 60.28830000 85.57780000 53.78410000 36.93580000 56.23520000 31.24750000 1149 44.32160000 66.02980000 40.91800000 19.71810000 31.20250000 17.17820000 1150 43.71070000 69.68690000 48.02980000 21.48010000 34.66810000 23.39050000 1151 63.13870000 87.91040000 48.27530000 38.74730000 59.58670000 26.28790000 1152 69.09010000 87.43900000 79.78000000 50.83700000 64.46410000 66.77500000 1153 75.37220000 86.48260000 86.16760000 58.01520000 66.97510000 78.03500000 1154 51.22790000 70.79240000 57.22590000 27.44120000 38.38410000 32.97270000 1155 51.89160000 74.55150000 65.86280000 30.86530000 42.91600000 43.91080000 1156 59.01010000 89.04260000 70.22470000 41.10350000 61.38310000 51.88290000 1157 30.56350000 37.62660000 28.64530000 7.619940000 9.984950000 7.363440000 1158 35.39250000 36.90460000 27.32940000 9.031150000 10.46780000 6.781990000 1159 38.99280000 51.83720000 27.59350000 12.75120000 18.97990000 7.846470000 1160 55.38910000 57.92710000 28.45120000 22.49890000 27.46510000 9.110470000 1161 22.06350000 19.19960000 0.000000000 2.569900000 2.735790000 0.284854000 1162 22.81010000 17.21500000 8.494150000 2.705720000 2.495260000 0.689849000 1163 21.83320000 15.40770000 0.000000000 2.333660000 2.072820000 0.210694000 1164 18.88610000 12.45300000 12.38810000 1.856370000 1.479580000 1.144990000 1165 18.39420000 35.44170000 8.942770000 3.381100000 7.164050000 1.277320000 1166 22.11770000 41.88080000 8.627500000 4.911050000 10.36310000 1.593030000 1167 21.56490000 68.76030000 21.14320000 10.73440000 28.79290000 6.445430000 1168 19.96950000 78.01790000 22.62910000 13.13350000 37.48850000 7.947900000 1169 20.02180000 100.0000000 45.51460000 23.56440000 64.93080000 24.70070000 1170 33.61440000 100.0000000 52.74120000 28.40640000 67.27990000 31.58700000 1171 30.77720000 36.19060000 23.51860000 7.084730000 9.249880000 5.067840000 1172 53.61510000 35.82360000 39.80360000 19.06470000 15.10410000 14.49680000 1173 53.83990000 41.54530000 40.03180000 19.97910000 17.71430000 14.95330000 1174 73.69540000 40.68760000 41.98140000 34.83190000 24.99520000 17.05510000 1175 89.09670000 39.84110000 41.63450000 49.93190000 32.45440000 17.46030000 1176 100.0000000 39.32350000 47.93520000 63.78950000 39.28530000 23.28240000 1177 40.46260000 33.72430000 29.38200000 10.85710000 10.32030000 7.721420000 1178 41.90210000 38.62100000 34.81130000 12.65280000 12.87130000 11.00600000 1179 42.71800000 48.26690000 34.48460000 14.43270000 17.94540000 11.37540000 1180 41.49370000 51.57440000 80.55400000 24.35610000 23.59990000 63.64840000 1181 14.62010000 24.36740000 56.40910000 7.015030000 5.382060000 28.49790000 1182 10.50280000 43.89920000 72.52560000 12.72650000 14.18420000 50.08290000 1183 14.75120000 52.95020000 85.65510000 18.82870000 21.29310000 72.30380000 1184 14.86770000 52.12140000 92.37740000 21.10760000 21.74040000 84.99190000 1185 7.649460000 76.65770000 50.21610000 14.67990000 36.72180000 25.73950000 1186 23.44180000 85.88040000 54.88990000 20.68070000 48.12250000 31.67000000 1187 36.38950000 62.33630000 0.000000000 12.80560000 25.40570000 2.792050000 1188 63.38500000 70.80550000 10.81920000 29.98360000 40.32650000 5.043960000 1189 64.77600000 78.93120000 0.000000000 33.22030000 48.72710000 5.240110000 1190 38.71360000 47.50020000 0.000000000 10.76380000 15.89230000 1.710000000 1191 38.21000000 48.32610000 60.93680000 17.03200000 18.79170000 35.10340000 1192 46.10480000 57.12100000 73.82560000 25.57710000 27.58720000 53.41140000 1193 49.54520000 58.37810000 87.42050000 31.99170000 31.15300000 76.49420000 1194 14.62870000 27.88670000 39.24280000 4.365830000 5.178760000 13.13560000 1195 12.90430000 39.81720000 42.04450000 5.886630000 9.727720000 15.70760000 1196 10.01380000 67.58130000 52.12930000 12.69500000 28.48500000 26.66140000 1197 0.000000000 69.60960000 58.57770000 14.16930000 30.60250000 33.76230000 1198 8.914180000 81.41590000 68.17580000 20.19260000 43.30150000 47.19800000 1199 20.36370000 30.25070000 24.17370000 3.908560000 5.753540000 4.956690000 1200 28.93350000 30.61770000 22.18360000 5.831170000 6.864410000 4.313880000 1201 32.13310000 33.80940000 19.67090000 6.984950000 8.437120000 3.647700000 1202 42.28360000 51.18950000 16.83780000 13.31500000 19.01370000 3.998290000 1203 40.92920000 55.70080000 12.89780000 13.41730000 21.57420000 3.426800000 1204 44.08030000 70.17820000 16.83910000 18.40810000 33.84880000 5.660600000 1205 59.78960000 80.78910000 12.45960000 30.40740000 48.91320000 6.308960000 1206 81.34950000 80.17050000 36.50710000 50.09150000 58.29020000 16.87110000 1207 20.71080000 16.67770000 14.85740000 2.453070000 2.266990000 1.718890000 1208 36.24850000 15.72620000 15.72920000 6.830340000 4.394160000 2.107470000 1209 41.70990000 11.33280000 22.61590000 9.299550000 5.154740000 4.224230000 1210 86.97720000 0.000000000 32.25680000 43.99620000 22.50440000 10.22040000 1211 88.85360000 0.000000000 47.41010000 48.11820000 24.38900000 21.28580000 1212 87.65780000 49.82000000 49.31510000 51.15070000 37.40020000 24.48940000 1213 72.58120000 15.48360000 15.00160000 29.09980000 15.84980000 2.980750000 1214 85.11380000 21.54460000 10.15530000 41.21690000 23.05550000 2.785050000 1215 90.44190000 78.57810000 88.03630000 71.37900000 66.44790000 81.22650000 1216 23.47040000 22.47360000 26.64150000 4.102510000 3.991070000 5.782490000 1217 24.01800000 27.26330000 24.31430000 4.407930000 5.226060000 4.944250000 1218 23.43350000 27.68740000 30.61030000 4.866110000 5.503650000 7.867300000 1219 26.77700000 75.42500000 58.62070000 18.97330000 37.70380000 34.57550000 1220 25.85550000 81.44580000 80.16960000 26.33400000 46.09420000 65.60410000 1221 25.91910000 80.77960000 85.86090000 28.02290000 46.14100000 75.44950000 1222 50.36520000 57.16170000 69.07580000 26.52610000 28.25280000 46.60070000 1223 67.59250000 57.15660000 68.18270000 37.89970000 34.14140000 45.90460000 1224 80.07740000 59.55010000 79.90220000 52.80460000 42.90230000 64.43720000 1225 39.28940000 22.55170000 31.23490000 9.548320000 6.764600000 8.283310000 1226 40.88240000 21.48860000 42.09970000 11.50410000 7.414280000 15.40570000 1227 81.10680000 20.39280000 49.62170000 40.98080000 22.27510000 23.14650000 1228 60.28460000 18.20960000 29.63190000 20.68430000 11.77090000 7.885380000 1229 100.0000000 16.14310000 32.90440000 59.64120000 31.52670000 11.43020000 1230 100.0000000 17.99800000 51.53860000 62.47980000 32.93290000 25.93730000 1231 45.00270000 56.52580000 0.000000000 15.25360000 23.02750000 2.482290000 1232 55.04440000 69.32490000 8.677620000 23.89060000 36.06110000 4.342990000 1233 55.24610000 89.60110000 0.000000000 30.21280000 57.33820000 6.283980000 1234 52.40010000 80.87310000 10.56530000 25.68900000 46.56320000 5.790410000 1235 54.09270000 84.03290000 25.58230000 28.52470000 50.86370000 10.46470000 1236 73.82180000 85.00310000 53.35900000 47.29230000 61.02960000 31.23340000 1237 23.22450000 8.392350000 26.97470000 3.460230000 1.890750000 5.695010000 1238 63.15200000 0.000000000 46.03690000 24.40570000 12.18880000 18.98370000 1239 64.95300000 0.000000000 70.54190000 31.06330000 15.00660000 47.06000000 1240 75.72900000 0.000000000 71.38140000 40.25890000 19.72130000 48.69290000 1241 82.60880000 10.62180000 69.34820000 46.43530000 23.35360000 46.14490000 1242 61.46010000 10.50650000 66.81390000 27.65510000 13.73760000 41.81100000 1243 61.31240000 9.951460000 73.87550000 29.45310000 14.40080000 51.89780000 1244 61.32780000 10.94680000 83.25060000 32.39690000 15.66020000 67.21380000 1245 70.28770000 13.57240000 89.34180000 41.47780000 20.34610000 78.69720000 1246 81.67590000 18.51290000 100.0000000 56.22700000 28.11740000 101.0310000 1247 52.59540000 30.45510000 40.35970000 17.95350000 12.85250000 14.65150000 1248 60.85460000 94.76070000 39.98200000 38.33440000 66.70780000 20.38580000 1249 81.25290000 94.22110000 40.20920000 55.34730000 74.88690000 21.27810000 1250 89.48630000 94.23240000 39.87060000 63.94400000 79.33710000 21.43810000 1251 13.19640000 10.19130000 13.60220000 1.027180000 0.852928000 1.310550000 1252 14.07710000 7.363550000 16.28090000 1.180630000 0.740013000 1.889210000 1253 8.702370000 22.85620000 43.63930000 4.029230000 3.796080000 16.29080000 1254 8.669640000 30.11420000 50.16750000 5.719530000 6.267810000 22.26180000 1255 0.000000000 33.84890000 63.29540000 8.596480000 8.545600000 36.90720000 1256 7.874750000 46.00790000 63.75800000 10.57450000 14.28480000 38.13170000 1257 0.000000000 47.73460000 70.86080000 12.47190000 15.86530000 47.86270000 1258 0.000000000 47.58030000 100.0000000 22.44290000 19.77630000 100.5060000 1259 15.66400000 51.83540000 100.0000000 24.17190000 22.81960000 100.8380000 1260 11.70860000 42.41840000 81.71790000 15.40220000 14.60960000 64.68130000 1261 52.26110000 51.00240000 100.0000000 36.88200000 28.93450000 101.3830000 1262 23.60730000 15.93000000 51.50340000 7.111430000 4.096670000 23.27570000 1263 30.69360000 11.45290000 54.19930000 9.345650000 4.705800000 26.03550000 1264 28.86360000 0.000000000 61.85680000 10.29510000 4.551630000 34.64280000 1265 27.74250000 31.96750000 74.35180000 14.75650000 10.80360000 52.39380000 1266 7.818960000 17.45440000 29.52770000 1.898320000 1.973980000 6.940100000 1267 10.75320000 74.64270000 27.59600000 11.28870000 33.63750000 9.575920000 1268 10.52020000 92.94940000 35.13000000 18.09080000 54.37890000 15.96890000 1269 30.20410000 39.96070000 7.376630000 6.673740000 10.50600000 1.455160000 1270 32.20000000 46.99570000 7.266930000 8.355600000 14.40370000 1.876930000 1271 30.83790000 51.27050000 10.53250000 8.741270000 16.72570000 2.531870000 1272 33.63050000 58.72250000 10.10350000 11.12560000 22.21110000 3.078760000 1273 40.03090000 79.18620000 50.09000000 22.92080000 43.16560000 26.26200000 1274 24.15270000 42.66750000 32.35130000 6.958660000 11.57450000 9.490410000 1275 33.86200000 48.39370000 66.23730000 16.69650000 18.50440000 41.74610000 1276 38.71890000 61.06760000 90.88000000 28.67900000 30.99540000 83.04960000 1277 8.504100000 42.92000000 36.25280000 5.163820000 10.70400000 11.75550000 1278 8.578790000 43.54430000 43.57120000 6.269110000 11.42440000 17.09590000 1279 10.11970000 50.74680000 43.36210000 7.544290000 15.50440000 17.38790000 1280 80.52050000 53.14680000 73.69790000 50.05190000 37.93570000 54.10110000 1281 80.96410000 58.31290000 86.43220000 55.57110000 43.31100000 75.78890000 1282 81.05150000 71.15500000 86.33590000 58.73550000 53.86330000 76.80220000 1283 80.59030000 82.38690000 93.14750000 64.09730000 65.90860000 91.09520000 1284 8.724510000 18.59410000 15.22350000 1.028610000 1.810400000 1.766340000 1285 8.332630000 25.53640000 15.62770000 1.483440000 3.369640000 2.035160000 1286 30.92080000 67.05200000 14.16110000 12.32310000 28.39810000 4.485500000 1287 66.81610000 78.96190000 15.39540000 35.10330000 49.68950000 6.935460000 1288 74.89510000 83.74500000 11.65960000 43.26630000 58.28140000 7.093400000 1289 77.00670000 88.19620000 0.000000000 46.54040000 64.33060000 6.882510000 1290 30.04280000 28.62220000 14.20470000 5.538480000 6.220690000 1.998990000 1291 33.17620000 27.39970000 22.19740000 6.858450000 6.540870000 4.267430000 1292 38.61970000 31.75310000 23.26000000 9.366470000 9.006780000 4.911120000 1293 38.51600000 56.93300000 23.40530000 13.22200000 22.13200000 6.445150000 1294 43.97680000 56.76020000 47.89800000 18.53820000 24.42850000 22.11750000 1295 71.11440000 57.42450000 74.42790000 42.55920000 36.50530000 55.13690000 1296 27.23370000 7.976540000 34.59610000 5.195550000 2.672490000 9.784830000 1297 49.27900000 11.28140000 33.52010000 14.01730000 7.469010000 9.586480000 1298 50.29330000 0.000000000 62.79390000 19.48500000 9.264640000 36.22170000 1299 85.20770000 45.84530000 88.98440000 58.45590000 38.02370000 79.85830000 1300 34.34420000 21.17990000 37.04420000 8.228030000 5.748090000 11.65150000 1301 55.70750000 19.54710000 41.84600000 19.21110000 11.05270000 15.53350000 1302 86.88640000 27.71640000 72.78660000 52.79900000 29.30470000 51.69940000 1303 87.39120000 47.18890000 77.14700000 57.07280000 38.39150000 59.38840000 1304 100.0000000 47.84180000 89.66750000 76.14540000 48.05620000 82.08550000 1305 73.75450000 39.98060000 69.89510000 40.55770000 27.00190000 47.41570000 1306 75.73590000 71.73900000 75.94100000 50.51040000 50.46590000 58.98730000 1307 75.01640000 82.22630000 78.95360000 53.90540000 61.07230000 64.98210000 1308 74.96660000 86.67340000 79.50850000 55.51600000 66.12850000 66.45940000 1309 87.86970000 90.54860000 81.62100000 70.35160000 77.61950000 71.13360000 1310 20.61830000 69.23420000 11.25690000 10.20960000 28.93090000 4.045280000 1311 33.17210000 69.81890000 0.000000000 13.51330000 31.09430000 3.445880000 1312 31.98460000 83.05250000 10.29240000 17.16090000 44.17430000 5.585800000 1313 66.73890000 93.09220000 44.39190000 42.70520000 67.07690000 23.76460000 1314 80.96580000 100.0000000 45.58330000 58.14680000 82.76080000 26.37850000 1315 49.59250000 63.09390000 39.15530000 21.46650000 30.10080000 15.75270000 1316 56.86050000 67.38710000 47.77620000 28.15850000 36.40730000 23.27740000 1317 56.06390000 76.59370000 57.47670000 32.04280000 45.45460000 34.01490000 1318 92.37340000 84.94680000 84.98110000 74.55700000 74.05890000 76.50930000 1319 94.99180000 86.09620000 91.32580000 80.27450000 77.85990000 88.69230000 1320 100.0000000 93.65720000 94.01790000 90.16820000 90.62270000 95.37200000 1321 49.14230000 46.20620000 43.28360000 18.47010000 18.91120000 17.57770000 1322 78.09910000 56.91330000 44.44140000 42.02040000 36.69280000 20.27180000 1323 61.67140000 30.16850000 23.79680000 22.05180000 15.08890000 5.656950000 1324 100.0000000 32.89450000 29.19750000 60.53620000 35.67820000 9.926880000 1325 55.77760000 19.23600000 24.53560000 17.32330000 10.24980000 5.446950000 1326 58.61050000 26.25760000 88.60980000 33.21660000 18.26740000 77.18620000 1327 72.25730000 30.68390000 92.82240000 45.58100000 25.61080000 85.99740000 1328 69.75830000 45.65340000 91.93930000 45.07360000 30.91030000 84.88230000 1329 90.74170000 57.30470000 94.32920000 68.58280000 49.07420000 91.44170000 1330 24.27940000 19.41930000 26.30380000 4.067050000 3.428090000 5.568750000 1331 30.51120000 24.20520000 29.64610000 6.355870000 5.475160000 7.348680000 1332 59.06810000 71.65120000 32.27370000 28.59640000 40.10480000 12.48620000 1333 69.83750000 82.92910000 34.61880000 40.30520000 55.79610000 15.52620000 1334 24.25070000 33.19360000 21.90520000 4.866010000 7.134320000 4.259810000 1335 23.68470000 43.34660000 23.76080000 6.177450000 11.54990000 5.441090000 1336 64.56310000 49.70250000 47.45090000 29.67350000 26.30400000 21.79000000 1337 80.93030000 52.78730000 53.41630000 45.50580000 35.95970000 28.39270000 1338 95.23830000 67.45270000 60.41410000 65.82220000 55.58550000 38.12360000 1339 41.10370000 48.17360000 26.77860000 12.92280000 17.21070000 7.267690000 1340 48.43320000 50.66720000 29.99380000 17.20080000 20.63460000 9.148680000 1341 50.04790000 49.56180000 36.04820000 18.54340000 20.68570000 12.61090000 1342 54.14950000 79.34460000 36.63040000 28.18680000 46.25770000 15.83890000 1343 81.24940000 88.76330000 23.13580000 51.55690000 67.40270000 11.11280000 1344 93.31960000 92.75970000 25.81970000 66.22170000 79.10030000 13.35730000 1345 57.42530000 43.01230000 8.364040000 20.01050000 18.62270000 2.325940000 1346 58.19000000 65.87330000 19.43800000 25.45290000 34.29390000 6.345930000 1347 68.01620000 79.25650000 85.42210000 49.14410000 55.68580000 75.49270000 1348 84.22990000 95.35120000 94.14050000 72.73030000 83.47680000 95.01700000 1349 83.73950000 94.42600000 100.0000000 74.21170000 82.95430000 107.1850000 1350 33.96890000 44.65020000 52.97860000 13.17110000 15.27960000 25.96600000 1351 34.87660000 51.46400000 57.70840000 15.60950000 19.73470000 31.49340000 1352 45.19750000 52.90840000 59.03720000 20.53830000 23.01700000 33.32000000 1353 59.03600000 58.82230000 64.68000000 31.09120000 31.74670000 41.06950000 1354 59.42710000 62.24870000 82.17970000 37.12590000 36.47420000 67.73010000 1355 93.44400000 68.44600000 81.97780000 69.89900000 57.73090000 69.42830000 1356 29.35440000 24.87820000 9.024800000 4.858070000 4.987980000 1.013900000 1357 72.28170000 52.05240000 9.130550000 32.75600000 29.52640000 3.517420000 1358 95.23500000 64.31750000 6.957410000 58.88320000 50.49720000 5.386260000 1359 72.78720000 55.79160000 0.000000000 33.82230000 32.17210000 3.302010000 1360 76.61320000 62.61560000 100.0000000 57.54820000 46.48530000 103.1540000 1361 7.956300000 12.19390000 24.24170000 1.235850000 1.060620000 4.471890000 1362 7.769590000 11.91420000 32.95160000 2.019720000 1.345950000 8.703160000 1363 32.82090000 56.11260000 32.53970000 11.77590000 20.80740000 10.60870000 1364 33.54240000 59.50320000 64.26160000 18.25990000 25.56670000 39.98380000 1365 33.25190000 69.31590000 72.35970000 22.64650000 34.35460000 52.05880000 1366 26.31120000 34.19420000 34.71650000 6.649080000 8.235790000 10.48740000 1367 35.59430000 39.25820000 47.04090000 11.90490000 12.52540000 20.05790000 1368 36.75870000 38.58910000 55.88380000 13.90370000 13.11280000 28.73840000 1369 31.10450000 32.84440000 48.27000000 9.817680000 9.217960000 20.79470000 1370 40.12030000 32.64530000 47.90210000 13.05040000 10.83110000 20.60870000 1371 42.02460000 31.31350000 67.62960000 17.97600000 12.48450000 42.89080000 1372 46.45640000 42.49250000 84.41390000 26.47430000 20.24620000 69.86660000 1373 51.01640000 68.72270000 90.60990000 36.40940000 40.32270000 83.51360000 1374 31.16260000 35.99800000 58.56730000 12.20420000 11.24240000 31.51930000 1375 30.90350000 42.29890000 70.52300000 15.88680000 15.19590000 47.25650000 1376 8.055710000 5.331570000 20.66850000 0.843277000 0.451177000 3.114980000 1377 0.000000000 80.37570000 17.34540000 11.87490000 38.96050000 6.475140000 1378 19.98490000 79.38640000 39.03060000 15.21550000 39.57070000 16.85210000 1379 23.71110000 91.98110000 44.87320000 21.10260000 54.74560000 23.00990000 1380 86.32430000 90.26580000 55.10700000 61.62320000 73.63140000 34.33030000 1381 94.08650000 91.37590000 54.62390000 70.63030000 79.44330000 34.37890000 1382 14.07480000 7.982940000 8.280980000 0.923072000 0.671629000 0.477255000 1383 12.84370000 4.622900000 8.896570000 0.745576000 0.435382000 0.522303000 1384 12.04510000 11.22410000 7.296040000 0.759515000 0.817959000 0.396535000 1385 11.56590000 6.193600000 13.11640000 0.758908000 0.483506000 1.176910000 1386 15.17220000 0.000000000 8.283720000 0.990448000 0.501600000 0.456837000 1387 66.15450000 8.620970000 20.27690000 23.89310000 12.49710000 4.086860000 1388 94.01410000 8.356920000 24.44240000 51.27950000 26.56890000 6.861550000 1389 94.41910000 25.82350000 46.68870000 55.29930000 30.81290000 21.30680000 1390 94.80000000 28.30680000 56.15590000 57.72820000 32.46690000 30.70730000 1391 79.69820000 58.55690000 64.94030000 48.01440000 40.30140000 42.17750000 1392 81.00320000 61.85550000 74.70160000 52.64670000 44.48510000 56.35040000 1393 52.18750000 45.34970000 45.68410000 20.41830000 19.47990000 19.58660000 1394 63.70510000 63.98780000 45.70630000 31.70840000 35.87630000 21.36720000 1395 63.33350000 63.29240000 51.64500000 32.30670000 35.59200000 26.75210000 1396 75.66320000 63.95890000 56.48940000 43.53540000 41.72390000 32.33790000 1397 25.12950000 7.136550000 56.24830000 8.131360000 3.738730000 28.11650000 1398 30.19550000 10.55100000 75.47530000 14.41090000 6.636520000 53.63380000 1399 48.26210000 16.62250000 100.0000000 30.79730000 14.73080000 99.80730000 1400 15.96760000 10.96430000 45.02860000 4.419020000 2.313590000 17.24740000 1401 13.72330000 76.31890000 69.93110000 19.54220000 38.42900000 49.07750000 1402 10.65680000 79.05930000 78.14480000 22.42740000 42.00970000 61.86580000 1403 14.67760000 93.86300000 80.90290000 28.79800000 59.73650000 68.38730000 1404 10.11020000 38.10030000 8.700090000 2.683270000 7.741420000 1.325310000 1405 69.85950000 64.83320000 9.242760000 33.45860000 37.73940000 4.479520000 1406 84.22800000 70.82260000 12.48840000 48.42110000 49.84030000 6.183120000 1407 95.38120000 71.33780000 20.99660000 61.41120000 56.89040000 8.999610000 1408 90.80060000 68.62390000 44.43520000 57.91120000 52.72220000 21.92460000 1409 94.51570000 76.53800000 48.19230000 65.02840000 62.62210000 26.21810000 1410 93.92090000 80.80670000 55.17560000 66.94240000 67.20100000 33.58280000 1411 54.51870000 36.26890000 24.12430000 18.00970000 14.90490000 5.817020000 1412 69.32680000 37.97890000 32.11310000 29.52200000 21.36650000 10.19990000 1413 75.16010000 67.11230000 54.43360000 43.43610000 43.94250000 30.40170000 1414 74.62530000 84.09770000 64.84310000 50.23370000 61.38800000 44.48110000 1415 78.29660000 87.42000000 74.92310000 57.45160000 68.02670000 59.37010000 1416 79.26400000 100.0000000 85.75520000 66.57130000 85.93910000 79.38740000 1417 42.05220000 63.67070000 75.22690000 25.52010000 31.69430000 56.02460000 1418 42.24930000 72.16140000 83.65810000 30.43580000 40.16610000 70.80740000 1419 41.42070000 87.67510000 86.17640000 35.76280000 56.68220000 77.14630000 1420 16.82970000 21.82120000 13.31260000 2.020880000 2.885500000 1.477730000 1421 13.78870000 24.03180000 7.846400000 1.615250000 3.136030000 0.709418000 1422 7.797610000 36.22780000 24.22700000 3.032900000 7.167460000 5.154200000 1423 12.24230000 49.91240000 31.79100000 6.107230000 14.50660000 9.533210000 1424 39.90910000 51.55200000 90.46840000 27.06980000 24.59390000 81.53180000 1425 51.46690000 65.41720000 94.25350000 37.20260000 38.17900000 90.43530000 1426 75.30510000 65.44940000 92.83570000 54.19410000 47.02540000 88.40610000 1427 37.82240000 9.183270000 26.69340000 7.925430000 4.245940000 5.784520000 1428 57.02560000 0.000000000 27.40470000 17.86130000 9.083300000 6.537860000 1429 77.82240000 4.280370000 29.12450000 34.49290000 17.69280000 8.139570000 1430 93.66110000 30.33090000 41.39100000 53.98700000 31.38030000 17.09750000 1431 93.91320000 39.99000000 62.52820000 59.40570000 36.93910000 38.58990000 1432 43.65940000 18.32990000 30.75400000 11.17200000 6.871730000 8.018600000 1433 45.96620000 23.05020000 50.48350000 15.35920000 9.544170000 22.81630000 1434 53.24170000 24.50800000 65.36000000 22.64790000 13.23670000 39.90260000 1435 53.63920000 28.08300000 73.59260000 25.38170000 15.23410000 51.62370000 1436 72.69960000 12.93030000 30.15390000 30.15920000 15.98620000 8.516830000 1437 85.03300000 15.32310000 35.47570000 42.60160000 22.60240000 12.15370000 1438 89.06520000 32.09920000 35.37160000 48.14440000 28.97100000 12.75770000 1439 87.95430000 38.89860000 54.32170000 50.73240000 32.25500000 28.82550000 1440 87.32040000 50.24030000 70.16810000 55.51990000 39.32840000 49.04000000 1441 94.59390000 55.28570000 81.60000000 68.11030000 48.16780000 67.69400000 1442 34.85360000 16.92090000 8.076230000 6.126160000 4.218640000 0.799712000 1443 64.08110000 36.74580000 9.736810000 23.83760000 18.15880000 2.387870000 1444 68.07230000 37.34310000 0.000000000 26.87940000 19.95250000 1.969490000 1445 87.94100000 46.00030000 9.581500000 46.94570000 33.83110000 3.888000000 1446 94.77590000 83.05210000 67.15590000 71.42620000 71.26210000 48.39490000 1447 96.78420000 87.32100000 81.37590000 79.40330000 79.01710000 70.76110000 1448 18.68680000 16.89220000 24.01420000 2.630140000 2.326190000 4.511380000 1449 15.67040000 15.46780000 32.49050000 2.873100000 2.174800000 8.526840000 1450 30.49590000 24.76400000 37.85870000 7.318010000 5.985210000 12.23460000 1451 34.91760000 39.63240000 39.10950000 10.51300000 12.08940000 13.76590000 1452 36.77620000 51.78170000 39.13640000 13.14550000 19.00540000 14.55620000 1453 44.27290000 58.78890000 41.70880000 18.12940000 25.55940000 17.13490000 1454 46.13500000 64.41570000 69.62770000 26.06390000 32.66730000 47.89230000 1455 12.80610000 29.17700000 26.09440000 2.844380000 4.894340000 5.664930000 1456 7.758180000 33.70850000 28.79610000 3.123950000 6.334330000 7.070650000 1457 46.44160000 32.91530000 39.08370000 14.67140000 11.90540000 13.67120000 1458 35.48340000 22.87570000 27.01990000 7.689480000 5.916160000 6.128590000 1459 51.47910000 21.06780000 28.04170000 15.14250000 9.405220000 6.907740000 1460 61.45600000 26.78820000 28.40400000 21.97420000 14.12830000 7.539860000 1461 15.48360000 33.67550000 15.96500000 2.980200000 6.352090000 2.442920000 1462 10.74150000 60.31950000 34.48260000 8.340590000 21.58210000 11.87910000 1463 0.000000000 67.44090000 39.71650000 10.27160000 27.36680000 15.98080000 1464 0.000000000 58.44590000 68.12000000 13.78490000 22.49050000 44.78060000 1465 19.32580000 69.29220000 84.73840000 22.90850000 34.02820000 72.09580000 1466 34.28360000 92.81500000 93.69710000 37.53380000 62.59240000 92.15850000 1467 18.51260000 30.23810000 28.96550000 3.982810000 5.741480000 7.072890000 1468 16.12860000 38.01670000 30.55950000 4.642440000 8.570550000 8.201230000 1469 37.37770000 38.07460000 32.76050000 10.45910000 11.56440000 9.673520000 1470 61.59100000 15.29630000 8.520300000 20.24630000 11.28550000 1.484840000 1471 62.46630000 12.19910000 53.02940000 25.33600000 13.04470000 25.59540000 1472 73.41820000 11.20650000 63.65700000 36.35140000 18.36920000 38.13830000 1473 82.96640000 8.933750000 80.72700000 50.09270000 24.73190000 63.72840000 1474 25.87610000 41.11750000 27.37000000 6.666730000 10.84150000 6.875500000 1475 23.86810000 40.95800000 36.49520000 7.125740000 10.90290000 11.90880000 1476 29.49700000 54.23140000 46.88600000 12.32270000 19.78420000 20.76320000 1477 39.31410000 73.20940000 51.71280000 21.15920000 37.17820000 27.15140000 1478 59.23290000 72.30950000 70.27860000 35.98880000 43.61440000 49.95550000 1479 7.607440000 11.40550000 8.684370000 0.443626000 0.667422000 0.528470000 1480 3.999670000 7.159900000 11.74750000 0.274359000 0.283046000 0.916587000 1481 7.505690000 10.01910000 12.06440000 0.491467000 0.570093000 1.000660000 1482 7.698640000 15.01300000 11.27540000 0.646605000 1.136800000 0.934651000 1483 13.74900000 13.37350000 5.235740000 0.985152000 1.141520000 0.270045000 1484 20.80280000 72.46710000 80.21610000 22.55310000 36.47360000 64.60990000 1485 27.12500000 76.44550000 88.47230000 27.92580000 42.18760000 79.78780000 1486 38.14590000 87.78610000 92.32700000 36.64750000 56.99240000 88.79640000 1487 52.09410000 88.53580000 95.00490000 44.75360000 61.80720000 94.61320000 1488 6.728300000 22.76930000 20.78270000 1.463240000 2.738340000 3.410890000 1489 8.406400000 21.74600000 30.08550000 2.237240000 2.853680000 7.321170000 1490 8.303230000 23.46190000 39.53010000 3.451750000 3.689530000 13.17780000 1491 27.80820000 24.52930000 51.93960000 8.755810000 6.417170000 23.95310000 1492 65.63390000 22.78620000 60.24590000 29.73750000 16.67510000 33.86730000 1493 70.69380000 42.62670000 61.38100000 36.17650000 26.06050000 36.23040000 1494 36.14420000 81.66300000 33.39380000 19.72210000 44.02730000 13.69940000 1495 53.98600000 86.71200000 38.77830000 30.76890000 54.44990000 18.20430000 1496 53.22160000 92.03860000 72.35960000 39.10520000 63.39420000 55.22590000 1497 18.95690000 57.38990000 39.00760000 9.332810000 20.21450000 14.65740000 1498 15.64820000 72.60460000 43.23860000 13.12930000 32.71980000 19.22280000 1499 27.45490000 79.74270000 69.05910000 22.97550000 43.19940000 48.36720000 1500 32.90690000 41.29240000 37.29020000 9.807210000 12.40870000 12.56970000 1501 34.11570000 52.07150000 48.06040000 13.59200000 19.23210000 21.72310000 1502 42.29170000 62.20320000 61.74040000 21.73780000 29.16950000 37.21960000 1503 42.21900000 72.45370000 63.87660000 24.81440000 38.15700000 40.87580000 1504 22.57560000 29.26040000 27.85160000 4.560360000 5.783950000 6.536690000 1505 25.29570000 34.17030000 83.74750000 17.29700000 12.45750000 67.90770000 1506 14.49400000 18.48010000 39.33290000 3.694950000 2.922660000 12.94520000 1507 15.40490000 27.61970000 49.43330000 6.034960000 5.788270000 21.51240000 1508 17.82520000 59.73260000 72.58650000 16.57650000 24.59020000 51.33490000 1509 82.23410000 85.72550000 91.00100000 66.02790000 70.16680000 87.35470000 1510 85.87820000 91.97540000 94.19270000 73.19870000 80.06690000 94.71840000 1511 37.65730000 42.53850000 46.41100000 13.04290000 14.43700000 19.71790000 1512 55.93840000 72.06790000 47.45010000 28.75410000 40.27260000 23.43000000 1513 55.07300000 94.97330000 47.17440000 35.70230000 65.45680000 26.03060000 1514 44.88230000 78.21070000 34.99200000 22.58000000 42.39370000 14.42700000 1515 54.51230000 88.47230000 49.22190000 33.31820000 57.33330000 26.96360000 1516 90.76640000 90.54370000 77.71600000 72.32770000 78.77560000 64.80120000 1517 26.44850000 26.28630000 20.99660000 4.685640000 5.160780000 3.721420000 1518 34.19750000 27.58940000 26.78200000 7.577500000 6.918180000 6.140170000 1519 66.19380000 64.82210000 32.71230000 32.03870000 36.82470000 12.30490000 1520 74.50240000 91.92240000 54.13770000 50.48600000 69.64320000 32.99650000 1521 82.18230000 94.46270000 72.45120000 63.09160000 78.36550000 56.78770000 1522 16.11650000 16.87470000 8.532780000 1.495870000 1.823670000 0.631968000 1523 12.33150000 22.84010000 34.18040000 3.074600000 3.446680000 9.652900000 1524 11.76110000 29.84710000 33.97480000 3.571850000 5.361570000 9.747110000 1525 16.50130000 29.30610000 36.03910000 4.339270000 5.582420000 11.03280000 1526 21.66000000 47.60900000 70.15270000 14.25300000 16.74550000 46.93300000 1527 22.88410000 48.84700000 77.03520000 16.69250000 18.37900000 57.41390000 1528 21.79800000 56.01130000 79.86840000 18.68860000 23.16940000 62.53330000 1529 19.02500000 87.61960000 85.80230000 28.81280000 53.05810000 76.13990000 1530 17.00290000 100.0000000 93.12570000 35.81660000 69.77290000 91.87770000 1531 46.48170000 26.13900000 19.92850000 12.20900000 9.013000000 3.725540000 1532 80.65730000 23.99500000 17.34400000 37.14950000 21.41220000 4.093420000 1533 81.56970000 52.11540000 14.37130000 41.53640000 34.06810000 4.802910000 1534 82.04260000 52.69580000 43.35180000 44.84730000 35.77220000 19.24760000 1535 67.55680000 57.04330000 62.42140000 36.41730000 33.47480000 38.35950000 1536 69.34240000 63.21840000 61.74170000 39.06510000 38.78200000 38.11180000 1537 75.67040000 71.97630000 69.08040000 48.58450000 49.88290000 48.83630000 1538 77.25990000 78.21080000 73.59730000 53.09720000 57.23620000 56.15980000 1539 79.19260000 29.96320000 9.195760000 35.93540000 22.27190000 2.637480000 1540 79.23190000 37.99410000 8.333250000 36.85240000 25.32150000 2.880030000 1541 90.54990000 42.22520000 0.000000000 49.14700000 33.32440000 3.232960000 1542 90.71580000 50.26250000 58.68360000 56.46320000 40.15070000 34.43510000 1543 35.36890000 5.698190000 16.64750000 6.264190000 3.285280000 2.209770000 1544 48.96460000 4.080020000 16.87870000 12.38610000 6.389780000 2.549300000 1545 70.88120000 20.56120000 55.80810000 32.84620000 17.97270000 28.97200000 1546 84.06670000 27.51620000 81.61680000 52.49880000 28.79000000 65.67040000 1547 14.66180000 13.18530000 54.17690000 5.950240000 3.120030000 25.87240000 1548 11.06630000 9.594630000 76.91740000 11.13010000 4.823730000 55.72080000 1549 30.31810000 14.06650000 89.39270000 19.13500000 8.877400000 77.75300000 1550 54.14180000 9.253590000 91.04830000 30.37220000 14.17310000 81.39120000 1551 100.0000000 17.87070000 91.66340000 73.63380000 37.37460000 84.71770000 1552 41.59450000 13.91630000 33.50560000 10.31990000 5.819730000 9.434780000 1553 70.81800000 23.51810000 32.17640000 29.32580000 17.14510000 9.745440000 1554 83.92810000 39.43600000 60.27920000 47.81000000 30.80610000 35.31430000 1555 87.76520000 39.00880000 68.75200000 53.87990000 33.53340000 46.40460000 1556 91.63230000 39.55890000 91.86650000 65.61930000 38.94510000 85.40390000 1557 43.40760000 36.31850000 46.49900000 14.69580000 12.90480000 19.59330000 1558 50.12510000 37.08040000 47.57250000 18.39450000 15.05890000 20.73650000 1559 50.22550000 56.04060000 54.01540000 22.73230000 26.03720000 28.15410000 1560 56.05860000 55.14850000 89.29910000 35.83530000 31.14240000 79.95010000 1561 57.81560000 65.99720000 89.30510000 39.39890000 39.93500000 80.93930000 1562 28.75400000 34.95920000 39.18510000 7.956760000 9.095560000 13.50400000 1563 36.39280000 37.86780000 41.77150000 11.19740000 11.73730000 15.66300000 1564 39.29430000 36.38180000 41.43180000 12.11110000 11.68460000 15.38770000 1565 74.66830000 70.24010000 43.05510000 41.81770000 45.66870000 20.20670000 1566 85.20220000 87.67810000 44.42940000 57.60660000 69.15170000 23.83940000 1567 44.66140000 42.59330000 16.86530000 13.01210000 14.80300000 3.518420000 1568 60.81450000 52.31980000 17.61660000 24.19450000 25.21870000 4.782060000 1569 77.46700000 67.24200000 17.90700000 41.07300000 43.33990000 6.749940000 1570 89.31450000 77.02360000 78.40060000 66.45140000 62.93210000 64.13390000 1571 89.37900000 86.26450000 82.31560000 70.72650000 73.46550000 71.82980000 1572 55.46260000 56.88600000 67.07220000 28.95970000 29.40370000 43.96600000 1573 57.81470000 63.94840000 72.79200000 33.58520000 36.12360000 52.75740000 1574 64.91520000 70.33240000 76.51910000 41.30220000 44.60660000 59.33070000 1575 72.41530000 77.85720000 86.86270000 52.86660000 56.32260000 78.12710000 1576 80.85120000 80.20800000 86.75050000 61.32770000 62.76270000 78.56050000 1577 22.74040000 20.15250000 31.12830000 4.213310000 3.574600000 7.925100000 1578 23.96340000 18.26020000 34.73920000 4.772230000 3.511240000 9.975300000 1579 42.50970000 27.49040000 72.92800000 19.27230000 11.95670000 50.33140000 1580 58.40690000 39.96500000 79.15260000 31.39840000 21.96170000 61.04600000 1581 17.83610000 6.190630000 21.67400000 1.994200000 1.069910000 3.510320000 1582 19.98660000 10.89950000 23.15040000 2.566980000 1.642580000 4.101620000 1583 20.96360000 12.30530000 30.05610000 3.379790000 2.118280000 7.205210000 1584 22.84780000 25.12930000 31.69010000 4.636600000 4.766630000 8.361980000 1585 22.40510000 23.92260000 35.14910000 4.835480000 4.563160000 10.34870000 1586 52.29790000 21.33280000 93.56590000 30.74300000 15.75000000 86.52460000 1587 21.79350000 7.659300000 40.19830000 4.623600000 2.277680000 13.47800000 1588 23.75740000 32.45390000 45.50870000 7.338270000 7.873550000 18.25890000 1589 27.03240000 40.82950000 52.67520000 10.43100000 12.26140000 25.34470000 1590 8.329010000 15.09040000 18.73340000 1.006820000 1.295070000 2.613660000 1591 7.277700000 11.79350000 17.21120000 0.742451000 0.820442000 2.140810000 1592 5.786690000 7.882800000 15.20120000 0.477779000 0.410954000 1.605450000 1593 7.798030000 6.711970000 10.17690000 0.383397000 0.323225000 0.679675000 1594 7.480020000 3.872360000 13.33000000 0.430897000 0.238009000 1.193530000 1595 11.59140000 8.526660000 7.725920000 0.654474000 0.566350000 0.410356000 1596 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1597 14.54950000 59.79830000 27.20830000 7.894980000 21.10670000 7.982190000 1598 17.85740000 83.92040000 33.70610000 15.64450000 44.02520000 13.93590000 1599 14.23230000 89.76380000 59.74290000 21.48570000 52.30440000 37.54040000 1600 70.74360000 93.43730000 66.70190000 50.64480000 71.01340000 48.03420000 1601 92.57430000 27.79320000 20.09440000 50.33360000 29.07130000 5.610290000 1602 92.76680000 37.88380000 26.30310000 52.08640000 33.02990000 8.382390000 1603 93.37610000 65.70720000 47.41450000 60.61700000 51.94520000 24.33650000 1604 92.93010000 69.74660000 90.45430000 72.57780000 59.74870000 84.99940000 1605 56.16720000 50.54410000 60.06220000 26.49010000 24.80550000 34.64190000 1606 58.12450000 80.07790000 77.84970000 39.72140000 51.84270000 62.30820000 1607 61.84150000 92.15730000 78.20930000 46.50690000 67.13720000 64.57980000 1608 72.10750000 100.0000000 79.14730000 57.90170000 81.71980000 67.65290000 1609 11.10280000 15.23130000 21.18240000 1.374570000 1.484870000 3.399050000 1610 0.000000000 14.75890000 43.52430000 3.296830000 2.141650000 16.01560000 1611 12.18080000 29.04680000 93.35290000 17.96440000 10.89850000 85.70310000 1612 0.000000000 21.68110000 88.50010000 15.02930000 7.928880000 76.01670000 1613 17.07150000 20.35850000 90.05600000 16.69010000 8.481970000 79.00100000 1614 54.47670000 33.47370000 92.52710000 32.70160000 19.81720000 84.90890000 1615 59.27510000 39.92250000 89.59470000 35.50140000 23.65310000 79.64150000 1616 65.91300000 51.09190000 92.18050000 43.03060000 32.50830000 85.56900000 1617 36.88680000 37.74730000 80.76900000 20.37660000 15.38490000 63.10350000 1618 39.60460000 49.92400000 100.0000000 30.36870000 25.02090000 101.0130000 1619 19.20550000 25.54530000 73.98030000 12.15410000 7.788700000 51.51440000 1620 21.32800000 41.38730000 86.23780000 18.18390000 15.44360000 72.68300000 1621 19.72480000 47.61890000 85.04980000 18.43430000 18.38000000 70.88510000 1622 0.000000000 26.31210000 47.60970000 4.664180000 4.800610000 19.75580000 1623 0.000000000 55.03910000 75.86470000 15.24200000 20.97280000 55.89790000 1624 40.53220000 61.64160000 82.61940000 26.68380000 30.67370000 67.94750000 1625 50.78760000 76.44190000 91.08330000 38.59990000 47.57840000 85.24450000 1626 51.21600000 81.75490000 100.0000000 43.97320000 54.63460000 104.2850000 1627 25.04480000 14.33800000 6.792760000 3.055300000 2.311770000 0.494953000 1628 24.31260000 17.98490000 18.74630000 3.472220000 2.957380000 2.778490000 1629 27.14490000 21.41370000 17.41070000 4.305920000 3.967040000 2.513120000 1630 30.51180000 20.93210000 20.10740000 5.386460000 4.419340000 3.336830000 1631 37.72980000 92.48180000 47.07670000 25.97390000 57.74720000 25.17500000 1632 43.11600000 100.0000000 46.18880000 31.06270000 68.78440000 25.62380000 1633 30.19050000 68.18420000 35.68370000 14.08460000 29.93830000 13.51790000 1634 28.60500000 85.04080000 63.32320000 23.55910000 48.57870000 41.41080000 1635 33.80320000 93.35200000 62.73250000 28.00730000 59.36180000 41.87340000 1636 72.48240000 43.82170000 17.28220000 31.83660000 25.03190000 4.569580000 1637 89.19230000 42.92150000 16.03070000 48.06990000 33.02250000 4.969770000 1638 100.0000000 92.15550000 18.37530000 73.62790000 82.33440000 10.99520000 1639 33.69610000 27.75890000 6.500000000 6.426030000 6.481640000 0.911815000 1640 45.34210000 38.95990000 28.81050000 13.68150000 13.60170000 7.784870000 1641 52.58570000 39.32090000 29.59390000 17.70620000 15.80540000 8.376130000 1642 51.62070000 46.73580000 31.71760000 18.45990000 19.32380000 9.890710000 1643 50.51010000 52.64370000 48.48300000 21.19650000 23.45260000 22.49650000 1644 58.28340000 54.50500000 52.91470000 27.11950000 27.44240000 27.13430000 1645 65.69490000 67.42560000 79.19090000 41.95600000 42.67550000 63.38360000 1646 65.33560000 70.33960000 86.55870000 44.87670000 46.07900000 76.48390000 1647 59.20280000 31.15100000 39.87220000 22.12780000 15.21090000 14.51790000 1648 71.64830000 34.53030000 42.40510000 32.34580000 21.47720000 17.00410000 1649 80.72550000 36.64690000 43.46230000 41.06470000 26.67140000 18.32480000 1650 81.44620000 47.60150000 28.62840000 41.55250000 31.67700000 9.433960000 1651 91.61280000 47.86610000 29.85780000 52.55560000 37.46430000 10.57230000 1652 91.99770000 67.21070000 28.27770000 56.92020000 51.40250000 11.36150000 1653 40.21100000 30.82970000 10.41840000 9.302510000 8.778780000 1.581380000 1654 44.87080000 71.55170000 0.000000000 18.78420000 35.14850000 3.848600000 1655 45.17180000 80.08960000 0.000000000 21.43070000 43.67700000 4.807800000 1656 48.18460000 89.28200000 9.296090000 26.13790000 54.89910000 6.583960000 1657 67.20270000 92.93860000 17.44090000 40.26090000 65.96990000 9.272770000 1658 84.14020000 93.66600000 51.11970000 59.81810000 76.38580000 30.63100000 1659 28.00480000 16.06140000 0.000000000 3.842510000 2.934010000 0.291075000 1660 62.50820000 12.10790000 35.87850000 22.67420000 11.97460000 11.43260000 1661 69.48240000 7.525260000 41.67670000 28.70350000 14.66240000 15.69970000 1662 77.37030000 16.39220000 54.58570000 38.12150000 20.07780000 27.84900000 1663 92.17280000 17.05590000 71.09580000 57.47540000 29.69490000 49.21530000 1664 52.92410000 7.407380000 42.73500000 17.19270000 8.703010000 15.97240000 1665 52.30450000 48.45520000 64.29630000 24.76240000 22.74910000 39.61340000 1666 69.84860000 64.35230000 70.34990000 41.91750000 40.77540000 49.64710000 1667 20.00560000 23.81510000 18.45460000 2.923520000 3.720150000 2.790630000 1668 16.85110000 24.29540000 19.86140000 2.512720000 3.600760000 3.202260000 1669 16.91330000 43.55490000 51.05480000 8.431220000 12.39780000 23.78990000 1670 12.70490000 58.03070000 63.92110000 13.25710000 22.08670000 39.21190000 1671 0.000000000 50.86390000 88.54310000 18.59670000 19.94520000 77.45080000 1672 5.925630000 58.73230000 93.58420000 22.13800000 26.02840000 87.87370000 1673 33.58540000 72.74360000 95.01080000 31.26590000 40.58190000 92.32960000 1674 100.0000000 100.0000000 100.0000000 95.04580000 99.99690000 108.8960000 1675 32.53410000 30.85830000 27.16870000 7.350150000 7.671410000 6.405030000 1676 49.71330000 30.56930000 50.88970000 18.03010000 12.72740000 23.54150000 1677 56.53150000 34.79840000 62.94080000 25.07070000 17.35770000 37.27360000 1678 60.94920000 34.25690000 71.31940000 30.12010000 19.53570000 48.71630000 1679 70.95430000 52.44510000 78.02060000 42.50770000 33.51570000 60.40900000 1680 16.99020000 58.30720000 20.21980000 7.394070000 19.98110000 5.160160000 1681 18.08730000 100.0000000 17.36450000 20.29580000 63.58450000 9.239310000 1682 21.76810000 90.41680000 27.70060000 18.00160000 51.75320000 11.64740000 1683 50.28030000 93.76080000 55.53900000 33.97970000 63.06610000 33.92550000 1684 78.74460000 60.57840000 28.59280000 41.45880000 38.89470000 10.25950000 1685 100.0000000 68.59290000 30.52290000 67.15410000 57.67050000 13.07700000 1686 38.50670000 33.72370000 12.09170000 8.950660000 9.463450000 1.929950000 1687 56.25300000 33.35130000 15.30690000 18.23510000 14.11900000 2.991990000 1688 58.83280000 52.17130000 28.68330000 23.60350000 24.74250000 8.890260000 1689 73.54830000 73.17330000 36.87690000 40.77760000 47.53250000 15.98120000 1690 35.04930000 39.76780000 18.96890000 8.677360000 11.41500000 3.760680000 1691 65.10210000 39.25370000 26.81090000 25.85350000 20.00980000 7.436830000 1692 66.22040000 39.97610000 37.60420000 27.95650000 21.23950000 13.56780000 1693 66.74280000 76.26250000 41.14770000 36.59580000 47.85680000 19.06690000 1694 6.950900000 20.63270000 15.24570000 1.041300000 2.154820000 1.811360000 1695 11.37760000 17.59810000 52.81950000 5.514380000 3.473440000 24.53060000 1696 7.817730000 22.69190000 60.11510000 7.068670000 4.971380000 32.64950000 1697 7.281190000 54.91680000 69.71240000 13.65910000 20.28800000 46.73270000 1698 8.291980000 45.49240000 57.63680000 9.125740000 13.46270000 30.76800000 1699 26.40630000 51.71360000 56.78690000 12.85730000 18.47020000 30.35980000 1700 38.50690000 77.65160000 75.22260000 27.77060000 43.63800000 57.38060000 1701 8.267400000 27.87760000 28.64280000 2.561450000 4.385090000 6.776520000 1702 8.361090000 33.72960000 34.18770000 3.722040000 6.584850000 10.01460000 1703 12.35600000 35.96410000 77.77770000 13.36700000 11.24920000 57.80970000 1704 40.74400000 56.60630000 89.79260000 28.16600000 28.01550000 80.62370000 1705 39.41860000 81.66800000 91.37450000 34.76330000 50.19770000 86.16580000 1706 23.44730000 30.34250000 37.62640000 5.914940000 6.655940000 12.17500000 1707 41.89380000 73.37580000 43.41330000 20.90670000 37.34500000 19.79760000 1708 61.04940000 79.98320000 55.15990000 35.92080000 50.46490000 32.02660000 1709 21.56720000 18.58660000 12.30500000 2.622310000 2.643940000 1.255930000 1710 20.04910000 21.14700000 14.19170000 2.548870000 3.029190000 1.663870000 1711 23.98490000 24.81460000 7.950530000 3.433710000 4.242240000 0.825000000 1712 31.38770000 62.84960000 52.26670000 15.70960000 26.72270000 26.55240000 1713 35.87960000 62.26410000 56.35540000 17.93000000 27.38350000 30.85960000 1714 40.62800000 67.07390000 68.56290000 23.87090000 33.44880000 46.53200000 1715 42.17750000 67.59420000 94.47030000 33.08640000 37.60770000 90.86130000 1716 14.10930000 19.04060000 73.77280000 10.90120000 5.891200000 50.99730000 1717 17.23090000 47.92830000 91.64780000 20.42280000 19.28230000 83.28400000 1718 26.60460000 76.12670000 94.25410000 29.84280000 42.65830000 91.05640000 1719 8.685710000 29.93800000 44.95500000 4.818620000 5.856930000 17.59400000 1720 0.000000000 32.88370000 53.69110000 6.400710000 7.352530000 25.85800000 1721 95.46390000 31.65940000 80.87110000 65.35260000 36.57030000 65.14780000 1722 47.77040000 15.15540000 44.02810000 14.75050000 8.085900000 16.96180000 1723 68.26240000 12.05180000 47.06770000 28.67040000 14.87470000 20.13290000 1724 68.55540000 6.814040000 53.14580000 29.87840000 15.00840000 25.88200000 1725 69.01760000 32.51090000 60.98560000 33.42620000 20.99410000 35.20100000 1726 78.79600000 34.61690000 82.18310000 48.17100000 28.58170000 66.66910000 1727 9.496860000 7.536290000 49.36930000 4.373770000 1.974750000 21.03020000 1728 8.600400000 37.65210000 54.10200000 7.301040000 9.405340000 26.50950000 1729 8.021720000 41.60250000 62.65350000 9.651660000 11.92490000 36.48860000 1730 12.53940000 50.05030000 76.86510000 15.20030000 18.22020000 57.14590000 1731 9.488000000 46.46870000 81.89000000 15.89220000 16.64660000 65.20530000 1732 52.46150000 47.95200000 81.72420000 29.71790000 24.48670000 65.65360000 1733 55.74230000 18.05570000 47.79390000 20.09150000 11.16280000 20.45710000 1734 56.97470000 21.57000000 55.11100000 22.44850000 12.81020000 27.76350000 1735 62.41020000 25.75180000 73.59160000 30.97730000 17.55440000 51.81850000 1736 23.16200000 16.26350000 27.47410000 3.751900000 2.786870000 6.022900000 1737 29.86120000 19.50030000 26.97780000 5.606620000 4.228630000 5.940490000 1738 37.43080000 27.94160000 32.78600000 9.387210000 7.872600000 9.271870000 1739 52.44640000 60.71170000 54.50770000 25.09590000 30.10890000 29.10970000 1740 55.00030000 60.19280000 61.72360000 28.07590000 31.13350000 37.34400000 1741 64.17210000 70.05950000 71.50700000 39.22570000 43.49440000 51.66010000 1742 67.63390000 74.06810000 71.38670000 42.95970000 48.58790000 52.03020000 1743 43.72250000 47.78000000 49.13920000 16.95040000 18.76050000 22.60720000 1744 53.14370000 51.12250000 56.28850000 23.92090000 23.87560000 30.29840000 1745 52.76770000 57.93600000 64.28930000 26.84740000 29.02610000 40.30860000 1746 95.06210000 79.08370000 71.87260000 71.77060000 67.68610000 54.57990000 1747 21.11870000 5.850760000 14.05290000 2.174430000 1.195490000 1.426300000 1748 18.06940000 7.771950000 16.87250000 1.782360000 1.068600000 2.068030000 1749 14.78350000 8.262240000 12.43880000 1.130560000 0.781554000 1.082240000 1750 45.14120000 34.17670000 7.296150000 11.83920000 11.11180000 1.449640000 1751 46.03250000 50.05560000 8.097720000 14.59540000 19.12250000 2.427200000 1752 48.57850000 72.56930000 26.92350000 22.00320000 37.49010000 9.576380000 1753 58.99850000 77.98880000 31.25140000 30.26880000 46.21290000 12.61640000 1754 9.481080000 63.99200000 23.06990000 8.023170000 23.96910000 6.602110000 1755 8.561390000 81.74980000 25.76860000 13.12430000 40.78970000 9.573570000 1756 13.81180000 95.13050000 24.19980000 18.19680000 56.92450000 10.74330000 1757 8.110120000 29.13040000 10.11580000 1.583400000 4.331020000 1.122500000 1758 16.59220000 28.16830000 5.475640000 2.285480000 4.452240000 0.654313000 1759 67.39780000 26.11060000 8.537660000 25.26900000 15.79330000 1.945700000 1760 95.10260000 29.08640000 7.758790000 52.93780000 30.80470000 3.245220000 1761 94.01650000 57.92850000 51.05210000 60.22880000 46.56120000 27.08290000 1762 66.89940000 56.97090000 42.13970000 32.02170000 31.61190000 17.98520000 1763 75.88790000 65.21080000 75.68690000 48.88160000 44.78740000 57.95190000 1764 82.28760000 66.92060000 82.10390000 57.43170000 50.18090000 68.92890000 1765 82.64120000 79.00880000 93.44130000 65.18220000 63.40080000 91.37400000 1766 28.97280000 28.85020000 32.89240000 6.619500000 6.678930000 9.230030000 1767 30.05660000 47.54880000 60.23380000 13.89010000 16.81380000 34.07950000 1768 42.29050000 80.97220000 72.55430000 29.64690000 47.63470000 53.80060000 1769 46.99060000 92.50190000 84.70680000 39.65150000 63.72530000 75.27990000 1770 16.01420000 28.66490000 45.45550000 5.538800000 5.877470000 18.00530000 1771 13.62420000 49.11350000 55.20490000 9.699320000 15.54250000 28.35080000 1772 75.85050000 50.64790000 57.04900000 41.03620000 32.43530000 31.90290000 1773 83.41440000 67.72060000 56.97740000 52.03930000 48.76140000 33.58120000 1774 82.77030000 81.29130000 60.71980000 56.09730000 61.91150000 39.35320000 1775 43.25700000 38.16610000 21.96560000 12.03430000 12.51970000 4.813750000 1776 56.32300000 41.54760000 23.79450000 19.80710000 17.82470000 6.004810000 1777 59.13120000 74.84190000 82.19380000 40.19790000 47.42210000 68.98980000 1778 65.25360000 77.57350000 90.80310000 48.39120000 53.60620000 85.27560000 1779 77.24680000 85.90880000 92.05270000 61.65980000 68.04770000 89.21430000 1780 44.55370000 45.87770000 52.79030000 17.70670000 18.17710000 26.05370000 1781 44.17420000 51.47370000 70.28020000 22.53530000 22.95850000 47.72810000 1782 71.68140000 51.14480000 71.10910000 40.86940000 32.21300000 49.74840000 1783 55.91220000 28.04960000 45.83260000 20.57500000 13.46460000 19.00920000 1784 63.53900000 26.42550000 46.72230000 25.79640000 15.74080000 19.97030000 1785 67.07680000 54.65220000 82.46680000 41.19430000 33.89530000 67.86790000 1786 72.86360000 55.92290000 90.48410000 49.02010000 38.33810000 82.87300000 1787 88.48830000 68.50500000 93.70530000 68.45910000 56.55170000 91.06010000 1788 91.10170000 75.95590000 93.25470000 73.25870000 64.94470000 91.07480000 1789 68.78240000 75.12180000 63.97660000 42.26220000 49.31730000 42.07210000 1790 80.14410000 73.24900000 63.29420000 51.68440000 52.66390000 41.47750000 1791 88.83370000 77.79980000 67.89680000 63.16480000 62.25070000 48.45620000 1792 93.97320000 90.21390000 72.56130000 74.39200000 79.67350000 56.95250000 1793 59.06100000 65.51270000 43.14530000 28.39640000 35.27360000 19.24410000 1794 61.16250000 65.85460000 50.03210000 31.06920000 36.76130000 25.35250000 1795 63.07700000 71.20320000 56.65940000 35.11970000 42.67550000 32.74650000 1796 67.26080000 81.78050000 62.46130000 42.71550000 55.41290000 40.88270000 1797 78.02950000 82.48940000 69.24450000 53.95750000 61.66730000 50.36730000 1798 83.02870000 82.56590000 73.68170000 60.10050000 64.76380000 57.07120000 1799 90.27300000 85.18310000 75.02850000 69.09430000 71.83440000 59.82110000 1800 85.95350000 48.92860000 35.90910000 47.17350000 35.13320000 13.82690000 1801 93.22640000 57.46060000 35.25100000 56.81380000 44.79390000 14.41240000 1802 91.49560000 62.95080000 62.06060000 60.72880000 49.76350000 39.49330000 1803 91.95260000 63.66840000 68.54050000 63.02960000 51.24880000 48.05680000 1804 100.0000000 68.87450000 71.07540000 74.72540000 60.91730000 52.59710000 1805 35.59250000 20.30750000 20.74900000 7.096360000 5.186460000 3.610470000 1806 38.04820000 35.17210000 28.12870000 9.907430000 10.31570000 7.124490000 1807 42.87050000 42.29000000 29.02080000 12.98790000 14.56380000 8.009090000 1808 55.42260000 45.64110000 33.53440000 20.75810000 19.97930000 10.96390000 1809 80.60330000 64.79290000 67.21240000 50.89230000 45.80370000 45.77530000 1810 93.30830000 70.84000000 75.67850000 68.41310000 59.00530000 59.33720000 1811 91.74750000 13.21090000 18.94080000 48.42120000 25.53070000 4.870660000 1812 95.18270000 8.170670000 59.15700000 57.74540000 29.30410000 33.69720000 1813 94.55270000 8.181250000 78.86990000 62.22980000 31.01170000 61.23040000 1814 5.057300000 22.71550000 34.43420000 2.598520000 3.173130000 9.779780000 1815 8.459650000 28.97910000 38.57060000 3.785610000 5.172650000 12.67330000 1816 6.954970000 41.76330000 47.81860000 6.598670000 10.76530000 20.61190000 1817 7.878680000 51.85110000 54.59310000 9.564220000 16.89730000 27.86500000 1818 8.103610000 63.73660000 59.26970000 13.07690000 25.79810000 34.01150000 1819 22.54580000 67.42620000 66.04330000 17.53440000 30.51260000 42.87900000 1820 21.02500000 55.46140000 56.81950000 12.37210000 20.29320000 30.61470000 1821 36.74150000 78.12360000 58.72270000 22.99460000 42.07300000 35.14820000 1822 47.48090000 83.15570000 59.77290000 29.64430000 50.02050000 37.20090000 1823 56.53810000 63.30600000 34.60070000 25.06740000 32.16640000 12.96260000 1824 79.48460000 86.72150000 35.80280000 50.33590000 64.59190000 17.15210000 1825 88.88550000 91.84590000 87.62470000 73.97060000 80.60850000 82.07990000 1826 58.17230000 58.99880000 85.60830000 36.70600000 34.03960000 73.46850000 1827 60.62590000 62.61440000 95.05820000 42.64750000 39.03090000 92.09430000 1828 69.55670000 64.69670000 93.98070000 49.49490000 44.02620000 90.40430000 1829 34.13200000 30.92900000 45.77660000 10.20370000 8.896560000 18.56670000 1830 52.84060000 33.11530000 47.41110000 19.45960000 14.29030000 20.48960000 1831 69.79670000 57.27820000 53.69910000 36.39530000 33.82140000 28.55410000 1832 69.71570000 65.49070000 56.83610000 38.83300000 40.35390000 32.62060000 1833 26.55210000 23.22860000 21.72750000 4.525950000 4.402630000 3.883830000 1834 30.94030000 22.43770000 41.32150000 7.758650000 5.676330000 14.66200000 1835 17.71920000 14.49800000 27.53340000 2.651610000 2.000230000 5.973130000 1836 14.23810000 10.45690000 86.48320000 14.59720000 6.316060000 72.11230000 1837 9.488100000 16.77940000 94.43860000 17.28570000 8.042830000 87.56010000 1838 28.85810000 22.60030000 92.48630000 20.30400000 10.65560000 83.92480000 1839 42.57840000 21.07280000 92.83570000 25.40600000 12.98290000 84.81920000 1840 90.32820000 85.00850000 93.29390000 75.24810000 74.12800000 92.19700000 1841 17.04960000 4.839900000 12.92770000 1.411540000 0.771744000 1.166390000 1842 19.98800000 12.79870000 7.463120000 1.936170000 1.569320000 0.484409000 1843 19.18450000 28.38530000 31.13690000 4.137030000 5.299120000 8.131810000 1844 16.13740000 30.01400000 57.67250000 7.969120000 7.228730000 30.09650000 1845 80.23660000 29.78750000 58.39950000 42.59510000 25.00210000 32.52920000 1846 79.28570000 44.94920000 68.61010000 46.03110000 31.94400000 46.12750000 1847 87.63660000 62.78660000 72.52930000 59.09700000 48.50050000 53.47380000 1848 93.09590000 75.83030000 74.23870000 69.14770000 63.45570000 57.63900000 1849 95.80130000 92.24690000 91.17970000 83.37820000 85.73490000 89.28560000 1850 31.68200000 5.853220000 94.36760000 21.20770000 9.122780000 87.49030000 1851 63.22320000 20.71550000 93.06910000 37.69230000 19.24380000 85.84920000 1852 43.00100000 22.11380000 65.04000000 16.99300000 9.841770000 39.16680000 1853 50.51620000 34.22400000 80.52760000 26.28950000 17.23320000 62.83630000 1854 23.74890000 28.03360000 42.50420000 6.441700000 6.232980000 15.64740000 1855 22.90420000 35.86310000 44.14660000 7.317600000 8.987200000 17.26170000 1856 25.28230000 45.44000000 43.82570000 9.143840000 13.74140000 17.53220000 1857 36.59350000 56.66930000 46.67940000 15.16540000 22.65940000 20.88070000 1858 56.52300000 62.51690000 51.68670000 27.45780000 32.57080000 26.50510000 1859 67.04990000 65.74830000 60.92960000 37.65060000 39.82220000 37.27300000 1860 70.77230000 77.06670000 79.89780000 48.91490000 53.87270000 65.76050000 1861 85.75570000 94.43010000 84.34320000 70.43170000 81.68940000 76.32200000 1862 12.12190000 16.77640000 6.957120000 0.976063000 1.545600000 0.447580000 1863 7.427630000 13.65330000 13.23730000 0.642584000 0.972386000 1.258490000 1864 6.089840000 11.97700000 14.44210000 0.563835000 0.759559000 1.478330000 1865 8.224130000 55.15710000 13.14560000 5.467830000 17.16100000 3.064350000 1866 83.56950000 76.91360000 26.65550000 50.30660000 55.66910000 11.20060000 1867 89.66140000 96.21650000 26.57630000 63.43190000 81.43080000 13.99480000 1868 53.85950000 57.11250000 14.53230000 20.47300000 26.03570000 4.180250000 1869 91.79630000 58.67460000 10.48910000 53.65180000 44.10760000 5.121910000 1870 38.92240000 28.54090000 16.92230000 8.795350000 7.864840000 2.780120000 1871 54.37940000 28.97230000 27.08990000 17.38680000 12.32850000 6.779080000 1872 93.15750000 51.87570000 24.86230000 54.61040000 40.61000000 8.624040000 1873 94.04770000 95.37790000 76.27920000 77.48600000 86.66430000 63.37760000 1874 19.62150000 25.95240000 36.26790000 4.582990000 4.866220000 11.09230000 1875 16.24350000 37.00340000 43.98140000 6.234420000 8.828910000 17.12370000 1876 12.83120000 59.94070000 47.19580000 10.26030000 22.12320000 21.33490000 1877 27.63450000 67.70050000 52.98390000 15.93210000 30.22240000 27.67690000 1878 36.11200000 68.28940000 64.51390000 21.33700000 33.15120000 41.14960000 1879 37.77060000 83.26960000 69.40560000 27.61060000 48.80570000 49.44240000 1880 24.17930000 21.73790000 8.545260000 3.272180000 3.531130000 0.808876000 1881 29.71720000 19.16470000 9.202940000 4.588830000 3.759700000 0.896089000 1882 30.44230000 30.12950000 64.87570000 12.81040000 9.565290000 38.97790000 1883 68.37270000 0.000000000 32.94240000 26.63110000 13.54220000 9.793200000 1884 93.13790000 9.745870000 41.36110000 52.13630000 26.88770000 16.57580000 1885 92.09260000 12.02760000 86.28390000 61.89750000 30.84650000 73.98230000 1886 13.34470000 2.798070000 26.72860000 1.728480000 0.792109000 5.479780000 1887 8.159590000 33.88170000 39.77140000 4.427250000 6.915850000 13.71330000 1888 9.033790000 52.70340000 38.51330000 7.135990000 16.41110000 13.89940000 1889 62.69410000 52.39030000 46.50490000 28.62640000 27.18560000 21.07850000 1890 52.93900000 10.77790000 8.176440000 14.45390000 7.840120000 1.122110000 1891 92.95590000 12.36980000 9.601510000 49.40940000 26.00020000 2.944910000 1892 72.08090000 19.74610000 8.855730000 28.68720000 16.28160000 1.994110000 1893 72.25730000 46.59930000 10.41240000 31.81410000 26.30470000 3.325050000 1894 14.10990000 10.60240000 30.65810000 2.308410000 1.410830000 7.449130000 1895 8.884000000 6.700740000 40.54320000 2.913990000 1.342990000 13.64350000 1896 8.169890000 41.82040000 88.09480000 17.20290000 15.03930000 76.06070000 1897 11.11190000 40.67670000 94.75320000 19.74260000 15.60020000 89.04610000 1898 57.98010000 77.41340000 93.62370000 44.24010000 51.20540000 90.59490000 1899 40.06990000 53.79730000 64.29410000 19.58770000 22.87530000 39.69390000 1900 46.30100000 58.83820000 65.24840000 23.74350000 27.95180000 41.45860000 1901 60.21380000 77.70270000 71.68100000 38.60290000 49.38450000 52.60760000 1902 61.69650000 81.48860000 83.73850000 44.50540000 55.36820000 72.53390000 1903 26.38890000 37.69520000 34.99760000 7.120690000 9.675330000 10.82100000 1904 29.24660000 48.58440000 87.99400000 21.86010000 20.49730000 76.44780000 1905 32.92750000 57.13570000 96.92430000 27.99990000 27.93010000 94.84340000 1906 8.811610000 17.69800000 44.00990000 3.782970000 2.772010000 16.47310000 1907 24.98200000 16.74910000 59.93640000 9.200410000 5.082660000 32.42430000 1908 24.33120000 17.91690000 77.83100000 13.84470000 7.096150000 57.40470000 1909 26.79680000 14.89380000 31.00440000 4.899960000 3.167870000 7.802510000 1910 37.54240000 13.28870000 36.12980000 8.912160000 4.991360000 10.96100000 1911 41.37300000 7.191840000 44.88320000 11.56910000 5.754270000 17.43290000 1912 42.36050000 33.40280000 55.47010000 15.53440000 12.18230000 28.16420000 1913 51.17440000 39.70080000 68.04010000 23.71840000 18.26770000 44.04710000 1914 59.14970000 42.14410000 72.46730000 30.21710000 22.45830000 50.72960000 1915 44.18080000 39.03880000 55.60750000 17.08850000 14.93050000 28.61100000 1916 74.40960000 38.29800000 56.68090000 37.75320000 25.28270000 30.70740000 1917 83.40580000 37.32900000 93.16680000 56.92730000 33.57810000 87.45940000 1918 34.85800000 0.000000000 38.79310000 8.025870000 3.867070000 12.61900000 1919 38.98980000 4.466120000 70.87020000 16.11330000 7.344790000 46.83440000 1920 44.55230000 8.773440000 94.36820000 26.40010000 11.94860000 87.75200000 1921 44.09150000 35.45740000 94.00640000 27.84980000 17.89690000 87.69700000 1922 44.60750000 62.54970000 49.26900000 20.34970000 28.97860000 23.87350000 1923 51.92600000 63.35650000 51.63680000 24.84610000 31.78870000 26.39960000 1924 67.10200000 85.22480000 54.01980000 41.89520000 58.44540000 31.68270000 1925 19.79950000 46.41920000 9.673570000 5.178970000 12.48930000 1.966150000 1926 16.45940000 53.78460000 11.35790000 5.991370000 16.66330000 2.687030000 1927 21.60430000 79.44460000 10.74820000 13.30830000 38.89770000 5.088060000 1928 23.12250000 93.97260000 74.24550000 28.26270000 59.81440000 57.76730000 1929 18.52350000 68.46170000 46.49560000 12.97100000 29.39140000 21.53540000 1930 15.09040000 75.53750000 60.39150000 17.11990000 36.79660000 36.55270000 1931 73.48680000 94.91190000 61.37640000 52.26390000 73.60200000 41.55410000 1932 52.53390000 43.61850000 25.36780000 17.91440000 17.70460000 6.649410000 1933 54.42020000 52.41120000 24.85560000 20.49230000 23.30490000 7.056530000 1934 61.92680000 63.53620000 24.08300000 27.76770000 33.83050000 7.877750000 1935 71.13050000 80.33790000 26.55700000 39.74780000 53.22660000 11.01230000 1936 67.82580000 85.26960000 23.50750000 38.40430000 57.16030000 10.23370000 1937 68.08830000 88.51020000 34.54350000 40.76880000 61.46090000 16.13490000 1938 35.95530000 65.90360000 9.883000000 13.61310000 28.25650000 3.720400000 1939 44.48220000 94.58670000 10.48700000 26.25880000 60.56550000 7.403960000 1940 63.96710000 94.16720000 30.59490000 39.23620000 66.65360000 14.53250000 1941 38.36540000 44.04990000 58.75260000 15.91490000 16.29200000 32.27050000 1942 38.62230000 44.42000000 78.86180000 21.39580000 18.66560000 60.31970000 1943 47.94770000 50.31820000 77.33740000 26.24420000 24.03510000 58.42630000 1944 47.01480000 50.45320000 86.05600000 28.61620000 25.00000000 73.32940000 1945 80.34480000 6.833150000 19.02980000 36.18130000 18.74450000 4.268220000 1946 84.63560000 33.94780000 19.42940000 42.19800000 26.63940000 5.228650000 1947 89.13590000 62.60270000 17.79470000 51.82970000 45.65550000 6.846350000 1948 89.40490000 62.23750000 34.78610000 53.46560000 46.09180000 14.32210000 1949 95.74730000 75.91880000 35.61120000 64.48080000 62.02930000 16.54490000 1950 94.55480000 92.56620000 39.68860000 69.11120000 80.20930000 21.34070000 1951 39.34940000 42.98070000 27.05830000 11.37440000 14.04290000 7.044470000 1952 39.07780000 55.35910000 33.96270000 14.10820000 21.55470000 11.48800000 1953 47.67780000 56.11700000 34.79980000 18.36570000 24.17850000 12.24140000 1954 52.39180000 76.35050000 49.02590000 28.09180000 43.40120000 25.22760000 1955 13.00020000 72.75130000 11.76250000 10.03600000 31.56640000 4.436810000 1956 13.82120000 83.61620000 14.01950000 13.51050000 42.80740000 6.120440000 1957 44.15040000 84.25750000 31.60070000 23.77590000 48.56450000 13.16550000 1958 26.00000000 51.07800000 23.80070000 8.016120000 16.17390000 5.971220000 1959 23.68620000 52.09130000 29.71960000 8.154990000 16.72280000 8.673260000 1960 22.19940000 56.60520000 45.43200000 10.73310000 20.35960000 19.60500000 1961 28.44750000 79.08370000 44.69770000 17.90970000 40.59670000 21.25760000 1962 27.80010000 88.97510000 79.96570000 29.31430000 54.90500000 66.25350000 1963 28.93110000 94.02560000 89.13870000 34.58850000 62.57410000 83.32810000 1964 25.67970000 24.31300000 65.42700000 11.13180000 7.254810000 39.44530000 1965 24.90290000 26.93760000 87.69440000 17.84780000 10.54300000 74.78480000 1966 25.15260000 59.91150000 92.58410000 24.67160000 28.11580000 86.09550000 1967 38.13490000 76.83860000 91.59790000 32.83260000 44.91980000 86.01100000 1968 53.43530000 41.82520000 45.85560000 20.65080000 18.07410000 19.56520000 1969 60.35800000 43.83430000 45.82400000 25.40780000 21.37720000 19.86030000 1970 64.52920000 56.59010000 74.38470000 37.12970000 33.20990000 54.75920000 1971 72.77770000 63.20620000 82.48360000 47.76010000 42.58580000 68.82290000 1972 82.26980000 63.65230000 96.15990000 61.68330000 49.49520000 95.32300000 1973 14.72600000 18.57920000 22.10600000 1.992740000 2.261160000 3.800560000 1974 13.84390000 21.47030000 24.25410000 2.209820000 2.846730000 4.672120000 1975 8.334750000 69.69930000 35.23150000 10.52970000 29.24570000 13.20190000 1976 17.71740000 91.24850000 51.94420000 20.90810000 53.73240000 29.31270000 1977 9.995570000 38.73050000 17.53930000 3.077380000 8.141350000 3.050480000 1978 23.75280000 44.32300000 17.58230000 5.954540000 11.90430000 3.462580000 1979 32.41790000 44.00710000 20.87260000 8.493720000 13.05310000 4.549820000 1980 38.03220000 51.21400000 19.95590000 11.68320000 18.16560000 4.808160000 1981 42.34760000 60.73850000 32.20260000 16.47000000 26.07130000 10.97130000 1982 78.46460000 64.67930000 49.60720000 44.97630000 43.11710000 25.50980000 1983 84.09690000 80.81730000 53.40930000 55.75660000 61.48370000 31.22530000 1984 86.47970000 87.39910000 60.46870000 61.92360000 70.74520000 40.00750000 1985 94.69820000 92.07220000 66.79890000 74.38140000 81.79110000 49.10520000 1986 39.48590000 24.23450000 9.786480000 8.407320000 6.676180000 1.260530000 1987 49.53290000 71.39260000 10.58020000 21.27900000 36.29500000 4.653980000 1988 83.90920000 95.41410000 8.593680000 56.02950000 76.83080000 8.660090000 1989 50.08560000 44.24010000 8.890940000 15.78430000 16.97320000 2.250160000 1990 65.37280000 50.05410000 15.71750000 27.01690000 25.49800000 4.297270000 1991 77.28250000 72.55530000 15.78720000 42.20840000 47.98090000 6.733350000 1992 87.05380000 75.07420000 31.84040000 53.91080000 55.92320000 13.75460000 1993 68.36030000 55.24730000 25.91050000 30.98120000 30.28120000 8.172080000 1994 81.46610000 56.33360000 23.56780000 42.77940000 37.01650000 7.850190000 1995 89.36180000 67.76500000 53.99020000 57.77020000 51.81940000 30.66880000 1996 39.62350000 28.74470000 29.28360000 9.989120000 8.431210000 7.463720000 1997 44.21810000 27.75440000 32.72930000 12.30530000 9.330680000 9.370920000 1998 55.09870000 44.39050000 53.78590000 23.46980000 20.45640000 27.25670000 1999 63.29050000 50.45920000 60.56520000 31.45890000 27.31070000 35.46230000 2000 69.95340000 49.86100000 63.87930000 37.32170000 29.93810000 39.75500000 2001 38.74380000 33.69670000 33.83630000 10.59950000 10.12520000 10.12720000 2002 44.60010000 39.78970000 41.25920000 14.89790000 14.37660000 15.53490000 2003 50.97690000 54.83710000 40.72450000 20.66400000 24.53700000 16.24540000 2004 59.01020000 55.14280000 39.78490000 25.56940000 27.25590000 15.81380000 2005 69.44370000 72.74940000 43.40400000 38.08190000 45.69840000 20.53620000 2006 27.46690000 89.86770000 19.47640000 18.54740000 51.53750000 8.459650000 2007 28.22540000 91.54550000 36.81460000 20.93900000 54.33370000 16.99670000 2008 45.45740000 93.85830000 66.16760000 33.91340000 62.85700000 46.59650000 2009 66.11470000 94.05930000 71.10430000 48.32030000 70.35310000 54.08920000 2010 69.76330000 93.24790000 96.14880000 59.29810000 74.16830000 98.20840000 2011 10.47690000 6.558640000 8.530730000 0.534129000 0.398615000 0.478355000 2012 32.83700000 8.434450000 11.97370000 5.238750000 2.911840000 1.195200000 2013 42.26720000 8.111310000 13.01700000 8.965380000 4.810210000 1.553670000 2014 46.18220000 8.479150000 8.891050000 10.71900000 5.750100000 1.008920000 2015 45.24540000 16.09890000 18.75940000 10.88960000 6.517650000 3.098950000 2016 49.13090000 31.49430000 26.94260000 14.59730000 11.59420000 6.664080000 2017 50.02770000 34.78050000 57.62850000 19.99260000 14.87210000 30.77880000 2018 55.13930000 40.02490000 57.76540000 23.67960000 18.65560000 31.32430000 2019 57.69390000 61.96680000 57.80890000 29.31980000 33.02430000 32.97350000 2020 11.71370000 19.61920000 7.847930000 1.102290000 2.039690000 0.588562000 2021 15.16220000 20.80270000 6.351840000 1.541600000 2.472590000 0.497295000 2022 11.24870000 50.72900000 20.32380000 5.208950000 14.57200000 4.591760000 2023 41.79930000 56.72320000 59.08650000 19.71770000 24.76180000 33.59100000 2024 58.41570000 56.30210000 71.11770000 31.82050000 30.40960000 49.67050000 2025 93.06280000 62.96270000 90.03720000 70.88650000 54.04350000 83.55770000 2026 26.39990000 8.194090000 17.75630000 3.578990000 2.013620000 2.388140000 2027 35.08630000 10.36790000 22.38930000 6.589850000 3.680720000 4.006260000 2028 33.46760000 7.870170000 27.78790000 6.389370000 3.362720000 6.200410000 2029 31.81440000 8.303140000 31.97160000 6.257240000 3.272360000 8.320750000 2030 32.97550000 37.28640000 33.44800000 8.839640000 10.43480000 9.958910000 2031 37.98750000 48.66070000 52.83040000 15.29460000 18.25740000 26.13540000 2032 73.69350000 73.02790000 65.59980000 46.21290000 49.59980000 44.14200000 2033 83.43050000 78.17120000 71.97590000 58.64690000 60.11620000 54.02220000 2034 1.152070000 0.000000000 0.000000000 0.003145840 0.001622050 0.000147361 2035 12.62580000 25.50440000 12.74670000 1.730880000 3.503220000 1.447160000 2036 16.23430000 39.39560000 22.19190000 4.136630000 8.907370000 4.577510000 2037 51.43950000 45.81980000 21.27910000 17.32770000 18.41670000 5.194020000 2038 29.63010000 32.23410000 7.291030000 5.571570000 7.274660000 1.084980000 2039 32.60040000 30.69600000 8.278580000 6.362910000 7.231000000 1.169540000 2040 58.92800000 30.01620000 9.563340000 19.44720000 13.78380000 1.913310000 2041 91.10420000 35.46420000 10.86390000 49.02820000 30.70230000 3.675910000 2042 93.48490000 44.94500000 37.02740000 55.04300000 37.29440000 14.69700000 2043 93.75250000 58.03740000 42.24880000 58.48070000 45.89500000 19.38330000 2044 92.86550000 84.95360000 50.65040000 66.18690000 70.78360000 29.44110000 2045 93.30580000 95.76580000 51.82730000 70.82520000 84.34640000 32.10410000 2046 50.56370000 25.67190000 12.67320000 14.00480000 9.870350000 2.013190000 2047 63.01970000 51.65800000 8.467830000 25.31460000 25.48140000 3.066740000 2048 84.02300000 75.18300000 8.337510000 49.31560000 53.81060000 6.036570000 2049 86.55300000 66.93060000 13.52450000 49.88280000 47.67960000 6.106280000 2050 90.46030000 85.99800000 8.935870000 59.66830000 68.91090000 7.728430000 2051 94.30250000 94.47640000 11.71700000 67.23420000 81.56830000 9.499760000 2052 28.94240000 37.20340000 16.44020000 6.237480000 9.218090000 2.849910000 2053 28.83730000 61.45420000 24.30370000 10.94150000 23.76730000 7.015010000 2054 45.86420000 79.37450000 25.43450000 22.47690000 43.47200000 9.620970000 2055 54.02220000 95.79590000 25.52290000 32.70300000 65.12810000 12.04720000 2056 25.08080000 60.10810000 14.47590000 9.079390000 22.00680000 3.849700000 2057 49.95640000 62.77340000 13.42750000 19.42510000 29.08360000 4.323430000 2058 60.67370000 87.26540000 21.12800000 33.58620000 56.64960000 9.384770000 2059 27.15010000 34.13810000 7.815470000 5.093400000 7.620030000 1.182880000 2060 37.52890000 44.23480000 8.688010000 9.855150000 13.91420000 1.948400000 2061 43.75160000 53.47720000 9.310900000 14.14890000 20.70570000 2.758380000 2062 50.58680000 66.02050000 59.23610000 26.27940000 34.19590000 34.77660000 2063 55.35480000 79.60440000 64.99180000 34.23790000 49.00380000 43.44140000 2064 56.72660000 90.17980000 83.38290000 43.97710000 63.57150000 72.87620000 2065 44.83520000 47.43850000 38.71530000 15.81490000 18.19710000 14.13230000 2066 51.32450000 48.85540000 41.35760000 19.84110000 20.92050000 16.30600000 2067 51.81810000 55.04010000 46.69950000 22.10160000 25.28800000 21.11260000 2068 77.48130000 58.52180000 51.30190000 42.95420000 38.01140000 26.55770000 2069 17.39820000 13.88620000 7.597120000 1.538580000 1.477620000 0.492051000 2070 20.18190000 8.901880000 7.162130000 1.855650000 1.210410000 0.415317000 2071 66.68920000 21.88930000 17.96340000 24.74880000 14.59320000 3.630640000 2072 76.12740000 28.41720000 30.06100000 34.16010000 20.80020000 8.977310000 2073 81.05590000 44.71990000 50.59550000 43.70530000 31.10630000 25.06100000 2074 92.14790000 49.47090000 65.05530000 59.43740000 41.11100000 42.26890000 2075 42.93770000 18.02070000 22.81320000 10.14250000 6.372480000 4.427250000 2076 66.65170000 14.45730000 33.33450000 25.57530000 13.74870000 10.05710000 2077 75.55320000 8.835530000 35.42840000 33.14310000 17.12300000 11.61080000 2078 85.86100000 13.43550000 43.94900000 44.55530000 23.26000000 18.27140000 2079 48.47150000 9.996100000 25.04200000 12.74250000 6.802430000 5.311810000 2080 48.51090000 23.98290000 31.93190000 14.08210000 9.385160000 8.907710000 2081 62.90970000 27.60020000 35.36510000 23.81860000 15.19390000 11.47020000 2082 92.39690000 35.43360000 48.75600000 54.23800000 32.94640000 23.41380000 2083 94.31500000 58.47930000 71.07060000 65.28920000 48.97610000 51.32330000 2084 29.27790000 17.94380000 46.80970000 7.839830000 4.848130000 19.01470000 2085 31.57530000 17.39980000 66.26150000 12.57930000 6.741930000 40.46140000 2086 68.86970000 14.10790000 81.04250000 37.49940000 18.68090000 63.72000000 2087 88.49280000 19.17100000 78.54820000 55.63330000 28.81200000 60.53860000 2088 52.20180000 8.570140000 75.71180000 24.09700000 11.48390000 54.43670000 2089 75.17930000 4.117460000 93.48750000 47.04110000 22.42630000 86.92990000 2090 93.09670000 8.175650000 93.71260000 65.66810000 32.18870000 88.27150000 2091 51.42480000 7.789340000 49.89420000 17.50580000 8.748610000 22.13660000 2092 55.29740000 14.24690000 60.04360000 22.05670000 11.39600000 33.11560000 2093 54.65940000 15.98370000 67.59500000 23.55950000 12.17060000 42.73330000 2094 64.89280000 35.53540000 92.28950000 39.96370000 24.24490000 84.86050000 2095 37.74170000 24.04430000 59.89030000 13.66820000 8.656670000 32.72770000 2096 63.10740000 32.32920000 63.03220000 29.32460000 18.76890000 37.49550000 2097 74.64640000 73.13130000 83.72810000 52.37500000 52.24860000 72.04750000 2098 83.45880000 91.08640000 87.05770000 67.73460000 76.61820000 80.65330000 2099 7.165150000 13.03340000 21.69530000 1.038500000 1.061720000 3.529420000 2100 8.247740000 8.270770000 18.86530000 0.796344000 0.576402000 2.571160000 2101 16.68710000 40.71740000 63.13400000 10.54080000 12.01330000 37.08400000 2102 21.50970000 65.54330000 69.94030000 17.86500000 29.21620000 48.03870000 2103 19.68100000 86.18520000 91.73510000 30.56310000 52.29720000 87.16910000 2104 13.20590000 77.81070000 91.84800000 26.96770000 42.72000000 86.32080000 2105 9.746080000 84.79650000 94.91050000 30.03190000 50.53800000 93.30260000 2106 8.127040000 95.48900000 93.47370000 33.21780000 63.28530000 91.84950000 2107 11.15940000 83.73850000 61.13730000 19.39970000 45.25100000 38.39710000 2108 8.163130000 90.60890000 71.90230000 24.28040000 54.26570000 53.68890000 2109 9.887630000 96.48850000 71.53710000 26.51600000 61.77670000 54.00390000 2110 33.29120000 59.96660000 77.38120000 21.86780000 27.30380000 58.93530000 2111 39.98050000 70.41060000 88.17100000 30.52570000 38.66820000 78.78060000 2112 90.63020000 81.50510000 94.49110000 74.89980000 70.60690000 94.19580000 2113 90.55220000 88.96940000 93.94840000 77.11770000 78.98140000 94.04810000 2114 27.82900000 38.88900000 22.78080000 6.513840000 9.936060000 4.878970000 2115 26.50840000 37.87990000 30.69210000 6.705960000 9.582970000 8.361410000 2116 37.52690000 42.02420000 32.58170000 11.03600000 13.40560000 9.779280000 2117 38.05080000 41.64760000 69.55890000 18.06170000 16.07850000 45.96800000 2118 49.68750000 87.94080000 75.28050000 36.45140000 57.70650000 58.99470000 2119 56.91550000 96.43920000 83.14070000 46.36890000 71.54990000 73.35360000 2120 32.45090000 46.23580000 45.75250000 11.62600000 15.35120000 19.27990000 2121 45.83840000 47.04760000 61.86460000 20.45350000 19.91600000 36.30880000 2122 63.21590000 58.84290000 62.68010000 33.55190000 33.08400000 38.67120000 2123 68.18410000 71.64590000 66.04420000 41.31230000 45.96430000 44.36610000 2124 50.72310000 70.92940000 39.83830000 24.16470000 37.15080000 17.02440000 2125 65.03380000 77.59540000 48.42200000 36.82790000 48.98140000 25.21000000 2126 95.68570000 79.47980000 83.80470000 76.29820000 69.94820000 73.92770000 2127 68.93770000 50.88060000 53.64700000 34.43330000 29.23150000 27.99140000 2128 71.03670000 57.91470000 59.38960000 38.75090000 35.28260000 34.91540000 2129 73.40840000 57.42530000 66.69720000 42.42360000 36.67940000 44.13410000 2130 73.81130000 67.01150000 68.84830000 45.55060000 44.57340000 47.93550000 2131 49.64620000 33.42660000 33.02400000 15.67630000 12.66800000 9.883380000 2132 56.41130000 38.26780000 33.04300000 20.26630000 16.68880000 10.30220000 2133 73.29570000 49.02220000 42.83800000 35.90890000 29.26300000 18.20170000 2134 84.19140000 57.29900000 51.98760000 49.41820000 40.58690000 27.44460000 2135 94.21200000 56.81120000 58.52400000 61.72850000 46.48970000 34.92210000 2136 25.67460000 31.51140000 16.59380000 4.725600000 6.588950000 2.601850000 2137 23.65610000 36.99820000 15.49960000 4.816930000 8.417540000 2.549630000 2138 75.70940000 45.45770000 34.29720000 36.33990000 27.92000000 12.13470000 2139 95.75130000 47.77060000 48.58400000 59.92200000 40.92420000 24.11140000 2140 46.50460000 24.17820000 23.97530000 12.33950000 8.610690000 5.100000000 2141 66.60250000 22.51770000 25.25940000 25.20490000 14.89360000 6.179690000 2142 91.88960000 32.86810000 30.09450000 50.83060000 30.65560000 9.922280000 2143 59.51110000 10.60640000 43.51960000 21.57210000 11.15630000 16.82030000 2144 62.45790000 9.528750000 60.02320000 26.71450000 13.36840000 33.25980000 2145 69.38910000 8.737790000 68.39900000 34.06890000 16.87230000 44.23860000 2146 74.94050000 11.90990000 78.72680000 41.87430000 20.79860000 60.07680000 2147 81.38930000 13.09780000 89.89670000 51.77010000 25.58010000 80.22470000 2148 67.03390000 8.692680000 95.19060000 40.90350000 19.38480000 90.09710000 2149 41.49980000 9.126700000 58.26200000 14.16870000 6.917170000 30.64190000 2150 46.93350000 13.52850000 67.52020000 19.08900000 9.578350000 42.38920000 2151 70.49210000 21.72270000 76.34050000 37.76940000 20.12350000 56.24280000 2152 71.29770000 65.88700000 77.63590000 45.60360000 43.50590000 60.91570000 2153 9.528230000 17.42300000 25.34720000 1.645320000 1.881450000 5.011910000 2154 7.030070000 20.64210000 23.39080000 1.516210000 2.346980000 4.288310000 2155 12.20090000 77.26450000 83.98410000 23.90680000 40.99350000 71.56210000 2156 8.796780000 92.02890000 85.07470000 28.92050000 57.67560000 75.37160000 2157 73.60370000 92.96410000 91.48920000 60.67280000 74.77910000 88.91110000 2158 7.350270000 19.22750000 7.938860000 0.750713000 1.794020000 0.573962000 2159 42.30780000 61.48790000 9.574190000 15.17220000 26.05520000 3.402150000 2160 55.21750000 96.11610000 8.550970000 32.71180000 65.58730000 7.653820000 2161 6.857300000 36.76330000 63.14300000 9.060320000 9.766780000 36.85290000 2162 7.228190000 56.15000000 81.61920000 17.43310000 22.53820000 65.41110000 2163 10.89060000 57.09120000 97.73400000 23.74330000 25.67120000 96.33440000 2164 9.532050000 61.93750000 81.02090000 18.64490000 26.78300000 64.87850000 2165 7.252390000 70.07250000 82.28540000 20.92430000 33.69120000 67.80160000 2166 10.63230000 69.57110000 90.45620000 23.86580000 34.49880000 82.70570000 2167 65.28850000 70.25770000 96.24730000 48.41960000 47.42660000 95.43860000 2168 48.78070000 38.38680000 76.06290000 24.46490000 17.89600000 55.72570000 2169 73.56200000 39.60930000 88.76490000 46.25810000 29.11290000 78.56840000 2170 30.75540000 15.77850000 37.32930000 6.787980000 4.167030000 11.67480000 2171 28.96110000 28.18170000 39.01280000 7.298620000 6.769600000 13.12050000 2172 29.47120000 40.19270000 44.61170000 9.615720000 11.75180000 17.93390000 2173 12.51600000 23.01570000 21.12220000 1.946630000 3.034250000 3.551840000 2174 15.04610000 29.86030000 18.65660000 2.664380000 5.045660000 3.006650000 2175 10.63060000 66.25850000 15.14870000 8.217600000 25.70620000 4.439980000 2176 43.39180000 67.55260000 30.13990000 18.37130000 31.75460000 10.50450000 2177 76.84200000 68.55990000 34.69790000 42.23690000 44.74600000 14.26040000 2178 84.12680000 70.79160000 38.80670000 50.46150000 50.61940000 17.51610000 2179 92.58820000 74.68200000 54.77540000 63.45910000 60.11890000 32.38030000 2180 19.60300000 17.76130000 6.143930000 2.057450000 2.244820000 0.447698000 2181 16.08220000 16.77410000 11.66250000 1.569080000 1.837960000 1.066630000 2182 11.67840000 91.53420000 13.72550000 16.02490000 52.00220000 7.099450000 2183 57.95070000 92.80330000 19.04120000 33.60660000 62.38410000 9.393610000 2184 45.74670000 39.06160000 12.02210000 12.85390000 13.33380000 2.317450000 2185 44.68840000 44.14420000 9.008480000 12.97650000 15.48300000 2.127770000 2186 63.15000000 93.20310000 6.710620000 36.92870000 64.57650000 7.297710000 2187 74.39510000 92.99750000 46.04700000 49.32770000 70.35940000 25.44350000 2188 75.93370000 92.56360000 74.57890000 57.00610000 73.10840000 59.44250000 2189 31.17310000 46.66500000 25.96580000 8.884060000 14.41520000 6.639290000 2190 63.77590000 45.66260000 30.21130000 26.10930000 22.78870000 9.393220000 2191 72.31170000 49.78100000 35.52140000 34.20410000 28.87870000 13.02550000 2192 74.96350000 85.40420000 45.11150000 46.98300000 61.42600000 23.64330000 2193 13.71880000 85.06180000 77.20550000 24.38390000 48.58880000 61.10400000 2194 9.053500000 85.48270000 88.36300000 27.77060000 50.31580000 80.53330000 2195 7.519410000 65.93460000 69.73240000 16.13570000 28.60770000 47.69790000 2196 6.443050000 66.87060000 94.86710000 24.55690000 32.66640000 91.20330000 2197 5.481350000 75.55430000 96.12830000 27.36800000 40.81720000 94.70150000 2198 14.35510000 92.74940000 95.47060000 33.52660000 60.37660000 95.54690000 2199 15.97930000 10.77800000 7.692830000 1.227010000 1.021190000 0.452470000 2200 11.32360000 6.780050000 17.77770000 0.950676000 0.584405000 2.262200000 2201 15.99850000 43.21470000 39.01980000 6.331770000 11.39060000 13.67700000 2202 16.25500000 59.00390000 52.36410000 11.41250000 22.02280000 26.15840000 2203 41.79170000 72.80800000 57.95160000 23.36790000 37.85000000 33.77560000 2204 60.08790000 76.24690000 64.60680000 36.23330000 47.13270000 42.70110000 2205 36.35250000 30.68830000 73.11210000 17.06250000 11.66190000 50.59990000 2206 40.94290000 37.45620000 73.50510000 19.79640000 15.23510000 51.56680000 2207 58.09670000 46.88920000 78.70810000 32.09350000 25.31450000 60.70280000 2208 87.51180000 71.33680000 81.89900000 63.96750000 56.87510000 69.27280000 2209 24.06870000 8.910670000 5.599400000 2.639860000 1.618080000 0.327522000 2210 35.65570000 7.160900000 8.426010000 6.108250000 3.301320000 0.731034000 2211 54.46150000 22.76180000 6.679580000 15.92020000 10.25420000 1.240560000 2212 62.89570000 40.31650000 20.88400000 23.91860000 19.47450000 5.097560000 2213 69.31280000 64.50970000 45.30330000 36.13040000 38.52280000 21.27750000 2214 78.14230000 71.67140000 53.00110000 47.10470000 49.30610000 29.50550000 2215 92.33970000 72.09050000 64.98520000 64.72790000 58.41800000 44.12580000 2216 29.00900000 14.96330000 15.42820000 4.386020000 3.041150000 1.912030000 2217 45.38260000 11.30890000 27.87450000 11.43570000 6.205800000 6.505370000 2218 92.62960000 15.39960000 34.09120000 50.80330000 26.85950000 11.69590000 2219 10.96430000 6.219000000 1.045790000 0.488436000 0.369989000 0.040996600 2220 6.985860000 12.72030000 6.860960000 0.416661000 0.779295000 0.357212000 2221 8.722820000 7.823220000 13.54380000 0.570081000 0.462999000 1.259620000 2222 23.77500000 19.36190000 22.55320000 3.661630000 3.242790000 4.053350000 2223 28.65000000 18.31920000 22.09970000 4.814760000 3.676230000 3.925860000 2224 42.49760000 30.76810000 40.54420000 12.75660000 10.25840000 14.55300000 2225 50.52140000 57.08710000 79.05080000 29.47850000 29.39740000 61.77200000 2226 49.96330000 70.54570000 79.21990000 32.42730000 40.09860000 63.25720000 2227 53.61410000 64.84450000 81.99800000 33.96160000 36.61160000 67.47750000 2228 62.22170000 70.64400000 82.21890000 41.18980000 44.58140000 68.68850000 2229 64.93730000 90.43330000 85.41740000 50.49460000 67.11480000 76.79900000 2230 40.44950000 13.66220000 8.499560000 8.195330000 4.883530000 0.896047000 2231 41.74160000 8.819960000 17.83110000 8.956730000 4.824140000 2.664880000 2232 65.17740000 8.726070000 13.83840000 22.82690000 11.99090000 2.367050000 2233 65.69040000 25.41650000 41.01970000 26.45220000 15.94690000 15.38580000 2234 67.69510000 23.13520000 68.04570000 33.26520000 18.34470000 43.93710000 2235 84.28030000 74.38590000 79.80500000 60.73130000 57.72310000 65.89920000 2236 86.69980000 81.65720000 85.67270000 67.41250000 67.25810000 77.04980000 2237 7.820130000 23.91480000 52.06480000 5.489900000 4.599270000 23.90830000 2238 8.153550000 29.88290000 55.36250000 6.662600000 6.574720000 27.51330000 2239 11.52630000 35.82720000 55.25070000 7.543980000 8.861760000 27.64920000 2240 68.11550000 84.91340000 90.05960000 52.68600000 62.54260000 84.83290000 2241 70.97530000 84.75720000 94.47200000 56.63840000 64.23870000 93.65710000 2242 77.04760000 91.26990000 94.36750000 64.24720000 74.70080000 94.56450000 2243 11.41340000 15.07140000 15.87450000 1.105310000 1.360260000 1.864180000 2244 16.53130000 12.51750000 18.02800000 1.728120000 1.391420000 2.414900000 2245 13.74620000 6.147120000 20.69900000 1.363300000 0.750069000 3.152920000 2246 8.093500000 14.90230000 29.83960000 1.827920000 1.598260000 7.054730000 2247 17.63560000 14.46710000 37.32690000 3.688440000 2.409710000 11.50950000 2248 44.87610000 26.61040000 38.56310000 13.22490000 9.443300000 13.04070000 2249 92.11590000 50.92190000 43.09690000 55.30420000 40.22580000 19.42610000 2250 80.03490000 45.66840000 41.90500000 41.42830000 30.52520000 17.55390000 2251 82.12600000 62.32460000 43.98850000 47.05260000 42.69870000 20.53650000 2252 37.75370000 26.73230000 23.15070000 8.543330000 7.239140000 4.674890000 2253 37.84340000 26.37870000 44.96980000 11.04150000 8.154780000 17.79160000 2254 35.31640000 34.81300000 42.36690000 10.51530000 10.31450000 15.96280000 2255 40.46800000 46.21400000 43.64130000 14.32350000 16.77040000 17.66840000 2256 56.29630000 49.23650000 45.75780000 23.57890000 22.95970000 20.01280000 2257 59.48290000 49.16220000 49.88540000 26.36970000 24.28000000 23.82140000 2258 73.65280000 54.53090000 52.45330000 38.87920000 33.53080000 27.22470000 2259 61.27400000 41.81830000 40.04870000 24.88270000 20.35420000 15.20820000 2260 67.51980000 50.63360000 43.20440000 31.43920000 27.76920000 18.37560000 2261 67.99270000 73.74810000 50.44940000 38.36610000 46.51270000 26.78850000 2262 76.88370000 82.05370000 49.90420000 48.44120000 58.91780000 27.58460000 2263 45.69370000 42.93010000 53.78310000 18.00240000 17.00540000 26.92410000 2264 52.00460000 43.70450000 57.23380000 22.21390000 19.42740000 30.84070000 2265 59.94850000 50.59310000 65.38690000 30.25740000 26.62770000 41.39780000 2266 48.23050000 40.54580000 45.78930000 17.52710000 15.94840000 19.30240000 2267 83.92940000 68.83760000 45.94330000 50.79540000 49.18470000 22.86690000 2268 37.32390000 92.71360000 16.86450000 22.68700000 56.67120000 8.271150000 2269 85.48060000 91.08350000 13.36650000 56.17760000 72.23460000 8.854680000 2270 73.89430000 74.53040000 9.160420000 39.46700000 48.19120000 5.608130000 2271 94.54070000 76.64500000 9.248580000 61.41050000 61.27290000 6.853010000 2272 93.83430000 80.75260000 43.20170000 64.70570000 66.24370000 22.41760000 2273 94.52330000 92.60760000 85.37090000 79.91430000 84.57200000 78.36040000 2274 24.80200000 30.62220000 23.89520000 4.869600000 6.355790000 4.904990000 2275 29.61690000 32.58250000 27.14920000 6.614990000 7.801290000 6.421090000 2276 70.39180000 61.21550000 25.07390000 33.84930000 35.41680000 8.380910000 2277 88.06510000 70.32130000 26.19910000 53.15170000 51.80160000 10.51150000 2278 92.57260000 95.65270000 66.97750000 73.28960000 85.10300000 49.74460000 2279 16.63710000 24.76520000 65.84590000 9.486550000 6.492460000 39.92590000 2280 21.68320000 36.55930000 71.38890000 12.99770000 11.48000000 48.10470000 2281 29.17240000 58.59660000 69.61380000 18.05240000 24.73790000 47.05470000 2282 31.06060000 65.55740000 93.76780000 28.07510000 33.59300000 89.04480000 2283 29.30280000 86.00370000 94.70480000 33.89290000 53.70620000 93.20260000 2284 59.07370000 14.63210000 20.33400000 18.95970000 10.48660000 3.936250000 2285 62.64720000 9.695080000 25.48510000 21.66140000 11.37530000 5.910920000 2286 50.84820000 31.09730000 8.584610000 14.53840000 11.56040000 1.599950000 2287 70.45260000 34.65020000 10.19780000 28.62450000 19.91320000 2.591760000 2288 95.20770000 51.67630000 8.566240000 56.19660000 41.41410000 4.525570000 2289 94.92290000 61.18040000 23.83460000 58.52850000 48.13000000 9.039690000 2290 65.83990000 61.95100000 18.83150000 29.95430000 33.93780000 6.063840000 2291 65.79680000 63.54510000 80.34060000 41.44400000 39.63860000 64.93550000 2292 7.709300000 7.220370000 27.65430000 1.377160000 0.745447000 5.899630000 2293 7.752710000 11.08710000 27.09990000 1.421040000 1.031170000 5.678380000 2294 54.98910000 6.556390000 34.57160000 17.34700000 8.866710000 10.33090000 2295 57.53480000 44.87370000 38.14210000 22.54460000 20.48930000 13.91590000 2296 63.43910000 64.30480000 38.92820000 30.58790000 35.63190000 16.11720000 2297 16.59430000 16.35180000 20.04500000 2.005270000 1.961510000 3.075440000 2298 15.84020000 19.49720000 16.92030000 1.889890000 2.389960000 2.232950000 2299 14.98170000 35.32090000 23.87060000 3.574230000 7.140560000 5.004110000 2300 25.98290000 40.45800000 90.94960000 20.78910000 16.21960000 81.56610000 2301 30.54940000 47.66170000 94.21890000 24.39620000 21.08970000 88.54300000 2302 10.97930000 8.767670000 24.33120000 1.376260000 0.864057000 4.482630000 2303 12.81040000 11.14890000 22.80760000 1.506750000 1.119440000 3.927370000 2304 11.44250000 7.847670000 34.88830000 2.416400000 1.228380000 9.831530000 2305 12.44300000 8.655510000 58.96390000 6.564640000 2.948420000 31.08130000 2306 8.720730000 17.74990000 65.33340000 8.064230000 4.491650000 39.04200000 2307 50.76220000 15.34750000 83.41160000 25.91370000 12.76320000 67.24240000 2308 50.35880000 42.00760000 92.76670000 31.46760000 22.27330000 85.68520000 2309 25.43270000 20.06470000 42.16090000 6.198810000 4.424800000 15.17450000 2310 44.83860000 89.93740000 43.17500000 27.54390000 55.96430000 21.69120000 2311 20.21890000 52.06690000 19.42210000 6.643360000 16.02200000 4.460430000 2312 71.06980000 76.31370000 19.06470000 37.94410000 48.84710000 7.764760000 2313 26.97860000 20.38280000 7.606780000 3.860010000 3.591750000 0.708677000 2314 33.07670000 20.86420000 6.177630000 5.693950000 4.624880000 0.679503000 2315 43.07510000 21.49200000 12.01200000 9.856840000 6.869640000 1.601850000 2316 43.31590000 75.04510000 10.93180000 19.17230000 38.14620000 4.950310000 2317 45.72530000 83.14810000 14.93370000 22.96900000 47.24000000 6.706770000 2318 28.91590000 72.02880000 8.363260000 12.86310000 32.46110000 4.034100000 2319 33.01420000 72.09340000 24.13440000 14.90100000 33.47660000 8.027510000 2320 31.76160000 79.11760000 22.13990000 16.39690000 40.13800000 8.037420000 2321 50.01280000 82.70710000 52.79030000 29.40390000 49.64520000 29.56720000 2322 57.63990000 85.06540000 60.61070000 36.42630000 55.31000000 38.71480000 2323 61.81320000 93.03910000 60.02010000 41.97740000 66.30120000 39.22480000 2324 64.96170000 86.02980000 66.88860000 43.43170000 59.68210000 47.05800000 2325 69.64210000 92.42160000 76.80920000 52.16170000 70.38290000 62.64860000 2326 52.85450000 6.740790000 12.92850000 14.44790000 7.566530000 1.785720000 2327 79.50430000 11.58040000 10.95820000 35.13330000 18.56260000 2.459280000 2328 82.42790000 17.64980000 29.12800000 39.36260000 21.32400000 8.500020000 2329 81.48770000 29.77680000 36.66150000 40.12880000 24.15480000 13.12370000 2330 90.10150000 44.18850000 50.39570000 53.10630000 35.72280000 25.28380000 2331 97.15000000 45.24290000 57.03100000 62.83510000 41.05800000 32.59900000 2332 34.54100000 20.50410000 83.98540000 18.95780000 9.922510000 68.00760000 2333 33.52780000 32.07870000 83.96200000 19.55040000 12.96100000 68.31280000 2334 46.11530000 60.27350000 83.75360000 29.34930000 31.12100000 69.93450000 2335 17.96270000 19.75790000 25.92460000 2.812740000 2.841030000 5.352790000 2336 19.12610000 22.34470000 24.00070000 3.020500000 3.432450000 4.629880000 2337 55.24360000 23.39290000 21.81750000 17.05980000 10.89810000 4.506090000 2338 60.69910000 32.66200000 33.54120000 22.52390000 15.95520000 10.47530000 2339 61.17900000 41.09010000 54.95390000 27.24150000 20.98180000 28.48620000 2340 66.56550000 41.21930000 71.92170000 35.32280000 24.72990000 50.12710000 2341 82.81400000 43.59150000 80.12430000 52.64290000 34.36930000 63.81260000 2342 8.877880000 30.96070000 17.23670000 2.082530000 5.062960000 2.624340000 2343 7.264240000 42.51120000 23.62790000 3.796350000 9.969040000 5.237170000 2344 9.430290000 93.16000000 45.05720000 19.45660000 55.15010000 23.23170000 2345 9.306120000 95.41780000 58.92020000 22.92630000 59.09630000 37.36020000 2346 58.86130000 94.48250000 68.15470000 42.45480000 67.88130000 49.73940000 2347 69.87170000 94.59130000 83.97710000 55.45150000 74.15580000 74.99750000 2348 52.63420000 29.93300000 19.80360000 15.90150000 11.88330000 3.972200000 2349 72.91120000 30.11940000 18.24740000 30.56030000 19.50330000 4.205210000 2350 83.74200000 39.44400000 29.76610000 42.74740000 28.76220000 9.641330000 2351 37.95970000 37.57190000 18.13700000 9.447440000 10.99570000 3.462540000 2352 47.61800000 48.70770000 18.14730000 15.53530000 18.88860000 4.304860000 2353 47.78280000 54.21940000 26.61220000 17.21810000 22.59460000 7.764420000 2354 57.68920000 55.87150000 33.74840000 24.08520000 26.99830000 11.86360000 2355 68.83750000 55.14530000 33.18210000 32.04380000 30.69000000 11.85830000 2356 69.55230000 62.64160000 34.70580000 34.42080000 36.54170000 13.41240000 2357 8.439490000 42.60300000 30.98030000 4.522340000 10.30770000 8.627160000 2358 9.233390000 60.85300000 40.88630000 9.161770000 22.25250000 16.25130000 2359 18.48530000 78.05550000 55.12390000 17.24640000 39.13750000 30.91560000 2360 25.22260000 93.59340000 67.13380000 26.66270000 58.80350000 47.50680000 2361 32.35020000 93.94770000 79.29980000 32.29420000 61.68990000 65.90730000 2362 29.23630000 20.79840000 32.12910000 5.994900000 4.593930000 8.565480000 2363 32.50280000 28.41740000 30.53850000 7.422370000 7.008400000 7.971270000 2364 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 2365 1.087880000 9.007010000 7.477900000 0.158732000 0.341596000 0.366288000 2366 44.10990000 23.44720000 56.51350000 15.66170000 9.644510000 28.99410000 2367 59.45600000 33.57140000 56.33000000 25.39010000 17.29670000 29.55700000 2368 92.57980000 75.08790000 61.23160000 64.95720000 61.06590000 39.74960000 2369 21.76880000 30.11880000 8.336310000 3.421960000 5.552570000 1.019220000 2370 39.32880000 36.82580000 8.038550000 9.542710000 10.82080000 1.520120000 2371 56.33750000 62.65170000 8.472380000 23.04480000 30.88550000 3.727440000 2372 67.31430000 85.54260000 8.706180000 37.39940000 56.98640000 6.606660000 2373 74.89250000 94.45130000 7.948610000 46.97330000 71.10520000 8.042390000 2374 78.04770000 94.64380000 88.70870000 64.33680000 78.60470000 83.99320000 2375 15.10930000 52.96340000 63.05870000 12.31590000 18.70090000 37.74620000 2376 18.29990000 69.99320000 63.43370000 16.75930000 32.10080000 39.71840000 2377 34.38970000 74.08810000 63.53840000 22.04910000 38.05670000 40.47420000 2378 38.60780000 92.94850000 71.75990000 31.98050000 60.70880000 54.13030000 2379 21.45310000 42.44040000 59.05320000 10.67990000 12.89650000 32.28930000 2380 20.16030000 42.86510000 72.53090000 13.87060000 14.32980000 50.09260000 2381 19.51920000 35.50410000 57.56190000 9.075760000 9.486200000 30.22130000 2382 22.56500000 36.11470000 63.77250000 11.15630000 10.60410000 37.71310000 2383 57.29790000 60.89990000 75.00770000 33.17840000 33.81430000 55.83310000 2384 26.45130000 7.486590000 9.626690000 3.267470000 1.849910000 0.744942000 2385 31.95200000 11.95100000 8.456370000 4.946640000 3.038390000 0.719189000 2386 31.15170000 5.027710000 20.64170000 5.047760000 2.609070000 3.302010000 2387 26.11690000 75.06920000 30.29660000 14.24730000 35.48610000 11.07510000 2388 31.59350000 89.77210000 51.99270000 23.67620000 53.62690000 29.31160000 2389 37.88420000 87.24880000 57.77700000 26.19890000 52.24420000 35.22000000 2390 74.48340000 89.82400000 63.55890000 51.77090000 67.87950000 43.58240000 2391 92.49760000 97.52100000 86.28780000 79.74640000 89.85560000 80.63230000 2392 91.98840000 97.72560000 94.46600000 82.23970000 91.02690000 96.42840000 2393 24.95560000 8.788660000 65.84730000 10.32080000 4.706310000 39.70830000 2394 34.68050000 10.52010000 66.99310000 13.54700000 6.458990000 41.38940000 2395 36.17830000 22.60260000 75.76960000 17.09300000 9.650950000 54.40570000 2396 77.04790000 20.47290000 72.19990000 42.26460000 22.35390000 50.16470000 2397 78.70310000 53.10450000 90.46890000 53.77050000 39.19610000 82.88080000 2398 15.15480000 22.24360000 48.43270000 5.410960000 4.297960000 20.42700000 2399 11.43700000 37.72030000 72.87900000 12.04910000 11.35660000 50.28460000 2400 11.52270000 50.93920000 72.06030000 13.86200000 18.14970000 49.84720000 2401 31.33460000 39.04720000 52.35210000 11.37350000 12.06130000 24.98560000 2402 43.76890000 56.63640000 54.04110000 19.54770000 24.74470000 28.07220000 2403 43.38100000 67.03790000 55.24510000 21.99300000 32.81330000 30.24400000 2404 51.38330000 70.56110000 68.68950000 30.19250000 39.30930000 47.30600000 2405 45.83360000 61.13330000 23.62680000 17.44590000 26.91830000 7.031680000 2406 55.08760000 78.09380000 21.86810000 26.97730000 44.69860000 8.332900000 2407 78.03550000 78.42490000 24.81420000 45.17640000 54.34630000 10.33110000 2408 79.45570000 92.23360000 29.51060000 51.59560000 70.96080000 14.31500000 2409 56.28350000 37.07280000 8.975170000 18.47930000 15.51380000 2.054320000 2410 57.86990000 52.69370000 9.437730000 21.95900000 24.30370000 3.090290000 2411 81.83110000 55.83190000 7.790610000 42.32500000 36.57170000 4.061650000 2412 84.10200000 74.88330000 47.96360000 52.97070000 55.02360000 25.28640000 2413 83.95720000 94.58180000 60.34420000 61.87160000 78.22140000 40.73250000 2414 39.63920000 49.20780000 39.27400000 13.84670000 18.03850000 14.53110000 2415 38.37900000 50.26920000 44.65550000 14.30360000 18.72030000 18.72020000 2416 46.46290000 55.26470000 56.74190000 21.13480000 24.70010000 30.92690000 2417 51.98210000 63.21540000 60.99060000 26.79040000 32.47090000 36.63310000 2418 65.79180000 64.55700000 72.57190000 39.35160000 39.52260000 52.75200000 2419 17.79090000 14.04720000 15.45670000 1.851750000 1.628520000 1.787560000 2420 16.13610000 14.12980000 10.49550000 1.427240000 1.439400000 0.841339000 2421 11.74790000 13.93710000 11.08380000 0.912074000 1.150440000 0.902737000 2422 8.355750000 9.725920000 4.850740000 0.380126000 0.509332000 0.181171000 2423 32.32310000 29.88860000 20.94590000 6.719220000 7.128470000 3.906950000 2424 34.85280000 60.05030000 25.84770000 12.68300000 23.74820000 7.626370000 2425 13.14040000 44.23710000 16.24750000 4.096820000 10.91620000 3.028750000 2426 6.459260000 52.82190000 26.14200000 5.682530000 15.87910000 6.928550000 2427 7.430680000 81.34930000 37.57300000 14.15930000 40.81420000 16.01220000 2428 59.72890000 58.98700000 8.761780000 24.46740000 29.25790000 3.551940000 2429 78.73840000 62.45940000 7.816340000 40.75170000 39.88890000 4.471900000 2430 42.62190000 28.47810000 7.880810000 10.08190000 8.547520000 1.231500000 2431 44.48020000 31.91440000 24.72010000 12.08550000 10.44390000 5.613580000 2432 45.78940000 35.29770000 22.38290000 12.92770000 11.96790000 4.886020000 2433 72.39550000 45.47910000 26.35940000 32.62530000 26.10530000 7.857930000 2434 72.19620000 51.80060000 30.39070000 33.90940000 29.83970000 10.20460000 2435 80.13420000 53.16850000 29.34240000 41.32940000 34.41560000 10.10650000 2436 85.15430000 86.65130000 32.87670000 55.67040000 67.31210000 15.63920000 2437 24.71370000 53.42240000 8.379230000 7.420230000 17.20840000 2.329830000 2438 26.89220000 55.62600000 40.30570000 10.86960000 19.94620000 15.53320000 2439 33.52820000 56.48690000 55.33540000 15.62000000 22.60120000 29.23400000 2440 43.61770000 78.43070000 82.73150000 32.57830000 46.52270000 69.91050000 2441 49.76310000 91.49960000 92.94070000 43.71030000 64.41580000 90.78090000 2442 50.93300000 96.32700000 92.44550000 46.00160000 70.85390000 90.52160000 2443 14.35160000 30.06450000 9.388640000 2.230350000 4.920370000 1.086010000 2444 10.61330000 32.31570000 6.792740000 2.013450000 5.465590000 0.876477000 2445 28.08640000 35.51260000 94.03290000 21.87490000 14.83360000 87.47240000 2446 45.90840000 49.25280000 93.28620000 30.47000000 25.04310000 87.05330000 2447 57.97530000 51.58950000 93.13120000 37.81120000 30.03720000 87.22940000 2448 71.74660000 79.70940000 95.25410000 55.96600000 59.18880000 94.66770000 2449 25.91310000 60.87170000 37.19820000 11.32500000 23.43710000 13.77430000 2450 34.89870000 78.45050000 39.73110000 19.04670000 40.71140000 17.43060000 2451 49.92210000 77.57480000 42.04810000 25.92990000 43.46240000 19.37740000 2452 63.38510000 95.23360000 53.80420000 42.63820000 69.17990000 32.70170000 2453 63.52830000 94.59480000 93.20010000 53.80330000 72.92800000 92.15490000 2454 20.85410000 5.113410000 29.22120000 3.119890000 1.540120000 6.720510000 2455 41.89570000 7.657040000 36.74220000 10.65850000 5.441870000 11.38560000 2456 80.25740000 15.27070000 62.31840000 42.50500000 21.99980000 36.81420000 2457 80.89020000 24.84530000 93.69640000 53.35230000 28.11030000 87.92690000 2458 81.56830000 47.96990000 94.51590000 57.15820000 38.11790000 90.69360000 2459 29.06610000 33.00890000 33.76170000 7.158180000 8.136210000 9.896960000 2460 32.31820000 44.05270000 32.45510000 9.452170000 13.45350000 9.734590000 2461 63.10860000 68.59550000 32.46400000 30.64010000 38.82190000 12.41610000 2462 96.99840000 70.05760000 39.89020000 64.91010000 57.48880000 18.89210000 2463 21.88870000 8.069360000 48.16280000 5.889070000 2.809740000 20.00290000 2464 40.91880000 9.726490000 84.72060000 21.26140000 9.767670000 69.25750000 2465 45.01690000 26.23380000 86.19890000 24.52360000 13.87770000 72.34580000 2466 50.92720000 59.45500000 94.80260000 35.72530000 33.42970000 91.01310000 2467 17.77270000 33.95360000 34.89590000 4.874240000 7.240890000 10.50460000 2468 14.08920000 34.27610000 45.62690000 5.886860000 7.694240000 18.35710000 2469 22.53600000 50.07880000 46.49920000 9.724380000 16.22740000 20.04680000 2470 57.66610000 55.22170000 49.14740000 26.15870000 27.43540000 23.50400000 2471 81.15230000 71.61150000 70.85780000 54.15810000 52.41460000 51.56640000 2472 83.27280000 78.11230000 77.46060000 60.06890000 60.61310000 62.43820000 2473 27.45410000 28.38430000 50.95410000 8.795310000 7.373980000 23.10200000 2474 26.58030000 33.80170000 65.30510000 12.21040000 10.33730000 39.63160000 2475 31.11090000 52.85940000 72.04390000 18.13990000 21.37850000 50.14290000 2476 32.34950000 53.46580000 82.50290000 21.83070000 23.24640000 66.94540000 2477 13.39300000 19.46320000 33.87820000 2.941450000 2.768990000 9.395980000 2478 7.807210000 17.51330000 36.76690000 2.698040000 2.302610000 11.14140000 2479 13.68810000 15.17930000 44.89310000 4.254400000 2.661170000 17.17760000 2480 25.08990000 33.26360000 52.10930000 8.893080000 8.790780000 24.39580000 2481 34.45480000 34.40950000 62.00900000 13.89260000 11.49210000 35.58980000 2482 61.07150000 44.38170000 67.41900000 30.51420000 23.72670000 43.75030000 2483 40.59890000 90.51190000 27.42500000 23.93810000 54.91560000 11.81000000 2484 52.00850000 93.22500000 35.95610000 31.58000000 61.61840000 17.15150000 2485 44.58580000 19.10630000 6.010660000 10.28640000 6.695000000 0.847283000 2486 50.34330000 18.02830000 9.615210000 13.28660000 8.066510000 1.335250000 2487 91.75760000 68.39580000 6.323200000 55.82190000 51.83600000 5.529830000 2488 94.05270000 82.08840000 10.05890000 62.53750000 66.67610000 7.574360000 2489 95.07180000 84.22610000 31.84920000 65.84490000 70.22310000 15.26820000 2490 27.48380000 25.02040000 42.54140000 7.122110000 5.865610000 15.62440000 2491 33.92600000 30.16710000 51.19240000 10.99790000 8.982400000 23.49090000 2492 35.59140000 29.22620000 59.43070000 13.17980000 9.657010000 32.31480000 2493 52.07860000 27.43250000 81.54040000 26.82910000 15.53640000 64.33620000 2494 89.99360000 38.41870000 82.99500000 60.49140000 36.23170000 68.79570000 2495 73.83400000 17.30470000 41.69900000 32.73690000 17.68430000 16.01540000 2496 89.65000000 12.93960000 52.05960000 50.03910000 25.87550000 25.79240000 2497 81.41700000 9.353980000 51.55010000 41.17920000 21.01610000 24.84190000 2498 85.99060000 13.52970000 59.97550000 47.72400000 24.55370000 34.22900000 2499 92.69670000 23.67190000 62.57760000 56.30580000 30.49180000 37.94030000 2500 95.36080000 76.60400000 89.77030000 77.11970000 67.63320000 84.55050000 2501 43.40070000 45.24900000 40.88210000 15.07480000 16.76330000 15.52980000 2502 52.33110000 47.23860000 50.74290000 21.68110000 20.90710000 24.30550000 2503 52.71450000 80.95740000 74.96440000 35.75210000 50.68910000 57.69990000 2504 59.99160000 80.65990000 91.37920000 45.74780000 54.94360000 86.58250000 2505 4.896310000 25.81110000 31.62910000 2.516510000 3.828840000 8.247500000 2506 9.140280000 27.93810000 69.23520000 9.806810000 7.305880000 44.60230000 2507 7.259330000 25.79460000 78.41610000 12.14820000 7.689500000 58.43910000 2508 9.532480000 31.15880000 65.11560000 9.082210000 7.927520000 39.14640000 2509 10.67290000 34.72810000 84.69560000 15.29420000 11.56950000 69.50240000 2510 10.11560000 35.19400000 92.83000000 18.21990000 12.89510000 84.89300000 2511 16.49220000 60.87060000 91.63330000 22.85270000 27.83170000 84.22020000 2512 4.856390000 8.189640000 21.67280000 0.801911000 0.554704000 3.465670000 2513 21.43240000 6.518190000 19.45680000 2.509100000 1.365390000 2.817080000 2514 26.19000000 6.825840000 20.59390000 3.662400000 1.966140000 3.229840000 2515 29.36700000 10.76960000 44.89220000 7.268050000 3.769210000 17.26600000 2516 34.79850000 6.426200000 49.05820000 9.633950000 4.640020000 20.98330000 2517 47.99710000 7.002120000 55.46180000 16.67980000 8.158630000 27.67110000 2518 91.06350000 4.389940000 64.71660000 54.18830000 27.15960000 40.27520000 2519 94.19200000 33.66970000 69.79000000 60.78720000 35.20830000 47.95590000 2520 94.08760000 43.14060000 79.92760000 64.85690000 40.48070000 64.03700000 2521 93.43710000 50.76340000 90.92640000 69.11910000 45.84300000 84.33370000 2522 40.04540000 15.18870000 42.82520000 10.91630000 6.134120000 15.82680000 2523 47.24750000 21.73360000 41.95240000 14.52060000 9.017780000 15.43970000 2524 63.57370000 37.60270000 41.36410000 26.15730000 19.36140000 16.04540000 2525 71.64740000 42.36880000 48.70430000 34.37760000 25.32160000 22.74110000 2526 81.45630000 49.78570000 62.80680000 47.50330000 35.17940000 38.88730000 2527 83.77920000 73.74360000 94.37850000 65.14460000 58.88360000 92.73080000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 99.99690 108.8960 1 0.000000 77.02890 94.93270 27.23730 42.05040 92.39530 2 100.0000 0.000000 75.91840 67.94000 33.84370 56.78280 3 0.000000 0.000000 53.88990 4.832290 1.932840 25.45160 4 100.0000 68.59390 0.000000 65.77010 57.11770 5.786370 5 0.000000 45.14720 0.000000 3.227610 10.91310 1.229510 6 67.33170 0.000000 0.000000 24.16480 12.45980 1.131960 7 7.958970 7.632930 6.909270 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 99.9969 108.896 1 0.00000 100.000 100.000 37.3737 70.2602 106.194 2 100.000 0.00000 100.000 76.4924 37.2646 101.828 3 0.00000 0.00000 100.000 18.8203 7.52782 99.1264 4 100.000 100.000 0.00000 76.2255 92.4691 9.76917 5 0.00000 100.000 0.00000 18.5534 62.7324 7.06762 6 100.000 0.00000 0.00000 57.6721 29.7367 2.70155 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7749 23.7126 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s41-g121-m0-f2527-ceRGBv2.ti1000644 000765 000000 00000510130 12237536424 023064 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "2280" CREATED "Sat Oct 19 13:13:00 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "121" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "96.415999 99.996948 82.488027" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "41" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 2527 BEGIN_DATA 1 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 2 26.617500 16.049000 0.0000000 3.5999200 2.8579300 0.1430810 3 59.286600 20.285500 0.0000000 18.320800 10.597900 0.2076420 4 69.696600 100.00000 0.0000000 44.023300 73.120800 6.7840500 5 69.298900 100.00000 35.251400 44.831800 73.611400 13.313000 6 99.166700 99.166700 99.166700 94.353200 97.857500 80.723200 7 15.000000 0.0000000 0.0000000 1.2406100 0.6110310 1e-070000 8 15.805300 0.0000000 7.8925100 1.4590000 0.7279500 0.6609680 9 12.500000 0.0000000 0.0000000 0.9641380 0.4748640 0.0000000 10 10.833300 10.833300 10.833300 1.1937800 1.2381200 1.0213300 11 0.0000000 33.252800 21.682100 1.8287700 4.8747000 3.1144100 12 0.0000000 40.671600 23.528800 2.6140500 7.3279200 3.7867700 13 0.0000000 49.764400 36.480900 4.5029900 11.690100 8.2466600 14 21.153200 74.734100 52.570900 13.464100 31.469000 18.883600 15 32.687600 81.202900 0.0000000 15.284600 37.793600 3.9916300 16 32.785800 100.00000 0.0000000 22.643400 62.590700 6.7840500 17 43.038800 100.00000 36.749800 27.656900 65.160700 13.902600 18 55.264600 100.00000 47.345700 35.095700 68.898200 19.112000 19 47.120400 61.239500 64.233600 20.229400 25.503400 27.053400 20 48.058700 72.387700 73.059200 24.976600 35.541800 37.260900 21 35.000000 0.0000000 0.0000000 5.5259700 2.7216900 3e-070000 22 37.500000 0.0000000 0.0000000 6.3785200 3.1415900 3e-070000 23 40.000000 0.0000000 0.0000000 7.3158400 3.6032500 4e-070000 24 41.583400 12.079100 0.0000000 8.2061400 4.7714500 0.0962398 25 42.500000 0.0000000 0.0000000 8.3397100 4.1075300 4e-070000 26 45.000000 0.0000000 0.0000000 9.4554500 4.6570600 5e-070000 27 47.500000 0.0000000 0.0000000 10.666000 5.2533100 5e-070000 28 50.000000 0.0000000 0.0000000 11.975900 5.8984700 6e-070000 29 52.500000 0.0000000 0.0000000 13.389600 6.5947200 7e-070000 30 55.000000 0.0000000 0.0000000 14.909600 7.3433700 8e-070000 31 57.500000 0.0000000 0.0000000 16.540500 8.1466300 8e-070000 32 60.000000 0.0000000 0.0000000 18.286400 9.0065500 9e-070000 33 62.500000 0.0000000 0.0000000 20.150400 9.9246200 1e-060000 34 65.000000 0.0000000 0.0000000 22.138200 10.903600 1.1e-0600 35 67.500000 0.0000000 0.0000000 24.251700 11.944600 1.2e-0600 36 70.000000 0.0000000 0.0000000 26.495900 13.049900 1.4e-0600 37 72.500000 0.0000000 0.0000000 28.874500 14.221500 1.5e-0600 38 75.000000 0.0000000 0.0000000 31.391700 15.461200 1.6e-0600 39 77.500000 0.0000000 0.0000000 34.050300 16.770700 1.7e-0600 40 80.000000 0.0000000 0.0000000 36.855200 18.152200 1.9e-0600 41 82.500000 0.0000000 0.0000000 39.809700 19.607400 2e-060000 42 85.000000 0.0000000 0.0000000 42.918900 21.138700 2.2e-0600 43 87.500000 0.0000000 0.0000000 46.185900 22.747800 2.4e-0600 44 90.000000 0.0000000 0.0000000 49.613900 24.436200 2.5e-0600 45 100.00000 18.214500 0.0000000 65.478600 33.569900 0.1740870 46 100.00000 47.134500 51.930900 70.621400 43.291400 16.297500 47 100.00000 68.519000 75.486000 78.575000 59.122600 39.761400 48 100.00000 88.643000 80.598900 85.940300 80.707500 48.698300 49 45.732500 41.824700 26.903400 12.693400 12.677500 4.6707100 50 50.522400 64.981600 51.177900 20.960500 28.033100 17.012100 51 62.844300 100.00000 91.261600 48.966100 76.402300 66.635800 52 12.741200 14.925700 0.0000000 1.3263200 1.6277600 0.1285260 53 10.000000 10.000000 10.000000 1.0853100 1.1256200 0.9285330 54 0.0000000 15.000000 0.0000000 0.3397480 1.1487700 0.1294390 55 0.0000000 17.500000 0.0000000 0.4288550 1.4500600 0.1633880 56 0.0000000 20.000000 0.0000000 0.5321740 1.7994100 0.2027500 57 0.0000000 22.500000 0.0000000 0.6510610 2.2013900 0.2480440 58 0.0000000 25.000000 0.0000000 0.7862640 2.6585500 0.2995550 59 0.0000000 27.500000 0.0000000 0.9389800 3.1749200 0.3577370 60 0.0000000 30.000000 0.0000000 1.1103200 3.7542600 0.4230160 61 0.0000000 32.500000 0.0000000 1.3014400 4.4004700 0.4958280 62 0.0000000 35.000000 0.0000000 1.5133200 5.1169100 0.5765530 63 0.0000000 37.500000 0.0000000 1.7468000 5.9063500 0.6655040 64 0.0000000 40.000000 0.0000000 2.0034900 6.7742800 0.7633000 65 0.0000000 42.500000 0.0000000 2.2838800 7.7223600 0.8701250 66 0.0000000 45.000000 0.0000000 2.5894300 8.7555100 0.9865360 67 0.0000000 47.500000 0.0000000 2.9209600 9.8764900 1.1128400 68 0.0000000 50.000000 0.0000000 3.2796900 11.089400 1.2495100 69 0.0000000 52.500000 0.0000000 3.6668200 12.398400 1.3970000 70 0.0000000 55.000000 0.0000000 4.0830900 13.805900 1.5555900 71 0.0000000 57.500000 0.0000000 4.5297200 15.316100 1.7257600 72 0.0000000 60.000000 0.0000000 5.0078500 16.932800 1.9079200 73 0.0000000 62.500000 0.0000000 5.5183200 18.658800 2.1024000 74 0.0000000 65.000000 0.0000000 6.0626800 20.499400 2.3097900 75 0.0000000 67.500000 0.0000000 6.6414800 22.456400 2.5303000 76 0.0000000 70.000000 0.0000000 7.2560700 24.534500 2.7644600 77 0.0000000 72.500000 0.0000000 7.9074700 26.737100 3.0126300 78 0.0000000 75.000000 0.0000000 8.5968100 29.067900 3.2752600 79 0.0000000 77.500000 0.0000000 9.3248800 31.529700 3.5526400 80 0.0000000 80.000000 0.0000000 10.093000 34.127000 3.8453000 81 0.0000000 82.500000 0.0000000 10.902100 36.862800 4.1535600 82 0.0000000 85.000000 0.0000000 11.753600 39.741800 4.4779500 83 0.0000000 87.500000 0.0000000 12.648300 42.766900 4.8188100 84 0.0000000 90.000000 0.0000000 13.587100 45.941200 5.1764800 85 0.0000000 92.500000 0.0000000 14.571300 49.269100 5.5514500 86 0.0000000 95.000000 0.0000000 15.601800 52.753300 5.9440400 87 0.0000000 97.500000 0.0000000 16.680000 56.399000 6.3548200 88 0.0000000 100.00000 0.0000000 17.806600 60.208400 6.7840500 89 22.876300 100.00000 53.901600 23.227100 63.112600 23.350100 90 45.820200 100.00000 81.757700 35.781200 69.702600 52.094400 91 55.591800 100.00000 100.00000 46.680000 75.500700 82.488000 92 8.3333300 8.3333300 8.3333300 0.8897170 0.9227610 0.7611910 93 0.0000000 0.0000000 10.000000 0.1529520 0.0873920 0.8521680 94 0.0000000 0.0000000 15.000000 0.2592530 0.1481290 1.4444200 95 0.0000000 0.0000000 17.500000 0.3272490 0.1869800 1.8232600 96 0.0000000 0.0000000 20.000000 0.4060880 0.2320270 2.2625100 97 0.0000000 0.0000000 22.500000 0.4968080 0.2838610 2.7679600 98 0.0000000 0.0000000 25.000000 0.5999780 0.3428100 3.3427700 99 0.0000000 0.0000000 30.000000 0.8472580 0.4840980 4.7204800 100 0.0000000 0.0000000 32.500000 0.9930930 0.5674230 5.5330000 101 0.0000000 0.0000000 35.000000 1.1547800 0.6598060 6.4338300 102 0.0000000 0.0000000 37.500000 1.3329400 0.7616000 7.4264300 103 0.0000000 0.0000000 40.000000 1.5288100 0.8735180 8.5177500 104 0.0000000 0.0000000 42.500000 1.7427700 0.9957680 9.7098300 105 0.0000000 0.0000000 45.000000 1.9759300 1.1289900 11.008900 106 0.0000000 0.0000000 47.500000 2.2289100 1.2735300 12.418400 107 0.0000000 0.0000000 50.000000 2.5026500 1.4299400 13.943500 108 0.0000000 0.0000000 52.500000 2.7980600 1.5987300 15.589300 109 0.0000000 0.0000000 55.000000 3.1157000 1.7802200 17.359100 110 0.0000000 10.994700 57.415300 3.6691100 2.7272700 19.277100 111 0.0000000 0.0000000 57.500000 3.4565100 1.9749500 19.257900 112 0.0000000 0.0000000 60.000000 3.8213700 2.1834200 21.290700 113 0.0000000 0.0000000 62.500000 4.2108900 2.4059800 23.460900 114 0.0000000 0.0000000 65.000000 4.6262800 2.6433200 25.775200 115 0.0000000 0.0000000 67.500000 5.0679400 2.8956700 28.236000 116 0.0000000 0.0000000 70.000000 5.5369300 3.1636300 30.848900 117 0.0000000 0.0000000 72.500000 6.0339900 3.4476400 33.618300 118 0.0000000 0.0000000 75.000000 6.5600100 3.7481900 36.549000 119 0.0000000 0.0000000 77.500000 7.1155800 4.0656300 39.644300 120 0.0000000 0.0000000 80.000000 7.7017400 4.4005500 42.910100 121 0.0000000 0.0000000 82.500000 8.3191500 4.7533200 46.350000 122 0.0000000 0.0000000 85.000000 8.9688900 5.1245500 49.970000 123 0.0000000 0.0000000 87.500000 9.6515900 5.5146300 53.773700 124 0.0000000 0.0000000 90.000000 10.368000 5.9239400 57.764900 125 0.0000000 0.0000000 92.500000 11.119000 6.3530600 61.949200 126 0.0000000 57.523900 79.251200 12.057100 19.629500 43.641400 127 0.0000000 68.925000 86.847600 16.457600 29.037000 55.425100 128 9.1666700 9.1666700 9.1666700 0.9845360 1.0211000 0.8423130 129 0.0000000 7.5000000 0.0000000 0.1478310 0.4998530 0.0563215 130 0.0000000 2.5000000 0.0000000 0.0491865 0.1663120 0.0187393 131 5.0000000 0.0000000 0.0000000 0.3602060 0.1774110 0.0000000 132 0.0000000 10.000000 0.0000000 0.2004410 0.6777410 0.0763652 133 0.0000000 0.0000000 5.0000000 0.0752733 0.0430089 0.4193840 134 0.0000000 0.0000000 2.5000000 0.0375330 0.0214452 0.2091140 135 7.5000000 0.0000000 0.0000000 0.5398130 0.2658720 0.0000000 136 0.0000000 5.0000000 0.0000000 0.0986448 0.3335420 0.0375822 137 0.0000000 0.0000000 7.5000000 0.1128060 0.0644541 0.6284980 138 3.3333300 3.3333300 3.3333300 0.3555920 0.3687990 0.3042250 139 0.0000000 12.500000 0.0000000 0.2640350 0.8927680 0.1005940 140 4.1666700 4.1666700 4.1666700 0.4448580 0.4613810 0.3805950 141 0.8333330 0.8333330 0.8333330 0.0892659 0.0925813 0.0763708 142 10.000000 0.0000000 0.0000000 0.7319210 0.3604910 0.0000000 143 1.6666700 1.6666700 1.6666700 0.1785320 0.1851630 0.1527420 144 2.5000000 2.5000000 2.5000000 0.2663260 0.2762180 0.2278540 145 5.0000000 5.0000000 5.0000000 0.5341240 0.5539620 0.4569660 146 5.8333300 5.8333300 5.8333300 0.6229120 0.6460470 0.5329280 147 13.333300 13.333300 13.333300 1.5586000 1.6164900 1.3334500 148 14.166700 14.166700 14.166700 1.6951000 1.7580500 1.4502300 149 15.000000 15.000000 15.000000 1.8396100 1.9079300 1.5738600 150 15.833300 15.833300 15.833300 1.9930200 2.0670400 1.7051100 151 17.500000 17.500000 17.500000 2.3220900 2.4083300 1.9866500 152 18.333300 18.333300 18.333300 2.4999600 2.5928100 2.1388200 153 19.166700 19.166700 19.166700 2.6866200 2.7864000 2.2985200 154 20.833300 20.833300 20.833300 3.0867900 3.2014400 2.6408800 155 21.666700 21.666700 21.666700 3.3009600 3.4235600 2.8241200 156 22.500000 22.500000 22.500000 3.5252500 3.6561800 3.0160000 157 23.333300 23.333300 23.333300 3.7593900 3.8990200 3.2163200 158 24.166700 24.166700 24.166700 4.0024400 4.1510900 3.4242600 159 25.000000 25.000000 25.000000 4.2573300 4.4154400 3.6423200 160 25.833300 25.833300 25.833300 4.5221800 4.6901400 3.8689200 161 26.666700 26.666700 26.666700 4.7982200 4.9764300 4.1050800 162 27.500000 27.500000 27.500000 5.0842200 5.2730500 4.3497700 163 28.333300 28.333300 28.333300 5.3822900 5.5821900 4.6047800 164 29.166700 29.166700 29.166700 5.6912100 5.9025800 4.8690700 165 30.000000 30.000000 30.000000 6.0119700 6.2352600 5.1435000 166 30.833300 30.833300 30.833300 6.3445700 6.5802100 5.4280500 167 31.666700 31.666700 31.666700 6.6904900 6.9389800 5.7240000 168 32.500000 32.500000 32.500000 7.0467800 7.3085100 6.0288300 169 34.166700 34.166700 34.166700 7.7993100 8.0889800 6.6726400 170 35.000000 35.000000 35.000000 8.1940700 8.4984100 7.0103800 171 35.833300 35.833300 35.833300 8.6021500 8.9216400 7.3595100 172 36.666700 36.666700 36.666700 9.0235400 9.3586800 7.7200300 173 37.500000 37.500000 37.500000 9.4582500 9.8095400 8.0919400 174 38.333300 38.333300 38.333300 9.9077400 10.275700 8.4765000 175 39.166700 39.166700 39.166700 10.370500 10.755700 8.8724500 176 40.000000 40.000000 40.000000 10.848100 11.251000 9.2810500 177 40.833300 40.833300 40.833300 11.339000 11.760200 9.7010400 178 41.666700 41.666700 41.666700 11.845100 12.285000 10.134000 179 42.500000 42.500000 42.500000 12.366400 12.825700 10.580000 180 43.333300 43.333300 43.333300 12.902400 13.381600 11.038600 181 44.166700 44.166700 44.166700 13.453200 13.952900 11.509800 182 45.000000 45.000000 45.000000 14.020800 14.541600 11.995400 183 45.833300 45.833300 45.833300 14.603500 15.145800 12.493900 184 46.666700 46.666700 46.666700 15.201500 15.766100 13.005500 185 47.500000 47.500000 47.500000 15.815900 16.403300 13.531200 186 48.333300 48.333300 48.333300 16.446600 17.057500 14.070800 187 49.166700 49.166700 49.166700 17.093600 17.728500 14.624300 188 50.000000 50.000000 50.000000 17.758300 18.417800 15.193000 189 50.833300 50.833300 50.833300 18.439300 19.124100 15.775600 190 51.666700 51.666700 51.666700 19.138100 19.848900 16.373400 191 52.500000 52.500000 52.500000 19.854400 20.591800 16.986300 192 53.333300 53.333300 53.333300 20.587300 21.351900 17.613300 193 54.166700 54.166700 54.166700 21.339200 22.131800 18.256600 194 55.000000 55.000000 55.000000 22.108400 22.929500 18.914700 195 55.833300 55.833300 55.833300 22.895300 23.745700 19.587900 196 56.666700 56.666700 56.666700 23.702000 24.582300 20.278100 197 57.500000 57.500000 57.500000 24.526700 25.437700 20.983700 198 58.333300 58.333300 58.333300 25.370000 26.312200 21.705100 199 59.166700 59.166700 59.166700 26.233200 27.207500 22.443600 200 60.000000 60.000000 60.000000 27.115600 28.122700 23.198600 201 60.833300 60.833300 60.833300 28.017400 29.058000 23.970100 202 61.666700 61.666700 61.666700 28.938600 30.013400 24.758200 203 62.500000 62.500000 62.500000 29.879600 30.989400 25.563300 204 63.333300 63.333300 63.333300 30.841500 31.987000 26.386200 205 64.166700 64.166700 64.166700 31.824700 33.006700 27.227400 206 65.000000 65.000000 65.000000 32.827100 34.046300 28.085000 207 65.833300 65.833300 65.833300 33.850300 35.107500 28.960400 208 66.666700 66.666700 66.666700 34.895700 36.191800 29.854800 209 67.500000 67.500000 67.500000 35.961100 37.296700 30.766300 210 68.333300 68.333300 68.333300 37.048700 38.424700 31.696700 211 69.166700 69.166700 69.166700 38.157700 39.574900 32.645500 212 70.000000 70.000000 70.000000 39.288900 40.748100 33.613400 213 70.833300 70.833300 70.833300 40.442400 41.944400 34.600200 214 71.666700 71.666700 71.666700 41.618100 43.163800 35.606000 215 72.500000 72.500000 72.500000 42.816000 44.406200 36.630900 216 73.333300 73.333300 73.333300 44.037300 45.672800 37.675800 217 74.166700 74.166700 74.166700 45.280300 46.962000 38.739200 218 75.000000 75.000000 75.000000 46.548500 48.277300 39.824200 219 75.833300 75.833300 75.833300 47.838900 49.615600 40.928200 220 76.666700 76.666700 76.666700 49.153000 50.978500 42.052500 221 77.500000 77.500000 77.500000 50.490700 52.366000 43.197000 222 78.333300 78.333300 78.333300 51.852200 53.778000 44.361800 223 79.166700 79.166700 79.166700 53.239000 55.216300 45.548200 224 80.000000 80.000000 80.000000 54.650000 56.679700 46.755400 225 80.833300 80.833300 80.833300 56.086100 58.169100 47.984000 226 81.666700 81.666700 81.666700 57.546000 59.683300 49.233100 227 82.500000 82.500000 82.500000 59.031000 61.223500 50.503600 228 83.333300 83.333300 83.333300 60.542700 62.791200 51.796800 229 84.166700 84.166700 84.166700 62.079400 64.385100 53.111600 230 85.000000 85.000000 85.000000 63.641400 66.005100 54.448000 231 85.833300 85.833300 85.833300 65.230100 67.652800 55.807100 232 86.666700 86.666700 86.666700 66.844600 69.327300 57.188400 233 87.500000 87.500000 87.500000 68.485700 71.029300 58.592500 234 88.333300 88.333300 88.333300 70.152000 72.757500 60.018100 235 89.166700 89.166700 89.166700 71.846700 74.515100 61.467900 236 90.000000 90.000000 90.000000 73.568900 76.301300 62.941400 237 90.833300 90.833300 90.833300 75.316900 78.114200 64.436900 238 91.666700 91.666700 91.666700 77.093400 79.956700 65.956800 239 92.500000 92.500000 92.500000 78.898100 81.828400 67.500700 240 93.333300 93.333300 93.333300 80.729300 83.727700 69.067400 241 94.166700 94.166700 94.166700 82.590200 85.657600 70.659400 242 95.000000 95.000000 95.000000 84.477600 87.615200 72.274200 243 95.833300 95.833300 95.833300 86.395200 89.604000 73.914800 244 96.666700 96.666700 96.666700 88.341100 91.622100 75.579600 245 97.500000 97.500000 97.500000 90.315700 93.670100 77.269000 246 98.333300 98.333300 98.333300 92.320100 95.748900 78.983800 247 30.000000 0.0000000 0.0000000 4.0543900 1.9969000 2e-070000 248 32.500000 0.0000000 0.0000000 4.7522600 2.3406100 2e-070000 249 54.145800 28.219900 0.0000000 15.364500 10.417100 0.3758280 250 54.549300 59.886000 0.0000000 19.612300 24.060900 1.8993500 251 58.195500 82.496700 0.0000000 27.915800 45.239300 4.1531400 252 27.500000 0.0000000 0.0000000 3.4287300 1.6887400 2e-070000 253 92.500000 0.0000000 0.0000000 53.207800 26.206300 2.7e-0600 254 95.000000 0.0000000 0.0000000 56.970600 28.059500 2.9e-0600 255 97.500000 0.0000000 0.0000000 60.907700 29.998700 3.1e-0600 256 0.0000000 18.771900 43.217200 2.2874500 2.6549200 10.254500 257 0.0000000 25.286000 74.620400 7.2809900 6.4158200 36.399100 258 0.0000000 37.455000 100.00000 15.330200 13.655200 76.367800 259 0.0000000 45.933700 100.00000 16.297900 16.927300 76.736500 260 0.0000000 58.562300 100.00000 18.316700 23.753400 77.505600 261 69.096700 60.822600 0.0000000 30.842000 30.131600 1.9705400 262 69.485500 75.995900 0.0000000 34.904900 42.849500 3.3839600 263 75.634300 84.581500 10.754000 43.826900 55.131600 5.3514100 264 77.297700 100.00000 0.0000000 51.636300 76.870500 6.7840500 265 92.560000 100.00000 0.0000000 71.102700 86.458200 6.7840500 266 55.448700 56.072700 100.00000 33.053000 29.688500 77.331200 267 71.694600 71.109500 100.00000 49.221900 47.097200 78.576800 268 13.684900 0.0000000 35.205200 2.2580700 1.2043000 6.5114200 269 32.413500 0.0000000 66.614600 9.6353200 5.1326600 27.347700 270 67.468900 0.0000000 75.090800 30.804200 15.690700 36.658400 271 33.333300 33.333300 33.333300 7.4163900 7.6918400 6.3450400 272 43.447500 78.712600 38.439800 19.848300 37.885000 11.517600 273 25.000000 0.0000000 0.0000000 2.8710800 1.4140800 1e-070000 274 36.712900 0.0000000 17.353700 6.4243100 3.1896100 1.7996100 275 45.431700 0.0000000 25.796100 10.293400 5.1198900 3.5413600 276 44.870600 28.894500 63.283400 14.765500 10.596100 24.563900 277 48.557600 51.648400 69.827200 20.243400 20.606200 32.008600 278 0.0000000 0.0000000 27.500000 0.7165120 0.4093930 3.9920300 279 0.0000000 0.0000000 95.000000 11.905300 6.8023300 66.330200 280 0.0000000 0.0000000 97.500000 12.728100 7.2724300 70.914200 281 0.0000000 0.0000000 100.00000 13.587800 7.7636400 75.704000 282 0.0000000 17.445700 100.00000 14.014500 9.2065600 75.866600 283 32.469300 45.140100 100.00000 20.938300 18.915900 76.697300 284 0.0000000 0.0000000 12.500000 0.2014790 0.1151190 1.1225400 285 11.666700 11.666700 11.666700 1.3081300 1.3567100 1.1191600 286 0.0000000 18.631200 15.224200 0.7388110 1.7536000 1.6567500 287 64.340900 50.075100 62.690300 29.134500 24.190200 24.885900 288 68.935000 76.712000 68.146800 39.801600 46.274000 32.360700 289 74.400800 100.00000 77.365400 55.666600 79.414100 46.257200 290 30.522200 37.034700 25.053600 6.4985900 8.1642500 4.0044400 291 38.855000 35.640500 100.00000 22.034500 16.462100 76.302500 292 19.754200 0.0000000 29.345100 2.7159600 1.4016800 4.5225000 293 59.835400 0.0000000 30.453700 19.040400 9.4467000 4.8616700 294 61.597600 16.946100 31.908800 20.829200 11.513100 5.4888200 295 78.772100 56.096400 36.755300 41.012400 32.650400 8.7495200 296 100.00000 58.994000 37.761100 71.185700 49.066500 9.3690100 297 100.00000 68.439000 67.195100 76.902500 58.112000 30.544600 298 46.279300 0.0000000 74.897800 16.600400 8.6916200 36.425800 299 59.191300 0.0000000 100.00000 31.296300 16.485600 75.704000 300 73.901400 0.0000000 100.00000 43.855900 22.671500 75.704000 301 86.402200 0.0000000 100.00000 58.318900 29.794900 75.704000 302 81.861800 36.618100 100.00000 54.291200 32.612000 76.337100 303 86.128100 57.268900 100.00000 62.448000 44.790200 77.413500 304 91.128800 81.693800 100.00000 75.440000 68.954000 79.756400 305 80.657800 33.217400 0.0000000 38.977900 23.126400 0.5181510 306 100.00000 46.097100 0.0000000 67.753300 41.261300 1.0407200 307 100.00000 56.070900 0.0000000 69.292300 46.465100 1.6270700 308 100.00000 75.521100 0.0000000 73.766900 61.594800 3.3318200 309 100.00000 85.075100 0.0000000 76.801500 71.855300 4.4879400 310 100.00000 100.00000 0.0000000 82.828200 92.233300 6.7840500 311 0.0000000 41.951500 63.294100 6.5603900 9.9873100 25.026400 312 0.0000000 76.457500 71.824300 14.913200 33.855900 36.288900 313 0.0000000 53.288400 54.109000 6.7946600 14.545100 18.159400 314 0.0000000 79.465200 65.030600 14.556900 36.206300 29.585900 315 0.0000000 91.977300 100.00000 27.949500 56.324100 81.175600 316 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 317 16.491300 31.767400 0.0000000 2.6723700 4.9082600 0.4737450 318 33.160500 38.845100 0.0000000 6.8308200 8.8007500 0.7169920 319 40.488500 41.431300 0.0000000 9.6696700 11.005300 0.8233330 320 48.329000 63.105700 0.0000000 16.736400 24.556400 2.1515200 321 53.756900 100.00000 0.0000000 31.946900 67.172900 6.7840500 322 82.572800 100.00000 55.083800 60.831700 81.645900 24.204500 323 83.234000 100.00000 77.167500 65.553200 84.279900 46.007000 324 88.938300 100.00000 92.280200 76.996200 90.232200 68.357900 325 100.00000 0.0000000 11.020900 65.193500 32.123100 0.9572810 326 100.00000 0.0000000 0.0000000 65.021600 32.024900 3.3e-0600 327 100.00000 48.639500 40.282700 69.654800 43.329700 9.8209900 328 100.00000 100.00000 52.323600 85.604600 93.819600 22.252600 329 100.00000 100.00000 78.124400 90.087300 96.380900 47.227800 330 100.00000 100.00000 86.069500 92.085100 97.522400 58.358700 331 20.000000 20.000000 20.000000 2.8815200 2.9885400 2.4652600 332 16.666700 16.666700 16.666700 2.1531200 2.2330900 1.8420900 333 12.500000 12.500000 12.500000 1.4296500 1.4827500 1.2231300 334 18.926700 17.123600 5.4824100 2.2722000 2.3229400 0.6172010 335 27.668700 53.996500 0.0000000 7.3812000 14.937200 1.4905600 336 38.452900 75.630400 0.0000000 15.502200 32.988200 3.3437400 337 0.0000000 39.988200 73.735300 8.2923700 10.364100 35.808200 338 0.0000000 65.013000 100.00000 19.653400 28.272900 78.014900 339 0.0000000 71.444800 100.00000 21.215700 33.555600 78.610100 340 17.763200 82.744500 100.00000 26.174800 45.691800 79.888600 341 54.930600 0.0000000 49.674500 17.331800 8.7307700 13.738400 342 70.132600 0.0000000 65.827000 31.388200 15.835600 26.572400 343 73.668800 35.612600 64.871000 36.206100 22.726300 26.249700 344 100.00000 48.031900 73.539300 74.265800 45.722300 35.958000 345 100.00000 79.447800 28.617800 75.714800 66.008400 8.0872600 346 100.00000 93.125000 37.537800 81.181800 82.913200 13.090000 347 100.00000 100.00000 37.065200 84.129100 92.976600 14.031600 348 36.511000 35.523700 46.494300 9.7166000 9.4604400 12.432100 349 100.00000 38.649800 57.761800 70.377200 40.316900 20.173400 350 74.373700 0.0000000 22.463400 31.242900 15.427000 2.7601700 351 100.00000 0.0000000 28.891800 65.809100 32.474800 4.3874300 352 100.00000 0.0000000 45.849400 67.081300 33.201700 11.475300 353 100.00000 0.0000000 54.044200 68.013200 33.734200 16.667200 354 100.00000 0.0000000 90.668000 75.586800 38.061500 58.863500 355 100.00000 0.0000000 100.00000 78.609400 39.788500 75.704000 356 100.00000 38.588500 100.00000 80.465200 46.063500 76.411000 357 27.993700 0.0000000 39.226200 5.0132500 2.5847600 8.1691100 358 26.964400 0.0000000 100.00000 16.891300 9.3907100 75.704000 359 0.0000000 69.095400 43.379000 8.8520100 24.809800 12.832100 360 0.0000000 78.468300 43.124900 11.416900 33.547500 13.688900 361 0.0000000 100.00000 57.710500 21.292800 62.200300 26.207500 362 0.0000000 100.00000 68.651400 23.087200 63.225600 36.204800 363 0.0000000 100.00000 89.141500 27.924600 65.989500 63.156100 364 0.0000000 100.00000 100.00000 31.394400 67.972000 82.488000 365 37.241500 66.879300 100.00000 26.368900 32.819200 78.178300 366 36.449200 72.720000 100.00000 27.564600 37.660600 78.739100 367 61.652800 71.732300 100.00000 40.796800 43.418200 78.638900 368 37.739700 37.915700 62.717600 12.498900 11.655900 24.338200 369 40.383900 37.621000 70.445900 14.849300 12.837800 32.001500 370 60.571700 40.301500 100.00000 34.325800 23.859000 76.479600 371 49.967100 22.102700 45.987300 14.662800 9.2085100 11.792300 372 68.637900 29.310300 47.719100 28.570600 17.315100 12.952100 373 72.454700 38.544800 47.696300 32.930900 21.744700 13.239700 374 80.968300 69.456200 59.631500 48.866900 44.930500 23.694900 375 64.139000 51.091200 47.069100 27.069000 23.456500 13.480300 376 17.500000 0.0000000 0.0000000 1.5659900 0.7712900 1e-070000 377 20.000000 0.0000000 0.0000000 1.9432600 0.9571060 1e-070000 378 22.500000 0.0000000 0.0000000 2.3773800 1.1709200 1e-070000 379 100.00000 38.237600 21.796100 67.311800 38.448100 3.3117400 380 100.00000 61.806300 28.536300 71.164000 50.632900 6.3318600 381 78.516100 50.770500 0.0000000 38.568400 28.805600 1.2937700 382 82.946600 77.796400 0.0000000 49.768000 51.706100 3.5865500 383 92.291100 80.448700 12.262100 63.332900 60.775600 4.9939300 384 91.592400 100.00000 33.077000 70.718500 86.350100 12.517100 385 0.0000000 13.356500 20.367600 0.7073280 1.2149600 2.4431100 386 0.0000000 29.381600 40.178400 2.6096900 4.4872300 9.0053100 387 0.0000000 43.489600 45.409700 4.4178200 9.2729800 12.147200 388 22.431700 44.661500 73.302000 11.110900 13.317200 35.511100 389 50.784100 86.312900 100.00000 38.213400 55.186600 80.358800 390 63.419000 88.402800 100.00000 47.436500 61.936400 80.649900 391 77.109000 100.00000 100.00000 65.019200 84.533200 82.488000 392 85.663200 100.00000 100.00000 75.164300 89.529900 82.488000 393 6.6666700 6.6666700 6.6666700 0.7111850 0.7375990 0.6084490 394 7.5000000 7.5000000 7.5000000 0.8004510 0.8301800 0.6848200 395 55.368900 0.0000000 12.714500 15.349200 7.5761300 1.1479600 396 71.903900 0.0000000 37.467000 29.625500 14.696200 7.4128000 397 79.694000 0.0000000 48.221900 38.809800 19.296600 12.846400 398 79.716500 8.4495300 68.925400 42.028300 21.602000 29.770400 399 100.00000 0.0000000 71.935500 70.941000 35.407000 32.979400 400 100.00000 73.517900 100.00000 86.793000 67.459200 78.821800 401 68.302500 24.286500 23.187400 26.227600 15.113700 3.2032000 402 100.00000 21.860800 21.666900 66.105900 34.384000 2.8277700 403 100.00000 21.425100 41.358800 67.262400 34.985700 9.3803800 404 100.00000 22.285900 80.167600 73.403900 38.612800 43.379000 405 100.00000 51.767400 100.00000 82.159700 51.793000 77.056600 406 0.0000000 58.878600 32.335900 5.7723900 16.755600 7.3016600 407 0.0000000 100.00000 33.937800 18.890700 60.827800 12.824100 408 0.0000000 100.00000 47.347900 20.019500 61.472800 19.113300 409 57.957200 100.00000 59.797500 38.448800 70.674100 27.904800 410 34.349300 50.725600 29.925300 9.5493600 14.559700 5.9887000 411 51.992400 55.526300 34.127400 18.365100 21.191000 7.6999500 412 52.369800 78.425000 36.966900 24.210900 39.770800 10.866200 413 78.676200 79.202800 39.919500 46.717100 51.565000 12.231200 414 84.384100 90.212200 100.00000 69.394700 74.735000 80.911600 415 49.348400 29.625300 27.546100 13.427000 9.7997800 4.4179100 416 100.00000 70.471200 41.781500 74.077000 57.924700 12.166400 417 100.00000 79.109500 52.838700 77.676200 66.833700 19.560800 418 100.00000 75.718400 65.962000 78.616700 64.524900 30.058200 419 100.00000 89.791500 87.450200 88.166400 83.202400 58.842000 420 100.00000 88.917500 100.00000 91.784400 84.336500 80.723500 421 25.979300 45.900900 52.155200 8.5434000 12.241600 16.385700 422 26.712400 72.760900 57.422900 14.669500 30.541600 22.236800 423 66.620300 15.595400 0.0000000 23.853600 12.788100 0.1371090 424 89.199100 22.149200 0.0000000 49.130800 26.027800 0.2412990 425 91.015900 68.308700 0.0000000 57.890300 48.260900 2.6045600 426 93.866500 100.00000 46.030300 75.127700 88.604400 18.359800 427 94.065300 100.00000 60.452000 77.240200 89.787700 28.456800 428 94.370400 100.00000 70.470000 79.442000 91.009200 38.141700 429 39.099500 58.370300 31.646900 12.602600 19.836400 7.0344300 430 59.376900 60.408100 33.394600 23.977900 26.592900 7.7837500 431 70.435200 64.284200 32.870100 33.819800 33.790400 7.9100800 432 73.325800 72.051400 47.959700 39.756100 42.257400 15.657000 433 100.00000 76.452400 75.669000 80.742200 66.337900 40.794800 434 100.00000 83.552200 83.912700 84.959300 75.042900 52.661400 435 32.798400 20.151800 17.264600 5.6999900 4.3894600 1.9907900 436 36.437600 19.289100 100.00000 20.095400 12.416900 75.895000 437 39.815000 53.424400 100.00000 24.648500 24.238300 77.158300 438 52.211500 74.197600 100.00000 35.179700 42.580200 78.893300 439 18.776000 35.356200 34.948000 4.4487900 6.7455500 7.0028800 440 26.654800 36.589600 54.735800 7.9732900 8.9630200 17.797700 441 78.615500 45.448300 56.811800 41.290700 28.248200 19.730300 442 100.00000 57.518700 57.512900 73.013200 49.328700 20.995200 443 38.329700 19.475600 31.268500 8.1091000 5.5377500 5.3166900 444 64.901200 24.361200 52.629900 25.620900 15.007400 15.963100 445 42.387600 0.0000000 62.057600 12.432000 6.4495300 23.067200 446 79.343300 0.0000000 85.295900 45.152300 22.952100 50.410100 447 100.00000 21.910000 100.00000 79.230900 41.890100 75.940800 448 31.052300 22.657800 33.416800 6.0491400 4.9657300 6.1038600 449 32.967200 23.937700 46.441400 7.7370600 6.0771200 12.084500 450 39.809800 41.946200 53.453100 12.377700 12.738500 17.094900 451 40.214100 41.375200 58.978500 13.223700 13.026600 21.264100 452 60.490800 71.102600 82.907200 34.604500 39.485200 49.799700 453 81.142300 71.487000 100.00000 59.413200 52.400700 78.614300 454 85.642400 86.010500 100.00000 69.440900 70.255300 80.317700 455 68.847800 67.491100 81.569800 40.170200 39.601600 47.579600 456 82.265600 90.688500 82.650900 61.737700 71.085200 51.841900 457 88.712500 100.00000 84.646000 74.509200 88.835700 56.230000 458 42.934400 21.913400 0.0000000 9.1488000 6.3019700 0.2368630 459 63.421200 35.062200 0.0000000 22.387400 15.414000 0.5786640 460 82.737000 60.311800 0.0000000 45.168000 36.891300 1.9314600 461 100.00000 66.185300 0.0000000 71.354200 53.437000 2.4126300 462 100.00000 70.300200 28.884400 73.141100 57.267000 7.1787600 463 71.379800 50.715300 22.190500 31.664100 25.419100 3.9915500 464 100.00000 49.960700 28.554800 69.065500 43.534700 5.5373400 465 64.654200 29.435900 40.958200 24.534100 15.301600 9.3695700 466 66.695800 37.170900 74.729200 31.774300 21.115800 36.876400 467 0.0000000 20.771600 61.768500 4.6614300 4.2570700 23.027200 468 0.0000000 30.668700 67.877400 6.2964600 6.8555500 29.062400 469 0.0000000 36.135100 88.775300 11.629300 11.187200 56.401500 470 0.0000000 52.357000 100.00000 17.231500 20.084100 77.092200 471 62.856700 0.0000000 23.414900 20.959700 10.365200 2.9701200 472 86.604400 0.0000000 39.303800 46.469400 23.003500 8.2039700 473 32.264800 8.5449300 0.0000000 4.8526500 2.8774100 0.0642747 474 46.024900 0.0000000 11.560500 10.121900 4.9996800 1.0149800 475 47.732800 18.106100 13.440700 11.458900 6.9684600 1.4101400 476 55.353300 74.447800 23.283500 24.102100 36.296700 6.1565700 477 66.570900 76.398400 49.561700 34.903900 43.380500 17.096300 478 74.918000 81.467100 54.667200 44.941800 52.890700 21.140400 479 65.823700 0.0000000 41.530000 24.477500 12.186500 9.2345100 480 78.239100 0.0000000 41.829900 36.547400 18.133300 9.3796600 481 100.00000 0.0000000 62.100200 69.168600 34.394400 23.104900 482 100.00000 56.331400 82.708700 77.710900 51.405500 48.290700 483 100.00000 63.316700 100.00000 84.301800 59.035900 77.872700 484 100.00000 81.841000 100.00000 89.294300 75.916800 79.774800 485 32.872800 68.977700 27.816800 12.595700 26.483600 6.7471100 486 81.304300 72.277700 30.759100 47.115800 45.946500 7.9479200 487 85.267300 73.675100 40.491100 53.056200 50.019600 11.877600 488 59.594700 0.0000000 44.906600 19.962200 9.9869900 10.958100 489 74.062700 0.0000000 52.645800 33.246600 16.596900 15.688200 490 18.839900 0.0000000 17.788300 2.0978800 1.0597400 1.8709500 491 19.112200 23.976000 84.076600 11.257500 8.3380000 48.889300 492 24.156000 28.206900 100.00000 17.270400 12.424500 76.079500 493 23.386900 52.259500 100.00000 19.761500 21.285100 77.086300 494 0.0000000 13.741700 32.405000 1.2873100 1.5786800 5.6147600 495 0.0000000 8.4844800 34.093500 1.2618100 1.1915400 6.1608800 496 9.3763600 9.6783200 40.680300 2.4593500 1.8944000 8.9053100 497 0.0000000 8.6187500 44.103600 2.0602400 1.6553700 10.595200 498 0.0000000 27.652300 49.741400 3.4222800 4.6216800 14.141900 499 86.662700 29.214200 56.072700 49.387300 27.627400 18.559700 500 31.891600 49.087400 0.0000000 7.7213900 12.889400 1.1983800 501 44.309900 54.139900 0.0000000 13.074400 17.811000 1.4997600 502 39.516200 66.009500 0.0000000 13.419500 24.785900 2.3972400 503 47.828600 75.790000 0.0000000 19.655400 35.166800 3.3612800 504 63.303300 78.620100 0.0000000 30.439600 42.908900 3.6818500 505 68.649300 90.938200 0.0000000 39.218400 59.616600 5.3151300 506 92.826200 100.00000 18.878300 71.865000 86.862700 8.8424200 507 100.00000 100.00000 20.907500 83.265900 92.483400 9.2226500 508 16.746700 13.034300 49.147000 4.1485600 3.0394500 13.515800 509 19.807900 25.768500 54.691500 5.8189400 5.5098000 17.450300 510 58.832800 50.701000 55.111400 23.972100 21.833000 18.730400 511 68.513600 64.359700 57.420300 34.511500 34.370700 21.450900 512 77.143300 63.752000 62.972100 43.736200 38.595400 26.092100 513 81.454300 80.802400 73.431000 55.130800 57.537500 38.633000 514 92.357800 94.453200 100.00000 81.958900 85.844800 81.560700 515 93.205200 100.00000 100.00000 85.646000 94.692400 82.488000 516 21.448500 61.155700 21.969000 7.9041600 19.066900 4.6513000 517 52.739700 77.451500 28.421900 23.603600 38.580400 7.7982900 518 65.897700 84.154200 47.857300 36.610100 51.317400 16.995900 519 72.285700 89.829300 62.329400 46.370200 62.228500 28.460400 520 82.591500 100.00000 68.224300 62.928800 82.842400 35.761700 521 39.244000 46.405600 43.302000 11.611300 13.871100 11.171100 522 44.979000 48.134300 43.714100 14.308500 15.886700 11.473300 523 53.332300 54.148300 49.089700 20.221600 21.524600 14.874600 524 64.851700 90.407000 51.136600 38.395300 58.821600 19.912900 525 26.004300 42.682700 29.424800 6.2084900 9.7817900 5.4243600 526 40.500800 42.141100 29.885000 10.596700 11.762600 5.5394000 527 43.262000 54.681200 56.108900 15.962400 19.755900 19.720100 528 49.495000 58.433700 64.207500 20.899700 24.238000 26.818600 529 0.0000000 13.515700 26.219100 0.9485080 1.3662300 3.7619400 530 19.094700 15.812100 100.00000 15.755900 9.8925900 75.843900 531 49.656300 15.308400 100.00000 25.727900 14.754100 75.837300 532 64.714200 14.362700 100.00000 35.811300 19.631800 75.825600 533 45.877800 0.0000000 36.624300 11.138200 5.5858800 7.0680700 534 45.009700 0.0000000 46.142000 11.549000 5.8528900 11.639000 535 45.937400 38.227600 45.579800 13.750000 12.187800 12.018600 536 76.987300 65.493000 50.364400 42.211300 38.825600 16.527900 537 84.941800 83.784500 64.366900 58.697800 62.007900 29.493700 538 100.00000 88.712200 72.403500 84.133700 79.748200 38.498100 539 100.00000 94.523400 83.704400 89.051500 89.031700 53.939100 540 0.0000000 14.315200 71.022600 6.0546900 4.3526500 32.083700 541 0.0000000 15.344700 84.980400 9.3149500 6.3092400 50.074900 542 0.0000000 76.419500 88.748800 19.010400 36.165800 59.174100 543 0.0000000 84.720900 89.685300 21.932200 45.284400 61.692700 544 0.0000000 84.687900 100.00000 25.232700 47.137900 80.140500 545 0.0000000 42.815300 57.114300 5.7233800 9.7917800 19.840700 546 0.0000000 51.015600 68.637100 8.7114800 14.625400 30.714000 547 0.0000000 59.448600 73.449000 11.129800 20.126300 36.578200 548 65.022100 78.142400 100.00000 45.262500 50.860200 79.330300 549 74.349700 78.419900 100.00000 53.913800 55.365000 79.362500 550 75.082200 89.607700 100.00000 58.501300 68.699600 80.823200 551 35.961300 43.832200 49.531900 10.737300 12.539900 14.580000 552 38.516100 90.629900 54.804000 23.670000 51.854600 22.484700 553 20.059300 24.334500 13.643700 2.9281000 3.6223100 1.5481600 554 16.747100 31.126400 18.757400 3.0222600 4.9665400 2.4918500 555 22.416100 35.396600 15.525800 4.1837300 6.5563600 2.1100400 556 64.029500 34.443800 38.214700 24.203600 16.260200 8.2867700 557 75.137800 64.134600 67.480100 42.469100 38.274700 30.452300 558 82.596500 73.170200 77.289100 55.083400 51.052900 42.458400 559 81.665600 100.00000 93.444800 68.025600 85.842400 70.365900 560 41.583500 32.760000 31.559900 10.212600 8.9239100 5.7217300 561 54.931400 38.190100 40.130400 18.221300 14.340300 9.2686000 562 94.346600 45.853900 90.718100 69.250700 42.740700 59.975000 563 56.804200 31.854800 54.310500 20.351000 13.873700 17.334200 564 61.678300 39.051100 54.840800 24.522500 17.820000 17.967500 565 100.00000 33.868200 49.263600 68.856200 38.191000 14.021200 566 100.00000 33.062200 73.972800 72.709200 40.203000 35.837700 567 7.9703800 4.8944300 0.0000000 0.6703560 0.6091920 0.0367997 568 0.0000000 7.2625700 6.0427100 0.2341740 0.5362060 0.5613550 569 7.6782300 38.771700 13.230600 2.6442600 6.7340900 1.9253000 570 0.0000000 51.059300 11.743300 3.6261100 11.738600 2.3461100 571 0.0000000 50.595900 86.505600 12.745300 16.750000 53.521300 572 26.434700 11.555300 68.838400 8.7373800 5.4117100 29.706300 573 34.747500 0.0000000 89.677400 15.717500 8.5512900 57.238800 574 43.357700 0.0000000 100.00000 22.299600 12.054500 75.704000 575 48.882100 31.205600 100.00000 26.165300 17.424900 76.161200 576 83.858800 47.386200 100.00000 57.973200 38.017000 76.810800 577 33.132700 14.251700 17.093300 5.5717400 3.6815700 1.8776200 578 78.077400 20.895300 13.481000 35.481000 19.148200 1.4612900 579 100.00000 21.884400 10.966700 65.812700 34.219700 1.1878300 580 100.00000 33.974900 0.0000000 66.445500 36.839400 0.5424860 581 73.913700 70.790200 0.0000000 37.738500 40.131100 2.8413700 582 78.847300 82.312000 0.0000000 46.383200 54.158600 4.1298700 583 91.691900 84.653300 0.0000000 63.660300 64.958600 4.4319600 584 100.00000 92.391500 0.0000000 79.549200 81.146200 5.5348000 585 39.389200 29.529600 0.0000000 8.1558800 7.1269700 0.4101680 586 47.188500 30.928600 0.0000000 11.689200 9.1630600 0.4491850 587 69.887000 36.286000 27.982300 28.762900 18.935700 4.7478100 588 78.793400 35.709900 33.901000 38.142100 23.427900 6.6275100 589 86.134500 52.804500 48.134800 50.393900 35.735700 14.210300 590 100.00000 85.661900 92.405700 88.097800 78.889700 66.354300 591 100.00000 94.783800 100.00000 94.120200 92.234200 81.613300 592 26.585400 0.0000000 17.510100 3.5444500 1.7715600 1.8249300 593 36.765200 0.0000000 26.465100 6.7861100 3.3949000 3.7141500 594 68.991200 43.950700 27.243700 28.736600 21.309800 4.8585000 595 68.087900 78.725400 83.708400 43.092800 49.914500 51.771300 596 24.225500 37.406100 72.210000 10.423600 10.624600 33.950500 597 22.672900 65.396700 79.624300 16.172900 26.337900 44.752400 598 22.785800 76.771300 100.00000 25.127000 39.759300 79.174200 599 33.754500 83.689000 100.00000 30.020300 48.504800 80.009800 600 93.225000 89.102600 100.00000 81.113700 79.282300 80.750000 601 79.106900 0.0000000 62.973800 40.124000 20.100200 23.889000 602 89.183500 0.0000000 81.224700 56.476000 28.446700 44.573000 603 100.00000 0.0000000 81.275300 73.034400 36.603100 44.642900 604 21.729900 42.993800 0.0000000 4.5796900 9.0218500 0.8923800 605 24.059400 44.538500 10.361900 5.3687900 9.9683900 1.8526500 606 24.490800 85.931900 23.060400 15.365900 42.510800 7.4936200 607 34.618300 100.00000 46.901900 25.376000 64.107400 18.855000 608 28.649500 67.347300 36.415800 11.566700 24.876400 9.5008100 609 40.802000 67.633800 52.060200 17.052400 27.892900 17.833300 610 39.991100 83.929900 72.033200 24.635400 45.486800 37.426300 611 0.0000000 73.291800 27.460100 8.8362000 27.869700 7.0750500 612 0.0000000 82.269000 33.278900 11.867500 37.199700 9.9283600 613 0.0000000 89.592700 45.879200 15.493600 46.591900 16.608800 614 17.387300 100.00000 43.647800 21.204000 62.027400 17.076300 615 36.147600 100.00000 61.189000 27.717500 65.405500 29.089600 616 55.376500 100.00000 74.835600 39.479000 71.397100 43.134900 617 24.447400 35.445800 34.515000 5.4314800 7.2505100 6.8433400 618 22.077000 42.447500 42.205200 6.2944100 9.8152800 10.431600 619 55.880300 44.949100 42.727500 19.817000 17.360800 10.808000 620 60.251600 60.406600 54.546000 26.613600 28.048500 18.966300 621 64.532100 65.217300 54.872100 30.966700 33.150900 19.593800 622 0.0000000 39.096600 47.842600 4.1733100 7.7459400 13.347700 623 0.0000000 67.024700 67.005400 11.507200 24.919900 30.224700 624 41.816300 70.462700 76.442700 22.301200 32.827200 41.123900 625 24.542900 18.495100 19.641900 3.6379500 3.1752900 2.3743300 626 29.161400 16.314100 19.739200 4.6190900 3.4182600 2.3610100 627 28.876400 65.803300 64.563600 14.561000 25.569800 27.739500 628 39.424800 78.968600 100.00000 30.451500 44.295300 79.426600 629 41.334500 89.054100 100.00000 34.665300 56.352200 80.743000 630 41.567800 100.00000 100.00000 39.341400 71.886200 82.488000 631 16.358800 39.960900 51.924000 6.1387200 9.0139900 15.960700 632 12.987900 38.567300 70.333400 8.4698900 9.9679500 31.915400 633 58.080700 73.908800 71.690600 31.096700 39.729600 35.863400 634 64.733700 82.392700 85.993500 42.023100 52.816400 55.599700 635 64.214100 83.060000 100.00000 46.177100 55.848300 79.928800 636 67.119100 100.00000 100.00000 55.315900 79.754100 82.488000 637 14.619000 22.915700 27.817200 2.6002200 3.2803500 4.3363100 638 13.085000 50.765900 34.176100 5.5194200 12.612800 7.4208200 639 25.159800 100.00000 33.205100 21.748800 62.231800 12.561800 640 78.519400 100.00000 31.660000 53.925300 78.072100 12.035100 641 84.779300 100.00000 40.690500 62.030500 82.114900 15.620600 642 7.2334600 22.879800 0.0000000 1.1912300 2.5231600 0.2553930 643 0.0000000 84.222300 22.583000 11.984200 39.116500 7.1609100 644 12.428000 83.658200 70.961800 17.973000 41.921100 36.197700 645 0.0000000 60.258900 54.356300 8.0908800 18.838700 18.818300 646 23.405000 65.031900 56.673100 11.960100 23.688200 20.927800 647 25.376400 72.066500 63.802900 15.166800 30.327200 27.617400 648 79.564100 86.347400 75.377200 55.227400 63.054500 41.664500 649 91.690200 100.00000 77.708200 76.994800 89.925000 46.694100 650 74.758600 0.0000000 11.303300 31.319100 15.439500 0.9873170 651 87.549200 0.0000000 11.339600 46.429700 22.881900 0.9911800 652 100.00000 0.0000000 20.079300 65.430400 32.258500 2.2775000 653 100.00000 0.0000000 37.497500 66.354400 32.786400 7.4254100 654 100.00000 20.495000 51.244000 68.223000 35.412100 14.958600 655 100.00000 90.917600 48.249200 81.273300 80.488500 18.174900 656 100.00000 94.558600 57.952800 83.958900 86.163400 25.489700 657 22.645000 20.529600 15.065500 3.2207900 3.2130300 1.6655400 658 21.597400 53.727600 42.787600 7.8496700 15.177800 11.327200 659 25.764600 81.853600 41.933600 15.416400 38.604100 13.503400 660 31.192000 72.828900 84.580800 21.231600 34.253300 52.396800 661 41.394500 79.393200 86.650200 27.194600 42.743200 56.232600 662 41.787700 89.907600 89.306500 31.755900 55.589000 61.801300 663 28.038300 24.163300 0.0000000 4.2968900 4.2511000 0.2815490 664 34.346700 22.393900 0.0000000 5.9621400 4.8019000 0.2460220 665 67.054200 27.425300 9.6854400 24.947200 14.997200 1.1779700 666 70.680800 86.014900 14.483600 39.487900 54.455300 5.9878500 667 81.068600 87.067900 24.238700 51.157200 61.322200 7.9183200 668 59.750400 55.747800 68.476100 27.567900 26.163000 30.843600 669 71.157700 58.612900 83.173900 40.810600 34.458400 49.113200 670 61.754000 51.311100 74.138700 29.435800 25.050500 36.845600 671 76.282500 55.071500 100.00000 50.420600 37.735300 77.264300 672 0.0000000 100.00000 20.301700 18.223100 60.446400 9.1043900 673 19.563100 100.00000 19.331200 20.063700 61.350400 8.9226900 674 29.727200 50.516800 20.310700 7.7574700 13.552200 3.6012800 675 43.188600 54.147500 41.242800 14.208700 18.502100 10.597800 676 76.599100 56.710800 58.246800 41.023900 33.154400 21.522100 677 84.784000 59.285400 69.915600 53.032300 40.616800 32.612700 678 100.00000 58.898900 74.745600 76.319900 51.948800 38.068900 679 56.525400 62.269700 39.887000 22.880600 27.190200 10.549900 680 74.914800 63.396000 41.430100 38.662000 35.665300 11.362300 681 74.669800 63.457700 100.00000 50.361500 42.407600 77.884300 682 83.922300 65.208700 100.00000 61.256900 48.891000 78.031700 683 53.449100 34.828400 74.062700 21.811200 15.571500 36.001100 684 66.768800 33.659000 100.00000 38.605000 24.120700 76.236200 685 22.951600 0.0000000 45.408700 4.4775900 2.3642700 11.231600 686 23.827000 75.562700 72.868700 17.498300 34.397000 37.376100 687 33.251700 100.00000 79.502400 30.365900 66.992000 49.030500 688 72.873400 100.00000 86.350900 56.381300 79.943400 58.785900 689 33.670800 28.799700 60.077100 9.9633700 8.1723400 21.746100 690 33.961600 48.968300 63.164100 12.642300 15.603800 25.253900 691 33.128800 48.733600 79.129800 15.528200 17.178300 42.932900 692 49.613200 40.477600 56.541900 17.145000 14.642900 19.297400 693 70.891700 45.649000 75.382700 36.644900 26.293800 38.029900 694 83.690100 56.338700 75.119600 52.174600 38.691100 38.338400 695 85.387500 64.851500 83.910200 58.125600 46.730100 50.666800 696 100.00000 66.756600 91.854400 82.409000 60.127300 63.312900 697 50.247000 0.0000000 20.889500 12.547900 6.2146300 2.4349800 698 85.996900 0.0000000 20.376100 44.621800 22.010500 2.3347700 699 91.661800 54.136000 17.164900 56.237200 39.093000 3.2684900 700 100.00000 86.099700 37.143200 78.469900 73.825700 11.904700 701 40.640200 23.653500 12.745000 8.4874400 6.2510800 1.4228900 702 50.738500 45.250900 23.564700 15.542900 15.270600 4.0025100 703 59.609900 71.260800 25.883300 26.225700 34.863400 6.4509400 704 79.696500 86.808600 52.952900 51.757100 61.526700 20.622700 705 100.00000 86.630500 59.030200 81.030600 75.823600 25.183700 706 48.493700 84.114900 0.0000000 22.621800 44.209900 4.3612600 707 47.751300 94.525900 24.983600 26.795600 57.739000 9.2069100 708 0.0000000 26.030200 11.945700 1.0369500 2.9725000 1.3808900 709 0.0000000 59.335100 18.410300 5.2321500 16.694500 3.8344100 710 0.0000000 68.456700 52.406900 9.6591400 24.829800 18.143900 711 0.0000000 88.955500 56.129200 16.456100 46.463000 23.225700 712 0.0000000 89.300400 66.331900 18.178000 47.813300 32.142300 713 0.0000000 92.388400 89.239400 24.672700 54.914300 62.064800 714 27.843600 54.783300 59.181700 11.255600 17.522300 22.151400 715 29.919700 58.768700 68.284500 14.013700 21.087200 30.856300 716 57.084800 83.141800 70.541500 33.021000 48.821400 35.670700 717 64.818300 100.00000 70.139300 45.360200 74.218000 37.783400 718 11.163900 21.853600 18.236900 1.8033200 2.7030300 2.1820600 719 0.0000000 22.266100 37.857000 1.9990000 2.9379300 7.8202100 720 0.0000000 47.964100 75.179200 9.5842400 13.864900 37.902300 721 18.942200 70.648100 100.00000 22.786700 33.732400 78.531400 722 21.109000 88.702600 100.00000 28.810300 53.086700 80.692700 723 25.670900 100.00000 100.00000 34.408400 69.456600 82.488000 724 0.0000000 21.355900 29.592400 1.4197700 2.4824600 4.8230100 725 0.0000000 26.088800 28.388600 1.6119300 3.3111000 4.5658000 726 0.0000000 34.663500 32.163200 2.4560800 5.5717600 5.9839200 727 0.0000000 42.203700 34.980700 3.4028300 8.2647000 7.2835000 728 25.408800 48.122400 66.640800 10.879100 14.434100 28.519700 729 44.839400 47.635900 100.00000 25.908400 22.324300 76.824000 730 65.019800 52.215500 100.00000 39.363400 30.919500 77.083600 731 30.931800 54.111800 49.341700 10.666300 16.802700 15.028200 732 56.228300 69.037200 62.417300 26.909700 33.849400 26.059800 733 62.128300 81.928100 63.709500 34.988200 48.528400 28.644500 734 0.0000000 18.685500 8.4268700 0.6029340 1.6823200 0.8879580 735 55.825700 39.714600 0.0000000 17.408200 14.273100 0.7516380 736 66.234400 44.946400 0.0000000 25.748200 20.142000 0.9839280 737 87.237200 46.652200 0.0000000 48.639800 32.060700 1.0688600 738 100.00000 61.099100 14.828800 70.505100 49.848900 3.4132200 739 100.00000 71.005100 15.729500 72.813200 57.588700 4.4115600 740 100.00000 86.789900 19.911100 77.814500 74.147900 6.9660100 741 53.181800 37.327400 16.216900 15.814100 12.809300 2.2806000 742 55.578400 38.589200 31.934000 18.091800 14.347400 6.0487800 743 100.00000 37.222300 31.697500 67.686100 38.379700 5.9186600 744 100.00000 65.742000 47.745600 73.507300 54.380800 14.937300 745 63.150300 50.323800 33.939100 25.068400 22.046400 7.3084700 746 82.504000 62.042000 33.644200 46.302000 38.552900 7.9995100 747 88.279800 75.403000 76.836500 62.913400 56.700600 42.125600 748 100.00000 77.416800 92.062800 85.306600 69.746600 64.746000 749 19.932500 11.116500 0.0000000 2.1598500 1.7211300 0.0866964 750 19.595800 21.996500 0.0000000 2.5044800 3.0414800 0.2384460 751 53.573900 28.472500 40.313800 16.586900 11.190600 9.0437200 752 53.889100 37.099900 55.462700 19.105900 14.594600 18.351600 753 53.483000 44.941300 84.570400 25.411300 20.672400 50.319000 754 56.551800 55.806100 91.498700 30.946100 28.295200 61.858800 755 27.796300 31.687700 70.607700 10.392000 9.1383000 31.978800 756 30.142100 55.868500 80.029200 16.035700 20.738500 44.562400 757 39.146600 60.921000 80.077600 19.898800 25.408100 44.992100 758 47.993500 62.278200 83.848600 25.053800 28.829200 50.364800 759 76.590200 75.082600 86.549400 51.074100 50.796900 55.589200 760 81.416700 100.00000 85.595000 65.446300 84.391900 57.642500 761 15.741300 18.948300 26.958100 2.5090400 2.6972000 4.0302000 762 37.771700 16.101800 83.150600 15.338800 9.3137300 47.418200 763 41.870700 24.132900 89.832300 19.129600 12.365400 57.772300 764 100.00000 21.808400 90.049000 76.020400 40.041400 58.079700 765 74.622000 31.051900 58.813600 35.835500 21.370300 20.761500 766 100.00000 36.422800 66.021200 71.468600 40.326400 27.388500 767 22.896600 69.315900 0.0000000 9.5354000 25.161100 2.6990300 768 32.399500 81.755100 18.080700 15.723900 38.555900 5.9793900 769 38.591300 100.00000 21.208500 25.032600 63.802800 9.2819500 770 68.285000 100.00000 19.987700 43.154600 72.725000 9.0442400 771 84.434200 100.00000 20.901200 60.445300 81.243600 9.2213700 772 25.728800 38.069500 0.0000000 4.8300300 7.5884500 0.6870710 773 36.570300 47.186600 0.0000000 8.9301200 12.712100 1.0964900 774 35.333700 47.658500 23.164100 9.1007700 13.025100 4.0350300 775 33.854200 55.996800 34.341600 10.529600 17.572400 7.8100100 776 36.859200 55.224900 59.473800 14.017100 19.105700 22.421400 777 41.864500 55.532300 62.882600 16.519300 20.535400 25.396900 778 17.780900 0.0000000 58.806900 5.2500400 2.8731000 20.303200 779 20.373900 0.0000000 72.255600 7.9890600 4.4066300 33.340200 780 49.249200 0.0000000 88.257300 21.436900 11.336000 54.961800 781 73.017700 16.460500 100.00000 43.362100 23.555500 75.852600 782 9.4523700 32.434400 0.0000000 1.9833100 4.7210400 0.4938140 783 14.898900 61.555400 0.0000000 6.5505200 18.599000 2.0274700 784 19.061600 100.00000 0.0000000 19.602400 61.092900 6.7840500 785 50.454300 100.00000 19.605400 30.425000 66.454300 8.9731000 786 60.351900 100.00000 24.558300 36.928700 69.672400 10.019500 787 64.647800 100.00000 44.061400 41.543000 72.047900 17.292500 788 74.710900 100.00000 56.275800 52.186300 77.400500 25.095600 789 32.980000 26.687000 14.337900 6.0254600 5.5504700 1.6924800 790 32.213900 30.555500 15.508000 6.0925300 6.3475900 1.9557900 791 37.568200 42.866600 13.748200 8.9592800 11.153100 2.1631500 792 44.328800 56.780000 19.945700 13.948700 19.606200 3.9277700 793 63.958800 53.925700 18.699100 25.559800 23.885200 3.5126700 794 65.153000 71.543000 19.937600 30.321500 37.075100 5.1666300 795 41.965400 51.370000 12.543400 11.804100 15.906100 2.4566100 796 54.794700 50.614600 10.251600 18.310200 18.772300 2.1625600 797 61.054900 49.902800 0.0000000 22.323900 20.427500 1.2440100 798 64.949900 66.387000 0.0000000 28.476400 32.453700 2.4304600 799 71.692600 77.413200 32.082900 38.358200 45.830400 8.9339300 800 20.266600 28.465700 0.0000000 2.9898000 4.3697000 0.3820970 801 17.100300 75.170400 0.0000000 10.155400 29.975100 3.2936600 802 19.888600 87.173300 0.0000000 14.453900 43.310900 4.7732600 803 44.882600 89.796600 0.0000000 22.909700 50.307500 5.1467600 804 43.867800 100.00000 0.0000000 26.744800 64.610700 6.7840500 805 61.744000 100.00000 0.0000000 37.380500 69.849100 6.7840500 806 48.093600 81.364900 53.546800 24.426300 42.678900 20.326400 807 52.699500 86.902200 84.146300 34.679900 53.677700 53.449500 808 0.0000000 28.428100 100.00000 14.588100 11.146100 76.085100 809 21.158700 58.569800 100.00000 20.455000 24.810700 77.506200 810 52.246900 80.041500 100.00000 36.935000 48.456300 79.554200 811 84.307700 94.938100 100.00000 71.205500 81.135800 81.638100 812 6.3502900 0.0000000 15.842000 0.7382340 0.3857630 1.5661400 813 13.435800 8.3200500 15.562600 1.5003800 1.2344800 1.5878700 814 14.635800 11.479600 30.808300 2.3268500 1.9000100 5.0638200 815 16.449400 27.978700 42.667200 4.1515000 4.9864400 10.163100 816 8.8122400 31.976000 23.972300 2.4519000 4.8904100 3.5777700 817 0.0000000 51.381400 21.617200 3.9532700 12.065100 3.9109500 818 8.3896100 58.775300 25.824800 6.0104900 16.788400 5.3657400 819 0.0000000 100.00000 78.423800 25.135100 64.395700 47.615000 820 18.111500 100.00000 92.735500 30.651300 67.417200 69.137700 821 49.071900 100.00000 92.385900 40.368200 72.194500 68.537800 822 93.430300 27.614400 35.631200 56.732900 30.771000 7.0360300 823 76.848800 25.530500 38.163500 35.544600 19.976500 8.0184600 824 76.479600 30.574600 77.666300 41.253700 24.212100 40.295800 825 86.811200 32.579700 81.495800 54.645100 31.328300 45.446100 826 93.680400 35.943500 80.996000 64.505600 37.015500 44.868700 827 100.00000 38.645400 90.001900 77.251700 44.243600 58.477200 828 100.00000 53.895400 90.961400 79.569800 51.283200 60.834900 829 35.894000 0.0000000 36.620700 7.0898600 3.5919500 7.0666500 830 49.835600 0.0000000 56.820700 15.248000 7.7750900 18.728700 831 58.129700 10.634500 65.852700 21.958700 11.814200 26.679700 832 58.465000 0.0000000 79.753800 24.843400 12.838600 42.580400 833 63.094000 0.0000000 91.480000 31.420300 16.327500 60.218200 834 56.657200 22.607500 84.706600 25.525400 15.169200 49.785500 835 58.376700 24.460900 100.00000 31.482300 18.759800 75.991800 836 74.285900 30.539500 100.00000 45.396100 26.752000 76.142100 837 91.050000 35.445000 100.00000 66.243700 38.184800 76.295700 838 0.0000000 4.8689300 8.8103700 0.2290050 0.4008600 0.7771200 839 11.764700 0.0000000 10.567300 1.0546500 0.5323060 0.9090380 840 23.610900 7.1109500 0.0000000 2.7290700 1.7493200 0.0534377 841 64.937600 0.0000000 12.877800 22.296500 10.998200 1.1683400 842 86.059800 42.522200 26.002000 47.216100 29.911000 4.4648600 843 100.00000 92.501100 65.280500 84.267900 83.966400 31.595400 844 100.00000 95.763000 92.352400 92.021100 92.201000 67.764000 845 100.00000 100.00000 93.529000 94.266500 98.768800 70.512200 846 41.397900 34.644000 46.161100 11.450100 10.084900 12.214100 847 45.426500 34.780400 57.380000 14.588700 11.771700 19.733100 848 58.484900 34.318100 62.813900 22.929700 15.828100 24.297700 849 88.832700 46.460000 65.544500 55.492500 35.733800 27.357300 850 34.459300 32.697100 28.251200 7.4235000 7.5211300 4.7046600 851 37.476200 89.166900 44.946000 21.609800 49.129500 16.034800 852 46.744800 100.00000 52.612700 30.908600 66.883200 22.449500 853 18.965300 74.294500 27.974400 10.919800 29.697300 7.3239500 854 15.719800 78.429600 71.463700 16.759500 36.462000 36.110500 855 0.0000000 51.183600 45.208300 5.4557000 12.837800 12.440100 856 27.984600 90.471400 46.709400 19.460700 49.529300 17.206400 857 66.630800 93.426500 60.380600 42.329400 64.334100 27.306900 858 86.357700 93.157600 75.722000 66.228000 76.010600 43.078300 859 94.471300 100.00000 85.677900 83.118100 93.097500 57.766900 860 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 861 48.272700 62.473100 41.757100 18.249800 25.045200 11.444600 862 61.357900 69.502100 47.396800 28.632600 34.875700 15.074200 863 45.080400 49.298200 26.561300 13.340300 15.798600 4.9492400 864 54.113700 52.006600 33.092800 18.976300 19.792500 7.1054800 865 91.893800 54.693500 42.520700 58.095500 40.393800 11.255600 866 91.055800 75.029700 67.704600 64.821600 57.186900 31.722300 867 80.027300 74.249000 61.010700 49.248100 48.793200 25.346500 868 79.515000 79.333200 66.019900 50.987000 54.044000 30.526900 869 78.692000 88.345500 68.865000 53.650000 64.283000 34.581200 870 0.0000000 17.023200 49.838300 2.8950700 2.8084600 13.997600 871 10.341400 15.147800 78.163200 8.3740500 5.6931600 40.625100 872 59.411600 57.274200 77.276000 29.417100 28.010200 41.069900 873 60.499100 80.009500 79.188500 36.253100 47.612100 45.677400 874 36.223500 46.272700 47.087100 10.874000 13.485900 13.227700 875 47.027500 46.517600 56.898400 16.589800 16.489100 19.850400 876 64.601100 51.180500 57.820300 28.773100 24.439600 20.828200 877 23.617200 31.178300 11.756500 3.9740500 5.4324100 1.4933700 878 27.151800 30.567100 0.0000000 4.4991600 5.5438700 0.4389100 879 27.505200 71.057700 72.559500 17.003300 30.595000 36.553800 880 59.956700 70.837100 72.206100 31.699300 37.662700 36.130100 881 32.671000 38.905600 16.106100 6.9787700 8.9143000 2.3241100 882 48.987900 38.382200 12.566400 13.470900 11.950700 1.8293800 883 65.768700 46.372900 10.909100 25.711800 20.673600 2.0000300 884 72.514000 55.385400 0.0000000 33.038200 28.260200 1.5810700 885 77.377000 64.520100 12.106600 40.064600 36.951700 3.3461300 886 80.286200 67.280200 0.0000000 43.775100 40.594800 2.5104000 887 100.00000 68.297500 83.880500 80.529200 60.087200 50.930000 888 100.00000 76.955000 84.434100 83.003300 68.045300 52.625200 889 30.263300 22.132100 67.287000 9.7867100 7.0439800 28.261600 890 30.391000 27.113500 86.993600 14.583200 10.573300 53.335600 891 38.286600 34.039300 89.204100 18.230100 13.907200 57.017900 892 48.155300 68.067300 87.863100 27.530700 33.907500 56.923300 893 56.737400 66.593500 86.074500 31.716800 34.918900 54.031100 894 75.781000 74.863200 80.657900 48.625800 49.291000 47.058700 895 89.740000 87.547700 81.035900 69.869300 71.627400 49.139700 896 95.125500 89.287400 84.353800 79.276600 78.202400 54.089400 897 60.117300 54.000900 40.021500 23.814600 23.153900 10.018300 898 73.454200 54.457500 48.953600 36.194300 29.541100 14.810800 899 72.943900 55.743900 66.506700 38.412700 31.474100 28.845700 900 74.866600 81.824000 76.262600 48.769600 55.409000 42.159800 901 80.834500 80.870400 87.912700 57.962600 59.274600 58.369900 902 50.637700 55.657800 51.855800 19.244300 21.818600 16.752300 903 66.686400 100.00000 57.604800 44.828000 73.790900 26.124600 904 93.085800 30.207700 15.819400 55.480300 30.599200 1.9915800 905 100.00000 39.661300 10.986300 67.160000 38.774200 1.7030600 906 48.747300 16.883400 6.5598900 11.811700 6.9972200 0.7041330 907 63.999600 14.272200 11.126900 21.818600 11.674400 1.0891600 908 83.550900 11.857400 10.094400 41.499300 21.164200 0.9558700 909 88.145700 0.0000000 31.030900 47.961100 23.693500 5.0458300 910 100.00000 22.021800 32.063100 66.615200 34.697600 5.6233600 911 100.00000 21.880600 59.958400 69.456800 36.301300 21.492000 912 66.784100 0.0000000 55.465000 26.810700 13.455500 17.702600 913 66.529800 57.143600 57.455800 31.330900 28.598900 20.923900 914 66.803500 58.997700 63.006700 32.755100 30.372300 25.752300 915 70.256500 67.956400 74.645500 39.968300 39.698100 38.695300 916 61.578900 62.255200 76.812100 31.876600 32.041100 40.859000 917 66.223600 62.213500 100.00000 42.202400 37.624300 77.783500 918 40.714900 45.707400 73.159900 16.450200 16.332100 35.397600 919 56.426600 51.011100 80.503200 27.082300 23.872200 44.896400 920 60.844500 63.995700 88.490400 34.674100 34.731000 57.556800 921 69.905500 72.631700 90.740100 44.937900 45.912000 62.009000 922 76.121100 84.610100 100.00000 57.771400 63.086300 80.130300 923 5.0474800 11.309300 14.862600 0.8519150 1.1110500 1.5145800 924 0.0000000 6.9597300 15.817000 0.4177410 0.6245340 1.6146800 925 0.0000000 33.663000 50.743300 3.9854000 6.2033400 14.952000 926 7.9714200 33.199000 61.229200 5.9420900 7.1670900 22.857800 927 0.0000000 36.009300 62.850600 5.8725400 7.8650400 24.388400 928 8.5690500 44.628500 73.831500 9.4704700 12.506100 36.126800 929 0.0000000 50.353200 59.019300 7.0078300 13.368200 21.746100 930 0.0000000 69.659300 61.214100 11.177700 26.534100 25.059000 931 43.409500 69.243500 62.603200 20.028300 30.610200 26.245800 932 53.814100 68.547100 75.922000 27.831200 34.157300 40.297900 933 58.204800 74.519100 84.213700 34.243400 41.998500 52.035500 934 58.536500 76.656000 92.442300 37.426100 45.522700 65.307600 935 32.624900 38.510500 49.729900 9.1089000 10.019100 14.477200 936 81.190800 40.052000 61.982600 44.380900 27.987600 23.766100 937 31.718500 15.109000 39.087100 6.3253200 4.2220600 8.2386300 938 77.043300 23.814400 45.769000 36.325100 20.132700 11.704900 939 92.455800 38.784800 49.756800 57.493500 33.930700 14.504600 940 100.00000 57.548200 48.912600 71.941300 48.731700 14.994600 941 100.00000 67.361300 58.314300 75.202900 56.411400 22.422700 942 33.213300 56.310900 15.352800 9.5465900 17.183200 3.1377900 943 45.368900 70.022000 20.106800 17.299200 29.529500 5.0492900 944 46.654900 74.044200 49.728600 21.046300 34.619500 16.945400 945 49.246800 86.315900 71.593800 29.640300 50.357100 37.251200 946 73.314500 94.245500 100.00000 58.553000 74.066700 81.527700 947 28.082100 29.867200 34.175200 5.7689800 6.1077500 6.5463500 948 31.807200 27.927900 33.247800 6.5586200 6.1056200 6.1612800 949 56.057700 36.555900 44.309600 19.151700 14.367100 11.269900 950 62.577600 39.912800 43.711500 24.057600 17.755500 11.085100 951 84.688100 47.551500 51.851900 48.169600 32.397700 16.266100 952 93.872800 50.704800 53.644000 61.579400 40.342200 17.673300 953 100.00000 73.424800 55.455100 76.355700 61.423700 20.803200 954 40.160200 34.133000 21.560100 9.2771900 8.7582000 3.1173600 955 39.518400 43.731100 86.438800 18.916800 17.077500 53.062100 956 0.0000000 33.116800 37.671900 2.6976000 5.3394300 8.0136600 957 12.783000 73.091800 36.924900 10.351400 28.504000 10.263500 958 14.402400 80.222300 47.280600 13.539700 36.201500 16.162300 959 23.553200 100.00000 72.357100 26.389000 64.908900 40.239400 960 40.408800 100.00000 71.119500 31.039500 67.179800 38.853700 961 35.888100 79.261800 55.744700 18.896300 38.049000 21.668100 962 43.444800 83.039900 83.859700 28.501200 46.735200 52.518500 963 15.790100 58.050500 42.435200 7.7076000 17.314400 11.442500 964 16.243600 58.494300 49.551700 8.5643400 18.034900 15.458300 965 91.764900 62.764000 51.162400 60.345100 46.032300 16.817400 966 94.089400 80.280600 67.183500 70.772700 64.664700 31.795400 967 0.0000000 49.157800 28.530200 3.9243700 11.109200 5.4851700 968 0.0000000 66.974000 32.142200 7.4880700 22.589800 7.8943300 969 77.413600 66.474200 36.080600 41.585300 39.066000 9.2900600 970 100.00000 77.515200 39.871900 75.869400 64.437500 12.013500 971 35.280200 32.787300 0.0000000 6.9416900 7.2456700 0.5046930 972 58.458800 55.627900 0.0000000 21.388900 22.645200 1.5972400 973 75.144700 69.142200 12.148000 38.776700 39.453600 3.7643300 974 78.836900 73.801800 23.270600 44.320300 45.735500 6.0852000 975 87.514600 86.498800 25.633700 59.118200 64.653500 8.1802700 976 87.097900 66.502100 13.500100 52.279000 44.272400 3.6860500 977 100.00000 79.693400 13.587000 75.243700 65.954800 5.0641900 978 100.00000 93.477300 19.082700 80.366200 82.852100 7.7974100 979 20.915200 3.8688500 16.507700 2.4712400 1.4613200 1.6952700 980 74.973200 0.0000000 31.514500 32.297800 15.981100 5.2028900 981 80.195800 10.820800 32.210200 38.276800 19.565200 5.5187300 982 85.672900 23.733400 73.593300 50.758400 27.560800 35.152100 983 90.208300 73.925700 100.00000 71.790100 60.394000 78.864600 984 14.980500 7.8376100 82.025900 9.5923100 5.8169700 45.743200 985 19.961700 0.0000000 87.199000 11.504500 6.4206300 53.305300 986 19.170400 39.912500 87.665400 13.504300 13.176100 54.791400 987 30.265500 52.617500 88.175500 17.652700 20.116800 56.237200 988 35.841700 66.115900 89.855100 22.446100 30.116100 59.935000 989 60.141600 65.376100 100.00000 38.124100 37.607000 78.046100 990 80.352600 8.8364800 17.018900 37.750700 19.122800 1.8124400 991 79.421500 0.0000000 74.521500 42.650200 21.515500 35.975200 992 54.700500 0.0000000 68.200300 19.918100 10.219900 28.952800 993 71.975200 0.0000000 88.841900 38.395900 19.701900 55.891700 994 74.673900 37.777500 92.784900 44.036200 27.697700 63.114600 995 82.424200 46.889300 91.797000 53.459900 35.387000 61.833700 996 86.284300 78.967900 90.807000 64.954100 61.053100 62.816200 997 23.241900 23.995400 31.498500 4.1804900 4.2411500 5.4757100 998 46.282700 27.628400 50.585100 13.581400 9.6285300 14.678900 999 70.085500 45.605600 51.722500 31.946000 23.652500 16.080500 1000 78.052200 49.588800 52.533400 40.678000 29.554200 16.838100 1001 86.252300 75.155300 56.144900 56.444600 53.019100 21.504700 1002 88.052900 81.782700 58.034600 61.127700 61.196000 23.744700 1003 66.315500 64.934000 46.555200 31.413100 33.110200 14.176400 1004 84.246000 67.718000 45.490300 50.682200 44.457800 13.826700 1005 69.611600 49.141400 39.976500 30.819200 24.408600 9.7085200 1006 79.626500 56.071900 46.992300 42.873700 33.625300 13.750400 1007 84.737500 57.781200 63.495200 51.539900 38.965100 26.110800 1008 43.810100 38.858400 37.063800 12.096500 11.500700 7.9645200 1009 44.545600 43.398900 35.561600 12.829600 13.319100 7.5590900 1010 43.737200 88.278800 35.344400 22.993900 48.785600 11.493000 1011 51.636500 88.830600 53.823800 28.994700 52.478500 21.517900 1012 73.691200 92.948600 55.544400 47.996500 66.507000 23.382100 1013 86.774700 94.184900 55.001100 63.598300 75.653400 23.174000 1014 88.364500 100.00000 65.563500 69.882000 86.229400 33.100600 1015 100.00000 100.00000 66.938600 87.794600 95.071000 34.454300 1016 16.807700 2.6040900 6.1019600 1.6136900 0.9499650 0.5312060 1017 37.167900 0.0000000 10.619800 6.4246900 3.1772700 0.9146210 1018 39.958400 17.839900 20.499900 8.1649300 5.3318700 2.5266100 1019 72.874000 43.384700 36.316100 32.877200 23.192400 7.8550100 1020 89.350500 44.933000 39.122800 52.746000 33.549200 9.1068600 1021 93.083600 46.988400 57.528700 60.382500 38.248700 20.366800 1022 93.912200 70.567200 84.168500 71.462100 57.265000 51.565800 1023 26.416400 50.988700 36.826600 7.8919000 13.894600 8.4567500 1024 26.828700 58.647800 42.523700 9.7629300 18.654000 11.529500 1025 28.752700 59.196000 50.428800 11.136200 19.697800 16.065500 1026 30.833900 64.727900 50.588200 12.850800 23.869100 16.606600 1027 29.849200 85.821200 77.750000 23.230100 46.795000 44.551500 1028 15.048300 44.920200 55.066500 6.9501700 11.120200 18.390400 1029 11.715300 57.447100 55.848100 8.6351900 17.564500 19.710200 1030 56.942900 63.035300 60.268100 25.661200 29.213100 23.662500 1031 63.806900 68.375700 70.861900 33.731700 36.859100 34.396700 1032 66.054900 72.983400 80.023800 38.759300 42.916300 46.004200 1033 22.328300 28.808700 21.899400 3.8455900 4.8960600 3.0312000 1034 19.772800 48.858800 30.160300 5.8757600 11.952500 5.9561500 1035 28.816900 73.920300 33.435300 13.095500 30.492800 9.0193700 1036 61.623200 76.555100 51.093600 31.157300 41.681400 18.094400 1037 20.290900 16.779700 0.0000000 2.3928100 2.3390200 0.1530540 1038 17.700100 14.125200 11.235900 2.0821400 1.9400600 1.0989300 1039 15.397700 35.547000 23.398700 3.3839100 6.2220400 3.5617400 1040 35.537200 94.142700 38.553900 22.358600 55.157000 13.682200 1041 52.179500 94.146500 38.380100 29.846900 58.848700 13.607300 1042 45.933500 84.536000 60.682900 25.413700 46.313500 26.285700 1043 50.399200 100.00000 65.513200 34.716100 68.908500 33.051900 1044 65.390900 100.00000 80.872800 48.180900 75.792500 50.875500 1045 54.487500 71.814800 58.754000 25.950200 35.383700 23.203300 1046 85.058700 72.550800 69.415000 56.339200 51.058100 33.240900 1047 0.0000000 6.2528100 22.332900 0.6136110 0.6970360 2.7787700 1048 10.361300 8.8352700 20.702700 1.3680300 1.2124700 2.4642700 1049 20.440900 6.1478200 24.983900 2.7363600 1.7452300 3.3849700 1050 18.680500 53.319700 49.014700 7.9299500 15.071200 14.775900 1051 36.648900 59.887500 100.00000 24.652700 27.615600 77.603400 1052 28.884600 12.907400 45.122300 6.0300000 3.9228800 11.180400 1053 82.920100 7.0918300 60.099300 44.297900 22.524500 21.427300 1054 100.00000 17.496000 68.971500 70.791000 36.525900 29.918700 1055 53.381100 0.0000000 34.644900 15.043300 7.4983700 6.3002300 1056 100.00000 38.894600 42.487800 68.650400 39.400600 10.422700 1057 100.00000 49.830500 63.691800 72.681800 45.546300 25.786300 1058 100.00000 59.420100 65.638300 74.652100 51.279000 28.253600 1059 100.00000 82.506700 74.532200 82.385300 72.585900 40.142400 1060 100.00000 94.642400 74.536700 86.933500 87.961700 41.880200 1061 17.022700 77.074800 14.013900 10.933500 31.974600 4.8154700 1062 28.814200 96.160700 12.332500 20.043300 56.385700 7.2352700 1063 75.961200 100.00000 17.123400 50.519700 76.345400 8.5461600 1064 59.675500 81.163200 20.268500 28.932700 44.511400 6.3004400 1065 61.456100 85.834900 86.580700 40.801800 55.638900 56.942900 1066 15.635200 23.774600 23.942400 2.5915900 3.3939100 3.3642800 1067 13.704600 31.795200 67.574500 7.4187300 7.6528500 28.786300 1068 10.285400 45.683200 82.229500 11.685100 14.140100 46.989700 1069 17.775000 44.907700 100.00000 17.770500 17.269800 76.686000 1070 88.625000 0.0000000 58.778200 51.347900 25.577200 20.279900 1071 90.404600 0.0000000 92.367200 61.262500 31.046800 61.721800 1072 90.247600 36.956400 0.0000000 51.656100 30.336000 0.6454600 1073 89.860100 73.392800 11.340500 57.745100 51.995800 4.0960100 1074 32.766900 23.236100 24.395900 6.0939800 5.0375000 3.4593800 1075 31.221900 64.483900 68.383100 15.564500 25.258900 31.407600 1076 35.728300 74.045400 67.332600 19.132500 33.880200 31.240200 1077 58.354100 59.263600 24.697300 22.573600 25.213800 5.1221400 1078 71.503200 58.612600 27.260600 33.353000 30.171300 5.7319200 1079 73.799700 83.715600 28.097800 42.222300 53.528300 8.4685200 1080 88.249500 87.071100 38.231300 61.075800 66.275400 12.495000 1081 78.445600 19.425800 0.0000000 35.600900 18.999500 0.1932300 1082 83.740200 34.563700 16.951700 43.118700 25.521900 2.2974100 1083 92.290300 63.238900 77.060200 65.591400 49.254300 41.249700 1084 17.100700 52.111400 0.0000000 5.1150100 12.932300 1.3733400 1085 15.268200 53.273800 17.819900 5.4024200 13.642600 3.3210300 1086 14.572800 71.102300 85.472800 17.824600 31.273500 53.547200 1087 20.487200 86.267800 89.087700 24.327600 48.025900 60.934200 1088 23.664600 94.326100 40.309700 19.473000 53.967100 14.496000 1089 0.0000000 41.895000 13.475400 2.4367600 7.6127800 2.0856800 1090 45.964100 44.004500 8.8210500 12.508600 13.291300 1.6805600 1091 46.648800 49.605900 0.0000000 13.464100 15.937100 1.2272900 1092 59.476900 69.379500 0.0000000 25.011000 32.828700 2.7050200 1093 84.772900 100.00000 0.0000000 60.436400 81.204700 6.7840500 1094 50.977600 70.957000 0.0000000 20.017300 31.527500 2.8578000 1095 57.808300 91.034800 0.0000000 30.738000 55.549200 5.3295500 1096 83.388100 91.695200 0.0000000 55.145800 68.323000 5.4287900 1097 88.186700 93.747400 68.913900 67.520300 77.236300 35.439900 1098 60.280700 69.536300 59.820200 29.423300 35.414400 23.859800 1099 65.383100 70.315700 62.448700 33.992900 38.266200 26.210000 1100 75.489500 72.342900 69.878300 45.279500 45.456800 33.714700 1101 71.131500 76.077000 63.183100 40.783400 46.153300 27.472300 1102 70.699400 86.699400 68.819000 44.816300 58.187900 34.302800 1103 72.357200 100.00000 93.456500 57.956900 80.883600 70.386300 1104 37.046800 0.0000000 49.337100 8.6464800 4.4500500 13.527500 1105 60.055300 0.0000000 61.512000 22.380300 11.342500 22.586800 1106 62.121900 25.820500 60.962000 24.664000 14.871000 22.427600 1107 64.700400 40.615900 83.124700 32.441700 22.627400 48.026200 1108 65.346500 80.854500 90.869700 43.413700 52.161800 63.146800 1109 23.417100 30.009900 32.444900 4.6521800 5.5788100 5.9374100 1110 23.056400 28.926200 36.465300 4.7734100 5.4381600 7.3983000 1111 42.796100 26.824100 73.073000 15.514900 10.714700 34.617000 1112 54.004700 25.390900 76.257400 21.935900 13.680000 38.392900 1113 69.693300 61.500400 91.726900 42.406900 37.084600 62.657200 1114 25.463200 21.767600 42.188100 5.2993800 4.5204300 9.7896300 1115 29.861600 28.899700 45.310600 7.0566300 6.6164400 11.571100 1116 30.148400 46.756900 56.783900 10.270100 13.468200 19.774600 1117 38.749600 47.635600 66.336000 14.634900 16.083500 28.191600 1118 38.881800 60.327500 71.632700 17.816900 23.891100 34.572200 1119 39.478500 71.992000 85.189000 23.904300 34.936100 53.212000 1120 0.0000000 18.415000 20.904600 0.9025950 1.8223300 2.6151700 1121 0.0000000 26.199200 20.645600 1.2857700 3.1437000 2.7135300 1122 10.846600 64.446700 39.473200 8.2315700 21.328400 10.541900 1123 0.0000000 78.794300 54.567900 12.776600 34.605200 20.745900 1124 12.295400 77.887500 92.487100 21.499600 38.738400 65.524100 1125 14.661300 36.180300 58.625300 6.4389500 8.1386700 20.773900 1126 70.909400 46.011700 69.122400 35.435100 25.734400 30.950500 1127 74.003600 61.956200 79.559200 43.371600 37.572800 44.380700 1128 37.858100 18.551100 25.113100 7.5835400 5.1419700 3.5500800 1129 48.793700 22.692600 23.521600 12.529800 8.1223100 3.2458100 1130 57.655100 22.126600 23.324600 17.806900 10.638600 3.1907300 1131 60.191200 44.875500 24.706500 21.585700 18.112000 4.2518500 1132 78.642700 62.204900 76.955700 47.762300 39.837500 41.034800 1133 82.108700 71.074900 85.979700 56.101200 50.115800 54.308200 1134 90.988300 77.841000 94.297100 72.122300 63.675700 68.670300 1135 34.349800 18.682400 34.090000 6.8874800 4.8535200 6.2771200 1136 42.462400 22.689500 41.104500 10.605200 7.2593400 9.2827100 1137 52.995000 80.647500 84.339300 32.773800 46.585100 52.919000 1138 59.515900 93.603500 100.00000 46.546800 67.386200 81.426500 1139 16.136100 24.758200 45.157500 4.1457500 4.4302000 11.388800 1140 16.188700 26.589500 75.899000 9.0265400 7.5241200 37.978500 1141 22.536300 37.167500 100.00000 17.686200 14.734800 76.357200 1142 20.726400 64.781800 100.00000 21.664800 29.114000 77.995200 1143 37.821100 73.110000 46.792700 16.721900 31.724200 15.083500 1144 38.253800 77.410300 63.378400 20.304400 37.203000 27.799900 1145 62.063000 87.342000 69.028400 37.758100 55.388600 34.612000 1146 67.833400 88.846800 79.156900 45.192600 60.831800 46.798800 1147 73.775500 94.664400 89.366400 55.784500 72.940000 62.625200 1148 31.314900 36.114200 29.722200 6.8595200 8.1085900 5.2513900 1149 35.100500 50.747200 37.222900 10.263300 14.957800 8.6042400 1150 36.233800 60.124800 43.267400 12.781800 20.975700 12.014500 1151 26.346600 14.596400 9.1624900 3.6290100 2.7421800 0.8971280 1152 28.148100 11.251000 25.248200 4.4265100 2.8954200 3.4920100 1153 34.061400 14.187700 63.638300 9.9372400 6.1473300 24.616600 1154 78.190100 22.569900 82.802200 43.860200 24.155100 47.027900 1155 85.343300 58.804200 85.381600 57.203600 42.683300 52.357400 1156 2.5000000 0.0000000 0.0000000 0.1796070 0.0884612 0.0000000 1157 12.577300 21.538100 0.0000000 1.5753600 2.5189200 0.2298810 1158 29.207400 63.457500 0.0000000 9.5712600 21.245800 2.1803300 1159 57.996400 64.352900 19.168100 23.175300 28.541200 4.3646100 1160 44.028300 41.243400 16.462300 11.448600 11.843800 2.4744700 1161 82.917200 47.401300 33.196200 44.261800 30.280100 6.8822100 1162 35.644600 50.157900 14.184200 9.2805400 14.131900 2.5918500 1163 48.065400 62.690900 34.102500 17.607400 24.816100 8.2181500 1164 57.926300 69.375000 53.147100 26.807000 33.937000 18.739500 1165 77.615300 70.014500 69.915400 46.956900 44.534200 33.523800 1166 35.072500 19.909700 53.694300 9.0246500 6.2029300 16.620300 1167 42.089100 16.635000 53.508200 11.485500 7.0327900 16.438900 1168 44.161500 51.471300 56.852600 15.940200 18.238300 20.088200 1169 52.839300 61.792200 72.018600 24.895800 28.243400 35.118800 1170 0.0000000 66.217000 15.790500 6.6196900 21.596900 3.9737400 1171 0.0000000 76.122800 16.583100 9.2199400 30.328700 5.0756900 1172 0.0000000 91.149000 18.254500 14.383500 47.651000 7.2958500 1173 0.0000000 91.750300 36.189700 15.508700 48.961600 12.331800 1174 76.019000 100.00000 45.794800 52.318700 77.368500 18.229000 1175 88.658600 100.00000 51.896500 68.285300 85.285300 21.964500 1176 60.460400 32.882500 16.969200 20.265200 13.855100 2.2459000 1177 68.411000 36.263300 17.334900 27.005700 18.031200 2.4172200 1178 71.864900 66.740000 21.190700 35.166600 36.022200 4.9562000 1179 77.444600 90.033000 23.298300 48.117600 63.026700 8.1252300 1180 78.724700 88.890100 38.970700 50.016300 62.777500 13.071500 1181 25.079300 50.274800 59.591600 9.9688800 14.799300 22.214400 1182 22.601200 87.663100 63.140900 19.419000 46.614800 28.882600 1183 22.148200 90.599000 73.789000 22.432600 51.463600 40.372900 1184 25.297100 68.329300 76.011300 16.556100 28.451600 40.387300 1185 68.966600 85.723100 84.317600 46.348400 58.207900 53.538500 1186 76.712600 91.828000 90.807400 58.106200 70.769900 64.543200 1187 20.163900 19.330600 48.259800 4.7827300 3.9908000 13.060900 1188 45.745100 16.653600 48.860700 12.578700 7.5299600 13.385100 1189 73.073400 22.726600 69.278600 35.500900 19.824700 30.331600 1190 85.057700 38.050500 72.274400 50.781700 30.687500 34.047900 1191 84.862700 42.273400 79.821800 52.660100 33.061400 43.531000 1192 62.909600 14.040200 24.140000 21.340000 11.448100 3.2541800 1193 81.825400 28.213000 22.874300 40.495200 22.833600 3.2243800 1194 85.260800 60.148800 19.916500 48.692600 38.565500 4.1658600 1195 87.419300 79.280400 21.518800 56.405300 56.322600 6.3209000 1196 87.579600 82.854700 50.543500 59.878000 61.528700 18.489600 1197 100.00000 82.207300 64.945600 80.443900 71.198300 29.839800 1198 47.456700 30.701100 45.014900 13.783300 10.300700 11.459600 1199 51.584300 37.044200 66.745800 19.493700 14.908700 28.126700 1200 57.020100 44.332400 78.650300 26.105500 20.676700 42.079800 1201 69.179400 54.552800 94.733700 41.570600 32.979600 67.380200 1202 29.968800 0.0000000 54.842300 7.1411200 3.7612100 17.243500 1203 34.674800 0.0000000 78.235300 12.705300 6.8320700 40.586700 1204 63.168600 10.287500 78.216000 28.157900 15.041300 40.640800 1205 71.639400 11.599000 83.111400 36.755200 19.463800 47.309900 1206 72.848900 45.572300 83.193300 40.376000 28.248600 48.350200 1207 72.282200 44.677500 100.00000 44.797800 30.497200 76.674900 1208 83.540200 78.964600 100.00000 64.442300 61.033100 79.426100 1209 51.435600 39.669200 51.061800 17.368000 14.446200 15.377600 1210 52.132200 45.821300 52.003900 18.607900 17.167200 16.279800 1211 53.352800 56.332200 59.225100 21.918200 23.558500 22.290200 1212 66.526800 82.293500 60.074900 38.080400 50.353700 25.481100 1213 80.263600 83.699700 87.003900 57.978400 61.964200 57.310400 1214 82.454400 88.570300 89.280800 62.957600 69.491300 61.566800 1215 22.244400 23.195000 9.5287300 3.1615800 3.5531400 1.0690000 1216 25.702700 22.500400 12.295800 3.8690900 3.8019700 1.3464600 1217 39.068600 58.426200 0.0000000 11.659700 19.328700 1.7918200 1218 59.275500 75.331300 11.831000 26.646500 38.244500 4.3568600 1219 73.953000 87.849900 0.0000000 43.096900 58.135100 4.8678000 1220 88.959000 89.602400 0.0000000 61.601200 69.149200 5.1184200 1221 12.607900 0.0000000 0.4257060 0.9814150 0.4838710 0.0352152 1222 5.0018000 0.0000000 5.3060100 0.4401510 0.2230790 0.4446980 1223 5.4974100 9.4360400 27.915500 1.3206100 1.2511200 4.1791300 1224 0.0000000 36.437400 79.724700 9.2804700 9.9243900 43.168400 1225 23.642400 58.918400 83.081500 15.859200 22.335800 49.003300 1226 26.305200 64.687400 84.738100 18.046200 26.900900 51.865100 1227 41.902300 54.138100 83.408300 20.574600 22.178400 49.144000 1228 45.563300 55.856100 91.233700 24.686100 25.231300 61.417300 1229 49.882900 61.342200 100.00000 30.777800 31.476300 77.714700 1230 44.134300 8.5534500 29.731000 10.059700 5.5081300 4.7031700 1231 55.409800 9.9999300 46.089100 17.453400 9.3395500 11.685400 1232 73.278400 10.890600 45.019500 31.843200 16.480600 11.104000 1233 88.830400 16.050900 70.744100 54.046900 28.152600 31.799600 1234 92.087600 29.691100 72.315100 59.687300 33.014000 33.822300 1235 71.474300 14.567400 29.697500 29.038600 15.309100 4.7528500 1236 89.897900 19.958500 47.153600 52.193900 27.411800 12.418700 1237 88.991900 64.041300 57.587100 57.530500 45.507800 21.555500 1238 90.266000 84.796700 88.205200 71.520700 69.750500 59.330700 1239 6.0943900 26.448600 15.864500 1.5932300 3.3276200 1.9017700 1240 0.0000000 26.937000 56.907400 4.2765300 4.9808500 19.139500 1241 0.0000000 25.993700 86.447900 10.204900 8.2045200 52.471500 1242 0.0000000 45.010100 88.099800 12.411000 14.370900 55.700400 1243 7.3913300 60.400700 87.054800 15.147000 22.907700 55.020200 1244 0.0000000 65.576000 90.411000 16.681900 26.932700 60.799000 1245 0.0000000 77.690500 100.00000 22.969800 39.486700 79.278400 1246 33.528900 93.863400 100.00000 33.776400 61.406200 81.467300 1247 47.757600 94.547600 100.00000 39.796400 65.192700 81.575700 1248 33.036000 15.745400 0.0000000 5.2768700 3.6531000 0.1390220 1249 69.242200 28.838700 0.0000000 26.829900 16.184900 0.3917630 1250 75.193700 40.894000 0.0000000 33.693000 22.663400 0.8003840 1251 85.126300 45.160800 9.5837100 45.835800 30.126400 1.8068400 1252 90.472000 57.290100 0.0000000 54.770400 39.948800 1.7109700 1253 42.898900 25.728900 7.5938000 9.4546600 7.0600400 0.9520440 1254 47.978400 25.439100 19.091700 12.097000 8.3330900 2.4055100 1255 54.096900 64.027100 34.362700 21.306700 27.471800 8.4232700 1256 66.806900 66.107800 36.341000 31.215700 33.714400 9.3603500 1257 67.075100 90.340200 37.120800 38.906700 58.893500 12.496300 1258 76.928100 95.120800 41.220200 50.713000 70.322400 15.050000 1259 5.5067800 13.659400 7.6774500 0.8092040 1.2671900 0.7565400 1260 6.2198000 8.2735600 0.0000000 0.6110190 0.7722500 0.0621594 1261 0.0000000 13.053200 7.5565900 0.3933300 1.0106100 0.7397350 1262 0.0000000 32.589400 10.382700 1.4684800 4.5161600 1.3891300 1263 41.658000 77.114000 19.563700 17.585900 35.297000 5.6899900 1264 53.489100 100.00000 34.310100 32.893200 67.726400 12.960500 1265 32.741400 44.644300 29.744200 8.2009100 11.454600 5.6120700 1266 39.951000 47.768900 38.737700 11.682600 14.412400 9.0811100 1267 41.640300 52.301800 49.381700 14.045000 17.609500 14.939900 1268 57.176400 75.055400 54.936900 28.042500 38.935800 20.594100 1269 62.869500 87.423200 61.926300 37.176100 55.090900 27.759000 1270 73.658000 100.00000 67.675200 52.929100 77.909300 35.198100 1271 52.076900 70.018500 45.853700 22.463600 32.200600 14.243900 1272 67.714100 74.738400 55.410700 36.131400 42.665400 20.909200 1273 81.534000 86.416100 63.051000 55.205900 62.930400 28.628200 1274 20.777400 4.8517500 12.072400 2.3604100 1.4543800 1.1096400 1275 27.279900 0.0000000 27.544200 4.0958000 2.0739600 4.0045700 1276 33.519100 8.6263800 30.332700 6.0942600 3.5619600 4.8887600 1277 44.346900 11.285300 40.928600 10.992600 6.2103200 9.0362200 1278 49.772900 13.672300 56.228700 15.431000 8.7194700 18.389500 1279 50.864200 15.775300 65.484400 17.528100 10.061600 26.379500 1280 87.975500 19.982600 83.085200 55.824700 29.697900 47.383500 1281 95.089100 23.389500 82.525700 66.130800 35.241800 46.652100 1282 62.877700 43.181300 69.175200 28.186800 21.137800 30.870600 1283 63.440700 82.142900 75.855300 38.414700 50.604200 41.697700 1284 65.138500 89.982800 85.247100 44.867400 62.040900 55.511300 1285 65.035800 95.165100 85.105800 46.836200 69.047900 56.097600 1286 53.364400 78.466800 58.867800 27.172600 41.452400 24.016900 1287 55.375800 87.087900 62.301500 31.824300 52.106000 28.045200 1288 55.290100 91.017600 70.754800 34.758900 57.958200 36.995300 1289 10.626800 50.762100 52.410300 6.9678000 13.457500 16.821200 1290 6.9440200 49.853500 62.505400 7.9699200 13.668400 24.707000 1291 41.464500 55.347000 68.995900 17.393300 20.956700 31.359500 1292 52.761100 68.431000 70.314700 26.007300 33.085200 33.804800 1293 65.707500 84.250400 71.523300 40.053100 53.389600 36.896100 1294 86.028700 70.387300 56.663500 54.938500 48.567300 21.409900 1295 86.852800 87.888400 59.679200 61.888900 67.729200 25.895300 1296 18.510300 23.680900 5.3792700 2.5055300 3.2993000 0.7222980 1297 27.950900 32.654200 8.2639100 4.9748100 6.2554200 1.1934100 1298 32.862100 32.948500 7.9242700 6.3168400 6.9853600 1.1733800 1299 39.711100 48.336200 19.935500 10.644400 14.050000 3.4077000 1300 38.886200 55.318700 23.277200 11.553200 17.686100 4.5158200 1301 58.738800 74.896600 41.212000 27.588500 38.465700 12.346700 1302 70.185200 76.364500 45.419000 37.674200 44.682000 14.662100 1303 6.9961000 18.984100 5.0647400 1.0688100 1.9437600 0.6108760 1304 0.0000000 57.174100 87.469500 14.112700 20.622600 55.428900 1305 7.5757100 82.393700 90.929100 22.055100 43.093500 63.437200 1306 13.628500 75.559700 63.062000 14.141500 32.598700 27.305300 1307 28.950500 84.864200 83.283200 24.008700 46.312500 51.925100 1308 91.588700 85.108700 93.056000 74.960000 71.872500 67.398900 1309 100.00000 92.844700 94.353200 91.430600 88.448800 70.782500 1310 60.431500 53.352500 62.187900 26.565800 24.404900 24.632400 1311 61.754300 63.033900 67.224200 30.231500 31.554400 30.102900 1312 55.699000 54.659000 62.507500 23.590800 23.577000 25.000900 1313 63.077200 77.322000 64.808400 34.464200 44.120000 29.125300 1314 76.453700 78.838400 74.242800 49.048400 52.772200 39.351100 1315 79.093800 87.370800 83.921800 57.107200 65.212000 53.187200 1316 88.549000 93.168300 87.943400 72.222000 79.216500 60.121800 1317 28.053200 42.640800 45.221600 7.8594300 10.673600 12.005800 1318 34.729000 48.146300 53.073100 11.317800 14.498600 17.130500 1319 37.037900 61.757300 55.715200 14.789300 23.029900 19.932100 1320 19.447500 34.571700 27.653200 4.0551300 6.3166400 4.5965900 1321 76.378400 33.949600 25.711000 34.892900 21.342400 4.0609000 1322 78.128300 44.048100 72.050400 43.153900 28.858400 34.049500 1323 88.436500 50.839800 87.024100 60.376000 40.327600 54.332300 1324 25.018800 16.276800 48.075700 5.5487800 4.0214900 12.905600 1325 24.593000 31.335300 92.472600 15.106900 11.811800 62.363300 1326 27.860800 40.631800 81.460200 13.645300 13.341600 45.688000 1327 33.118400 60.893900 89.349100 20.301000 25.784100 58.682900 1328 45.190800 72.103500 95.202500 29.316600 37.919600 69.666000 1329 12.977900 21.493900 31.484100 2.5469800 3.0649300 5.4219400 1330 5.0081300 20.503300 31.902900 1.8725200 2.6004600 5.5427800 1331 0.0000000 59.172700 42.981100 6.6322300 17.406200 11.798000 1332 35.440700 79.945300 77.251200 22.804900 40.894800 43.167500 1333 67.746600 93.483400 77.370500 46.524100 66.720300 45.183500 1334 24.286700 36.649300 23.049900 4.9068100 7.2669500 3.5224500 1335 26.006500 41.009900 34.963600 6.3536600 9.3261000 7.2253500 1336 36.671700 53.493100 46.590600 12.050200 17.163200 13.350900 1337 40.905600 62.195200 51.333900 15.787900 23.741700 16.884000 1338 39.588500 68.226700 67.152200 18.976600 29.432100 30.481900 1339 47.917100 76.701600 67.798500 25.088300 39.013500 32.002400 1340 51.067300 79.753600 78.390400 29.903000 44.236900 44.603300 1341 84.369700 81.934600 78.547700 60.193200 61.181200 45.074500 1342 24.553900 22.516200 58.265900 6.9956300 5.6097500 20.115000 1343 22.213200 22.627500 70.733900 8.6613000 6.6129100 31.895800 1344 20.855100 44.706400 83.318100 13.165900 14.529400 48.487500 1345 36.034100 51.414600 91.018800 20.034000 20.804900 60.778100 1346 5.9240100 14.115400 24.106800 1.2999400 1.5843400 3.2476100 1347 44.300300 8.8893500 57.971300 12.832900 7.1066000 19.698100 1348 72.369900 14.145500 59.974400 32.877000 17.396200 21.388200 1349 46.750600 27.732100 35.378700 12.428000 8.9705900 6.9416500 1350 61.958800 34.315400 45.625400 23.227600 15.798800 11.904500 1351 68.500700 44.346000 62.056300 31.781600 23.221700 24.021100 1352 71.093700 54.786300 76.243100 38.398600 31.139500 39.608500 1353 90.293500 62.739500 83.055100 64.056500 48.304300 49.260200 1354 92.814400 65.573200 93.202400 71.199900 53.849300 65.518700 1355 92.542300 65.083400 100.00000 72.939300 54.563400 78.020900 1356 22.253000 18.062900 27.745700 3.5108400 3.0887700 4.2323100 1357 21.884100 26.480600 25.642600 3.7680300 4.4317800 3.8354300 1358 44.158200 62.932800 26.446300 15.344900 23.816700 5.8466600 1359 58.504400 84.918000 29.092100 29.751100 48.586500 8.9136700 1360 87.147300 84.018500 71.904100 63.042000 64.488500 37.292400 1361 81.234200 44.996100 38.709100 42.309000 28.429400 8.9279000 1362 91.048300 55.560900 71.289000 61.070600 42.612100 33.849600 1363 92.417300 68.514700 75.468600 66.634600 53.238300 39.739900 1364 94.852800 83.567900 85.206800 77.029100 71.179400 54.567600 1365 64.096000 68.349300 83.224100 36.755700 38.550500 49.988400 1366 70.151300 72.355000 82.925300 42.932400 44.539900 49.951300 1367 13.853200 17.028800 35.443200 2.7042200 2.6126100 6.7591500 1368 21.714900 42.871900 58.101400 8.1045800 10.995100 20.621300 1369 57.337200 49.168600 65.392000 24.281800 21.449800 27.354400 1370 27.205700 20.075500 25.811900 4.5316000 3.8291100 3.7494300 1371 32.075500 19.229500 27.651000 5.8511100 4.3798000 4.2239000 1372 54.062600 35.856700 48.295800 18.231100 13.757200 13.497000 1373 55.201400 42.539000 47.393600 19.542400 16.410700 13.227500 1374 63.505200 42.106000 51.774700 25.883200 19.427200 15.951500 1375 70.233500 56.248400 54.538000 34.070000 29.449300 18.660900 1376 72.846400 62.488600 57.427100 38.176700 35.008700 21.302300 1377 75.345200 73.067800 65.900000 44.592700 45.625200 29.715000 1378 0.0000000 11.121700 12.992100 0.4398110 0.8910640 1.2685900 1379 6.9685400 4.1410200 12.966500 0.7952930 0.6442760 1.2099300 1380 40.823500 15.524900 35.537800 9.1921100 5.6539600 6.7751800 1381 57.536400 12.979800 40.780000 18.436500 10.008100 8.9844100 1382 57.960200 21.690600 52.242100 20.230600 11.946800 15.646000 1383 70.671700 22.939400 51.286700 30.446700 17.150400 15.031800 1384 71.769800 67.324000 52.425200 37.554400 37.781000 18.052500 1385 72.030500 85.127200 53.243900 43.105600 55.539700 20.597200 1386 28.773000 75.357700 21.614800 12.900500 31.517800 5.8948000 1387 56.836600 76.795600 66.675400 30.131600 41.561400 30.881100 1388 43.339700 57.787000 47.998400 15.568700 21.086600 14.458900 1389 57.105300 62.505400 50.130500 24.312600 28.117300 16.129000 1390 67.050200 66.540000 61.602500 34.345500 35.768300 25.110000 1391 71.001500 74.754600 76.174100 42.777000 46.239200 41.230000 1392 8.7334600 31.568300 12.506400 2.0600100 4.5777800 1.5911300 1393 14.889900 67.989100 8.0199900 8.1074100 23.526900 3.2476700 1394 41.126600 71.415000 10.071800 15.540200 29.678600 3.7629400 1395 90.607000 76.047700 0.0000000 59.368000 54.941500 3.3896600 1396 13.108900 0.0000000 45.711000 3.0728800 1.6747800 11.398400 1397 13.802400 20.000200 46.395800 3.7493300 3.5506900 11.984600 1398 21.419600 38.630600 64.670100 8.6128300 9.9756500 26.169700 1399 44.914000 45.265800 67.054500 17.026000 16.357300 28.786200 1400 57.250100 30.650500 48.029800 19.815200 13.285300 13.173000 1401 65.606800 33.138000 51.972900 26.726500 17.288700 15.747600 1402 64.626200 84.895300 54.898700 36.652200 52.144100 21.748900 1403 12.766900 19.569200 11.860600 1.6933800 2.3316100 1.2444500 1404 15.855100 17.072700 9.2885900 1.9001500 2.1388500 0.9417580 1405 35.167300 29.769400 6.6055200 6.7734100 6.5035300 0.9700640 1406 62.391100 55.056400 9.3621400 24.302000 23.803500 2.3508100 1407 74.477600 83.002400 43.343000 43.743100 53.666100 14.353100 1408 88.151000 87.864500 48.357000 62.165200 67.725300 17.797700 1409 42.696600 43.601200 24.465600 11.416200 12.645000 4.1334400 1410 58.255900 50.756800 31.194300 21.365300 20.398700 6.3910700 1411 61.471600 57.756700 50.703700 26.530100 26.492800 16.138100 1412 83.635400 63.126200 75.359500 53.492300 43.195700 39.136600 1413 87.613300 72.323700 84.999000 63.166500 54.524400 52.963100 1414 73.917000 64.523600 71.547500 42.081200 38.392500 34.813300 1415 75.174400 81.202300 80.810600 49.947700 55.488200 47.998000 1416 74.386000 82.332000 89.341300 51.782400 57.639200 60.826700 1417 13.445200 0.0000000 20.202100 1.4765400 0.7597950 2.3007300 1418 20.042700 12.019400 21.044000 2.6436900 2.0619000 2.5612900 1419 22.267600 10.366000 31.965900 3.5036300 2.4052700 5.4319000 1420 31.777400 37.021400 38.329500 7.6399300 8.7852200 8.4256200 1421 74.624700 37.924900 39.608200 34.290400 22.174700 9.0210400 1422 79.537600 38.129300 46.876900 40.298600 25.245600 12.745800 1423 78.397800 90.588400 62.976100 53.143000 66.418700 29.154200 1424 76.171100 93.788200 71.178600 53.482800 70.405700 37.886700 1425 81.371000 93.692900 76.807500 60.473000 73.828900 44.506900 1426 38.105800 36.376400 25.337800 8.8524600 9.1434000 4.0501600 1427 37.451000 41.844400 37.246000 9.8830900 11.349200 8.1625600 1428 72.614900 59.260400 49.407200 36.285500 32.111200 15.423700 1429 78.984400 63.526300 57.461000 44.886100 38.954500 21.413200 1430 78.656500 70.571700 65.177600 47.387800 45.088400 28.765100 1431 81.676600 76.446800 68.257200 53.040500 52.571300 32.445500 1432 32.390000 35.201600 51.856600 8.9709700 9.0562400 15.737000 1433 35.449200 35.401300 80.267300 14.988400 12.470000 43.859800 1434 53.536700 45.081400 100.00000 30.194200 23.453000 76.694500 1435 34.381100 6.7635000 23.281600 5.9881700 3.3758000 2.9909500 1436 44.256100 13.604600 20.552900 9.8343100 5.7318800 2.4812300 1437 60.988600 15.039100 17.363000 19.673900 10.700600 1.9309700 1438 91.639900 31.931900 25.770700 53.842600 30.198000 4.0133800 1439 64.897000 42.102600 18.499800 24.648700 18.632600 2.8438200 1440 73.818200 45.084100 17.362800 33.107200 23.842900 2.7916300 1441 85.045900 56.773700 42.922400 49.154700 37.051400 11.597000 1442 89.488300 67.241600 49.985100 57.979700 47.761500 16.441000 1443 94.626600 71.296100 66.787000 68.926600 56.260400 30.410200 1444 31.850900 7.7488500 17.165000 5.0345300 2.9457000 1.8271600 1445 44.665800 4.5023600 21.371600 9.8436100 5.1402700 2.5656000 1446 75.897700 76.681200 21.607700 41.874900 46.896600 6.0394600 1447 81.123800 76.796200 79.502100 54.863200 53.952900 45.719100 1448 10.799700 9.6916800 93.016300 12.273900 7.4934500 62.911300 1449 54.443100 10.621300 94.799600 26.617300 14.664900 66.053400 1450 68.787400 24.436800 91.136800 36.850000 21.172300 59.930400 1451 81.118900 33.168800 91.820000 50.426100 29.613500 61.307900 1452 55.679200 24.895800 63.204600 20.447200 12.665800 24.396300 1453 55.686400 49.309400 94.110800 30.145600 24.943600 65.960200 1454 7.1557400 0.0000000 26.197500 1.1695000 0.6275870 3.6445800 1455 10.564100 31.904700 30.638900 2.9177500 5.1296000 5.3980700 1456 13.532300 89.086500 32.921400 15.330700 45.873800 10.722300 1457 13.117000 87.916600 51.589500 16.517300 45.327100 19.852300 1458 10.153900 70.697700 75.124400 14.766100 29.266800 39.531200 1459 0.0000000 91.121300 76.899200 21.002100 51.402100 44.227800 1460 16.068100 41.384700 24.274800 4.0980600 8.2905800 3.9895000 1461 14.067600 50.944900 24.201700 5.1202000 12.453200 4.4548700 1462 10.597000 63.515600 59.614300 10.282400 21.929200 23.153300 1463 13.947300 64.048700 69.905300 12.488900 23.490000 32.976400 1464 11.727700 65.324500 76.732800 13.965500 25.150300 41.014400 1465 43.684000 66.817600 81.163100 23.321100 30.834600 46.957400 1466 54.523400 86.757000 91.861600 37.912500 55.290200 65.577500 1467 26.292900 50.954300 51.272000 9.2258400 14.644000 16.070100 1468 59.210600 50.609800 50.398000 23.641900 21.584600 15.482000 1469 77.530200 54.228800 88.200200 47.883600 35.774900 56.377500 1470 17.911500 5.6602500 53.266200 4.6288900 2.8300100 16.160400 1471 16.827500 14.477000 67.194000 6.8087000 4.6812700 28.049800 1472 38.368500 11.254800 73.019800 13.066500 7.5870900 34.302100 1473 53.257400 33.158200 81.595500 23.285600 16.021300 45.601900 1474 61.253100 35.828900 89.076400 30.893100 20.600000 56.872500 1475 66.009200 44.677000 93.721800 37.023300 26.503200 65.036100 1476 43.782500 33.524000 27.042000 10.979800 9.4651600 4.3950500 1477 52.494400 37.370900 25.248400 15.731500 12.806100 4.0647900 1478 15.434000 6.0962000 0.0000000 1.4137100 1.0436400 0.0458118 1479 15.469300 9.1697200 11.596000 1.6628400 1.3588700 1.0884800 1480 40.719700 35.013800 15.234700 9.3812800 9.0165400 2.0547300 1481 47.737900 51.114900 11.807600 14.422700 17.080900 2.3569500 1482 51.577700 66.150800 14.237800 19.420700 27.854200 3.7505400 1483 68.015400 79.371100 10.392800 34.759500 45.719500 4.6618800 1484 67.736200 69.959600 12.919800 31.914300 36.666500 3.9338600 1485 69.858200 92.418700 15.915300 41.186500 62.305500 7.1155000 1486 85.631400 95.310100 13.475300 59.684800 74.862100 7.2362700 1487 45.921600 37.546900 0.0000000 11.641900 10.793200 0.6672550 1488 93.602300 38.251900 34.382100 57.780600 33.808500 6.8968100 1489 93.707700 48.794600 33.825100 59.184000 38.199400 7.1810700 1490 85.030000 41.586900 44.645500 47.077100 29.632900 11.647600 1491 26.619700 6.0329200 8.7545100 3.4759500 2.0662100 0.7810820 1492 25.331800 0.0000000 8.5865900 3.0703100 1.5224100 0.7206930 1493 23.755600 30.642500 17.930800 4.1153200 5.3976000 2.3355400 1494 21.528200 42.747400 16.384700 4.8102800 9.0742200 2.5285000 1495 20.095100 67.428600 26.973400 9.2739300 23.758300 6.3724100 1496 24.870700 70.484800 44.583400 12.159300 27.458800 13.596100 1497 53.556800 90.262500 47.100000 29.893900 54.437200 17.400700 1498 37.258000 77.625100 29.794200 16.490900 35.233500 8.2244400 1499 46.278900 77.650800 29.734100 20.265300 37.114600 8.2096100 1500 49.707600 84.444700 37.750600 24.730200 45.682500 11.935900 1501 66.647800 76.982800 34.650000 33.819200 43.238400 9.7960900 1502 83.706700 78.096400 39.518300 52.285000 53.324800 11.920200 1503 25.948700 18.225300 7.1782800 3.6401300 3.1225400 0.7761300 1504 33.366900 15.074900 10.886000 5.5232100 3.7223300 1.0733300 1505 91.345700 40.826500 12.596500 53.824400 32.573300 1.9315000 1506 93.529100 47.525400 82.065400 65.869900 41.538000 46.853600 1507 18.642500 7.0170300 44.277400 3.7769200 2.4104400 10.674600 1508 15.624000 37.708700 94.378400 14.791500 13.313600 65.896000 1509 84.781600 74.185600 96.182800 63.298800 56.317700 71.662200 1510 27.415000 43.285900 22.487900 6.2821100 10.000300 3.6710700 1511 30.714900 62.570200 29.366400 10.592200 21.264700 6.6368400 1512 43.349700 65.635300 34.342400 16.025400 25.909000 8.5527900 1513 49.095400 67.216100 100.00000 31.651900 35.651100 78.208600 1514 7.2031400 22.772500 39.248900 2.6517400 3.3426700 8.4326600 1515 12.215400 35.850300 37.864500 3.8860100 6.6149900 8.1857600 1516 23.103400 47.511000 42.017300 7.1134400 12.079800 10.585000 1517 51.288500 46.934300 46.732300 17.684100 17.093800 13.057200 1518 81.069300 76.337000 48.650800 49.434100 50.477300 16.527800 1519 81.700800 83.507000 49.919400 52.582400 58.564200 18.174900 1520 93.085400 89.977900 57.756400 71.144900 74.540900 24.633000 1521 70.027700 51.107500 31.677600 30.912700 25.259000 6.5703800 1522 87.584400 63.610900 40.637300 53.636600 43.170000 11.004700 1523 75.214200 41.237700 26.485700 34.420200 23.185300 4.5345300 1524 77.384400 48.590900 27.825700 37.730900 27.521800 5.2537400 1525 87.583000 57.418800 26.469600 51.478600 38.449000 5.4353700 1526 51.674100 27.692600 14.830500 14.117500 9.7221100 1.7840700 1527 53.689400 32.277800 9.4800100 15.527000 11.367200 1.2917500 1528 66.993500 51.886600 6.5503900 27.480800 23.852900 1.9085600 1529 76.042800 53.382200 12.478300 36.494200 28.996800 2.5716000 1530 51.522700 45.999000 0.0000000 15.542700 15.508700 1.0357800 1531 71.806500 44.846900 7.1436200 30.878400 22.640700 1.5781200 1532 56.001500 32.451500 25.751600 17.480600 12.407800 4.0241400 1533 56.432000 45.643700 36.264400 19.744600 17.542200 7.9427500 1534 60.784700 44.569700 40.267600 22.944300 18.745800 9.6059300 1535 62.782200 62.145100 70.833400 31.512500 31.696200 33.828800 1536 67.316700 62.190800 73.704800 35.829900 33.896200 37.087400 1537 92.235600 81.901900 73.113000 69.684800 65.730800 38.400400 1538 94.918000 92.750900 79.277400 79.046700 81.911300 47.538800 1539 17.607400 35.405000 9.2846500 3.2716200 6.0988700 1.3745800 1540 24.870600 57.843600 6.4518000 7.5345400 16.987700 2.2906700 1541 35.490100 62.014500 8.1215700 11.225200 21.185700 2.7447700 1542 34.627600 81.738300 39.437600 17.540200 39.524300 12.321500 1543 33.534000 92.726100 82.317500 27.998300 56.798200 51.679600 1544 35.137400 100.00000 90.117800 33.779600 68.895700 64.741100 1545 8.1377500 43.561400 29.869400 3.8365800 8.9188400 5.5986700 1546 45.142600 50.463000 33.119600 13.902900 16.604100 7.0236900 1547 48.893200 57.639600 37.092000 17.241600 21.754300 8.9939200 1548 64.066800 60.276100 36.918100 27.734700 28.386200 9.1160700 1549 79.126300 60.984300 44.721500 43.012100 36.374100 12.841700 1550 57.120900 27.033900 29.906100 18.037200 11.576300 5.0379900 1551 83.346000 30.563900 38.479100 43.404100 24.815900 8.2809600 1552 84.083200 29.802600 46.618300 44.993900 25.495500 12.325600 1553 12.794200 42.321800 0.0000000 3.2579600 8.1420300 0.8622010 1554 8.1809300 45.230500 11.232100 3.3839400 9.2458200 1.9775000 1555 7.6792300 57.229800 12.246600 5.2284600 15.531500 2.7993300 1556 12.170100 85.371500 13.637600 13.041400 40.769700 5.7896900 1557 24.121800 86.473000 33.817000 16.041800 43.445800 10.672600 1558 38.927800 91.629400 62.676400 25.365600 53.914300 29.038300 1559 15.413400 46.326400 37.095000 5.3559000 10.719200 8.3117900 1560 16.579700 46.085300 45.457200 6.1913900 11.095200 12.298700 1561 12.662200 83.525600 55.786100 15.447200 40.349700 22.226300 1562 19.990400 100.00000 63.550200 24.130600 63.668700 31.199900 1563 17.747000 100.00000 83.232200 27.913800 65.857100 54.175700 1564 43.300900 64.534100 42.613400 16.398400 25.427400 12.036200 1565 91.375100 80.266500 48.214100 64.052100 61.128500 16.719100 1566 100.00000 84.272600 48.593100 78.869100 72.254300 17.453100 1567 46.525900 36.791600 20.209700 12.274300 10.926500 2.9416300 1568 55.784100 46.053000 18.842300 18.502700 17.016100 3.0904600 1569 71.564400 55.459300 17.151700 32.448000 28.031900 3.3527900 1570 83.929100 66.877200 24.354300 48.633900 42.757700 5.6610800 1571 88.264700 74.174300 27.150100 56.280400 51.938000 7.0834000 1572 94.176600 87.897400 71.765600 74.392200 74.063500 37.663000 1573 32.536100 29.251000 21.514500 6.2794500 6.1824300 2.9632300 1574 32.361700 34.328800 25.060100 6.7685700 7.5825300 3.9117800 1575 38.174000 44.979900 25.587800 9.8364600 12.366800 4.4742000 1576 50.951700 56.347900 25.675800 17.451600 21.124200 5.1563300 1577 52.381600 86.771600 30.863000 26.598900 48.942600 9.7088800 1578 21.229500 82.719200 8.4033100 13.250900 38.240800 4.8857800 1579 33.264300 90.507300 0.0000000 18.763500 49.056700 5.2511200 1580 58.392600 95.541000 10.852500 33.149900 62.071800 6.9707600 1581 27.537400 63.084700 15.380300 9.3495100 20.926400 3.6481500 1582 30.058500 89.142900 14.141800 17.568100 46.975800 6.3795700 1583 66.616300 88.363600 25.315900 37.071400 55.766000 8.3603900 1584 68.121300 95.391900 46.850000 42.725800 66.762700 18.048200 1585 27.388900 37.206400 40.488100 6.6897700 8.3821000 9.3966300 1586 31.478300 37.909100 66.446200 11.124300 11.026900 27.861500 1587 33.438500 44.035800 78.131500 14.762900 14.974700 41.393500 1588 48.487300 45.924300 79.146900 21.378200 18.945800 42.808300 1589 49.666300 56.243800 81.023900 24.047700 24.896600 45.936600 1590 60.353600 82.234400 91.322300 40.117800 51.846900 64.073700 1591 86.656500 86.749200 91.029800 68.113700 70.137200 64.179400 1592 94.813700 100.00000 93.635100 85.962200 94.681300 70.697500 1593 26.838100 24.069600 21.524900 4.4688300 4.3576100 2.8422600 1594 26.269200 33.077100 56.543700 7.8181500 8.0081000 19.029700 1595 34.195100 43.171700 57.977200 11.156600 12.600500 20.536200 1596 53.005700 64.916400 63.622100 24.125700 29.688000 26.784800 1597 61.218900 69.740400 66.619700 31.280200 36.564900 30.092400 1598 31.537000 26.593700 27.151700 6.0560600 5.5843000 4.2328300 1599 34.996400 25.839900 31.031900 7.2660800 6.0638600 5.3644700 1600 44.361300 39.122500 32.306200 12.053400 11.533600 6.1951200 1601 49.176700 49.295100 35.475000 15.896100 17.096700 7.8245400 1602 53.875100 52.475600 43.127000 19.674700 20.413300 11.421400 1603 6.7054900 14.693800 0.0000000 0.8121780 1.3527400 0.1256510 1604 13.729700 9.9648100 0.0000000 1.2939500 1.2138200 0.0760360 1605 9.6411800 11.666500 7.1236800 1.0512900 1.2241200 0.6894100 1606 9.0232600 15.516700 13.391300 1.2305000 1.6552700 1.3674000 1607 7.7027700 17.565000 19.813700 1.3854300 1.9600400 2.3919900 1608 8.8571400 19.303300 67.359600 6.1842200 4.8932300 28.285600 1609 59.434900 22.166400 71.061700 24.259900 14.233500 32.247100 1610 50.820400 15.436100 0.0000000 12.782300 7.3190700 0.1349810 1611 68.590800 15.387200 7.4033700 25.679200 13.675200 0.7548660 1612 94.146300 14.265400 14.311200 56.225700 28.625500 1.4714200 1613 81.453800 10.233500 41.046600 40.377500 20.609500 9.0822000 1614 90.246700 9.5823600 56.157700 53.422400 27.121800 18.295100 1615 89.546100 0.0000000 71.181900 54.747600 27.419400 32.138800 1616 92.317300 51.261500 100.00000 69.998700 45.575600 77.026600 1617 36.707900 24.493400 41.217600 8.4876100 6.4967300 9.3738000 1618 39.274300 47.755700 57.693900 13.475300 15.452100 20.536700 1619 41.934000 52.280100 74.988200 18.289300 20.015100 37.918200 1620 67.684800 65.922600 87.159800 40.241800 38.692400 55.634200 1621 73.917300 66.175700 87.044800 46.139100 41.762300 55.478300 1622 32.437500 26.990900 41.571600 7.3012500 6.3452000 9.5998100 1623 37.336400 33.158400 53.069400 10.543800 9.3337800 16.497000 1624 42.305000 32.193600 68.152800 14.721300 11.348600 29.389800 1625 61.108700 31.778900 76.719400 27.281800 17.578800 39.134100 1626 69.028700 25.158500 60.710800 30.333400 17.547800 22.196100 1627 83.200400 32.558800 64.819300 46.566700 27.070800 26.101000 1628 91.084000 36.016700 64.628200 57.319900 33.229500 26.033200 1629 100.00000 41.698600 81.970400 75.398700 44.111200 46.441800 1630 64.299400 23.900200 30.337900 23.159300 13.568200 5.1015200 1631 64.107400 39.298800 29.483500 24.162800 17.538200 5.2983700 1632 60.024700 54.719300 27.716900 23.066300 23.073400 5.5895700 1633 59.821600 66.167000 29.305500 25.295800 30.803500 6.9215800 1634 66.503700 82.823300 29.178700 35.206900 49.208300 8.6668300 1635 78.808700 82.445900 31.106800 47.294400 54.807100 9.2168000 1636 38.618500 41.524700 48.060900 11.247900 11.993100 13.577900 1637 44.961500 41.051300 50.433600 14.108200 13.269100 15.027700 1638 44.645300 50.302200 51.360400 15.276600 17.338700 16.090200 1639 45.893400 53.527400 66.141500 18.535800 20.585800 28.340600 1640 47.463500 70.841200 79.887300 25.793200 34.891000 45.605100 1641 33.015000 66.476700 59.433200 15.042400 26.192200 23.255900 1642 32.727200 82.480200 93.639900 27.187800 45.769600 68.073000 1643 20.853000 65.400700 49.116800 10.641700 23.205600 15.735200 1644 26.596300 80.359700 49.227600 15.842100 37.477900 17.348300 1645 26.303900 84.682900 68.206500 19.995000 43.891700 33.395000 1646 35.159300 92.467600 71.460600 25.959800 55.299600 37.993900 1647 15.022200 25.747100 17.921800 2.4130600 3.6128600 2.2092500 1648 58.951700 43.436500 14.193200 20.174600 16.874800 2.2472100 1649 92.418600 64.059400 9.5471700 59.087200 46.024000 3.0393000 1650 92.675400 69.084800 24.499200 61.071000 50.423400 5.8983600 1651 41.017100 17.633300 14.285000 8.3971600 5.4087200 1.5128600 1652 75.836100 20.726900 27.468000 33.544700 18.210300 4.1982300 1653 88.508900 21.433300 26.661100 48.823700 25.829000 3.9939400 1654 93.641000 28.985100 55.032500 59.062200 32.335500 17.778500 1655 53.728000 14.214400 28.128100 15.185500 8.4471100 4.2877400 1656 53.034800 10.683500 73.347000 20.130700 11.030500 34.675600 1657 66.486900 14.562700 70.834900 29.405400 15.873200 31.880300 1658 74.709200 11.760800 75.441000 37.991100 19.941300 37.175600 1659 91.988000 15.299000 100.00000 66.395700 34.783200 75.837200 1660 82.843100 18.406600 100.00000 54.280000 29.148000 75.881000 1661 37.957500 12.095300 93.500700 18.226900 10.609400 63.775500 1662 40.507000 59.933400 91.975400 23.469300 26.851600 62.958000 1663 43.887300 65.823100 92.529200 26.324200 31.895100 64.380100 1664 43.045200 79.866000 93.014900 29.904100 44.651300 66.664200 1665 51.565300 93.177400 93.596800 39.153600 63.072900 69.502600 1666 13.337100 28.007300 23.262200 2.5507300 4.1064800 3.3062400 1667 10.712500 31.463600 40.640200 3.5956800 5.4194200 9.2777900 1668 15.265500 33.999600 46.645000 4.8390300 6.6714400 12.466700 1669 18.335900 39.370400 44.893800 5.5886300 8.5021500 11.689000 1670 17.284600 54.885400 66.675700 10.519100 17.306600 28.956500 1671 21.814100 60.431200 67.982300 12.501800 21.277900 30.668400 1672 28.986700 69.986600 94.226900 22.703400 33.052200 67.717500 1673 5.8688100 28.809000 43.032300 3.2400900 4.7017300 10.368800 1674 15.733300 30.980500 54.250900 5.5319700 6.3800700 17.265600 1675 13.115800 38.365100 76.904900 9.8414200 10.692500 39.590800 1676 9.6729900 53.057300 93.232700 15.807600 19.532800 64.643600 1677 11.378700 42.364900 65.635300 7.8589300 10.796100 27.250300 1678 11.799100 50.528900 71.656900 10.117400 15.149200 33.946600 1679 16.333700 53.500100 86.464000 14.602400 18.993600 53.633400 1680 15.700500 68.366700 89.898400 18.515600 29.723700 60.209100 1681 16.746900 94.926800 100.00000 30.621400 61.133500 81.636300 1682 0.0000000 59.705200 64.540200 9.4975900 19.334700 27.224100 1683 0.0000000 67.774100 76.720700 13.646300 26.643100 41.217000 1684 0.0000000 76.829500 79.662000 16.746500 35.210800 45.935600 1685 0.0000000 84.926300 78.924200 19.173600 43.909300 45.951200 1686 13.320500 93.559200 61.143200 20.048200 53.526100 27.981600 1687 61.090500 95.249700 60.990600 38.765200 64.780100 28.118600 1688 70.745500 94.528200 69.334200 48.003900 68.566700 36.006700 1689 42.046700 95.385000 10.978000 24.083300 57.415300 6.9588900 1690 76.939800 94.780700 18.322100 49.303300 69.113300 7.8697900 1691 88.614000 93.382600 46.998300 64.799100 75.214600 17.814800 1692 96.030000 93.115000 46.434100 75.510400 80.169900 17.449900 1693 56.479000 58.205700 45.050500 22.502900 24.705300 12.812300 1694 67.085700 60.064700 49.210300 31.327300 30.123000 15.361700 1695 66.787100 62.115600 68.142900 34.259600 32.991000 30.964800 1696 71.289100 66.069500 67.879200 39.148500 37.902600 31.024900 1697 39.592700 23.749400 50.538700 10.437800 7.4129400 14.560800 1698 38.464700 27.854800 56.533900 11.014300 8.4660100 18.875000 1699 42.407500 35.834300 62.302500 14.068300 11.848000 23.889900 1700 47.856100 42.493200 70.518100 18.767500 16.283200 32.279800 1701 54.656100 50.400800 70.609800 23.689500 21.761500 32.782100 1702 61.317100 30.638300 6.2661100 20.504800 13.449600 0.9661750 1703 78.618600 37.862900 9.8458100 37.219900 23.493500 1.5164400 1704 50.883200 43.052100 8.8272500 14.945500 14.157900 1.6371400 1705 53.942100 43.677600 26.541000 17.347800 15.600900 4.6575700 1706 61.412700 46.917500 48.928500 24.549200 20.486900 14.357700 1707 62.436300 54.471300 92.830200 35.314800 29.811200 64.037200 1708 63.719800 61.856600 91.824500 37.401300 34.833900 62.850100 1709 70.146900 84.439500 97.488100 50.915100 59.470700 75.295600 1710 30.060800 36.417100 43.009700 7.5021600 8.5820100 10.592200 1711 35.096900 39.076900 95.233100 19.443900 16.027100 67.475100 1712 43.211100 49.086500 94.134200 23.422200 21.539000 65.989300 1713 54.517000 67.941500 94.269800 33.026200 36.677500 67.600900 1714 74.314300 68.606100 95.181200 49.560000 45.311200 69.287700 1715 17.239400 16.148300 39.416900 3.3904200 2.8812700 8.3988300 1716 25.658600 16.282700 39.873900 4.9136700 3.6484500 8.6061900 1717 65.423000 13.699900 44.689300 24.731500 13.197500 10.955000 1718 65.649000 10.882500 50.758400 25.485800 13.397100 14.513900 1719 66.812300 33.475600 86.854200 34.510900 21.735300 53.299500 1720 82.219200 66.050900 87.516300 55.428400 46.265000 56.199900 1721 74.074900 65.899600 77.076400 43.729400 40.194700 41.495300 1722 75.654500 73.678200 93.861100 51.843300 50.211000 67.444400 1723 79.265900 88.645800 95.780200 61.247500 68.888600 72.719800 1724 24.365800 30.405400 45.929900 5.9472000 6.3850400 11.954300 1725 25.661500 42.474700 62.628400 9.5246000 11.613700 24.445200 1726 29.681800 42.958300 70.361000 11.916400 13.065200 32.130000 1727 33.812500 66.107500 76.727600 18.403800 27.852700 41.076000 1728 38.789800 74.873900 78.054400 22.655200 36.459800 43.615300 1729 32.587400 71.395400 51.432000 15.062100 29.626700 17.772200 1730 71.841700 74.128600 54.448700 39.630100 43.885400 20.139500 1731 94.316200 90.541500 66.851100 74.671600 77.021600 32.838700 1732 94.073700 94.972500 67.725200 76.255600 82.996400 34.404500 1733 57.029400 66.230800 71.623700 28.424700 32.785500 35.046100 1734 62.114800 66.163000 75.478300 32.847200 34.981700 39.538600 1735 75.848500 70.395900 75.669800 46.340500 44.604400 40.164000 1736 85.754900 88.593700 80.369800 64.732900 70.204500 48.380900 1737 86.431900 91.388900 95.352200 70.917400 76.688700 72.346900 1738 25.105000 34.833100 27.512400 5.1090900 6.9015800 4.5664400 1739 22.627800 56.955400 72.334400 12.830600 19.588800 35.117300 1740 49.236500 61.034400 88.562600 26.732200 29.016200 57.433100 1741 74.668300 60.220100 90.880200 46.729300 38.446000 61.140100 1742 42.529600 34.690600 77.219400 16.889900 13.166800 39.854600 1743 44.299400 49.664200 82.715900 20.737200 20.204200 47.886700 1744 63.415800 52.065600 83.372800 33.004000 27.320900 48.964000 1745 63.476100 58.096700 83.971200 34.250500 30.961400 50.226400 1746 68.999300 6.3453100 11.095600 25.880100 13.121700 1.0128900 1747 93.472700 11.968600 6.2411000 54.995100 27.814800 0.6182770 1748 93.365500 9.0829200 43.437500 56.498700 28.491100 10.252600 1749 92.611800 28.140900 44.244200 56.256800 30.692400 10.978000 1750 57.825600 23.160400 34.558200 18.571100 11.214700 6.5289400 1751 60.012500 22.777800 41.106100 20.581700 12.186500 9.2852500 1752 79.072600 30.279300 70.450200 42.552700 24.668300 31.767000 1753 89.357600 41.965200 93.784400 62.457300 38.088500 65.021600 1754 29.346100 31.363000 40.935800 6.7032600 6.9294400 9.4130800 1755 27.981800 40.764700 52.357600 8.4113600 10.390000 16.286800 1756 26.127800 87.558200 52.647700 18.600400 45.982200 20.516400 1757 38.355400 96.459300 53.456900 25.832000 59.823400 22.433500 1758 57.451800 96.260600 68.956500 37.985400 65.752200 35.888500 1759 31.728500 42.125500 33.761700 7.8426500 10.419300 6.8298000 1760 41.922600 55.264500 33.693700 13.292600 18.558000 7.5247500 1761 90.942600 66.886400 33.295200 58.487900 47.654400 8.2845900 1762 93.581500 74.954900 33.430600 64.449700 56.622900 9.1280800 1763 54.636800 55.130700 15.011400 19.047200 21.261600 3.0102100 1764 77.158000 75.892600 10.849800 42.698800 46.615200 4.3116600 1765 79.891900 82.234500 15.097500 47.806500 54.806200 5.5783500 1766 99.103300 86.267700 9.5846400 75.872800 72.628200 5.4612300 1767 39.222800 8.9808800 6.5354700 7.2911000 4.1122300 0.6152700 1768 61.724000 10.467800 54.929800 22.876900 12.123600 17.388300 1769 82.225700 13.678400 54.326100 42.804200 22.182200 16.982600 1770 76.123700 15.691300 55.841100 36.159100 19.112600 18.121200 1771 75.913900 51.910600 68.120800 41.101600 30.973300 30.231400 1772 77.256800 53.453000 76.838100 44.572900 33.543200 40.264800 1773 22.143400 17.728500 33.159900 3.7836000 3.2095900 5.9285100 1774 28.180500 17.805500 35.124400 5.1964800 3.9243000 6.6488000 1775 29.553200 55.387300 73.241200 14.274700 19.507400 36.051700 1776 31.696800 79.814000 83.732500 23.190300 41.089000 51.934800 1777 14.964600 7.2438500 11.848200 1.5671700 1.1993400 1.1020000 1778 24.836000 3.7869200 0.0000000 2.9117500 1.6499000 0.0284594 1779 37.810200 39.138200 7.5334600 8.5161500 9.7276400 1.3598500 1780 51.741600 51.690900 25.475000 17.109000 18.696900 4.8087200 1781 66.700100 56.605200 32.900600 28.945900 26.949900 7.3349400 1782 75.155000 58.819700 34.556600 37.455100 32.338700 8.0876900 1783 75.975000 71.790100 37.210700 41.441600 42.811700 10.247500 1784 85.994000 76.685800 65.656700 58.022200 55.190700 29.867600 1785 91.497300 80.956500 77.838900 69.336900 64.753400 44.038200 1786 92.316400 92.219900 87.700600 77.104600 80.508400 59.595200 1787 49.741400 42.372400 45.544400 16.134100 14.660900 12.170400 1788 59.057700 44.182900 54.376000 23.134900 18.816900 17.852400 1789 66.066700 59.194700 77.877700 35.076300 31.854900 41.974200 1790 67.724700 80.300100 77.979900 41.861500 50.617700 44.139100 1791 74.458200 84.634500 86.212700 51.756200 59.809500 56.220700 1792 82.511600 92.728800 93.835800 66.022300 75.786300 69.852200 1793 14.628600 91.471100 23.489600 15.893400 48.776200 8.3818700 1794 29.320600 94.133200 25.669600 19.747200 53.797700 9.3148800 1795 41.858800 94.590000 29.445700 24.315100 56.612200 10.430700 1796 42.390400 70.250400 29.982500 16.459000 29.317700 7.5037900 1797 68.209700 70.294500 76.381800 39.069900 40.960900 41.031900 1798 74.280500 93.542600 76.696900 52.582000 69.761800 44.344800 1799 40.016800 23.443200 19.059000 8.3976400 6.1880600 2.3571300 1800 50.064100 21.293400 29.709900 13.433800 8.3915600 4.8579800 1801 50.609100 57.416900 57.408500 20.269100 23.295400 20.906200 1802 16.976400 30.802100 60.100900 6.4998600 6.8819100 21.820800 1803 13.098900 58.733600 73.874200 12.107000 20.216100 37.022800 1804 8.8283100 62.883000 82.184200 14.476500 23.955200 48.039200 1805 69.138400 79.452100 91.700300 46.503600 52.421400 64.368900 1806 71.146600 92.516300 93.150700 53.468300 69.338400 68.623900 1807 88.206900 96.221500 93.018600 74.540100 84.176100 68.984000 1808 31.695700 40.104000 37.419100 7.8616900 9.7961500 8.1604700 1809 60.134800 71.286100 36.291100 27.214900 35.417400 9.8254200 1810 86.706800 91.707700 35.517800 60.576600 71.106100 12.061900 1811 51.152400 57.672500 16.476200 17.474300 21.807200 3.3992100 1812 62.918500 60.996500 14.749400 25.935500 27.836900 3.3940300 1813 65.816400 77.776500 22.175600 32.706000 43.323500 6.2822300 1814 92.102700 77.607400 52.861000 64.824400 59.181900 19.401700 1815 60.407200 78.064200 33.902100 29.158300 41.874000 9.6442700 1816 60.536700 91.579600 38.601200 34.297100 58.033700 13.306800 1817 72.642100 91.674000 46.591000 45.388900 63.661500 17.318100 1818 49.084400 47.551900 42.622800 16.166100 16.559200 10.886400 1819 68.702500 48.409600 47.481200 30.590000 24.047500 13.568600 1820 71.676200 57.565700 62.381100 36.809700 31.580700 25.085500 1821 78.753300 60.834000 68.166000 45.802700 37.916000 30.888500 1822 80.725000 66.884500 93.153200 55.512800 46.998200 65.548900 1823 84.846200 81.199500 95.153500 65.153600 63.294800 70.596900 1824 52.037400 46.671800 57.911100 19.442900 17.965300 20.652600 1825 64.107500 49.849800 68.954700 30.009500 24.610700 30.978700 1826 68.423200 49.748200 86.811900 37.768100 28.713800 53.943500 1827 78.760300 57.782300 95.209400 52.000600 39.791800 68.451800 1828 24.981300 3.5047800 13.432600 3.1580700 1.7722800 1.2629800 1829 26.516900 26.986700 6.9308900 4.2120400 4.7001700 0.9265110 1830 34.850600 25.226700 7.3546000 6.3875800 5.4642400 0.9210610 1831 42.312000 37.171100 6.7276100 10.075500 9.9239900 1.2167600 1832 50.804300 39.145700 34.566700 15.457700 13.228600 6.9999900 1833 51.711700 56.244400 47.880200 19.503300 22.210700 14.281800 1834 53.266000 63.104800 54.829800 22.583800 27.679800 19.385800 1835 52.760100 68.127200 81.883100 28.498700 34.300800 48.073000 1836 23.086600 92.340100 86.440600 26.352700 55.623600 57.665500 1837 29.451400 94.481200 93.112300 30.603700 60.405000 68.864900 1838 38.055300 32.177600 26.923300 8.5442100 7.9477200 4.3216000 1839 65.715000 33.662700 32.747200 25.134800 16.495300 6.1500700 1840 50.881500 9.0765400 30.390500 13.510900 7.2424600 4.9101300 1841 56.341100 7.7380900 32.960700 16.944300 8.8665000 5.7503600 1842 66.047800 5.9756300 32.315700 24.107900 12.291800 5.5152400 1843 76.354200 33.249900 51.030800 36.798400 22.267500 15.126900 1844 83.521500 40.279700 56.564300 46.421400 29.000500 19.306500 1845 91.882000 53.235100 76.733500 63.031400 42.528800 40.120100 1846 93.908400 58.308400 87.808800 69.725400 48.630900 56.039000 1847 12.872800 4.8904000 23.634600 1.6414300 1.1299700 3.0562300 1848 6.8534500 5.0974900 22.878000 1.1049900 0.8749990 2.8878700 1849 7.0628000 7.1703000 47.494300 2.8784800 2.0019300 12.468900 1850 9.3800100 7.7968300 57.489500 4.2899000 2.8290200 19.308100 1851 65.560600 34.301200 58.259700 27.617600 18.077900 20.414900 1852 75.191700 43.460000 62.717000 38.234300 26.093800 24.570200 1853 87.287100 80.985400 64.668600 60.877400 60.406900 29.424600 1854 16.048600 26.847400 6.1061800 2.3606500 3.7623900 0.8539570 1855 16.147200 26.197900 12.557500 2.4434700 3.6958800 1.4559500 1856 23.322400 34.985600 7.4373300 4.1570900 6.4241600 1.1993800 1857 31.436000 44.281500 6.5102800 7.0432400 10.695400 1.4975300 1858 58.264700 46.398700 7.8634500 19.952300 17.842800 1.7145100 1859 61.447000 66.847800 38.208500 27.224600 32.257300 10.197700 1860 60.712500 74.646000 79.071000 34.782200 42.265800 44.913800 1861 62.932000 89.136600 95.312500 45.749200 61.776800 71.943500 1862 64.252300 93.084000 94.138600 47.969100 67.318600 70.440400 1863 24.224200 34.072700 44.499800 6.0709000 7.2796300 11.285900 1864 42.279700 39.119200 53.829700 13.120400 12.214500 17.242900 1865 58.213600 53.762700 53.865800 23.869400 23.179500 18.016400 1866 65.443300 76.529200 60.075400 35.373700 43.831000 24.797000 1867 72.866300 82.457200 68.557200 45.385100 54.220600 33.470900 1868 88.981700 82.237700 82.260400 67.271800 65.026900 50.133600 1869 8.9939200 3.5306100 37.134800 2.0252900 1.3012700 7.3020100 1870 17.509300 3.1137500 65.836400 6.3997200 3.7055600 26.605000 1871 50.173900 26.011500 67.587400 18.000500 11.710100 28.647100 1872 14.619600 13.894500 20.390400 1.9199800 1.8590300 2.4535900 1873 65.897900 28.633700 17.747900 24.231500 14.891200 2.2507200 1874 63.829500 59.074100 23.595700 26.559100 27.067300 4.8497100 1875 65.676000 65.618200 25.624400 29.527000 32.509600 5.8607800 1876 75.430700 64.651500 25.611200 38.451100 36.275600 5.7745000 1877 79.387000 80.102200 54.861600 49.376800 53.812600 21.115200 1878 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1879 6.9276900 7.8369900 12.534000 0.8556090 0.8833360 1.1853700 1880 9.2138800 13.825000 26.757900 1.6509100 1.7409300 3.9067100 1881 9.3948600 31.690100 87.374800 11.536500 10.014900 54.049800 1882 11.645500 45.022200 92.557600 14.609200 15.561800 63.035500 1883 33.780000 87.769300 92.228000 28.921200 51.937200 66.340800 1884 7.2674900 28.811300 33.108400 2.5806800 4.3174700 6.1348600 1885 20.610700 43.261000 32.478900 5.4102900 9.6013800 6.4303000 1886 34.394800 51.104300 71.701700 14.650900 17.636800 34.030400 1887 49.047300 56.978300 74.622100 22.377200 24.340600 37.784600 1888 49.779700 78.087300 87.489200 31.006700 43.480000 57.376900 1889 36.578300 7.9215600 14.397800 6.4554000 3.6495000 1.4216100 1890 56.999800 4.7842100 8.2044000 16.423100 8.3713300 0.7239000 1891 69.198200 48.518800 59.341200 32.548100 25.174900 21.908600 1892 68.764800 49.860000 79.490600 36.209200 27.845400 43.472400 1893 85.422900 51.434700 79.141200 54.455300 37.517300 43.101600 1894 26.006100 15.135000 27.164400 4.1318800 3.0847000 4.0316000 1895 26.761500 48.124500 28.502100 7.0324800 12.213500 5.4206100 1896 27.825500 57.870500 34.740400 9.2419900 17.925200 8.0876000 1897 58.948000 58.773500 40.027300 23.837400 25.638100 10.347000 1898 67.933300 59.547000 42.149100 31.261300 29.740800 11.410600 1899 40.284700 17.904300 6.0613200 7.9635800 5.2137700 0.6777160 1900 74.597800 27.171800 7.4050100 32.006400 18.424400 0.9703510 1901 80.405500 49.742100 12.884600 40.775700 29.463200 2.4040800 1902 93.940400 62.498500 20.365300 61.291300 46.160600 4.4350100 1903 95.390000 73.710800 17.659100 66.142300 56.395700 4.9875300 1904 61.912000 44.469900 32.523300 23.218400 18.800900 6.5020300 1905 70.825300 55.239800 40.862000 32.991000 28.289500 10.487800 1906 82.485900 72.300400 47.237300 49.848100 47.413100 15.257400 1907 36.156300 63.752700 19.525700 12.087500 22.700800 4.3789900 1908 47.311200 87.556400 21.190300 23.687900 48.299300 7.3209500 1909 10.954000 72.009400 18.549700 8.9518300 26.902100 4.9629400 1910 12.163700 81.403000 21.769300 11.941700 36.371800 6.6292700 1911 12.750500 86.140100 41.330000 14.786500 42.527800 13.770100 1912 19.054900 93.340100 47.940000 18.982600 52.606200 18.359700 1913 92.025200 93.943400 56.962200 71.053700 79.056600 24.614100 1914 94.973200 95.360600 86.248900 81.989600 86.626000 57.848500 1915 34.017100 29.709200 68.532500 11.560600 9.2560000 29.712200 1916 36.269900 39.647000 76.521400 14.809500 13.515900 39.161100 1917 49.116800 48.681600 88.572300 24.543100 21.790700 56.637900 1918 7.7493500 43.782900 21.280100 3.4460000 8.7737800 3.4417100 1919 20.240300 59.091100 28.588500 7.5843100 17.749500 6.1398600 1920 73.225500 72.239300 28.443400 38.192700 41.512100 7.2433500 1921 90.458100 81.931800 33.730000 62.045200 61.595000 10.047100 1922 74.503000 67.614500 57.825000 41.051200 39.759400 22.054800 1923 91.200400 70.808300 71.224800 64.557600 53.809200 35.029100 1924 95.396500 70.916100 90.769600 75.669800 59.742700 61.885500 1925 25.477300 7.4607200 51.653500 5.8153900 3.5015900 15.074000 1926 40.580100 9.3650100 65.615600 12.464400 7.0501800 26.438000 1927 54.368200 9.6971100 82.480100 23.022600 12.554100 46.395900 1928 63.199900 12.842100 87.146500 30.521500 16.576800 53.328200 1929 84.876500 61.949600 92.351800 59.238100 45.657800 63.754200 1930 45.476400 33.220800 48.868100 13.415200 10.724300 13.756400 1931 47.354900 42.145300 61.882400 16.948000 15.150100 23.766300 1932 50.439100 51.291200 75.899100 22.449500 21.630900 38.967300 1933 56.615100 60.500200 80.478100 28.875000 29.591800 45.500500 1934 65.251300 74.091500 89.480400 40.902700 45.048000 60.097500 1935 35.459700 65.997100 44.594600 13.902400 25.168200 13.186700 1936 50.413200 80.552700 46.415700 24.587600 41.939100 15.705100 1937 94.516900 83.743700 63.162100 71.869000 68.439200 28.373200 1938 92.879000 13.545900 21.556500 54.522100 27.739800 2.6810600 1939 94.457300 10.364700 29.078400 57.145900 28.812600 4.5221900 1940 95.142200 11.521100 88.118400 67.253000 34.585200 54.833400 1941 94.299600 33.929200 91.360700 68.091700 38.488200 60.558900 1942 16.411000 4.2397900 30.791500 2.3936200 1.4906700 5.0001200 1943 13.670000 73.220400 45.263700 11.191600 29.075200 14.239100 1944 42.358200 75.407800 72.699700 23.066900 37.008900 37.165400 1945 68.739600 74.976300 71.565400 39.782800 44.869200 35.836700 1946 70.234800 82.451200 73.862700 43.916800 53.574800 39.342500 1947 26.501700 17.877300 16.220200 3.9328800 3.2412500 1.7909800 1948 53.017500 74.513400 11.905200 22.343400 35.457000 4.2766200 1949 70.366200 76.302000 14.759000 36.060400 43.695500 4.8292300 1950 63.350200 82.849600 9.9139800 31.982500 47.594200 5.0416600 1951 62.471400 84.286800 39.556800 33.127300 49.672200 12.700100 1952 80.883800 93.530200 48.543200 55.213500 70.681100 18.751800 1953 100.00000 100.00000 100.00000 96.416000 99.996900 82.488000 1954 41.244500 58.271200 55.354700 15.651000 21.459400 19.401100 1955 44.435000 64.283700 63.419100 19.458900 26.980600 26.544100 1956 16.915400 57.839700 8.0491400 6.1997300 16.330100 2.4248400 1957 29.910900 68.313700 8.8338700 11.001800 25.181000 3.3477500 1958 35.100400 76.018000 9.8803700 14.597900 32.878100 4.2269000 1959 40.830700 85.398400 9.0165500 19.675300 44.057400 5.2899800 1960 57.546400 85.845800 42.257800 30.344700 49.894500 14.181000 1961 76.708400 37.229100 18.385300 35.267300 22.367900 2.6275000 1962 93.058400 42.005200 22.811500 56.768900 34.432000 3.6836300 1963 92.449700 51.273700 25.068600 57.210200 38.258500 4.6830700 1964 94.914200 50.455900 47.262900 62.391300 40.575300 13.555600 1965 93.346900 59.681400 55.802300 62.630500 45.386200 19.837700 1966 95.774600 80.132700 76.818500 75.268100 66.897300 42.645400 1967 19.391900 14.972100 18.816800 2.5528000 2.2650400 2.1765500 1968 16.763500 10.546700 24.046400 2.2373100 1.7622700 3.1966500 1969 40.704700 6.3993900 33.516200 8.7783800 4.7713000 5.9360900 1970 84.225900 16.047900 49.012000 44.707000 23.292700 13.469600 1971 88.363800 24.703000 63.789900 52.542300 28.449400 24.930000 1972 85.800000 23.744800 94.561400 56.428100 30.789000 65.820500 1973 28.035200 10.967500 31.026900 4.6863800 3.0261400 5.1298400 1974 29.263800 8.5540800 79.296200 11.565600 6.7782000 42.037900 1975 38.469400 56.507600 81.646100 19.185300 22.650300 46.812300 1976 73.846900 77.627100 82.515100 47.898800 51.294900 49.938600 1977 84.578200 80.387300 86.805900 62.057900 60.821200 56.591100 1978 19.603700 21.645800 16.111000 2.7766300 3.1483500 1.8373100 1979 17.562800 37.527000 18.119900 3.6700700 6.8884600 2.5927400 1980 18.532900 56.319100 33.462900 7.0836000 16.036300 7.5130500 1981 16.101200 57.831700 78.592400 13.336800 20.412400 42.799300 1982 8.8552400 36.336600 55.411400 5.4452500 7.6560800 18.285700 1983 11.514200 44.569000 61.197900 7.4070400 11.286500 23.278900 1984 8.0076100 57.193600 65.116100 9.6962000 18.063700 27.590600 1985 11.033500 89.169400 79.441100 21.661500 49.599000 47.221000 1986 8.0602700 89.827200 90.735900 24.686700 52.051200 64.127100 1987 39.959400 95.446500 90.817600 33.700500 63.050300 65.127300 1988 27.467700 30.736600 15.059100 4.8461300 5.7712900 1.8964500 1989 28.879700 42.623900 13.852700 6.2951600 9.7580900 2.1657800 1990 43.512200 61.982000 16.757600 14.496200 22.791700 3.7656700 1991 51.479500 79.289000 13.859400 22.901700 39.811100 5.0515300 1992 51.276300 93.611900 14.619300 27.958100 57.189200 7.1159300 1993 64.393400 93.392900 12.339100 36.776700 61.269100 6.7931400 1994 94.046100 87.741600 13.223800 68.468700 70.533200 6.0629600 1995 94.330700 86.925700 29.080500 69.183100 70.069500 9.1821700 1996 15.302100 28.174600 30.205200 3.1196200 4.4450900 5.1593500 1997 12.511000 27.623100 94.525600 13.665700 10.393100 65.844500 1998 26.562600 76.916100 93.719500 23.861200 39.094400 67.547600 1999 31.655800 25.181200 21.207300 5.7540300 5.1712100 2.8012400 2000 34.289600 37.439000 21.632400 7.5031800 8.7609400 3.2478100 2001 45.211400 55.046800 28.148200 14.394400 18.966800 5.7322300 2002 54.833500 63.758500 45.295600 22.597700 28.008200 13.374700 2003 44.736300 48.241100 38.816300 13.791500 15.642300 9.1406600 2004 45.860800 53.598900 46.600600 15.843100 19.081700 13.363200 2005 64.622800 56.556800 51.794800 28.899900 27.035600 16.772300 2006 91.819900 56.962100 94.961700 68.537100 47.493900 67.949900 2007 43.948900 17.705300 30.222500 10.271600 6.3887300 4.9564300 2008 86.135300 19.339900 38.173900 46.270100 24.352600 7.9033300 2009 91.611800 38.498100 42.201200 55.473800 32.791800 10.265400 2010 95.139000 43.721200 64.336700 64.128200 38.959900 26.072800 2011 94.977000 53.817800 66.764600 65.753200 43.990000 28.975800 2012 71.503100 43.303800 44.459200 32.212600 22.890500 11.625100 2013 82.170900 57.645600 55.517600 47.153200 36.638100 19.477700 2014 82.325200 86.119300 70.985900 57.476900 63.855000 36.550700 2015 83.947500 96.867000 84.965000 66.952900 81.064400 56.167400 2016 35.998400 48.048600 41.346800 10.495800 13.957400 10.288700 2017 41.574700 58.445700 42.708500 14.418300 20.837100 11.607600 2018 47.797400 69.015100 51.082500 20.454500 30.530500 17.311900 2019 50.163000 95.939600 76.717600 35.004700 64.011300 44.754000 2020 15.977200 39.046100 33.998000 4.3528500 7.7261400 6.7870000 2021 11.925600 68.178000 48.391200 10.035500 24.782600 15.540900 2022 31.014500 85.084700 58.129600 19.658600 44.000200 24.246400 2023 45.584200 92.719300 68.960200 29.727900 57.410800 35.328700 2024 84.582700 96.574800 71.910700 64.578900 79.288300 39.152000 2025 93.524000 96.754400 78.419400 78.409100 86.436500 47.055700 2026 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 2027 30.516800 12.210900 22.169600 4.9329800 3.2073600 2.7943000 2028 51.479200 15.147600 21.559200 13.605200 7.7329500 2.7008300 2029 53.737600 30.122600 35.307400 16.423500 11.414800 6.9767000 2030 53.680500 44.283000 68.347900 21.816900 18.376500 30.057100 2031 60.052100 44.183700 86.491400 30.182700 22.788000 53.163400 2032 29.016100 24.325800 51.335300 7.2055400 5.9193200 15.091900 2033 31.216200 40.693000 89.795400 16.771800 15.078200 58.223200 2034 19.218700 24.553900 61.208000 6.5869600 5.7577800 22.611800 2035 31.209100 22.509900 92.622200 16.191100 10.736300 62.406900 2036 34.544300 19.270100 73.644500 12.150500 7.9246700 35.129900 2037 70.054500 25.816300 78.656300 34.763300 20.113600 41.451000 2038 75.114600 23.642000 89.301400 42.385200 23.729900 56.900800 2039 38.331800 32.958900 34.292000 9.1272300 8.4499700 6.6798100 2040 39.173700 39.342400 34.397500 10.044500 10.621100 6.9451600 2041 44.442800 86.226600 44.941400 23.355800 46.863400 15.620100 2042 46.766700 94.294100 44.639200 27.548100 57.936200 16.645700 2043 9.1940400 24.635300 10.480500 1.5933600 3.0088700 1.1923600 2044 10.265700 34.781700 7.7462000 2.3655500 5.4897400 1.2180200 2045 19.995600 48.815000 8.7671700 5.1810500 11.535400 1.9202300 2046 29.624500 47.926500 39.081500 8.3913000 12.856700 9.2407300 2047 8.8799500 17.159100 52.329000 3.8345700 3.3088800 15.630700 2048 7.2749600 22.206700 79.293300 8.6928900 6.7129500 42.212100 2049 49.636200 22.273800 90.191300 22.842800 13.919800 58.321300 2050 62.406900 23.321000 93.632700 32.243600 18.789000 64.173600 2051 18.973300 47.253300 19.954600 5.0740400 10.871100 3.3538700 2052 25.288800 55.567400 18.813100 7.4811100 15.793700 3.6400200 2053 23.499100 67.742400 16.394700 9.5626200 24.085900 4.2011900 2054 29.534500 75.445300 42.440800 14.393600 32.426000 13.004000 2055 34.091100 51.380000 51.713800 11.428500 15.922800 16.388100 2056 33.453600 53.480900 63.793900 13.287400 17.947200 26.098400 2057 21.059400 49.256600 73.863900 11.607700 15.372900 36.404400 2058 26.329700 51.504700 81.352800 14.701000 18.010800 46.087000 2059 30.699500 71.644300 89.558400 22.161300 33.908600 59.971900 2060 50.496800 74.690700 89.558800 30.997100 40.655300 60.288300 2061 87.133500 86.701600 95.332200 70.066900 71.155200 71.636300 2062 39.346100 26.500700 25.374300 8.5549900 6.7920900 3.7688400 2063 43.339300 24.893000 28.231100 10.237200 7.3550300 4.4943000 2064 51.659500 67.884000 26.367600 20.297900 29.500700 6.2541700 2065 74.244800 91.395500 30.096400 45.599600 63.346000 10.133700 2066 83.109000 94.506300 36.020800 57.172700 72.726300 12.693000 2067 19.519700 22.154500 25.791800 3.1355900 3.4247500 3.7816300 2068 46.312900 25.278800 81.584600 18.970800 12.299300 45.376200 2069 49.472000 33.761300 92.336800 24.165500 16.835400 62.205600 2070 18.220900 10.543400 37.901600 3.2460000 2.3222700 7.6769400 2071 36.628200 10.592200 38.189100 7.6718000 4.5072400 7.7997000 2072 43.131500 38.853200 42.238400 12.215300 11.590700 10.297300 2073 44.543700 43.507900 48.161000 13.948000 13.995500 13.726000 2074 45.432700 48.129300 53.534200 15.593600 16.602300 17.452200 2075 19.620700 32.946600 37.864200 4.5808200 6.2277300 8.0894400 2076 21.229800 33.143700 76.925000 10.488300 9.6274800 39.433400 2077 23.842300 74.542200 83.201100 19.600200 34.784300 50.572900 2078 8.8026200 40.576700 44.527100 4.6317600 8.4017300 11.541800 2079 13.579200 68.169100 55.990100 11.128000 25.387200 20.687200 2080 11.033200 76.681100 57.081200 13.303200 33.055600 22.391100 2081 10.979600 84.945700 64.964200 17.173300 42.720900 30.211700 2082 17.965200 85.419200 79.437300 21.099800 45.366100 46.694100 2083 44.666000 94.841700 84.204300 33.594200 62.113100 54.716900 2084 57.000100 100.00000 84.580200 42.869500 73.250900 56.133700 2085 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 2086 5.3039200 9.4249400 8.3709500 0.6953160 0.8942350 0.7731620 2087 55.950300 6.4732600 21.462700 16.101600 8.3350800 2.5987400 2088 77.159500 12.857300 21.398400 34.409300 17.775600 2.6416900 2089 83.555200 11.707800 27.760400 42.075600 21.481700 4.1571600 2090 86.969100 53.917200 32.296500 50.358000 36.143600 6.9495000 2091 89.958900 57.034400 59.618200 57.764600 41.585600 22.664700 2092 92.477800 65.001200 65.986100 64.035400 49.431500 29.038300 2093 48.100000 33.417200 33.355000 13.394800 10.656700 6.3553900 2094 48.013900 33.982700 41.426000 14.000200 11.140600 9.7278200 2095 51.235700 33.590700 59.135000 17.745300 13.049800 21.101900 2096 74.252900 47.227600 92.625500 44.665700 31.208700 63.262900 2097 72.138300 35.369200 71.223300 35.844400 22.576900 32.773400 2098 83.328600 67.672800 71.565500 53.350900 46.042300 35.110100 2099 88.256000 71.084400 78.765800 62.147100 52.957000 44.146800 2100 93.274100 78.687000 85.109800 73.036900 64.657700 53.822600 2101 56.262300 16.052900 9.9182400 16.246100 9.0988300 0.9872220 2102 56.228800 23.805500 16.954200 16.728300 10.342200 2.0100400 2103 87.305100 23.095700 17.177800 46.924400 25.106000 2.0308500 2104 100.00000 51.628100 17.162000 68.867500 44.136600 3.1127700 2105 45.329100 81.664000 10.676400 20.401400 40.759700 4.9693900 2106 49.983400 80.837000 23.086000 22.846300 41.218900 6.8430600 2107 60.304300 94.047700 90.087700 44.104000 66.460900 63.700200 2108 6.2698700 19.338300 25.670700 1.5846100 2.2841200 3.7009800 2109 8.0731100 17.600300 33.228300 2.0527800 2.3430500 5.9508600 2110 6.7626500 17.837700 39.455400 2.4130100 2.5823200 8.4397000 2111 7.4926600 35.740900 43.543400 3.9571800 6.6586700 10.840600 2112 24.115800 38.643600 46.264700 6.6518700 8.8189500 12.416600 2113 50.700800 69.503700 64.594800 24.049700 32.804100 28.106700 2114 59.899800 92.081900 77.562500 39.747500 61.745900 45.211500 2115 15.834900 21.210800 17.535300 2.2602200 2.8366600 2.0529900 2116 26.966000 27.420000 18.144600 4.5841800 4.9825700 2.2863800 2117 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 2118 3.8764000 24.816700 7.3749500 1.1661700 2.8242800 0.9137350 2119 15.359700 93.100500 10.549000 16.261800 50.817200 6.5513000 2120 34.473200 86.948600 30.431100 18.674500 45.222400 9.5966000 2121 58.189300 94.733000 31.284500 33.420300 61.277400 11.029100 2122 71.852000 95.720200 32.478200 45.143600 68.264800 11.586000 2123 76.258600 97.984600 62.861700 53.875800 75.675400 30.223600 2124 13.464900 19.567900 6.2196600 1.6726000 2.3137500 0.7169630 2125 30.186200 38.306000 6.9878200 6.0366100 8.2593900 1.2822200 2126 37.292300 54.924200 8.8810900 10.508900 16.943600 2.2978100 2127 67.350200 71.085900 33.160000 32.690500 37.947300 8.6322800 2128 72.994300 74.327600 42.008400 39.467800 43.860100 12.670400 2129 93.437900 75.829800 58.014100 66.963400 58.778800 23.030600 2130 37.515100 64.722300 37.035700 13.683000 24.175200 9.5216500 2131 39.047900 71.848800 38.861100 16.120000 30.394300 10.954600 2132 37.991600 70.496400 58.059900 17.475400 30.211800 22.513900 2133 39.515900 90.999000 76.327500 27.953200 54.677200 43.495800 2134 24.940500 58.587700 56.594800 10.922600 19.317000 20.358700 2135 25.965600 94.537800 59.159500 22.182200 55.725400 26.462100 2136 29.877300 94.851800 67.196900 24.574400 57.387500 33.850000 2137 9.6277900 52.135300 41.985000 6.0070900 13.516400 10.830700 2138 17.808200 56.856900 59.617500 9.7855300 17.860700 22.651700 2139 10.632000 5.6930500 30.871200 1.7951100 1.2787200 5.0364400 2140 5.4801300 7.1054100 32.770600 1.5442600 1.2450700 5.6794200 2141 15.224800 7.6822600 73.406000 7.6405800 4.6909800 34.719100 2142 21.801900 7.1875900 95.425500 14.434500 8.4683500 67.150700 2143 12.155300 96.986300 30.839000 18.278700 56.605600 11.252400 2144 7.8213800 95.876100 50.809400 19.132700 55.773000 20.548500 2145 8.7388200 56.912400 34.452800 6.1706200 15.900800 7.9133600 2146 5.8651200 60.354400 49.094900 7.9019000 18.750600 15.312200 2147 30.143100 45.364600 42.622200 8.4822400 11.930900 10.774800 2148 49.717900 55.175400 41.483900 17.590100 20.676200 10.779800 2149 50.875800 60.295300 47.581900 19.762900 24.545600 14.397000 2150 58.049000 62.618600 55.949900 25.699600 28.926600 20.177100 2151 63.943000 68.024000 64.757100 32.634800 35.983700 28.122100 2152 63.529700 76.095700 70.104200 35.422500 43.625900 34.356100 2153 67.653500 75.761700 76.538400 40.098300 45.755700 41.791400 2154 75.538900 88.783400 76.265800 51.914300 64.021400 43.095300 2155 88.899500 90.362900 77.316700 68.885300 74.139100 44.641400 2156 88.714100 95.184000 84.544300 72.357600 81.629100 55.270500 2157 90.206400 94.434500 94.207300 76.920600 83.188200 70.773400 2158 3.3270500 30.698200 27.208600 2.1032000 4.4468000 4.3550200 2159 7.3569800 37.861300 29.361800 3.1248300 6.7524800 5.2065600 2160 32.858200 55.864300 44.964700 11.065100 17.836000 12.602800 2161 48.316500 60.075000 55.622900 19.303800 24.268800 19.733600 2162 8.3503800 13.372500 4.8367700 0.9631210 1.3150800 0.5160040 2163 18.763500 12.451900 5.6759800 2.0984400 1.7991300 0.5753870 2164 23.327400 8.2423900 5.3641200 2.7773700 1.8438400 0.5114330 2165 48.954400 25.222500 6.2134600 12.308400 8.3783700 0.8254190 2166 58.395900 69.349200 12.323000 24.442800 32.542800 3.8037900 2167 83.284200 74.425600 9.4812400 49.347800 48.682600 4.0163700 2168 85.831500 82.484900 13.379900 55.105900 58.637300 5.3815000 2169 85.274800 89.917000 13.286700 57.043800 67.270100 6.3821600 2170 90.964500 90.185100 13.245600 64.856300 71.415500 6.4165500 2171 53.275100 49.284000 19.133000 17.400600 17.769300 3.3128200 2172 57.360800 50.677400 43.103200 21.625900 20.562100 11.302200 2173 59.915600 56.525600 61.382900 26.611300 25.996200 24.131900 2174 66.814900 70.541700 96.007000 43.286000 43.643400 70.969100 2175 57.194100 22.068200 45.534300 18.992100 11.332400 11.540300 2176 80.296700 21.661600 64.718700 42.385400 22.997200 25.739300 2177 46.284800 13.246600 80.180600 18.095800 10.347600 43.261500 2178 45.256500 10.807100 89.132900 19.910500 11.239000 56.442000 2179 81.775000 8.2625900 92.577500 50.243300 26.095400 62.144100 2180 36.485300 29.658300 38.568200 8.5232100 7.4462800 8.2947900 2181 36.787500 33.979700 40.722700 9.1404400 8.7415800 9.3943600 2182 57.379600 34.326900 69.213900 23.300200 16.101500 30.564400 2183 77.021400 80.527900 70.701800 49.463700 54.449000 35.519100 2184 90.736300 90.919700 71.413800 70.412900 75.418200 37.707800 2185 56.082300 24.295300 8.1803600 16.471500 10.278300 0.9702800 2186 83.984800 27.669600 31.397600 43.514500 24.249500 5.5261600 2187 83.129700 63.521600 52.734900 49.141600 40.998300 17.935400 2188 78.760700 71.760000 53.114700 46.031000 45.172500 18.950000 2189 78.329400 76.093600 57.652200 47.352400 49.336100 22.772300 2190 55.502100 68.479800 41.833000 23.790300 31.719200 12.001600 2191 57.009100 78.706500 45.947400 27.971300 41.932800 15.221600 2192 60.386200 96.407100 49.106400 37.171500 65.302500 19.557500 2193 48.423300 65.249900 57.054200 20.651000 28.114600 21.241200 2194 48.495800 72.904000 59.909900 22.999500 34.784400 24.269100 2195 49.523300 91.624600 61.050200 29.921800 56.132600 27.603900 2196 85.087700 93.220500 61.654400 61.970400 73.779600 28.374100 2197 64.744900 60.492000 59.705100 30.812100 30.222600 22.988700 2198 71.425000 65.425700 62.857300 38.262400 36.972900 26.129400 2199 86.490900 67.452500 63.280200 55.815300 46.985100 26.693800 2200 68.642000 51.671600 55.334400 31.956000 26.200800 18.952200 2201 72.702200 54.685000 71.291400 38.891600 31.250200 33.794400 2202 77.814100 57.541700 83.243500 47.441100 37.144400 49.136700 2203 41.086800 27.969700 38.998200 10.167400 7.9232700 8.4374200 2204 41.136900 32.707700 38.281300 10.480400 9.0794900 8.2594600 2205 62.239900 43.344700 62.036500 26.472100 20.251800 23.956900 2206 65.139800 56.336900 70.257500 32.157900 28.752600 32.772000 2207 73.962600 78.394100 88.296000 49.800400 53.023700 58.678500 2208 74.827200 79.926300 94.417300 53.001400 56.117400 69.128100 2209 12.800700 64.192500 16.570700 7.1796000 20.554800 3.9172500 2210 82.265500 71.395900 18.934200 47.512800 45.428700 4.9695600 2211 95.135400 81.176100 26.881600 68.334200 63.951100 7.8130800 2212 93.551500 93.479600 37.112500 71.043100 78.336200 12.969700 2213 37.196100 37.187000 16.903200 8.2970500 9.0690100 2.3818900 2214 50.839000 44.462000 39.742800 16.467600 15.513500 9.3612400 2215 28.650300 25.572700 35.489300 5.7159300 5.2767900 6.9323900 2216 47.558400 23.754200 39.517500 12.902000 8.5426600 8.5718500 2217 50.927700 19.041200 36.264400 14.221700 8.5207500 7.1116800 2218 72.919700 15.453500 36.955900 30.934300 16.363100 7.3377600 2219 93.135500 12.317400 36.401400 55.659300 28.260500 7.0772100 2220 94.237000 11.220500 52.629200 58.848100 29.871000 15.764500 2221 94.545800 21.620100 62.162800 61.038700 32.145300 23.391800 2222 4.8417100 7.9243900 18.149000 0.8517230 0.8977760 1.9908700 2223 5.4441400 24.978000 20.948300 1.6159100 3.0980900 2.7458600 2224 6.4866300 35.825800 18.948100 2.4264900 5.8116900 2.6757500 2225 8.0488300 67.102800 25.545100 7.7512700 22.780000 5.9724200 2226 62.768900 92.526000 25.982100 35.584700 59.699800 9.1440100 2227 84.437000 96.117400 27.084200 58.978900 75.547800 10.004100 2228 91.355300 94.655600 25.946600 67.640800 78.016800 9.4682600 2229 97.533500 93.414600 28.515800 76.672700 80.989600 9.9716600 2230 40.100800 45.843200 6.3654000 10.149000 12.800900 1.5615100 2231 51.683700 60.405100 7.8295400 18.122300 23.633800 2.5943400 2232 63.517400 66.607600 49.920000 29.869200 33.485100 16.343100 2233 71.633000 73.506100 66.829600 41.161400 44.293800 30.677800 2234 82.042000 76.350600 74.889200 54.778500 53.450900 39.838600 2235 86.675500 80.032600 74.530800 61.653100 60.060600 39.835500 2236 20.732900 8.1132400 8.8055600 2.3572200 1.6337600 0.8010260 2237 22.921500 9.4828500 14.100500 2.8820600 1.9837700 1.3943100 2238 27.969600 3.6897500 23.790800 4.1622000 2.3029800 3.0833300 2239 30.212800 18.099800 57.988800 8.0897500 5.5688100 19.817200 2240 29.957800 27.743800 78.137600 12.260300 9.3697500 40.824700 2241 33.663500 62.533900 78.459900 17.964900 25.388200 42.983000 2242 40.998500 72.711700 91.413500 26.466200 36.892500 63.140800 2243 46.562000 60.471800 76.654400 22.226200 26.230300 40.522300 2244 44.451800 64.981200 71.801900 21.153500 28.384400 35.137100 2245 53.720300 77.019800 72.160000 29.264600 41.407700 36.729900 2246 57.397100 85.650500 78.285500 35.749800 52.796100 45.216300 2247 75.049300 95.689100 83.725400 55.970400 74.161400 54.157100 2248 82.682200 95.670500 91.471300 66.723500 79.606000 66.256000 2249 29.787400 14.357400 4.4728700 4.3849700 3.0869900 0.4962210 2250 40.061000 9.0116600 22.801700 8.0262700 4.5085400 2.9012600 2251 39.562800 19.360800 44.259300 9.5542900 6.3126700 10.804400 2252 47.060400 25.643800 58.350800 14.848200 9.9750600 20.247700 2253 56.291100 31.144400 93.053900 28.223200 18.243900 63.358300 2254 38.502600 22.952000 63.718900 11.828700 8.1211500 24.828200 2255 38.618300 27.518400 79.908800 15.407700 10.910200 43.146000 2256 40.482000 26.657700 97.977900 21.281100 14.056000 72.151100 2257 13.143800 19.480600 90.827400 12.153000 8.2943100 59.321600 2258 9.7748300 58.986600 93.447000 16.936100 23.136200 65.418200 2259 15.623000 65.469400 92.348400 18.558500 27.833000 64.039900 2260 23.670600 63.072400 92.250600 19.283100 26.660700 63.671800 2261 63.996200 72.563800 93.989500 40.833200 43.916600 67.554200 2262 79.142300 79.516800 94.495300 57.561400 57.994400 69.217500 2263 93.680200 90.823900 95.587400 80.964200 81.001800 72.687400 2264 51.727400 50.465100 64.690600 20.864400 20.313000 26.756700 2265 54.291400 56.401300 69.697500 24.275400 24.894800 32.174200 2266 31.359000 31.555100 54.724000 8.7311300 8.0874100 17.624500 2267 56.110400 42.146800 63.758300 22.279800 17.800700 25.462200 2268 56.838100 63.180400 64.822200 26.356500 29.703100 27.763700 2269 11.502600 4.9623600 0.0000000 0.9641210 0.7576970 0.0373032 2270 13.619400 8.4734400 5.9140800 1.3383300 1.1492600 0.5598650 2271 12.866200 11.339500 5.2120600 1.3138500 1.3267500 0.5257470 2272 46.445800 31.018800 22.961100 11.844400 9.3001100 3.3200600 2273 57.308900 35.752200 34.936200 19.143200 14.087000 7.0121500 2274 77.696200 43.582700 78.581000 44.043500 29.243700 41.954600 2275 65.865800 37.182500 64.996100 29.197000 19.701800 26.425200 2276 82.370400 50.720900 66.069900 47.853500 33.736400 28.100500 2277 83.770800 63.789200 65.447000 51.868400 42.656800 28.412000 2278 82.930000 86.220200 82.151700 60.749800 65.767900 50.502400 2279 95.966600 86.998700 92.037300 81.914500 77.219000 65.908700 2280 95.095300 86.848400 99.560600 82.962400 77.771800 79.575700 2281 17.205700 6.0627400 17.809900 1.9812100 1.3478000 1.9201000 2282 19.495500 1.7677000 22.132200 2.3804900 1.3114400 2.7025500 2283 78.858200 60.216400 23.815100 41.155600 34.904000 4.9854200 2284 12.631300 40.977900 7.3183900 3.1977200 7.6792800 1.4174100 2285 11.170100 50.422500 6.0609400 4.2702500 11.767900 1.7820100 2286 86.631900 55.926700 10.252200 49.435800 36.623500 2.4951300 2287 66.961500 5.6708100 20.921200 24.335500 12.343100 2.4839000 2288 92.985400 8.9047100 79.282100 61.631300 31.457900 42.022100 2289 92.594000 20.420600 92.644100 65.060500 34.516300 62.406100 2290 39.648600 4.9775600 45.727600 9.3240300 5.0374600 11.445100 2291 50.699900 10.343700 48.784600 14.936600 8.1457400 13.267300 2292 75.826600 12.519100 93.733000 44.021700 23.353000 64.185600 2293 90.618600 71.657900 93.359000 69.556400 57.352600 66.359300 2294 40.540500 49.875000 33.721900 11.860900 15.346400 7.2045000 2295 48.543400 73.041000 42.074800 20.959200 33.721400 12.568200 2296 56.018500 80.268700 53.564800 28.669100 43.752800 20.204900 2297 58.566000 88.375100 53.208800 33.128000 54.015200 21.019900 2298 64.643800 94.349200 71.074700 42.923200 65.875400 37.860100 2299 13.505700 29.064600 7.9230600 2.2332700 4.1251200 1.0613000 2300 6.9222000 27.983100 4.5479100 1.5376000 3.5666800 0.7506410 2301 62.480200 29.842000 24.493700 21.812000 13.963000 3.6386100 2302 72.165600 28.207900 31.561600 30.470300 17.928600 5.5940100 2303 79.092200 26.538400 55.062400 39.821800 22.396200 17.739400 2304 93.043500 43.764700 73.424600 62.671500 38.392700 35.610800 2305 23.178000 14.386500 19.485800 3.2143700 2.5383700 2.2891400 2306 35.612000 25.585800 18.528700 6.9058100 5.7996200 2.3089700 2307 40.548300 29.596100 15.644700 8.8901400 7.5242500 1.9490000 2308 40.957700 27.843900 32.136100 9.6294700 7.5965800 5.7757100 2309 43.060700 75.884300 55.609800 20.628800 35.976900 21.182000 2310 49.364000 80.481200 64.220300 26.372400 42.940200 28.941700 2311 85.132600 37.374600 30.759300 45.712500 27.595600 5.6188800 2312 83.526500 80.657400 29.655900 52.198100 55.533100 8.5407300 2313 81.574800 86.170100 43.194900 52.671700 61.231100 14.695800 2314 76.096400 80.581900 62.643100 47.051200 53.196900 27.505100 2315 94.093300 87.555100 77.890600 75.459900 74.329800 44.969400 2316 56.387400 52.269600 48.593900 21.776200 21.395700 14.454600 2317 69.400100 57.904200 68.537200 35.808900 31.353500 31.056300 2318 73.208700 86.685200 81.149200 49.907700 60.891300 49.175400 2319 78.259700 92.793600 84.635300 58.448600 71.922000 55.027000 2320 28.439200 33.280400 31.503500 5.9540100 6.9499900 5.7194200 2321 37.455000 43.088000 32.148300 9.6877500 11.646900 6.3102800 2322 43.630000 47.759600 60.766400 15.727200 16.598600 23.067600 2323 49.512000 52.960500 60.969100 19.423000 20.686200 23.541200 2324 38.641100 43.334900 44.922400 11.147500 12.529600 11.874600 2325 39.012800 83.712700 52.353700 21.025000 43.245500 19.798000 2326 48.898000 94.450100 54.805800 29.847200 59.347100 23.073000 2327 27.777100 80.151000 30.203500 14.494500 36.500300 8.6476100 2328 27.634300 80.542900 60.363800 17.602400 38.628500 25.508600 2329 39.379500 85.065700 65.671500 23.594300 46.013700 30.907900 2330 9.0185100 25.552500 33.289400 2.5128300 3.6842700 6.1194700 2331 7.2598200 23.524300 51.413400 3.8940500 4.1629800 15.127000 2332 9.4566200 24.968700 59.265200 5.1834100 5.1116100 20.977300 2333 8.6854200 27.483900 69.779800 7.0592400 6.6194200 30.969600 2334 49.322900 37.148700 85.299500 22.372600 16.679800 51.067900 2335 56.838800 42.551400 92.688800 29.564800 22.057500 63.145400 2336 15.925400 16.029800 28.840900 2.5149800 2.3835700 4.5152200 2337 18.119100 23.995400 36.999800 3.6802700 4.0234100 7.4988100 2338 16.606700 28.370200 37.640700 3.7842000 4.8483300 7.8654400 2339 64.770300 40.817500 36.987400 25.337800 18.626100 8.0127500 2340 61.335400 17.156600 5.5715600 19.766500 10.943200 0.6250650 2341 86.770400 19.669600 6.4047600 45.830100 24.075800 0.7340000 2342 89.516900 38.541100 54.810100 53.880200 32.128000 17.925200 2343 64.583100 52.118400 42.306400 27.129000 23.914000 10.987500 2344 63.962800 69.618000 56.249100 31.741600 36.575500 21.019300 2345 72.007200 71.991000 59.528200 39.917400 42.406800 23.857000 2346 95.343700 75.556600 78.651600 73.639100 62.143100 44.462800 2347 42.166200 7.8344100 12.780000 8.5599400 4.6782000 1.2152800 2348 47.119600 8.1168600 7.9527400 10.755700 5.7693800 0.7273600 2349 43.907000 31.193400 6.7447400 10.256300 8.5232800 1.0216900 2350 43.874400 57.258600 7.9745400 13.546200 19.637500 2.3771800 2351 45.980300 66.984900 9.6555900 16.584900 27.012700 3.3030400 2352 58.907100 86.197200 11.063400 29.857600 49.893700 5.6008600 2353 71.125500 85.759400 40.351800 41.128700 55.104200 13.258700 2354 19.822900 38.257700 3.8664000 3.7951900 7.1377700 1.0187000 2355 23.463300 63.262700 40.796000 9.8360900 21.380600 11.050300 2356 17.054400 66.170900 34.214400 8.9357400 22.771400 8.5527100 2357 14.121700 79.120200 34.206500 12.058000 34.387400 9.8790000 2358 15.266100 94.571000 70.011200 22.233800 55.936300 36.736400 2359 9.9495200 95.014300 76.228900 23.164600 57.034000 43.995600 2360 12.002900 95.869400 84.714600 25.779000 59.534600 55.632100 2361 40.417000 78.848300 45.314600 19.220800 37.743800 14.888400 2362 67.310000 79.761700 44.260900 36.009700 46.824800 14.429800 2363 78.568000 91.842300 55.667500 52.742700 67.561000 23.304400 2364 27.711300 22.742000 5.8128000 4.2300000 4.0065000 0.7398830 2365 26.510700 49.716300 6.4885800 6.5354300 12.579100 1.7771600 2366 26.673100 75.272600 9.0941100 12.049000 31.002300 4.0708800 2367 41.424400 83.209800 25.727300 19.660400 41.912200 7.7674900 2368 41.470600 87.486200 81.104700 28.521200 51.198600 49.225400 2369 35.671800 36.772800 41.218300 9.0544000 9.4313000 9.7243700 2370 49.213500 38.699400 75.093500 20.000100 15.762600 37.373000 2371 61.425600 43.303200 75.247200 28.327500 21.346500 37.753400 2372 55.999700 60.298200 67.243500 25.636700 27.659700 29.907000 2373 56.993400 63.979400 77.906900 29.246100 31.832600 42.387200 2374 80.073700 73.754500 90.682700 55.757900 52.123000 62.030500 2375 95.275100 80.067100 92.111000 78.509300 68.752100 65.137900 2376 47.605500 37.700700 38.934800 13.929300 12.077500 8.7132600 2377 76.894900 50.512400 38.197300 38.136200 28.589000 9.0003600 2378 92.613800 60.834100 40.696400 60.136300 44.691600 10.810700 2379 92.048000 73.267800 41.562000 62.320700 54.267900 12.341600 2380 95.191300 86.622300 55.495200 72.776100 71.710400 22.422300 2381 72.444500 66.752500 43.352100 37.104700 37.093400 12.603200 2382 71.845500 82.339400 60.480200 42.981400 52.816200 25.830000 2383 26.895100 29.267600 23.607300 4.8871000 5.5065200 3.4164700 2384 39.106600 30.530200 48.440300 10.449800 8.6503800 13.415900 2385 71.501600 40.390500 54.741400 33.035300 22.422900 17.948900 2386 86.478000 51.015900 60.239100 52.121600 35.894100 22.800600 2387 92.698800 61.672700 69.741300 64.333600 47.561100 32.608000 2388 96.556900 61.741500 83.599800 73.363100 52.294700 49.962600 2389 50.429200 11.090800 38.749400 13.867000 7.5980000 8.0455900 2390 68.181500 18.712100 40.457500 26.894300 14.748200 8.9095100 2391 70.566300 29.222500 39.264100 29.547000 17.716000 8.5880500 2392 57.484100 14.150300 58.548500 20.448700 11.258800 20.212900 2393 84.481600 11.616200 85.782500 51.680500 26.871800 51.232100 2394 85.885400 29.784500 87.840300 54.899800 30.970700 54.722300 2395 24.549800 22.092200 26.741600 4.0875100 3.8885800 4.0274400 2396 22.663400 23.018800 37.398600 4.4103300 4.2343700 7.6426900 2397 19.699700 34.684300 51.015700 6.0008500 7.4527300 15.163600 2398 19.142700 46.946500 51.128000 7.2867100 12.015800 15.754900 2399 15.787400 51.346000 57.944600 8.3421000 14.451800 20.937200 2400 11.571200 71.485600 68.044200 13.679100 29.210500 31.701700 2401 9.8597100 82.089400 81.278700 19.500200 41.337200 48.749500 2402 28.854200 79.454200 68.405500 18.915400 38.390700 32.945100 2403 26.801800 96.050700 82.012900 27.511900 60.557900 51.780600 2404 8.1550500 40.856300 38.428300 4.0875600 8.1805100 8.6187200 2405 8.6166500 47.641800 43.361900 5.3828800 11.289600 11.265600 2406 29.201300 46.640800 92.931400 17.902800 17.804600 63.758700 2407 23.219900 25.494200 46.599300 5.4638900 5.2140900 12.207800 2408 27.001100 30.668200 62.341200 8.6568600 7.9429800 23.761100 2409 34.045200 40.926900 62.018500 11.460000 12.049500 23.834400 2410 76.845400 52.699800 61.442600 41.082300 31.237700 23.935300 2411 25.689800 19.294400 13.370000 3.7401300 3.3082100 1.4196200 2412 33.646300 21.304800 10.120900 5.8445000 4.6019300 1.0900900 2413 53.838000 36.648600 5.6760600 15.939900 12.666700 1.1095700 2414 61.143000 37.995400 7.6929400 21.035700 15.557900 1.3287100 2415 69.903300 36.527200 8.4141400 28.186600 18.668600 1.3352600 2416 70.405700 59.775300 14.728600 32.088900 30.162700 3.2981200 2417 79.118700 59.896500 9.8382700 40.987100 34.606300 2.7366700 2418 79.549500 94.735100 7.7565400 51.945600 70.340800 6.5512900 2419 95.136400 96.143100 8.9784600 73.405400 82.641100 6.8850600 2420 53.678100 55.215000 4.6763600 18.282800 20.912200 1.9611700 2421 55.266800 56.679900 84.764000 28.363700 27.324100 51.288900 2422 55.555600 63.154300 93.156300 32.242000 33.116000 65.235100 2423 57.410200 73.016300 93.978800 36.106500 41.940900 67.581800 2424 6.0957200 13.635000 40.169000 2.2784800 2.1012200 8.7078000 2425 5.6929000 8.2970200 67.800600 5.6959400 3.6819300 28.604400 2426 25.021700 13.812800 86.748000 12.620700 7.8336200 52.725200 2427 22.189500 14.495600 59.285700 6.3576600 4.3585900 20.818700 2428 40.334700 16.196000 59.739600 11.610300 7.1161600 21.217200 2429 46.038700 18.660200 72.712600 16.498900 9.9776600 34.041800 2430 64.048500 23.114600 81.504600 30.119800 17.443300 45.220000 2431 74.871900 69.492900 82.813800 46.786400 44.297600 49.510800 2432 80.225100 73.489500 82.453600 53.598300 50.671100 49.399600 2433 87.710000 78.253000 85.174700 65.034600 60.334800 53.868800 2434 93.741700 89.482300 88.797600 78.463000 78.111900 60.922100 2435 53.267500 11.226100 15.651900 14.350700 7.7551400 1.6257700 2436 69.796100 14.847300 17.944500 26.982900 14.284200 2.0244100 2437 73.259100 25.920800 17.579700 30.794200 17.620500 2.1565900 2438 83.105100 46.418700 20.030200 43.729200 29.584000 3.3251800 2439 58.617100 38.063500 22.781500 19.617000 14.909700 3.5158200 2440 64.798200 50.777300 23.579200 25.909900 22.616500 4.3011600 2441 79.827600 54.955900 27.033500 41.425700 32.230900 5.4175700 2442 84.065900 67.948500 34.191900 49.588500 44.006400 8.7043900 2443 56.896000 46.355800 58.502600 22.501400 19.356300 21.110700 2444 83.818900 45.930900 70.356100 49.746200 32.771100 32.266200 2445 26.103400 18.295900 78.997300 11.032300 7.3513000 41.754400 2446 25.500500 33.293000 84.028000 13.056500 11.064500 49.061400 2447 44.343400 40.738700 85.075700 20.226100 16.690200 50.876100 2448 46.291400 40.139300 94.400800 23.800500 18.476400 66.031400 2449 49.909800 56.197100 96.839200 28.727200 27.536600 71.318200 2450 53.767400 81.578600 95.334700 36.759500 49.670400 70.970900 2451 18.218500 65.371600 65.306200 12.494500 24.278400 28.410200 2452 16.796600 77.433800 79.335100 18.317100 36.495800 45.570100 2453 25.138800 83.371800 91.623700 24.946600 45.479500 64.724600 2454 45.850700 87.050500 93.344200 33.721200 53.568700 68.162200 2455 71.579500 86.776400 92.796800 51.578000 62.063700 67.177500 2456 78.268900 93.341600 96.721700 62.277600 74.735400 75.146700 2457 20.260400 30.062600 26.722400 3.7794900 5.1354900 4.2069200 2458 27.259400 53.818700 26.599600 7.9279100 15.173900 5.2285100 2459 34.678800 59.552200 25.077700 10.945100 19.650100 5.2364100 2460 33.442300 59.989400 60.044900 13.868600 21.592700 23.235500 2461 38.033700 61.609000 65.828800 16.674500 23.993200 28.605900 2462 47.282100 61.846700 71.326400 21.735600 26.708800 34.348700 2463 47.056400 82.427900 74.417700 27.757600 45.603000 39.995800 2464 53.179100 91.811500 80.761700 35.973500 59.635600 49.385800 2465 52.733800 95.130500 89.290600 39.344800 65.407600 62.577700 2466 61.677300 59.149600 46.110800 26.451300 27.178500 13.465900 2467 66.625600 69.311400 45.681000 32.624300 36.690800 14.080400 2468 92.700300 71.536500 59.770500 64.941700 54.388200 24.013400 2469 48.752400 39.735700 28.832400 14.069500 12.697100 5.1224300 2470 52.124600 47.070100 35.155800 17.197900 16.830300 7.5831800 2471 77.850100 48.785700 45.790800 39.590000 28.622200 12.624600 2472 80.554800 67.540700 76.573100 51.054900 44.903900 41.010800 2473 80.634300 84.684900 93.258900 60.588100 64.372300 67.693900 2474 7.4987300 23.661900 24.542900 1.8314300 3.0035800 3.5027700 2475 10.485900 27.860400 47.564600 3.9722900 4.9130700 12.823200 2476 4.3182500 37.855800 51.020400 4.7134500 7.6759000 15.279800 2477 5.1910600 45.671700 51.877900 5.7721400 10.787600 16.187400 2478 52.300000 50.132100 54.879300 19.671100 19.463900 18.527600 2479 6.1169800 19.599200 11.522500 1.1365700 2.0606800 1.2067000 2480 4.1058500 16.218500 14.312300 0.9196330 1.5739800 1.4963700 2481 10.579600 14.510700 20.012100 1.5123600 1.7127900 2.3882300 2482 13.003900 17.094100 18.137800 1.7759400 2.0961000 2.0869000 2483 29.949300 39.181500 20.601100 6.3846700 8.7154000 3.1084700 2484 44.729000 47.417700 18.664400 12.602100 14.640200 3.1289300 2485 52.010000 62.432800 24.573000 19.189700 25.397400 5.3361400 2486 35.912400 70.031400 19.802000 13.491100 27.659900 4.9930600 2487 38.990200 88.725000 18.929100 20.400200 47.926600 7.0592800 2488 54.489100 88.797500 16.214900 28.010400 51.747200 6.6234700 2489 60.558200 64.060900 10.992500 24.717800 29.099100 3.1846600 2490 67.268000 63.696100 7.0487300 29.930900 31.431300 2.7912000 2491 93.158500 79.982200 39.711600 65.774600 61.654200 12.229400 2492 92.339800 85.954900 43.618800 66.907200 68.024400 14.883400 2493 48.438500 31.684300 16.838700 12.691100 9.8483500 2.1886100 2494 50.942600 70.668100 34.223600 21.025700 31.895400 8.9740700 2495 54.216200 75.117600 79.438400 30.618600 40.607200 45.449700 2496 14.667400 17.521400 58.776800 5.2705100 4.1240800 20.442400 2497 10.019100 34.243900 79.717700 9.8147100 9.6160700 43.083800 2498 11.819400 53.612700 80.711200 12.619600 17.953200 45.336800 2499 11.773600 76.034500 84.041900 18.501700 35.490000 51.949300 2500 9.7657900 73.575200 93.912800 20.470700 34.678800 67.524100 2501 13.450300 88.281300 96.057600 26.249800 51.264800 73.173400 2502 11.684400 96.365200 94.733500 28.888100 61.912800 72.019500 2503 21.036800 50.479700 65.338800 10.153000 15.052500 27.377000 2504 19.715500 50.564800 92.284200 16.315500 18.626900 62.862400 2505 27.172900 57.784400 92.587100 19.080200 23.513600 63.844300 2506 28.661700 5.4467700 34.259000 4.9234800 2.8221500 6.1985900 2507 34.624200 10.611900 45.604900 7.6549000 4.5516000 11.421300 2508 33.531600 7.7443700 51.811700 7.9289000 4.5599900 15.181500 2509 52.746500 24.844700 55.037300 17.432400 11.077700 17.682600 2510 65.168800 27.458700 69.555100 28.664600 17.252500 30.729500 2511 73.239700 36.757900 83.158100 39.767200 25.094600 47.923500 2512 81.747500 39.716400 85.068600 49.864800 30.968000 50.823300 2513 81.942500 51.596100 86.597700 52.062800 36.561600 53.721500 2514 23.337600 5.0608000 39.167600 4.0975000 2.4217400 8.1811800 2515 26.724800 5.5233000 59.182500 7.0571800 4.0818900 20.652100 2516 66.665400 13.273000 63.496200 28.191600 15.056300 24.475100 2517 81.486400 16.532900 75.352500 45.623500 24.128700 37.124500 2518 91.915200 12.226400 65.110000 57.253400 29.305800 25.978200 2519 96.931600 14.967000 73.115500 66.496600 34.215400 34.454000 2520 31.722600 6.2752100 7.0620600 4.7579200 2.7092000 0.6394110 2521 53.394800 10.666300 1.7875600 14.164100 7.6031300 0.2325850 2522 75.959700 12.193800 5.6178800 32.735400 16.868000 0.5678760 2523 83.293200 30.206800 7.5946600 42.019600 23.956100 1.0651400 2524 94.233400 30.355100 7.4588000 57.047000 31.388400 1.0579900 2525 94.730200 51.062200 7.6897800 60.112400 39.555300 1.9550600 2526 94.951800 62.705900 34.328400 63.568500 47.463500 8.3021400 2527 94.615100 71.351900 46.956600 66.156600 54.720000 14.999500 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 96.41600 99.99690 82.48800 1 0.000000 67.45460 100.0000 20.21840 30.18340 78.23010 2 100.0000 0.000000 69.46800 70.45640 35.13010 30.27950 3 0.000000 0.000000 70.02640 5.542030 3.166550 30.87730 4 100.0000 65.46120 0.000000 71.18840 52.87630 2.349460 5 0.000000 49.64810 0.000000 3.227580 10.91320 1.229660 6 100.0000 4.373660 4.349220 65.17320 32.35370 0.397234 7 3.095820 3.216760 3.448330 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 96.4160 99.9969 82.4880 1 0.00000 100.000 100.000 31.3944 67.9720 82.4880 2 100.000 0.00000 100.000 78.6094 39.7885 75.7040 3 0.00000 0.00000 100.000 13.5878 7.76364 75.7040 4 100.000 100.000 0.00000 82.8282 92.2333 6.78405 5 0.00000 100.000 0.00000 17.8066 60.2084 6.78405 6 100.000 0.00000 0.00000 65.0216 32.0249 0.00000 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 17.7583 18.4178 15.1930 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s41-g121-m0-f2527-cRec709_Gamma22.ti1000644 000765 000000 00000603414 12261120515 024247 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "2280" CREATED "Wed Dec 18 02:44:24 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "121" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045781 100.000003 108.905751" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "41" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 2527 BEGIN_DATA 1 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 2 33.06880000 32.28970000 17.21750000 6.970690000 7.968850000 3.146350000 3 42.70280000 37.42530000 28.71880000 11.62630000 11.97290000 7.784410000 4 54.74630000 51.20380000 38.04350000 21.32140000 22.92360000 14.59640000 5 56.30370000 71.54510000 39.45740000 31.11640000 41.19130000 18.55000000 6 60.02670000 100.0000000 79.20990000 59.99090000 82.76430000 69.48230000 7 62.18470000 97.53630000 97.04050000 65.25110000 81.93930000 100.9410000 8 73.00400000 100.0000000 100.0000000 74.45030000 89.38240000 107.9420000 9 46.90870000 68.17150000 49.56070000 27.05540000 36.36050000 25.79890000 10 73.18710000 79.97340000 61.07890000 48.73450000 56.89310000 40.40790000 11 81.43870000 100.0000000 69.33250000 70.07770000 88.28140000 55.62720000 12 0.000000000 16.30430000 0.000000000 0.662289000 1.324680000 0.220790000 13 0.000000000 11.65800000 0.000000000 0.316716000 0.633478000 0.105585000 14 0.000000000 3.554500000 0.000000000 0.023238600 0.046480700 0.007747160 15 0.000000000 10.20410000 0.000000000 0.236288000 0.472611000 0.078772400 16 3.554500000 0.000000000 0.000000000 0.026800800 0.013816600 0.001254670 17 12.15280000 12.15280000 12.15280000 0.922432000 0.970513000 1.056940000 18 0.000000000 13.77260000 19.05990000 0.928265000 1.102520000 2.634340000 19 33.78370000 16.89420000 17.74780000 4.910650000 3.548230000 2.537910000 20 51.89260000 29.68570000 33.21590000 13.81720000 10.61130000 9.700860000 21 53.62250000 34.85490000 39.81560000 16.37620000 13.39510000 14.20720000 22 19.66290000 0.000000000 0.000000000 1.153130000 0.594475000 0.053983500 23 21.42860000 0.000000000 0.000000000 1.393190000 0.718230000 0.065221500 24 23.25580000 0.000000000 0.000000000 1.667890000 0.859845000 0.078081400 25 25.14790000 0.000000000 0.000000000 1.980960000 1.021240000 0.092737800 26 27.10840000 0.000000000 0.000000000 2.336550000 1.204560000 0.109385000 27 29.14110000 0.000000000 0.000000000 2.739270000 1.412170000 0.128237000 28 31.25000000 0.000000000 0.000000000 3.194240000 1.646720000 0.149537000 29 33.43950000 0.000000000 0.000000000 3.707200000 1.911170000 0.173551000 30 35.71430000 0.000000000 0.000000000 4.284540000 2.208810000 0.200579000 31 38.07950000 0.000000000 0.000000000 4.933440000 2.543340000 0.230957000 32 40.54050000 0.000000000 0.000000000 5.661950000 2.918900000 0.265062000 33 43.10340000 0.000000000 0.000000000 6.479100000 3.340170000 0.303316000 34 45.77460000 0.000000000 0.000000000 7.395080000 3.812380000 0.346197000 35 48.56120000 0.000000000 0.000000000 8.421380000 4.341470000 0.394243000 36 51.47060000 0.000000000 0.000000000 9.571020000 4.934140000 0.448063000 37 54.51130000 0.000000000 0.000000000 10.85870000 5.597990000 0.508346000 38 57.69230000 0.000000000 0.000000000 12.30120000 6.341650000 0.575877000 39 61.02360000 0.000000000 0.000000000 13.91760000 7.174960000 0.651548000 40 64.51610000 0.000000000 0.000000000 15.72970000 8.109140000 0.736381000 41 68.18180000 0.000000000 0.000000000 17.76250000 9.157080000 0.831542000 42 72.03390000 0.000000000 0.000000000 20.04450000 10.33350000 0.938374000 43 76.08700000 0.000000000 0.000000000 22.60880000 11.65550000 1.058420000 44 80.35710000 0.000000000 0.000000000 25.49360000 13.14270000 1.193470000 45 84.86240000 0.000000000 0.000000000 28.74300000 14.81790000 1.345590000 46 100.0000000 65.51850000 61.18160000 61.47440000 51.93130000 38.89740000 47 100.0000000 80.04910000 64.82680000 70.11570000 67.88470000 45.87990000 48 44.58080000 46.98170000 0.000000000 13.76740000 17.17790000 2.590230000 49 64.73620000 50.80420000 0.000000000 23.91240000 24.30020000 3.430390000 50 59.99940000 57.33250000 20.45220000 24.47990000 28.17550000 7.033290000 51 61.36150000 67.92200000 65.45070000 36.46660000 40.65320000 43.17320000 52 8.793970000 8.793970000 8.793970000 0.452861000 0.476466000 0.518899000 53 8.780640000 0.000000000 9.519220000 0.298209000 0.141911000 0.548298000 54 0.000000000 0.000000000 1.152070000 0.000984574 0.000393855 0.005184950 55 7.877280000 7.877280000 7.877280000 0.355486000 0.374016000 0.407325000 56 0.000000000 6.097560000 0.000000000 0.076147800 0.152307000 0.025385700 57 0.000000000 7.425740000 0.000000000 0.117456000 0.234929000 0.039156800 58 8.333330000 8.333330000 8.333330000 0.402325000 0.423296000 0.460994000 59 0.000000000 13.15790000 0.000000000 0.413298000 0.826656000 0.137783000 60 0.000000000 14.70590000 0.000000000 0.527832000 1.055740000 0.175966000 61 0.000000000 17.95580000 0.000000000 0.818838000 1.637800000 0.272980000 62 0.000000000 19.66290000 0.000000000 0.999867000 1.999880000 0.333330000 63 0.000000000 21.42860000 0.000000000 1.208020000 2.416210000 0.402721000 64 0.000000000 23.25580000 0.000000000 1.446200000 2.892620000 0.482127000 65 0.000000000 25.14790000 0.000000000 1.717660000 3.435580000 0.572625000 66 0.000000000 27.10840000 0.000000000 2.025990000 4.052280000 0.675413000 67 0.000000000 29.14110000 0.000000000 2.375180000 4.750710000 0.791824000 68 0.000000000 31.25000000 0.000000000 2.769680000 5.539770000 0.923340000 69 0.000000000 33.43950000 0.000000000 3.214460000 6.429390000 1.071620000 70 0.000000000 35.71430000 0.000000000 3.715070000 7.430680000 1.238510000 71 0.000000000 38.07950000 0.000000000 4.277720000 8.556070000 1.426080000 72 0.000000000 40.54050000 0.000000000 4.909400000 9.819520000 1.636670000 73 0.000000000 43.10340000 0.000000000 5.617940000 11.23670000 1.872880000 74 0.000000000 45.77460000 0.000000000 6.412170000 12.82530000 2.137650000 75 0.000000000 48.56120000 0.000000000 7.302060000 14.60520000 2.434320000 76 0.000000000 51.47060000 0.000000000 8.298890000 16.59900000 2.766640000 77 0.000000000 54.51130000 0.000000000 9.415440000 18.83230000 3.138870000 78 0.000000000 57.69230000 0.000000000 10.66620000 21.33400000 3.555850000 79 0.000000000 61.02360000 0.000000000 12.06780000 24.13740000 4.023090000 80 0.000000000 64.51610000 0.000000000 13.63900000 27.28010000 4.546910000 81 0.000000000 68.18180000 0.000000000 15.40160000 30.80550000 5.134500000 82 0.000000000 72.03390000 0.000000000 17.38030000 34.76320000 5.794150000 83 0.000000000 76.08700000 0.000000000 19.60380000 39.21050000 6.535400000 84 0.000000000 80.35710000 0.000000000 22.10510000 44.21350000 7.369280000 85 0.000000000 84.86240000 0.000000000 24.92260000 49.84900000 8.308570000 86 24.86370000 100.0000000 0.000000000 37.68940000 72.51590000 12.01100000 87 71.41810000 100.0000000 33.34230000 57.03910000 82.30510000 21.33200000 88 100.0000000 100.0000000 62.65780000 83.45200000 95.36220000 47.85100000 89 15.27510000 0.000000000 19.16350000 1.138730000 0.531958000 2.542740000 90 61.75050000 0.000000000 18.39650000 14.72080000 7.538650000 2.964690000 91 86.68820000 0.000000000 21.16200000 30.71380000 15.76540000 4.534190000 92 100.0000000 0.000000000 39.50740000 43.57990000 22.19630000 14.26110000 93 100.0000000 30.53850000 62.14290000 50.21150000 29.06200000 36.19680000 94 100.0000000 100.0000000 74.46730000 86.43420000 96.55520000 63.55580000 95 10.20410000 10.20410000 10.20410000 0.628073000 0.660811000 0.719661000 96 0.000000000 0.000000000 2.336450000 0.004662040 0.001864930 0.024551100 97 0.000000000 0.000000000 6.097560000 0.038438800 0.015376500 0.202426000 98 0.000000000 0.000000000 13.15790000 0.208629000 0.083457100 1.098680000 99 0.000000000 0.000000000 14.70590000 0.266445000 0.106585000 1.403150000 100 0.000000000 0.000000000 16.30430000 0.334318000 0.133736000 1.760580000 101 0.000000000 0.000000000 17.95580000 0.413343000 0.165348000 2.176740000 102 0.000000000 0.000000000 19.66290000 0.504725000 0.201903000 2.657970000 103 0.000000000 0.000000000 21.42860000 0.609797000 0.243934000 3.211300000 104 0.000000000 9.373500000 22.78950000 0.894267000 0.671423000 3.742330000 105 0.000000000 0.000000000 25.14790000 0.867063000 0.346847000 4.566110000 106 0.000000000 0.000000000 27.10840000 1.022700000 0.409108000 5.385750000 107 0.000000000 0.000000000 29.14110000 1.198970000 0.479619000 6.314000000 108 0.000000000 0.000000000 35.71430000 1.875340000 0.750182000 9.875860000 109 27.82960000 45.17830000 55.72240000 13.69350000 15.73220000 28.46140000 110 11.65800000 11.65800000 11.65800000 0.841855000 0.885737000 0.964618000 111 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 112 29.67640000 31.83240000 0.000000000 5.735600000 7.239200000 1.095080000 113 28.91880000 42.84260000 64.44840000 15.10590000 15.22400000 38.14750000 114 48.89620000 87.53870000 94.03490000 51.00010000 64.08650000 92.32510000 115 94.66020000 94.66020000 94.66020000 84.24030000 88.63130000 96.52450000 116 96.40520000 96.40520000 96.40520000 87.69330000 92.26430000 100.4810000 117 0.000000000 0.000000000 43.10340000 2.835890000 1.134430000 14.93430000 118 0.000000000 0.000000000 57.69230000 5.384230000 2.153830000 28.35430000 119 0.000000000 0.000000000 61.02360000 6.091730000 2.436850000 32.08010000 120 0.000000000 0.000000000 64.51610000 6.884880000 2.754130000 36.25700000 121 0.000000000 0.000000000 68.18180000 7.774600000 3.110040000 40.94250000 122 0.000000000 0.000000000 72.03390000 8.773440000 3.509600000 46.20250000 123 0.000000000 0.000000000 76.08700000 9.895840000 3.958590000 52.11330000 124 0.000000000 0.000000000 80.35710000 11.15850000 4.463680000 58.76260000 125 0.000000000 0.000000000 84.86240000 12.58070000 5.032620000 66.25250000 126 0.000000000 0.000000000 89.62260000 14.18510000 5.674420000 74.70150000 127 0.000000000 0.000000000 94.66020000 15.99790000 6.399590000 84.24810000 128 30.79020000 16.97630000 100.0000000 21.86560000 10.26210000 95.44070000 129 0.000000000 0.000000000 10.20410000 0.119276000 0.047713600 0.628131000 130 11.65800000 0.000000000 0.000000000 0.365264000 0.188305000 0.017099700 131 0.000000000 4.807690000 0.000000000 0.045149700 0.090306100 0.015051800 132 0.000000000 0.000000000 8.793970000 0.086002100 0.034403000 0.452903000 133 8.793970000 0.000000000 0.000000000 0.196487000 0.101295000 0.009198460 134 2.336450000 0.000000000 0.000000000 0.010651300 0.005491040 0.000498634 135 0.000000000 0.000000000 3.554500000 0.011730700 0.004692570 0.061775900 136 0.000000000 2.336450000 0.000000000 0.009235560 0.018472500 0.003078900 137 9.259260000 9.259260000 9.259260000 0.507234000 0.533673000 0.581200000 138 7.425740000 0.000000000 0.000000000 0.135460000 0.069833900 0.006341520 139 0.380518000 0.380518000 0.380518000 0.000453573 0.000477216 0.000519715 140 0.764526000 0.764526000 0.764526000 0.002104020 0.002213690 0.002410830 141 1.152070000 1.152070000 1.152070000 0.005184460 0.005454700 0.005940480 142 1.543210000 1.543210000 1.543210000 0.009860140 0.010374100 0.011298000 143 1.937980000 1.937980000 1.937980000 0.016272000 0.017120200 0.018644900 144 2.336450000 2.336450000 2.336450000 0.024548800 0.025828400 0.028128700 145 2.738650000 2.738650000 2.738650000 0.034812500 0.036627100 0.039889000 146 3.144650000 3.144650000 3.144650000 0.047181000 0.049640300 0.054061100 147 6.097560000 0.000000000 0.000000000 0.087820400 0.045274000 0.004111270 148 3.554500000 3.554500000 3.554500000 0.061770100 0.064989900 0.070777700 149 3.968250000 3.968250000 3.968250000 0.078694900 0.082796800 0.090170500 150 5.663430000 5.663430000 5.663430000 0.172061000 0.181029000 0.197151000 151 13.15790000 0.000000000 0.000000000 0.476651000 0.245728000 0.022314200 152 6.535950000 6.535950000 6.535950000 0.235796000 0.248087000 0.270181000 153 4.385960000 4.385960000 4.385960000 0.098070200 0.103182000 0.112371000 154 4.807690000 4.807690000 4.807690000 0.120012000 0.126267000 0.137512000 155 0.000000000 8.793970000 0.000000000 0.170371000 0.340768000 0.056797400 156 5.233490000 5.233490000 5.233490000 0.144636000 0.152175000 0.165727000 157 6.097560000 6.097560000 6.097560000 0.202407000 0.212957000 0.231923000 158 6.978650000 6.978650000 6.978650000 0.272354000 0.286550000 0.312070000 159 12.65270000 12.65270000 12.65270000 1.007950000 1.060490000 1.154930000 160 13.15790000 13.15790000 13.15790000 1.098580000 1.155840000 1.258780000 161 14.18440000 14.18440000 14.18440000 1.295920000 1.363470000 1.484900000 162 14.70590000 14.70590000 14.70590000 1.403020000 1.476150000 1.607610000 163 15.23300000 15.23300000 15.23300000 1.515990000 1.595020000 1.737060000 164 16.30430000 16.30430000 16.30430000 1.760420000 1.852180000 2.017130000 165 16.84880000 16.84880000 16.84880000 1.892300000 1.990930000 2.168240000 166 17.39930000 17.39930000 17.39930000 2.030930000 2.136790000 2.327090000 167 17.95580000 17.95580000 17.95580000 2.176540000 2.289990000 2.493930000 168 18.51850000 18.51850000 18.51850000 2.329370000 2.450790000 2.669050000 169 19.08750000 19.08750000 19.08750000 2.489680000 2.619460000 2.852740000 170 19.66290000 19.66290000 19.66290000 2.657730000 2.796260000 3.045290000 171 20.24480000 20.24480000 20.24480000 2.833780000 2.981490000 3.247010000 172 20.83330000 20.83330000 20.83330000 3.018100000 3.175420000 3.458220000 173 21.42860000 21.42860000 21.42860000 3.211000000 3.378370000 3.679240000 174 22.03070000 22.03070000 22.03070000 3.412760000 3.590650000 3.910430000 175 22.63970000 22.63970000 22.63970000 3.623700000 3.812580000 4.152120000 176 23.25580000 23.25580000 23.25580000 3.844120000 4.044500000 4.404690000 177 23.87910000 23.87910000 23.87910000 4.074370000 4.286740000 4.668510000 178 24.50980000 24.50980000 24.50980000 4.314770000 4.539670000 4.943970000 179 25.14790000 25.14790000 25.14790000 4.565690000 4.803670000 5.231470000 180 25.79370000 25.79370000 25.79370000 4.827480000 5.079110000 5.531450000 181 26.44710000 26.44710000 26.44710000 5.100540000 5.366400000 5.844320000 182 27.10840000 27.10840000 27.10840000 5.385240000 5.665950000 6.170540000 183 27.77780000 27.77780000 27.77780000 5.682010000 5.978180000 6.510580000 184 28.45530000 28.45530000 28.45530000 5.991250000 6.303550000 6.864920000 185 29.14110000 29.14110000 29.14110000 6.313420000 6.642500000 7.234060000 186 29.83540000 29.83540000 29.83540000 6.648950000 6.995520000 7.618530000 187 30.53830000 30.53830000 30.53830000 6.998320000 7.363110000 8.018850000 188 31.25000000 31.25000000 31.25000000 7.362030000 7.745770000 8.435590000 189 31.97060000 31.97060000 31.97060000 7.740570000 8.144040000 8.869330000 190 32.70040000 32.70040000 32.70040000 8.134470000 8.558480000 9.320680000 191 33.43950000 33.43950000 33.43950000 8.544290000 8.989650000 9.790250000 192 34.18800000 34.18800000 34.18800000 8.970570000 9.438160000 10.27870000 193 34.94620000 34.94620000 34.94620000 9.413920000 9.904620000 10.78670000 194 35.71430000 35.71430000 35.71430000 9.874940000 10.38970000 11.31490000 195 36.49240000 36.49240000 36.49240000 10.35430000 10.89400000 11.86420000 196 37.28070000 37.28070000 37.28070000 10.85260000 11.41830000 12.43510000 197 38.07950000 38.07950000 38.07950000 11.37050000 11.96320000 13.02860000 198 38.88890000 38.88890000 38.88890000 11.90880000 12.52960000 13.64540000 199 39.70920000 39.70920000 39.70920000 12.46830000 13.11820000 14.28640000 200 40.54050000 40.54050000 40.54050000 13.04960000 13.72980000 14.95250000 201 41.38320000 41.38320000 41.38320000 13.65360000 14.36520000 15.64460000 202 42.23740000 42.23740000 42.23740000 14.28100000 15.02540000 16.36360000 203 43.10340000 43.10340000 43.10340000 14.93290000 15.71130000 17.11050000 204 43.98150000 43.98150000 43.98150000 15.61010000 16.42380000 17.88640000 205 44.87180000 44.87180000 44.87180000 16.31350000 17.16380000 18.69240000 206 45.77460000 45.77460000 45.77460000 17.04410000 17.93250000 19.52950000 207 46.69030000 46.69030000 46.69030000 17.80290000 18.73080000 20.39900000 208 47.61900000 47.61900000 47.61900000 18.59100000 19.56000000 21.30200000 209 48.56120000 48.56120000 48.56120000 19.40950000 20.42120000 22.23980000 210 49.51690000 49.51690000 49.51690000 20.25950000 21.31550000 23.21380000 211 50.48660000 50.48660000 50.48660000 21.14230000 22.24440000 24.22540000 212 51.47060000 51.47060000 51.47060000 22.05910000 23.20890000 25.27590000 213 52.46910000 52.46910000 52.46910000 23.01130000 24.21070000 26.36680000 214 53.48260000 53.48260000 53.48260000 24.00010000 25.25110000 27.49990000 215 54.51130000 54.51130000 54.51130000 25.02700000 26.33150000 28.67650000 216 55.55560000 55.55560000 55.55560000 26.09350000 27.45360000 29.89860000 217 56.61580000 56.61580000 56.61580000 27.20120000 28.61910000 31.16780000 218 57.69230000 57.69230000 57.69230000 28.35170000 29.82950000 32.48600000 219 58.78550000 58.78550000 58.78550000 29.54660000 31.08670000 33.85530000 220 59.89580000 59.89580000 59.89580000 30.78780000 32.39260000 35.27750000 221 61.02360000 61.02360000 61.02360000 32.07720000 33.74920000 36.75480000 222 62.16930000 62.16930000 62.16930000 33.41650000 35.15840000 38.28950000 223 63.33330000 63.33330000 63.33330000 34.80800000 36.62230000 39.88380000 224 64.51610000 64.51610000 64.51610000 36.25370000 38.14340000 41.54030000 225 65.71820000 65.71820000 65.71820000 37.75580000 39.72380000 43.26150000 226 66.93990000 66.93990000 66.93990000 39.31660000 41.36600000 45.04990000 227 68.18180000 68.18180000 68.18180000 40.93870000 43.07260000 46.90850000 228 69.44440000 69.44440000 69.44440000 42.62450000 44.84630000 48.84020000 229 70.72830000 70.72830000 70.72830000 44.37670000 46.68990000 50.84790000 230 72.03390000 72.03390000 72.03390000 46.19820000 48.60630000 52.93510000 231 73.36180000 73.36180000 73.36180000 48.09190000 50.59870000 55.10490000 232 74.71260000 74.71260000 74.71260000 50.06090000 52.67030000 57.36100000 233 76.08700000 76.08700000 76.08700000 52.10840000 54.82460000 59.70710000 234 77.48540000 77.48540000 77.48540000 54.23790000 57.06500000 62.14710000 235 78.90860000 78.90860000 78.90860000 56.45290000 59.39550000 64.68510000 236 80.35710000 80.35710000 80.35710000 58.75720000 61.81990000 67.32540000 237 81.83180000 81.83180000 81.83180000 61.15470000 64.34240000 70.07250000 238 83.33330000 83.33330000 83.33330000 63.64960000 66.96740000 72.93130000 239 84.86240000 84.86240000 84.86240000 66.24640000 69.69940000 75.90670000 240 86.41980000 86.41980000 86.41980000 68.94950000 72.54340000 79.00400000 241 88.00620000 88.00620000 88.00620000 71.76380000 75.50450000 82.22870000 242 89.62260000 89.62260000 89.62260000 74.69460000 78.58800000 85.58680000 243 91.26980000 91.26980000 91.26980000 77.74700000 81.79960000 89.08440000 244 92.94870000 92.94870000 92.94870000 80.92690000 85.14520000 92.72800000 245 98.18480000 98.18480000 98.18480000 91.29280000 96.05140000 104.6060000 246 100.0000000 32.76800000 44.55260000 47.36250000 28.62850000 19.01620000 247 100.0000000 32.22440000 53.06120000 48.68090000 28.97820000 26.50680000 248 17.95580000 0.000000000 0.000000000 0.944356000 0.486843000 0.044209600 249 20.03940000 7.564190000 0.000000000 1.324580000 0.864465000 0.097063100 250 33.04970000 15.82580000 0.000000000 4.233120000 3.103190000 0.375921000 251 88.84590000 29.12200000 0.000000000 34.16570000 21.13460000 2.279100000 252 100.0000000 49.09350000 0.000000000 48.71770000 36.21930000 4.423950000 253 100.0000000 65.48690000 74.52730000 64.78810000 53.23300000 56.42210000 254 100.0000000 75.73860000 81.99560000 72.31040000 64.74260000 69.83030000 255 21.05080000 0.000000000 17.42330000 1.726610000 0.845434000 2.100020000 256 29.14190000 0.000000000 27.19500000 3.769330000 1.824240000 5.551880000 257 78.33350000 0.000000000 57.89750000 29.52940000 14.59650000 29.70500000 258 16.30430000 0.000000000 0.000000000 0.763810000 0.393767000 0.035757400 259 14.70590000 0.000000000 0.000000000 0.608742000 0.313824000 0.028498000 260 36.97810000 50.08230000 27.69940000 13.51200000 18.44360000 8.469020000 261 50.16440000 76.14120000 31.29160000 30.08170000 44.49580000 14.35340000 262 53.41530000 100.0000000 100.0000000 64.19170000 84.09380000 107.4610000 263 0.000000000 21.51570000 17.74610000 1.621650000 2.599010000 2.527550000 264 0.000000000 25.82310000 15.33900000 2.113040000 3.758630000 2.146420000 265 0.000000000 32.27930000 34.08130000 4.666190000 6.625810000 9.901490000 266 0.000000000 0.000000000 11.65800000 0.159876000 0.063954300 0.841934000 267 0.000000000 0.000000000 4.807690000 0.022791200 0.009117070 0.120023000 268 4.807690000 0.000000000 0.000000000 0.052070600 0.026844000 0.002437660 269 0.000000000 1.152070000 0.000000000 0.001950450 0.003901200 0.000650231 270 10.20410000 0.000000000 0.000000000 0.272508000 0.140486000 0.012757300 271 11.16840000 11.16840000 11.16840000 0.766047000 0.805977000 0.877755000 272 0.000000000 0.000000000 45.77460000 3.236810000 1.294810000 17.04560000 273 0.000000000 10.78650000 48.43670000 3.932250000 2.000180000 19.39110000 274 0.000000000 0.000000000 48.56120000 3.686020000 1.474500000 19.41130000 275 0.000000000 0.000000000 51.47060000 4.189220000 1.675790000 22.06120000 276 0.000000000 0.000000000 54.51130000 4.752840000 1.901260000 25.02930000 277 49.60540000 35.01180000 63.66790000 19.06840000 14.33760000 36.81570000 278 79.87260000 73.27160000 100.0000000 61.25050000 56.27980000 102.2480000 279 100.0000000 88.22730000 100.0000000 86.43620000 82.77960000 106.0360000 280 0.000000000 89.62260000 0.000000000 28.10090000 56.20600000 9.368130000 281 31.75320000 100.0000000 23.02950000 39.78030000 73.51130000 15.83810000 282 54.83540000 100.0000000 45.60420000 49.96890000 78.47560000 29.34200000 283 91.15500000 100.0000000 77.02910000 79.56430000 92.92930000 67.03840000 284 26.51390000 0.000000000 14.81060000 2.495970000 1.255480000 1.529400000 285 34.19570000 0.000000000 15.97520000 4.213730000 2.135380000 1.865670000 286 48.32870000 0.000000000 16.22650000 8.663780000 4.428230000 2.132260000 287 57.64330000 0.000000000 35.11920000 14.08560000 7.052770000 10.09240000 288 62.40220000 0.000000000 76.08190000 24.51290000 11.49430000 52.79010000 289 0.000000000 0.000000000 40.54050000 2.478220000 0.991353000 13.05080000 290 0.000000000 0.000000000 100.0000000 18.05000000 7.220460000 95.05460000 291 19.07540000 46.39080000 100.0000000 25.73230000 20.98460000 97.30660000 292 24.79480000 59.76290000 100.0000000 31.49660000 31.26470000 98.98710000 293 42.40570000 81.54980000 100.0000000 47.13370000 56.11230000 102.9590000 294 0.000000000 19.04840000 23.86770000 1.705370000 2.174190000 4.381300000 295 0.000000000 25.77260000 63.18500000 8.389220000 6.256760000 35.23650000 296 24.34780000 40.95510000 100.0000000 24.91550000 18.21330000 96.81470000 297 12.15460000 0.000000000 31.37370000 1.810670000 0.770556000 7.445700000 298 0.000000000 0.000000000 31.25000000 1.398110000 0.559281000 7.362710000 299 0.000000000 0.000000000 33.43950000 1.622630000 0.649095000 8.545080000 300 77.88210000 0.000000000 66.52050000 31.16260000 15.21460000 39.89460000 301 100.0000000 0.000000000 78.59470000 51.86580000 25.51090000 57.89600000 302 55.55380000 0.000000000 41.37730000 13.91280000 6.873050000 14.18050000 303 66.94040000 0.000000000 100.0000000 35.10900000 16.01490000 95.85320000 304 83.33130000 0.000000000 100.0000000 45.66480000 21.45670000 96.34740000 305 100.0000000 0.000000000 100.0000000 59.28850000 28.48010000 96.98520000 306 100.0000000 73.71410000 100.0000000 77.57280000 65.05160000 103.0810000 307 15.76580000 15.76580000 15.76580000 1.635060000 1.720280000 1.873490000 308 10.68380000 10.68380000 10.68380000 0.694840000 0.731058000 0.796164000 309 15.37160000 15.15150000 0.000000000 1.234640000 1.473290000 0.219318000 310 29.53520000 24.65910000 0.000000000 4.466480000 4.744940000 0.680514000 311 46.06660000 54.17600000 74.80080000 26.31950000 26.25750000 53.64330000 312 83.25930000 100.0000000 89.13950000 77.33720000 91.33650000 87.02960000 313 88.19270000 100.0000000 100.0000000 85.08950000 94.86730000 108.4400000 314 61.47360000 22.23590000 37.73920000 17.57190000 10.75970000 12.24830000 315 76.00680000 56.90220000 38.76650000 35.15010000 33.22370000 16.33330000 316 77.75390000 21.51820000 0.000000000 24.93160000 14.66300000 1.516520000 317 100.0000000 21.54160000 0.000000000 42.46050000 23.70400000 2.337970000 318 100.0000000 19.63730000 100.0000000 60.28550000 30.47430000 97.31760000 319 0.000000000 49.30400000 38.07230000 9.708440000 15.96450000 13.88390000 320 0.000000000 50.75850000 52.51040000 12.42610000 17.84930000 25.73630000 321 0.000000000 62.72640000 63.89880000 19.56160000 28.33990000 39.77260000 322 0.000000000 78.61620000 62.73820000 27.54010000 44.72420000 41.11860000 323 0.000000000 78.21020000 72.24510000 29.65720000 45.18950000 53.44420000 324 65.02650000 77.82460000 93.40530000 52.14180000 55.67220000 89.42880000 325 79.02310000 100.0000000 95.44180000 76.61920000 90.70390000 98.85650000 326 34.11610000 78.18750000 0.000000000 24.68790000 43.62780000 7.120140000 327 40.32410000 100.0000000 0.000000000 41.35300000 74.40460000 12.18250000 328 54.84780000 100.0000000 0.000000000 46.76400000 77.19420000 12.43580000 329 79.10460000 100.0000000 0.000000000 60.38520000 84.21630000 13.07350000 330 100.0000000 100.0000000 0.000000000 76.99580000 92.77950000 13.85110000 331 79.01480000 53.04840000 0.000000000 33.43510000 30.40340000 4.106660000 332 100.0000000 70.92410000 0.000000000 58.03530000 54.85580000 7.530200000 333 58.34870000 41.15440000 0.000000000 17.68550000 16.65090000 2.282050000 334 100.0000000 40.14310000 19.09100000 46.51560000 31.05790000 6.023050000 335 100.0000000 39.86900000 31.75020000 47.41860000 31.30420000 11.13260000 336 100.0000000 49.43790000 79.17120000 59.63310000 40.77110000 61.33490000 337 27.98010000 0.000000000 34.97820000 4.296360000 2.007990000 9.551020000 338 47.48840000 0.000000000 54.13400000 12.69850000 6.005780000 25.02530000 339 48.69110000 0.000000000 100.0000000 26.52100000 11.58750000 95.45120000 340 53.23180000 40.77160000 100.0000000 33.32720000 22.47660000 97.19430000 341 35.32990000 61.04750000 77.53830000 26.57770000 30.44150000 58.54690000 342 33.79020000 60.22370000 94.28780000 31.37570000 31.74680000 87.60650000 343 0.000000000 42.30820000 74.78790000 14.92060000 14.59730000 51.97420000 344 0.000000000 62.07760000 75.91430000 22.37740000 29.00260000 56.03100000 345 75.53230000 83.44980000 100.0000000 64.31730000 66.73220000 104.1040000 346 28.05840000 30.85720000 34.31970000 6.932160000 7.374390000 10.06360000 347 59.31580000 29.04140000 50.00950000 19.36490000 13.02870000 22.10540000 348 72.15260000 55.95170000 58.02600000 35.54150000 32.49640000 32.98220000 349 100.0000000 73.84250000 73.45170000 68.75060000 61.63460000 56.27550000 350 100.0000000 93.28840000 79.98390000 82.97420000 87.06420000 70.32610000 351 100.0000000 100.0000000 84.04700000 89.31220000 97.70640000 78.71180000 352 65.25650000 40.43840000 24.94810000 21.86370000 18.42120000 6.869410000 353 100.0000000 65.36570000 29.87210000 56.54170000 49.84250000 13.27780000 354 32.22120000 20.86140000 0.000000000 4.555450000 4.039180000 0.539600000 355 37.57290000 55.98600000 0.000000000 14.77500000 22.44050000 3.552910000 356 63.00850000 64.80860000 0.000000000 28.70810000 35.25110000 5.291430000 357 75.05050000 72.03840000 0.000000000 39.31970000 46.07720000 6.821920000 358 100.0000000 80.48900000 0.000000000 63.42350000 65.63290000 9.326470000 359 100.0000000 89.63640000 19.29670000 69.83320000 77.67840000 13.85220000 360 100.0000000 100.0000000 33.94530000 78.67290000 93.45040000 22.68300000 361 75.55640000 40.22760000 0.000000000 27.09000000 21.13110000 2.651270000 362 76.04680000 44.58690000 73.37190000 37.77040000 27.40130000 51.18570000 363 0.000000000 0.000000000 23.25580000 0.730031000 0.292031000 3.844480000 364 0.000000000 0.000000000 38.07950000 2.159360000 0.863799000 11.37160000 365 30.12150000 0.000000000 61.25380000 9.088410000 3.975870000 32.48480000 366 40.25530000 0.000000000 69.35360000 13.64620000 6.102730000 42.76690000 367 55.25010000 62.76720000 100.0000000 42.07410000 38.66680000 99.85850000 368 56.13230000 78.51260000 100.0000000 50.63610000 55.20320000 102.5990000 369 24.35300000 55.50970000 45.62050000 14.85760000 21.83600000 20.27270000 370 21.95310000 100.0000000 50.34840000 41.21760000 73.87380000 33.00650000 371 0.000000000 51.88490000 32.26150000 9.946080000 17.49410000 10.71290000 372 100.0000000 58.82760000 39.07170000 54.65680000 44.44200000 17.67560000 373 100.0000000 82.64100000 44.81220000 67.83790000 69.51960000 26.03570000 374 100.0000000 100.0000000 49.65800000 80.86740000 94.32830000 34.23970000 375 0.000000000 13.25860000 32.69330000 1.964350000 1.458290000 8.271430000 376 0.000000000 40.31360000 64.48990000 11.72790000 12.45070000 37.84120000 377 0.000000000 65.03150000 100.0000000 31.92980000 34.98210000 99.68180000 378 0.000000000 78.34440000 100.0000000 38.95570000 49.03500000 102.0240000 379 0.000000000 85.32570000 100.0000000 43.27290000 57.67000000 103.4630000 380 0.000000000 24.70670000 37.91600000 3.791110000 4.160080000 11.81530000 381 31.53270000 24.24770000 40.05370000 7.256710000 5.815930000 13.38960000 382 45.33410000 23.89450000 81.98930000 20.43750000 11.46790000 62.27020000 383 60.53300000 31.21400000 100.0000000 34.48540000 19.79490000 96.61570000 384 71.81300000 36.06280000 100.0000000 41.75480000 25.07550000 97.25190000 385 79.04930000 64.11690000 100.0000000 56.09400000 46.80750000 100.6910000 386 64.72950000 0.000000000 30.78370000 17.19700000 8.709330000 7.865020000 387 100.0000000 0.000000000 48.04520000 44.83890000 22.69990000 20.89120000 388 100.0000000 0.000000000 57.46510000 46.57620000 23.39490000 30.03990000 389 100.0000000 22.92030000 80.96110000 53.98300000 28.59910000 62.13590000 390 100.0000000 33.96880000 100.0000000 62.61590000 35.13550000 98.09450000 391 100.0000000 56.43370000 100.0000000 69.44960000 48.80400000 100.3730000 392 13.66840000 13.66840000 13.66840000 1.194510000 1.256770000 1.368700000 393 7.425740000 7.425740000 7.425740000 0.312207000 0.328481000 0.357734000 394 0.000000000 0.000000000 7.425740000 0.059290800 0.023717800 0.312236000 395 9.729270000 9.729270000 9.729270000 0.565588000 0.595069000 0.648064000 396 0.000000000 19.97250000 82.65940000 12.90850000 6.819570000 62.87400000 397 0.000000000 24.03180000 100.0000000 19.60450000 10.32960000 95.57280000 398 0.000000000 31.26250000 100.0000000 20.82210000 12.76510000 95.97880000 399 0.000000000 38.96140000 100.0000000 22.54860000 16.21840000 96.55440000 400 0.000000000 52.04270000 100.0000000 26.55310000 24.22800000 97.88930000 401 0.000000000 100.0000000 100.0000000 53.80730000 78.74040000 106.9750000 402 0.000000000 54.63610000 25.83890000 10.38320000 19.29540000 8.001250000 403 0.000000000 73.92590000 26.06660000 19.33830000 37.17820000 11.07510000 404 0.000000000 75.44360000 49.34420000 23.05910000 40.01240000 26.52080000 405 0.000000000 100.0000000 63.48410000 42.40230000 74.17810000 46.91430000 406 33.68300000 100.0000000 67.96740000 47.24510000 76.55040000 52.75680000 407 43.63980000 100.0000000 94.25480000 58.26270000 81.29160000 95.68890000 408 36.61110000 70.98380000 63.92800000 28.10030000 38.69020000 41.35590000 409 61.02300000 100.0000000 68.10600000 57.43020000 81.79710000 53.41450000 410 30.32190000 26.86090000 13.40100000 5.192020000 5.599290000 1.945680000 411 41.93410000 25.46010000 26.34360000 8.824060000 7.058350000 5.931120000 412 72.68280000 28.03440000 26.88490000 23.62930000 15.30400000 6.972800000 413 89.62260000 0.000000000 0.000000000 32.40850000 16.70750000 1.517190000 414 94.66020000 0.000000000 0.000000000 36.55020000 18.84270000 1.711080000 415 100.0000000 0.000000000 0.000000000 41.23850000 21.25960000 1.930560000 416 100.0000000 0.000000000 22.81000000 41.93810000 21.53950000 5.614830000 417 52.39130000 24.81790000 0.000000000 11.62010000 8.467550000 1.022110000 418 57.14960000 76.66120000 0.000000000 31.97880000 46.07540000 7.208400000 419 0.000000000 94.66020000 0.000000000 31.69210000 63.38900000 10.56530000 420 0.000000000 100.0000000 0.000000000 35.75730000 71.51990000 11.92060000 421 0.000000000 100.0000000 24.32000000 36.56280000 71.84210000 16.16260000 422 0.000000000 100.0000000 40.24930000 38.19660000 72.49570000 24.76610000 423 0.000000000 100.0000000 52.21930000 40.08170000 73.24980000 34.69370000 424 0.000000000 42.70650000 29.54250000 6.740380000 11.50470000 8.341990000 425 70.80670000 47.49510000 30.65470000 27.59550000 24.39570000 10.27970000 426 76.43450000 64.38510000 69.94320000 44.63790000 42.22080000 48.90040000 427 38.23520000 23.91000000 43.13100000 9.354980000 6.776880000 15.70080000 428 42.40080000 38.89650000 48.98640000 14.48860000 13.68960000 21.57390000 429 44.75690000 60.82460000 54.26100000 23.72470000 29.47510000 29.10110000 430 59.78670000 79.57190000 80.29990000 46.07860000 54.58450000 66.50530000 431 83.37350000 88.83480000 100.0000000 73.25610000 76.59780000 105.5370000 432 90.68890000 96.52510000 100.0000000 84.39400000 90.53620000 107.6400000 433 14.45550000 0.000000000 7.984020000 0.655722000 0.330012000 0.393642000 434 14.39650000 7.835120000 0.000000000 0.713101000 0.563845000 0.071257800 435 13.20010000 9.273110000 10.55030000 0.799837000 0.681752000 0.762259000 436 56.12610000 40.07350000 35.50880000 18.21630000 16.28240000 11.88880000 437 61.33290000 49.44380000 34.29120000 23.38530000 23.13660000 12.22250000 438 63.60340000 57.23440000 38.90770000 27.98940000 29.72800000 16.13030000 439 65.15950000 75.87250000 44.27330000 38.56720000 48.45920000 23.08780000 440 65.96120000 85.20270000 74.29860000 51.04950000 62.56050000 58.61260000 441 69.35830000 100.0000000 89.16180000 68.22600000 86.63850000 86.64340000 442 90.94640000 100.0000000 96.50920000 85.92110000 95.45270000 101.3970000 443 33.94510000 33.63160000 58.42210000 12.62200000 10.70040000 30.41370000 444 60.26790000 68.12460000 87.49910000 42.37100000 43.11250000 76.62310000 445 60.46270000 70.01330000 100.0000000 48.01400000 46.90580000 101.1360000 446 65.79870000 78.12290000 100.0000000 55.25160000 57.24340000 102.7500000 447 0.000000000 15.47770000 100.0000000 18.64070000 8.401920000 95.25150000 448 21.37600000 24.36750000 100.0000000 21.03830000 11.14030000 95.65380000 449 45.19590000 16.24580000 53.11820000 12.33790000 6.817460000 24.19990000 450 52.82690000 22.21150000 59.26890000 17.15480000 10.12460000 30.99660000 451 60.65360000 22.16440000 60.15700000 20.93690000 12.04340000 32.16340000 452 55.91790000 10.03620000 38.51570000 13.92650000 7.261990000 12.27370000 453 66.31390000 0.000000000 43.47500000 19.59970000 9.770440000 16.00110000 454 77.71390000 0.000000000 49.46420000 27.52410000 13.74610000 21.32290000 455 76.45810000 84.12700000 84.89100000 59.89230000 65.72120000 75.52250000 456 76.10720000 96.31370000 100.0000000 73.59440000 84.73240000 107.0890000 457 0.000000000 57.89360000 54.46140000 15.49150000 23.39550000 28.56210000 458 0.000000000 72.78020000 73.88740000 27.05640000 39.27150000 54.78440000 459 0.000000000 88.38420000 77.83990000 37.65820000 58.67410000 63.87600000 460 19.93380000 88.15240000 100.0000000 46.33540000 62.03120000 104.1440000 461 46.27720000 0.000000000 29.78620000 8.832910000 4.408310000 6.980070000 462 60.53320000 35.03500000 35.69000000 19.10680000 14.92120000 11.68850000 463 80.45980000 63.60250000 50.54010000 42.80760000 41.22720000 26.79690000 464 83.55330000 66.78020000 63.67880000 49.18060000 46.42580000 41.43580000 465 84.49270000 74.43470000 77.53930000 57.46410000 56.16520000 61.88610000 466 34.96120000 41.38140000 36.71260000 11.21710000 13.17780000 12.39680000 467 51.10590000 41.88700000 39.94290000 17.09630000 16.36820000 14.83110000 468 65.15440000 48.81300000 49.16200000 27.24670000 24.57380000 23.15810000 469 69.76880000 100.0000000 48.77230000 58.16310000 82.64090000 32.39260000 470 0.000000000 36.82600000 12.85310000 4.172290000 8.028140000 2.368370000 471 0.000000000 45.88820000 14.34440000 6.699470000 12.99630000 3.477760000 472 41.39870000 44.77550000 17.39150000 12.42260000 15.42830000 4.343070000 473 43.23870000 85.60700000 24.05280000 32.71620000 54.49370000 12.91530000 474 54.07840000 84.38630000 31.86730000 36.74570000 55.32050000 16.39230000 475 20.72560000 28.24530000 0.000000000 3.512220000 5.102890000 0.799887000 476 82.86670000 27.33490000 9.752460000 29.44870000 18.23260000 2.533470000 477 100.0000000 37.13930000 0.000000000 45.28740000 29.35800000 3.280360000 478 100.0000000 56.66740000 27.71110000 52.56580000 42.19840000 11.00150000 479 22.64040000 13.37240000 47.36860000 5.490490000 3.063220000 18.59470000 480 25.94620000 15.90650000 89.10630000 16.75520000 7.951290000 74.06670000 481 29.82430000 52.10690000 93.33710000 26.91900000 24.74420000 84.65750000 482 37.42510000 0.000000000 22.28600000 5.413670000 2.714120000 3.723020000 483 43.68380000 0.000000000 20.60600000 7.231990000 3.663680000 3.258780000 484 51.25850000 41.48010000 64.64520000 21.56280000 17.98280000 38.58200000 485 55.35230000 40.70320000 74.22140000 25.55350000 19.44430000 51.52140000 486 62.49810000 53.02230000 76.39790000 33.51200000 29.27550000 56.22290000 487 64.96510000 52.35460000 87.34030000 37.98990000 30.82770000 74.20160000 488 64.15910000 59.84790000 100.0000000 45.15130000 38.35770000 99.63670000 489 0.000000000 64.85270000 36.47360000 15.76020000 28.37980000 14.94280000 490 11.98080000 80.12470000 35.73270000 24.23010000 44.88370000 17.22770000 491 49.36130000 83.10760000 39.70420000 34.90000000 53.05740000 20.81010000 492 18.01580000 12.22310000 0.000000000 1.302770000 1.193400000 0.161703000 493 20.99580000 0.000000000 8.210670000 1.406020000 0.716301000 0.451812000 494 19.42260000 0.000000000 12.33290000 1.303300000 0.650991000 1.005390000 495 25.34670000 13.60360000 13.84200000 2.693500000 2.021870000 1.470840000 496 24.44860000 12.47070000 16.67010000 2.580180000 1.834930000 2.058210000 497 39.48370000 15.66340000 27.87190000 7.035900000 4.401880000 6.177230000 498 52.19300000 19.30890000 35.89190000 12.72550000 7.767680000 10.76650000 499 74.36380000 25.83270000 51.58530000 27.53000000 16.41160000 23.78330000 500 100.0000000 65.67250000 52.48700000 59.79420000 51.37610000 29.68920000 501 100.0000000 49.58520000 38.59230000 51.10730000 37.44040000 16.19030000 502 100.0000000 56.65550000 48.62330000 55.18410000 43.23820000 24.81330000 503 78.61740000 44.98870000 40.53830000 32.94590000 25.86220000 16.24430000 504 83.07130000 45.87640000 50.39600000 37.86850000 28.62670000 24.49290000 505 83.64950000 51.50890000 50.41170000 40.16180000 32.58320000 25.15020000 506 24.64600000 10.63590000 0.000000000 2.153890000 1.494670000 0.175006000 507 27.49630000 0.000000000 100.0000000 20.46070000 8.463250000 95.16750000 508 32.91490000 33.29810000 100.0000000 24.81510000 15.43610000 96.28390000 509 20.10280000 23.29340000 48.14250000 6.278470000 4.973710000 19.58570000 510 17.22680000 29.34260000 48.81680000 7.002370000 6.759310000 20.48100000 511 15.29870000 34.96430000 80.81340000 15.50800000 11.95380000 60.71200000 512 27.04430000 54.41980000 81.50340000 23.21670000 24.56610000 63.85800000 513 60.63600000 73.95140000 82.84110000 44.06910000 48.67870000 69.61290000 514 49.18300000 61.31150000 66.00940000 28.09400000 31.74950000 42.59870000 515 60.93490000 74.51550000 66.93940000 40.06400000 47.59030000 46.21140000 516 100.0000000 87.23870000 71.47120000 76.34520000 77.67970000 56.17190000 517 50.84680000 38.10510000 24.77710000 14.44100000 13.70800000 6.283760000 518 73.68250000 46.85850000 22.81810000 28.51820000 24.64350000 6.923930000 519 82.91350000 57.01740000 28.64510000 38.85950000 35.33060000 10.82360000 520 60.20420000 30.59820000 14.42490000 16.40960000 12.35580000 2.858840000 521 100.0000000 30.23530000 23.55290000 44.56490000 26.71180000 6.742550000 522 100.0000000 31.51130000 34.98030000 45.85100000 27.61850000 12.30600000 523 30.33560000 9.324970000 0.000000000 3.186100000 1.930270000 0.204696000 524 28.73980000 0.000000000 9.143690000 2.750690000 1.407240000 0.617846000 525 37.31920000 0.000000000 12.01520000 4.890270000 2.501350000 1.120650000 526 77.08060000 0.000000000 35.53220000 25.11760000 12.73470000 10.85450000 527 84.46820000 11.24900000 40.52460000 31.21910000 16.24300000 14.46900000 528 100.0000000 17.72430000 55.01910000 46.88500000 24.79180000 27.74090000 529 65.06440000 9.454650000 34.98360000 18.01700000 9.377940000 10.25370000 530 71.57610000 0.000000000 39.48650000 22.10410000 11.12520000 13.24150000 531 76.09330000 0.000000000 84.17230000 34.96980000 16.60070000 66.13200000 532 63.01640000 49.04620000 69.48270000 30.50480000 25.87030000 45.86750000 533 69.58350000 53.74100000 80.89110000 39.02290000 32.35730000 63.53650000 534 88.98770000 53.05390000 92.38590000 55.94110000 40.25730000 84.31160000 535 74.07640000 40.61200000 54.13930000 30.92600000 22.71930000 27.29610000 536 100.0000000 42.79570000 61.85980000 53.04540000 34.83160000 36.82900000 537 100.0000000 53.01380000 63.08650000 56.64820000 41.59450000 39.39650000 538 25.11680000 21.34240000 18.71860000 3.625880000 3.594550000 2.876960000 539 25.88390000 18.88030000 14.92360000 3.300320000 3.027200000 1.852900000 540 28.07560000 18.25700000 18.99250000 3.840820000 3.186990000 2.864050000 541 39.48190000 34.16730000 15.82280000 9.025200000 9.620270000 3.021910000 542 54.37730000 64.56030000 40.23960000 26.89770000 33.86420000 17.89800000 543 73.46320000 67.56780000 55.50040000 40.97240000 42.96640000 32.05220000 544 80.19150000 69.37260000 59.89240000 47.22370000 47.42290000 37.30870000 545 52.28890000 14.73350000 65.20320000 17.48600000 8.987450000 37.75220000 546 56.68190000 12.62490000 83.08730000 24.21900000 11.65880000 63.92280000 547 83.52540000 71.15760000 84.70460000 57.20450000 53.16120000 72.92160000 548 100.0000000 70.92360000 91.47860000 72.87420000 60.79130000 85.67600000 549 21.64020000 100.0000000 42.03680000 39.86480000 73.32740000 26.12080000 550 34.95640000 100.0000000 54.60580000 44.61540000 75.53540000 37.23680000 551 38.52690000 100.0000000 86.15160000 53.82410000 79.33170000 80.64380000 552 0.000000000 61.17560000 41.74820000 14.77750000 25.32720000 17.96620000 553 0.000000000 89.63520000 43.45690000 30.99690000 57.37840000 24.57600000 554 27.37160000 92.02070000 77.54130000 42.48450000 64.92400000 64.36910000 555 43.01140000 100.0000000 78.29210000 52.74360000 79.05970000 67.71520000 556 53.18280000 91.60480000 68.52170000 47.63120000 67.42280000 51.70400000 557 71.53350000 100.0000000 73.39790000 64.63980000 85.35360000 60.99310000 558 72.47590000 100.0000000 82.10600000 67.77280000 86.67350000 74.48370000 559 41.99950000 52.16490000 41.87810000 17.32850000 21.31510000 17.15240000 560 100.0000000 54.38470000 54.97400000 55.44790000 41.93280000 30.55240000 561 100.0000000 54.42400000 70.96230000 59.10970000 43.42150000 49.76280000 562 100.0000000 58.53140000 79.74730000 63.22190000 47.67150000 63.38750000 563 81.70740000 27.76040000 40.77860000 31.09020000 18.90720000 15.16960000 564 83.73480000 26.98040000 60.70050000 35.93570000 20.80720000 33.68270000 565 0.000000000 11.74780000 60.04860000 6.201830000 2.996300000 31.07110000 566 0.000000000 12.84370000 72.78700000 9.368330000 4.374660000 47.40210000 567 20.11370000 70.29260000 100.0000000 35.73180000 40.78720000 100.6020000 568 22.36290000 76.16600000 100.0000000 39.22890000 47.30950000 101.6770000 569 55.32360000 83.73810000 100.0000000 53.47000000 61.41160000 103.6480000 570 0.000000000 8.284730000 36.25890000 2.088230000 1.074440000 10.25990000 571 19.89700000 0.000000000 65.43390000 8.285650000 3.451170000 37.45640000 572 26.61410000 8.705620000 75.02160000 12.00420000 5.327780000 50.68260000 573 33.34180000 0.000000000 77.07710000 13.86470000 5.971670000 53.78880000 574 41.23140000 40.62730000 76.99210000 20.96540000 16.95810000 55.40590000 575 13.69950000 19.88420000 25.56310000 2.444500000 2.677790000 5.099550000 576 9.122880000 25.08980000 24.34520000 2.729320000 3.850920000 4.831380000 577 0.000000000 23.85850000 24.89680000 2.378050000 3.399320000 4.976480000 578 0.000000000 30.29240000 27.85480000 3.672110000 5.607580000 6.579520000 579 29.96290000 33.54630000 25.92170000 7.075930000 8.346640000 6.096280000 580 55.11440000 66.58520000 24.18560000 26.54000000 35.29470000 9.585220000 581 56.18160000 100.0000000 22.71290000 48.05430000 77.77930000 16.11360000 582 27.40390000 46.95540000 0.000000000 9.174470000 14.79770000 2.372820000 583 28.46560000 56.94320000 0.000000000 12.96560000 22.07070000 3.576890000 584 29.72820000 57.74370000 24.68070000 14.38130000 23.18420000 8.078440000 585 10.47430000 26.88050000 14.39440000 2.531540000 4.228200000 2.015120000 586 0.000000000 88.05480000 85.99260000 39.98330000 59.24740000 77.22000000 587 0.000000000 92.52830000 100.0000000 48.19360000 67.51220000 105.1040000 588 42.24500000 95.48560000 100.0000000 56.55170000 75.02690000 106.1140000 589 39.93270000 30.26420000 23.88400000 8.832190000 8.295870000 5.193460000 590 47.69570000 31.04820000 24.20420000 11.62250000 9.953380000 5.486950000 591 82.53230000 84.22230000 58.22780000 57.04170000 65.16160000 38.37340000 592 100.0000000 83.81850000 58.60810000 71.06580000 71.99970000 39.36960000 593 11.02610000 11.37080000 0.000000000 0.622935000 0.766237000 0.115074000 594 0.000000000 13.94700000 10.79610000 0.604805000 0.993638000 0.867692000 595 0.000000000 9.712610000 8.073010000 0.283234000 0.452495000 0.445905000 596 36.59080000 0.000000000 36.58550000 6.496610000 3.120800000 10.62500000 597 57.92480000 0.000000000 62.05730000 18.73150000 8.926540000 33.86840000 598 74.50920000 65.88760000 65.89480000 43.08790000 42.58750000 43.75580000 599 82.62250000 81.62310000 71.26210000 58.54720000 63.15860000 54.01650000 600 59.09760000 56.54710000 52.38800000 27.53110000 28.84230000 26.94480000 601 59.27230000 70.90780000 59.48500000 35.60170000 42.61280000 36.53610000 602 52.30150000 60.81820000 50.37170000 25.88780000 30.66820000 25.49610000 603 61.71210000 71.76910000 76.01500000 41.38060000 45.78730000 58.42010000 604 0.000000000 11.43070000 13.70700000 0.531549000 0.697937000 1.303160000 605 53.40190000 0.000000000 10.68760000 10.51070000 5.403330000 1.181330000 606 75.24340000 0.000000000 12.43550000 22.24550000 11.44690000 2.003160000 607 100.0000000 0.000000000 13.75360000 41.46840000 21.35160000 3.141610000 608 100.0000000 29.78730000 71.79020000 52.43930000 29.72870000 48.62100000 609 100.0000000 35.43680000 89.89360000 59.17000000 34.27620000 78.34710000 610 100.0000000 45.75430000 100.0000000 65.69440000 41.29290000 99.12070000 611 26.69600000 7.428900000 29.60100000 3.617640000 1.896200000 6.680190000 612 27.61010000 16.64380000 33.15370000 4.717990000 3.277170000 8.730200000 613 27.77950000 19.24300000 65.20830000 10.46750000 5.997800000 37.55130000 614 38.54210000 25.67240000 76.43970000 16.86070000 10.20600000 53.48250000 615 38.70200000 57.32030000 100.0000000 33.67810000 30.88880000 98.79960000 616 43.21480000 64.53960000 100.0000000 38.21590000 37.88150000 99.91020000 617 72.31160000 0.000000000 27.10670000 21.23740000 10.83040000 6.331320000 618 85.66320000 0.000000000 28.88730000 30.51900000 15.59760000 7.567360000 619 100.0000000 0.000000000 31.42320000 42.65370000 21.82580000 9.383340000 620 100.0000000 17.83730000 31.13640000 43.43240000 23.42860000 9.503570000 621 100.0000000 18.93630000 39.08850000 44.44610000 24.01550000 14.28220000 622 100.0000000 67.33010000 41.92250000 58.88800000 52.29240000 20.97430000 623 50.09320000 26.79220000 16.55550000 11.33690000 8.735770000 2.901100000 624 54.82050000 41.52110000 15.19090000 16.45510000 16.13190000 3.746640000 625 100.0000000 47.06740000 15.20730000 48.34250000 35.00980000 5.713750000 626 70.23840000 88.47710000 0.000000000 46.27920000 64.41370000 9.994510000 627 89.51610000 88.95340000 0.000000000 59.96530000 71.95100000 10.72820000 628 100.0000000 90.08130000 0.000000000 69.65660000 78.10020000 11.40440000 629 23.66450000 22.95300000 15.35680000 3.431220000 3.821100000 2.092940000 630 34.61240000 20.46040000 22.62510000 5.777610000 4.519200000 4.169910000 631 46.00480000 19.34220000 29.79110000 9.700040000 6.286980000 7.299400000 632 56.38760000 20.36770000 27.92700000 13.86990000 8.628190000 6.657660000 633 60.31920000 23.99020000 26.02380000 16.05020000 10.46540000 6.074560000 634 84.20760000 30.43180000 78.64350000 41.51200000 24.05040000 58.23570000 635 100.0000000 39.03930000 80.66170000 57.00860000 34.79820000 62.69040000 636 70.30550000 19.27410000 21.76390000 20.58980000 11.96240000 4.531420000 637 100.0000000 18.84390000 23.45390000 42.89280000 23.37840000 6.150980000 638 50.77870000 20.25280000 15.39990000 10.65220000 7.041600000 2.343550000 639 65.35480000 26.18730000 13.68280000 18.28800000 12.18930000 2.580950000 640 70.78360000 34.49760000 18.94360000 23.19470000 17.01450000 4.499360000 641 34.47500000 43.92930000 0.000000000 9.821760000 13.75940000 2.138290000 642 45.99330000 66.84230000 0.000000000 22.21700000 33.34270000 5.265110000 643 56.91510000 77.86600000 84.12860000 44.90850000 52.34780000 72.43430000 644 60.11020000 95.53100000 100.0000000 63.85050000 78.83990000 106.4650000 645 0.000000000 45.45120000 63.12830000 12.87630000 15.25230000 36.66850000 646 0.000000000 50.25830000 62.45030000 14.28440000 18.31520000 36.37810000 647 0.000000000 53.17870000 85.25670000 21.62630000 22.91880000 69.90400000 648 26.21730000 60.38980000 83.94750000 26.24920000 29.62270000 68.72530000 649 31.42310000 66.42270000 85.41400000 30.53570000 35.85620000 72.20230000 650 31.75700000 72.89160000 85.18130000 33.83300000 42.46040000 72.90320000 651 11.61580000 38.32210000 51.42310000 8.880980000 10.53560000 23.47960000 652 0.000000000 39.44020000 50.65270000 8.665320000 10.86070000 22.83810000 653 0.000000000 87.24600000 51.90300000 30.75520000 54.68710000 31.30130000 654 70.99360000 85.94860000 52.76770000 49.46780000 63.04120000 32.75540000 655 69.94760000 92.06210000 58.32340000 54.11510000 71.51830000 39.85860000 656 20.41920000 86.70640000 0.000000000 27.38210000 52.90810000 8.769450000 657 21.83770000 89.82240000 33.81050000 31.35380000 57.89580000 18.23710000 658 61.21930000 100.0000000 36.92210000 51.79090000 79.55260000 23.20200000 659 84.85000000 44.62470000 37.41320000 36.87410000 27.77140000 14.30510000 660 100.0000000 43.97460000 43.81760000 50.04940000 34.17800000 19.37160000 661 100.0000000 44.09380000 53.04380000 51.62020000 34.86250000 27.47080000 662 100.0000000 49.45970000 89.51860000 62.98990000 42.12570000 78.97600000 663 40.66200000 10.06480000 32.25060000 7.427040000 3.996140000 8.234400000 664 49.10570000 0.000000000 66.06480000 15.88400000 7.350870000 38.60270000 665 56.58600000 0.000000000 89.40710000 25.89860000 11.72170000 74.85890000 666 64.28660000 41.09670000 100.0000000 38.71570000 25.38450000 97.47170000 667 11.10020000 19.22620000 0.000000000 1.279600000 2.072550000 0.332616000 668 14.31360000 17.67750000 10.18450000 1.483560000 1.925710000 0.916091000 669 15.16930000 33.42580000 0.000000000 3.863300000 6.759590000 1.101160000 670 17.12410000 41.63210000 0.000000000 6.055620000 10.84900000 1.774980000 671 26.37160000 46.79640000 34.25680000 10.64140000 15.28150000 11.35810000 672 24.96820000 53.99770000 54.34290000 15.89200000 21.33790000 28.02510000 673 33.97930000 60.46430000 70.75570000 24.10070000 29.00720000 48.54090000 674 35.88730000 29.98840000 70.11640000 15.12800000 10.59960000 44.58690000 675 35.83770000 31.30320000 88.89600000 21.03060000 13.35990000 74.50480000 676 41.37210000 40.03550000 100.0000000 28.74640000 19.82520000 96.92390000 677 52.12670000 89.50970000 100.0000000 55.91450000 68.34440000 104.8580000 678 36.05280000 70.02590000 70.53000000 29.08260000 38.27320000 49.75730000 679 40.86580000 81.72580000 78.04350000 39.16800000 53.04310000 63.02380000 680 55.66800000 85.68680000 80.79370000 48.12240000 61.29990000 68.48650000 681 23.86720000 33.38990000 35.59420000 6.831330000 8.063450000 10.95380000 682 22.22260000 36.63880000 35.05040000 7.238620000 9.358190000 10.85740000 683 23.01480000 35.12990000 59.58250000 10.99260000 10.31840000 31.70830000 684 18.07650000 21.86420000 41.06400000 4.770200000 4.039340000 13.89000000 685 75.72650000 19.29290000 57.13190000 28.60270000 15.56050000 29.11920000 686 75.61060000 21.36130000 85.59500000 36.31920000 19.02390000 68.96070000 687 79.59490000 30.20830000 100.0000000 45.58550000 25.23230000 97.08030000 688 100.0000000 65.69750000 100.0000000 73.48280000 56.87090000 101.7170000 689 24.32270000 20.49210000 28.11030000 4.043420000 3.582130000 6.284430000 690 28.39030000 37.34370000 29.72680000 7.937110000 10.03120000 8.083730000 691 66.58310000 49.18530000 27.77050000 25.44790000 24.14410000 8.972170000 692 69.55400000 76.96060000 25.57640000 39.56030000 50.13470000 12.30930000 693 30.06490000 48.52390000 12.51740000 10.41060000 16.16780000 3.552040000 694 29.64180000 86.97650000 27.51570000 30.20910000 54.50970000 14.46900000 695 37.24290000 100.0000000 40.48350000 42.92610000 74.93020000 25.15090000 696 55.65270000 100.0000000 87.08100000 60.43780000 82.70540000 82.57420000 697 0.000000000 18.92360000 41.16160000 3.481540000 2.863300000 13.80090000 698 0.000000000 19.26170000 51.21170000 5.098560000 3.568540000 22.13640000 699 25.61110000 70.97380000 74.13440000 28.23080000 38.44960000 54.92220000 700 39.07000000 71.72760000 87.35570000 35.84620000 42.49350000 76.59340000 701 76.39530000 71.75220000 86.18540000 53.05810000 51.43130000 75.35760000 702 100.0000000 91.34440000 85.33140000 83.27460000 84.96180000 78.75960000 703 23.31550000 23.97480000 0.000000000 3.223680000 3.957650000 0.594038000 704 36.71900000 21.77580000 9.775780000 5.914110000 4.894340000 1.202010000 705 51.62230000 32.18660000 0.000000000 12.58870000 10.87770000 1.436270000 706 74.18570000 73.97380000 22.74820000 40.50670000 48.15810000 10.80630000 707 84.54940000 83.48130000 22.15660000 53.20600000 63.04270000 12.80490000 708 100.0000000 91.46840000 47.86650000 74.19900000 81.47150000 30.53410000 709 48.28050000 13.97600000 0.000000000 8.786630000 5.230400000 0.546578000 710 57.94950000 16.45630000 0.000000000 13.09810000 7.755970000 0.806879000 711 63.43000000 34.33540000 0.000000000 18.56010000 14.62620000 1.845160000 712 89.46850000 100.0000000 0.000000000 68.04340000 88.16430000 13.43200000 713 0.000000000 90.15360000 16.83640000 28.82720000 57.08450000 11.38000000 714 0.000000000 89.74980000 70.69750000 36.60810000 59.74950000 53.73570000 715 0.000000000 100.0000000 82.37640000 47.54170000 76.23400000 73.97960000 716 0.000000000 100.0000000 92.00120000 50.78360000 77.53080000 91.05170000 717 25.14620000 57.63440000 52.67810000 17.03170000 24.07150000 26.85610000 718 34.37510000 68.25140000 100.0000000 37.42530000 40.12590000 100.3850000 719 0.000000000 23.78460000 42.65950000 4.291570000 4.148140000 15.10470000 720 0.000000000 40.98890000 85.09040000 17.68480000 15.12240000 68.32130000 721 0.000000000 45.68470000 100.0000000 24.43450000 19.99040000 97.18300000 722 0.000000000 58.51660000 100.0000000 29.05430000 29.23060000 98.72320000 723 0.000000000 71.91470000 100.0000000 35.36710000 41.85720000 100.8280000 724 0.000000000 31.63130000 44.22580000 5.845380000 6.889930000 16.75120000 725 0.000000000 32.37440000 60.62410000 8.997940000 8.389500000 32.61810000 726 20.31210000 100.0000000 85.43850000 49.76520000 77.26640000 79.22420000 727 22.06280000 100.0000000 93.44870000 52.79390000 78.50650000 93.88510000 728 0.000000000 35.79100000 27.38450000 4.778380000 7.884140000 6.751450000 729 76.87850000 67.42000000 31.67840000 39.59560000 42.55370000 13.67850000 730 80.23460000 78.24280000 43.85280000 49.19970000 55.97220000 23.65030000 731 80.96130000 100.0000000 57.39060000 66.99680000 87.01000000 41.16310000 732 0.000000000 8.042890000 15.66390000 0.446114000 0.402474000 1.658730000 733 9.032850000 0.000000000 15.90990000 0.525207000 0.234169000 1.678030000 734 10.44530000 0.000000000 22.90030000 0.992584000 0.430194000 3.729830000 735 51.14050000 30.46500000 48.71980000 15.76810000 11.58830000 20.86590000 736 65.53330000 30.66930000 68.63060000 26.82570000 16.86410000 43.18570000 737 74.32550000 36.71050000 86.43960000 38.52120000 24.20510000 71.31180000 738 80.69570000 54.00480000 100.0000000 53.00450000 38.93480000 99.33430000 739 17.61860000 0.000000000 26.47920000 1.877010000 0.855475000 5.157040000 740 22.32810000 12.15570000 31.50550000 3.295650000 2.050080000 7.682890000 741 35.21660000 17.89390000 50.78800000 9.034970000 5.394390000 21.88830000 742 39.18420000 49.64350000 67.65120000 20.56060000 21.09620000 43.04620000 743 68.61770000 75.65960000 68.59100000 45.25320000 51.16530000 48.78300000 744 80.90790000 88.13540000 69.44830000 61.06070000 70.75530000 52.87480000 745 0.000000000 55.90310000 15.53430000 10.25280000 20.02620000 4.900710000 746 14.83100000 100.0000000 15.41840000 36.67320000 71.95790000 13.50660000 747 43.38570000 100.0000000 17.47900000 42.71970000 75.06420000 14.27990000 748 70.08670000 44.64670000 0.000000000 24.94200000 21.86970000 2.907010000 749 86.82880000 49.56910000 0.000000000 37.86770000 30.86370000 3.961940000 750 100.0000000 60.24010000 0.000000000 52.96810000 44.72070000 5.840930000 751 100.0000000 57.85040000 15.71730000 52.27750000 42.84580000 7.132040000 752 100.0000000 68.39390000 16.44960000 57.08650000 52.41260000 8.895500000 753 36.09500000 15.30820000 8.285900000 5.037630000 3.444290000 0.794861000 754 42.41530000 15.55800000 12.91180000 7.051360000 4.499040000 1.545940000 755 27.94100000 12.06220000 22.57020000 3.522190000 2.243640000 3.830340000 756 28.86770000 44.57410000 19.70900000 9.238520000 13.68330000 4.813580000 757 28.81220000 72.69590000 57.65990000 25.78280000 38.99810000 34.35630000 758 37.28880000 78.05700000 56.97460000 30.68640000 46.00190000 34.71820000 759 39.29900000 83.00760000 87.99410000 42.65240000 55.66030000 79.91070000 760 0.000000000 20.49730000 69.02940000 9.084300000 5.386980000 42.43540000 761 0.000000000 27.12360000 77.40900000 12.30640000 8.168710000 54.80170000 762 0.000000000 27.42080000 88.54180000 15.88930000 9.680680000 73.42720000 763 39.09160000 25.20460000 100.0000000 25.00260000 13.36750000 95.87480000 764 52.88780000 22.81020000 100.0000000 29.59610000 15.23040000 95.99230000 765 68.66230000 24.43650000 100.0000000 37.70150000 19.74550000 96.43670000 766 71.90060000 74.86780000 100.0000000 56.93260000 55.35400000 102.2960000 767 37.99980000 72.88710000 41.68510000 25.38170000 39.26080000 20.05090000 768 44.22990000 100.0000000 50.43070000 46.62000000 76.65730000 33.33440000 769 50.16470000 100.0000000 70.94130000 53.28580000 79.57650000 57.01940000 770 15.67450000 8.040260000 15.88840000 1.156170000 0.767253000 1.742750000 771 17.84880000 9.918610000 40.63190000 3.644540000 1.920780000 13.23320000 772 15.05930000 0.000000000 41.69400000 3.277320000 1.385090000 13.91140000 773 65.98910000 0.000000000 59.13050000 22.21420000 10.79560000 30.70590000 774 86.61860000 0.000000000 78.78650000 40.75190000 19.77470000 57.67390000 775 90.84330000 48.11480000 100.0000000 58.59240000 38.74410000 99.00300000 776 90.36150000 67.24630000 100.0000000 65.98960000 54.11590000 101.5800000 777 91.61360000 81.12090000 100.0000000 74.63280000 69.89810000 104.1710000 778 100.0000000 81.42380000 100.0000000 82.04400000 73.99460000 104.5710000 779 16.94300000 23.47810000 20.11010000 2.838240000 3.594390000 3.323950000 780 16.94720000 22.40320000 32.19250000 3.656290000 3.690270000 8.342980000 781 20.30250000 55.34740000 37.65110000 13.07950000 20.95380000 14.39580000 782 31.92380000 81.83110000 48.77240000 30.07570000 49.23120000 27.42400000 783 30.17500000 81.26590000 80.20920000 36.72950000 51.29090000 66.21720000 784 32.88180000 84.04930000 100.0000000 46.02310000 57.86680000 103.3560000 785 0.000000000 48.84600000 44.11690000 10.38120000 15.98820000 18.18330000 786 0.000000000 59.05040000 47.89400000 14.80180000 23.88450000 22.57220000 787 0.000000000 63.44520000 84.64810000 25.65710000 31.29890000 70.26780000 788 0.000000000 75.88410000 87.61430000 32.98450000 44.37940000 77.56670000 789 0.000000000 81.91430000 86.97310000 36.33730000 51.43160000 77.61760000 790 28.32950000 40.06630000 41.65020000 9.988100000 11.94780000 15.56470000 791 31.56250000 48.32710000 54.51870000 15.24400000 18.03580000 27.59830000 792 59.85700000 52.71370000 61.72060000 28.33110000 26.86870000 36.43160000 793 62.59620000 58.83190000 68.81250000 33.78730000 33.03330000 46.18120000 794 67.52880000 67.10410000 77.52670000 42.57400000 42.83520000 60.07840000 795 23.85970000 28.10060000 36.94110000 5.977210000 6.103380000 11.45090000 796 25.85620000 32.89960000 39.31350000 7.523410000 8.215440000 13.33030000 797 40.17830000 36.07240000 39.66810000 11.71120000 11.40240000 13.96690000 798 46.06280000 38.01490000 44.12470000 14.74540000 13.58390000 17.49530000 799 45.95090000 43.56550000 56.64000000 18.37970000 17.41640000 29.49580000 800 44.82760000 53.92760000 57.06740000 21.51470000 24.13560000 31.07930000 801 45.13190000 60.92010000 70.44630000 27.54520000 31.08480000 48.33630000 802 0.000000000 19.72200000 29.44960000 2.233540000 2.503980000 6.797450000 803 0.000000000 39.99470000 35.37650000 6.601750000 10.26580000 11.26020000 804 0.000000000 40.59460000 41.46640000 7.528210000 10.89020000 15.35680000 805 0.000000000 86.09650000 60.21150000 31.64150000 53.82320000 39.72530000 806 12.09940000 100.0000000 68.59290000 44.03170000 74.87570000 53.42640000 807 0.000000000 100.0000000 73.59840000 44.95530000 75.19930000 60.35870000 808 24.61540000 63.38880000 13.09520000 15.21670000 27.29960000 5.549670000 809 33.62670000 64.01400000 11.12430000 17.30390000 28.80780000 5.404630000 810 46.87900000 77.09600000 0.000000000 27.97320000 44.38080000 7.092360000 811 89.27310000 100.0000000 20.44320000 68.43830000 88.30440000 16.32030000 812 100.0000000 100.0000000 18.86450000 77.45650000 92.96380000 16.27750000 813 53.85050000 64.20500000 0.000000000 24.06610000 32.44140000 4.993710000 814 59.03490000 87.08810000 0.000000000 39.32240000 59.44020000 9.401110000 815 66.61290000 100.0000000 18.42850000 53.07090000 80.39500000 15.01540000 816 81.48880000 100.0000000 31.28230000 63.44840000 85.63360000 20.53080000 817 90.96880000 100.0000000 38.73200000 71.48760000 89.68100000 25.29290000 818 90.21760000 100.0000000 53.04000000 73.11610000 90.26260000 37.02770000 819 44.04650000 47.40470000 100.0000000 31.77000000 24.57460000 97.68140000 820 51.49370000 54.97270000 100.0000000 37.22210000 31.34410000 98.70070000 821 70.60530000 55.77850000 100.0000000 47.13420000 36.91720000 99.25410000 822 20.78800000 13.52090000 26.68370000 2.729820000 1.944640000 5.409190000 823 18.36900000 15.31160000 24.46620000 2.385840000 1.992070000 4.537070000 824 15.24150000 27.26060000 22.89880000 3.415260000 4.724250000 4.430480000 825 18.71200000 41.03040000 25.61090000 6.977380000 10.97650000 6.481890000 826 41.94590000 20.19230000 0.000000000 7.162610000 5.266270000 0.639075000 827 46.68210000 36.86590000 0.000000000 11.70500000 11.94840000 1.689510000 828 51.27600000 45.09550000 0.000000000 15.69650000 17.30380000 2.512870000 829 56.72390000 54.88650000 0.000000000 21.41030000 25.22840000 3.741410000 830 76.69150000 59.23010000 0.000000000 34.30730000 34.46480000 4.844640000 831 86.01900000 70.08340000 0.000000000 45.97360000 47.99220000 6.840950000 832 100.0000000 75.07740000 27.79070000 61.35500000 59.76720000 13.96510000 833 80.50090000 61.57450000 24.66040000 38.73320000 38.14580000 9.675260000 834 87.59620000 79.69790000 27.19100000 53.55660000 59.71950000 14.10160000 835 100.0000000 83.31540000 32.27670000 66.67400000 69.73240000 17.81490000 836 100.0000000 83.31020000 75.22000000 74.81910000 72.98540000 60.72490000 837 66.17350000 47.14970000 57.69880000 28.86110000 24.41660000 31.42140000 838 72.17160000 54.96300000 62.54850000 36.14820000 32.12690000 38.00820000 839 75.54070000 54.42750000 69.46230000 39.73640000 33.48090000 46.82260000 840 75.63540000 10.33930000 17.09010000 22.92880000 12.13870000 3.078320000 841 86.80930000 0.000000000 45.92780000 33.47380000 16.88010000 18.58570000 842 100.0000000 0.000000000 67.61940000 48.87270000 24.31350000 42.13400000 843 100.0000000 0.000000000 89.26710000 55.30010000 26.88470000 75.98190000 844 100.0000000 86.14070000 90.40230000 81.45210000 78.55840000 86.65500000 845 69.90190000 60.03260000 63.17180000 36.97720000 35.58600000 39.37540000 846 80.15760000 60.92930000 65.43820000 44.48450000 39.96790000 42.60280000 847 100.0000000 61.93740000 66.09370000 60.96780000 49.10340000 44.32270000 848 52.08540000 23.90750000 25.89560000 12.28580000 8.508510000 5.842270000 849 70.25370000 29.24750000 38.23140000 23.54380000 15.44050000 13.15790000 850 80.66310000 30.70140000 49.39000000 32.19720000 20.11150000 22.23890000 851 91.79600000 45.65850000 51.57220000 44.74590000 32.04850000 25.88210000 852 91.64540000 51.76040000 58.30020000 47.95070000 36.55740000 33.41000000 853 20.38690000 73.48100000 0.000000000 19.40600000 36.96120000 6.111670000 854 21.47110000 93.37150000 11.37800000 32.30180000 62.28850000 11.11520000 855 27.47650000 93.73260000 45.76370000 36.65520000 64.56580000 27.48840000 856 27.51030000 93.96390000 54.89640000 38.42210000 65.54320000 35.92800000 857 19.58900000 33.49980000 15.05900000 4.651560000 7.156780000 2.607730000 858 17.79820000 31.93340000 19.16330000 4.307800000 6.477980000 3.523380000 859 25.29170000 69.03970000 41.85830000 20.49580000 33.76200000 19.37350000 860 26.10000000 81.93010000 86.09460000 38.20350000 52.44210000 76.17750000 861 26.59390000 91.02120000 90.28740000 45.73200000 65.07520000 85.72300000 862 29.26700000 100.0000000 100.0000000 56.57270000 80.16600000 107.1050000 863 40.91660000 57.21780000 23.46500000 16.99690000 24.22670000 7.683290000 864 64.55510000 68.31710000 24.07140000 32.00700000 39.37500000 10.04150000 865 64.06510000 54.42140000 14.91650000 25.14510000 26.85900000 5.300330000 866 70.56490000 83.03180000 9.622270000 43.01690000 57.43230000 9.368350000 867 73.06150000 93.24720000 29.27490000 52.55090000 72.47160000 17.56760000 868 92.88990000 93.01880000 100.0000000 83.60990000 86.29370000 106.8630000 869 19.29410000 41.96040000 34.37680000 8.125940000 11.85180000 10.89790000 870 19.27350000 48.61220000 36.50080000 10.38980000 15.99490000 12.85210000 871 30.21070000 55.44460000 37.39410000 14.81370000 21.90730000 14.32340000 872 31.47700000 65.83620000 51.52980000 21.70570000 31.87600000 27.02300000 873 10.71470000 41.62540000 18.01060000 5.922490000 10.72960000 3.940120000 874 0.000000000 66.98430000 15.67220000 15.11940000 29.75070000 6.552200000 875 15.17340000 77.93530000 16.35350000 21.65510000 41.80670000 8.692460000 876 84.50890000 77.02030000 84.92570000 61.21820000 59.99930000 74.40760000 877 46.70790000 42.61240000 47.68290000 16.74990000 16.35900000 20.83580000 878 45.72880000 51.40000000 51.32900000 19.81660000 22.01860000 25.03170000 879 59.15380000 62.50620000 52.34280000 30.06590000 33.88510000 27.74130000 880 63.48540000 63.50240000 58.75910000 33.96010000 36.41560000 34.62220000 881 100.0000000 74.20180000 66.28350000 67.09640000 61.28800000 46.59240000 882 23.90040000 26.12330000 13.91200000 3.874670000 4.742930000 1.947460000 883 38.86130000 38.37370000 18.12650000 9.931720000 11.53050000 3.914440000 884 51.83910000 45.66110000 22.97530000 16.81040000 18.05190000 6.324380000 885 51.65270000 50.43250000 31.97520000 19.05130000 21.43250000 10.84070000 886 73.93920000 75.94750000 66.23600000 48.04880000 52.91500000 45.91960000 887 78.29960000 86.46000000 79.99980000 61.09580000 68.77030000 67.97320000 888 0.000000000 13.66380000 86.48000000 13.56320000 6.144190000 69.21140000 889 41.75680000 11.68130000 100.0000000 24.41040000 10.97170000 95.44350000 890 58.88040000 12.74020000 100.0000000 31.30020000 14.62290000 95.78520000 891 45.45320000 11.68180000 80.53520000 18.81240000 8.875530000 59.49630000 892 44.90480000 0.000000000 82.34710000 18.86480000 8.365260000 62.34240000 893 45.76020000 52.24280000 81.41300000 27.44860000 25.55500000 63.67880000 894 25.60620000 41.27570000 47.02100000 10.60230000 12.65160000 19.88220000 895 27.20020000 64.70200000 62.96230000 22.60500000 31.27710000 39.05020000 896 8.102180000 20.34080000 19.65050000 1.745350000 2.440860000 3.021080000 897 0.000000000 16.95240000 17.28100000 1.101520000 1.595230000 2.241440000 898 10.68550000 14.12560000 16.95400000 1.149010000 1.267500000 2.093730000 899 30.52950000 22.67000000 49.13400000 8.184140000 5.812200000 20.51630000 900 38.57180000 23.50260000 58.79410000 12.16790000 7.822090000 30.28990000 901 71.36050000 33.38640000 63.07480000 29.38910000 19.14980000 36.48660000 902 52.50770000 16.77670000 30.00350000 11.98390000 7.077370000 7.435490000 903 55.21210000 15.76510000 43.70590000 14.70700000 8.157310000 16.12510000 904 64.09710000 20.57530000 48.94560000 20.36120000 11.70370000 20.84510000 905 100.0000000 18.25160000 88.74120000 55.96740000 28.50980000 75.30890000 906 39.94120000 16.72580000 44.33520000 9.197200000 5.432950000 16.37900000 907 39.28390000 24.01510000 51.83300000 11.08960000 7.529860000 23.16900000 908 38.10170000 47.09150000 91.16170000 26.49100000 22.08820000 80.05830000 909 26.37620000 46.77040000 65.55380000 16.05370000 17.43350000 39.89620000 910 28.74000000 51.05520000 84.10110000 23.14320000 22.60950000 67.79460000 911 22.80640000 29.79150000 65.06360000 11.10520000 8.616520000 37.84310000 912 20.52300000 36.38640000 69.32800000 13.20250000 11.62100000 43.82110000 913 18.89190000 53.47050000 100.0000000 28.13070000 25.81550000 98.11260000 914 8.745940000 22.92840000 37.70610000 3.709000000 3.749170000 11.60420000 915 44.80850000 22.29930000 43.21390000 11.22670000 7.415890000 15.78860000 916 45.70430000 23.38090000 50.49550000 12.85010000 8.333220000 21.98540000 917 52.46510000 37.57570000 52.28980000 18.47390000 15.19040000 24.69300000 918 59.36780000 53.35590000 56.87920000 27.30150000 26.80690000 31.09060000 919 59.62380000 61.94780000 71.58700000 34.35270000 35.22840000 50.35190000 920 66.74700000 63.97270000 80.65330000 41.58760000 40.01580000 64.49670000 921 8.692480000 14.27380000 0.000000000 0.685860000 1.087470000 0.173762000 922 10.78190000 14.53640000 6.841630000 0.871665000 1.207560000 0.446693000 923 0.000000000 32.26720000 75.63050000 12.73760000 9.850650000 52.41900000 924 0.000000000 70.75730000 89.02660000 30.68860000 39.01440000 79.18410000 925 44.94290000 88.43320000 88.27580000 48.11060000 63.72880000 81.68420000 926 34.06050000 29.21660000 29.87980000 7.515840000 7.274650000 7.648410000 927 41.25450000 33.37000000 29.84330000 10.34680000 9.938590000 7.995620000 928 46.40060000 43.98390000 31.13000000 14.87900000 16.23020000 9.615430000 929 64.89440000 26.61840000 0.000000000 17.87960000 12.10700000 1.394760000 930 76.66860000 31.90440000 0.000000000 25.88950000 17.65050000 2.042700000 931 78.44230000 85.80730000 0.000000000 49.71370000 63.54160000 9.645210000 932 78.46810000 100.0000000 17.97330000 60.36570000 84.15840000 15.23460000 933 87.44860000 94.10260000 56.90350000 67.21140000 80.48950000 39.37510000 934 100.0000000 93.14540000 92.82120000 87.14840000 88.56850000 92.81820000 935 100.0000000 93.90760000 100.0000000 90.42910000 90.76610000 107.3670000 936 41.15870000 9.048040000 22.87090000 6.738670000 3.661990000 4.040410000 937 74.04510000 0.000000000 20.09210000 21.82520000 11.19040000 3.784200000 938 100.0000000 73.85940000 37.83890000 61.73160000 58.84160000 19.26670000 939 100.0000000 76.63350000 49.21730000 64.94970000 62.61080000 28.56240000 940 25.52350000 31.33260000 43.98260000 7.797070000 7.813050000 16.63700000 941 28.30130000 61.55430000 64.67220000 21.79000000 28.69440000 40.67090000 942 43.10310000 72.43880000 80.53360000 35.28730000 43.01980000 65.21610000 943 35.78480000 44.41360000 47.06740000 13.74480000 15.59660000 20.32410000 944 39.38040000 54.71690000 46.75600000 18.19680000 23.08390000 21.27330000 945 43.72430000 56.50870000 54.52360000 21.63220000 25.73240000 28.75220000 946 53.88830000 83.41940000 63.16880000 41.16040000 56.09120000 43.10930000 947 0.000000000 43.62120000 22.67810000 6.458150000 11.81200000 5.560260000 948 35.88020000 42.09120000 20.36160000 10.20530000 13.11400000 4.850260000 949 49.40910000 48.58840000 20.22740000 16.59640000 19.34800000 5.675540000 950 75.14090000 49.88160000 17.10480000 30.11250000 26.98070000 5.568240000 951 84.27980000 52.24010000 15.19880000 37.17150000 31.85930000 5.692440000 952 56.62970000 18.38480000 17.96820000 13.08490000 7.978290000 3.020370000 953 63.61740000 19.10700000 14.49350000 16.44870000 9.843660000 2.385940000 954 69.85670000 38.11730000 11.93420000 23.19160000 18.30120000 3.192750000 955 80.25920000 53.84330000 55.76560000 39.58560000 33.43480000 30.55860000 956 87.01260000 67.94930000 59.77570000 51.47650000 48.55960000 37.17280000 957 7.267190000 12.06890000 6.590270000 0.516569000 0.768460000 0.360141000 958 8.688540000 7.441780000 0.000000000 0.309358000 0.334689000 0.048300600 959 0.000000000 7.320820000 10.50470000 0.240977000 0.278550000 0.707493000 960 19.29400000 13.35000000 60.69900000 7.553450000 3.832070000 31.90010000 961 17.65860000 12.42530000 100.0000000 19.32470000 8.418560000 95.21870000 962 17.50510000 33.42660000 100.0000000 22.15470000 14.10480000 96.16710000 963 37.62590000 89.70960000 100.0000000 51.01610000 66.02380000 104.6680000 964 24.50190000 5.908080000 13.39600000 2.158830000 1.193340000 1.254140000 965 27.29120000 8.203450000 8.083130000 2.589000000 1.543530000 0.536031000 966 27.76790000 13.10370000 10.28130000 2.994210000 2.137640000 0.890492000 967 36.47110000 28.86070000 16.25890000 7.144230000 7.096730000 2.735010000 968 47.44300000 34.45430000 16.77210000 11.78950000 11.13330000 3.392560000 969 72.42620000 63.18240000 41.64280000 35.94080000 37.56440000 19.13630000 970 86.09630000 73.17520000 48.91470000 51.40710000 52.78000000 27.11040000 971 88.32990000 81.77030000 53.75930000 58.96820000 63.96770000 33.40310000 972 33.26930000 31.61130000 47.90560000 10.08390000 9.002510000 19.95820000 973 45.51520000 35.10610000 47.14180000 14.33380000 12.30160000 19.71990000 974 58.56830000 40.14950000 49.33420000 21.33790000 17.69440000 22.29480000 975 60.94510000 83.11100000 48.30780000 41.32760000 56.22670000 27.77510000 976 68.87030000 84.67640000 62.63630000 49.41340000 61.55140000 43.09300000 977 73.88960000 92.26140000 72.20560000 59.96990000 74.36590000 57.42300000 978 70.79480000 94.08110000 84.45230000 63.00870000 77.46520000 76.87740000 979 41.56380000 20.05600000 21.79490000 7.658310000 5.425440000 3.961430000 980 61.73640000 35.54470000 40.91120000 20.48240000 15.72530000 15.20860000 981 62.90050000 42.93630000 40.95000000 22.98020000 19.82390000 15.89580000 982 63.12860000 58.56750000 45.31980000 29.18720000 31.04950000 21.05290000 983 74.49620000 61.22570000 59.40480000 39.48010000 37.73680000 35.30110000 984 73.78730000 70.41230000 67.16590000 45.18670000 46.96910000 46.11330000 985 82.86500000 81.40340000 100.0000000 68.06910000 66.77150000 103.9130000 986 91.96750000 87.31340000 100.0000000 78.88570000 77.97460000 105.5060000 987 26.30620000 72.58820000 32.95910000 21.43480000 37.11050000 14.27250000 988 27.63380000 87.82400000 59.75770000 35.13010000 57.33870000 39.70850000 989 37.83740000 88.27320000 71.87160000 40.77350000 60.36170000 55.26230000 990 8.794460000 19.73310000 31.00630000 2.578480000 2.666640000 7.582180000 991 0.000000000 16.58740000 30.83610000 2.045550000 1.918900000 7.379260000 992 86.57710000 25.97240000 36.33160000 33.82700000 19.95140000 12.27600000 993 87.56700000 50.27700000 64.81580000 45.63310000 34.42290000 40.69760000 994 62.94210000 37.34800000 46.81840000 22.39850000 17.23980000 19.97610000 995 80.71560000 38.63060000 57.46000000 35.49600000 24.23750000 30.78090000 996 84.31950000 37.42920000 69.40480000 40.54340000 26.08220000 45.27480000 997 32.53960000 7.972890000 23.28410000 4.360650000 2.367380000 4.064010000 998 37.92800000 15.00230000 21.13160000 6.033270000 3.860800000 3.527040000 999 75.63240000 10.18450000 38.66750000 24.78150000 12.86690000 12.88430000 1000 89.68600000 0.000000000 57.15140000 37.73270000 18.84320000 29.29250000 1001 89.25940000 0.000000000 68.13860000 39.88410000 19.66470000 42.38910000 1002 76.36610000 16.31770000 51.12310000 27.58240000 14.72780000 23.02310000 1003 85.91150000 19.35300000 53.39510000 35.03720000 18.97160000 25.62030000 1004 100.0000000 16.08740000 63.45010000 48.51870000 25.20090000 37.09740000 1005 100.0000000 14.60580000 72.44200000 50.64160000 25.85310000 48.88410000 1006 45.28230000 0.000000000 36.09930000 9.141350000 4.490860000 10.44960000 1007 45.78910000 0.000000000 44.00100000 10.36760000 5.002060000 15.97320000 1008 49.10570000 62.69590000 43.42290000 24.31990000 31.21830000 19.85240000 1009 49.35060000 75.29570000 50.68640000 31.93380000 44.43760000 28.12410000 1010 19.28480000 47.26300000 23.68460000 8.744530000 14.63390000 6.347320000 1011 49.00350000 52.74160000 26.55560000 18.32470000 22.33380000 8.468470000 1012 68.97460000 67.51390000 44.01100000 36.26050000 40.72620000 21.51210000 1013 16.87620000 20.56600000 0.000000000 1.927620000 2.632250000 0.406503000 1014 17.31700000 51.43910000 0.000000000 9.159780000 17.02630000 2.803740000 1015 13.60800000 69.74240000 11.42490000 16.85370000 32.70320000 6.225870000 1016 40.82470000 75.49280000 100.0000000 43.06830000 48.72480000 101.7470000 1017 30.99680000 37.32910000 51.03430000 11.34360000 11.45190000 23.16390000 1018 37.42700000 37.66320000 82.02730000 20.59990000 15.47040000 63.09660000 1019 35.28730000 0.000000000 44.41150000 7.201300000 3.362670000 16.14460000 1020 56.28760000 0.000000000 50.99780000 15.75720000 7.649150000 22.16350000 1021 65.38550000 0.000000000 50.55330000 20.22640000 9.962220000 21.96410000 1022 64.20710000 29.82650000 88.06040000 31.71130000 18.48300000 73.42980000 1023 21.22210000 0.000000000 89.14530000 15.38330000 6.311260000 73.89310000 1024 18.14060000 64.20490000 100.0000000 32.51060000 34.70990000 99.59860000 1025 17.14390000 81.00510000 100.0000000 41.40200000 52.66160000 102.5950000 1026 19.33070000 54.45230000 65.25990000 17.56440000 22.18460000 40.36600000 1027 20.85030000 86.32710000 67.05830000 34.68600000 55.43550000 48.16200000 1028 23.52360000 100.0000000 77.07210000 47.64750000 76.47380000 65.60940000 1029 37.82430000 57.39320000 32.63550000 16.94410000 24.21280000 11.84270000 1030 59.46960000 67.31860000 34.09010000 29.81900000 37.41070000 14.52320000 1031 60.48700000 73.12070000 70.98390000 40.10680000 46.36210000 51.36150000 1032 65.13030000 77.15900000 78.05100000 46.74360000 52.90240000 62.60900000 1033 74.57380000 79.08010000 83.49670000 55.11140000 58.69100000 72.05710000 1034 94.09690000 100.0000000 93.32730000 87.33760000 96.32000000 95.27050000 1035 29.03770000 14.35820000 7.082800000 3.272140000 2.424170000 0.575582000 1036 30.76450000 18.22400000 4.534240000 3.952120000 3.291070000 0.532021000 1037 31.26740000 21.53220000 7.935160000 4.487660000 4.118170000 0.918027000 1038 44.82320000 44.81360000 64.88300000 20.15240000 18.66950000 39.08280000 1039 69.79700000 46.78070000 79.84080000 36.42860000 27.49520000 61.05330000 1040 72.81680000 47.41830000 100.0000000 45.50620000 31.66250000 98.32570000 1041 37.70630000 52.15260000 55.20890000 18.25800000 21.53060000 28.81310000 1042 40.42640000 61.17220000 81.62720000 29.30950000 31.78790000 65.13270000 1043 47.96360000 61.12090000 92.65450000 35.56730000 34.55210000 84.79310000 1044 50.43390000 71.47050000 100.0000000 44.28490000 46.10670000 101.1780000 1045 69.73950000 86.16630000 100.0000000 62.48970000 68.39280000 104.5200000 1046 15.05270000 23.75700000 26.89400000 3.161390000 3.763840000 5.827770000 1047 16.65270000 33.76380000 35.27940000 5.909050000 7.710050000 10.74540000 1048 19.91820000 39.97810000 42.62110000 8.713720000 11.24070000 16.21190000 1049 21.21240000 51.27890000 56.61210000 14.75850000 19.23190000 30.00770000 1050 0.000000000 26.10260000 32.57320000 3.395960000 4.341630000 8.687330000 1051 0.000000000 34.26600000 41.01240000 5.933880000 7.800970000 14.51790000 1052 0.000000000 64.13160000 26.55370000 14.43810000 27.31470000 9.633840000 1053 19.27660000 100.0000000 30.03690000 38.14270000 72.60160000 18.72100000 1054 45.94870000 100.0000000 31.93830000 44.68110000 75.95100000 19.99380000 1055 80.11030000 100.0000000 44.51240000 64.12280000 85.79160000 29.13490000 1056 91.05810000 100.0000000 66.14560000 76.59140000 91.73100000 51.79320000 1057 14.66740000 14.94860000 20.64480000 1.714240000 1.631200000 3.169390000 1058 13.60470000 19.77640000 33.85540000 3.192930000 2.956800000 9.142150000 1059 8.313300000 19.14070000 38.03720000 3.270120000 2.836130000 11.66620000 1060 0.000000000 25.24730000 53.00040000 6.200570000 5.252810000 24.10660000 1061 10.82940000 23.75410000 60.01250000 7.697770000 5.539720000 31.44250000 1062 19.26580000 21.67810000 60.85220000 8.395850000 5.468720000 32.34700000 1063 21.26230000 26.42040000 85.35130000 16.02490000 9.632160000 67.79730000 1064 39.26270000 54.42840000 86.87480000 27.90700000 26.78850000 73.13230000 1065 70.24000000 67.32920000 100.0000000 51.99430000 46.96110000 100.9370000 1066 57.86830000 38.91010000 66.20680000 24.15740000 18.27150000 40.45460000 1067 67.06700000 38.42360000 67.59030000 29.12020000 20.60910000 42.42190000 1068 80.23700000 37.33190000 80.38910000 40.67320000 25.75810000 61.36880000 1069 17.21710000 18.05660000 29.71030000 2.941080000 2.602430000 6.905090000 1070 14.30730000 14.14220000 28.27460000 2.179370000 1.713030000 6.096780000 1071 39.08640000 23.69940000 32.71090000 8.278340000 6.327320000 8.888140000 1072 22.42950000 11.43620000 19.78300000 2.355470000 1.605980000 2.867130000 1073 24.69900000 17.67180000 21.23700000 3.292530000 2.802120000 3.501210000 1074 26.57640000 13.56170000 26.92610000 3.686240000 2.439750000 5.558380000 1075 80.99220000 19.50230000 64.63000000 33.83240000 18.10110000 37.93960000 1076 90.47390000 21.95900000 64.44390000 41.23200000 22.35560000 38.14190000 1077 27.72110000 7.277130000 18.78940000 3.023340000 1.672660000 2.557530000 1078 28.32380000 0.000000000 20.84510000 3.147020000 1.556100000 3.142610000 1079 84.98400000 11.20730000 18.58690000 29.57010000 15.62390000 3.795200000 1080 87.98710000 0.000000000 92.17460000 46.21070000 22.08020000 80.91640000 1081 91.49470000 14.69950000 100.0000000 52.49330000 25.75990000 96.81820000 1082 0.000000000 8.089100000 27.62900000 1.208170000 0.710154000 5.663080000 1083 8.162650000 11.69580000 38.20520000 2.660840000 1.594070000 11.56850000 1084 0.000000000 13.94690000 41.76150000 3.115100000 1.997810000 14.08740000 1085 17.64100000 46.70520000 76.91470000 17.74480000 17.92780000 55.64510000 1086 85.74400000 53.89850000 80.53490000 49.80080000 38.01380000 63.48720000 1087 100.0000000 60.38810000 89.23620000 67.08260000 50.46840000 79.85700000 1088 26.34000000 0.000000000 46.57050000 5.555220000 2.475570000 17.80690000 1089 33.84150000 8.399150000 69.93660000 12.18140000 5.558880000 43.52520000 1090 54.99770000 38.44120000 83.83880000 27.69000000 19.34440000 66.48220000 1091 12.37900000 6.524060000 18.87740000 0.966585000 0.576178000 2.478990000 1092 14.41640000 11.47340000 19.06320000 1.359970000 1.100620000 2.612160000 1093 22.05400000 0.000000000 24.61830000 2.311600000 1.096130000 4.426780000 1094 42.44190000 8.896530000 65.23160000 13.49110000 6.399780000 37.49860000 1095 71.41650000 0.000000000 72.06750000 28.45100000 13.65290000 47.17070000 1096 76.55980000 20.11720000 76.00040000 33.84140000 17.86700000 53.40640000 1097 90.33590000 82.97690000 77.18050000 66.91080000 68.53180000 63.22650000 1098 100.0000000 83.26820000 82.10880000 76.84350000 73.75280000 71.51630000 1099 100.0000000 100.0000000 92.43880000 92.17970000 98.85350000 93.81230000 1100 88.60800000 0.000000000 12.85440000 31.80520000 16.37360000 2.523390000 1101 87.77660000 22.67540000 73.76270000 41.56970000 22.39370000 50.58160000 1102 100.0000000 68.17300000 83.26650000 68.70200000 56.88320000 70.60690000 1103 100.0000000 79.72300000 91.21140000 77.70580000 70.60740000 86.81740000 1104 19.46600000 8.480480000 50.24170000 5.257590000 2.485150000 21.02460000 1105 17.62930000 0.000000000 53.28030000 5.427000000 2.275700000 23.84560000 1106 89.29680000 26.72920000 52.75390000 38.53650000 22.27190000 25.44890000 1107 21.24740000 35.45680000 8.417160000 5.101940000 8.049580000 1.694290000 1108 35.79740000 88.85830000 0.000000000 31.88310000 57.37740000 9.394930000 1109 67.48930000 100.0000000 0.000000000 53.12540000 80.47370000 12.73360000 1110 91.92250000 100.0000000 86.15610000 83.02930000 94.38770000 82.01870000 1111 26.88750000 25.91290000 30.05000000 5.412300000 5.365830000 7.474290000 1112 46.91380000 23.97200000 35.69730000 11.22520000 7.865710000 10.74640000 1113 50.43320000 25.51530000 42.29980000 13.64610000 9.353430000 15.34840000 1114 50.27420000 27.23500000 69.01900000 19.12150000 11.97410000 43.16410000 1115 47.93300000 50.93220000 67.11310000 23.80190000 23.44230000 42.63080000 1116 53.68240000 54.84440000 66.52500000 27.40650000 27.44500000 42.45900000 1117 57.58060000 56.09010000 72.63900000 31.21090000 29.94220000 50.97600000 1118 63.03990000 61.33900000 91.48920000 41.99740000 38.05680000 82.93460000 1119 48.85090000 47.90770000 82.53110000 27.45310000 23.30870000 65.07800000 1120 59.09040000 49.35850000 100.0000000 38.58470000 29.04280000 98.18470000 1121 15.53780000 6.667290000 29.20310000 1.984330000 1.021430000 6.406660000 1122 15.29840000 28.60410000 77.88630000 13.36180000 9.070000000 55.65320000 1123 12.47340000 32.93220000 86.19230000 16.55040000 11.64300000 69.61350000 1124 0.000000000 30.93620000 51.10430000 6.832810000 7.067850000 22.62040000 1125 0.000000000 37.57090000 55.06950000 9.013600000 10.25110000 26.98100000 1126 0.000000000 44.47820000 50.94780000 10.11580000 13.67860000 23.57820000 1127 12.31850000 47.00680000 66.81680000 14.64660000 16.78410000 41.44700000 1128 0.000000000 54.50130000 73.10640000 18.47490000 22.45020000 50.86650000 1129 0.000000000 68.21760000 76.17220000 25.33960000 34.80940000 57.38220000 1130 62.39510000 100.0000000 94.80930000 66.42550000 85.47600000 97.14500000 1131 23.28590000 27.72850000 24.88420000 4.649130000 5.460120000 5.249610000 1132 30.81260000 30.94310000 26.82350000 6.806160000 7.416980000 6.310540000 1133 39.47150000 29.44640000 36.29330000 9.711890000 8.390360000 11.29150000 1134 39.02870000 43.63390000 35.55200000 12.83570000 14.97060000 11.94520000 1135 28.24400000 48.13290000 26.57600000 10.69750000 16.03340000 7.662930000 1136 83.83360000 50.77750000 25.91460000 36.96360000 30.90760000 8.873190000 1137 82.70910000 59.16340000 49.29630000 42.24680000 38.07630000 25.09330000 1138 84.72400000 61.86650000 62.15710000 47.42080000 42.17900000 38.89230000 1139 91.45620000 85.97710000 63.30080000 66.13580000 71.41020000 44.90860000 1140 22.75620000 29.31000000 22.50380000 4.674790000 5.902890000 4.452770000 1141 21.21000000 42.02160000 38.76820000 8.920810000 12.22650000 13.66360000 1142 19.55620000 44.49630000 52.63870000 11.56550000 14.39870000 25.23920000 1143 17.78910000 67.41170000 53.01740000 20.41790000 32.31100000 28.59670000 1144 51.22620000 95.10390000 54.42900000 46.22820000 70.82200000 36.06430000 1145 59.66400000 100.0000000 56.60440000 54.16550000 80.41350000 39.73240000 1146 12.50380000 25.69500000 0.000000000 2.227010000 3.821760000 0.620326000 1147 13.59020000 46.37690000 13.78680000 7.342150000 13.55570000 3.441440000 1148 20.42490000 55.60620000 25.71090000 12.00040000 20.68470000 8.131840000 1149 22.26710000 58.38530000 33.83260000 14.13080000 23.34920000 12.48900000 1150 73.93790000 81.08680000 39.53260000 46.12190000 56.98290000 20.85880000 1151 82.35800000 87.68240000 42.16530000 56.39280000 68.51870000 24.41650000 1152 100.0000000 90.74020000 57.59640000 75.48040000 81.16460000 39.80830000 1153 100.0000000 92.63940000 68.95790000 79.43230000 84.89900000 53.98060000 1154 79.85250000 69.46400000 53.38040000 45.72730000 46.87130000 30.42790000 1155 93.92650000 68.96120000 72.97050000 60.74780000 53.71900000 54.48040000 1156 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 1157 84.16980000 68.78270000 70.29190000 52.24480000 49.28450000 50.33700000 1158 90.46210000 75.23850000 72.94050000 61.22420000 58.91640000 55.41580000 1159 19.45290000 18.42690000 15.39170000 2.287580000 2.432200000 1.892800000 1160 46.34870000 59.81500000 10.46400000 19.27510000 27.06730000 4.869620000 1161 56.78300000 86.96370000 13.89520000 38.41410000 58.82190000 10.56250000 1162 67.87050000 95.73520000 38.92600000 52.34000000 74.95490000 23.58920000 1163 0.000000000 18.20900000 58.49190000 6.394140000 3.909030000 29.50730000 1164 9.873560000 53.65670000 74.56070000 18.81190000 22.10580000 52.88540000 1165 13.68520000 60.19930000 75.27060000 21.89570000 27.55980000 54.82050000 1166 20.68040000 94.52910000 100.0000000 50.93420000 71.08080000 105.6480000 1167 79.46690000 22.14040000 22.68460000 26.86570000 15.69730000 5.237180000 1168 84.27210000 29.77960000 22.20600000 31.45580000 19.83860000 5.628680000 1169 83.29970000 30.54160000 29.18080000 31.42780000 19.97280000 8.502580000 1170 90.30230000 65.94960000 74.78520000 56.79320000 49.42950000 56.48720000 1171 89.11440000 74.03880000 100.0000000 68.51760000 60.64690000 102.7080000 1172 25.15310000 22.46590000 75.07090000 12.92970000 7.545890000 51.13460000 1173 48.76940000 33.87230000 85.22090000 24.50560000 16.07580000 68.36990000 1174 71.18140000 10.60810000 30.26640000 21.08700000 11.10250000 7.862590000 1175 87.89630000 0.000000000 36.96190000 33.07390000 16.81700000 12.10420000 1176 57.18490000 0.000000000 23.05530000 12.78080000 6.506170000 4.336770000 1177 92.79490000 39.93780000 23.30120000 40.46840000 27.83040000 7.082420000 1178 92.82580000 57.08050000 21.89330000 46.06890000 39.14430000 8.478920000 1179 92.21450000 66.11650000 30.73920000 50.24810000 47.11850000 13.51470000 1180 51.36590000 42.73020000 82.19890000 26.76840000 20.62770000 64.04890000 1181 52.63660000 42.83590000 92.38740000 30.76120000 22.33370000 82.18160000 1182 18.74670000 31.57890000 40.50010000 6.345240000 7.193240000 14.01560000 1183 21.04040000 36.14170000 50.29090000 9.132800000 9.910070000 22.29840000 1184 23.36150000 37.84440000 56.72830000 11.09280000 11.38430000 28.80840000 1185 42.03160000 51.68690000 59.30030000 20.22560000 22.20110000 33.20070000 1186 65.15160000 50.68940000 64.15960000 30.89840000 27.05660000 39.24540000 1187 70.06260000 61.56420000 76.15870000 41.07840000 38.29870000 57.20620000 1188 13.99340000 0.000000000 13.27120000 0.758358000 0.366400000 1.145140000 1189 18.83630000 5.368570000 7.821370000 1.173210000 0.682590000 0.418298000 1190 20.22950000 0.000000000 34.27110000 2.940180000 1.317930000 9.076880000 1191 36.27220000 15.93460000 81.87920000 16.69140000 8.196640000 61.65570000 1192 86.00270000 28.43770000 86.87590000 45.09670000 25.06040000 71.89490000 1193 90.08200000 33.40390000 100.0000000 54.03190000 30.53130000 97.65810000 1194 37.28040000 0.000000000 28.31890000 5.834460000 2.877800000 6.149250000 1195 52.47910000 0.000000000 27.44800000 11.03940000 5.569720000 6.002830000 1196 66.42810000 50.74580000 44.47740000 27.85570000 25.95180000 19.46820000 1197 73.56330000 55.63450000 45.27010000 33.99860000 31.78200000 20.90080000 1198 100.0000000 73.43040000 55.77630000 64.36720000 59.52180000 34.29910000 1199 68.51590000 15.64610000 0.000000000 18.55940000 10.46600000 1.042190000 1200 86.66700000 16.88530000 0.000000000 30.81960000 16.95040000 1.647780000 1201 100.0000000 30.91760000 10.89290000 44.08150000 26.72570000 3.557610000 1202 100.0000000 79.28130000 17.87170000 63.10700000 64.34540000 11.23900000 1203 37.58580000 30.14800000 0.000000000 7.353300000 7.590590000 1.077670000 1204 46.82010000 28.84010000 8.207200000 10.16710000 8.679530000 1.526870000 1205 58.44700000 34.17530000 8.102580000 16.10180000 13.29890000 2.095000000 1206 62.01270000 40.90020000 8.558460000 19.50530000 17.47770000 2.770420000 1207 61.67900000 68.93750000 14.36940000 30.28120000 39.00820000 7.261040000 1208 26.22910000 36.82730000 0.000000000 6.147560000 9.069800000 1.426720000 1209 37.98630000 38.45680000 0.000000000 9.278430000 11.27330000 1.687060000 1210 53.76120000 52.78850000 10.51540000 19.43360000 23.02910000 4.088960000 1211 69.87440000 62.01140000 0.000000000 31.24820000 34.66950000 5.045320000 1212 71.46240000 63.27460000 15.90290000 33.08140000 36.41960000 6.945430000 1213 90.27260000 68.73150000 24.12540000 49.39500000 48.64600000 10.93520000 1214 17.91850000 19.59870000 26.74540000 2.925570000 2.867330000 5.603340000 1215 19.49310000 18.14200000 45.30150000 5.132660000 3.524170000 16.99280000 1216 28.03070000 16.46950000 44.84290000 6.285750000 3.888440000 16.63530000 1217 50.87250000 66.15230000 66.05690000 30.99110000 36.53450000 43.42960000 1218 52.55300000 73.02800000 66.09250000 35.19170000 43.89650000 44.67440000 1219 45.02530000 56.93090000 35.05860000 19.29100000 25.11640000 13.26880000 1220 48.75850000 56.20970000 42.38730000 21.30280000 25.62060000 18.14980000 1221 87.65330000 57.67080000 43.81580000 44.46040000 38.40330000 20.48020000 1222 40.67790000 26.61870000 18.55400000 8.094820000 7.011420000 3.255320000 1223 56.77470000 37.90290000 17.78350000 16.51390000 14.75290000 4.098560000 1224 93.18580000 44.32940000 18.95000000 41.75050000 30.34100000 6.095660000 1225 92.34260000 44.29570000 45.05880000 43.70290000 31.02530000 20.07390000 1226 91.84920000 45.41820000 76.62280000 50.55820000 34.26080000 56.62630000 1227 93.60270000 63.43230000 86.73790000 61.99870000 49.94570000 75.56540000 1228 41.91390000 22.76270000 28.98040000 8.656450000 6.374050000 6.982810000 1229 65.43440000 31.52880000 27.50130000 20.10620000 14.43650000 7.260090000 1230 75.40380000 35.75130000 33.93800000 27.56460000 19.54480000 11.10670000 1231 74.48020000 45.64650000 34.08930000 29.63770000 24.54470000 12.04890000 1232 83.73340000 50.89720000 41.64730000 38.63510000 31.63460000 17.85300000 1233 85.19620000 91.38110000 65.13650000 65.35130000 76.41900000 48.16260000 1234 0.000000000 29.19720000 11.40550000 2.537600000 4.831780000 1.597520000 1235 0.000000000 78.83530000 17.61400000 21.59110000 42.55140000 9.152480000 1236 0.000000000 83.36160000 33.47560000 25.59010000 48.58130000 16.55420000 1237 14.35640000 90.60340000 83.07030000 41.36290000 62.66710000 72.83660000 1238 0.000000000 67.83730000 60.93950000 21.30420000 32.89360000 37.06060000 1239 20.86190000 74.79320000 72.54250000 29.10190000 42.00060000 53.27800000 1240 36.85200000 85.71790000 76.34570000 40.03900000 57.31560000 61.21260000 1241 49.52040000 43.47530000 35.71260000 16.39180000 16.73340000 12.19500000 1242 49.57370000 45.81150000 41.58760000 17.85710000 18.43960000 16.35760000 1243 19.08770000 14.78640000 8.803970000 1.700670000 1.659880000 0.682698000 1244 24.57550000 15.06630000 0.000000000 2.439850000 2.084300000 0.273747000 1245 39.39890000 11.81520000 0.000000000 5.643390000 3.393590000 0.357663000 1246 63.00740000 0.000000000 11.45190000 15.08580000 7.759420000 1.508570000 1247 84.97820000 38.38350000 8.981680000 33.27260000 23.60540000 3.275310000 1248 88.34180000 40.47110000 0.000000000 36.28950000 25.96950000 3.100420000 1249 89.41380000 61.73650000 0.000000000 44.62260000 41.38390000 5.636600000 1250 41.85310000 26.78610000 0.000000000 8.046320000 7.077850000 0.942180000 1251 44.86990000 73.78470000 19.56600000 25.89960000 40.49690000 9.068980000 1252 53.92910000 74.41850000 19.05690000 29.74720000 43.00010000 9.201970000 1253 0.000000000 17.36000000 10.10610000 0.877045000 1.567370000 0.868399000 1254 0.000000000 13.88890000 23.45090000 1.209050000 1.228480000 4.070950000 1255 0.000000000 28.74710000 21.76220000 2.936000000 4.862960000 4.090740000 1256 0.000000000 34.43260000 20.24760000 3.966480000 7.072160000 3.977760000 1257 0.000000000 34.82410000 70.31250000 11.83340000 10.35720000 44.98080000 1258 0.000000000 48.55310000 87.72330000 20.83180000 20.01320000 73.69750000 1259 8.953000000 47.30160000 93.92110000 22.82090000 20.18060000 85.11530000 1260 9.033070000 20.05590000 47.17300000 4.711030000 3.579680000 18.56980000 1261 63.37100000 17.11160000 65.44980000 22.96470000 12.11170000 38.37450000 1262 68.99620000 15.21610000 90.22700000 33.19770000 16.29620000 76.85710000 1263 82.73720000 20.27090000 100.0000000 46.30280000 23.37290000 96.68360000 1264 82.38040000 42.15880000 100.0000000 50.32730000 31.80410000 98.09900000 1265 10.80630000 5.641730000 37.45510000 2.455590000 1.120710000 11.00140000 1266 9.229770000 9.519180000 44.17650000 3.414820000 1.715770000 15.84200000 1267 9.724170000 16.85040000 62.33060000 7.339520000 4.103680000 33.85950000 1268 39.87660000 61.91620000 67.68590000 25.57020000 30.79590000 44.69970000 1269 55.27550000 65.48120000 74.01260000 34.60030000 37.68280000 54.26170000 1270 69.35620000 63.60780000 70.53180000 40.03870000 39.30070000 49.38080000 1271 77.66680000 63.69800000 75.78890000 46.72650000 42.64410000 57.19380000 1272 35.96140000 15.41030000 65.11150000 11.96040000 6.223050000 37.39560000 1273 41.03970000 16.81430000 74.49280000 15.97070000 8.194500000 50.25070000 1274 48.68980000 12.76510000 74.09610000 18.19250000 8.874510000 49.68690000 1275 69.06900000 26.94130000 74.51390000 29.72480000 17.19950000 51.29500000 1276 35.90430000 26.30680000 37.56310000 8.326900000 6.866390000 11.87040000 1277 41.37600000 24.69500000 38.78230000 9.820070000 7.253040000 12.66570000 1278 62.65450000 33.00290000 48.27170000 21.50950000 15.30490000 20.88920000 1279 62.79780000 35.07070000 57.83770000 23.80660000 16.94690000 30.39560000 1280 80.38570000 47.48940000 91.58440000 47.34280000 33.00980000 81.85700000 1281 79.99270000 92.64140000 100.0000000 73.51460000 80.68620000 106.3120000 1282 0.000000000 91.32430000 30.12540000 30.57760000 59.09580000 16.55630000 1283 49.89910000 94.04210000 35.91450000 42.07750000 67.85060000 20.83080000 1284 84.71250000 58.48150000 21.19480000 40.21640000 36.97950000 8.138800000 1285 85.40990000 61.27510000 38.07910000 43.48920000 40.24940000 16.79570000 1286 44.98470000 62.60960000 33.36280000 21.50010000 29.85350000 13.09180000 1287 57.85020000 65.26020000 67.49770000 33.96680000 37.39850000 45.28680000 1288 63.99870000 85.99990000 66.86280000 48.56460000 62.27640000 48.49970000 1289 64.09200000 95.10100000 81.07400000 58.89940000 76.58410000 71.32130000 1290 13.05760000 26.29770000 36.66420000 4.350610000 4.826930000 11.11650000 1291 5.591090000 26.58580000 50.02800000 5.948980000 5.494080000 21.37470000 1292 12.32540000 40.86190000 60.28550000 11.33910000 12.57690000 32.91770000 1293 0.000000000 49.27190000 73.98740000 16.84440000 18.80180000 51.51630000 1294 16.40590000 63.59030000 92.36750000 29.14480000 32.88940000 84.26660000 1295 9.199120000 37.00660000 39.56180000 6.582610000 9.086160000 13.71720000 1296 13.39610000 45.35530000 45.75470000 10.01320000 14.11750000 19.14740000 1297 10.79100000 47.65050000 51.71750000 11.54600000 15.86200000 24.64400000 1298 21.37220000 61.76540000 51.84250000 18.03400000 27.20390000 26.60950000 1299 50.14570000 83.72490000 55.15160000 38.10790000 55.00120000 34.16920000 1300 40.00670000 36.30520000 22.99850000 10.06320000 10.82380000 5.293000000 1301 47.19070000 39.22280000 20.43890000 13.02240000 13.42770000 4.786270000 1302 47.01290000 67.72400000 28.96390000 24.20020000 34.86850000 11.65600000 1303 56.76630000 73.70810000 30.37690000 31.46590000 43.21030000 13.56800000 1304 42.66000000 40.24080000 14.14020000 11.40780000 13.02340000 3.193860000 1305 48.25420000 52.39670000 14.90700000 17.21010000 21.65410000 4.711770000 1306 79.88770000 66.52770000 23.00230000 40.47170000 42.44530000 9.795650000 1307 84.09230000 73.37600000 42.00300000 48.95200000 51.79900000 21.46170000 1308 23.79450000 19.43440000 11.78630000 2.892290000 2.918890000 1.269430000 1309 22.21540000 18.47830000 0.000000000 2.380320000 2.521940000 0.361357000 1310 21.15460000 16.61190000 5.794800000 2.078770000 2.092200000 0.474434000 1311 53.04850000 22.59000000 46.86200000 14.99320000 9.349960000 18.88000000 1312 57.47710000 34.13040000 74.30540000 24.95630000 16.77250000 51.15940000 1313 72.61670000 78.44730000 77.08220000 51.55180000 56.52710000 61.56890000 1314 41.99860000 45.58220000 41.15950000 15.03470000 16.88670000 15.89740000 1315 41.39640000 44.64240000 47.35670000 15.48460000 16.58940000 20.66880000 1316 51.19110000 46.68940000 72.86900000 25.15310000 21.87080000 50.06420000 1317 55.00730000 55.95870000 83.00570000 33.03450000 30.45380000 66.95010000 1318 7.792340000 49.25060000 22.62640000 8.369890000 15.41770000 6.137390000 1319 0.000000000 76.08790000 39.10410000 21.89350000 40.12730000 18.59100000 1320 15.67510000 85.18660000 52.30190000 30.17250000 52.36580000 31.26370000 1321 16.95260000 94.35990000 61.76210000 38.55860000 65.87870000 43.47090000 1322 66.08810000 60.77790000 34.55020000 30.28970000 33.17160000 13.94570000 1323 74.65490000 73.98850000 33.86170000 41.78590000 48.71720000 15.94480000 1324 87.02580000 80.35480000 40.66250000 54.97740000 60.86990000 21.92830000 1325 87.88400000 86.66160000 49.98510000 61.06930000 69.77710000 30.83920000 1326 93.30400000 87.40000000 92.79290000 77.31160000 77.56530000 91.15880000 1327 53.61150000 47.06310000 49.29610000 21.09410000 20.55350000 22.82550000 1328 63.01160000 48.93410000 53.30540000 26.88490000 24.36210000 27.00250000 1329 66.62430000 91.12670000 100.0000000 64.08090000 74.22520000 105.5620000 1330 9.824500000 37.11660000 31.36630000 5.703730000 8.780600000 8.782810000 1331 12.67590000 50.62210000 42.24650000 11.15340000 17.31490000 16.97700000 1332 34.58370000 67.35820000 73.27700000 28.09720000 35.69520000 53.16020000 1333 47.46500000 67.31070000 91.56000000 37.84940000 40.02300000 83.66520000 1334 73.55640000 68.03990000 90.97040000 50.97770000 47.34830000 83.28790000 1335 74.07220000 87.85700000 92.61460000 63.45830000 70.88650000 90.26080000 1336 21.45370000 26.26350000 27.56530000 4.347480000 4.924190000 6.282750000 1337 19.53320000 29.39070000 27.42110000 4.605440000 5.846090000 6.383320000 1338 35.10400000 36.21860000 40.26720000 10.39820000 10.76680000 14.32840000 1339 37.71740000 42.00350000 51.77330000 14.38190000 14.80370000 24.34310000 1340 57.88910000 44.77800000 61.18760000 24.63060000 21.05970000 34.88690000 1341 83.53250000 45.16470000 69.94370000 42.21070000 30.05390000 46.68050000 1342 92.89970000 51.50600000 73.54050000 52.56540000 38.37780000 52.76710000 1343 33.39470000 24.17730000 31.14480000 6.659280000 5.611370000 8.006490000 1344 53.93850000 24.82630000 34.05060000 13.96760000 9.484610000 9.945570000 1345 57.80310000 24.12610000 42.82610000 16.71710000 10.62290000 15.82480000 1346 69.79300000 44.43960000 52.91650000 29.15910000 23.43780000 26.32540000 1347 75.40490000 45.45930000 50.77620000 32.54680000 25.68520000 24.55500000 1348 76.51120000 51.23850000 62.84920000 37.60350000 30.83380000 38.03940000 1349 85.18030000 56.35780000 70.37240000 47.44610000 38.53810000 48.62540000 1350 70.34880000 63.49710000 58.95400000 37.84400000 38.40950000 35.01720000 1351 81.30870000 77.17580000 63.88250000 53.12530000 56.63750000 43.44610000 1352 80.92530000 78.07770000 73.77070000 55.88650000 58.54840000 56.81740000 1353 85.34120000 76.44420000 74.73360000 58.42050000 58.42430000 58.06190000 1354 39.03870000 15.27670000 37.45970000 7.867640000 4.667520000 11.40380000 1355 47.13050000 16.27630000 45.73530000 11.77580000 6.677170000 17.60250000 1356 64.16350000 12.80440000 59.06280000 21.60010000 11.05850000 30.71410000 1357 89.40150000 15.40200000 68.29470000 40.62010000 20.90710000 42.79550000 1358 95.19530000 13.47040000 76.23970000 47.38090000 23.92430000 54.22120000 1359 92.78310000 25.99710000 43.61810000 39.73380000 22.89100000 17.58260000 1360 91.79500000 51.22650000 49.41800000 46.20440000 35.56990000 24.50960000 1361 93.75430000 58.26900000 56.71520000 51.87320000 42.32860000 32.61870000 1362 47.41980000 37.56350000 31.50680000 13.56700000 12.99290000 9.254520000 1363 51.94820000 57.57520000 34.69950000 22.14620000 26.97840000 13.26650000 1364 52.10390000 57.64280000 64.21690000 27.29290000 29.08850000 39.89770000 1365 7.288360000 15.14320000 27.00650000 1.707240000 1.598770000 5.535070000 1366 11.55000000 25.52710000 55.58420000 7.094000000 5.719540000 26.73410000 1367 0.000000000 34.82740000 88.08080000 17.16920000 12.49280000 73.07620000 1368 26.01310000 34.03540000 89.62260000 19.66080000 13.45860000 75.91550000 1369 28.96620000 70.48300000 94.02530000 35.03420000 40.83760000 88.66040000 1370 41.55930000 81.48970000 93.53930000 44.35990000 54.91230000 89.94930000 1371 23.45610000 78.61070000 51.04440000 26.87530000 44.64940000 28.76270000 1372 27.80730000 81.31200000 60.38660000 31.11070000 49.03230000 39.02720000 1373 43.97680000 30.29460000 27.06070000 10.37690000 9.072460000 6.544300000 1374 44.81750000 30.77490000 41.36840000 12.32810000 10.03190000 14.86730000 1375 53.04450000 28.87390000 54.25500000 17.25790000 11.80920000 26.02590000 1376 57.41850000 43.93200000 55.11090000 22.89990000 19.94040000 28.16170000 1377 46.59610000 35.50880000 39.04580000 13.64000000 12.21420000 13.59880000 1378 45.82660000 60.76680000 49.45170000 23.20620000 29.27100000 24.53580000 1379 52.29690000 64.80720000 56.58820000 28.84720000 34.72580000 32.23080000 1380 61.25210000 66.95260000 60.00060000 34.69940000 39.17940000 36.49930000 1381 26.28700000 26.90510000 20.89390000 4.753220000 5.342220000 3.804270000 1382 25.63760000 30.87100000 19.85370000 5.278680000 6.664790000 3.710650000 1383 25.83300000 32.73000000 31.63760000 6.604490000 7.791260000 8.685690000 1384 24.07520000 63.35270000 44.57540000 17.95710000 28.35910000 20.53170000 1385 13.77930000 50.25990000 28.88600000 9.579230000 16.49490000 8.843320000 1386 15.26870000 64.15650000 33.18390000 15.72910000 27.92590000 12.92440000 1387 12.61810000 73.81540000 54.76940000 23.57690000 38.82730000 31.42510000 1388 11.03730000 80.18140000 54.91260000 27.15300000 46.10030000 32.78550000 1389 21.25260000 100.0000000 60.23190000 43.04470000 74.59310000 43.15650000 1390 46.49320000 100.0000000 61.83130000 49.68050000 77.97350000 45.30010000 1391 71.42930000 100.0000000 61.67810000 61.67000000 84.15830000 45.68340000 1392 24.83520000 23.33090000 7.866800000 3.451000000 3.933660000 0.930259000 1393 29.36820000 29.35640000 7.425810000 5.259670000 6.288440000 1.247430000 1394 75.83250000 54.19970000 10.23080000 31.86030000 30.21430000 4.781940000 1395 86.06970000 64.35260000 11.61790000 43.37170000 42.47710000 6.745210000 1396 18.17750000 5.321750000 17.70480000 1.427380000 0.773380000 2.174620000 1397 14.82610000 7.416570000 22.92370000 1.444180000 0.836723000 3.792850000 1398 48.00870000 8.257810000 35.29290000 10.18750000 5.261180000 10.05530000 1399 63.43870000 16.36540000 42.39330000 18.55970000 10.24360000 15.33070000 1400 63.40230000 13.71310000 80.35200000 26.74820000 13.17280000 59.61400000 1401 82.95310000 11.13200000 85.10060000 40.28460000 19.73060000 68.03750000 1402 90.35540000 74.20440000 84.30090000 63.94540000 59.07760000 73.02190000 1403 35.39950000 51.16630000 33.96330000 14.07230000 19.22180000 11.76970000 1404 46.36090000 91.29550000 42.38500000 39.60540000 63.55300000 24.50530000 1405 58.66890000 91.01520000 50.36880000 45.82850000 66.32270000 31.32470000 1406 16.36340000 34.31980000 28.10970000 5.281040000 7.647510000 7.003650000 1407 19.72120000 37.50980000 46.98480000 8.726910000 10.24680000 19.48630000 1408 20.82610000 50.19810000 46.45960000 12.50710000 17.72220000 20.29130000 1409 73.86730000 37.25580000 29.05280000 26.45150000 19.55160000 8.622820000 1410 86.35750000 67.53370000 36.20090000 46.88190000 46.33610000 16.60030000 1411 94.98750000 75.78580000 35.52830000 58.11610000 58.59780000 17.96590000 1412 37.95480000 27.42190000 7.871050000 7.043250000 6.708050000 1.276900000 1413 42.62340000 47.50700000 27.65640000 14.34820000 17.60340000 8.243610000 1414 45.83160000 75.45820000 57.10390000 31.92880000 44.43010000 34.48650000 1415 48.13410000 78.09220000 65.40180000 36.11180000 48.61500000 44.66750000 1416 28.85100000 43.86850000 36.94790000 10.54000000 13.86980000 12.71390000 1417 30.88890000 58.75620000 44.51960000 17.26200000 25.03200000 19.88210000 1418 31.07250000 80.02860000 66.30780000 32.37370000 48.36830000 45.95920000 1419 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 1420 70.25060000 46.81800000 65.20590000 32.75510000 26.07550000 40.24930000 1421 71.86840000 49.43490000 74.68000000 37.03530000 29.27010000 53.48280000 1422 74.37040000 55.22850000 89.44610000 45.31600000 36.11640000 78.61530000 1423 54.64490000 74.90980000 72.76640000 38.83110000 47.10550000 54.06830000 1424 67.51810000 89.38170000 85.53910000 58.12190000 69.95770000 77.54660000 1425 81.57250000 91.82570000 87.98500000 69.61310000 78.32210000 82.84800000 1426 39.11040000 47.90960000 46.42230000 15.65870000 18.21040000 20.18860000 1427 55.89910000 71.27490000 46.38170000 31.78800000 41.21180000 23.74470000 1428 27.21700000 38.22030000 18.40100000 7.105990000 10.01550000 3.845260000 1429 28.49690000 42.78690000 27.47770000 9.189060000 12.82190000 7.513270000 1430 33.24350000 43.64000000 75.40310000 19.13370000 17.31400000 53.18460000 1431 45.24010000 54.17840000 93.59530000 32.10070000 28.53770000 85.61200000 1432 8.643610000 11.48110000 23.34230000 1.231430000 1.004480000 3.986930000 1433 8.643800000 8.936200000 26.63680000 1.349660000 0.844155000 5.249530000 1434 21.50600000 24.98020000 30.54700000 4.426720000 4.641310000 7.633370000 1435 18.86310000 25.46460000 39.91800000 5.213380000 5.032200000 13.25200000 1436 31.52200000 28.73400000 39.97680000 7.961580000 7.245660000 13.57510000 1437 40.84740000 33.52780000 52.11750000 13.29570000 11.15700000 24.02290000 1438 49.86000000 48.19900000 54.34210000 20.82800000 20.85600000 27.67120000 1439 30.04380000 11.18090000 13.57530000 3.441720000 2.177410000 1.410240000 1440 33.20510000 19.69170000 12.35090000 4.834910000 3.960780000 1.461200000 1441 38.36390000 22.55280000 3.848800000 6.380620000 5.294680000 0.759007000 1442 47.83410000 87.97630000 0.000000000 35.12480000 58.16020000 9.375220000 1443 75.78210000 87.08500000 60.82040000 54.83810000 66.73750000 41.68950000 1444 71.87360000 82.49680000 67.42200000 50.95210000 60.16130000 48.68720000 1445 77.55680000 84.07300000 92.77680000 63.30240000 67.11420000 89.84910000 1446 82.46350000 88.43740000 92.95590000 69.64780000 74.64550000 91.30950000 1447 15.81050000 16.90520000 36.86630000 3.441950000 2.606850000 10.86250000 1448 20.23130000 14.65980000 70.57400000 10.13910000 5.036470000 44.40050000 1449 20.76620000 19.26280000 82.03740000 13.93400000 7.253300000 61.87820000 1450 32.15650000 23.50700000 82.90600000 16.83410000 9.496380000 63.59280000 1451 7.508650000 11.69870000 19.44160000 0.950273000 0.906843000 2.705520000 1452 13.11430000 18.28770000 16.69260000 1.677760000 2.089890000 2.160460000 1453 30.32710000 18.05290000 15.10350000 4.101580000 3.312010000 1.904170000 1454 41.97330000 21.91900000 13.60970000 7.605740000 5.779990000 1.892740000 1455 44.39950000 24.19300000 9.730610000 8.600210000 6.763200000 1.415440000 1456 63.42650000 47.65470000 17.03420000 22.52520000 21.97060000 4.983370000 1457 82.78100000 90.71890000 25.20670000 56.94930000 72.10800000 15.48570000 1458 100.0000000 92.00160000 35.34130000 72.83850000 81.53210000 21.50470000 1459 8.663030000 12.50590000 33.25570000 2.162790000 1.478520000 8.574270000 1460 10.07660000 6.862030000 49.34550000 4.182040000 1.861530000 20.15280000 1461 18.79120000 8.581070000 84.44380000 13.64980000 5.839130000 65.63870000 1462 18.69330000 68.31690000 83.97390000 28.79340000 36.38920000 69.94170000 1463 16.12710000 83.59820000 85.07910000 37.51060000 53.67570000 74.69890000 1464 8.136090000 50.60910000 49.01740000 11.92470000 17.58460000 22.48810000 1465 0.000000000 69.15510000 52.43150000 20.25240000 33.52620000 28.27420000 1466 9.426260000 70.07300000 66.28750000 23.89310000 35.75710000 43.94610000 1467 39.02930000 7.453440000 26.83020000 6.326320000 3.321740000 5.548230000 1468 48.42140000 8.639090000 27.48920000 9.586580000 5.063600000 5.999900000 1469 53.32000000 0.000000000 77.81830000 20.74150000 9.491860000 55.24110000 1470 37.34810000 0.000000000 54.86870000 9.549100000 4.365920000 25.61290000 1471 37.50480000 0.000000000 91.66640000 19.67750000 8.422580000 78.72250000 1472 59.79360000 14.33330000 92.04720000 28.84980000 13.87610000 80.00750000 1473 31.32560000 8.978110000 49.11100000 7.168010000 3.523630000 20.10770000 1474 63.17880000 64.06120000 48.17420000 32.07170000 36.05170000 24.25270000 1475 69.41300000 64.93320000 47.88410000 35.88310000 38.62370000 24.29780000 1476 70.77620000 70.10530000 75.35140000 45.34290000 46.56490000 57.37290000 1477 75.70110000 75.91290000 85.24010000 54.56690000 55.62140000 74.45210000 1478 33.25770000 6.272430000 19.32950000 4.230140000 2.244920000 2.758360000 1479 50.11130000 3.704140000 21.45410000 9.660760000 4.947560000 3.650660000 1480 34.07060000 45.57300000 15.40060000 10.50790000 14.81070000 3.850910000 1481 41.07900000 50.12770000 15.55050000 13.96010000 18.78680000 4.469740000 1482 14.71150000 18.62500000 21.22660000 2.093930000 2.328030000 3.469490000 1483 22.12790000 20.76350000 34.87670000 4.402200000 3.737170000 9.819400000 1484 26.12610000 22.39770000 42.66060000 6.258020000 4.882660000 15.14370000 1485 27.37020000 33.82900000 62.91830000 12.19930000 10.43190000 35.52250000 1486 32.42310000 33.64190000 68.59060000 14.59880000 11.45220000 42.73240000 1487 37.37200000 38.58510000 67.46570000 16.73390000 14.28710000 41.69240000 1488 63.47450000 38.74080000 72.89020000 28.62390000 20.31230000 49.61060000 1489 72.83420000 40.35870000 77.44390000 35.68670000 24.42610000 56.76110000 1490 85.87730000 46.33190000 79.37570000 46.95040000 32.72620000 60.77230000 1491 86.98360000 45.19980000 86.14970000 49.58740000 33.32040000 71.98270000 1492 86.28410000 86.21770000 91.98430000 70.63920000 72.99440000 89.09790000 1493 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1494 7.602700000 6.567340000 10.17070000 0.350730000 0.300228000 0.660184000 1495 44.24550000 34.02410000 8.486050000 10.28150000 10.24890000 1.853280000 1496 66.83920000 49.04680000 8.798640000 24.55210000 23.72800000 3.737570000 1497 67.47170000 60.20630000 26.71380000 30.06360000 32.77690000 9.932970000 1498 72.46280000 61.72380000 48.22940000 36.31320000 36.67240000 24.19690000 1499 75.83110000 77.41680000 49.31350000 46.61990000 53.82810000 27.91870000 1500 80.04300000 81.28510000 62.79100000 54.43180000 60.96890000 42.90000000 1501 92.28910000 81.64960000 65.31840000 64.53610000 66.44280000 46.50670000 1502 95.65540000 91.17000000 73.23510000 75.67810000 81.28310000 59.39240000 1503 30.41320000 29.69900000 19.62470000 5.988030000 6.705360000 3.613030000 1504 37.08730000 34.06880000 29.50620000 9.236410000 9.591300000 7.823660000 1505 39.79220000 42.17360000 28.84450000 11.96180000 13.98110000 8.213130000 1506 58.66910000 51.17480000 30.72550000 22.30530000 23.50900000 10.42300000 1507 67.89090000 55.71810000 31.44960000 28.89400000 29.39990000 11.58400000 1508 73.21030000 94.50780000 67.07300000 59.85080000 76.87300000 50.99290000 1509 92.26160000 95.09380000 86.25250000 79.59500000 87.05360000 80.95200000 1510 35.74000000 16.27250000 13.40480000 5.168120000 3.618250000 1.565260000 1511 82.52150000 15.88920000 7.748220000 27.71900000 15.21140000 1.816760000 1512 100.0000000 17.59670000 12.64200000 42.21280000 22.90270000 3.197850000 1513 93.19120000 22.39100000 10.02030000 36.75950000 20.91270000 2.700310000 1514 42.55580000 0.000000000 9.092780000 6.391990000 3.284570000 0.782342000 1515 54.98510000 11.47710000 9.239650000 11.46920000 6.355960000 1.125050000 1516 54.64370000 10.52850000 59.40300000 16.91150000 8.431010000 30.83170000 1517 67.49410000 0.000000000 88.73980000 31.25050000 14.50740000 73.90590000 1518 73.37710000 12.95570000 100.0000000 39.32510000 18.78150000 96.16510000 1519 89.38150000 59.34410000 100.0000000 61.61650000 46.52980000 100.3460000 1520 18.90290000 10.43780000 9.647380000 1.411170000 1.084030000 0.687519000 1521 19.61170000 11.15190000 4.935120000 1.457940000 1.175290000 0.276570000 1522 20.82110000 14.65050000 12.09260000 2.004550000 1.790540000 1.148240000 1523 19.54410000 62.65940000 0.000000000 13.92850000 26.16980000 4.317340000 1524 38.93210000 66.03230000 35.06800000 21.33500000 32.10080000 14.51480000 1525 44.74570000 70.78830000 91.11360000 38.46990000 42.96540000 83.36720000 1526 11.54590000 51.32870000 85.11460000 21.26940000 21.74850000 69.45290000 1527 0.000000000 59.29250000 86.63640000 24.49410000 27.92400000 73.11300000 1528 8.395420000 59.24300000 93.55120000 27.07300000 28.94290000 85.87040000 1529 10.03670000 80.03160000 95.15780000 38.35490000 50.42980000 92.54120000 1530 9.077290000 93.97080000 97.35850000 48.41550000 69.29440000 100.0270000 1531 58.45910000 30.10470000 28.92470000 16.39450000 12.10340000 7.654760000 1532 61.09440000 82.30190000 27.92150000 38.34330000 54.23090000 14.16780000 1533 77.39530000 88.76840000 32.39850000 52.50150000 67.74090000 18.24270000 1534 93.37420000 89.95560000 38.57710000 66.01990000 75.83940000 22.80610000 1535 64.61430000 33.87070000 22.94510000 19.79750000 15.03290000 5.573510000 1536 71.75370000 32.57970000 47.85200000 26.47760000 17.74430000 20.73570000 1537 70.91800000 34.91480000 55.83670000 27.91320000 19.05890000 28.47230000 1538 77.60680000 62.29070000 55.46060000 41.17640000 39.40180000 31.31260000 1539 30.41220000 24.33820000 19.71560000 5.115010000 4.951260000 3.347390000 1540 31.23870000 23.27060000 24.44350000 5.454460000 4.867920000 4.921740000 1541 43.45610000 42.91550000 36.54140000 14.13260000 15.31870000 12.54960000 1542 51.09470000 50.06160000 42.32960000 19.95050000 21.56140000 17.39470000 1543 62.56000000 57.60940000 49.77500000 29.22420000 30.40170000 24.72720000 1544 79.31830000 92.03340000 49.28610000 58.37270000 73.88010000 31.14530000 1545 27.78910000 77.46500000 20.69180000 23.42520000 42.28710000 9.887540000 1546 52.27640000 86.96870000 22.47690000 36.88430000 57.98710000 12.79950000 1547 53.95990000 93.15450000 63.50500000 47.86250000 69.32700000 45.71550000 1548 32.11970000 64.20890000 40.17230000 19.31860000 29.71610000 17.44970000 1549 34.82470000 80.52730000 40.36180000 28.71580000 47.49100000 20.51790000 1550 14.21990000 57.73790000 44.83200000 14.34220000 22.89950000 19.87170000 1551 8.552620000 67.07110000 93.17800000 30.49220000 35.98910000 86.33510000 1552 11.26280000 72.31720000 93.97080000 33.61240000 41.53670000 88.76490000 1553 9.934560000 52.79520000 67.94410000 16.74790000 20.77170000 43.56680000 1554 40.27530000 56.70000000 71.13960000 24.38340000 26.82690000 48.63450000 1555 39.37840000 56.53750000 81.89900000 27.14820000 27.79840000 64.92070000 1556 77.58720000 60.83620000 88.11270000 49.25210000 41.60780000 77.06240000 1557 65.72530000 18.82990000 25.22970000 18.16770000 10.61480000 5.668970000 1558 79.43190000 22.09780000 29.06200000 27.33680000 15.87420000 7.870710000 1559 86.06210000 51.12000000 33.26370000 39.42320000 32.27550000 12.55980000 1560 14.72790000 6.610220000 12.05910000 0.873915000 0.565650000 0.965858000 1561 11.03870000 44.82930000 59.62570000 12.23750000 14.73270000 32.54310000 1562 17.19600000 65.62720000 59.59570000 20.80230000 31.07990000 35.21360000 1563 17.14400000 77.75980000 63.17640000 27.99150000 44.20100000 41.51730000 1564 49.71350000 86.28550000 72.20760000 43.53820000 59.80550000 55.48100000 1565 57.37780000 85.25860000 86.25700000 50.37340000 61.84430000 77.63370000 1566 7.998260000 16.41430000 22.62750000 1.519010000 1.701590000 3.851280000 1567 30.96480000 13.36550000 34.20590000 5.263790000 3.151720000 9.270890000 1568 39.45870000 33.66330000 65.35060000 15.67920000 12.10780000 38.63360000 1569 47.29780000 36.01250000 73.15580000 20.80740000 15.29570000 49.43330000 1570 59.11250000 51.80290000 92.92610000 36.75470000 29.67030000 84.30480000 1571 19.15890000 15.83270000 54.43700000 6.448620000 3.698900000 25.21230000 1572 29.33690000 15.52610000 56.26810000 8.470890000 4.661330000 27.16610000 1573 39.37260000 24.37460000 67.38880000 14.49010000 8.975690000 40.68560000 1574 58.29200000 23.16340000 77.43670000 24.30380000 13.46960000 55.23510000 1575 33.72610000 12.96870000 43.75550000 7.108880000 3.920640000 15.74600000 1576 46.15050000 19.68080000 62.95110000 15.05410000 8.494790000 35.03740000 1577 75.81860000 19.30720000 68.45470000 31.23750000 16.62400000 42.67420000 1578 74.04560000 29.32170000 71.33180000 32.29040000 19.22930000 47.01760000 1579 79.75670000 32.94500000 92.31890000 43.32800000 25.20650000 81.94440000 1580 6.186600000 11.17620000 15.73760000 0.688595000 0.747786000 1.729250000 1581 7.681140000 14.47990000 14.33290000 0.907881000 1.196340000 1.502970000 1582 7.712890000 12.85810000 10.16230000 0.658325000 0.908997000 0.760360000 1583 6.466360000 14.61160000 8.584390000 0.701903000 1.125050000 0.607675000 1584 7.702420000 17.89100000 14.11160000 1.202500000 1.797850000 1.559160000 1585 11.54210000 33.51940000 8.293300000 3.664290000 6.677660000 1.492110000 1586 15.82000000 66.18710000 66.71780000 22.55500000 32.19170000 43.87740000 1587 12.29830000 66.55570000 72.01260000 23.78390000 32.93190000 51.06070000 1588 8.245930000 79.65140000 88.33750000 35.59260000 48.94900000 79.60160000 1589 35.42290000 42.98110000 60.67260000 15.80590000 15.74220000 33.73390000 1590 43.19480000 51.41450000 63.85450000 21.51890000 22.60740000 38.50910000 1591 48.41010000 59.86100000 76.74170000 30.01590000 31.48330000 57.35260000 1592 59.11520000 60.45540000 81.32600000 36.25690000 34.91950000 64.88080000 1593 13.65230000 7.376480000 94.02990000 16.39730000 6.804260000 83.08220000 1594 9.117540000 23.91370000 92.41880000 16.92710000 9.256380000 80.44580000 1595 0.000000000 56.61550000 63.77710000 16.94590000 23.15330000 38.76150000 1596 15.65100000 59.51570000 65.06960000 19.13520000 26.01130000 40.78490000 1597 23.57160000 59.37830000 76.41300000 23.07120000 27.61100000 56.47450000 1598 27.51610000 87.29400000 81.06760000 40.31130000 58.84000000 68.86540000 1599 82.38190000 100.0000000 79.97480000 73.72700000 89.81900000 71.33070000 1600 0.000000000 21.43580000 8.767870000 1.294360000 2.452190000 0.852975000 1601 11.19670000 28.80440000 9.702180000 2.756230000 4.845840000 1.349670000 1602 36.47400000 69.56820000 21.41730000 21.19530000 34.75690000 8.784560000 1603 61.94650000 75.51340000 20.60370000 34.22440000 46.20290000 10.04670000 1604 75.55600000 91.13500000 19.05440000 51.88860000 69.97880000 13.24200000 1605 25.25840000 32.38240000 8.658260000 5.078470000 7.055250000 1.529840000 1606 25.22340000 41.67470000 6.853910000 7.260300000 11.48170000 2.094190000 1607 45.41610000 43.43400000 7.198080000 13.03680000 15.19620000 2.536440000 1608 45.70210000 54.90080000 0.000000000 16.93330000 22.92860000 3.533390000 1609 89.70050000 58.07500000 61.57760000 49.50690000 40.87170000 37.85210000 1610 44.98530000 16.20290000 22.89750000 8.476320000 5.258140000 4.266390000 1611 57.53560000 11.64850000 21.55900000 13.16200000 7.183390000 3.932280000 1612 63.63620000 21.64520000 33.27240000 18.10170000 10.98010000 9.577650000 1613 82.78550000 35.89830000 47.79150000 34.53470000 22.97070000 21.26790000 1614 90.34900000 38.62690000 79.53680000 48.31260000 30.19980000 60.46730000 1615 89.62720000 57.82900000 77.89130000 53.55330000 42.32270000 59.96160000 1616 33.38720000 19.29430000 25.33360000 5.534770000 4.175460000 5.133280000 1617 33.68150000 17.38400000 28.69860000 5.688340000 3.930750000 6.535630000 1618 33.29350000 28.59970000 33.20770000 7.548910000 7.090880000 9.347090000 1619 40.99640000 34.71660000 34.77780000 11.06240000 10.68100000 10.75060000 1620 43.07760000 39.17790000 36.10070000 12.94460000 13.21220000 11.93340000 1621 56.06180000 40.26890000 40.98610000 18.92540000 16.64500000 15.52170000 1622 47.27710000 19.21910000 18.77350000 9.346190000 6.177310000 3.089400000 1623 70.23060000 17.31390000 35.41110000 21.55380000 12.02120000 10.83190000 1624 88.24020000 16.65530000 48.39650000 35.67190000 18.99770000 20.96440000 1625 89.13530000 38.05830000 57.65470000 41.67120000 27.20470000 31.23710000 1626 69.08150000 27.53960000 31.34240000 21.78670000 14.18320000 8.965780000 1627 92.04780000 42.48250000 31.34720000 41.21770000 29.16490000 10.83620000 1628 40.45320000 17.88150000 6.222390000 6.486740000 4.544090000 0.745959000 1629 50.87520000 26.89480000 8.104030000 11.39210000 8.820600000 1.478920000 1630 72.65600000 28.96090000 7.879780000 22.83770000 15.24420000 2.093150000 1631 78.73410000 47.38680000 4.951260000 31.31850000 26.41540000 3.575880000 1632 83.95590000 77.01070000 12.80590000 48.39960000 54.81560000 9.060430000 1633 93.88100000 90.39210000 14.07740000 64.76810000 75.87290000 12.50080000 1634 33.56510000 37.36880000 8.104570000 7.913860000 10.16460000 1.921660000 1635 34.89810000 67.44090000 0.000000000 19.10810000 32.17340000 5.203220000 1636 86.17780000 79.33090000 0.000000000 51.22090000 58.30890000 8.555770000 1637 89.79750000 95.23960000 10.84580000 64.80450000 81.07930000 12.95010000 1638 53.25550000 57.64730000 6.473810000 21.00790000 26.63330000 4.263610000 1639 67.39560000 75.57230000 0.000000000 36.62850000 47.55600000 7.249180000 1640 69.61940000 84.36650000 34.77540000 44.96870000 59.50520000 18.38660000 1641 6.145980000 22.42230000 14.85300000 1.696350000 2.824510000 1.883320000 1642 9.635570000 22.61090000 17.99900000 2.015240000 3.009220000 2.652740000 1643 9.795710000 30.30860000 21.78040000 3.470620000 5.560620000 4.203330000 1644 10.64610000 33.20480000 19.92560000 3.983870000 6.692670000 3.805840000 1645 79.31650000 39.15290000 18.69920000 29.77250000 22.04750000 5.055600000 1646 80.68550000 44.89950000 16.62690000 32.21790000 25.69290000 5.091120000 1647 100.0000000 48.06510000 28.80340000 49.54610000 36.00620000 10.46470000 1648 38.62560000 13.30090000 15.14000000 5.797670000 3.584410000 1.875250000 1649 43.38170000 8.434380000 19.12730000 7.201850000 3.888650000 2.860800000 1650 92.37610000 9.724410000 28.03340000 35.95220000 18.72280000 7.490640000 1651 93.61510000 4.814510000 78.94770000 46.44650000 22.77210000 58.20470000 1652 93.48770000 6.350130000 89.26500000 49.70610000 24.12450000 75.74010000 1653 69.77810000 9.679160000 49.15780000 22.68660000 11.57060000 20.88470000 1654 69.80750000 28.43380000 83.61670000 33.13570000 19.01650000 65.75850000 1655 86.31070000 40.82550000 93.45900000 50.37340000 31.57400000 84.97350000 1656 16.63110000 14.04220000 17.41670000 1.661280000 1.519740000 2.231910000 1657 82.47200000 21.90300000 15.52870000 28.56040000 16.57100000 3.267850000 1658 85.84750000 35.04080000 14.77590000 33.31380000 22.43250000 3.985780000 1659 85.73000000 38.28610000 36.33650000 35.67010000 24.59080000 13.07740000 1660 44.99510000 24.77830000 19.70830000 9.290850000 7.199490000 3.559120000 1661 57.74120000 37.12920000 25.12330000 17.23580000 14.79310000 6.482230000 1662 62.21270000 43.09350000 33.85120000 21.80300000 19.38380000 11.32990000 1663 68.72350000 46.21090000 40.11040000 27.04240000 23.38190000 15.77700000 1664 72.40340000 49.63240000 48.96610000 31.68630000 27.27530000 23.27210000 1665 48.67040000 17.60810000 38.67460000 11.48180000 6.825610000 12.42380000 1666 100.0000000 18.47220000 46.77920000 45.50510000 24.36090000 20.10030000 1667 100.0000000 42.61670000 70.54640000 55.09780000 35.57140000 47.88750000 1668 7.683470000 7.752160000 16.18390000 0.604038000 0.465089000 1.781980000 1669 5.830750000 7.612300000 19.57470000 0.703389000 0.489051000 2.676880000 1670 9.663340000 5.441600000 27.33800000 1.342890000 0.659978000 5.517640000 1671 15.17520000 10.45090000 29.23180000 2.108520000 1.317300000 6.470840000 1672 25.33230000 8.749630000 64.60310000 9.086840000 4.137080000 36.51500000 1673 47.07260000 67.41890000 75.00660000 32.47860000 37.94260000 55.87700000 1674 48.88400000 73.71870000 76.64460000 36.88790000 45.00430000 59.45340000 1675 62.35520000 81.26900000 75.76820000 47.05970000 56.77040000 59.87210000 1676 29.86550000 35.07010000 31.02870000 7.836970000 9.180230000 8.573790000 1677 30.03720000 41.24740000 38.51970000 10.24220000 12.59530000 13.49990000 1678 33.21460000 47.74540000 48.36340000 14.34070000 17.41540000 21.75410000 1679 35.14210000 54.63270000 52.71330000 18.01150000 22.82240000 26.59750000 1680 35.35420000 62.01400000 59.03930000 22.35740000 29.43340000 34.19490000 1681 43.74840000 68.54660000 59.39610000 28.01770000 36.91630000 35.73700000 1682 27.20570000 45.11950000 82.44540000 20.37330000 18.36190000 64.35470000 1683 34.20500000 49.89520000 100.0000000 29.69690000 24.73130000 97.82080000 1684 33.71330000 27.22560000 57.85060000 11.23630000 8.203490000 29.38430000 1685 40.33180000 25.44560000 90.13160000 21.72360000 12.15710000 76.48730000 1686 58.46260000 34.67280000 91.78020000 31.09330000 19.47100000 80.46700000 1687 29.26460000 53.92590000 61.56970000 18.17160000 22.30080000 35.90960000 1688 29.24940000 65.07710000 77.90130000 27.08510000 33.39740000 59.64900000 1689 27.84250000 86.88640000 94.66210000 44.72520000 60.17850000 93.11840000 1690 11.13430000 70.93030000 47.17740000 20.58920000 35.15660000 23.83180000 1691 25.48120000 71.95490000 63.05130000 25.92330000 38.34910000 40.34690000 1692 34.14370000 74.78610000 81.48500000 34.26110000 44.35470000 67.06570000 1693 93.64070000 92.49090000 80.47820000 77.00230000 83.11580000 70.66840000 1694 12.10750000 3.634440000 9.016330000 0.512215000 0.289797000 0.505189000 1695 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1696 15.07580000 7.576140000 8.798710000 0.851780000 0.611411000 0.524460000 1697 13.51850000 9.995080000 7.123700000 0.785743000 0.734013000 0.383934000 1698 9.994580000 14.87120000 46.56730000 4.162680000 2.560870000 17.89400000 1699 9.410450000 9.127100000 56.88810000 5.633490000 2.575730000 27.56460000 1700 60.79530000 10.21250000 68.64700000 21.93180000 10.74640000 42.28440000 1701 61.17290000 63.07650000 67.65000000 34.61310000 36.22980000 45.22520000 1702 74.39890000 68.29670000 78.77440000 47.65990000 46.28670000 62.40820000 1703 22.30460000 6.490790000 16.43560000 1.949160000 1.095260000 1.892250000 1704 43.58990000 9.156830000 39.36840000 9.150590000 4.725500000 12.60830000 1705 53.43000000 6.757060000 45.03820000 13.60950000 6.797020000 16.96660000 1706 76.46240000 10.24210000 63.30510000 29.69700000 14.90060000 35.92650000 1707 84.57280000 11.13280000 73.11560000 37.87970000 18.90580000 49.17300000 1708 60.33530000 11.89210000 51.51730000 18.10320000 9.339110000 22.85100000 1709 62.59550000 25.74630000 54.92640000 21.35990000 13.13890000 26.74240000 1710 82.79740000 50.15710000 59.03120000 40.73040000 31.98340000 33.71000000 1711 86.77660000 59.49100000 66.64900000 48.99480000 41.34540000 44.16300000 1712 46.44640000 28.77900000 35.48840000 11.79600000 9.298140000 10.86680000 1713 51.90840000 31.58020000 43.25990000 15.44400000 11.83970000 16.45520000 1714 54.67890000 46.05000000 52.59460000 21.82260000 20.38880000 25.81240000 1715 53.83200000 60.61130000 56.84260000 27.66390000 31.31050000 31.90210000 1716 53.33080000 65.97250000 61.85080000 30.94840000 36.49770000 38.30440000 1717 73.10510000 83.58470000 73.49840000 53.98130000 62.55620000 57.29880000 1718 76.96590000 97.36580000 83.63440000 69.08960000 84.26950000 76.48880000 1719 9.221160000 51.24380000 58.96010000 14.08470000 18.81030000 32.49290000 1720 12.21280000 56.09420000 58.15330000 15.91110000 22.45640000 32.21670000 1721 23.15940000 94.05530000 69.50200000 41.01070000 66.59760000 53.20090000 1722 11.34940000 68.98360000 22.90190000 16.85290000 32.06760000 9.001340000 1723 23.61370000 70.00130000 21.52440000 18.66060000 33.77790000 8.764380000 1724 68.77700000 83.38810000 21.70950000 42.71310000 57.54900000 12.14660000 1725 90.87910000 98.42750000 29.47150000 69.17760000 86.78850000 19.54910000 1726 8.795140000 17.40190000 8.491930000 1.040500000 1.661930000 0.683400000 1727 14.37810000 13.27780000 6.355450000 1.043030000 1.158810000 0.389413000 1728 12.83150000 8.165380000 12.68900000 0.788393000 0.599061000 1.083780000 1729 12.25440000 15.38950000 24.41000000 1.803020000 1.701690000 4.490180000 1730 7.337630000 13.48610000 29.05210000 1.759200000 1.417120000 6.423320000 1731 6.517260000 8.592970000 32.15240000 1.752030000 0.971699000 7.897140000 1732 9.210330000 40.74110000 89.81540000 19.43280000 15.74010000 76.72000000 1733 12.69450000 91.15250000 90.94500000 44.25670000 64.42500000 86.89100000 1734 22.90890000 12.09130000 8.872460000 2.044530000 1.553380000 0.651791000 1735 22.32920000 8.530330000 8.721610000 1.769010000 1.138780000 0.569269000 1736 24.02700000 8.449480000 4.578840000 1.968470000 1.244090000 0.243724000 1737 22.51000000 14.37940000 7.596100000 2.117240000 1.830180000 0.568377000 1738 34.01480000 94.88620000 10.23660000 35.82780000 65.75460000 11.43360000 1739 49.28840000 94.03500000 25.66190000 40.84130000 67.32020000 15.59370000 1740 59.92930000 94.12280000 43.96160000 47.63400000 70.68000000 26.65600000 1741 79.73180000 93.69120000 59.31680000 61.76560000 77.17890000 41.64200000 1742 93.31330000 94.17960000 66.41670000 74.09440000 83.87710000 50.75330000 1743 96.70500000 93.57680000 86.37520000 82.28830000 86.78590000 80.97240000 1744 55.49440000 32.32950000 25.26260000 15.15430000 12.14210000 6.135690000 1745 91.61350000 33.35180000 37.55110000 39.30280000 24.76470000 13.68520000 1746 91.47450000 49.77740000 37.09390000 43.64810000 33.71330000 14.89170000 1747 36.60720000 93.90910000 59.88010000 41.50890000 66.95780000 41.36660000 1748 39.54780000 93.00840000 66.84510000 43.29350000 66.72330000 49.61300000 1749 50.31410000 94.97560000 76.00850000 50.90270000 72.49760000 63.06440000 1750 18.37420000 27.16340000 14.38470000 3.282280000 4.684050000 2.061570000 1751 17.33220000 28.55910000 8.412730000 3.223850000 5.026200000 1.209210000 1752 48.11070000 40.79530000 10.63880000 13.35880000 14.26140000 2.734110000 1753 47.07030000 40.94880000 42.03470000 15.56560000 15.16550000 16.17330000 1754 51.94440000 52.68860000 74.23550000 27.87680000 26.25960000 52.73490000 1755 16.92660000 11.84040000 11.73170000 1.319210000 1.147890000 1.001750000 1756 16.25580000 13.90790000 11.02750000 1.367170000 1.381620000 0.936190000 1757 11.94210000 22.16960000 14.21770000 1.934300000 2.901290000 1.754770000 1758 14.33120000 20.06660000 14.66960000 1.885730000 2.493810000 1.771040000 1759 8.579410000 40.46280000 22.54550000 5.756710000 10.14690000 5.229460000 1760 29.61180000 48.20300000 75.54140000 19.76210000 19.72860000 53.82280000 1761 48.85020000 66.13400000 82.19670000 34.66260000 37.89720000 66.96250000 1762 56.46910000 76.47880000 92.40480000 46.73310000 51.77470000 87.05570000 1763 40.84710000 8.255330000 11.16800000 6.050250000 3.322390000 1.084980000 1764 59.35910000 24.35420000 6.849110000 14.74670000 9.973030000 1.408110000 1765 61.41820000 51.64050000 23.13800000 23.19750000 24.28600000 7.249400000 1766 71.87540000 58.43160000 21.76930000 31.54810000 32.47600000 7.915320000 1767 93.46520000 66.65300000 55.29720000 55.10030000 49.59230000 32.37840000 1768 94.48850000 84.06570000 83.98360000 73.11150000 72.51190000 74.59540000 1769 54.86690000 50.51470000 48.62730000 22.67590000 23.08610000 22.64010000 1770 64.75800000 54.80840000 54.76310000 30.18960000 29.15550000 29.20340000 1771 95.44920000 65.68850000 66.45740000 58.76220000 50.51170000 45.17280000 1772 95.41480000 76.22850000 77.86220000 67.28890000 62.71030000 63.12810000 1773 36.35600000 38.07300000 32.31690000 10.23700000 11.45200000 9.561010000 1774 80.06850000 53.07340000 33.08620000 35.75570000 31.43030000 12.49150000 1775 93.21890000 59.69860000 32.15780000 48.32540000 41.81290000 13.32910000 1776 63.53590000 31.26990000 7.898510000 18.05040000 13.41540000 1.994260000 1777 74.87750000 35.66010000 8.211960000 25.60270000 18.68750000 2.645740000 1778 94.52360000 39.55330000 8.562080000 41.16570000 28.11670000 3.683000000 1779 96.25480000 50.82090000 10.52350000 46.11590000 35.74060000 5.137720000 1780 94.85170000 52.16660000 30.82270000 46.61710000 36.56590000 11.71140000 1781 56.05720000 59.54650000 26.24080000 23.93430000 29.20500000 9.366550000 1782 55.25160000 59.51250000 42.36590000 25.33630000 29.70110000 18.70900000 1783 69.72710000 59.64530000 52.17120000 34.45200000 34.30070000 27.42650000 1784 26.18770000 20.07410000 52.92240000 7.665480000 4.990940000 23.90310000 1785 25.34480000 26.86810000 56.70470000 9.185520000 7.086160000 28.05450000 1786 27.03940000 26.34100000 70.47900000 12.58780000 8.347240000 44.78050000 1787 31.64860000 30.28880000 80.21520000 16.98550000 11.31160000 59.55030000 1788 38.72190000 47.65600000 83.87820000 24.38650000 21.55700000 67.14970000 1789 49.50830000 61.35290000 84.24060000 33.37730000 33.90650000 69.67200000 1790 57.06940000 71.93070000 93.78650000 45.01160000 47.11620000 88.88560000 1791 38.32330000 31.19230000 44.38090000 10.78560000 9.306260000 17.07880000 1792 48.43000000 39.64760000 56.88740000 18.26660000 15.75420000 29.44200000 1793 60.19060000 85.30080000 58.62260000 44.28690000 59.60930000 38.40500000 1794 20.06950000 20.14310000 7.533060000 2.321770000 2.755190000 0.730209000 1795 21.22410000 56.43860000 13.45090000 11.74620000 21.11860000 4.605200000 1796 19.36910000 77.35360000 28.05160000 22.54690000 41.67660000 12.63580000 1797 45.29440000 94.67260000 81.09030000 50.31040000 71.68590000 70.85480000 1798 52.25150000 96.89340000 89.99570000 57.56830000 77.55120000 86.97140000 1799 10.54180000 38.84650000 36.97160000 6.785850000 9.900090000 12.16040000 1800 7.424750000 45.22090000 56.05880000 11.43290000 14.57830000 28.70620000 1801 8.844440000 67.31030000 56.66910000 20.34740000 32.11940000 32.26070000 1802 12.60750000 84.46460000 71.99860000 33.86430000 53.06600000 54.39620000 1803 32.20460000 34.61510000 13.39280000 7.097900000 8.783120000 2.458270000 1804 37.92800000 43.59420000 8.706660000 10.73410000 14.07480000 2.592110000 1805 45.54110000 47.47410000 36.56280000 16.23450000 18.45550000 13.05760000 1806 47.85560000 52.09030000 35.57730000 18.53440000 21.98960000 13.01490000 1807 44.84980000 43.71340000 25.34290000 13.74660000 15.58720000 6.906980000 1808 59.79270000 42.73460000 27.25530000 19.85540000 18.30080000 7.910940000 1809 74.52770000 42.57830000 25.06100000 27.93140000 22.41870000 7.365850000 1810 69.15870000 40.14340000 36.48920000 25.09720000 19.84370000 12.81280000 1811 69.53810000 56.95240000 39.87280000 31.30580000 31.25520000 16.90740000 1812 69.12710000 83.87130000 43.88250000 45.54540000 59.19620000 24.48820000 1813 68.98440000 94.06430000 51.72420000 53.71530000 73.60450000 33.57380000 1814 23.28040000 50.50590000 18.53860000 10.07590000 16.96180000 5.067310000 1815 32.97030000 52.28700000 21.89800000 12.82450000 19.29210000 6.400360000 1816 33.37200000 52.83840000 41.17280000 15.04640000 20.51300000 16.60630000 1817 34.55570000 57.30600000 50.44180000 18.50180000 24.67840000 24.79330000 1818 65.31490000 61.05110000 64.58640000 35.14240000 35.25360000 41.12760000 1819 64.66970000 69.24650000 76.14350000 41.65970000 43.99000000 58.25120000 1820 65.49010000 69.48280000 83.58940000 44.48150000 45.36190000 70.20010000 1821 23.47530000 35.16590000 30.24660000 6.594750000 8.580410000 8.129560000 1822 35.29650000 41.47070000 65.01570000 16.33830000 15.27550000 38.79320000 1823 38.19030000 48.92660000 73.10390000 21.45110000 21.03290000 50.43260000 1824 37.71260000 62.57980000 89.98100000 31.89470000 33.72600000 79.83830000 1825 93.70360000 72.64400000 89.08450000 67.44690000 59.44020000 81.29450000 1826 90.32220000 36.49230000 44.47790000 39.90130000 26.00250000 18.84360000 1827 92.61760000 36.24610000 51.17550000 42.81250000 27.29100000 24.69430000 1828 91.59160000 44.05010000 56.57540000 45.04550000 31.37520000 30.71710000 1829 95.45790000 76.46120000 55.69220000 62.02970000 60.82260000 34.58660000 1830 33.81710000 24.23240000 16.88580000 5.744110000 5.269890000 2.607300000 1831 57.56760000 26.99550000 17.32450000 14.63240000 10.47960000 3.254340000 1832 93.41640000 31.66180000 16.19140000 38.68210000 24.13580000 4.346220000 1833 60.59210000 11.61000000 16.13330000 14.34260000 7.822270000 2.466300000 1834 83.77400000 8.949540000 11.70670000 28.27690000 14.82180000 2.216640000 1835 93.21740000 14.79550000 39.65020000 38.23120000 20.23090000 14.26130000 1836 29.90050000 6.930820000 14.58630000 3.261340000 1.800920000 1.547530000 1837 29.49500000 56.18320000 12.24660000 13.05330000 21.64740000 4.424430000 1838 39.31740000 61.61350000 17.49870000 18.00940000 27.53840000 6.413630000 1839 84.73410000 62.86630000 78.93800000 52.26090000 44.83010000 62.14070000 1840 27.80090000 15.15240000 21.25710000 3.632680000 2.640470000 3.458620000 1841 33.71190000 12.26570000 29.38900000 5.349620000 3.142600000 6.727470000 1842 42.26470000 8.140190000 45.33000000 9.516870000 4.753720000 17.02200000 1843 55.08800000 9.544420000 71.62700000 19.98180000 9.603230000 46.21880000 1844 62.90110000 35.82660000 84.44850000 31.06370000 20.13040000 67.48750000 1845 8.048780000 16.49560000 18.72920000 1.294720000 1.623880000 2.622360000 1846 5.920070000 24.78360000 68.65150000 9.638560000 6.526830000 42.12360000 1847 11.17820000 38.49600000 68.00590000 12.44490000 12.02730000 42.18670000 1848 35.13370000 40.34000000 93.96080000 24.72820000 18.13970000 84.69770000 1849 17.89400000 30.31180000 44.32870000 6.543520000 6.870310000 16.79120000 1850 41.19260000 41.49100000 47.72230000 14.57770000 14.77510000 20.67820000 1851 40.90110000 46.86600000 52.46970000 16.89660000 18.23190000 25.53560000 1852 42.09960000 45.84050000 72.70630000 21.53890000 19.61940000 49.58870000 1853 22.11570000 7.033260000 31.65020000 3.035360000 1.553490000 7.676340000 1854 25.82380000 11.76290000 37.81020000 4.548870000 2.579080000 11.40150000 1855 27.67190000 6.974770000 41.21920000 5.117420000 2.493220000 13.68470000 1856 90.61470000 10.06380000 55.12650000 38.30340000 19.52410000 27.28550000 1857 92.93050000 8.804210000 63.89720000 42.00870000 21.13180000 37.19650000 1858 46.34590000 10.44610000 16.51110000 8.192060000 4.552900000 2.248770000 1859 50.15020000 78.02420000 14.39460000 30.01180000 46.20130000 8.668770000 1860 61.55880000 82.38170000 13.83900000 37.76910000 54.10770000 9.675620000 1861 15.36210000 19.88370000 52.82110000 6.129570000 4.169070000 23.72730000 1862 16.88390000 21.64350000 68.79770000 9.989490000 6.067190000 42.21040000 1863 77.91670000 37.27130000 72.11080000 36.69640000 23.96050000 48.78670000 1864 80.46640000 69.68150000 89.30660000 55.80160000 51.12780000 80.70670000 1865 91.97790000 76.92640000 94.06380000 70.17080000 64.16780000 91.38640000 1866 18.31120000 9.765040000 21.28450000 1.801270000 1.177670000 3.281660000 1867 22.18950000 6.939410000 21.35360000 2.210630000 1.220000000 3.290820000 1868 43.60770000 79.14240000 28.17040000 29.13670000 46.62890000 13.29830000 1869 49.22240000 80.99540000 79.98560000 42.21410000 53.88050000 66.07160000 1870 48.84850000 80.16840000 85.25510000 43.23160000 53.46760000 74.65930000 1871 66.04150000 86.08330000 90.01020000 56.59760000 65.70510000 84.76280000 1872 14.92210000 8.773550000 34.72610000 2.561210000 1.368380000 9.370790000 1873 18.53940000 13.90370000 37.91440000 3.618570000 2.311130000 11.46640000 1874 29.53740000 24.11410000 61.86000000 10.66490000 7.098270000 33.70930000 1875 58.36120000 23.43410000 68.66240000 21.98340000 12.60450000 42.66070000 1876 12.86190000 60.44140000 11.16880000 12.41490000 23.92570000 4.726560000 1877 24.52610000 81.60280000 8.911690000 24.82910000 46.73680000 8.176970000 1878 22.96750000 82.99510000 42.92100000 28.16480000 49.42900000 22.78340000 1879 28.68760000 85.52410000 37.91690000 30.13750000 52.92780000 19.84070000 1880 41.90800000 85.58550000 59.03150000 37.14550000 56.19300000 38.57220000 1881 20.77350000 22.78110000 18.74250000 3.137530000 3.616880000 2.913680000 1882 28.62330000 22.44530000 27.14430000 4.996700000 4.443390000 5.970640000 1883 46.42810000 25.62960000 58.43750000 14.95840000 9.730550000 30.12010000 1884 55.26080000 31.41930000 64.72890000 20.92750000 14.14880000 37.97870000 1885 72.85020000 40.84270000 64.10570000 32.32660000 23.28970000 38.37720000 1886 50.50500000 36.39270000 43.81560000 15.99260000 13.65360000 17.20300000 1887 56.89350000 50.17640000 42.94030000 22.58900000 22.97010000 17.98470000 1888 83.91760000 95.01680000 42.15300000 62.69940000 79.45290000 26.18560000 1889 95.68650000 95.57680000 54.17270000 74.48650000 85.91700000 37.23250000 1890 55.01790000 32.61110000 17.60960000 14.51980000 11.95580000 3.618410000 1891 64.91350000 43.96740000 19.33850000 22.29880000 20.15200000 5.265310000 1892 67.91980000 49.38670000 36.37240000 27.14270000 25.01760000 13.63130000 1893 77.73180000 52.73500000 39.72900000 34.82200000 30.67410000 16.51080000 1894 84.97090000 62.22160000 45.64680000 44.63580000 41.33820000 22.48930000 1895 45.92040000 17.06680000 8.832070000 8.266090000 5.338590000 1.049990000 1896 60.09340000 13.40900000 6.927430000 13.93700000 7.818710000 1.041540000 1897 88.74390000 20.33710000 27.51600000 33.84740000 18.92590000 7.409090000 1898 93.71300000 28.09730000 28.37400000 39.07350000 23.26730000 8.358660000 1899 61.34280000 9.431370000 45.99350000 17.54790000 8.963660000 17.95070000 1900 69.73320000 9.402830000 67.03420000 26.35060000 13.01250000 40.38170000 1901 78.88340000 14.76480000 91.59660000 39.89040000 19.63640000 79.69110000 1902 91.22300000 16.16690000 92.76990000 49.64870000 24.79280000 82.38660000 1903 46.51370000 8.851090000 58.09180000 13.29960000 6.481480000 29.20410000 1904 50.34670000 21.37590000 90.64670000 24.86290000 12.92150000 77.41900000 1905 55.04100000 55.99440000 91.41170000 35.89550000 31.62240000 81.86920000 1906 66.14680000 68.93330000 91.77500000 47.33990000 46.10230000 84.74160000 1907 41.15720000 45.17860000 58.59970000 17.65530000 17.70730000 31.69520000 1908 42.22740000 85.35860000 65.54300000 38.56550000 56.53640000 46.24400000 1909 41.04680000 92.53520000 88.45840000 49.75020000 68.81470000 82.90720000 1910 21.49930000 42.23690000 56.98200000 12.01540000 13.56530000 29.44900000 1911 25.05290000 41.13570000 92.60170000 22.27660000 17.24960000 82.05330000 1912 22.90200000 45.91260000 91.60720000 22.95240000 19.69620000 80.61500000 1913 15.74600000 28.53800000 70.13500000 11.24870000 8.211240000 44.35560000 1914 11.53100000 75.92240000 79.53680000 30.77670000 43.57210000 63.97250000 1915 27.87160000 80.63050000 91.71390000 39.67780000 51.79510000 86.12950000 1916 50.95600000 79.51730000 90.51010000 45.45790000 53.82870000 83.97720000 1917 53.82720000 91.46910000 93.13800000 55.38880000 70.40430000 91.58960000 1918 9.052320000 3.285330000 7.414770000 0.288048000 0.170685000 0.327541000 1919 7.995440000 4.445370000 12.41960000 0.381124000 0.231677000 0.987785000 1920 50.50030000 34.61220000 10.52860000 12.77410000 11.71870000 2.258610000 1921 50.22280000 35.51140000 2.413820000 12.74200000 12.01510000 1.673990000 1922 51.67260000 43.44150000 29.87750000 16.63570000 16.91490000 9.027510000 1923 76.76440000 62.96430000 34.97590000 37.77290000 38.45930000 14.82150000 1924 80.03610000 64.52800000 43.02370000 41.73910000 41.44850000 20.60540000 1925 43.18840000 33.94770000 22.86610000 10.53350000 10.28230000 5.116630000 1926 47.32210000 67.82720000 20.38050000 23.72820000 34.77430000 8.324380000 1927 63.21780000 69.06670000 45.33980000 34.05610000 40.71400000 22.67790000 1928 78.26200000 71.05830000 46.50090000 44.27230000 47.47740000 24.39520000 1929 39.17510000 29.92310000 32.89220000 9.333430000 8.368600000 9.325670000 1930 48.29450000 35.68060000 34.60480000 13.77700000 12.40440000 10.83910000 1931 57.82340000 45.96400000 41.09940000 21.38740000 20.33730000 16.18560000 1932 57.77280000 47.98640000 47.05800000 22.89210000 21.96490000 21.06340000 1933 63.56910000 78.83210000 64.56610000 43.31600000 52.99770000 44.09680000 1934 68.61970000 79.10730000 74.52860000 48.82590000 55.78460000 57.75760000 1935 84.27800000 90.16560000 90.02100000 71.11030000 77.28200000 86.25240000 1936 46.42240000 54.03010000 49.63930000 20.72920000 23.94810000 23.80700000 1937 49.08790000 79.04890000 72.32320000 38.79610000 50.63230000 54.12330000 1938 72.26580000 86.68730000 81.58770000 57.84100000 67.25910000 70.41140000 1939 77.46740000 93.59770000 85.46850000 67.21500000 79.07240000 78.70510000 1940 56.68780000 44.70930000 9.019940000 18.01460000 18.31570000 3.062710000 1941 78.59490000 67.75340000 5.014820000 39.49470000 42.90850000 6.332160000 1942 92.14370000 73.22710000 10.56890000 52.59590000 53.85230000 8.298530000 1943 94.83400000 82.15530000 5.895860000 59.94120000 65.35170000 9.642790000 1944 38.67680000 35.04380000 5.866680000 8.703960000 9.773370000 1.612900000 1945 44.31860000 85.65240000 12.35680000 32.50500000 54.49870000 9.758980000 1946 47.41520000 94.14650000 10.97300000 39.44560000 66.81030000 11.55070000 1947 68.90450000 93.00030000 12.30290000 48.84190000 70.41400000 11.96100000 1948 7.912140000 20.74550000 23.40330000 2.020940000 2.626460000 4.280620000 1949 11.54300000 37.22840000 26.56250000 5.405630000 8.716610000 6.523760000 1950 8.393140000 43.84700000 34.79930000 7.781910000 12.46740000 11.28090000 1951 32.42540000 43.37320000 56.59000000 14.32050000 15.24230000 29.23740000 1952 33.38020000 49.81170000 63.13230000 17.97900000 19.97470000 37.31580000 1953 33.54980000 53.39220000 74.00650000 22.04020000 23.64200000 52.20450000 1954 8.529550000 29.89060000 39.28480000 5.007870000 6.043370000 13.02410000 1955 10.29250000 37.32230000 45.88510000 7.624640000 9.631270000 18.51370000 1956 12.48780000 64.17120000 46.34160000 17.22970000 28.50980000 22.02690000 1957 40.42620000 64.27970000 50.97340000 23.25700000 31.60190000 26.36900000 1958 66.44410000 65.00560000 55.75520000 35.64440000 38.38700000 31.71140000 1959 74.28840000 70.97930000 63.29460000 44.87710000 47.35260000 41.37790000 1960 53.17980000 50.35960000 60.21520000 24.10970000 23.48940000 34.27130000 1961 57.56530000 50.83220000 81.32350000 31.77170000 27.04320000 63.59280000 1962 42.94520000 38.23620000 60.23800000 16.66400000 14.31540000 32.91880000 1963 43.66550000 59.48810000 61.15960000 24.19800000 28.70730000 36.35350000 1964 66.23210000 72.07580000 60.46190000 40.03610000 45.78650000 38.01600000 1965 25.09670000 35.76200000 22.50080000 6.377000000 8.740790000 4.909780000 1966 33.28590000 37.17740000 21.79540000 8.360870000 10.26180000 4.858080000 1967 36.54030000 36.27490000 26.80890000 9.348050000 10.41160000 6.748320000 1968 53.52080000 47.02020000 61.53200000 23.43550000 21.46370000 35.42670000 1969 62.39420000 54.80390000 70.32070000 32.46240000 29.91810000 47.68050000 1970 70.33200000 55.61990000 73.41530000 38.00720000 33.14840000 52.34480000 1971 74.27770000 61.98270000 82.19360000 45.65920000 40.72530000 66.92400000 1972 93.15120000 78.57080000 83.05210000 68.31790000 65.06870000 71.84960000 1973 64.53900000 53.53490000 59.84890000 30.62730000 28.54880000 34.49110000 1974 78.85030000 70.15890000 76.82360000 50.96270000 49.45430000 59.84170000 1975 80.33980000 78.03210000 83.12000000 58.22400000 59.39340000 71.39900000 1976 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 0.000000000 1977 7.160050000 10.55500000 12.01600000 0.550429000 0.641906000 0.990542000 1978 11.69190000 6.769340000 14.07360000 0.705329000 0.477942000 1.323040000 1979 7.554540000 6.070670000 22.16350000 0.872829000 0.486071000 3.490220000 1980 20.07310000 0.000000000 76.77760000 11.30120000 4.660140000 53.21580000 1981 66.05200000 60.30950000 83.58000000 40.49090000 36.92720000 68.76640000 1982 71.47070000 77.11690000 91.80640000 54.84990000 56.52680000 86.41700000 1983 71.00000000 84.00980000 93.35740000 59.31020000 64.97180000 90.75430000 1984 18.41750000 63.59730000 24.41660000 15.02670000 27.27280000 8.731630000 1985 38.54030000 69.21430000 48.46550000 24.65490000 35.92030000 24.87150000 1986 89.31460000 75.35570000 62.82110000 57.84920000 57.56550000 42.09880000 1987 90.24030000 76.92100000 69.27580000 61.03280000 60.34460000 50.63530000 1988 96.07930000 76.62190000 70.57280000 66.06110000 62.64380000 52.57140000 1989 21.39400000 6.509340000 43.30120000 4.340740000 2.037430000 15.17970000 1990 45.05560000 10.58350000 89.32640000 21.48030000 9.827280000 74.57920000 1991 52.42170000 6.658650000 94.85170000 26.12590000 11.74980000 85.12080000 1992 71.55850000 26.72330000 92.39640000 36.88650000 20.17870000 81.45980000 1993 87.20630000 80.91870000 92.36810000 68.12250000 66.69250000 88.73850000 1994 63.72100000 29.97550000 40.48340000 20.30440000 13.93430000 14.56940000 1995 71.87270000 36.94510000 44.93090000 27.05550000 19.53110000 18.63030000 1996 74.54110000 51.62020000 57.18470000 35.24360000 29.95880000 31.60460000 1997 91.63530000 22.69530000 20.85030000 35.97550000 20.51500000 5.073850000 1998 93.70340000 34.69170000 25.19250000 40.09820000 25.74540000 7.419080000 1999 55.59190000 62.31000000 16.68870000 24.32400000 31.25620000 6.595870000 2000 63.01760000 62.15260000 12.46950000 27.68700000 32.90520000 5.864110000 2001 83.67820000 70.73490000 16.92840000 44.92980000 47.91160000 8.783670000 2002 67.74430000 9.060500000 19.75330000 18.20450000 9.596200000 3.565420000 2003 80.70010000 7.903460000 30.59740000 27.20290000 14.06970000 8.278390000 2004 80.11950000 7.334830000 44.92440000 28.54840000 14.52850000 17.58090000 2005 94.05680000 8.822840000 51.36280000 40.38130000 20.59090000 23.70410000 2006 94.33260000 61.18720000 75.42520000 58.11920000 46.86270000 56.86670000 2007 28.40530000 18.72820000 25.75140000 4.401230000 3.497090000 5.231240000 2008 29.70600000 64.88130000 24.06360000 17.45380000 29.40870000 8.881740000 2009 33.89650000 95.55230000 30.18230000 37.46750000 67.19740000 17.78520000 2010 75.88650000 94.28600000 93.27560000 69.38320000 80.62290000 93.08780000 2011 81.10330000 93.28250000 94.73630000 72.72990000 81.20120000 95.84530000 2012 20.95450000 17.60280000 22.41360000 2.783310000 2.520850000 3.868330000 2013 71.86630000 29.89880000 21.68680000 23.08130000 15.55780000 5.068420000 2014 80.60110000 31.38090000 35.40210000 30.29880000 19.55730000 11.82030000 2015 93.82070000 37.94260000 34.72870000 41.84850000 27.67120000 12.37910000 2016 94.72400000 43.65060000 89.75560000 56.61180000 36.11630000 78.58470000 2017 42.31260000 19.16510000 93.80340000 22.84680000 11.37000000 83.18640000 2018 48.97940000 31.83370000 100.0000000 29.51640000 17.41450000 96.41810000 2019 42.99400000 32.43060000 77.34630000 19.70760000 13.43610000 55.33250000 2020 42.85600000 37.65550000 88.67630000 24.42910000 17.18960000 74.66870000 2021 47.73550000 46.71420000 90.88420000 29.44290000 23.44370000 79.64850000 2022 21.16400000 29.30390000 55.10660000 8.627850000 7.455380000 26.49940000 2023 21.36070000 48.19980000 60.65580000 14.57780000 17.48510000 34.11580000 2024 25.55230000 61.26850000 69.35740000 22.29870000 28.63780000 46.66580000 2025 95.24370000 91.76380000 88.92780000 80.59050000 83.87880000 85.03550000 2026 100.0000000 100.0000000 100.0000000 95.04580000 100.0000000 108.9060000 2027 73.56090000 15.19600000 8.915430000 21.64680000 11.99150000 1.638570000 2028 84.25070000 87.15810000 12.75690000 54.91370000 67.52480000 11.16160000 2029 89.31510000 93.00070000 36.24240000 64.58430000 78.32710000 21.86790000 2030 58.29520000 57.93790000 37.51630000 25.44180000 28.85860000 15.18340000 2031 62.11930000 63.88870000 37.01420000 29.85090000 34.97290000 15.81150000 2032 48.44170000 31.40530000 19.12760000 11.65090000 10.10850000 3.826990000 2033 54.67850000 49.06600000 15.84560000 18.71620000 20.70270000 4.655580000 2034 87.41350000 58.03970000 11.19180000 41.63170000 37.49130000 5.808930000 2035 94.18670000 60.70630000 5.164070000 48.10620000 42.50890000 5.810000000 2036 96.40740000 70.47620000 11.25560000 54.76270000 52.80650000 8.082790000 2037 92.52680000 57.98700000 50.63600000 49.59070000 41.11240000 26.50540000 2038 94.11400000 57.65900000 66.87260000 54.19070000 42.89160000 44.47420000 2039 93.83120000 58.84690000 91.65530000 61.89350000 46.72720000 83.87070000 2040 82.73620000 22.86190000 44.39760000 31.60240000 18.01030000 17.67510000 2041 94.33850000 23.33410000 49.27680000 41.54100000 23.13890000 22.23000000 2042 74.50450000 25.82660000 41.79120000 26.05830000 15.83170000 15.57040000 2043 78.33180000 35.03570000 41.31920000 30.24750000 20.58260000 15.92410000 2044 79.66980000 46.04330000 63.50220000 38.16080000 28.54800000 38.35220000 2045 79.39640000 50.82080000 83.98770000 45.19560000 33.86050000 68.61270000 2046 83.72000000 59.20080000 85.95470000 52.12770000 42.13890000 73.21200000 2047 45.04420000 30.01350000 65.19690000 16.71800000 11.56740000 38.28270000 2048 52.56450000 29.79480000 78.30090000 23.05820000 14.37230000 56.80710000 2049 66.05540000 33.58770000 77.56690000 30.13690000 19.16290000 56.22620000 2050 70.68980000 60.40560000 92.83980000 46.36100000 39.64930000 85.56040000 2051 81.11350000 67.72250000 95.29830000 57.43470000 50.26210000 91.77920000 2052 51.08410000 13.22280000 24.21550000 10.62940000 6.007850000 4.782000000 2053 57.16000000 12.92630000 34.50250000 14.18870000 7.704020000 9.850630000 2054 80.79730000 16.66990000 35.55880000 28.35450000 15.43540000 11.22130000 2055 80.03600000 35.33020000 61.50310000 35.09530000 22.76270000 35.02950000 2056 94.44140000 36.79200000 70.53280000 48.70710000 30.03060000 47.13610000 2057 95.66780000 84.08370000 73.08820000 70.89200000 71.75870000 57.59600000 2058 56.30600000 56.43830000 45.04600000 24.94810000 27.58870000 20.38860000 2059 93.80100000 77.15310000 46.38350000 59.36970000 60.23050000 25.96390000 2060 94.06200000 83.42870000 48.91100000 63.79480000 68.09530000 29.41050000 2061 50.60520000 61.92890000 30.18690000 22.98130000 30.20370000 11.41020000 2062 81.12130000 73.63990000 29.70100000 45.52390000 50.40970000 13.88450000 2063 28.81340000 24.45680000 16.05500000 4.610720000 4.738110000 2.365590000 2064 47.35090000 22.83390000 27.84290000 10.44040000 7.319410000 6.547920000 2065 62.75440000 79.79090000 53.16340000 41.06280000 52.96070000 31.63690000 2066 89.12460000 93.89300000 79.06860000 73.91250000 83.07640000 68.58690000 2067 29.12710000 55.63740000 30.51770000 13.91200000 21.64010000 10.39990000 2068 28.81260000 65.50190000 33.61140000 18.41440000 30.23900000 13.46810000 2069 77.59180000 74.77570000 54.08610000 47.14400000 51.77690000 31.99730000 2070 84.48630000 76.97830000 58.83980000 54.19850000 57.15070000 37.64690000 2071 83.85240000 77.08180000 68.78490000 56.09460000 57.95050000 49.77850000 2072 34.66200000 23.46430000 20.64120000 6.048290000 5.242830000 3.637020000 2073 38.72860000 21.44880000 18.84170000 6.790340000 5.244700000 3.063190000 2074 39.86430000 62.78310000 41.67170000 20.93540000 29.56050000 18.40310000 2075 52.00480000 80.13910000 47.63280000 35.29710000 50.41080000 26.38820000 2076 89.02200000 81.18040000 85.48520000 67.32370000 66.79230000 76.35790000 2077 93.96790000 81.76960000 91.39260000 73.74200000 70.40540000 87.32520000 2078 14.30470000 8.906440000 72.95910000 9.771190000 4.255230000 47.60290000 2079 9.253450000 55.31910000 94.91980000 26.03940000 26.00300000 88.00940000 2080 11.05670000 86.83950000 94.31190000 42.41130000 58.95430000 92.32340000 2081 9.111670000 36.84590000 60.41950000 10.15120000 10.45200000 32.72230000 2082 18.71870000 42.64800000 66.66880000 13.92330000 14.47100000 40.84900000 2083 17.94510000 48.89100000 73.22880000 17.45140000 18.94940000 50.41970000 2084 15.77030000 47.87780000 87.61610000 21.28390000 19.92170000 73.46560000 2085 20.01860000 75.34570000 89.62480000 34.57160000 44.66830000 81.15770000 2086 13.13080000 33.39550000 31.07840000 5.060950000 7.207980000 8.364810000 2087 8.723320000 57.14260000 31.92980000 12.10290000 21.57540000 11.21030000 2088 11.41540000 63.68200000 39.59530000 15.95590000 27.63150000 16.82590000 2089 8.991560000 74.73120000 43.41780000 21.93170000 38.94940000 21.46660000 2090 10.37190000 95.40640000 48.59260000 36.21790000 66.11530000 30.20150000 2091 13.97320000 94.88370000 74.96520000 41.97870000 67.83040000 61.08420000 2092 18.43520000 28.16770000 33.46630000 4.830360000 5.574800000 9.341790000 2093 44.12540000 30.17000000 47.59480000 12.91190000 10.05500000 19.74590000 2094 57.85980000 35.67920000 50.45570000 20.09670000 15.40080000 22.93120000 2095 18.51260000 6.783610000 11.33870000 1.256630000 0.773384000 0.871417000 2096 16.67380000 7.402860000 4.585160000 0.939589000 0.655212000 0.184599000 2097 16.43360000 11.54250000 5.736980000 1.120660000 1.033860000 0.316710000 2098 25.96890000 19.81800000 7.290740000 3.200210000 3.153520000 0.738555000 2099 55.34540000 26.47460000 21.98780000 13.79610000 9.893090000 4.565260000 2100 63.82300000 24.52260000 21.06570000 17.57290000 11.40420000 4.353800000 2101 92.09970000 50.59060000 21.14840000 42.99360000 33.95820000 7.394300000 2102 92.62280000 75.95210000 24.28230000 55.17260000 57.34120000 12.36870000 2103 31.41230000 31.46150000 38.06460000 8.199410000 8.151210000 12.45020000 2104 30.59720000 36.19020000 36.86270000 8.884650000 10.02650000 12.00560000 2105 33.84130000 35.15260000 45.41020000 10.57410000 10.41040000 18.12280000 2106 87.69320000 86.91130000 70.13350000 65.43150000 71.77010000 53.76660000 2107 88.52800000 86.28260000 81.15040000 68.79560000 72.52520000 70.14010000 2108 48.66420000 27.63600000 25.93600000 11.50240000 8.960710000 5.987480000 2109 59.93300000 27.93760000 33.26850000 17.14570000 11.86770000 9.797160000 2110 68.60840000 34.59300000 36.93720000 23.49060000 17.01860000 12.63250000 2111 53.02660000 17.12010000 20.95250000 11.53660000 6.975130000 3.780690000 2112 62.41300000 13.93180000 27.88190000 16.18070000 8.911720000 6.570340000 2113 73.19950000 21.32510000 31.71160000 23.40390000 13.67310000 8.974580000 2114 29.37550000 38.23940000 10.67840000 7.237110000 10.12530000 2.263950000 2115 29.23100000 70.84260000 9.280340000 19.60910000 34.97180000 6.224420000 2116 35.05380000 80.04610000 14.96300000 26.30640000 46.06870000 8.956860000 2117 39.48240000 77.82030000 50.48290000 29.95590000 45.56170000 28.25830000 2118 40.70720000 79.28520000 68.91010000 35.13350000 49.05580000 49.33270000 2119 39.69230000 77.48920000 79.16050000 36.60810000 47.92230000 63.91150000 2120 48.25580000 89.10050000 81.49630000 47.55680000 64.37400000 70.24750000 2121 44.82990000 65.03970000 61.06480000 27.04790000 33.85120000 37.08690000 2122 51.82270000 71.32190000 83.16850000 38.75540000 43.83500000 69.50270000 2123 61.36410000 82.89910000 93.92330000 53.48650000 60.90160000 91.36370000 2124 61.27670000 89.46340000 95.32820000 58.28340000 69.72660000 95.55020000 2125 32.20040000 38.70580000 44.10170000 10.82810000 11.82050000 17.34340000 2126 36.89680000 94.11310000 43.27450000 38.75410000 66.10320000 25.71200000 2127 72.21630000 91.89000000 42.23660000 52.55650000 70.85670000 25.12260000 2128 91.50530000 92.49920000 45.72930000 67.27710000 79.03110000 28.63890000 2129 41.55880000 65.03290000 9.115870000 19.95300000 30.88280000 5.397480000 2130 41.14370000 74.94180000 9.855980000 24.92010000 40.98380000 7.176810000 2131 40.22410000 87.09450000 32.81300000 33.50880000 56.26970000 17.25420000 2132 19.96490000 39.62980000 19.69570000 6.369120000 10.15830000 4.280450000 2133 66.21500000 39.44710000 30.39820000 22.59360000 18.35900000 9.249430000 2134 95.61120000 57.71640000 43.87710000 50.98770000 41.79490000 20.83840000 2135 95.06660000 66.81160000 47.73800000 55.17530000 49.90150000 25.33260000 2136 75.65210000 56.52510000 31.54110000 33.94990000 32.47660000 11.95910000 2137 78.80820000 85.34030000 51.37720000 53.83020000 64.72960000 31.52850000 2138 91.05650000 85.85360000 75.01030000 68.71750000 72.27590000 60.59980000 2139 65.10950000 59.96080000 59.12090000 33.34190000 33.76950000 34.54340000 2140 68.63720000 70.81230000 65.84830000 41.96450000 45.65260000 44.34800000 2141 77.02450000 71.34160000 73.22050000 49.33550000 49.64430000 54.65250000 2142 57.01400000 45.37990000 35.45790000 20.12240000 19.50050000 12.37900000 2143 64.11980000 53.03810000 41.98510000 27.05950000 26.80180000 17.77720000 2144 82.32150000 57.71500000 54.11970000 42.23780000 37.08350000 29.45320000 2145 21.32270000 16.19260000 16.81890000 2.388400000 2.158430000 2.167080000 2146 18.46100000 11.94010000 17.93000000 1.749620000 1.349970000 2.328130000 2147 18.93790000 7.980570000 15.15050000 1.483790000 0.936400000 1.593730000 2148 31.25520000 20.15600000 31.74570000 5.698600000 4.338140000 8.123580000 2149 30.00030000 25.81950000 33.79310000 6.400790000 5.810230000 9.488550000 2150 52.42950000 33.87990000 32.37290000 14.78680000 12.36010000 9.526640000 2151 55.05540000 36.14360000 57.95630000 20.35110000 15.52570000 30.43160000 2152 91.46870000 43.88040000 67.58910000 47.36460000 32.21160000 43.69850000 2153 91.53710000 67.33170000 92.98610000 64.31530000 53.62290000 87.59010000 2154 61.68980000 41.22470000 58.25430000 24.84770000 19.73620000 31.33060000 2155 64.18320000 43.37040000 66.36460000 28.57270000 22.33840000 41.20750000 2156 35.08630000 18.96870000 35.55970000 6.901990000 4.715220000 10.28300000 2157 41.82850000 18.93830000 34.52410000 8.726340000 5.664400000 9.757350000 2158 46.82320000 31.61640000 54.84920000 15.43220000 11.61800000 26.68300000 2159 1.794740000 6.943290000 8.100980000 0.179085000 0.234459000 0.412159000 2160 1.152070000 0.000000000 0.000000000 0.002249440 0.001159650 0.000105306 2161 9.068300000 23.48340000 79.64690000 12.63050000 7.441000000 58.12890000 2162 10.75750000 31.81630000 92.86800000 18.52670000 12.05690000 81.75480000 2163 12.31100000 39.18030000 95.57770000 21.30710000 15.85850000 87.59200000 2164 25.50670000 60.71580000 91.54490000 28.84080000 30.86950000 82.34480000 2165 31.62090000 75.83040000 94.40410000 38.63980000 46.97180000 90.38820000 2166 32.18530000 90.44950000 93.62640000 47.69870000 65.35670000 91.95670000 2167 37.29030000 97.32530000 95.34430000 54.65240000 76.31090000 97.04400000 2168 10.05750000 32.02330000 37.00150000 5.213810000 6.792730000 11.66230000 2169 9.228480000 32.37560000 46.94710000 6.634230000 7.469570000 19.02890000 2170 48.20830000 53.81400000 45.85440000 20.68920000 23.87870000 20.55020000 2171 50.90440000 70.74050000 57.88420000 31.46610000 40.39040000 34.56730000 2172 56.71140000 77.33220000 57.69580000 37.54720000 48.89670000 35.68560000 2173 40.56940000 49.13430000 34.60470000 14.91340000 18.61040000 11.97700000 2174 41.18860000 73.76900000 35.01510000 25.97270000 40.37200000 15.83560000 2175 70.63710000 73.72180000 53.48330000 42.04610000 48.30100000 30.99870000 2176 76.03930000 78.90450000 73.19420000 52.90070000 57.74940000 55.99150000 2177 87.93130000 82.56590000 82.78210000 66.45450000 67.71750000 72.01030000 2178 25.50720000 5.792810000 10.31260000 2.233840000 1.238510000 0.761268000 2179 37.47670000 10.43500000 7.569670000 5.073380000 2.976830000 0.631440000 2180 44.63100000 30.61320000 32.49860000 11.16580000 9.510200000 9.235140000 2181 56.01980000 30.26870000 40.45990000 16.58000000 12.09580000 14.39430000 2182 63.02460000 43.38200000 48.34020000 24.28840000 20.55940000 21.81660000 2183 34.26480000 29.86770000 23.03480000 7.133640000 7.317530000 4.783600000 2184 33.65310000 39.61840000 28.89330000 9.603290000 11.74380000 7.928430000 2185 9.609990000 34.58510000 15.39830000 3.995290000 7.164850000 2.717750000 2186 12.78730000 45.63930000 30.31140000 8.125590000 13.49580000 9.029860000 2187 7.878320000 53.49130000 37.82730000 11.31460000 18.99680000 14.22500000 2188 37.77550000 54.48380000 62.76760000 20.73340000 23.90290000 37.49340000 2189 41.86510000 66.43530000 79.06100000 31.39050000 36.53630000 61.83250000 2190 49.56050000 58.81860000 70.27380000 28.24570000 30.12490000 47.87870000 2191 56.63400000 61.50360000 76.55120000 34.11710000 34.65740000 57.46110000 2192 58.65330000 85.68000000 75.93180000 48.06170000 61.42850000 60.96270000 2193 97.20590000 85.21180000 79.86940000 74.90580000 74.68090000 68.17890000 2194 25.53690000 31.09500000 14.97550000 5.065820000 6.646740000 2.469560000 2195 47.73920000 58.63060000 20.79820000 19.73360000 26.51450000 7.071190000 2196 75.96500000 81.84550000 21.58200000 46.16420000 57.89670000 11.98960000 2197 93.51710000 93.25940000 25.93250000 67.18410000 80.06130000 16.77580000 2198 15.62210000 22.00360000 22.27720000 2.639910000 3.185230000 3.957060000 2199 13.10940000 32.86770000 70.48090000 11.93050000 9.779190000 45.09410000 2200 17.62030000 41.95260000 76.56170000 16.23140000 15.06760000 54.63810000 2201 61.40010000 44.54910000 84.00860000 32.45190000 24.27680000 67.46970000 2202 54.81180000 48.40050000 68.51180000 26.09750000 23.30850000 44.31070000 2203 80.30620000 51.06940000 71.93030000 42.36110000 32.93870000 49.96780000 2204 85.89710000 69.59800000 76.30090000 55.59040000 51.43140000 59.19000000 2205 36.30970000 24.44300000 28.52820000 7.200950000 5.975640000 6.771550000 2206 36.24860000 27.72960000 26.42730000 7.523300000 6.928270000 6.009760000 2207 35.36240000 78.39980000 31.64710000 26.56800000 44.61580000 14.74660000 2208 10.51720000 71.24310000 33.06360000 18.83750000 34.71270000 14.00410000 2209 10.63580000 86.14270000 45.96010000 29.32130000 52.97820000 25.79860000 2210 7.006340000 80.78760000 60.26880000 28.41280000 47.16850000 38.67590000 2211 11.48790000 91.77160000 64.73110000 36.89320000 62.16930000 46.40900000 2212 8.950330000 94.87690000 82.10910000 43.75660000 68.49430000 72.24520000 2213 25.21920000 7.434370000 56.23880000 7.201490000 3.299440000 26.93960000 2214 33.35630000 7.946780000 57.26940000 9.121090000 4.292700000 28.11720000 2215 46.05080000 48.25530000 57.37050000 20.01320000 20.39430000 30.75920000 2216 24.04600000 27.98150000 46.99030000 7.396220000 6.641910000 18.86530000 2217 35.80390000 26.99240000 47.94170000 9.898600000 7.668720000 19.74160000 2218 60.87370000 30.73410000 61.03620000 22.60710000 14.91480000 33.63290000 2219 94.58200000 8.682720000 34.08840000 38.34220000 19.81700000 10.67720000 2220 93.82030000 8.606320000 44.14460000 38.99190000 19.99750000 17.47120000 2221 78.80990000 8.983370000 76.34890000 34.57600000 16.93830000 53.71180000 2222 77.81840000 30.29980000 82.12540000 38.04920000 22.10540000 63.61880000 2223 93.78690000 52.69320000 83.54710000 56.70720000 40.80370000 68.60510000 2224 67.80490000 40.94630000 56.37360000 27.68270000 21.13010000 29.44290000 2225 69.98130000 43.83740000 85.99270000 37.59250000 26.54000000 71.03310000 2226 38.60970000 49.14400000 43.34680000 15.45320000 18.76400000 17.85750000 2227 41.29230000 57.45250000 42.10240000 19.15740000 25.25600000 17.98150000 2228 80.17310000 60.25940000 70.31250000 45.42220000 39.88190000 48.90970000 2229 54.83690000 5.306580000 16.64810000 11.40800000 5.924010000 2.377010000 2230 68.03900000 10.99160000 12.01070000 18.12970000 9.739800000 1.819450000 2231 93.59300000 14.51060000 15.56680000 36.46460000 19.52460000 3.429970000 2232 94.09440000 8.938760000 22.73720000 36.94270000 19.22700000 5.406000000 2233 94.83790000 25.21770000 35.95770000 40.33290000 23.13860000 12.31870000 2234 96.68700000 32.94790000 57.08110000 46.66440000 28.06870000 30.52780000 2235 29.65180000 12.62460000 17.72950000 3.625280000 2.382730000 2.375900000 2236 36.20990000 8.376370000 15.75910000 4.879700000 2.707070000 1.891490000 2237 64.59480000 5.866270000 24.29900000 16.64590000 8.592420000 4.995630000 2238 74.80750000 9.847130000 25.08420000 22.86190000 12.01080000 5.633220000 2239 81.42580000 11.29200000 23.52700000 27.28930000 14.42030000 5.270860000 2240 87.38860000 16.15310000 32.84270000 32.86680000 17.72700000 9.864870000 2241 92.27810000 80.61350000 58.45210000 62.35980000 64.55660000 38.22090000 2242 91.34290000 94.10710000 73.59410000 74.27540000 83.67720000 60.44400000 2243 8.587270000 27.83640000 45.31420000 5.499680000 5.657920000 17.39550000 2244 13.59730000 34.10660000 53.03720000 8.344290000 8.769000000 24.70810000 2245 23.12980000 52.20660000 71.40870000 18.81700000 21.41810000 48.25670000 2246 57.96810000 68.59140000 81.89800000 39.67120000 42.27650000 67.05380000 2247 69.33860000 75.95800000 84.72620000 50.49920000 53.58160000 73.39290000 2248 82.36950000 82.54740000 93.78220000 66.04400000 67.05440000 91.61750000 2249 20.71840000 21.27270000 24.89380000 3.330350000 3.383840000 4.922130000 2250 72.52590000 53.62760000 22.77360000 30.12700000 28.93570000 7.651920000 2251 93.77240000 64.13930000 21.19120000 49.86000000 45.62510000 9.298280000 2252 92.90470000 81.66740000 18.22580000 58.40870000 64.06810000 11.52760000 2253 95.21970000 86.96710000 26.65270000 64.31460000 72.09110000 15.69060000 2254 23.37130000 26.79460000 8.331000000 3.737270000 4.849620000 1.139380000 2255 34.91960000 30.17720000 8.372610000 6.719730000 7.263140000 1.452500000 2256 64.67390000 38.25160000 17.28370000 20.51490000 16.94620000 4.182200000 2257 65.72260000 65.30810000 30.96710000 31.76430000 37.01660000 12.65450000 2258 90.17120000 69.89840000 46.21590000 52.41940000 50.79260000 24.36990000 2259 34.47130000 43.19890000 26.29780000 10.56540000 13.71750000 7.105470000 2260 42.13610000 52.20580000 24.90590000 15.57420000 20.64200000 7.612870000 2261 56.74810000 54.65150000 28.18540000 22.44580000 25.50030000 9.579550000 2262 61.16500000 90.42880000 29.86340000 43.91380000 65.04160000 16.87260000 2263 33.91290000 89.70390000 19.25200000 32.46240000 58.48210000 12.10310000 2264 65.63780000 94.03150000 23.47720000 48.31390000 71.18740000 15.10190000 2265 38.81570000 51.14420000 6.270160000 13.37010000 19.03750000 3.184330000 2266 58.40160000 50.32320000 5.009800000 20.55870000 22.32050000 3.355770000 2267 64.61100000 57.20070000 6.593690000 26.29370000 29.08990000 4.468740000 2268 73.66260000 58.89810000 11.29280000 32.36640000 33.24090000 5.492020000 2269 74.65180000 70.12260000 13.61160000 38.28860000 44.03430000 7.660140000 2270 75.08350000 69.92820000 39.02320000 40.51950000 44.79910000 18.45680000 2271 87.45930000 70.47000000 53.71900000 51.87640000 50.79940000 31.19510000 2272 93.49960000 72.68830000 59.55330000 59.07490000 56.10940000 37.98070000 2273 17.48330000 15.75170000 7.141960000 1.558900000 1.708810000 0.532950000 2274 18.75200000 18.65800000 12.28400000 2.109180000 2.389300000 1.290220000 2275 20.10220000 16.03680000 31.60240000 3.282190000 2.474650000 7.816090000 2276 46.40760000 12.89380000 31.50950000 9.440880000 5.289430000 7.986430000 2277 72.23280000 8.468660000 55.80400000 25.32750000 12.71190000 27.34970000 2278 83.48320000 9.619060000 57.69850000 33.31870000 16.86280000 29.72820000 2279 93.50320000 29.81800000 81.83460000 49.68780000 27.98280000 63.66310000 2280 92.77860000 68.97710000 81.92970000 62.41520000 54.28800000 68.22570000 2281 7.310940000 27.76210000 23.55190000 3.016500000 4.638020000 4.670810000 2282 7.705460000 28.18580000 29.88660000 3.621690000 4.997690000 7.417420000 2283 11.13810000 41.41540000 46.70510000 8.859070000 11.81530000 19.54780000 2284 46.02020000 84.77090000 48.13070000 35.96070000 55.03420000 27.67400000 2285 61.82950000 93.49600000 59.75310000 50.98260000 71.39870000 41.58190000 2286 27.67790000 18.20810000 10.01620000 3.404710000 2.995550000 0.998966000 2287 29.22550000 23.54260000 7.288460000 4.299360000 4.415590000 0.924035000 2288 37.29940000 62.93610000 25.04680000 18.48850000 28.60630000 9.052130000 2289 57.19820000 79.36740000 66.57220000 40.95810000 52.19830000 46.58300000 2290 58.26440000 90.21330000 72.80340000 50.06180000 67.09720000 57.38790000 2291 33.90840000 46.04560000 35.13780000 12.12780000 15.68720000 11.87320000 2292 32.88590000 49.80340000 45.30060000 14.45630000 18.54720000 19.40050000 2293 59.43610000 66.55880000 50.69150000 31.79160000 37.60710000 26.81780000 2294 63.82340000 74.62870000 55.24350000 39.04200000 47.45350000 32.75690000 2295 46.80100000 68.13360000 42.52960000 25.89580000 35.86200000 19.99050000 2296 54.95720000 69.26250000 52.67810000 31.40700000 39.35210000 29.04810000 2297 73.97030000 74.25820000 93.47580000 55.39210000 54.34680000 89.13690000 2298 83.57000000 76.84800000 94.30370000 63.69240000 60.75100000 91.53280000 2299 31.52340000 17.76030000 73.56680000 13.24470000 6.953350000 48.81130000 2300 47.66110000 21.73930000 72.42740000 18.20800000 10.21230000 47.55350000 2301 8.982440000 25.88750000 30.56530000 3.368210000 4.300530000 7.632530000 2302 3.958710000 23.66960000 32.27130000 3.037940000 3.624800000 8.405060000 2303 8.152370000 75.09270000 65.10810000 26.23570000 40.98820000 43.34950000 2304 4.577830000 80.15470000 78.63720000 32.66950000 48.24920000 63.36270000 2305 14.97250000 82.08010000 77.25370000 34.02680000 50.74490000 61.63780000 2306 10.76810000 45.34040000 41.10490000 9.140610000 13.73930000 15.56140000 2307 34.62640000 44.95000000 52.93720000 14.61990000 16.16880000 25.70860000 2308 33.79240000 56.49310000 58.71640000 19.57520000 24.56550000 33.04590000 2309 20.00150000 34.95310000 40.14240000 7.165430000 8.674130000 14.00780000 2310 27.28930000 37.14010000 46.85180000 9.826720000 10.68380000 19.40110000 2311 34.84190000 37.43510000 56.92910000 13.40670000 12.42440000 29.09940000 2312 63.28970000 44.77640000 93.24070000 36.66340000 26.18260000 84.23710000 2313 72.82250000 51.54700000 93.75300000 44.51900000 33.50270000 86.21950000 2314 5.551180000 7.688900000 13.02570000 0.402289000 0.372081000 1.120160000 2315 11.32370000 11.25850000 6.780330000 0.684496000 0.782756000 0.369475000 2316 41.50430000 28.37850000 14.44450000 8.458950000 7.657720000 2.374970000 2317 52.26230000 37.41640000 29.24930000 15.22220000 13.81800000 8.201060000 2318 54.92990000 42.41550000 46.44080000 19.80690000 17.87560000 19.92070000 2319 67.66800000 42.80060000 45.40410000 26.18040000 21.34160000 19.40550000 2320 77.83080000 51.20220000 45.70090000 35.19350000 29.95060000 20.83280000 2321 10.97650000 22.72650000 29.35800000 2.913420000 3.402230000 6.891130000 2322 11.26550000 23.35490000 45.16710000 4.941630000 4.351740000 17.05450000 2323 32.40520000 63.85590000 55.73290000 21.78390000 30.44970000 30.88660000 2324 38.89550000 73.18730000 59.21990000 28.86990000 40.94510000 36.27380000 2325 67.48220000 79.61590000 84.98020000 51.64250000 57.32120000 74.48840000 2326 70.28590000 84.79290000 84.58210000 56.35770000 64.54550000 74.95490000 2327 73.99270000 42.81050000 43.41210000 29.67780000 23.18340000 18.01090000 2328 82.68440000 41.97840000 42.70100000 35.22400000 25.70740000 17.66720000 2329 81.70370000 41.98870000 53.90070000 36.38250000 26.09420000 27.42280000 2330 93.59470000 90.59980000 58.86320000 70.05810000 78.19310000 40.89850000 2331 19.67000000 48.19440000 8.305210000 8.411210000 14.98900000 2.847480000 2332 18.11750000 86.44840000 16.50030000 27.26490000 52.55460000 10.50640000 2333 57.52280000 94.81940000 11.76150000 44.19440000 69.98960000 12.03510000 2334 73.10800000 22.53120000 16.81850000 22.41460000 13.51670000 3.304120000 2335 78.23260000 31.91980000 17.85580000 27.34490000 18.35820000 4.242760000 2336 81.68360000 36.19270000 27.00140000 31.26750000 21.68150000 7.851630000 2337 80.90200000 42.73360000 29.55480000 32.62450000 24.85990000 9.561860000 2338 91.23440000 64.31800000 58.94510000 52.89590000 46.72970000 35.82020000 2339 93.07210000 69.91650000 66.70950000 58.90190000 53.67410000 46.09800000 2340 63.41760000 53.47140000 49.17090000 27.96020000 27.37530000 23.66910000 2341 73.80070000 55.83240000 52.49640000 35.44130000 32.49990000 27.33810000 2342 79.71840000 69.89860000 65.83450000 48.51550000 48.33060000 44.50230000 2343 19.08490000 23.57670000 15.35850000 2.863490000 3.655110000 2.091170000 2344 16.46040000 27.20930000 19.65620000 3.326930000 4.689380000 3.373440000 2345 20.64630000 33.33620000 24.68580000 5.308860000 7.380620000 5.508080000 2346 25.68920000 48.96060000 41.92860000 12.17940000 17.00850000 16.62950000 2347 94.24020000 49.02200000 43.24390000 46.50610000 34.71370000 19.22140000 2348 33.35410000 5.815580000 8.881100000 3.842920000 2.072860000 0.658283000 2349 31.70890000 10.71330000 8.159730000 3.634250000 2.255590000 0.626244000 2350 49.28140000 8.787070000 12.60410000 9.058400000 4.900450000 1.463450000 2351 57.82760000 9.802270000 29.37370000 13.80120000 7.295120000 7.076310000 2352 69.26310000 21.37150000 42.65660000 22.36040000 12.99030000 15.85710000 2353 77.25050000 18.63560000 46.13210000 27.55740000 15.14550000 18.73030000 2354 92.85600000 30.01430000 73.43230000 46.72250000 26.79250000 50.68320000 2355 28.91590000 38.21020000 75.72880000 16.79670000 13.92680000 53.13830000 2356 29.50820000 40.97550000 85.31560000 20.57070000 16.59620000 68.84050000 2357 11.64870000 8.036610000 63.90910000 7.247610000 3.164980000 35.57470000 2358 34.20680000 7.664790000 85.34360000 16.76100000 7.356430000 67.30600000 2359 54.72410000 25.85660000 86.29290000 25.83000000 14.51940000 69.85500000 2360 42.95760000 66.57970000 68.14350000 28.81290000 35.65750000 46.06580000 2361 44.17680000 72.24900000 69.10720000 32.34240000 41.72130000 48.32700000 2362 25.22590000 45.90100000 45.38800000 11.62260000 15.20230000 18.97460000 2363 24.73660000 46.46960000 50.10120000 12.48660000 15.82160000 23.09000000 2364 23.57200000 79.78740000 71.32490000 32.06470000 47.84680000 52.54360000 2365 56.62920000 93.19510000 81.93030000 54.07620000 71.99690000 72.08410000 2366 58.30020000 92.82020000 89.15730000 56.96490000 72.81010000 84.55950000 2367 16.43330000 28.32950000 29.71780000 4.261050000 5.365970000 7.372590000 2368 11.98000000 31.58500000 56.66330000 8.398490000 7.941380000 28.21740000 2369 10.56740000 31.15720000 62.64790000 9.499950000 8.237150000 34.91920000 2370 5.698180000 45.88600000 74.01060000 15.83380000 16.65790000 51.18940000 2371 33.52950000 94.50400000 73.53120000 44.48590000 68.75370000 59.04260000 2372 34.27000000 94.39760000 85.51700000 48.20700000 70.13840000 78.06590000 2373 21.99060000 8.508830000 12.20230000 1.810030000 1.147960000 1.052680000 2374 19.40330000 11.96730000 14.87360000 1.728580000 1.357650000 1.602860000 2375 76.15620000 3.307320000 94.16140000 38.48700000 18.04420000 84.34200000 2376 86.49060000 24.40050000 94.53310000 47.52790000 25.04600000 85.93830000 2377 33.31430000 8.337810000 37.05780000 5.862280000 3.012220000 10.93400000 2378 68.89270000 9.572540000 41.62140000 21.00350000 10.82940000 14.74750000 2379 70.01890000 73.80300000 40.30100000 39.61100000 47.35550000 19.87510000 2380 69.81790000 78.65060000 52.71030000 44.21350000 53.58790000 31.15220000 2381 26.72170000 33.77070000 78.45510000 16.13460000 11.97200000 56.94820000 2382 45.81220000 32.24200000 92.20060000 25.47320000 15.79280000 80.84460000 2383 26.54230000 20.24930000 32.88670000 4.861420000 3.909050000 8.697530000 2384 25.13440000 17.24850000 38.07670000 4.887200000 3.382950000 11.71230000 2385 66.41550000 27.63270000 48.04720000 22.48010000 14.31050000 20.45170000 2386 100.0000000 41.08400000 47.07990000 49.73710000 32.74840000 21.74880000 2387 60.04640000 37.24790000 32.52800000 19.03410000 15.68600000 10.02850000 2388 64.66760000 74.32160000 32.96740000 36.00110000 46.01770000 15.22880000 2389 17.40550000 23.90370000 7.974420000 2.487520000 3.555180000 0.918677000 2390 14.29500000 93.30490000 23.06140000 31.99150000 61.99180000 14.03650000 2391 11.98230000 92.19620000 40.05900000 32.70810000 60.98240000 22.70040000 2392 6.604510000 94.09750000 58.04050000 36.84000000 64.79980000 39.16470000 2393 9.614310000 96.09480000 91.27360000 47.76330000 71.55100000 88.69320000 2394 8.589230000 58.93240000 69.72350000 19.53000000 25.71850000 46.74090000 2395 6.485040000 68.40360000 82.86840000 27.55230000 35.85440000 68.05310000 2396 16.63830000 73.30450000 81.56820000 30.39200000 41.15060000 66.78660000 2397 18.59770000 66.30790000 76.26910000 25.45420000 33.47950000 57.26510000 2398 8.245190000 56.38300000 49.36450000 14.13310000 21.90030000 23.51320000 2399 15.12090000 59.07280000 56.50890000 17.02710000 24.86430000 30.86690000 2400 17.03760000 65.46210000 86.16340000 27.93290000 33.80510000 73.24110000 2401 36.60090000 68.40670000 93.74590000 35.69560000 39.62490000 87.85250000 2402 47.12970000 76.78910000 93.94390000 43.62180000 50.36920000 89.89040000 2403 66.79170000 92.39050000 93.48830000 62.58640000 75.07260000 92.78220000 2404 55.13410000 19.35510000 52.11140000 16.40400000 9.393310000 23.51290000 2405 94.07510000 23.72280000 60.49780000 43.54290000 24.00030000 33.66690000 2406 94.02030000 46.94990000 64.10510000 49.57760000 34.84000000 39.69690000 2407 49.61010000 73.25960000 39.54880000 29.21080000 41.56650000 18.78530000 2408 59.01140000 78.98690000 39.30510000 36.52800000 50.16340000 19.89310000 2409 62.34260000 87.21470000 40.33360000 43.50550000 61.43910000 22.41110000 2410 7.876100000 15.83040000 39.50810000 3.116420000 2.257640000 12.54510000 2411 7.634620000 15.08330000 53.73640000 5.307590000 3.032800000 24.44640000 2412 13.30500000 18.00820000 93.89230000 17.02650000 8.186100000 83.05000000 2413 20.51590000 27.93200000 94.73430000 19.45530000 11.39120000 85.17380000 2414 22.15820000 54.59040000 91.94700000 25.95200000 25.66870000 82.24760000 2415 56.29540000 64.43820000 91.32090000 40.04150000 39.13010000 82.93040000 2416 49.86920000 41.85280000 52.08040000 18.49320000 16.85470000 24.81350000 2417 54.98170000 57.92440000 52.03970000 26.11840000 28.94480000 26.70660000 2418 70.35460000 70.89760000 57.28520000 41.11520000 45.50020000 34.40210000 2419 78.54080000 84.21360000 71.88450000 57.48250000 65.00650000 55.29650000 2420 84.28310000 87.04090000 78.22400000 65.18210000 71.51020000 65.49700000 2421 38.58420000 33.49220000 41.15700000 10.86590000 10.09460000 14.80420000 2422 39.28730000 37.70410000 52.58860000 13.86160000 12.85270000 24.77150000 2423 46.31470000 40.66830000 71.07490000 21.05040000 17.20740000 46.86380000 2424 13.22040000 10.60160000 22.42890000 1.412810000 1.032040000 3.658480000 2425 20.26980000 7.573100000 25.00650000 2.211870000 1.223450000 4.608440000 2426 70.39220000 8.802410000 78.96910000 29.96330000 14.46000000 57.50230000 2427 89.64210000 19.77070000 82.29410000 45.19450000 23.44330000 63.77800000 2428 94.24080000 26.67610000 92.78930000 53.46140000 28.69580000 82.97600000 2429 39.45700000 8.635530000 50.28490000 9.478080000 4.669560000 21.26320000 2430 52.03130000 8.442450000 51.61750000 14.17310000 7.050980000 22.71070000 2431 71.08880000 27.39340000 56.53550000 26.69350000 16.24430000 28.72160000 2432 83.56790000 30.49490000 56.10840000 35.47670000 21.60090000 28.84630000 2433 92.96170000 35.16570000 63.18810000 45.29120000 27.92010000 37.47720000 2434 92.96400000 37.23460000 92.49260000 54.40040000 32.33400000 83.06540000 2435 32.63990000 18.75010000 41.28390000 6.994920000 4.645250000 14.04760000 2436 38.39970000 15.42530000 57.51450000 10.95920000 5.902540000 28.59320000 2437 40.46710000 31.35570000 57.15930000 13.70520000 10.59870000 28.97570000 2438 26.71290000 26.08950000 40.95090000 6.658240000 5.904640000 14.06980000 2439 30.40440000 28.48830000 50.42030000 9.270480000 7.671630000 21.97730000 2440 48.93300000 51.91530000 55.97690000 22.05970000 23.34650000 29.75360000 2441 52.35790000 58.72560000 59.39530000 26.76850000 29.60270000 34.39030000 2442 53.73050000 69.59240000 73.23360000 35.72860000 41.28700000 53.77510000 2443 66.05890000 71.58860000 72.56850000 42.63100000 46.40120000 53.45130000 2444 74.64000000 90.11820000 76.69990000 60.18990000 72.09450000 63.53820000 2445 82.83550000 94.08030000 79.08760000 69.29600000 80.89880000 68.43970000 2446 8.539740000 17.27110000 71.94340000 9.685170000 5.098460000 46.33430000 2447 10.07300000 14.18600000 81.06920000 12.12960000 5.663080000 60.08890000 2448 13.09710000 39.54690000 80.64600000 16.36740000 14.04030000 60.80010000 2449 5.547920000 42.83850000 80.94300000 16.95180000 15.65770000 61.55990000 2450 13.50720000 54.52210000 81.81440000 21.53280000 23.74440000 64.29560000 2451 10.08740000 59.44900000 83.19230000 23.70190000 27.74320000 67.22960000 2452 24.49270000 24.06920000 33.60590000 5.069450000 4.739660000 9.246400000 2453 86.69590000 73.10300000 34.36310000 49.80190000 52.12820000 16.46800000 2454 94.63330000 82.82780000 38.54340000 62.37230000 66.97630000 21.26520000 2455 47.39130000 9.988780000 7.758890000 8.272410000 4.591860000 0.792695000 2456 50.34740000 20.96660000 6.780500000 10.31770000 7.022990000 1.066380000 2457 87.15790000 46.14300000 10.29500000 37.12850000 28.81570000 4.243110000 2458 94.73120000 56.25520000 8.783840000 46.78690000 39.09080000 5.529610000 2459 26.80280000 33.91220000 52.95310000 10.05340000 9.589640000 24.69470000 2460 26.24440000 40.91260000 68.94400000 15.15190000 14.32750000 43.72750000 2461 27.12850000 54.33040000 68.34080000 19.50170000 23.02760000 44.37830000 2462 63.07390000 93.62000000 68.85000000 53.84120000 72.76050000 52.84250000 2463 66.93690000 93.06910000 75.43610000 57.30010000 73.74730000 62.11510000 2464 66.34720000 95.54870000 89.44370000 63.20130000 78.97830000 85.94180000 2465 84.23600000 98.28590000 92.58710000 77.93920000 89.52520000 93.04330000 2466 61.31880000 46.28770000 74.25300000 30.01620000 24.14680000 52.23990000 2467 78.21970000 56.64510000 77.41360000 44.55030000 36.98970000 58.67270000 2468 84.24870000 66.01070000 86.09720000 55.61820000 48.46750000 74.49720000 2469 91.23250000 94.94420000 91.03820000 80.28680000 87.05610000 89.53390000 2470 12.67600000 15.42460000 11.49140000 1.180220000 1.460880000 1.031690000 2471 10.51850000 10.46500000 15.29120000 0.831420000 0.765915000 1.625820000 2472 11.25760000 52.71700000 13.13210000 9.293250000 17.75330000 4.025910000 2473 36.06890000 54.43310000 12.39030000 13.94720000 21.10340000 4.296600000 2474 93.62430000 60.53580000 40.61650000 50.02140000 43.10270000 18.72750000 2475 94.02840000 68.36340000 40.03840000 53.91900000 50.51790000 19.54860000 2476 57.19930000 44.77120000 24.03190000 18.96300000 18.75210000 6.733350000 2477 70.23450000 65.99950000 24.36350000 34.10670000 38.77640000 9.926310000 2478 81.34830000 81.85410000 32.90560000 50.77720000 60.17340000 17.14850000 2479 82.60990000 94.92090000 70.92370000 67.45500000 81.13200000 56.54870000 2480 14.96100000 18.89580000 6.794920000 1.597070000 2.177730000 0.591850000 2481 11.58610000 20.38020000 8.100020000 1.513950000 2.378320000 0.755531000 2482 8.592650000 23.36180000 7.940120000 1.716170000 3.045450000 0.857503000 2483 10.26270000 39.46990000 9.092210000 4.997280000 9.437510000 2.043400000 2484 10.72520000 56.53850000 21.53920000 11.12350000 20.81040000 6.663450000 2485 11.92360000 83.40570000 26.09860000 25.31610000 48.56080000 12.97050000 2486 13.23760000 95.88800000 33.54910000 34.72060000 66.11400000 19.49850000 2487 20.59590000 41.24060000 13.78110000 6.605640000 10.94690000 2.975620000 2488 51.12940000 68.04280000 11.06870000 24.90730000 35.58710000 6.304220000 2489 59.35270000 72.44400000 7.044310000 30.74470000 41.97100000 6.757940000 2490 69.32070000 73.60980000 11.19840000 36.79540000 46.01310000 7.709640000 2491 84.00430000 87.34320000 82.94980000 66.62640000 72.38690000 73.18100000 2492 85.47640000 94.46280000 85.45770000 73.52490000 83.26380000 79.16310000 2493 36.20600000 41.95940000 41.27160000 12.28810000 13.89860000 15.54600000 2494 49.46440000 51.22230000 46.98150000 20.40830000 22.31560000 21.19760000 2495 56.24380000 55.70880000 60.96520000 27.58750000 28.18260000 35.84970000 2496 68.90050000 57.95370000 67.78940000 36.62610000 33.98870000 44.86830000 2497 26.15420000 21.89620000 23.44730000 4.169530000 3.944300000 4.437830000 2498 29.90980000 26.55200000 24.20220000 5.633330000 5.685820000 4.978070000 2499 28.09610000 71.65840000 49.70700000 23.58960000 37.22120000 26.27920000 2500 37.96640000 90.31750000 49.51220000 37.33020000 61.23430000 30.01520000 2501 46.69060000 91.41750000 57.28220000 42.37830000 64.81370000 38.06020000 2502 21.82500000 39.73290000 29.12070000 7.344510000 10.62110000 7.938010000 2503 23.26130000 48.77920000 30.86900000 10.40400000 16.15450000 9.703280000 2504 21.12820000 74.56600000 40.37940000 22.55950000 39.18630000 19.25170000 2505 32.16490000 75.10180000 70.47580000 30.81490000 43.20200000 50.54330000 2506 28.14300000 7.531880000 24.92240000 3.508390000 1.890400000 4.635710000 2507 30.71590000 9.639010000 93.61310000 18.89520000 8.247360000 82.42570000 2508 29.31310000 23.59460000 92.47780000 19.46590000 10.49630000 80.66310000 2509 62.25790000 23.15340000 90.95120000 30.62820000 16.22370000 78.31690000 2510 70.16540000 23.89820000 63.06850000 27.00400000 15.44450000 35.88950000 2511 80.69160000 29.09080000 67.16920000 35.61660000 21.00540000 41.61030000 2512 12.42500000 7.292780000 5.524890000 0.564029000 0.454784000 0.220258000 2513 7.612890000 9.774370000 6.342420000 0.399953000 0.520473000 0.299093000 2514 35.58670000 7.090370000 32.51070000 5.882230000 3.013820000 8.266170000 2515 67.69470000 18.31700000 55.69190000 23.32230000 12.71790000 27.34080000 2516 67.55180000 17.91810000 74.67010000 27.71370000 14.40060000 51.08930000 2517 73.49850000 40.76420000 94.20260000 41.74920000 27.07200000 85.99240000 2518 83.01340000 58.96510000 93.52100000 54.15180000 42.73130000 87.04700000 2519 22.92800000 15.46550000 23.83550000 2.976920000 2.321100000 4.330650000 2520 33.61500000 13.56810000 22.33830000 4.860470000 3.084990000 3.841760000 2521 87.64640000 44.44470000 25.75530000 37.78100000 28.29360000 8.260170000 2522 56.65550000 20.58100000 10.59440000 13.05520000 8.356530000 1.604070000 2523 70.01740000 22.23940000 8.725000000 20.22650000 12.36370000 1.763700000 2524 70.07220000 42.88040000 9.275110000 24.51450000 20.87260000 3.243910000 2525 78.29010000 79.01600000 8.137510000 45.44800000 55.04660000 8.610360000 2526 80.66770000 93.15470000 8.557000000 56.38600000 74.48000000 11.82950000 2527 91.23270000 96.57030000 96.53810000 83.52250000 90.29290000 100.5850000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 100.0000 108.9060 1 0.000000 46.01940 100.0000 24.53780 20.19710 97.21750 2 100.0000 0.000000 75.89170 51.07860 25.19590 53.75030 3 0.000000 0.000000 54.91730 4.831040 1.932540 25.44110 4 100.0000 63.84210 0.000000 54.56610 47.91680 6.373640 5 0.000000 34.30650 0.000000 3.400610 6.801720 1.133680 6 78.47690 0.000000 0.000000 24.20010 12.47580 1.132910 7 8.084850 7.632750 6.875820 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 100.000 108.906 1 0.00000 100.000 100.000 53.8073 78.7404 106.975 2 100.000 0.00000 100.000 59.2885 28.4801 96.9852 3 0.00000 0.00000 100.000 18.0500 7.22046 95.0546 4 100.000 100.000 0.00000 76.9958 92.7795 13.8511 5 0.00000 100.000 0.00000 35.7573 71.5199 11.9206 6 100.000 0.00000 0.00000 41.2385 21.2596 1.93056 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.6967 21.7756 23.7148 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s41-g121-m0-f2527-csRGB.ti1000644 000765 000000 00000545721 12261120515 022633 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "OFPS_PATCHES" OFPS_PATCHES "2280" CREATED "Wed Dec 18 02:31:39 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "121" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.045758 99.998484 108.895580" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DARK_REGION_EMPHASIS" DARK_REGION_EMPHASIS "1.6" KEYWORD "ACCURATE_EXPECTED_VALUES" ACCURATE_EXPECTED_VALUES "true" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "41" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 2527 BEGIN_DATA 1 100.000000 100.000000 100.000000 95.0458000 99.9985000 108.896000 2 59.5886000 62.7799000 0.00000000 25.5256000 31.8427000 4.80101000 3 86.3938000 81.4256000 0.00000000 52.0745000 60.1979000 8.87512000 4 100.000000 84.7346000 43.8851000 68.7349000 71.5791000 25.4960000 5 0.00000000 74.0464000 30.5613000 19.5284000 36.8627000 13.2795000 6 0.00000000 77.8451000 51.3341000 24.3962000 42.2515000 28.3057000 7 0.00000000 74.2417000 79.0457000 28.8703000 40.7709000 61.9532000 8 44.7140000 73.8055000 83.1528000 36.8537000 44.3853000 68.9345000 9 94.6602000 94.6602000 94.6602000 83.9066000 88.2789000 96.1333000 10 96.4052000 96.4052000 96.4052000 87.4583000 92.0156000 100.202000 11 10.6838000 10.6838000 10.6838000 1.05618000 1.11121000 1.21008000 12 0.00000000 0.00000000 3.55450000 0.04951450 0.01980640 0.26078200 13 9.72927000 9.72927000 9.72927000 0.91336500 0.96095900 1.04646000 14 3.55450000 0.00000000 0.00000000 0.11316500 0.05834990 0.00530202 15 2.33645000 0.00000000 0.00000000 0.07458390 0.03845670 0.00349440 16 4.80769000 0.00000000 0.00000000 0.15539500 0.08012440 0.00728057 17 6.09756000 0.00000000 0.00000000 0.20620400 0.10632200 0.00966108 18 10.2041000 0.00000000 0.00000000 0.42662200 0.21997400 0.01998810 19 11.6580000 0.00000000 0.00000000 0.52748300 0.27198000 0.02471360 20 16.3043000 0.00000000 0.00000000 0.93754000 0.48341200 0.04392560 21 17.9558000 0.00000000 0.00000000 1.11734000 0.57611800 0.05234940 22 19.6629000 0.00000000 0.00000000 1.32229000 0.68179400 0.06195170 23 21.4286000 0.00000000 0.00000000 1.55620000 0.80240500 0.07291120 24 23.2558000 0.00000000 0.00000000 1.82182000 0.93936300 0.08535600 25 25.1479000 0.00000000 0.00000000 2.12270000 1.09450000 0.09945280 26 27.1084000 0.00000000 0.00000000 2.46344000 1.27019000 0.11541700 27 29.1411000 0.00000000 0.00000000 2.84813000 1.46855000 0.13344100 28 29.6784000 12.2311000 0.00000000 3.45049000 2.51411000 0.30349800 29 31.2500000 0.00000000 0.00000000 3.28249000 1.69251000 0.15379100 30 35.7143000 0.00000000 0.00000000 4.32170000 2.22834000 0.20248000 31 38.0795000 0.00000000 0.00000000 4.94117000 2.54775000 0.23150400 32 40.5405000 0.00000000 0.00000000 5.63762000 2.90685000 0.26413400 33 43.1034000 0.00000000 0.00000000 6.42029000 3.31041000 0.30080400 34 45.7746000 0.00000000 0.00000000 7.30018000 3.76410000 0.34202800 35 48.5612000 0.00000000 0.00000000 8.28885000 4.27388000 0.38834900 36 51.4706000 0.00000000 0.00000000 9.39980000 4.84670000 0.44040000 37 54.5113000 0.00000000 0.00000000 10.6492000 5.49091000 0.49893600 38 57.6923000 0.00000000 0.00000000 12.0545000 6.21550000 0.56477600 39 61.0236000 0.00000000 0.00000000 13.6365000 7.03123000 0.63889900 40 64.5161000 0.00000000 0.00000000 15.4184000 7.95002000 0.72238500 41 68.1818000 0.00000000 0.00000000 17.4273000 8.98584000 0.81650500 42 72.0339000 0.00000000 0.00000000 19.6943000 10.1547000 0.92271900 43 76.0870000 0.00000000 0.00000000 22.2561000 11.4757000 1.04274000 44 80.3571000 0.00000000 0.00000000 25.1550000 12.9704000 1.17856000 45 84.8624000 0.00000000 0.00000000 28.4401000 14.6642000 1.33248000 46 89.6226000 0.00000000 0.00000000 32.1691000 16.5869000 1.50719000 47 94.6602000 0.00000000 0.00000000 36.4107000 18.7740000 1.70591000 48 100.000000 0.00000000 52.3052000 45.5033000 22.9700000 24.3630000 49 100.000000 29.7084000 91.7929000 58.6700000 32.3446000 81.0439000 50 14.7059000 0.00000000 0.00000000 0.78113400 0.40276700 0.03659770 51 8.79397000 0.00000000 0.00000000 0.34026500 0.17544700 0.01594210 52 0.00000000 1.15207000 0.00000000 0.03172210 0.06344690 0.01057370 53 0.00000000 2.33645000 0.00000000 0.06465740 0.12932000 0.02155180 54 0.00000000 3.55450000 0.00000000 0.09810380 0.19621600 0.03270030 55 0.00000000 4.80769000 0.00000000 0.13471300 0.26943800 0.04490300 56 0.00000000 6.09756000 0.00000000 0.17876000 0.35753600 0.05958490 57 0.00000000 7.42574000 0.00000000 0.23172400 0.46346800 0.07723890 58 0.00000000 13.1579000 0.00000000 0.55915700 1.11836000 0.18638000 59 0.00000000 14.7059000 0.00000000 0.67717200 1.35440000 0.22571700 60 0.00000000 16.3043000 0.00000000 0.81276100 1.62559000 0.27091200 61 0.00000000 17.9558000 0.00000000 0.96862800 1.93734000 0.32286600 62 0.00000000 19.6629000 0.00000000 1.14630000 2.29270000 0.38208800 63 0.00000000 21.4286000 0.00000000 1.34908000 2.69829000 0.44968100 64 0.00000000 23.2558000 0.00000000 1.57935000 3.15884000 0.52643400 65 0.00000000 25.1479000 0.00000000 1.84019000 3.68053000 0.61337700 66 0.00000000 27.1084000 0.00000000 2.13558000 4.27134000 0.71183600 67 0.00000000 29.1411000 0.00000000 2.46907000 4.93836000 0.82299800 68 0.00000000 31.2500000 0.00000000 2.84562000 5.69149000 0.94851100 69 0.00000000 33.4395000 0.00000000 3.26922000 6.53872000 1.08971000 70 0.00000000 35.7143000 0.00000000 3.74652000 7.49336000 1.24880000 71 0.00000000 38.0795000 0.00000000 4.28354000 8.56745000 1.42780000 72 0.00000000 40.5405000 0.00000000 4.88729000 9.77502000 1.62905000 73 0.00000000 43.1034000 0.00000000 5.56580000 11.1321000 1.85521000 74 0.00000000 45.7746000 0.00000000 6.32859000 12.6577000 2.10946000 75 0.00000000 48.5612000 0.00000000 7.18567000 14.3720000 2.39515000 76 0.00000000 51.4706000 0.00000000 8.14877000 16.2982000 2.71617000 77 0.00000000 54.5113000 0.00000000 9.23186000 18.4645000 3.07719000 78 0.00000000 57.6923000 0.00000000 10.4501000 20.9012000 3.48327000 79 0.00000000 61.0236000 0.00000000 11.8216000 23.6443000 3.94042000 80 0.00000000 64.5161000 0.00000000 13.3664000 26.7339000 4.45532000 81 0.00000000 68.1818000 0.00000000 15.1079000 30.2171000 5.03581000 82 0.00000000 72.0339000 0.00000000 17.0732000 34.1479000 5.69089000 83 0.00000000 76.0870000 0.00000000 19.2940000 38.5898000 6.43114000 84 0.00000000 80.3571000 0.00000000 21.8071000 43.6161000 7.26881000 85 0.00000000 84.8624000 0.00000000 24.6550000 49.3121000 8.21806000 86 0.00000000 89.6226000 0.00000000 27.8877000 55.7777000 9.29560000 87 0.00000000 94.6602000 0.00000000 31.5647000 63.1322000 10.5213000 88 0.00000000 100.000000 0.00000000 35.7552000 71.5134000 11.9180000 89 19.5384000 100.000000 75.7259000 46.6969000 76.0414000 62.7240000 90 47.7531000 100.000000 80.4103000 54.7723000 80.0447000 70.3467000 91 69.3834000 55.3530000 39.6781000 30.0204000 29.3771000 16.4464000 92 49.3489000 46.7553000 30.6924000 16.5888000 18.2249000 9.90091000 93 75.3380000 62.5661000 33.3132000 35.8965000 36.8609000 13.8060000 94 13.1579000 0.00000000 0.00000000 0.64500100 0.33257400 0.03021960 95 7.42574000 0.00000000 0.00000000 0.26729900 0.13782400 0.01252350 96 0.00000000 0.00000000 6.09756000 0.09022290 0.03609030 0.47518400 97 0.00000000 0.00000000 7.42574000 0.11695500 0.04678330 0.61597400 98 0.00000000 0.00000000 8.79397000 0.14888000 0.05955390 0.78411800 99 9.25926000 9.25926000 9.25926000 0.84730100 0.89145200 0.97076700 100 0.00000000 0.00000000 11.6580000 0.23079600 0.09232120 1.21555000 101 0.00000000 0.00000000 16.3043000 0.41021300 0.16409000 2.16050000 102 0.00000000 0.00000000 19.6629000 0.57855500 0.23142900 3.04712000 103 0.00000000 0.00000000 21.4286000 0.68090300 0.27237000 3.58617000 104 0.00000000 0.00000000 23.2558000 0.79712300 0.31885900 4.19827000 105 0.00000000 0.00000000 25.1479000 0.92876900 0.37151900 4.89163000 106 0.00000000 0.00000000 27.1084000 1.07786000 0.43115600 5.67684000 107 0.00000000 0.00000000 29.1411000 1.24618000 0.49848600 6.56334000 108 0.00000000 8.86665000 33.5820000 1.96326000 1.26316000 8.86677000 109 0.00000000 0.00000000 33.4395000 1.65002000 0.66003000 8.69032000 110 0.00000000 0.00000000 35.7143000 1.89092000 0.75639300 9.95908000 111 0.00000000 0.00000000 38.0795000 2.16197000 0.86481400 11.3866000 112 0.00000000 0.00000000 40.5405000 2.46669000 0.98670700 12.9915000 113 0.00000000 0.00000000 43.1034000 2.80914000 1.12369000 14.7951000 114 0.00000000 0.00000000 45.7746000 3.19413000 1.27769000 16.8228000 115 0.00000000 0.00000000 48.5612000 3.62671000 1.45073000 19.1011000 116 0.00000000 0.00000000 51.4706000 4.11280000 1.64517000 21.6612000 117 0.00000000 0.00000000 54.5113000 4.65946000 1.86384000 24.5404000 118 0.00000000 0.00000000 57.6923000 5.27433000 2.10980000 27.7788000 119 0.00000000 0.00000000 61.0236000 5.96655000 2.38669000 31.4245000 120 0.00000000 0.00000000 64.5161000 6.74621000 2.69857000 35.5308000 121 0.00000000 0.00000000 68.1818000 7.62518000 3.05017000 40.1602000 122 0.00000000 0.00000000 72.0339000 8.61709000 3.44694000 45.3843000 123 0.00000000 0.00000000 76.0870000 9.73798000 3.89532000 51.2878000 124 0.00000000 0.00000000 80.3571000 11.0064000 4.40268000 57.9681000 125 0.00000000 0.00000000 84.8624000 12.4437000 4.97765000 65.5384000 126 0.00000000 0.00000000 89.6226000 14.0753000 5.63030000 74.1316000 127 65.1788000 30.3892000 100.000000 36.5051000 20.7270000 96.6801000 128 81.6278000 72.2999000 100.000000 61.3180000 55.0844000 102.004000 129 83.5854000 81.2980000 100.000000 67.9163000 66.1626000 103.794000 130 0.00000000 0.00000000 10.2041000 0.18666500 0.07466830 0.98312300 131 0.00000000 0.00000000 1.15207000 0.01601060 0.00640444 0.08432440 132 0.00000000 0.00000000 2.33645000 0.03263350 0.01305380 0.17187400 133 0.00000000 8.79397000 0.00000000 0.29497800 0.58998300 0.09832310 134 0.00000000 11.6580000 0.00000000 0.45728000 0.91459900 0.15242200 135 0.76452600 0.76452600 0.76452600 0.05671490 0.05967030 0.06497930 136 1.15207000 1.15207000 1.15207000 0.08432490 0.08871900 0.09661250 137 1.54321000 1.54321000 1.54321000 0.11303000 0.11892000 0.12950000 138 1.93798000 1.93798000 1.93798000 0.14231500 0.14973100 0.16305300 139 2.33645000 2.33645000 2.33645000 0.17187500 0.18083100 0.19692000 140 2.73865000 2.73865000 2.73865000 0.20171200 0.21222300 0.23110400 141 3.14465000 3.14465000 3.14465000 0.23183000 0.24391000 0.26561200 142 3.55450000 3.55450000 3.55450000 0.26078300 0.27437300 0.29878400 143 3.96825000 3.96825000 3.96825000 0.29147700 0.30666500 0.33395000 144 4.38596000 4.38596000 4.38596000 0.32391400 0.34079300 0.37111400 145 4.80769000 4.80769000 4.80769000 0.35810000 0.37676000 0.41028100 146 5.23349000 5.23349000 5.23349000 0.39481900 0.41539300 0.45235100 147 5.66343000 5.66343000 5.66343000 0.43309200 0.45566000 0.49620100 148 6.09756000 6.09756000 6.09756000 0.47518700 0.49994900 0.54443000 149 7.78781000 6.11445000 0.00000000 0.46536800 0.50629500 0.07320200 150 6.53595000 6.53595000 6.53595000 0.51926600 0.54632500 0.59493200 151 6.97865000 6.97865000 6.97865000 0.56581200 0.59529600 0.64826100 152 7.42574000 7.42574000 7.42574000 0.61597800 0.64807600 0.70573600 153 7.87728000 7.87728000 7.87728000 0.66957200 0.70446300 0.76714000 154 8.33333000 8.33333000 8.33333000 0.72515300 0.76294000 0.83082000 155 0.00000000 12.7501000 9.71635000 0.70351600 1.13014000 1.08844000 156 8.79397000 8.79397000 8.79397000 0.78412300 0.82498300 0.89838400 157 12.6527000 12.6527000 12.6527000 1.39183000 1.46436000 1.59465000 158 13.1579000 13.1579000 13.1579000 1.48637000 1.56383000 1.70296000 159 13.6684000 13.6684000 13.6684000 1.58629000 1.66895000 1.81744000 160 14.1844000 14.1844000 14.1844000 1.69032000 1.77840000 1.93662000 161 14.7059000 14.7059000 14.7059000 1.80008000 1.89389000 2.06239000 162 15.2330000 15.2330000 15.2330000 1.91513000 2.01492000 2.19420000 163 15.7658000 15.7658000 15.7658000 2.03515000 2.14120000 2.33171000 164 17.9558000 17.9558000 17.9558000 2.57484000 2.70902000 2.95004000 165 20.6788000 14.2704000 18.1981000 2.59783000 2.23547000 2.92186000 166 17.3993000 17.3993000 17.3993000 2.43058000 2.55723000 2.78475000 167 16.8488000 16.8488000 16.8488000 2.29266000 2.41213000 2.62674000 168 16.3043000 16.3043000 16.3043000 2.16051000 2.27310000 2.47534000 169 18.5185000 18.5185000 18.5185000 2.72512000 2.86713000 3.12222000 170 19.0875000 19.0875000 19.0875000 2.88327000 3.03351000 3.30341000 171 19.6629000 19.6629000 19.6629000 3.04714000 3.20592000 3.49116000 172 20.2448000 20.2448000 20.2448000 3.21981000 3.38759000 3.68899000 173 20.8333000 20.8333000 20.8333000 3.39897000 3.57609000 3.89426000 174 21.4286000 21.4286000 21.4286000 3.58619000 3.77306000 4.10876000 175 22.0307000 22.0307000 22.0307000 3.78126000 3.97830000 4.33226000 176 22.6397000 22.6397000 22.6397000 3.98528000 4.19295000 4.56601000 177 23.2558000 23.2558000 23.2558000 4.19830000 4.41707000 4.81006000 178 23.8791000 23.8791000 23.8791000 4.42025000 4.65058000 5.06436000 179 24.5098000 24.5098000 24.5098000 4.65168000 4.89408000 5.32951000 180 25.1479000 25.1479000 25.1479000 4.89166000 5.14656000 5.60446000 181 25.7937000 25.7937000 25.7937000 5.14346000 5.41148000 5.89295000 182 26.4471000 26.4471000 26.4471000 5.40458000 5.68620000 6.19212000 183 27.1084000 27.1084000 27.1084000 5.67687000 5.97269000 6.50409000 184 27.7778000 27.7778000 27.7778000 5.96051000 6.27111000 6.82906000 185 28.4553000 28.4553000 28.4553000 6.25651000 6.58253000 7.16819000 186 29.1411000 29.1411000 29.1411000 6.56338000 6.90539000 7.51978000 187 29.8354000 29.8354000 29.8354000 6.88416000 7.24289000 7.88730000 188 30.5383000 30.5383000 30.5383000 7.21675000 7.59280000 8.26835000 189 31.2500000 31.2500000 31.2500000 7.56434000 7.95851000 8.66660000 190 31.9706000 31.9706000 31.9706000 7.92451000 8.33745000 9.07925000 191 32.7004000 32.7004000 32.7004000 8.30066000 8.73319000 9.51021000 192 33.4395000 33.4395000 33.4395000 8.69037000 9.14321000 9.95671000 193 34.1880000 34.1880000 34.1880000 9.09706000 9.57110000 10.4227000 194 34.9462000 34.9462000 34.9462000 9.51980000 10.0159000 10.9070000 195 36.4924000 36.4924000 36.4924000 10.4171000 10.9599000 11.9350000 196 37.2807000 37.2807000 37.2807000 10.8927000 11.4603000 12.4800000 197 38.0795000 38.0795000 38.0795000 11.3867000 11.9800000 13.0459000 198 38.8889000 38.8889000 38.8889000 11.9010000 12.5211000 13.6351000 199 39.7092000 39.7092000 39.7092000 12.4362000 13.0842000 14.2484000 200 40.5405000 40.5405000 40.5405000 12.9916000 13.6686000 14.8847000 201 41.3832000 41.3832000 41.3832000 13.5697000 14.2768000 15.5471000 202 42.2374000 42.2374000 42.2374000 14.1713000 14.9098000 16.2363000 203 43.1034000 43.1034000 43.1034000 14.7952000 15.5662000 16.9512000 204 43.9815000 43.9815000 43.9815000 15.4451000 16.2499000 17.6957000 205 44.8718000 44.8718000 44.8718000 16.1201000 16.9601000 18.4691000 206 45.7746000 45.7746000 45.7746000 16.8229000 17.6995000 19.2743000 207 46.6903000 46.6903000 46.6903000 17.5526000 18.4672000 20.1103000 208 47.6190000 47.6190000 47.6190000 18.3116000 19.2657000 20.9799000 209 48.5612000 48.5612000 48.5612000 19.1012000 20.0966000 21.8846000 210 49.5169000 49.5169000 49.5169000 19.9213000 20.9594000 22.8242000 211 50.4866000 50.4866000 50.4866000 20.7744000 21.8569000 23.8016000 212 51.4706000 51.4706000 51.4706000 21.6614000 22.7901000 24.8178000 213 52.4691000 52.4691000 52.4691000 22.5839000 23.7607000 25.8748000 214 53.4826000 53.4826000 53.4826000 23.5432000 24.7700000 26.9738000 215 54.5113000 54.5113000 54.5113000 24.5405000 25.8193000 28.1165000 216 55.5556000 55.5556000 55.5556000 25.5786000 26.9114000 29.3058000 217 56.6158000 56.6158000 56.6158000 26.6572000 28.0462000 30.5416000 218 57.6923000 57.6923000 57.6923000 27.7789000 29.2265000 31.8268000 219 58.7855000 58.7855000 58.7855000 28.9473000 30.4557000 33.1654000 220 59.8958000 59.8958000 59.8958000 30.1610000 31.7327000 34.5560000 221 61.0236000 61.0236000 61.0236000 31.4247000 33.0622000 36.0038000 222 62.1693000 62.1693000 62.1693000 32.7397000 34.4458000 37.5105000 223 63.3333000 63.3333000 63.3333000 34.1068000 35.8841000 39.0768000 224 64.5161000 64.5161000 64.5161000 35.5310000 37.3825000 40.7085000 225 65.7182000 65.7182000 65.7182000 37.0117000 38.9403000 42.4049000 226 66.9399000 66.9399000 66.9399000 38.5540000 40.5630000 44.1720000 227 68.1818000 68.1818000 68.1818000 40.1604000 42.2531000 46.0125000 228 69.4444000 69.4444000 69.4444000 41.8319000 44.0117000 47.9275000 229 70.7283000 70.7283000 70.7283000 43.5718000 45.8423000 49.9210000 230 72.0339000 72.0339000 72.0339000 45.3846000 47.7496000 51.9979000 231 73.3618000 73.3618000 73.3618000 47.2722000 49.7355000 54.1606000 232 74.7126000 74.7126000 74.7126000 49.2389000 51.8047000 56.4139000 233 76.0870000 76.0870000 76.0870000 51.2882000 53.9607000 58.7617000 234 77.4854000 77.4854000 77.4854000 53.4238000 56.2077000 61.2086000 235 78.9086000 78.9086000 78.9086000 55.6483000 58.5481000 63.7573000 236 80.3571000 80.3571000 80.3571000 57.9685000 60.9891000 66.4155000 237 81.8318000 81.8318000 81.8318000 60.3873000 63.5340000 69.1868000 238 83.3333000 83.3333000 83.3333000 62.9084000 66.1865000 72.0753000 239 84.8624000 84.8624000 84.8624000 65.5388000 68.9539000 75.0889000 240 86.4198000 86.4198000 86.4198000 68.2818000 71.8399000 78.2316000 241 88.0062000 88.0062000 88.0062000 71.1452000 74.8525000 81.5124000 242 89.6226000 89.6226000 89.6226000 74.1321000 77.9950000 84.9344000 243 91.2698000 91.2698000 91.2698000 77.2506000 81.2761000 88.5074000 244 92.9487000 92.9487000 92.9487000 80.5068000 84.7019000 92.2380000 245 100.000000 0.00000000 0.00000000 41.2445000 21.2664000 1.93239000 246 100.000000 30.3313000 40.3664000 46.3667000 27.6001000 15.6988000 247 100.000000 36.8610000 60.7312000 51.1498000 31.6316000 34.3596000 248 57.1747000 32.9167000 35.8313000 16.8879000 13.1857000 11.6363000 249 100.000000 51.5928000 36.8766000 51.4570000 38.4578000 15.3095000 250 100.000000 62.0857000 53.9939000 58.0876000 47.6519000 30.0615000 251 100.000000 73.9282000 83.5211000 71.3406000 62.2524000 71.1904000 252 18.4528000 0.00000000 28.0903000 2.33245000 1.06884000 6.15143000 253 33.6340000 0.00000000 76.9175000 13.7945000 5.95923000 52.7291000 254 55.8018000 0.00000000 100.000000 29.2535000 12.9974000 95.5703000 255 100.000000 72.3477000 100.000000 76.5302000 62.9657000 102.724000 256 100.000000 88.1803000 100.000000 86.1742000 82.2547000 105.938000 257 30.8637000 44.3279000 29.6073000 10.3951000 13.9818000 8.89706000 258 46.1655000 67.2892000 37.0530000 24.1483000 33.9954000 15.9930000 259 54.2038000 75.8031000 70.3030000 37.8146000 46.9570000 49.8606000 260 40.1305000 76.9004000 64.7274000 32.0721000 45.0833000 42.6327000 261 51.8687000 76.1753000 100.000000 46.9486000 50.8374000 101.941000 262 28.6765000 51.3934000 55.8927000 15.8010000 19.6355000 28.7551000 263 46.5132000 49.1339000 82.1971000 26.5053000 23.2673000 63.8043000 264 46.6214000 56.5919000 100.000000 35.6579000 31.1724000 98.7405000 265 49.7629000 63.6637000 100.000000 39.7625000 37.6826000 99.7807000 266 0.00000000 14.7647000 27.2636000 1.77208000 1.79977000 5.96955000 267 0.00000000 24.8421000 28.2543000 2.96728000 4.06125000 6.76578000 268 0.00000000 33.6579000 39.2184000 5.61378000 7.54767000 13.2188000 269 0.00000000 47.6846000 66.2307000 14.0584000 16.6786000 39.9569000 270 0.00000000 100.000000 66.6991000 43.0172000 74.4183000 50.1655000 271 0.00000000 100.000000 84.6986000 48.1449000 76.4695000 77.1721000 272 0.00000000 66.4492000 45.4299000 17.4119000 29.7967000 21.3083000 273 53.9164000 100.000000 48.5127000 49.7717000 78.3223000 31.4653000 274 81.9482000 100.000000 56.9595000 67.1726000 87.1199000 40.1625000 275 17.7544000 21.1708000 0.00000000 2.41244000 3.20075000 0.49065800 276 22.2185000 100.000000 0.00000000 37.4232000 72.3735000 11.9962000 277 34.5814000 79.9495000 0.00000000 25.6016000 45.2045000 7.37555000 278 54.3783000 100.000000 0.00000000 46.3478000 76.9752000 12.4143000 279 58.9620000 100.000000 100.000000 66.4457000 85.2518000 107.556000 280 21.3754000 34.6194000 57.1255000 10.2229000 9.88844000 28.4286000 281 72.2167000 38.1353000 58.3342000 29.5068000 20.9678000 30.8217000 282 100.000000 44.2557000 57.4930000 52.3668000 35.1363000 31.4646000 283 100.000000 86.9254000 56.9098000 72.3909000 75.3710000 37.5691000 284 58.9982000 30.3493000 19.2056000 15.8963000 12.1124000 4.40343000 285 77.1069000 72.3545000 28.3383000 41.3508000 46.7820000 13.0262000 286 87.0514000 100.000000 30.0047000 67.1991000 87.5736000 20.2926000 287 100.000000 100.000000 33.8166000 78.6884000 93.4553000 22.7449000 288 100.000000 37.5626000 14.2311000 45.7300000 29.7214000 5.01995000 289 100.000000 58.6764000 20.9221000 52.7402000 43.2179000 8.97395000 290 8.57253000 93.4441000 32.8761000 32.5743000 62.1149000 18.6245000 291 0.00000000 100.000000 31.6794000 37.2319000 72.1041000 19.6956000 292 0.00000000 100.000000 43.4670000 38.6150000 72.6574000 26.9803000 293 0.00000000 100.000000 55.2686000 40.5570000 73.4342000 37.2083000 294 0.00000000 100.000000 100.000000 53.8013000 78.7321000 106.963000 295 33.4395000 0.00000000 0.00000000 3.77113000 1.94446000 0.17668500 296 32.6778000 23.8624000 0.00000000 5.25752000 5.17599000 0.72204100 297 49.5509000 27.7600000 0.00000000 10.8970000 8.94300000 1.15207000 298 60.8933000 44.5785000 0.00000000 19.5523000 18.9589000 2.62920000 299 100.000000 47.8013000 78.4192000 58.6094000 39.3260000 59.1241000 300 100.000000 50.5750000 100.000000 67.1356000 44.1757000 99.5925000 301 58.0673000 0.00000000 39.3834000 14.5476000 7.23274000 12.7949000 302 68.2868000 0.00000000 42.0003000 20.1454000 10.0800000 14.8216000 303 76.1431000 29.9092000 71.8548000 33.4649000 20.1278000 47.0452000 304 75.8830000 42.3990000 100.000000 45.5433000 29.3748000 97.8731000 305 100.000000 62.2208000 100.000000 71.6294000 53.1636000 101.090000 306 0.00000000 36.5148000 47.3424000 7.35741000 9.22143000 19.3920000 307 0.00000000 41.6052000 67.3899000 12.5929000 13.2985000 40.8524000 308 0.00000000 59.8936000 100.000000 29.3915000 29.9103000 98.8268000 309 0.00000000 73.2511000 100.000000 35.7695000 42.6669000 100.953000 310 0.00000000 43.3031000 28.1009000 6.77933000 11.7058000 7.97454000 311 26.9118000 71.8313000 30.7882000 20.7874000 35.7433000 13.1072000 312 0.00000000 53.5411000 15.1368000 9.23746000 17.9004000 4.85292000 313 0.00000000 57.3627000 62.7845000 16.6725000 23.1819000 36.8976000 314 0.00000000 79.0188000 89.3346000 34.9735000 47.5916000 80.5944000 315 0.00000000 85.7891000 100.000000 43.3124000 57.7534000 103.467000 316 0.00000000 8.19081000 22.2161000 0.99559700 0.82368700 3.93186000 317 0.00000000 0.00000000 31.2500000 1.43623000 0.57450900 7.56429000 318 100.000000 30.7716000 31.4499000 45.4570000 27.3636000 10.5147000 319 38.3834000 55.4944000 0.00000000 14.6235000 21.7898000 3.43502000 320 53.6373000 74.3946000 0.00000000 28.6281000 41.9973000 6.59728000 321 100.000000 90.0641000 0.00000000 69.4438000 77.6676000 11.3319000 322 100.000000 100.000000 0.00000000 76.9996000 92.7798000 13.8504000 323 20.1057000 0.00000000 14.5172000 1.71336000 0.84481800 1.82406000 324 34.1867000 0.00000000 20.1591000 4.55379000 2.27790000 3.37929000 325 76.2057000 0.00000000 23.9524000 23.1784000 11.8536000 5.49276000 326 100.000000 0.00000000 63.1197000 47.6721000 23.8375000 35.7854000 327 100.000000 0.00000000 74.3809000 50.5008000 24.9690000 50.6838000 328 100.000000 0.00000000 86.5752000 54.2618000 26.4735000 70.4919000 329 100.000000 0.00000000 100.000000 59.2906000 28.4850000 96.9776000 330 27.8673000 0.00000000 56.2906000 7.60112000 3.34149000 26.4447000 331 75.2667000 0.00000000 57.9207000 27.0434000 13.3290000 29.0383000 332 80.9643000 17.3533000 100.000000 44.5401000 22.2303000 96.5472000 333 0.00000000 0.00000000 13.1579000 0.28221500 0.11288900 1.48636000 334 11.1684000 11.1684000 11.1684000 1.13382000 1.19290000 1.29903000 335 16.0028000 14.8229000 0.00000000 1.59378000 1.84112000 0.27138200 336 77.7512000 46.7055000 0.00000000 29.9688000 25.2613000 3.29700000 337 100.000000 70.2751000 29.0749000 58.6432000 54.0805000 13.8520000 338 100.000000 100.000000 47.7135000 80.4913000 94.1765000 32.2403000 339 100.000000 100.000000 60.0031000 82.7488000 95.0795000 44.1302000 340 100.000000 100.000000 69.8143000 85.0365000 95.9947000 56.1791000 341 0.00000000 27.9438000 73.9337000 11.4015000 8.19158000 48.8546000 342 0.00000000 36.3980000 78.5009000 14.3415000 11.9734000 56.3044000 343 0.00000000 44.4074000 100.000000 23.9771000 19.0810000 97.0221000 344 41.8541000 100.000000 100.000000 59.8329000 81.8421000 107.246000 345 63.5221000 44.2852000 41.4176000 23.3753000 20.5070000 16.2570000 346 100.000000 70.6176000 45.9645000 60.8011000 55.2250000 24.3493000 347 57.9447000 100.000000 26.9820000 48.9933000 78.2158000 18.1121000 348 75.3665000 100.000000 63.1654000 63.9805000 85.3227000 46.8461000 349 85.3775000 100.000000 80.9814000 75.7854000 90.8590000 72.2536000 350 100.000000 100.000000 87.5304000 90.3434000 98.1175000 84.1291000 351 10.2041000 10.2041000 10.2041000 0.98312900 1.03436000 1.12639000 352 0.00000000 10.2041000 0.00000000 0.36984200 0.73971700 0.12327700 353 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 354 0.38051800 0.38051800 0.38051800 0.02822800 0.02969890 0.03234130 355 0.00000000 0.00000000 4.80769000 0.06799170 0.02719760 0.35809800 356 12.1528000 12.1528000 12.1528000 1.30219000 1.37005000 1.49195000 357 28.8776000 16.0161000 45.2138000 6.69491000 4.26150000 16.7775000 358 41.0911000 22.7837000 80.2228000 18.2835000 10.4127000 58.5285000 359 100.000000 38.1238000 100.000000 63.5846000 37.0733000 98.4088000 360 29.8779000 0.00000000 29.2991000 4.25580000 2.04870000 6.77636000 361 38.8348000 0.00000000 27.7245000 6.27672000 3.10606000 6.17882000 362 43.1027000 0.00000000 46.2301000 9.68272000 4.61540000 17.4845000 363 59.5597000 0.00000000 77.2111000 22.9905000 10.6910000 53.6059000 364 75.1224000 0.00000000 87.1038000 34.8271000 16.4318000 70.5213000 365 77.0263000 0.00000000 100.000000 40.9223000 19.0140000 96.1170000 366 0.00000000 41.2877000 41.3761000 7.65524000 11.1901000 15.2579000 367 0.00000000 60.1170000 52.4075000 15.7157000 24.5892000 26.3390000 368 73.5812000 78.9829000 52.1217000 45.8562000 54.2979000 30.2207000 369 100.000000 82.2179000 70.1617000 72.3290000 70.4357000 52.3838000 370 38.7731000 16.4481000 0.00000000 5.95801000 4.29784000 0.51569500 371 61.8424000 27.5874000 0.00000000 16.2541000 11.6637000 1.39506000 372 100.000000 39.8678000 0.00000000 45.9622000 30.7024000 3.50493000 373 100.000000 48.9920000 0.00000000 48.5683000 35.9147000 4.37359000 374 100.000000 57.0391000 0.00000000 51.4375000 41.6534000 5.32997000 375 100.000000 73.8501000 0.00000000 59.2932000 57.3654000 7.94844000 376 71.9401000 51.1253000 0.00000000 27.6679000 26.1877000 3.59692000 377 78.3867000 100.000000 0.00000000 59.5465000 83.7807000 13.0327000 378 88.7360000 100.000000 0.00000000 67.2095000 87.7318000 13.3917000 379 31.5070000 36.2647000 0.00000000 7.20568000 9.45724000 1.44566000 380 33.8740000 40.3442000 100.000000 26.7567000 18.8910000 96.8391000 381 37.6803000 85.3648000 100.000000 47.8648000 59.6838000 103.600000 382 0.00000000 15.9922000 15.2943000 1.15164000 1.71743000 2.19056000 383 11.6580000 11.6580000 11.6580000 1.21556000 1.27890000 1.39269000 384 0.00000000 0.00000000 14.7059000 0.34177900 0.13671600 1.80007000 385 0.00000000 0.00000000 17.9558000 0.48888100 0.19555800 2.57483000 386 0.00000000 25.7158000 51.5040000 6.04182000 5.49404000 22.3330000 387 43.1155000 53.2528000 64.7402000 21.9962000 23.5804000 39.0295000 388 72.8234000 56.8144000 69.8634000 38.3339000 33.8361000 46.7088000 389 37.8359000 19.0007000 36.0341000 7.87724000 5.43539000 10.7334000 390 47.2517000 36.1773000 51.5737000 15.7943000 13.3792000 23.4050000 391 55.6312000 65.3836000 58.1714000 30.2707000 35.4241000 33.3982000 392 100.000000 78.9091000 74.6087000 71.4990000 66.8655000 57.9963000 393 25.9647000 21.7222000 40.5461000 6.11307000 4.92215000 13.5627000 394 34.9053000 23.9604000 45.6128000 8.96480000 6.74065000 17.4465000 395 38.9702000 26.1606000 100.000000 25.2231000 13.8729000 95.9514000 396 48.9594000 40.1966000 100.000000 31.2827000 21.1697000 97.0405000 397 68.9001000 58.9664000 100.000000 46.8468000 38.3436000 99.5352000 398 98.1848000 98.1848000 98.1848000 91.1679000 95.9185000 104.453000 399 100.000000 100.000000 100.000000 95.0458000 99.9985000 108.896000 400 0.00000000 18.9260000 60.2822000 6.87571000 4.45849000 30.9463000 401 0.00000000 25.5495000 86.1634000 14.7767000 8.94885000 68.4585000 402 0.00000000 29.1323000 100.000000 20.5137000 12.1540000 95.8677000 403 0.00000000 0.00000000 94.6602000 15.9312000 6.37268000 83.9061000 404 0.00000000 0.00000000 100.000000 18.0462000 7.21869000 95.0452000 405 0.00000000 13.0576000 100.000000 18.5980000 8.32250000 95.2291000 406 18.5281000 13.8689000 100.000000 19.8416000 9.05259000 95.3046000 407 17.8038000 66.9556000 100.000000 33.6570000 36.8093000 99.9336000 408 65.4048000 83.1824000 100.000000 57.5072000 62.5528000 103.646000 409 82.5553000 100.000000 100.000000 80.5299000 92.5138000 108.215000 410 0.00000000 20.1600000 14.8850000 1.55090000 2.54333000 2.23931000 411 33.4622000 19.3541000 14.6397000 5.22841000 4.30876000 2.33388000 412 79.4199000 20.2403000 15.6596000 26.0932000 15.2073000 3.56182000 413 44.6616000 0.00000000 15.8142000 7.31402000 3.72633000 2.37040000 414 100.000000 0.00000000 12.8129000 41.5143000 21.3743000 3.35367000 415 100.000000 0.00000000 32.5660000 42.8072000 21.8915000 10.1632000 416 100.000000 0.00000000 41.7407000 43.8682000 22.3159000 15.7513000 417 88.0114000 0.00000000 100.000000 48.9233000 23.1395000 96.4918000 418 88.2270000 89.5836000 100.000000 76.9545000 78.9505000 105.786000 419 91.6531000 100.000000 100.000000 87.6432000 96.1816000 108.549000 420 35.7143000 35.7143000 35.7143000 9.95914000 10.4781000 11.4104000 421 36.6692000 100.000000 39.2914000 42.6304000 74.7915000 24.2939000 422 38.8007000 100.000000 50.0220000 44.7614000 75.7103000 32.5221000 423 69.6227000 63.5451000 0.00000000 31.1818000 35.2658000 5.16378000 424 77.6964000 62.8615000 0.00000000 35.9447000 37.2684000 5.29947000 425 89.2060000 68.2024000 0.00000000 46.9500000 46.6504000 6.53057000 426 72.8065000 53.2544000 25.4800000 29.8963000 28.3304000 8.88941000 427 80.8731000 55.3545000 60.0707000 40.8292000 34.5574000 34.7328000 428 87.3013000 61.0154000 71.6228000 50.6431000 42.6726000 50.1679000 429 65.0271000 30.6749000 32.4917000 19.9847000 14.1916000 9.84049000 430 65.0264000 30.2530000 78.6228000 28.8333000 17.6099000 56.8199000 431 100.000000 42.1071000 90.9446000 61.0900000 37.6791000 80.3262000 432 100.000000 52.5006000 90.7428000 64.2277000 44.0716000 81.0119000 433 26.1462000 6.89825000 0.00000000 2.50212000 1.60113000 0.17724400 434 100.000000 29.2565000 0.00000000 43.7335000 26.2447000 2.76204000 435 100.000000 46.1876000 25.3017000 48.6361000 34.5461000 9.03380000 436 24.1861000 39.1904000 0.00000000 6.51688000 10.1152000 1.60889000 437 24.0131000 43.5656000 16.2565000 8.04097000 12.5510000 4.13783000 438 32.6368000 57.5349000 19.6383000 14.5527000 22.8574000 6.67056000 439 33.6445000 100.000000 59.0206000 45.1189000 75.7006000 41.2987000 440 0.00000000 48.4713000 24.2892000 8.02475000 14.6619000 6.95546000 441 0.00000000 63.6454000 24.7686000 13.8720000 26.3028000 9.07104000 442 0.00000000 79.4252000 41.6757000 23.8583000 43.5342000 20.8544000 443 0.00000000 80.4868000 61.9507000 28.0541000 46.2415000 39.7802000 444 19.2675000 88.3354000 100.000000 46.3099000 61.8586000 104.101000 445 0.00000000 42.6281000 49.0557000 9.14298000 12.3558000 21.3343000 446 33.0929000 58.3480000 51.0308000 18.4410000 24.9442000 25.0061000 447 41.5659000 57.4863000 50.1254000 20.1962000 25.3569000 24.1885000 448 59.8148000 63.3183000 56.2477000 30.8629000 34.3733000 31.1646000 449 14.3512000 10.1741000 0.00000000 1.11670000 1.12232000 0.15778900 450 17.1929000 9.24110000 10.3328000 1.54016000 1.24380000 1.15648000 451 14.5280000 0.00000000 47.1864000 4.17363000 1.75788000 17.9911000 452 19.8185000 0.00000000 69.3359000 9.25715000 3.85816000 41.7486000 453 89.7080000 0.00000000 89.4219000 46.2424000 22.2244000 75.2670000 454 50.6478000 0.00000000 29.7406000 10.3761000 5.19997000 7.26470000 455 62.0634000 0.00000000 32.3416000 15.6940000 7.91400000 8.77741000 456 61.6999000 26.9192000 34.1466000 17.8002000 12.1050000 10.4308000 457 100.000000 30.0476000 50.0050000 47.7352000 28.0665000 23.1565000 458 100.000000 47.3439000 68.1277000 55.6597000 37.9188000 44.2896000 459 100.000000 94.2968000 90.9931000 87.1018000 89.6769000 89.0828000 460 0.00000000 44.3192000 14.4029000 6.23537000 11.9440000 3.70424000 461 0.00000000 64.9971000 74.0196000 22.7437000 30.8389000 52.7526000 462 0.00000000 77.6870000 75.2972000 29.7278000 44.2361000 56.8428000 463 0.00000000 100.000000 76.5977000 45.6400000 75.4675000 63.9796000 464 0.00000000 87.9890000 19.4588000 27.3196000 53.7338000 11.9051000 465 0.00000000 100.000000 17.6025000 36.2266000 71.7020000 14.4013000 466 15.2451000 100.000000 60.5772000 42.4583000 74.2910000 42.8781000 467 62.2131000 100.000000 65.1662000 56.8817000 81.6093000 48.9116000 468 82.7139000 100.000000 71.3302000 71.0297000 88.7270000 57.5777000 469 63.0472000 77.1528000 72.5751000 43.3195000 50.8708000 53.4690000 470 68.7136000 78.7143000 81.8098000 50.0079000 55.3652000 68.1204000 471 0.00000000 28.3835000 64.0396000 8.97802000 7.33806000 35.7331000 472 0.00000000 34.6828000 86.9126000 16.6575000 12.3042000 70.3385000 473 0.00000000 36.7977000 100.000000 22.0337000 15.1940000 96.3743000 474 32.2131000 53.4088000 100.000000 30.3689000 26.6807000 98.1521000 475 35.9812000 60.5113000 100.000000 34.0398000 32.6915000 99.1188000 476 80.2989000 62.0786000 100.000000 55.4367000 44.7217000 100.314000 477 35.7710000 25.6050000 37.2304000 8.30534000 6.87488000 11.7009000 478 43.8463000 81.2479000 37.2355000 31.0755000 48.9685000 18.6282000 479 66.7979000 89.4103000 66.5706000 51.6211000 66.9578000 48.1101000 480 70.8936000 100.000000 72.3908000 63.4738000 84.7984000 58.6959000 481 28.9378000 37.2422000 54.7339000 11.5982000 11.5066000 26.2542000 482 49.2630000 37.5705000 58.6175000 18.1757000 14.9225000 30.5538000 483 90.0556000 42.1550000 71.6633000 46.3492000 30.7948000 48.1581000 484 82.3134000 38.5893000 53.5047000 35.4318000 24.2913000 26.2767000 485 100.000000 50.0731000 53.8792000 53.4643000 38.4387000 28.4157000 486 100.000000 68.3219000 53.0924000 60.8206000 53.3809000 30.1620000 487 100.000000 73.1310000 63.8355000 65.4931000 59.2215000 42.5255000 488 100.000000 85.0038000 65.2580000 72.9111000 73.5315000 46.6222000 489 54.0253000 34.6635000 27.2997000 15.0581000 12.8654000 7.42039000 490 70.4348000 37.7424000 28.5615000 24.1349000 18.5475000 8.58291000 491 60.3857000 60.4163000 22.3205000 25.6248000 30.2939000 8.35663000 492 63.7512000 78.2570000 25.4074000 36.5135000 49.2213000 12.5446000 493 72.8877000 100.000000 31.8918000 57.4711000 82.5375000 20.7500000 494 14.7780000 18.8477000 26.5422000 2.88048000 2.93812000 5.83326000 495 11.0791000 21.8631000 26.5558000 2.92213000 3.46817000 5.93878000 496 0.00000000 33.0356000 58.7111000 8.66947000 8.56991000 29.9293000 497 0.00000000 36.5202000 68.9794000 11.7497000 10.9803000 42.5190000 498 0.00000000 53.2823000 88.5457000 22.4805000 23.0484000 75.0615000 499 0.00000000 66.9001000 87.6565000 27.8718000 34.3253000 75.3360000 500 29.2483000 84.0344000 89.5735000 41.0435000 55.3372000 82.2126000 501 25.9027000 65.9375000 70.8944000 24.5932000 32.5416000 48.5801000 502 54.3193000 66.6618000 75.3417000 34.4642000 38.0019000 55.4561000 503 59.8473000 67.2124000 78.4422000 38.1263000 40.1784000 60.4031000 504 8.79594000 25.9231000 39.4616000 4.62453000 5.01555000 12.9403000 505 0.00000000 28.4636000 47.4516000 5.80554000 6.09049000 18.9581000 506 23.3714000 35.7669000 48.8600000 9.27254000 9.93484000 20.6939000 507 30.1494000 41.3848000 49.6899000 11.9678000 13.3087000 21.9167000 508 39.3198000 40.2066000 49.1826000 13.8159000 13.8225000 21.4800000 509 73.6732000 45.1998000 48.7895000 30.5314000 24.4625000 22.3177000 510 81.2443000 60.2193000 53.2539000 41.6934000 38.0298000 28.3592000 511 79.9290000 76.5146000 56.9621000 49.5216000 53.9440000 34.6922000 512 85.8880000 78.7291000 63.4423000 56.5490000 59.3243000 42.5474000 513 46.4529000 71.3521000 31.9055000 25.7472000 37.9154000 13.8161000 514 58.6411000 72.0137000 37.2001000 31.6149000 41.3919000 17.1163000 515 64.4537000 78.8504000 50.4317000 40.2203000 51.3085000 28.4120000 516 43.5380000 24.4707000 15.0548000 8.65944000 7.01339000 2.76423000 517 53.0100000 23.4514000 17.7339000 12.1038000 8.56836000 3.52092000 518 66.8157000 21.1257000 15.3932000 18.3448000 11.3651000 3.16903000 519 81.9329000 100.000000 42.2408000 64.7238000 86.1391000 27.3228000 520 91.8493000 100.000000 41.6274000 72.3702000 90.0912000 27.2512000 521 60.1937000 62.3421000 41.3933000 28.2012000 32.6379000 18.3270000 522 83.0796000 70.6561000 44.9896000 46.5436000 47.9196000 22.9323000 523 84.6334000 82.7368000 50.2050000 55.4505000 62.7080000 29.6105000 524 37.7875000 72.7161000 44.3179000 25.2787000 38.5727000 21.7376000 525 42.3385000 87.1224000 63.0389000 38.7511000 58.0747000 42.7669000 526 55.5336000 100.000000 72.8711000 55.6873000 80.7686000 59.0071000 527 71.2420000 100.000000 85.9277000 67.7690000 86.5407000 80.2263000 528 72.1604000 100.000000 100.000000 73.5730000 88.9268000 107.890000 529 0.00000000 13.3570000 46.3094000 3.84833000 2.45719000 17.4385000 530 0.00000000 11.2923000 63.0821000 6.85332000 3.43606000 33.9531000 531 0.00000000 13.1537000 75.4890000 10.1263000 4.94488000 50.5762000 532 0.00000000 16.2183000 87.6225000 14.1806000 6.96060000 70.7144000 533 42.4202000 68.7522000 100.000000 39.6421000 41.1997000 100.466000 534 54.8851000 84.3050000 100.000000 53.1466000 61.3772000 103.649000 535 24.0804000 27.8128000 23.2032000 4.99139000 5.81892000 5.02019000 536 24.8724000 27.9208000 35.1182000 6.16862000 6.33252000 10.4695000 537 44.3732000 50.7841000 74.2681000 23.9702000 23.0426000 51.5442000 538 60.7194000 59.3916000 73.3858000 33.6065000 32.8229000 51.6507000 539 82.7870000 65.9930000 84.2649000 53.1976000 46.8748000 70.4471000 540 14.1607000 0.00000000 14.4785000 1.06390000 0.51012200 1.78565000 541 21.6273000 0.00000000 22.7415000 2.34700000 1.12192000 4.09421000 542 27.8436000 0.00000000 21.3509000 3.27506000 1.61050000 3.68343000 543 82.6546000 24.9177000 40.9254000 31.1246000 18.4404000 15.1119000 544 100.000000 23.0541000 54.9284000 47.5349000 26.2675000 27.4016000 545 100.000000 27.4950000 63.8709000 50.0392000 28.2996000 37.4143000 546 22.4441000 53.2898000 0.00000000 10.4883000 18.4524000 3.00870000 547 24.4102000 68.8336000 0.00000000 17.4329000 31.8945000 5.23710000 548 76.8859000 90.6957000 0.00000000 51.4316000 69.0470000 10.6167000 549 87.6595000 90.2401000 0.00000000 58.9232000 72.4282000 10.8747000 550 9.13821000 15.6458000 0.00000000 1.11525000 1.69588000 0.26854900 551 8.25544000 11.0475000 0.00000000 0.72942700 0.99825900 0.15423700 552 0.00000000 49.5086000 52.6187000 11.8059000 16.7094000 25.2207000 553 0.00000000 66.5408000 67.9436000 21.8789000 31.6533000 44.6199000 554 14.2908000 69.0556000 68.1980000 23.9136000 34.5190000 45.3963000 555 23.6808000 6.31970000 12.0415000 2.31724000 1.44410000 1.43308000 556 36.6433000 8.46551000 21.6669000 5.53372000 3.18709000 3.96913000 557 40.3947000 0.00000000 36.0571000 7.52398000 3.65648000 10.4223000 558 52.0969000 76.8955000 49.1664000 33.1309000 45.9800000 26.6546000 559 55.8324000 78.5362000 77.9080000 42.2020000 51.3213000 61.5084000 560 61.8644000 91.1455000 82.5535000 54.7191000 69.8692000 71.9064000 561 65.7505000 88.9691000 86.3061000 56.4347000 68.3237000 77.9753000 562 67.2425000 89.0370000 100.000000 62.4221000 70.8892000 104.996000 563 67.0896000 94.3545000 100.000000 66.1934000 78.5584000 106.277000 564 13.3728000 0.00000000 8.18061000 0.79695700 0.39543800 0.73663300 565 13.1720000 5.33215000 0.00000000 0.79800800 0.63685500 0.08088330 566 55.0584000 52.7319000 0.00000000 19.4721000 22.7895000 3.37265000 567 62.0780000 73.0001000 0.00000000 31.7488000 42.4793000 6.52598000 568 73.4643000 72.6087000 0.00000000 37.9559000 45.3685000 6.75672000 569 65.2932000 86.1027000 0.00000000 41.3074000 59.1157000 9.23318000 570 67.0569000 100.000000 0.00000000 52.5502000 80.1733000 12.7049000 571 0.00000000 18.6440000 26.3913000 2.05993000 2.48514000 5.72745000 572 0.00000000 19.8365000 38.9547000 3.43340000 3.23858000 12.3322000 573 13.8920000 21.0354000 54.3280000 6.63550000 4.81994000 24.8282000 574 0.00000000 20.6982000 72.5338000 10.0137000 6.02621000 46.5099000 575 0.00000000 22.0758000 100.000000 19.4742000 10.0748000 95.5212000 576 51.9322000 20.0991000 100.000000 28.8247000 14.5502000 95.8925000 577 64.0703000 40.5147000 100.000000 38.1107000 24.8097000 97.3834000 578 0.00000000 37.7064000 19.0442000 4.74121000 8.61059000 4.26969000 579 0.00000000 56.8486000 27.2142000 11.2050000 20.6727000 9.09452000 580 19.5719000 59.8668000 28.5122000 13.8380000 23.8226000 10.1212000 581 29.8510000 84.3651000 27.6957000 28.4462000 50.6555000 14.1752000 582 58.9564000 0.00000000 8.90440000 12.7934000 6.57899000 1.39116000 583 68.5034000 0.00000000 15.4202000 17.9817000 9.22873000 2.78186000 584 45.7099000 0.00000000 8.62676000 7.42293000 3.81065000 1.10387000 585 52.6119000 0.00000000 45.5781000 13.0228000 6.34893000 17.1301000 586 57.7316000 20.2508000 71.1289000 21.6622000 12.0000000 45.0925000 587 68.3754000 24.1461000 83.8395000 31.3448000 17.2845000 65.1599000 588 79.2529000 21.9522000 83.3464000 37.7467000 20.1789000 64.5436000 589 55.8369000 36.3070000 58.6097000 20.5602000 15.7259000 30.5749000 590 59.1078000 47.2327000 76.9578000 29.4713000 24.0894000 55.4637000 591 80.3378000 49.5356000 77.0098000 42.6462000 31.9665000 56.3693000 592 64.7266000 0.00000000 21.6282000 16.2227000 8.28457000 4.37748000 593 85.3649000 0.00000000 21.0960000 29.4822000 15.1251000 4.83112000 594 100.000000 0.00000000 23.5217000 42.0593000 21.5923000 6.22390000 595 100.000000 42.1777000 42.2172000 49.2475000 32.9722000 17.8609000 596 100.000000 62.7971000 68.9979000 61.6658000 49.5834000 47.3649000 597 100.000000 91.3998000 73.9233000 79.5283000 83.2296000 59.7334000 598 100.000000 100.000000 79.3832000 87.7085000 97.0635000 70.2520000 599 46.6787000 40.7579000 24.0010000 13.4034000 14.1507000 6.46868000 600 50.2283000 40.2074000 35.6595000 15.6034000 14.9575000 11.9460000 601 52.2238000 45.1155000 58.0544000 21.1833000 19.4114000 30.6621000 602 52.6844000 53.2358000 58.1606000 24.0241000 24.7823000 31.6618000 603 55.3866000 100.000000 93.6644000 62.3346000 83.4202000 94.3518000 604 22.0932000 93.2980000 53.9206000 36.7443000 63.7622000 34.2233000 605 23.2502000 100.000000 83.7077000 49.6416000 77.2787000 75.5495000 606 22.0304000 100.000000 100.000000 55.4421000 79.5782000 107.040000 607 23.0435000 0.00000000 43.0892000 4.59698000 2.04576000 14.8687000 608 20.4836000 9.78606000 45.8265000 4.97669000 2.71030000 17.0460000 609 20.4749000 25.2592000 100.000000 21.3296000 11.6674000 95.7308000 610 78.0342000 32.2522000 100.000000 44.6337000 25.4332000 97.1603000 611 89.7637000 38.6911000 100.000000 54.7594000 32.7242000 98.0342000 612 90.7312000 57.7164000 100.000000 61.5821000 45.1939000 100.081000 613 37.9444000 29.2233000 29.9434000 8.70456000 8.02240000 7.99180000 614 46.2596000 30.4864000 31.4225000 11.6250000 9.84252000 8.90108000 615 51.7372000 32.1717000 43.3512000 15.3692000 12.0787000 16.4293000 616 63.0648000 75.3574000 56.5078000 38.5851000 47.3432000 33.5274000 617 100.000000 76.5782000 58.6078000 66.2780000 62.5998000 37.2114000 618 72.9747000 25.8940000 0.00000000 22.2222000 14.3522000 1.59964000 619 86.5816000 31.7726000 0.00000000 32.6996000 21.2301000 2.37528000 620 100.000000 65.3780000 0.00000000 55.0090000 48.7967000 6.52042000 621 29.6228000 48.0094000 0.00000000 9.95496000 15.5401000 2.47477000 622 43.1629000 90.0814000 0.00000000 34.6507000 59.7459000 9.70528000 623 61.8726000 92.9277000 25.9748000 45.3179000 68.1875000 15.9629000 624 76.8056000 0.00000000 39.6465000 25.0831000 12.6612000 13.4596000 625 78.5152000 0.00000000 50.1519000 27.7670000 13.8677000 21.5959000 626 82.5288000 16.0932000 52.2775000 31.7574000 17.0617000 23.9211000 627 51.2319000 0.00000000 55.4380000 14.1398000 6.73187000 25.8958000 628 60.2637000 0.00000000 64.6655000 20.0463000 9.55236000 36.3341000 629 73.8245000 0.00000000 66.4706000 28.0107000 13.6096000 38.9326000 630 77.1706000 52.5352000 72.7893000 40.3111000 32.4117000 50.3687000 631 15.1916000 46.4450000 0.00000000 7.35573000 13.4844000 2.21491000 632 39.7379000 100.000000 0.00000000 41.1599000 74.3002000 12.1712000 633 40.7233000 100.000000 26.4117000 42.4701000 74.8575000 17.5745000 634 0.00000000 55.6895000 35.2526000 11.5134000 20.0827000 12.9181000 635 12.1819000 58.1069000 33.6903000 12.8587000 22.1950000 12.3908000 636 0.00000000 67.5366000 37.4138000 16.8757000 30.4191000 15.9042000 637 0.00000000 78.9631000 69.0203000 28.8018000 45.0696000 48.2539000 638 33.2033000 85.2220000 95.5403000 44.8766000 58.2081000 94.1568000 639 51.4051000 89.0870000 100.000000 54.9323000 67.0792000 104.655000 640 20.1564000 48.8964000 36.2016000 10.6239000 16.0792000 12.7403000 641 57.2160000 49.5547000 50.2971000 23.2568000 22.6826000 23.6630000 642 66.6250000 53.6193000 53.4334000 29.9237000 28.1341000 27.2404000 643 90.1392000 54.8053000 56.1234000 46.8964000 37.4726000 30.7931000 644 79.3762000 42.0148000 36.4509000 31.7150000 23.9500000 13.2960000 645 84.3725000 50.3722000 44.2629000 38.8212000 31.2178000 19.5638000 646 100.000000 64.2814000 76.1229000 64.2517000 51.6848000 57.6941000 647 100.000000 72.8065000 75.3814000 68.2659000 60.0516000 57.9902000 648 100.000000 83.6171000 92.0490000 80.0443000 74.9443000 88.6333000 649 21.8204000 18.2598000 22.5187000 3.35925000 3.12873000 4.35342000 650 31.1809000 14.2619000 25.5005000 4.86432000 3.35070000 5.39471000 651 29.3921000 14.1125000 34.8340000 5.32398000 3.47317000 9.80233000 652 27.6459000 41.5683000 39.8609000 10.0955000 12.5802000 14.3741000 653 26.6643000 45.2109000 65.9444000 15.6276000 16.3875000 39.4607000 654 26.3626000 44.9642000 77.1905000 18.4784000 17.4071000 55.1079000 655 27.0993000 31.1290000 55.3529000 10.1027000 8.84286000 26.4314000 656 33.9610000 29.8652000 54.5874000 11.1620000 9.06709000 25.6623000 657 41.2097000 34.0992000 69.4984000 17.1963000 12.9999000 43.3117000 658 63.1192000 38.7167000 82.9077000 30.9332000 21.1693000 64.3535000 659 38.5273000 17.6643000 53.3493000 10.4503000 6.26984000 23.9665000 660 43.3573000 13.5810000 100.000000 25.1379000 11.7517000 95.5466000 661 71.0213000 19.6665000 100.000000 38.2753000 19.3514000 96.3215000 662 100.000000 22.2163000 100.000000 60.7364000 31.3768000 97.4595000 663 45.8791000 11.7803000 22.9247000 8.57630000 5.02302000 4.58202000 664 55.4074000 0.00000000 23.4983000 11.8481000 6.01508000 4.80018000 665 60.3949000 18.9256000 55.4917000 19.2408000 10.9455000 26.4942000 666 46.6902000 15.5810000 40.8264000 10.8700000 6.42808000 13.7929000 667 50.7439000 25.6309000 44.1472000 13.9816000 9.70395000 16.6333000 668 56.1752000 26.3761000 43.0104000 16.1900000 11.0264000 15.9343000 669 24.1793000 32.2577000 18.9576000 5.54199000 7.30210000 3.95071000 670 47.3677000 35.5932000 18.1741000 12.0766000 11.6916000 4.24123000 671 63.9725000 37.7503000 21.7776000 20.0410000 16.4966000 5.80969000 672 65.7502000 47.1128000 31.1208000 24.2343000 22.3245000 10.4973000 673 8.06131000 0.00000000 12.0288000 0.54308700 0.25192700 1.29416000 674 0.00000000 10.6223000 12.9407000 0.66816300 0.89727500 1.57661000 675 6.38504000 23.2179000 19.5365000 2.36451000 3.49005000 3.54604000 676 0.00000000 50.1456000 77.5875000 17.8746000 19.4725000 56.1481000 677 0.00000000 56.1870000 77.5205000 20.0163000 23.7876000 56.7651000 678 32.2354000 54.5434000 83.0702000 24.6006000 25.0355000 65.7066000 679 54.1655000 55.9747000 83.3841000 32.2448000 29.7635000 66.7464000 680 58.7874000 100.000000 87.1814000 61.5414000 83.2805000 82.1538000 681 0.00000000 25.9903000 16.6217000 2.38879000 4.09810000 2.89194000 682 33.6213000 25.1342000 12.2002000 5.90090000 5.74258000 2.10203000 683 39.7411000 30.7113000 0.00000000 8.15204000 8.28028000 1.16870000 684 58.0779000 34.9162000 0.00000000 15.8068000 13.4571000 1.76468000 685 60.0377000 47.1185000 11.9088000 20.1293000 20.3475000 4.11969000 686 78.8952000 51.0826000 17.2215000 32.6083000 28.6611000 6.18871000 687 79.5203000 83.5970000 22.5528000 49.1561000 60.6404000 13.0518000 688 82.8184000 82.6879000 65.4067000 57.1294000 63.1742000 45.6374000 689 84.6878000 87.1112000 75.8774000 64.1399000 70.7766000 61.0160000 690 90.4773000 100.000000 89.4083000 82.6217000 94.0602000 87.1894000 691 0.00000000 6.77548000 38.8209000 2.45608000 1.31000000 11.9257000 692 32.7317000 0.00000000 47.3132000 7.03815000 3.23258000 18.2293000 693 62.7379000 0.00000000 56.2222000 19.4797000 9.46781000 26.9317000 694 69.2797000 46.0969000 62.2904000 30.7239000 24.6570000 35.8671000 695 70.8502000 47.9882000 73.7734000 35.0726000 27.4306000 51.0906000 696 72.3387000 59.9688000 85.8019000 44.0140000 38.1080000 71.9094000 697 15.3393000 13.6824000 20.8893000 2.08775000 1.88885000 3.65506000 698 15.8421000 11.2855000 25.6599000 2.29082000 1.71330000 5.27688000 699 13.1123000 13.0332000 30.7121000 2.57752000 1.98538000 7.51436000 700 0.00000000 52.0861000 100.000000 26.4079000 23.9430000 97.8323000 701 0.00000000 66.5437000 100.000000 32.3603000 35.8482000 99.8164000 702 0.00000000 79.4597000 100.000000 39.3101000 49.7484000 102.133000 703 0.00000000 93.1994000 100.000000 48.5174000 68.1638000 105.202000 704 80.0008000 94.7516000 100.000000 74.5849000 83.3304000 106.756000 705 91.2392000 95.1573000 100.000000 83.4851000 88.3771000 107.262000 706 47.0617000 47.6892000 90.3361000 28.9880000 23.5486000 78.1394000 707 57.6475000 56.6396000 100.000000 40.1173000 33.4991000 98.9547000 708 36.3104000 52.9607000 39.1963000 15.4406000 20.5656000 15.1992000 709 47.0379000 52.9172000 41.9254000 19.0416000 22.3588000 17.1964000 710 51.5788000 69.2355000 54.4325000 29.7190000 37.9907000 30.1159000 711 74.0783000 69.2736000 84.1033000 48.8084000 46.9892000 70.4233000 712 0.00000000 6.38710000 16.3317000 0.60097300 0.54365300 2.23017000 713 8.16752000 0.00000000 18.2045000 0.80699600 0.35812700 2.65556000 714 18.1936000 0.00000000 100.000000 19.1911000 7.80902000 95.0988000 715 66.7979000 0.00000000 100.000000 34.6978000 15.8045000 95.8253000 716 71.0285000 51.6752000 100.000000 45.3522000 33.4993000 98.6791000 717 90.1159000 68.3559000 100.000000 65.8108000 54.4013000 101.636000 718 91.1280000 78.1961000 100.000000 71.9634000 65.4698000 103.448000 719 92.9604000 86.9754000 100.000000 79.0528000 77.3622000 105.369000 720 43.0034000 53.3273000 53.8122000 19.7198000 22.7088000 27.0923000 721 45.7426000 61.6548000 61.4615000 25.4430000 30.3691000 36.2959000 722 45.3457000 100.000000 67.0956000 50.2676000 78.1457000 51.0062000 723 0.00000000 76.3956000 18.2096000 19.9715000 39.1419000 9.13233000 724 0.00000000 85.8511000 31.8388000 26.7994000 51.2139000 16.2935000 725 32.7194000 30.6899000 12.1316000 6.59528000 7.44325000 2.38151000 726 38.8735000 36.3603000 0.00000000 9.04939000 10.4396000 1.53815000 727 44.3885000 44.7419000 0.00000000 12.8623000 15.5790000 2.32920000 728 47.2471000 54.3175000 0.00000000 16.9738000 22.3504000 3.41947000 729 58.4182000 70.4970000 100.000000 46.7080000 46.1528000 101.050000 730 64.2277000 77.1832000 100.000000 53.2344000 54.9360000 102.401000 731 40.7402000 24.9953000 44.0577000 10.4586000 7.75201000 16.3756000 732 68.1721000 23.1349000 43.7064000 21.8787000 13.2673000 16.5768000 733 33.6644000 19.0652000 20.3580000 5.52389000 4.38343000 3.79328000 734 50.9967000 16.2267000 22.1530000 10.7449000 6.65258000 4.52236000 735 81.7211000 38.6230000 19.6113000 31.1137000 22.5275000 5.72738000 736 79.7275000 44.8899000 28.4010000 31.9675000 25.3562000 9.41333000 737 82.6310000 55.2090000 38.7265000 38.5150000 33.6899000 16.2159000 738 100.000000 59.0677000 59.2497000 57.8407000 45.5133000 35.0505000 739 36.2230000 9.00811000 0.00000000 4.75678000 2.90654000 0.31044900 740 48.4832000 12.2474000 0.00000000 8.75644000 5.25158000 0.55240600 741 59.1443000 16.4475000 0.00000000 13.5558000 8.21530000 0.87165000 742 100.000000 17.8426000 22.0963000 42.9237000 23.4698000 6.05420000 743 100.000000 17.6688000 31.1428000 43.6111000 23.7179000 9.75707000 744 65.2784000 0.00000000 48.9886000 19.5203000 9.63774000 20.2069000 745 89.1963000 0.00000000 60.6665000 37.7141000 18.7652000 32.5120000 746 89.4499000 0.00000000 76.7768000 41.9658000 20.4896000 53.8359000 747 48.0019000 0.00000000 35.1447000 9.91316000 4.89997000 10.0112000 748 84.1418000 0.00000000 34.7312000 29.6832000 15.0989000 10.7056000 749 100.000000 17.6911000 40.0567000 44.5919000 24.1136000 14.9125000 750 35.1460000 0.00000000 8.33583000 4.31800000 2.21052000 0.92129900 751 34.5582000 0.00000000 14.0680000 4.35311000 2.20797000 1.85538000 752 100.000000 21.5772000 13.1255000 42.8924000 24.1128000 3.86812000 753 100.000000 33.5779000 22.8545000 45.3124000 28.1695000 7.09001000 754 81.0500000 25.8599000 30.9065000 28.9937000 17.6740000 9.24438000 755 82.8589000 31.6859000 38.2938000 32.0648000 20.6254000 13.7600000 756 100.000000 60.8276000 43.1066000 55.7920000 45.8671000 20.6423000 757 100.000000 79.6300000 51.8937000 66.7974000 65.6759000 31.1034000 758 67.9478000 62.0079000 31.9912000 31.0468000 34.0122000 12.8268000 759 75.3891000 63.3108000 66.2834000 41.7845000 39.7486000 43.0152000 760 76.0430000 69.0200000 65.6849000 44.7702000 45.3169000 43.1858000 761 14.7484000 29.0094000 13.4354000 3.52417000 5.41558000 2.39224000 762 22.5614000 58.4078000 21.4767000 13.1384000 22.6334000 7.26111000 763 22.5194000 78.6470000 29.2298000 23.7448000 42.9439000 13.6104000 764 20.5635000 100.000000 29.3557000 38.4589000 72.7613000 18.6475000 765 49.9159000 100.000000 37.4613000 46.6403000 76.8845000 23.3330000 766 63.8706000 100.000000 40.1936000 53.2569000 80.2576000 25.3830000 767 52.7384000 52.8962000 21.8673000 19.2641000 22.6867000 7.07432000 768 61.5308000 55.0318000 48.1627000 26.8755000 27.4371000 22.5569000 769 66.8259000 60.4884000 66.7555000 35.5373000 34.6944000 42.9643000 770 100.000000 65.0129000 92.3439000 69.9004000 54.4819000 85.7875000 771 65.3483000 21.5243000 48.0104000 20.7612000 12.3157000 19.8335000 772 75.6579000 20.3316000 56.0598000 28.1505000 15.7547000 27.5245000 773 74.9552000 84.8639000 73.6489000 55.2328000 64.0332000 56.9134000 774 81.0351000 100.000000 88.4212000 75.0421000 90.1922000 85.0233000 775 0.00000000 49.6539000 44.7435000 10.5815000 16.2961000 18.5355000 776 0.00000000 57.8861000 44.4823000 13.5316000 22.2573000 19.3315000 777 27.0321000 70.9213000 48.6869000 22.5873000 35.7050000 24.8190000 778 29.4937000 71.4582000 82.8300000 31.4717000 39.7608000 67.7831000 779 33.1932000 72.0792000 100.000000 38.8577000 43.3297000 100.918000 780 31.9785000 26.2392000 75.4133000 14.9881000 9.59574000 51.1055000 781 35.6810000 34.6506000 80.0269000 18.7371000 13.6241000 58.8090000 782 35.8928000 47.2398000 100.000000 29.1845000 23.0134000 97.5068000 783 26.8619000 66.2179000 50.5238000 20.5287000 31.1468000 25.6408000 784 33.4205000 92.9210000 62.8090000 40.3901000 65.0188000 43.7511000 785 11.0600000 32.2210000 24.2502000 4.37843000 6.65433000 5.58773000 786 0.00000000 33.9371000 22.3009000 4.10538000 7.03507000 4.99451000 787 23.6400000 33.9718000 34.8697000 7.05743000 8.44480000 10.6905000 788 29.2063000 39.6830000 68.8226000 15.3182000 13.9337000 42.6940000 789 31.5725000 58.5183000 74.1545000 23.3262000 26.9686000 52.1714000 790 0.00000000 32.1036000 32.0195000 4.51586000 6.61715000 8.95125000 791 0.00000000 100.000000 92.8373000 50.9994000 77.6113000 92.2060000 792 36.8037000 100.000000 93.2101000 55.7397000 80.0394000 93.1541000 793 0.00000000 29.7264000 42.4964000 5.29610000 6.23133000 15.2125000 794 22.3527000 28.4577000 78.2207000 14.4019000 9.72266000 55.4295000 795 20.2752000 33.7911000 100.000000 22.7881000 14.6230000 96.2244000 796 18.4303000 48.5017000 100.000000 26.3852000 22.1573000 97.4890000 797 44.8394000 0.00000000 75.9524000 16.6842000 7.48133000 51.4129000 798 50.5678000 0.00000000 86.7347000 22.1181000 9.89336000 69.2688000 799 23.6090000 6.20898000 61.0640000 8.03379000 3.72301000 31.6189000 800 25.2376000 10.3064000 86.3506000 15.4544000 7.03000000 68.3834000 801 31.5944000 0.00000000 100.000000 21.4026000 8.94932000 95.2024000 802 44.2649000 0.00000000 100.000000 24.8408000 10.7221000 95.3635000 803 100.000000 80.9881000 100.000000 81.4843000 72.8744000 104.375000 804 25.2109000 37.6948000 24.4723000 7.20716000 9.83926000 6.13544000 805 32.3419000 37.5577000 22.6827000 8.44234000 10.4431000 5.55208000 806 36.0526000 53.4492000 26.0876000 14.2511000 20.3623000 8.41437000 807 51.1988000 72.2453000 25.6675000 27.4451000 39.5504000 11.2572000 808 29.7185000 41.3301000 13.1000000 8.33434000 11.8222000 3.31094000 809 42.5115000 55.8465000 18.9305000 16.5061000 22.8966000 6.37523000 810 63.1270000 56.0562000 18.8090000 25.0393000 27.4157000 6.76396000 811 79.0859000 100.000000 18.5037000 60.5422000 84.2343000 15.7763000 812 100.000000 100.000000 18.4442000 77.5132000 92.9853000 16.5557000 813 0.00000000 39.3922000 32.9301000 6.19864000 9.83983000 9.95313000 814 0.00000000 48.7051000 36.8501000 9.24994000 15.2710000 13.0412000 815 34.9545000 73.8766000 72.5974000 30.9642000 41.7661000 52.3941000 816 36.0202000 78.6594000 72.3439000 33.8857000 47.3228000 52.9559000 817 28.5832000 25.6814000 22.3718000 5.39742000 5.54493000 4.66301000 818 80.9401000 67.7340000 21.3809000 41.1327000 43.2311000 9.73135000 819 73.8950000 35.3147000 0.00000000 24.5077000 18.0699000 2.19674000 820 86.5119000 42.1505000 0.00000000 35.0100000 25.9310000 3.16082000 821 100.000000 50.3914000 15.2712000 49.3929000 36.9796000 6.45033000 822 100.000000 73.8166000 17.3637000 59.7348000 57.5130000 10.3640000 823 100.000000 80.7586000 30.9287000 64.7031000 65.9358000 16.6885000 824 100.000000 90.8033000 29.2869000 71.2289000 79.2234000 18.1376000 825 100.000000 92.6401000 54.5825000 75.9755000 83.2549000 36.5616000 826 23.0833000 19.0698000 0.00000000 2.87849000 3.09155000 0.44504700 827 22.6509000 19.2878000 14.4365000 3.16782000 3.23680000 2.19240000 828 23.2163000 17.7094000 17.0486000 3.20475000 3.00284000 2.74196000 829 49.2546000 23.3381000 60.3673000 15.9628000 9.91805000 31.6156000 830 100.000000 29.3867000 74.3578000 53.0060000 29.9898000 51.4870000 831 100.000000 28.0285000 83.5500000 55.5421000 30.6390000 65.9705000 832 100.000000 56.8666000 84.7549000 63.7784000 46.4821000 70.6593000 833 100.000000 65.3172000 84.1872000 67.2025000 53.6291000 70.8800000 834 100.000000 90.8674000 93.1469000 85.3756000 84.9561000 92.4182000 835 100.000000 94.0848000 100.000000 90.4218000 90.7501000 107.354000 836 14.5404000 23.1920000 10.9835000 2.54594000 3.62032000 1.66310000 837 14.8066000 28.7007000 0.00000000 3.18523000 5.19726000 0.83525400 838 14.9963000 45.2281000 42.2342000 9.66608000 13.8287000 16.2626000 839 20.1450000 52.1404000 60.4266000 15.6039000 19.8116000 33.6097000 840 17.1647000 56.3710000 100.000000 29.0085000 27.6168000 98.4044000 841 23.5045000 78.5173000 100.000000 40.6079000 49.5836000 102.033000 842 46.8254000 59.6552000 68.3118000 26.5681000 29.5085000 44.4376000 843 48.6235000 69.4771000 84.5035000 36.3902000 40.7236000 70.5556000 844 66.0318000 42.0657000 53.8088000 26.0462000 20.7518000 26.3782000 845 75.7125000 44.5187000 66.1001000 35.0929000 26.1233000 40.5093000 846 91.4591000 52.6902000 77.4890000 52.3980000 38.5718000 57.8647000 847 20.5279000 5.66076000 17.7020000 2.07340000 1.25574000 2.62985000 848 25.7414000 0.00000000 13.6018000 2.52163000 1.26566000 1.67757000 849 26.5259000 0.00000000 8.20653000 2.49380000 1.27029000 0.81918300 850 26.8530000 36.4484000 33.2133000 7.95348000 9.71559000 9.98605000 851 25.6921000 56.2286000 57.7612000 17.3812000 23.0150000 31.2488000 852 30.9541000 66.2234000 66.5842000 24.6149000 32.8780000 42.9725000 853 34.7755000 70.6152000 92.1408000 35.4084000 40.7703000 84.5652000 854 41.4212000 79.4888000 100.000000 45.2276000 52.8257000 102.415000 855 34.8326000 25.1009000 31.8532000 7.43008000 6.38018000 8.66859000 856 61.9308000 48.7508000 35.9663000 23.2517000 22.5237000 13.1816000 857 82.2365000 62.0807000 41.8286000 41.4095000 39.2720000 19.2152000 858 93.2072000 78.6019000 43.8180000 58.8174000 60.7969000 23.8870000 859 60.3299000 60.3041000 31.7755000 26.3006000 30.4859000 12.2879000 860 68.8379000 69.7384000 35.0425000 35.5046000 41.6776000 15.7029000 861 78.3118000 89.3193000 88.5165000 65.1013000 73.0678000 82.4166000 862 19.5952000 18.1554000 42.7007000 5.05617000 3.75639000 14.8937000 863 22.7577000 19.6134000 69.7661000 10.9124000 6.39266000 42.7257000 864 27.4301000 23.0455000 81.1494000 15.3257000 8.90517000 59.8954000 865 52.7317000 31.5420000 100.000000 30.8530000 18.1270000 96.4760000 866 61.1185000 64.8080000 100.000000 45.2297000 41.2761000 100.186000 867 71.6988000 67.2320000 100.000000 52.1808000 46.5582000 100.840000 868 63.8547000 28.9422000 44.4824000 20.5104000 13.8432000 17.3404000 869 90.5985000 47.6703000 50.8388000 43.8755000 32.4098000 24.9347000 870 73.4777000 18.5837000 19.5848000 22.1919000 12.9078000 4.33328000 871 84.8249000 17.2470000 24.3228000 30.1818000 16.7976000 6.21340000 872 100.000000 53.7298000 64.9988000 57.0485000 41.9022000 41.0350000 873 38.6708000 20.2164000 26.4426000 7.33785000 5.45830000 6.04450000 874 58.1718000 18.9056000 28.4639000 14.5295000 8.93574000 7.19053000 875 47.4213000 8.44936000 33.0769000 9.76719000 5.26260000 8.95983000 876 46.8317000 11.5805000 46.9849000 11.4969000 6.20904000 18.3009000 877 53.0771000 8.82152000 52.8661000 14.7036000 7.51751000 23.5258000 878 81.3643000 66.7889000 93.2746000 55.7078000 48.3653000 87.1700000 879 0.00000000 6.47937000 26.5189000 1.22487000 0.79898900 5.49833000 880 10.2232000 0.00000000 26.1926000 1.43450000 0.62327900 5.32182000 881 20.8224000 0.00000000 83.7729000 13.5600000 5.59453000 63.7263000 882 26.1972000 44.2770000 91.0830000 22.7948000 18.8148000 78.9648000 883 24.4573000 62.9628000 100.000000 32.7219000 33.5876000 99.3611000 884 26.8462000 57.8946000 82.6225000 24.6632000 26.9949000 65.3302000 885 26.1324000 70.5139000 89.7927000 32.7069000 39.3985000 79.9844000 886 30.9463000 77.1337000 93.2857000 38.5222000 47.6121000 87.9512000 887 36.1344000 92.6178000 100.000000 52.5165000 69.5885000 105.266000 888 27.9780000 26.8003000 40.5398000 7.17834000 6.51526000 13.8098000 889 29.9556000 38.7725000 41.9160000 10.1080000 11.5103000 15.5667000 890 0.00000000 5.53708000 7.33963000 0.27370700 0.36340700 0.65865000 891 5.09355000 3.67368000 13.5215000 0.56297400 0.40667400 1.59856000 892 11.4522000 3.96176000 16.5125000 1.04206000 0.65127000 2.27176000 893 0.00000000 11.7672000 19.1681000 1.01614000 1.14952000 3.06076000 894 41.1052000 0.00000000 56.8168000 10.9057000 5.03352000 27.1366000 895 46.4369000 43.1603000 59.6921000 18.7933000 17.3184000 32.1489000 896 55.8043000 61.6948000 67.0506000 30.6652000 32.9388000 43.2567000 897 74.8566000 64.5007000 76.7153000 44.7375000 41.7522000 57.6997000 898 79.5555000 85.5774000 79.2099000 60.3774000 67.1980000 65.6538000 899 82.6396000 92.0803000 82.6288000 68.1568000 77.8008000 72.8552000 900 31.8620000 12.9985000 14.5572000 4.29826000 2.99036000 2.11028000 901 36.2154000 7.99477000 11.7377000 4.93970000 2.90171000 1.52378000 902 36.7450000 31.1049000 24.7160000 8.30224000 8.36092000 5.88245000 903 43.0281000 36.9686000 29.4080000 11.6923000 11.8589000 8.32783000 904 64.5771000 38.8310000 34.6798000 21.6928000 17.6049000 11.5814000 905 83.1490000 49.5522000 55.4176000 39.4987000 30.9500000 29.2138000 906 83.4086000 51.7730000 63.4251000 42.1034000 33.2094000 38.2480000 907 13.9258000 6.64525000 13.3834000 1.20091000 0.88194700 1.62969000 908 16.2215000 13.6509000 8.66808000 1.67026000 1.72833000 1.00979000 909 11.4357000 10.7149000 46.4776000 4.21097000 2.38239000 17.5383000 910 0.00000000 9.18813000 51.2758000 4.39395000 2.26130000 21.5891000 911 21.5480000 58.8319000 50.8642000 16.4898000 24.2324000 24.8214000 912 38.7063000 70.3340000 49.5796000 25.0951000 36.5323000 25.6117000 913 41.8492000 87.6366000 49.6975000 36.3533000 57.6582000 29.1978000 914 0.00000000 21.0183000 8.61477000 1.44492000 2.65863000 1.19489000 915 0.00000000 35.0930000 10.5194000 3.80819000 7.30338000 2.23544000 916 0.00000000 64.4222000 15.2365000 13.6871000 26.7934000 6.35688000 917 25.3921000 64.7433000 79.6325000 26.4189000 32.3719000 61.3926000 918 25.0600000 92.7407000 80.2808000 43.2238000 65.7481000 67.9873000 919 12.9835000 41.0178000 24.8012000 6.54392000 10.7064000 6.45911000 920 21.5260000 41.2056000 28.3500000 7.80734000 11.3984000 7.96927000 921 31.4924000 49.9034000 44.7633000 14.0009000 18.1805000 18.7343000 922 51.3149000 48.9952000 72.8993000 25.5129000 23.0054000 49.4887000 923 52.3354000 55.0142000 73.7895000 28.2574000 27.5006000 51.4863000 924 15.2249000 29.0469000 23.7788000 4.11580000 5.66773000 5.24005000 925 11.2501000 42.2228000 44.7985000 8.87513000 12.1316000 17.8635000 926 0.00000000 57.4551000 56.3555000 15.3670000 22.7183000 29.8412000 927 37.0811000 64.3047000 67.8159000 25.4782000 31.9643000 44.3244000 928 55.3388000 72.0548000 72.9124000 36.9428000 43.3860000 52.8385000 929 68.1827000 73.9685000 72.5423000 44.2942000 48.7155000 52.9551000 930 100.000000 87.6812000 79.2577000 78.4570000 78.6202000 66.9815000 931 50.9525000 27.9611000 22.4772000 12.2144000 9.58432000 5.11941000 932 82.2348000 27.1853000 23.0035000 29.4239000 18.2698000 6.06818000 933 100.000000 42.1198000 33.7823000 48.2293000 32.5401000 12.5746000 934 100.000000 52.8222000 46.3934000 53.1523000 39.8231000 22.1195000 935 58.2108000 50.2416000 7.35927000 20.1423000 21.8523000 3.76176000 936 75.0737000 67.4556000 13.4054000 36.6424000 40.7599000 7.46348000 937 79.6382000 72.8716000 7.25548000 42.2852000 47.7967000 7.59149000 938 91.0507000 100.000000 54.3800000 73.7306000 90.5584000 37.8919000 939 93.3717000 100.000000 84.4850000 83.3713000 94.6410000 78.4550000 940 0.00000000 22.2648000 35.7374000 3.34523000 3.66106000 10.4564000 941 0.00000000 26.2003000 34.2595000 3.73033000 4.68536000 9.80142000 942 29.6470000 52.8657000 62.7825000 17.9370000 21.3339000 36.4720000 943 49.6415000 56.3018000 92.0704000 33.5592000 30.2804000 82.5029000 944 67.3221000 82.2845000 93.6028000 55.4738000 60.9513000 90.2558000 945 74.2328000 85.9615000 93.1045000 61.7859000 67.7610000 90.2589000 946 93.6570000 100.000000 94.4794000 87.1585000 96.1842000 97.1257000 947 32.0731000 31.2704000 25.2287000 7.24534000 7.85759000 6.03471000 948 30.8465000 33.7346000 29.3667000 7.79142000 8.81304000 7.92655000 949 48.0611000 33.8302000 38.2147000 13.6330000 11.7488000 12.9682000 950 66.7571000 51.0576000 92.2185000 39.6518000 30.5968000 82.5283000 951 72.6829000 70.2054000 92.0017000 51.1503000 48.5813000 84.9756000 952 73.7883000 76.2555000 94.6252000 56.0888000 55.8641000 91.2728000 953 28.4301000 54.6057000 38.1661000 14.1491000 20.8005000 14.6570000 954 28.6829000 62.5496000 37.6009000 17.3473000 27.2317000 15.3790000 955 38.5424000 66.0698000 55.6956000 24.0409000 32.7465000 30.6523000 956 60.0677000 65.6175000 66.9879000 34.3790000 37.4776000 43.8573000 957 63.8566000 65.9962000 73.1043000 38.0317000 39.4436000 52.2936000 958 69.0656000 86.5025000 90.8729000 58.1994000 66.5439000 85.9128000 959 43.5143000 12.4274000 5.42629000 7.13776000 4.42581000 0.88833600 960 42.2703000 6.96379000 8.30569000 6.50894000 3.65527000 1.08114000 961 54.8381000 25.7244000 27.9572000 13.8595000 9.87052000 7.18462000 962 72.9107000 83.7721000 27.7721000 45.3111000 58.7807000 14.8880000 963 40.4849000 45.0414000 19.1232000 12.2843000 15.3457000 5.19444000 964 40.3892000 45.2893000 42.9124000 14.5616000 16.3688000 16.9801000 965 45.2138000 46.4192000 52.5430000 17.9317000 18.4287000 25.1595000 966 55.7231000 52.0516000 66.4787000 26.7312000 25.3447000 41.2748000 967 38.8297000 33.5042000 41.0979000 10.9691000 10.2347000 14.7074000 968 43.6758000 38.1601000 42.3336000 13.6096000 13.0919000 15.9833000 969 62.9545000 42.6646000 77.4839000 30.1951000 22.4811000 55.9208000 970 48.0598000 29.7313000 51.8943000 14.8633000 10.9968000 23.2864000 971 54.4485000 29.4715000 51.3068000 17.2332000 12.1637000 22.8519000 972 63.2495000 35.0251000 63.1286000 24.7849000 17.3773000 35.7544000 973 73.4462000 33.4379000 78.0883000 34.1562000 21.2710000 56.4125000 974 72.3587000 78.8984000 85.7750000 53.5687000 57.2146000 75.0463000 975 80.2558000 82.4041000 88.6245000 61.8832000 64.5770000 81.1453000 976 43.2615000 37.0459000 63.6183000 17.0548000 14.0408000 36.0974000 977 55.0793000 41.1003000 67.9379000 23.4886000 18.7051000 42.0291000 978 60.0733000 48.4889000 100.000000 38.3826000 28.3373000 98.0499000 979 20.3279000 24.5381000 41.2448000 5.71992000 5.25711000 14.1238000 980 19.4304000 100.000000 41.3070000 39.6146000 73.2068000 25.4951000 981 11.9384000 63.1829000 41.3984000 15.8904000 26.8423000 17.8603000 982 13.4009000 76.3999000 61.3769000 26.1805000 41.7065000 38.3487000 983 45.8299000 76.2311000 71.3687000 35.1358000 45.9041000 51.2567000 984 74.9055000 88.4683000 70.9196000 56.8957000 68.5772000 53.8682000 985 90.8605000 88.0396000 72.0747000 68.5981000 74.1374000 55.9253000 986 72.2600000 31.7614000 14.8436000 23.1215000 16.2481000 3.73954000 987 85.2463000 41.5441000 12.9762000 34.1533000 25.2187000 4.51339000 988 31.2459000 30.9055000 70.5334000 14.2855000 10.5445000 44.3856000 989 40.3233000 100.000000 86.4189000 54.2935000 79.5734000 80.4590000 990 100.000000 100.000000 93.6970000 92.5654000 99.0063000 95.8323000 991 85.8473000 0.00000000 66.9043000 36.5014000 17.9755000 39.8760000 992 88.0245000 23.2625000 74.0046000 41.6197000 22.7477000 50.1754000 993 100.000000 56.5575000 75.2693000 60.7557000 45.0810000 55.3310000 994 36.0697000 23.9174000 27.4958000 7.18906000 6.05467000 6.60291000 995 52.6742000 31.4285000 37.6120000 14.8688000 11.6965000 12.5182000 996 72.4487000 31.5899000 38.5343000 25.0736000 16.9902000 13.5789000 997 73.1599000 38.3386000 47.1579000 28.1374000 20.5645000 20.3355000 998 42.1875000 52.3723000 30.1512000 15.9312000 20.6213000 10.1408000 999 47.0293000 52.5522000 36.2657000 18.2133000 21.8205000 13.4865000 1000 49.0557000 56.7920000 50.2821000 22.4781000 26.1261000 24.3553000 1001 67.9261000 57.8460000 53.4596000 32.2598000 31.7214000 27.8344000 1002 70.6108000 64.3746000 57.4372000 37.3629000 38.4070000 32.8275000 1003 87.4210000 76.7728000 84.5122000 62.4253000 59.9854000 72.9171000 1004 19.3046000 17.4950000 27.3281000 3.29654000 2.94394000 6.13675000 1005 92.0327000 15.7748000 41.4147000 37.5074000 20.1788000 15.4475000 1006 100.000000 12.5715000 58.9832000 47.2992000 24.5170000 31.2662000 1007 62.5751000 12.0578000 44.9219000 17.9639000 9.62557000 16.9951000 1008 68.5921000 9.99411000 66.0461000 25.1243000 12.6648000 38.3694000 1009 69.1136000 0.00000000 74.7376000 27.3168000 13.0034000 50.1168000 1010 100.000000 15.3034000 78.6674000 52.4643000 26.9166000 57.4414000 1011 70.8544000 15.2112000 0.00000000 19.7013000 11.2251000 1.12891000 1012 84.9362000 18.9131000 0.00000000 29.5618000 16.8253000 1.69045000 1013 100.000000 16.0350000 0.00000000 42.0337000 22.8449000 2.19545000 1014 100.000000 81.8826000 0.00000000 63.9932000 66.7659000 9.51508000 1015 16.8055000 9.21820000 6.18635000 1.39872000 1.18035000 0.63587300 1016 19.5223000 6.96491000 0.00000000 1.51705000 1.09728000 0.13187700 1017 18.9505000 0.00000000 7.83384000 1.36057000 0.68694800 0.72224700 1018 24.1448000 24.4155000 13.1724000 3.97932000 4.59728000 2.15988000 1019 55.9749000 84.4568000 25.2645000 36.6106000 54.9751000 13.5950000 1020 60.5296000 87.4898000 36.8580000 41.8248000 60.5379000 20.0664000 1021 26.4823000 86.3564000 13.6009000 28.2947000 52.6230000 10.2313000 1022 27.4581000 100.000000 17.1650000 38.7329000 72.9968000 14.4079000 1023 22.9345000 29.4359000 0.00000000 4.29351000 5.95480000 0.92309000 1024 35.6766000 27.7103000 8.25124000 6.67927000 6.74066000 1.66035000 1025 56.4933000 28.5792000 12.1169000 14.1336000 10.7838000 2.62665000 1026 89.7958000 36.9483000 13.9112000 36.6420000 24.8274000 4.48931000 1027 100.000000 65.1416000 34.4732000 56.6562000 49.2795000 15.7388000 1028 100.000000 75.8543000 40.5705000 62.8771000 60.5806000 21.3312000 1029 17.3052000 22.7717000 34.5572000 4.32674000 4.27747000 9.85617000 1030 16.7673000 32.7349000 41.8465000 6.75361000 7.82273000 14.9835000 1031 20.2866000 33.1901000 61.8539000 10.7687000 9.62097000 33.5122000 1032 53.9857000 35.0264000 81.8413000 25.4938000 17.1607000 62.0906000 1033 22.6271000 4.81672000 30.6925000 3.24688000 1.71446000 7.41727000 1034 29.8212000 18.2322000 29.6059000 5.26767000 4.04647000 7.24908000 1035 66.9797000 20.3930000 54.5558000 22.6478000 12.9606000 25.7781000 1036 69.9668000 20.2819000 65.7592000 26.7101000 14.7629000 38.3325000 1037 92.4390000 20.7484000 69.7910000 43.8025000 23.5403000 44.3367000 1038 92.7361000 66.5725000 72.8793000 57.9268000 50.1148000 52.9852000 1039 92.8675000 67.4181000 80.5472000 60.6660000 51.8743000 64.8219000 1040 0.00000000 13.1073000 31.5893000 2.02357000 1.69827000 7.91726000 1041 6.65421000 16.7821000 32.0592000 2.60009000 2.43694000 8.26535000 1042 12.0974000 16.0937000 45.7411000 4.54408000 3.15322000 17.0874000 1043 7.38103000 23.2089000 63.3902000 8.32666000 5.87843000 34.7108000 1044 22.9756000 51.2498000 71.3138000 18.2793000 20.4356000 47.1538000 1045 47.2830000 67.4032000 76.8303000 32.5060000 37.4725000 57.6927000 1046 39.5756000 28.9917000 21.0230000 8.45848000 7.91315000 4.52365000 1047 39.8408000 33.5622000 21.8876000 9.43741000 9.67406000 5.08716000 1048 51.7483000 58.1673000 20.4993000 20.7758000 26.4347000 7.28843000 1049 54.1402000 91.4004000 30.7289000 41.0348000 64.2773000 17.5187000 1050 21.6646000 36.2541000 9.69157000 5.62706000 8.61984000 2.27127000 1051 40.9467000 70.9689000 0.00000000 22.2733000 36.0014000 5.77478000 1052 57.5291000 91.0963000 0.00000000 40.9160000 64.0515000 10.2063000 1053 69.3505000 92.3821000 20.9710000 48.6203000 69.3334000 14.2458000 1054 66.6205000 75.8854000 16.3614000 36.1467000 47.0620000 9.34272000 1055 70.1692000 84.5250000 37.6089000 45.1178000 59.2925000 20.1087000 1056 71.3558000 90.7708000 61.7402000 54.1077000 69.7989000 42.7136000 1057 76.4063000 100.000000 79.8283000 69.0654000 87.4351000 70.0854000 1058 36.9464000 43.9787000 76.1171000 20.1947000 17.9100000 53.4872000 1059 73.5778000 46.2617000 80.3188000 38.1173000 27.9932000 61.0315000 1060 89.9639000 48.8882000 84.8875000 52.1891000 36.2924000 69.5321000 1061 69.0129000 12.6809000 26.3799000 19.4492000 10.6906000 6.39081000 1062 91.8783000 10.7040000 25.2948000 35.3688000 18.7198000 6.67555000 1063 92.3235000 14.2137000 100.000000 53.0893000 26.2349000 96.8698000 1064 17.0330000 15.3441000 79.8718000 12.6020000 6.32590000 57.4753000 1065 18.5470000 69.4814000 77.8981000 27.2060000 36.2294000 59.3702000 1066 22.0209000 78.1614000 89.8258000 36.2795000 47.4911000 81.4200000 1067 26.9614000 75.3780000 64.2346000 28.0120000 41.7188000 41.6004000 1068 25.5535000 89.9770000 65.7988000 37.3750000 60.2261000 46.5937000 1069 17.1182000 59.4237000 0.00000000 12.1747000 22.8304000 3.76476000 1070 84.8108000 58.3713000 0.00000000 39.1231000 36.0889000 4.90451000 1071 100.000000 65.0597000 17.3429000 55.3198000 48.6842000 8.88743000 1072 49.1940000 20.5028000 0.00000000 9.76377000 6.87579000 0.81280700 1073 57.8254000 21.5714000 23.4814000 14.2942000 9.30461000 5.30019000 1074 73.8976000 0.00000000 10.8152000 21.0539000 10.8321000 2.05445000 1075 87.5409000 0.00000000 12.9582000 30.7804000 15.8391000 2.87772000 1076 87.9838000 14.5098000 10.6235000 31.7153000 17.3117000 2.71286000 1077 67.6939000 35.0132000 7.16701000 20.8581000 16.0792000 2.58873000 1078 67.8833000 39.7520000 0.00000000 21.9471000 18.2768000 2.37150000 1079 88.6656000 52.8250000 0.00000000 40.0192000 33.4330000 4.34479000 1080 53.9955000 35.6295000 51.1681000 18.2198000 14.4592000 23.1180000 1081 54.3939000 48.2405000 54.9466000 22.4239000 21.5296000 27.8274000 1082 61.1958000 50.5506000 64.5895000 28.3214000 25.4547000 38.8751000 1083 65.7749000 55.1376000 64.2617000 32.2439000 29.9026000 39.1300000 1084 84.3112000 60.8484000 84.3048000 52.0325000 42.8492000 69.8005000 1085 16.7024000 0.00000000 57.7805000 6.27137000 2.62182000 27.9187000 1086 17.1576000 38.1137000 69.1419000 13.1856000 12.2601000 42.9059000 1087 13.3471000 45.7619000 69.5886000 14.9647000 16.1827000 44.1633000 1088 11.8722000 63.6021000 76.0999000 23.2362000 30.0804000 55.6498000 1089 0.00000000 89.1491000 74.9921000 36.9831000 58.8850000 58.8370000 1090 31.4515000 84.9662000 72.8220000 36.8774000 54.6943000 54.8959000 1091 29.6083000 93.0378000 85.4735000 45.9394000 67.2809000 76.8617000 1092 15.0803000 39.6346000 32.0000000 6.98350000 10.3438000 9.53073000 1093 10.0742000 50.5983000 43.4714000 11.1315000 17.0661000 17.7027000 1094 0.00000000 90.0257000 43.8513000 31.0862000 57.5124000 24.7382000 1095 13.0376000 70.6258000 35.2273000 18.8111000 33.7406000 15.1553000 1096 55.9025000 72.0441000 48.7162000 31.9817000 41.4209000 25.4521000 1097 56.1963000 77.0462000 59.1713000 36.7993000 47.7861000 36.5123000 1098 70.1355000 78.5809000 63.7867000 45.8753000 53.6812000 42.4309000 1099 80.9258000 86.5108000 64.2067000 57.9796000 67.3462000 44.9345000 1100 70.1577000 71.6101000 49.9016000 39.2660000 44.8146000 26.7436000 1101 80.8224000 74.6942000 49.4010000 47.7595000 51.6725000 27.1853000 1102 89.0898000 100.000000 65.2472000 74.4100000 90.6450000 49.8324000 1103 92.2033000 100.000000 74.6683000 79.3953000 92.9357000 62.6987000 1104 81.1905000 62.6676000 61.6059000 44.3725000 40.7826000 37.4730000 1105 100.000000 68.1506000 65.7232000 63.3656000 54.2643000 43.9808000 1106 100.000000 81.2887000 84.5015000 75.9486000 70.9571000 74.3038000 1107 16.1081000 4.91335000 24.9686000 1.97117000 1.11506000 4.91282000 1108 13.3866000 8.26407000 29.2947000 2.19318000 1.38522000 6.75492000 1109 13.4710000 0.00000000 35.5912000 2.54861000 1.09707000 9.91931000 1110 15.5555000 38.1401000 43.7668000 8.06205000 10.2015000 16.7572000 1111 16.0075000 49.0804000 51.7320000 12.4178000 16.8360000 24.3934000 1112 12.4652000 46.4647000 18.8419000 7.65822000 13.5875000 5.01979000 1113 37.2122000 48.9033000 18.8505000 12.5387000 17.2329000 5.46872000 1114 80.6290000 58.3312000 19.3146000 36.6118000 34.7054000 7.70326000 1115 90.0943000 100.000000 17.4766000 68.7738000 88.4846000 15.8933000 1116 14.3059000 36.2252000 0.00000000 4.60361000 8.10249000 1.32122000 1117 14.2473000 36.3632000 90.4886000 19.0139000 13.9155000 77.0928000 1118 18.6055000 41.4641000 100.000000 24.3650000 18.0862000 96.8097000 1119 30.5801000 17.6810000 55.7370000 8.97298000 5.45902000 26.2212000 1120 40.2410000 16.2781000 61.2442000 12.3748000 6.88844000 32.2056000 1121 62.7874000 14.0071000 85.2682000 27.7209000 13.7632000 67.1343000 1122 100.000000 15.5023000 91.3100000 56.6695000 28.6254000 79.5071000 1123 100.000000 74.9979000 91.4822000 74.6711000 64.5298000 85.8173000 1124 76.7516000 57.4359000 43.3202000 35.8823000 33.5360000 19.4672000 1125 80.7876000 69.4925000 50.4696000 45.1610000 46.2266000 27.2051000 1126 86.1657000 74.1339000 62.9686000 54.0325000 54.1446000 41.1218000 1127 92.8467000 76.7977000 75.0316000 63.9871000 61.1459000 57.9092000 1128 46.9118000 43.0601000 35.4700000 15.1125000 15.8214000 12.0297000 1129 53.5318000 50.5861000 38.4022000 20.2864000 21.8567000 14.6862000 1130 52.7221000 83.9738000 45.9805000 37.2048000 54.5520000 25.4745000 1131 0.00000000 29.2733000 24.3576000 3.36443000 5.33312000 5.42582000 1132 8.01209000 28.7334000 30.7829000 4.09050000 5.51114000 8.14960000 1133 0.00000000 69.8975000 54.9284000 20.7035000 33.8284000 30.2734000 1134 0.00000000 88.9016000 54.9051000 32.1162000 56.6618000 34.0558000 1135 8.50134000 93.3296000 73.9569000 40.0306000 64.9611000 58.3363000 1136 20.0730000 100.000000 92.4055000 52.2142000 78.2562000 91.4263000 1137 23.3598000 80.3733000 72.8006000 32.4778000 48.1127000 53.8272000 1138 43.8085000 80.7717000 79.5020000 39.4517000 51.8481000 64.2567000 1139 62.9684000 100.000000 79.6888000 61.1700000 83.3690000 69.4939000 1140 8.66150000 19.5782000 44.3881000 4.46072000 3.64248000 16.1458000 1141 11.1632000 26.8677000 59.2655000 8.18445000 6.68745000 30.1897000 1142 9.14828000 34.5768000 70.5946000 12.1023000 10.4885000 44.5730000 1143 15.1061000 46.6791000 79.2863000 18.0982000 17.8941000 58.4859000 1144 46.9462000 64.9060000 84.9947000 33.7394000 36.0607000 70.6449000 1145 53.1838000 91.5960000 85.3227000 51.9857000 68.8386000 76.5810000 1146 70.7647000 100.000000 93.2599000 70.0866000 87.4348000 93.9236000 1147 51.9836000 12.5766000 16.0156000 10.5202000 6.14778000 2.71614000 1148 55.6024000 8.20334000 30.8611000 12.7865000 6.82663000 7.98268000 1149 70.8535000 0.00000000 30.3078000 20.3316000 10.3273000 7.99661000 1150 88.5301000 0.00000000 29.0694000 32.5296000 16.6295000 7.99726000 1151 89.6300000 0.00000000 43.5450000 35.0458000 17.7384000 16.6272000 1152 18.7918000 67.1439000 9.71696000 15.9901000 29.9009000 5.83581000 1153 18.8474000 77.4165000 0.00000000 21.2792000 40.7466000 6.74285000 1154 24.1319000 88.9182000 0.00000000 29.3525000 55.8012000 9.22300000 1155 48.2245000 100.000000 15.8161000 44.3090000 75.8790000 14.3469000 1156 33.3381000 61.4980000 0.00000000 15.7727000 25.9836000 4.18382000 1157 31.8922000 67.5511000 10.8672000 18.4270000 31.4464000 6.17909000 1158 30.1442000 92.1580000 44.3987000 35.7477000 62.1825000 25.8034000 1159 20.7212000 76.3175000 46.2672000 24.1534000 40.9124000 23.7568000 1160 18.2768000 82.6916000 100.000000 42.4578000 54.3303000 102.851000 1161 19.9218000 94.1177000 100.000000 50.5577000 70.2323000 105.494000 1162 5.84042000 39.1408000 53.8154000 9.26441000 10.9900000 25.3844000 1163 0.00000000 52.2326000 62.9447000 14.8015000 19.3822000 36.4511000 1164 13.8733000 74.9096000 77.4254000 29.4647000 41.6816000 59.5747000 1165 0.00000000 37.4330000 55.7722000 9.03051000 10.2248000 27.1738000 1166 0.00000000 44.9850000 80.1707000 17.0462000 16.5745000 59.6989000 1167 0.00000000 44.7976000 88.5792000 19.7507000 17.5699000 74.2093000 1168 0.00000000 86.8744000 89.1472000 39.8999000 57.5509000 81.9098000 1169 6.21849000 8.61471000 3.90712000 0.55219800 0.70365000 0.39231800 1170 0.00000000 6.25146000 11.8957000 0.42280900 0.46394800 1.31784000 1171 10.2646000 11.7370000 15.1189000 1.25185000 1.29061000 2.06408000 1172 5.40965000 15.9365000 11.0122000 1.16903000 1.73702000 1.37682000 1173 0.00000000 14.9857000 8.00426000 0.82973900 1.45155000 0.91788100 1174 46.9557000 23.5990000 67.4618000 16.7822000 10.2042000 40.1271000 1175 86.1679000 38.9164000 82.2412000 45.5146000 28.7836000 63.9413000 1176 86.9187000 46.9772000 100.000000 54.7545000 36.0779000 98.6816000 1177 56.9850000 26.9910000 57.0306000 18.9935000 12.3415000 28.3421000 1178 82.3030000 34.6819000 71.0982000 38.4398000 24.0859000 46.4992000 1179 100.000000 38.1690000 70.9401000 53.8774000 33.2077000 47.2296000 1180 34.7819000 0.00000000 65.4084000 11.0452000 4.89113000 36.8185000 1181 33.7955000 11.4601000 92.8419000 19.5457000 8.97615000 80.6260000 1182 35.7141000 0.00000000 88.7606000 18.0929000 7.73699000 72.7326000 1183 36.2174000 28.5666000 86.9030000 19.9506000 12.2907000 70.1452000 1184 36.9886000 33.7469000 100.000000 26.0275000 16.2798000 96.3735000 1185 48.5285000 48.0913000 100.000000 33.3597000 25.5605000 97.7785000 1186 49.3603000 19.8507000 33.5428000 11.4137000 7.42588000 9.53703000 1187 56.6308000 54.9433000 33.8529000 22.6590000 25.4301000 12.5869000 1188 66.1361000 55.7461000 34.4758000 27.7401000 28.4910000 13.2509000 1189 29.1849000 17.8133000 7.59399000 3.93194000 3.43007000 1.08789000 1190 29.3924000 17.5187000 0.00000000 3.82410000 3.34610000 0.44438200 1191 34.8154000 15.5271000 8.02271000 4.97453000 3.65592000 1.12723000 1192 61.6624000 50.4960000 55.2180000 26.5632000 24.7485000 28.4992000 1193 76.6921000 55.0140000 63.3504000 38.5527000 33.1110000 38.3277000 1194 9.78419000 5.23437000 7.04985000 0.65714500 0.54676100 0.64232400 1195 0.00000000 8.97754000 6.42719000 0.40064700 0.64700600 0.60936500 1196 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1197 7.75497000 0.00000000 6.48501000 0.38184400 0.18560400 0.52729100 1198 28.4028000 65.8115000 23.1415000 17.4616000 29.6462000 8.94027000 1199 27.8454000 81.3325000 57.1154000 30.1653000 48.2191000 34.7651000 1200 65.9667000 100.000000 54.7497000 56.6552000 81.7461000 37.4521000 1201 32.9719000 51.6303000 31.5676000 13.3333000 18.8839000 10.6275000 1202 38.5182000 60.2154000 41.3570000 19.1146000 26.5999000 17.6150000 1203 76.0908000 82.0928000 45.3302000 48.2669000 58.4906000 25.1441000 1204 65.1615000 42.7659000 20.9400000 21.8866000 19.3350000 5.99507000 1205 89.0298000 46.3110000 26.0458000 39.1744000 29.7163000 8.89057000 1206 71.6522000 44.2790000 28.6578000 26.5615000 22.3063000 9.22319000 1207 82.2947000 51.6525000 29.8412000 36.0580000 30.6307000 10.8673000 1208 82.3585000 69.6300000 34.0983000 44.1334000 46.0566000 15.5699000 1209 84.2013000 82.4502000 34.1198000 52.7682000 61.3079000 18.0702000 1210 48.7594000 33.7861000 0.00000000 11.7014000 10.9912000 1.50498000 1211 48.6858000 41.0951000 17.8820000 13.8495000 14.5515000 4.62214000 1212 60.0189000 46.8811000 19.9484000 20.4032000 20.3397000 5.96813000 1213 62.7182000 60.3933000 54.3736000 30.6733000 32.4321000 28.9355000 1214 70.7552000 67.6341000 55.3304000 38.5770000 41.3632000 31.1856000 1215 74.7479000 74.6894000 60.2722000 45.7057000 50.3734000 37.7513000 1216 77.7476000 36.0081000 27.2785000 28.2614000 20.1035000 8.11324000 1217 92.2330000 65.4316000 30.5083000 49.4857000 45.8279000 13.4072000 1218 47.0506000 88.3545000 14.2420000 35.0704000 58.1317000 11.0660000 1219 45.9830000 92.8235000 90.2714000 51.8718000 69.9134000 85.7605000 1220 51.1949000 94.6338000 100.000000 58.8822000 75.1019000 105.995000 1221 12.0954000 16.8591000 17.5620000 1.89350000 2.20373000 2.78661000 1222 4.45090000 14.0313000 15.2098000 1.12946000 1.46700000 2.12469000 1223 0.00000000 16.4243000 19.9692000 1.41929000 1.88537000 3.41248000 1224 0.00000000 22.4366000 21.8700000 2.18168000 3.23072000 4.22002000 1225 28.7033000 23.7231000 30.1368000 5.73830000 5.24116000 7.70263000 1226 75.4983000 21.3536000 33.4408000 24.8629000 14.6184000 10.1625000 1227 89.1524000 56.2330000 83.4802000 53.6608000 40.9489000 67.9406000 1228 45.6465000 28.5473000 63.8434000 16.2171000 11.1166000 35.8462000 1229 57.5322000 29.0555000 84.3764000 26.7199000 16.0011000 66.0755000 1230 24.6392000 11.9873000 68.2931000 10.1709000 5.07036000 40.5606000 1231 49.7401000 0.00000000 66.8558000 16.0288000 7.42082000 38.8554000 1232 70.0184000 10.2731000 92.7464000 34.0720000 16.3645000 81.1008000 1233 63.3469000 0.00000000 88.3676000 28.4411000 13.0886000 72.4995000 1234 79.6514000 28.0776000 92.6145000 42.1145000 23.3637000 81.7710000 1235 90.6602000 28.0707000 92.3425000 50.3685000 27.6296000 81.6313000 1236 39.9296000 8.00252000 39.8871000 8.10105000 4.28371000 12.8954000 1237 81.5219000 23.1295000 48.1328000 31.1025000 17.9454000 20.4779000 1238 82.7482000 27.6860000 58.4586000 34.5259000 20.4810000 30.5957000 1239 24.3736000 12.5509000 18.6426000 3.03707000 2.27219000 3.02499000 1240 23.2980000 12.0565000 22.0037000 3.02804000 2.19614000 4.01925000 1241 86.8587000 11.8226000 48.4655000 34.0503000 17.8338000 20.5804000 1242 88.7269000 0.00000000 50.9527000 35.4707000 17.8242000 22.6651000 1243 89.3335000 27.7050000 100.000000 52.2119000 28.1462000 97.2849000 1244 34.1032000 0.00000000 39.0210000 6.20328000 2.93542000 12.1706000 1245 54.8910000 38.6547000 39.2619000 17.5378000 15.3389000 14.1228000 1246 54.6146000 48.0655000 41.0339000 20.2522000 20.5835000 16.1716000 1247 61.6335000 49.9563000 46.5448000 24.8878000 23.7895000 20.6351000 1248 21.6526000 12.4103000 0.00000000 2.09442000 1.83272000 0.24340300 1249 23.9937000 14.5471000 8.88008000 2.75141000 2.38722000 1.10773000 1250 48.2225000 64.4601000 18.2408000 22.0086000 31.0938000 7.48024000 1251 53.1810000 76.3329000 18.6114000 30.0477000 44.2820000 9.70109000 1252 65.4985000 100.000000 17.5432000 52.1665000 79.9212000 15.1325000 1253 73.6836000 100.000000 48.4144000 60.0733000 83.6358000 31.8656000 1254 28.3106000 26.9613000 0.00000000 4.79942000 5.61046000 0.83000400 1255 36.6013000 44.5077000 0.00000000 10.5081000 14.2651000 2.19959000 1256 49.9861000 60.5364000 9.38279000 20.6020000 27.8458000 5.14909000 1257 59.5560000 78.1502000 12.2012000 33.6603000 47.7376000 8.74477000 1258 73.4325000 80.7108000 0.00000000 42.5807000 54.6481000 8.30399000 1259 100.000000 82.5798000 17.7155000 64.9080000 67.8325000 12.1728000 1260 100.000000 91.2616000 16.1382000 70.7020000 79.5397000 13.7381000 1261 100.000000 91.0567000 40.8859000 72.6632000 80.0882000 24.7947000 1262 28.4569000 20.0539000 16.5724000 4.32780000 3.94907000 2.74944000 1263 30.1631000 17.5013000 74.8778000 13.3736000 7.18128000 49.9337000 1264 31.6125000 18.0666000 100.000000 22.3863000 10.9110000 95.5292000 1265 61.0350000 15.7113000 100.000000 32.4491000 15.7747000 95.9380000 1266 42.2847000 21.3103000 48.9432000 11.1878000 7.32413000 20.1605000 1267 61.2782000 27.9622000 53.2394000 20.4604000 13.4110000 24.7126000 1268 47.6268000 36.0519000 35.4795000 13.6351000 12.4870000 11.4694000 1269 47.6579000 36.3065000 44.1306000 14.7913000 13.0409000 17.2224000 1270 68.4423000 38.3172000 74.7467000 31.2738000 21.4857000 51.5587000 1271 74.8342000 74.3733000 80.7898000 50.9202000 52.1862000 65.7877000 1272 76.0079000 80.8805000 82.1498000 55.8978000 60.3322000 69.3312000 1273 77.8441000 91.4833000 84.8900000 65.0917000 75.4916000 76.4218000 1274 92.1821000 91.5753000 85.3375000 76.1688000 81.2850000 77.7355000 1275 31.4953000 24.3285000 23.7655000 5.89119000 5.50164000 5.10960000 1276 34.7662000 58.1587000 32.8895000 16.3181000 24.0191000 12.1357000 1277 38.6743000 79.5959000 42.6887000 29.2029000 46.4269000 21.8484000 1278 69.3804000 85.7702000 77.1577000 53.4166000 63.8693000 62.1843000 1279 78.3454000 94.1934000 80.3221000 65.9717000 79.0793000 69.4288000 1280 50.0341000 55.4566000 63.2951000 24.8932000 26.3161000 37.6703000 1281 59.4604000 58.7360000 67.1171000 31.1128000 31.3265000 43.0073000 1282 68.5323000 72.7952000 83.1501000 46.9901000 48.8009000 69.2485000 1283 81.0670000 74.2524000 94.6407000 59.8500000 56.1387000 91.1587000 1284 5.47898000 3.59312000 22.1440000 1.00510000 0.58165500 3.86053000 1285 0.00000000 20.9695000 52.8213000 5.64535000 4.32968000 23.3459000 1286 9.37426000 53.5662000 68.2807000 16.9112000 21.0278000 43.2690000 1287 0.00000000 58.5062000 73.3731000 19.7547000 25.1447000 50.8801000 1288 0.00000000 60.7006000 88.6362000 25.4116000 28.8603000 76.1944000 1289 13.0392000 66.7132000 89.0963000 28.9193000 34.6747000 77.9792000 1290 17.6819000 73.6277000 100.000000 37.0602000 43.6359000 101.072000 1291 56.9682000 19.8564000 42.2064000 15.5804000 9.45665000 15.0878000 1292 58.5273000 19.7954000 79.5950000 24.3748000 13.0462000 57.7109000 1293 58.0765000 43.5035000 83.3707000 29.8639000 22.4425000 65.4364000 1294 62.2019000 62.6474000 85.3262000 39.3472000 37.4263000 71.1905000 1295 38.3423000 37.7647000 57.9505000 14.5490000 13.1352000 29.6900000 1296 48.5117000 34.3440000 62.7312000 18.0660000 13.7104000 34.9342000 1297 49.4161000 42.9379000 65.3176000 21.0603000 18.2526000 38.7583000 1298 65.3908000 42.6865000 64.6036000 28.1030000 21.8014000 38.1987000 1299 72.2986000 74.5792000 100.000000 56.3517000 54.3573000 102.125000 1300 76.1529000 83.1282000 100.000000 63.8800000 65.7875000 103.935000 1301 79.5588000 89.4187000 100.000000 70.3879000 75.3927000 105.445000 1302 47.6664000 20.7840000 19.0633000 9.78226000 6.87032000 3.67379000 1303 66.2303000 29.1616000 18.7365000 19.3409000 13.5819000 4.37450000 1304 71.6753000 53.7030000 17.8180000 28.8941000 28.1080000 6.42912000 1305 87.4461000 54.6842000 14.9466000 40.0783000 34.4237000 6.37578000 1306 92.0416000 70.3557000 21.1965000 51.0342000 50.2849000 10.5126000 1307 42.6154000 39.8216000 12.4522000 11.2305000 12.7471000 3.21778000 1308 53.2348000 40.6053000 9.21974000 15.1771000 15.0866000 2.94981000 1309 71.8413000 44.0830000 36.5538000 27.4011000 22.5670000 13.3170000 1310 93.5762000 63.0799000 43.5856000 51.0659000 44.8766000 21.0508000 1311 84.9239000 34.7885000 23.6755000 32.8595000 22.1141000 6.86347000 1312 92.6311000 34.0312000 74.2748000 47.2821000 28.3449000 51.3498000 1313 100.000000 41.2160000 82.4167000 57.9563000 36.0495000 64.9813000 1314 27.6828000 12.0265000 16.3678000 3.46328000 2.45262000 2.45638000 1315 29.5453000 5.78543000 16.0162000 3.49387000 2.00428000 2.28663000 1316 54.7107000 0.00000000 15.1644000 11.0951000 5.67911000 2.40277000 1317 73.6415000 8.84342000 20.2819000 21.5997000 11.5078000 4.29926000 1318 42.9813000 14.0802000 13.7207000 7.31259000 4.66731000 2.10460000 1319 59.3698000 23.3508000 7.43609000 14.5462000 9.85014000 1.74932000 1320 73.7151000 30.7822000 58.3009000 28.8914000 18.3693000 30.3173000 1321 78.1718000 35.4663000 87.5868000 40.7012000 24.9230000 72.7195000 1322 82.3066000 43.6898000 91.0322000 46.8570000 30.9781000 79.9485000 1323 43.9325000 23.8187000 38.7397000 10.5826000 7.65362000 12.6705000 1324 46.0637000 21.8612000 44.6021000 11.8228000 7.82743000 16.7283000 1325 61.3804000 45.4488000 46.9332000 23.4151000 20.9352000 20.4732000 1326 73.1189000 47.8216000 55.1912000 32.1014000 26.3185000 28.4841000 1327 86.0610000 60.2791000 60.6794000 46.7530000 40.5066000 36.2460000 1328 94.2427000 83.3163000 69.5577000 67.6731000 69.0865000 51.5564000 1329 94.8081000 87.3224000 82.2077000 74.4206000 76.0699000 71.4887000 1330 16.1391000 20.7290000 23.3341000 2.98937000 3.32859000 4.69142000 1331 21.2436000 26.6545000 28.9142000 4.82233000 5.41010000 7.22074000 1332 18.6473000 45.7253000 61.4401000 13.5686000 15.6690000 34.0600000 1333 33.5376000 44.9650000 68.1208000 17.4953000 17.1834000 42.2886000 1334 39.1616000 50.0827000 68.2730000 20.5691000 21.1231000 43.0848000 1335 55.0522000 59.8417000 71.0753000 30.5685000 31.6047000 48.3332000 1336 66.0892000 70.0730000 86.6827000 45.3718000 45.7186000 74.8654000 1337 14.9983000 24.0167000 20.2775000 3.10323000 4.02555000 3.82790000 1338 14.1573000 67.5038000 26.5623000 16.5423000 30.3447000 10.4108000 1339 11.5914000 81.5604000 39.4092000 25.3941000 46.2964000 19.7790000 1340 29.2068000 82.6424000 64.6058000 32.8543000 50.6365000 43.5158000 1341 43.0839000 84.1669000 73.9806000 39.7613000 55.3713000 56.5341000 1342 53.5875000 85.0363000 84.7639000 47.4405000 59.7952000 74.1042000 1343 5.70478000 11.0103000 8.01507000 0.73682200 0.98362800 0.83375100 1344 13.1083000 7.79897000 10.8347000 1.09445000 0.90932000 1.19362000 1345 11.1082000 10.4091000 3.61812000 0.91970900 1.03479000 0.41553200 1346 29.2941000 11.3258000 9.31653000 3.47727000 2.42169000 1.13561000 1347 80.4179000 8.93557000 10.0713000 25.6826000 13.6697000 2.24468000 1348 86.7356000 76.5601000 32.9123000 51.0360000 55.1719000 16.3313000 1349 45.8437000 52.3939000 22.4714000 16.5391000 21.0141000 7.09543000 1350 44.8688000 59.3205000 30.2274000 19.4445000 26.3604000 11.0994000 1351 50.7093000 65.1563000 29.1731000 24.0116000 32.5162000 11.5581000 1352 27.4577000 38.9951000 20.3976000 7.65033000 10.5575000 4.88450000 1353 31.3952000 39.3061000 32.0995000 9.40934000 11.4734000 9.67147000 1354 32.8126000 39.0582000 38.1193000 10.3121000 11.7738000 13.0874000 1355 83.5392000 44.6425000 43.9350000 36.3751000 27.3218000 18.6960000 1356 59.7397000 28.4632000 24.3258000 16.2385000 11.7681000 5.97807000 1357 66.9395000 27.2186000 23.9976000 19.7306000 13.2718000 5.96466000 1358 73.9858000 46.8567000 21.4640000 28.2418000 24.3603000 6.79504000 1359 74.1863000 57.0638000 34.8454000 33.0315000 31.9695000 13.8491000 1360 84.1007000 63.2202000 68.2527000 48.2908000 42.9877000 45.8182000 1361 86.8571000 70.1169000 76.5773000 55.9264000 51.5612000 58.7936000 1362 100.000000 87.0409000 84.6026000 79.7083000 78.4236000 75.7214000 1363 42.4338000 44.9597000 32.1543000 13.8224000 15.9911000 10.3393000 1364 42.0974000 86.6366000 30.6751000 33.3218000 55.3694000 16.1796000 1365 76.2533000 94.3963000 31.9685000 55.2352000 74.8673000 19.4260000 1366 49.5900000 44.2583000 11.5960000 14.7897000 16.3407000 3.57413000 1367 61.8695000 59.3443000 9.50092000 25.3411000 29.5512000 5.24466000 1368 65.8303000 86.5864000 27.2535000 43.0103000 60.3487000 15.0928000 1369 78.5262000 93.3011000 59.6380000 60.1058000 75.6815000 41.1774000 1370 15.5448000 28.2763000 7.55543000 3.30472000 5.13952000 1.44625000 1371 14.4305000 36.6435000 9.72279000 4.88146000 8.36435000 2.26537000 1372 33.6747000 36.4598000 69.9339000 15.8054000 13.0234000 43.9732000 1373 41.7450000 40.7213000 77.2351000 21.0017000 16.9884000 54.9627000 1374 69.3497000 49.4366000 85.3824000 38.1816000 29.3144000 69.7846000 1375 81.1031000 52.9962000 100.000000 52.4112000 37.8265000 99.1425000 1376 41.5273000 29.6884000 51.9093000 12.6850000 9.86215000 23.1958000 1377 40.8417000 34.6378000 52.7922000 13.5884000 11.7237000 24.3275000 1378 41.5396000 46.7373000 39.2272000 14.8543000 17.2163000 14.6038000 1379 54.6401000 55.8848000 40.4546000 22.9070000 25.9970000 16.6844000 1380 69.7131000 65.8226000 40.6779000 34.7661000 38.3806000 18.6001000 1381 91.5257000 66.7625000 51.7669000 52.3184000 47.8986000 28.3189000 1382 48.8215000 16.0965000 65.6696000 16.1949000 8.71856000 37.6086000 1383 86.3267000 12.2102000 81.1794000 41.3132000 20.7329000 60.8587000 1384 80.5719000 0.00000000 78.6329000 35.7896000 17.2418000 56.3984000 1385 12.2897000 17.1945000 10.4307000 1.66382000 2.16405000 1.34304000 1386 9.96195000 22.0634000 0.00000000 1.83752000 3.06504000 0.49473900 1387 9.16435000 20.5966000 5.47726000 1.69187000 2.72039000 0.85047300 1388 86.9588000 27.1578000 6.54611000 32.2918000 19.8208000 2.64269000 1389 91.4461000 37.2889000 33.4512000 39.4199000 26.2204000 11.6405000 1390 90.7313000 69.3800000 48.0329000 52.3226000 49.8813000 25.4400000 1391 91.7477000 81.3640000 57.8261000 61.6482000 64.4648000 36.9852000 1392 93.5091000 89.4717000 58.1151000 68.5555000 75.9696000 39.1470000 1393 35.3992000 35.0563000 23.1779000 8.63956000 9.71407000 5.57082000 1394 36.3984000 75.8025000 26.2601000 24.6409000 40.9905000 11.9169000 1395 44.8846000 82.6497000 88.6240000 43.9535000 55.5621000 80.3488000 1396 57.9168000 89.4443000 94.2199000 55.6834000 68.1012000 92.8463000 1397 18.4788000 28.0494000 71.1040000 11.8358000 8.52962000 44.9060000 1398 12.9745000 23.2851000 72.5330000 10.9638000 6.99181000 46.6451000 1399 7.98665000 28.7415000 81.6832000 14.1165000 9.52366000 60.9544000 1400 0.00000000 71.5038000 85.9720000 29.6079000 38.7157000 73.0842000 1401 14.5168000 84.1741000 87.6722000 38.3627000 54.1661000 78.6411000 1402 6.79852000 37.7744000 34.8538000 6.24680000 9.26576000 10.8827000 1403 8.05462000 44.2943000 37.4531000 8.28653000 12.7877000 12.9780000 1404 19.5589000 61.8874000 62.0279000 19.6874000 27.5364000 36.7000000 1405 58.6920000 83.1864000 67.3383000 43.5061000 56.5661000 47.5082000 1406 63.1292000 83.9042000 78.5207000 49.1771000 59.8235000 63.7352000 1407 70.7388000 84.3791000 82.4290000 54.9084000 63.0961000 70.3817000 1408 78.5359000 86.1154000 89.0237000 63.2403000 68.8346000 82.6304000 1409 15.0736000 16.6339000 30.2953000 3.00673000 2.64546000 7.42046000 1410 22.2491000 16.4154000 48.1125000 6.05000000 3.92977000 19.0754000 1411 29.1724000 23.7265000 48.0556000 8.04205000 6.17399000 19.3560000 1412 28.2190000 23.3820000 65.5002000 11.2417000 7.35939000 37.3983000 1413 26.3796000 29.2310000 92.7169000 20.0173000 12.2525000 80.9898000 1414 18.6862000 100.000000 51.4074000 41.0596000 73.7743000 33.5777000 1415 25.3648000 100.000000 67.9409000 45.4796000 75.6529000 51.8648000 1416 36.2559000 100.000000 75.5050000 49.7867000 77.6418000 62.5407000 1417 19.5517000 29.2219000 48.8875000 7.47107000 7.11286000 20.2677000 1418 22.2813000 33.1303000 69.6855000 12.8885000 10.4819000 43.3026000 1419 23.2780000 34.9912000 81.9158000 16.9081000 12.7200000 61.8088000 1420 36.7996000 63.5633000 82.6867000 29.2707000 32.9356000 66.3412000 1421 90.9346000 25.8751000 15.7168000 35.5755000 21.1889000 4.23040000 1422 90.8045000 28.8327000 29.7815000 36.8556000 22.4406000 9.21693000 1423 71.9860000 39.0822000 40.4602000 26.6455000 20.1705000 15.3670000 1424 81.0756000 41.4382000 47.1959000 34.1931000 24.8356000 20.8718000 1425 81.1394000 49.8747000 49.1880000 37.0483000 29.9709000 23.3777000 1426 22.3504000 10.0563000 7.31042000 2.16318000 1.63892000 0.80217200 1427 22.5233000 2.60950000 7.77045000 1.90951000 1.07745000 0.76121500 1428 69.9260000 9.19137000 37.2834000 20.8173000 10.9622000 11.8629000 1429 71.4693000 24.0855000 77.4180000 31.1667000 17.4101000 54.7898000 1430 90.7032000 25.7118000 83.8173000 47.0768000 25.7287000 65.9232000 1431 11.4262000 84.4267000 12.1347000 25.1281000 49.1054000 9.44618000 1432 40.1129000 83.2315000 18.1311000 29.6108000 50.2444000 10.7465000 1433 20.3088000 34.6841000 14.8317000 5.27813000 7.91524000 3.06831000 1434 35.5515000 43.9387000 9.30729000 10.2413000 13.8693000 2.98739000 1435 42.4630000 52.3424000 9.17024000 14.8289000 20.1733000 3.94274000 1436 48.4697000 63.9465000 0.00000000 21.3620000 30.4710000 4.75553000 1437 63.1159000 71.6551000 48.4864000 35.1765000 42.7678000 25.3504000 1438 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1439 22.8261000 15.6381000 31.6159000 3.98199000 3.00300000 8.07929000 1440 26.1205000 26.2239000 30.2085000 5.62787000 5.71462000 7.83370000 1441 27.2255000 31.7052000 47.5401000 8.88005000 8.52882000 19.3392000 1442 26.0353000 52.4561000 92.0596000 25.7211000 24.1382000 81.7094000 1443 26.4828000 62.7418000 92.2191000 29.9344000 32.3552000 83.3804000 1444 7.36203000 16.2522000 19.9158000 1.66492000 1.98953000 3.40390000 1445 15.5076000 20.2009000 16.5582000 2.48586000 3.02377000 2.66451000 1446 20.0328000 34.5892000 25.4692000 5.82828000 8.09972000 6.24840000 1447 27.7986000 33.9942000 24.9905000 6.89012000 8.46735000 6.08109000 1448 53.9634000 54.0694000 47.6718000 22.9723000 24.9057000 21.8665000 1449 64.8344000 56.7314000 58.7307000 31.1448000 30.3776000 32.9756000 1450 90.0788000 59.3607000 78.9908000 54.2561000 43.2653000 61.0113000 1451 56.5321000 27.0779000 67.9404000 21.2265000 13.2330000 41.0954000 1452 62.2763000 46.2416000 69.7016000 28.7368000 23.4928000 45.0006000 1453 64.8274000 53.4092000 74.5520000 33.7179000 29.4184000 52.6761000 1454 67.9755000 58.9641000 74.8414000 37.6579000 34.6055000 53.8938000 1455 84.4309000 93.1776000 76.5079000 68.4292000 79.3532000 63.3935000 1456 67.4511000 60.6530000 48.6125000 32.3143000 33.5567000 23.8297000 1457 73.6596000 68.5545000 49.1764000 39.7181000 42.7486000 25.6929000 1458 56.0521000 41.2202000 30.6749000 17.7622000 16.5133000 9.50032000 1459 56.6519000 48.2626000 32.3917000 20.2200000 20.7730000 11.0465000 1460 75.8389000 69.3056000 36.3013000 39.7167000 43.5088000 16.5607000 1461 20.3699000 18.7944000 8.48839000 2.60830000 2.89252000 1.16216000 1462 26.3196000 26.8084000 6.40229000 4.50765000 5.41408000 1.31049000 1463 47.3892000 29.1270000 11.7999000 10.5661000 9.08252000 2.43042000 1464 55.2922000 33.6372000 13.9529000 14.6065000 12.4081000 3.26147000 1465 78.7857000 33.6708000 7.53008000 27.4998000 19.0884000 2.86119000 1466 43.6063000 0.00000000 22.2183000 7.31073000 3.68516000 4.15227000 1467 45.6353000 11.8770000 28.6016000 8.92431000 5.16255000 6.81852000 1468 51.6328000 100.000000 58.6045000 50.6785000 78.5771000 41.1125000 1469 15.5833000 39.9192000 57.2296000 10.7777000 11.9807000 28.9107000 1470 14.3416000 64.0736000 58.7330000 19.3974000 28.9096000 33.3132000 1471 11.6555000 72.0954000 62.9351000 24.0194000 37.0396000 39.3619000 1472 0.00000000 90.2660000 65.0472000 35.2121000 59.4355000 45.6277000 1473 20.1061000 88.2304000 70.7593000 36.5786000 57.8626000 52.6514000 1474 48.8493000 68.4428000 62.2132000 29.8576000 37.2937000 38.2624000 1475 47.9100000 69.6311000 68.5149000 31.5897000 38.8972000 46.2504000 1476 56.1003000 73.6114000 84.3502000 41.5328000 46.5961000 71.1547000 1477 64.3337000 76.9748000 84.6565000 47.4999000 52.4564000 72.4993000 1478 31.9514000 31.8352000 37.8915000 8.52972000 8.53794000 12.4155000 1479 45.5724000 30.4696000 44.9817000 13.0106000 10.3647000 17.4445000 1480 91.1400000 38.1907000 44.4193000 40.7197000 27.0476000 18.7769000 1481 100.000000 39.5460000 48.5716000 49.5106000 31.9937000 22.5882000 1482 61.1638000 11.5615000 4.82384000 14.2250000 7.99659000 1.15183000 1483 71.9842000 13.1864000 8.37160000 20.3637000 11.3170000 1.83805000 1484 74.7739000 13.2970000 74.8462000 31.3615000 15.9305000 50.6284000 1485 74.7161000 18.7490000 90.6534000 36.8621000 18.8939000 77.4248000 1486 60.3077000 11.4774000 60.8255000 19.6568000 10.1127000 31.9708000 1487 78.7449000 20.4013000 67.9694000 32.8373000 17.8801000 41.4185000 1488 20.7242000 27.0174000 19.1502000 4.13218000 5.21578000 3.67637000 1489 27.8700000 24.7492000 17.5960000 4.85826000 5.09781000 3.19805000 1490 28.8303000 31.3138000 16.5448000 6.06609000 7.32076000 3.30206000 1491 76.7587000 29.6977000 43.6212000 28.1456000 17.9875000 17.0949000 1492 84.1772000 34.6939000 45.7299000 34.6404000 22.7296000 19.2719000 1493 46.2285000 19.7718000 22.9519000 9.39184000 6.47245000 4.82845000 1494 47.7818000 26.3839000 25.6704000 10.9955000 8.56120000 6.14410000 1495 54.2373000 48.2102000 26.2848000 18.6206000 19.9851000 8.19015000 1496 67.4854000 75.7271000 34.7291000 37.9091000 47.6795000 16.5587000 1497 78.1588000 77.0661000 38.3664000 45.6874000 52.7766000 19.2929000 1498 93.2400000 91.8729000 40.5746000 67.1527000 78.1278000 24.4950000 1499 37.9648000 37.4881000 18.3596000 9.56497000 11.0268000 4.29449000 1500 48.8058000 51.9317000 29.7454000 17.9857000 21.4565000 10.0035000 1501 52.7388000 59.8451000 31.3869000 22.6841000 28.3409000 11.8707000 1502 11.2016000 13.7831000 24.0762000 1.95229000 1.80625000 4.71669000 1503 6.81722000 11.2705000 25.2235000 1.60511000 1.36209000 5.07621000 1504 32.5108000 19.9024000 36.6243000 6.72506000 4.97852000 11.0531000 1505 38.2064000 17.1133000 83.5060000 17.8634000 9.14044000 63.7308000 1506 37.7333000 45.3130000 84.6515000 23.4143000 19.8350000 67.4635000 1507 25.8361000 41.2183000 57.7862000 12.5942000 13.3958000 29.6709000 1508 30.2099000 65.0012000 74.1452000 25.8445000 32.4365000 53.0805000 1509 44.4063000 69.3557000 74.7653000 31.8965000 38.6580000 54.8669000 1510 40.3232000 35.0169000 34.7200000 10.9535000 10.7802000 10.8521000 1511 48.4003000 40.4347000 41.8162000 15.7243000 15.0185000 15.8784000 1512 53.6702000 42.3849000 47.2194000 19.0792000 17.4153000 20.2547000 1513 59.4915000 47.7713000 57.1666000 25.0008000 22.5898000 30.1440000 1514 27.5837000 17.5551000 19.5830000 4.05398000 3.40368000 3.45368000 1515 30.6644000 17.4862000 23.9425000 4.92422000 3.81107000 4.89827000 1516 39.7264000 14.0828000 44.8301000 9.08412000 5.26295000 16.5508000 1517 63.9526000 10.4047000 54.2491000 20.1140000 10.4041000 25.1193000 1518 68.1154000 10.0630000 80.2821000 28.7350000 14.0839000 58.7821000 1519 38.1439000 25.5098000 69.1966000 14.7309000 9.49427000 42.3626000 1520 46.0055000 28.0656000 91.5915000 24.4536000 14.2981000 78.9775000 1521 77.5631000 56.1758000 92.2776000 48.1299000 37.7127000 83.5694000 1522 86.9553000 79.1873000 94.6050000 67.0576000 64.0602000 92.2364000 1523 0.00000000 28.1703000 11.1111000 2.51986000 4.69832000 1.89322000 1524 7.49730000 27.1984000 14.6973000 2.76243000 4.57650000 2.52764000 1525 9.90411000 41.7539000 70.6417000 13.8597000 13.9149000 45.2055000 1526 12.3469000 53.8796000 79.0163000 20.1786000 22.5399000 58.8462000 1527 0.00000000 44.5321000 57.2856000 11.1599000 14.0113000 29.3403000 1528 8.53930000 50.5751000 57.9687000 13.5010000 17.9909000 30.7013000 1529 13.1564000 56.7810000 75.4234000 20.2861000 24.3376000 53.6863000 1530 35.5774000 73.8249000 79.2542000 32.9924000 42.5505000 62.4091000 1531 21.5411000 49.5948000 41.8635000 11.7320000 16.9069000 16.4861000 1532 28.8334000 61.3907000 57.3961000 19.9823000 27.4827000 31.5914000 1533 41.2576000 61.6228000 56.5258000 22.9731000 29.1927000 30.8651000 1534 37.6388000 53.0816000 50.5573000 17.4913000 21.4954000 23.9681000 1535 48.9828000 64.6771000 55.2490000 26.6830000 33.1549000 30.1461000 1536 54.2706000 67.5625000 64.2651000 32.0399000 37.7243000 40.6543000 1537 63.8259000 77.7992000 65.8132000 42.3860000 51.1451000 44.5956000 1538 69.3980000 89.1869000 74.0610000 54.8755000 68.1797000 58.3273000 1539 19.2716000 14.2320000 5.70639000 1.99635000 1.96921000 0.71032800 1540 36.2374000 8.91137000 27.5121000 5.86580000 3.34281000 6.15597000 1541 35.3162000 7.83841000 32.3417000 6.01318000 3.29374000 8.39555000 1542 52.1487000 23.4464000 86.2278000 24.1748000 13.3554000 68.9274000 1543 61.5037000 33.2843000 94.0480000 32.8105000 19.9096000 84.4093000 1544 24.9477000 10.8403000 37.4782000 4.58786000 2.72792000 11.2470000 1545 32.6046000 8.11753000 36.9466000 5.87262000 3.18324000 10.9447000 1546 37.0478000 9.02867000 63.7188000 11.5353000 5.64445000 34.8876000 1547 48.8443000 17.3013000 75.6447000 18.9100000 9.98270000 51.3180000 1548 47.8088000 38.9715000 80.9601000 23.7045000 17.6045000 60.8242000 1549 52.2581000 38.8341000 73.6321000 23.2283000 17.5572000 49.6055000 1550 24.6424000 34.9382000 42.1997000 8.30503000 9.28548000 15.4331000 1551 22.6021000 40.7114000 47.7977000 10.1598000 12.1533000 20.1843000 1552 24.3477000 42.6977000 54.4850000 12.1020000 13.7996000 26.4262000 1553 78.4130000 44.0932000 55.4566000 34.4888000 25.8960000 28.5413000 1554 90.9684000 59.3486000 55.7171000 49.2791000 41.3511000 31.0053000 1555 35.5326000 25.4452000 21.6869000 6.85604000 6.25031000 4.49713000 1556 39.5497000 24.7965000 24.3943000 8.01579000 6.68899000 5.45614000 1557 92.1327000 42.8169000 29.7802000 41.0340000 29.1533000 10.2917000 1558 100.000000 56.5296000 30.4249000 52.5994000 41.8011000 12.4268000 1559 92.8426000 53.2335000 34.3747000 45.3592000 36.2005000 13.7553000 1560 93.8993000 68.3292000 39.5973000 53.2776000 49.7342000 19.0967000 1561 39.3280000 23.0209000 0.00000000 6.83669000 5.82411000 0.76397000 1562 45.2376000 23.1757000 6.18349000 8.77815000 6.84413000 1.34007000 1563 49.7943000 24.5577000 13.3407000 10.7949000 8.14028000 2.51706000 1564 51.0606000 56.5887000 57.8255000 24.5574000 26.9204000 31.6922000 1565 58.1708000 64.6756000 61.9764000 31.8879000 35.6786000 37.5696000 1566 72.5150000 75.9989000 70.8181000 47.5291000 52.1151000 51.0458000 1567 84.4509000 79.6591000 83.1857000 61.4109000 62.0333000 71.1026000 1568 85.5943000 80.7350000 89.6584000 65.1220000 64.6641000 82.9028000 1569 27.1548000 7.68568000 29.9427000 4.03196000 2.28797000 7.13087000 1570 25.4098000 0.00000000 34.5143000 3.92807000 1.82174000 9.37917000 1571 68.1685000 20.6455000 34.2917000 20.4144000 12.1906000 10.3889000 1572 87.2068000 20.2456000 35.9024000 33.3662000 18.7814000 11.8901000 1573 92.6684000 25.1560000 63.9196000 43.1475000 24.2170000 37.0475000 1574 54.7154000 13.4637000 48.2574000 14.8957000 8.12984000 19.5410000 1575 55.4126000 90.4695000 71.5469000 48.0121000 66.0633000 54.7151000 1576 8.09240000 18.9609000 30.0613000 2.70009000 2.82897000 7.36142000 1577 0.00000000 16.7122000 42.0910000 3.52062000 2.76793000 14.3502000 1578 9.24701000 15.6852000 53.7416000 5.64270000 3.51332000 24.0614000 1579 12.6475000 52.2314000 82.9279000 20.8299000 21.8628000 65.0532000 1580 13.2083000 60.2718000 84.1442000 24.3603000 28.2259000 68.1597000 1581 45.1565000 61.2767000 91.1473000 33.6434000 33.3663000 81.3243000 1582 93.8643000 85.3299000 92.3482000 75.7451000 74.3700000 89.3262000 1583 21.1164000 26.9180000 12.7452000 3.88642000 5.09874000 2.18187000 1584 25.9570000 32.8505000 12.0782000 5.65639000 7.56718000 2.44538000 1585 76.5255000 40.8501000 11.7573000 27.7448000 21.6514000 3.94454000 1586 75.9028000 41.7506000 19.9604000 27.9323000 22.0546000 5.90619000 1587 36.3008000 14.9002000 13.1894000 5.44736000 3.80459000 1.93288000 1588 50.6300000 16.3228000 12.1282000 10.1315000 6.40444000 1.99424000 1589 54.8901000 14.7988000 6.06526000 11.5853000 6.97958000 1.20656000 1590 65.0714000 44.7422000 36.4802000 23.7169000 20.9475000 13.1550000 1591 69.6747000 51.3969000 47.3015000 29.8372000 27.0473000 21.6150000 1592 78.7459000 53.2327000 46.3345000 36.0821000 31.2396000 21.3158000 1593 88.7334000 69.4968000 64.4580000 53.9480000 50.4378000 42.1879000 1594 92.5938000 86.0032000 65.4365000 67.0032000 71.4614000 46.7538000 1595 20.9889000 49.2533000 17.8751000 9.38924000 15.7829000 5.09277000 1596 23.9542000 73.4210000 21.0021000 20.4004000 36.8894000 9.48019000 1597 34.0724000 77.8429000 50.1944000 28.1209000 44.1925000 27.4669000 1598 38.5013000 85.9069000 55.1480000 35.1805000 55.2104000 33.8548000 1599 51.5991000 64.8809000 46.4720000 26.2842000 33.2618000 22.3307000 1600 62.8752000 64.2631000 52.5817000 32.1236000 35.7356000 27.7881000 1601 77.9474000 69.3167000 56.1492000 44.1363000 45.4475000 32.5033000 1602 90.7833000 69.2907000 58.9793000 54.3140000 50.6105000 35.9281000 1603 47.9911000 34.8313000 28.6637000 12.8427000 11.7626000 7.91339000 1604 58.7399000 45.4204000 38.9396000 21.0299000 19.8207000 14.5959000 1605 58.0386000 56.9302000 46.0665000 25.6022000 27.8948000 21.0094000 1606 64.9804000 70.2120000 53.8462000 36.3273000 42.1454000 30.0014000 1607 80.8059000 77.2089000 72.8914000 54.2562000 56.5484000 54.4371000 1608 82.9183000 83.0866000 76.7742000 60.4375000 64.9107000 61.4318000 1609 88.0412000 84.8221000 81.5349000 66.9015000 69.7414000 69.5518000 1610 31.1013000 34.4565000 37.3172000 8.80097000 9.46165000 12.2265000 1611 30.3575000 34.6832000 43.0685000 9.42428000 9.76873000 16.0899000 1612 28.6879000 43.6249000 45.7589000 11.6619000 14.1207000 18.8431000 1613 28.2301000 48.9997000 48.6913000 13.6455000 17.4898000 21.7783000 1614 36.6551000 51.7450000 55.3650000 17.6257000 20.7677000 28.3484000 1615 37.9940000 58.1715000 60.8526000 21.4893000 26.1919000 35.0078000 1616 37.5893000 69.9480000 64.0596000 27.4415000 37.1206000 40.5326000 1617 83.9843000 71.8964000 68.2155000 52.4152000 51.3805000 47.1724000 1618 14.0759000 0.00000000 20.7950000 1.36681000 0.63040700 3.42091000 1619 13.5995000 9.67389000 20.2020000 1.63232000 1.27716000 3.35266000 1620 10.7330000 6.98732000 68.3605000 8.34461000 3.73253000 40.4867000 1621 9.33498000 14.7117000 93.6757000 16.6077000 7.77058000 82.1830000 1622 8.56146000 41.1053000 92.5147000 20.4843000 16.2841000 81.3498000 1623 58.2758000 56.4683000 92.2390000 37.3173000 32.3066000 83.0209000 1624 58.4265000 65.1480000 92.1118000 41.0267000 39.6969000 84.0066000 1625 64.9477000 70.9043000 93.8850000 47.7660000 47.2884000 88.5827000 1626 78.1150000 83.2467000 93.4112000 62.6758000 65.5782000 90.3930000 1627 83.8682000 92.1479000 96.8033000 74.1542000 80.3829000 99.4755000 1628 50.6514000 42.0025000 0.00000000 14.3471000 15.2180000 2.18137000 1629 63.8444000 53.2158000 0.00000000 23.8264000 25.2904000 3.62602000 1630 85.4328000 73.3771000 0.00000000 46.6645000 50.4721000 7.28309000 1631 88.9797000 88.7615000 30.4563000 60.2985000 71.4384000 17.7556000 1632 1.15207000 0.00000000 0.00000000 0.03659220 0.01886760 0.00171442 1633 8.56708000 6.87553000 10.3823000 0.72810000 0.66292900 1.09476000 1634 20.6739000 5.90217000 50.9477000 5.64767000 2.70151000 21.3124000 1635 19.7673000 11.8648000 58.5677000 7.25769000 3.81055000 28.9306000 1636 40.8303000 7.99037000 49.5535000 9.76870000 4.98035000 20.3069000 1637 44.2816000 38.7990000 49.6378000 15.0581000 13.9386000 21.8307000 1638 51.0904000 46.4822000 49.4248000 19.5574000 19.3572000 22.4544000 1639 75.1404000 45.3566000 59.9521000 33.5851000 25.8655000 33.3054000 1640 89.6482000 57.6940000 65.0392000 49.5083000 40.2473000 41.1623000 1641 59.9104000 34.0222000 49.7004000 20.2959000 15.0535000 21.8240000 1642 70.2184000 32.8319000 63.1021000 28.1777000 18.4599000 35.7533000 1643 71.5769000 68.0060000 72.3686000 43.1448000 43.5387000 51.7729000 1644 83.0175000 68.0909000 79.1836000 52.7782000 48.3432000 62.3737000 1645 91.1602000 71.0509000 87.6059000 63.3592000 55.7035000 77.5012000 1646 47.1650000 25.5619000 35.9188000 11.5983000 8.58033000 11.0771000 1647 74.9943000 32.0845000 49.6034000 28.3473000 18.6350000 22.0073000 1648 84.6672000 45.1360000 63.8963000 41.0376000 29.5123000 38.1526000 1649 83.7999000 50.7785000 70.8831000 43.8703000 33.4060000 47.7164000 1650 84.1521000 52.1950000 91.3841000 51.0153000 37.0734000 81.5761000 1651 91.8087000 63.3521000 93.8946000 62.4515000 49.4521000 88.2460000 1652 46.5801000 68.9125000 47.5162000 26.5085000 36.2322000 23.7374000 1653 48.4072000 77.8686000 55.7716000 33.4509000 46.8473000 32.9548000 1654 50.7507000 92.8839000 62.3013000 45.6005000 67.6778000 43.3985000 1655 16.8190000 27.8719000 37.9115000 5.39142000 5.88348000 12.0809000 1656 35.0825000 40.2920000 46.0506000 12.2243000 13.0906000 18.8444000 1657 38.8236000 45.3918000 53.1521000 15.7721000 16.8495000 25.5405000 1658 72.0788000 84.1892000 60.4734000 49.7869000 60.9432000 39.8000000 1659 90.7121000 94.1428000 59.7590000 69.9331000 81.6781000 41.9499000 1660 49.7645000 81.4729000 0.00000000 31.2316000 49.4945000 7.90699000 1661 79.2719000 84.9060000 9.80194000 49.2574000 62.0196000 10.2941000 1662 86.9345000 92.1106000 14.4227000 60.0314000 74.9603000 13.0367000 1663 100.000000 92.8011000 66.4020000 78.6119000 84.4993000 49.8615000 1664 100.000000 93.8346000 82.8067000 83.9634000 87.8669000 74.2638000 1665 37.0841000 13.3559000 19.1219000 5.79774000 3.77729000 3.30313000 1666 39.1801000 6.75427000 18.1051000 5.94641000 3.31132000 2.92844000 1667 78.0149000 7.88812000 45.1242000 26.8894000 13.8812000 17.5017000 1668 100.000000 13.4684000 47.0824000 45.2192000 23.7870000 19.9967000 1669 100.000000 15.2580000 68.4264000 49.6531000 25.7860000 42.6541000 1670 70.5239000 9.49121000 50.2257000 23.0173000 11.9080000 21.5332000 1671 79.4040000 7.54993000 56.1133000 29.6907000 15.0874000 27.3690000 1672 91.4060000 42.8129000 60.8890000 45.0593000 30.6913000 34.6759000 1673 8.52246000 32.7499000 15.6304000 3.83786000 6.58466000 3.06286000 1674 10.0624000 42.4420000 30.3505000 7.15668000 11.5288000 8.94233000 1675 9.65076000 54.2147000 42.2394000 12.2054000 19.5248000 17.2319000 1676 0.00000000 89.3311000 84.0713000 39.8669000 60.2424000 73.3968000 1677 11.3381000 95.5062000 83.8585000 44.8268000 69.5252000 74.5640000 1678 0.00000000 69.2447000 63.0550000 22.0489000 33.8383000 38.9880000 1679 48.6704000 74.2354000 63.2777000 33.0519000 43.4010000 40.5172000 1680 42.1634000 53.0937000 44.3874000 17.8344000 21.7903000 18.9432000 1681 42.1209000 61.2730000 47.8084000 21.5486000 28.4128000 22.7312000 1682 48.4491000 93.2716000 49.2590000 42.5126000 66.8010000 30.2594000 1683 19.0493000 51.8358000 9.11652000 9.67814000 17.2554000 3.64370000 1684 26.5119000 59.9022000 9.38397000 13.8698000 23.9796000 4.75762000 1685 36.9890000 92.6457000 11.5203000 34.9388000 62.6157000 11.4311000 1686 56.4669000 92.9983000 13.9525000 42.1357000 66.7023000 12.2896000 1687 48.8476000 81.2266000 29.4987000 32.0127000 49.5230000 14.5678000 1688 52.4427000 81.1751000 88.3019000 45.7094000 55.1121000 79.5807000 1689 16.8500000 91.3864000 45.0276000 33.2233000 60.0386000 26.0015000 1690 34.4034000 93.4933000 73.2786000 43.6417000 67.0249000 57.5691000 1691 51.4993000 92.1997000 78.2213000 49.5073000 68.4704000 64.9193000 1692 64.5506000 91.6334000 77.8933000 55.0238000 70.7148000 64.5530000 1693 54.4974000 72.7248000 77.7644000 38.3092000 44.4608000 60.1668000 1694 74.2380000 81.3675000 78.3682000 53.8971000 59.8815000 63.2596000 1695 74.7880000 78.4024000 68.0668000 49.6458000 55.3509000 47.8912000 1696 79.1403000 85.0050000 69.8793000 57.1099000 65.2541000 51.8046000 1697 98.8849000 95.0542000 75.6882000 81.6935000 88.3103000 63.1929000 1698 11.5091000 2.44887000 7.13079000 0.69516400 0.44629300 0.62930000 1699 6.78400000 12.0410000 11.9195000 0.95825800 1.18251000 1.43253000 1700 11.4455000 13.0026000 8.79495000 1.20906000 1.41953000 0.99087400 1701 14.4538000 14.2296000 5.40296000 1.47502000 1.70073000 0.65853600 1702 25.8535000 16.8055000 38.9404000 5.36658000 3.77965000 12.3255000 1703 25.2057000 29.3445000 60.3281000 10.4545000 8.43545000 31.5761000 1704 65.7864000 67.1038000 62.5662000 36.9844000 39.9883000 38.8167000 1705 54.8513000 58.1489000 54.3049000 26.0480000 28.6802000 28.3881000 1706 56.1147000 72.6289000 62.9913000 35.1331000 43.1893000 40.0292000 1707 23.5100000 17.1070000 3.96505000 2.80238000 2.75473000 0.67393500 1708 69.2497000 60.0442000 11.9562000 29.6880000 32.2150000 5.91499000 1709 84.4883000 83.2468000 12.3472000 52.0223000 61.8429000 10.5259000 1710 93.5021000 85.1647000 4.81302000 60.3300000 67.9936000 10.3017000 1711 76.1496000 61.6579000 24.3354000 35.2620000 36.0339000 9.66280000 1712 88.8234000 69.3655000 35.2107000 49.0572000 48.3839000 16.3794000 1713 91.6033000 81.4569000 50.9855000 60.3135000 64.0091000 30.2994000 1714 26.9990000 54.8740000 25.6736000 12.7773000 20.3802000 8.33231000 1715 25.4973000 60.9934000 42.0432000 16.6544000 25.8091000 18.0712000 1716 46.5540000 82.5819000 52.5233000 35.0550000 52.0000000 30.7181000 1717 61.4397000 81.8708000 58.0004000 41.9200000 54.7567000 36.3338000 1718 84.6004000 83.2768000 58.2530000 57.2597000 63.9784000 37.5743000 1719 93.6798000 83.8444000 83.9986000 71.7146000 71.1893000 73.7080000 1720 57.7109000 40.7150000 50.2917000 20.9066000 17.6490000 22.8106000 1721 71.9626000 40.5319000 68.3644000 32.2064000 22.9712000 42.9481000 1722 81.4142000 44.4697000 83.5976000 43.8832000 30.0668000 66.5547000 1723 80.5555000 53.6127000 85.0018000 46.6883000 35.8466000 69.9342000 1724 49.4422000 5.02699000 23.7302000 9.58697000 5.05760000 4.81662000 1725 56.6072000 10.6401000 26.9805000 13.0263000 7.17912000 6.29658000 1726 57.8688000 8.24082000 36.6159000 14.3957000 7.59069000 11.1484000 1727 58.2905000 6.45761000 46.2557000 15.7894000 8.04908000 17.8461000 1728 65.0436000 15.1910000 72.1316000 25.0586000 12.9857000 46.4965000 1729 55.2978000 19.2266000 59.6958000 17.7715000 10.1381000 30.8210000 1730 66.8090000 24.1686000 92.0888000 33.3273000 17.9809000 80.1770000 1731 75.3378000 35.7741000 94.1402000 41.2619000 25.0374000 85.1376000 1732 30.5674000 17.2907000 64.5930000 10.8057000 6.13169000 36.0727000 1733 33.3134000 49.1604000 85.5233000 23.7830000 21.7513000 69.3287000 1734 37.2698000 63.0539000 88.3300000 31.0505000 33.2970000 76.1936000 1735 47.2728000 74.7993000 93.3634000 41.8344000 47.3538000 87.8796000 1736 8.20475000 17.7010000 24.5295000 2.13555000 2.39951000 4.98787000 1737 8.30815000 14.8379000 36.3970000 2.96842000 2.32435000 10.6044000 1738 8.71948000 11.2407000 38.2304000 2.94702000 1.90727000 11.6415000 1739 10.1899000 33.0605000 55.3819000 8.44273000 8.53642000 26.4883000 1740 8.00383000 31.7181000 61.0856000 9.21007000 8.41180000 32.4860000 1741 34.9216000 35.2961000 62.2294000 14.0105000 11.9312000 34.2210000 1742 40.8458000 42.9298000 68.4317000 18.9336000 17.0656000 42.5956000 1743 59.4162000 80.9643000 71.0988000 43.4077000 54.3382000 52.0766000 1744 64.8407000 94.3823000 73.2006000 55.8767000 74.3237000 58.2219000 1745 8.53982000 26.5018000 19.3120000 2.92725000 4.47540000 3.64234000 1746 7.61746000 27.0107000 25.5466000 3.35536000 4.76659000 5.76557000 1747 13.8335000 26.5168000 26.9808000 3.81408000 4.87726000 6.33752000 1748 8.56451000 77.6734000 28.1658000 21.6978000 41.0493000 12.8796000 1749 12.6466000 82.9782000 69.9796000 32.1217000 50.4230000 50.3929000 1750 12.3516000 85.1805000 77.7689000 35.6709000 54.1198000 62.1767000 1751 59.9440000 85.1089000 94.0936000 53.6438000 62.6827000 91.6575000 1752 42.8144000 26.5626000 32.1818000 9.90503000 7.97524000 9.01255000 1753 52.5674000 32.8979000 31.4857000 14.4596000 11.9797000 9.19586000 1754 78.2152000 36.7398000 38.2876000 29.8362000 21.0313000 13.9517000 1755 52.3492000 23.3536000 31.0191000 12.7584000 8.77890000 8.43747000 1756 59.9629000 34.2956000 44.4745000 19.5679000 14.8555000 17.5793000 1757 64.4079000 36.6633000 57.4171000 24.5378000 17.9228000 29.5287000 1758 71.0534000 43.9609000 92.9946000 40.2089000 27.5800000 83.4258000 1759 73.2790000 60.6701000 93.5413000 47.6404000 40.0972000 86.5230000 1760 7.79560000 9.53559000 17.3669000 1.07937000 0.99781200 2.54684000 1761 4.49602000 3.85290000 17.9724000 0.74025500 0.48306800 2.62148000 1762 67.0818000 18.2012000 22.3958000 18.5434000 10.9501000 5.02209000 1763 75.6279000 28.2698000 26.8573000 25.3373000 16.3898000 7.37528000 1764 91.1589000 28.3436000 35.4322000 37.6253000 22.6513000 12.1412000 1765 91.6701000 71.3994000 94.3983000 66.4272000 57.2706000 90.5462000 1766 15.7231000 6.80743000 19.9740000 1.68095000 1.10354000 3.24925000 1767 17.8118000 10.8107000 17.5985000 1.97707000 1.56631000 2.66888000 1768 28.4074000 17.7863000 85.5784000 16.3390000 8.37127000 67.2354000 1769 39.7040000 36.7169000 92.7381000 24.5718000 16.8038000 81.6697000 1770 38.7488000 49.9907000 93.7163000 28.3489000 24.1733000 84.8104000 1771 35.6032000 45.9624000 45.6694000 13.8564000 16.2544000 19.0692000 1772 56.7334000 62.9373000 46.6479000 27.6007000 32.6318000 22.2809000 1773 75.1609000 74.8946000 46.0782000 43.5185000 49.7116000 24.2854000 1774 75.6986000 94.1533000 70.2097000 61.3240000 76.9686000 54.2887000 1775 82.9152000 100.000000 94.5295000 78.6275000 91.7832000 96.8256000 1776 25.5245000 30.9345000 30.2469000 6.31674000 7.23881000 8.10974000 1777 35.6258000 31.9715000 28.9609000 8.51146000 8.67199000 7.67707000 1778 35.7651000 31.2062000 35.4771000 9.03691000 8.65627000 10.9709000 1779 41.9814000 29.4497000 37.6780000 10.7074000 9.02100000 12.2616000 1780 41.0042000 92.3242000 39.7442000 37.9668000 63.5794000 22.6714000 1781 56.5488000 93.3279000 55.2532000 46.9034000 69.0047000 36.0040000 1782 25.5346000 39.7898000 32.4735000 8.43943000 11.1462000 9.85128000 1783 23.4091000 52.6148000 49.0604000 14.0997000 19.5292000 22.4616000 1784 37.3497000 78.5835000 88.5205000 39.1735000 49.4061000 79.2229000 1785 42.1806000 88.7702000 93.4375000 48.8923000 63.9355000 90.8535000 1786 6.01958000 20.7690000 23.3816000 2.27938000 2.96909000 4.67597000 1787 47.0894000 18.0698000 36.7328000 10.7425000 6.76213000 11.2509000 1788 90.1118000 23.9729000 47.3389000 37.6763000 21.5169000 20.1656000 1789 94.8042000 34.7469000 53.3735000 44.5258000 27.6973000 26.3307000 1790 18.5571000 5.48098000 5.68892000 1.42655000 0.95877900 0.54353000 1791 15.2311000 2.54869000 12.5642000 1.16261000 0.67404700 1.43788000 1792 10.1720000 48.8560000 12.5312000 7.96449000 14.8834000 3.81601000 1793 15.5508000 63.2171000 16.9355000 14.0797000 26.1786000 6.61340000 1794 29.3256000 79.1618000 17.0376000 24.4147000 43.8381000 9.50279000 1795 54.2771000 79.3854000 36.0210000 33.6938000 48.6497000 17.7058000 1796 70.0018000 93.1667000 38.3166000 51.1154000 71.3003000 22.5502000 1797 65.3618000 45.4222000 15.7163000 22.4778000 20.7856000 4.84207000 1798 66.6242000 53.3177000 11.0543000 25.5652000 26.2169000 4.82326000 1799 74.4380000 58.3425000 9.91253000 32.0806000 32.4198000 5.50274000 1800 92.6842000 17.9552000 4.59593000 35.7439000 19.8605000 2.29004000 1801 93.1818000 17.8920000 33.1280000 37.7152000 20.6879000 10.4923000 1802 84.4267000 12.2282000 28.4678000 29.7960000 15.9606000 7.74410000 1803 82.5339000 13.5670000 36.2963000 29.2580000 15.7346000 11.7486000 1804 83.8085000 12.8375000 64.0540000 34.8266000 17.9860000 36.4443000 1805 94.2447000 7.07365000 67.2048000 43.6505000 21.9752000 40.6545000 1806 30.0698000 10.1252000 58.3356000 8.80484000 4.45766000 28.7271000 1807 45.7553000 9.22033000 58.1319000 12.9731000 6.53911000 28.6927000 1808 53.4272000 8.05083000 78.6213000 20.9328000 9.96726000 55.7585000 1809 58.3967000 9.79058000 90.7917000 27.2205000 12.8745000 77.0323000 1810 30.6091000 13.8884000 29.8682000 5.06957000 3.37294000 7.25105000 1811 37.1871000 20.7249000 30.9019000 7.37165000 5.51795000 8.03468000 1812 52.1005000 43.5382000 32.5438000 16.8978000 16.9731000 10.5667000 1813 59.4743000 54.7901000 52.4270000 26.5023000 27.0279000 26.2597000 1814 59.1446000 54.4080000 58.6102000 27.3842000 27.1365000 32.4182000 1815 59.0399000 62.4869000 79.5122000 35.8845000 35.7496000 61.3542000 1816 63.1192000 62.7488000 92.7413000 42.4694000 38.8007000 84.9784000 1817 18.9603000 36.3681000 31.9791000 6.63207000 9.02172000 9.28358000 1818 16.8268000 35.3362000 35.2665000 6.49946000 8.57853000 10.9698000 1819 12.8579000 56.2300000 59.2388000 16.0889000 22.3147000 32.7601000 1820 11.9303000 58.7202000 67.3389000 18.8283000 24.9765000 42.7122000 1821 24.9750000 58.6003000 64.5321000 19.6585000 25.4093000 39.2530000 1822 25.5352000 71.2962000 66.6845000 26.1322000 37.4049000 43.8934000 1823 26.1294000 81.7183000 79.7352000 35.7518000 50.8012000 64.6214000 1824 11.1484000 6.08551000 23.1008000 1.45572000 0.92429700 4.22648000 1825 26.8774000 6.23485000 40.9777000 5.12858000 2.62538000 13.4642000 1826 33.6108000 11.2975000 46.2894000 7.51751000 4.14288000 17.5547000 1827 56.2089000 20.4128000 47.5280000 16.0787000 9.71611000 19.1793000 1828 66.5957000 30.1207000 51.5060000 23.2995000 15.4569000 23.3488000 1829 56.2147000 38.8920000 34.5935000 17.6367000 15.5362000 11.3485000 1830 73.3259000 50.0610000 36.8353000 30.1812000 26.7196000 14.1397000 1831 87.9378000 52.9806000 40.2273000 41.9223000 34.2157000 17.1170000 1832 22.1913000 13.1397000 13.8061000 2.52837000 2.09635000 1.87709000 1833 20.1590000 14.3698000 11.4588000 2.26108000 2.10535000 1.46439000 1834 49.6392000 14.3327000 84.7167000 21.7343000 10.7347000 65.9085000 1835 58.2598000 21.9446000 93.6071000 29.2602000 15.3874000 82.8514000 1836 91.1691000 46.1481000 93.2560000 55.2789000 36.2819000 84.8241000 1837 79.7912000 36.0520000 57.8355000 33.8832000 22.5299000 30.3644000 1838 80.4744000 38.9001000 65.8475000 36.7753000 24.7960000 39.8491000 1839 36.8518000 37.6005000 29.8337000 10.0920000 11.2449000 8.48992000 1840 42.8767000 40.3990000 28.1269000 12.3606000 13.4409000 8.02665000 1841 74.4823000 58.6026000 54.3966000 36.6733000 34.4279000 29.0272000 1842 79.7824000 66.7492000 59.5372000 44.8165000 43.8492000 35.7292000 1843 78.4835000 72.4777000 63.5296000 47.6862000 49.5280000 41.2280000 1844 83.8914000 59.3548000 47.2965000 42.2609000 37.9050000 23.0520000 1845 93.7919000 70.8834000 69.6406000 60.1212000 54.5266000 49.2550000 1846 98.5019000 94.6468000 93.9015000 87.0503000 89.9182000 94.7737000 1847 100.000000 100.000000 100.000000 95.0458000 99.9985000 108.896000 1848 73.9050000 62.3744000 47.0957000 36.6547000 36.9232000 22.9934000 1849 91.2416000 73.7475000 45.9911000 54.7184000 54.5506000 24.5606000 1850 52.6058000 31.4746000 20.0480000 13.3433000 11.0971000 4.58562000 1851 56.2145000 49.4321000 19.6878000 19.4351000 21.0377000 6.07682000 1852 61.0378000 54.8778000 28.6417000 24.2148000 26.2524000 10.1011000 1853 61.2914000 54.0820000 40.5096000 25.3059000 26.2339000 16.6406000 1854 70.9558000 52.1286000 42.8197000 30.1899000 27.6810000 18.2732000 1855 71.6139000 57.5598000 63.9730000 36.4577000 33.4677000 39.2488000 1856 74.5797000 59.7557000 78.4825000 43.0084000 37.7259000 59.7358000 1857 31.0032000 27.2934000 36.4789000 7.37065000 6.78563000 11.2819000 1858 40.6002000 40.1026000 35.1803000 12.2643000 13.2021000 11.5101000 1859 42.2850000 47.1807000 59.3036000 18.5200000 18.9259000 32.0489000 1860 47.9980000 56.7819000 72.0218000 26.7892000 27.7994000 49.1100000 1861 51.6752000 64.5145000 78.8935000 33.4080000 35.8457000 60.5235000 1862 32.8999000 50.0300000 64.2843000 18.0027000 19.8845000 37.9740000 1863 36.0255000 94.1985000 78.9395000 46.1925000 68.9350000 66.3085000 1864 22.2090000 43.2136000 38.4739000 9.47206000 12.9356000 13.5795000 1865 54.0686000 67.0405000 40.1883000 27.4353000 35.4680000 18.0956000 1866 62.4781000 68.0401000 39.6255000 31.7519000 38.4240000 18.0661000 1867 18.4478000 20.6538000 12.7081000 2.69826000 3.22737000 1.87672000 1868 26.9514000 19.5485000 24.1965000 4.43014000 3.86820000 5.02755000 1869 24.7801000 18.1392000 26.3501000 4.06774000 3.44489000 5.79048000 1870 23.2799000 91.7652000 31.2674000 32.6824000 60.3570000 17.4644000 1871 46.3625000 35.1652000 10.8623000 11.3368000 11.2074000 2.64597000 1872 65.1679000 34.0164000 14.4352000 19.4824000 15.0348000 3.60990000 1873 65.6925000 69.0144000 25.6290000 32.5320000 39.7026000 11.0039000 1874 7.40990000 43.0058000 21.5421000 6.49343000 11.4913000 5.48149000 1875 6.09575000 49.7189000 29.9706000 9.08550000 15.7552000 9.47685000 1876 6.00893000 75.6151000 44.7904000 22.2785000 39.3802000 22.4101000 1877 11.6744000 85.1385000 62.7494000 31.7099000 52.4855000 41.7199000 1878 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 1879 7.85453000 4.22282000 2.25909000 0.43779200 0.39556600 0.21864700 1880 21.3856000 5.99226000 92.6002000 16.8810000 7.21128000 79.9547000 1881 18.6003000 19.5597000 90.9761000 16.8883000 8.70986000 77.1228000 1882 57.3495000 49.2747000 92.0447000 34.2647000 26.9471000 81.7728000 1883 20.3226000 27.1167000 5.48011000 3.62329000 5.03128000 1.19499000 1884 37.3650000 32.7616000 7.43313000 8.00076000 8.76495000 1.88418000 1885 36.8587000 39.4844000 8.48125000 9.37926000 11.6819000 2.50088000 1886 36.4922000 62.9765000 29.3276000 18.4545000 28.1803000 11.0847000 1887 38.1308000 86.8505000 81.5981000 42.3237000 59.0674000 68.8896000 1888 16.5036000 38.5730000 49.2679000 9.10137000 10.7937000 21.2180000 1889 16.0842000 49.4721000 62.1780000 14.6127000 17.9187000 35.2855000 1890 22.0686000 48.8857000 75.7771000 18.5852000 19.2884000 53.3285000 1891 30.1098000 4.31483000 26.4542000 4.18995000 2.21966000 5.59003000 1892 74.2850000 11.2612000 34.5757000 23.2947000 12.4484000 10.4447000 1893 81.7913000 11.2239000 41.3868000 29.1823000 15.3872000 14.9418000 1894 88.3638000 31.5053000 57.0712000 39.2009000 23.9121000 29.5530000 1895 87.3505000 86.7379000 91.6913000 71.0780000 73.3849000 88.1153000 1896 86.2968000 95.8108000 92.0815000 76.9417000 86.1013000 91.0126000 1897 29.8790000 50.0998000 16.0930000 11.0830000 17.0781000 4.81321000 1898 42.8302000 74.3766000 19.8247000 25.2592000 40.1776000 9.50420000 1899 72.1008000 85.5131000 50.5255000 48.7694000 61.9246000 30.0949000 1900 72.2421000 93.2769000 50.9902000 54.3805000 72.8927000 32.3303000 1901 30.3350000 46.3522000 23.9345000 10.4339000 14.9331000 6.75166000 1902 42.1497000 55.1129000 37.8353000 17.7111000 22.9220000 14.6731000 1903 44.5618000 61.2896000 38.3876000 21.0271000 28.3057000 15.8824000 1904 45.4772000 74.7001000 41.2363000 28.2719000 41.7686000 19.9766000 1905 50.9302000 89.5632000 41.1327000 39.5767000 61.4487000 23.1085000 1906 47.7412000 79.8375000 62.9284000 35.8666000 49.6590000 41.1655000 1907 47.5899000 94.5411000 71.6840000 47.9341000 70.4532000 55.7565000 1908 34.1261000 56.5192000 55.5896000 18.7869000 23.9559000 29.1272000 1909 60.8769000 60.8491000 65.0334000 32.1775000 33.2356000 40.7146000 1910 93.9064000 64.4595000 66.8429000 56.3935000 48.0374000 44.5519000 1911 37.0231000 9.30151000 6.90890000 5.08579000 3.08662000 0.88327500 1912 41.9899000 3.80160000 11.9651000 6.41896000 3.43775000 1.58830000 1913 50.8243000 7.72621000 19.1565000 9.94197000 5.42644000 3.41289000 1914 63.8158000 30.7773000 67.7569000 25.3291000 16.2858000 41.2300000 1915 19.1145000 24.2631000 23.2582000 3.76725000 4.39688000 4.82972000 1916 17.4753000 24.2953000 31.0617000 4.20149000 4.55565000 8.09379000 1917 24.0127000 25.7378000 47.4866000 7.32163000 6.23547000 18.9347000 1918 22.1349000 40.0926000 78.2009000 16.7841000 14.5437000 56.2035000 1919 13.6662000 38.9749000 61.5156000 11.2593000 11.7806000 33.5170000 1920 32.2527000 38.5658000 60.6811000 13.7936000 12.9618000 32.6677000 1921 75.9184000 38.4618000 74.1538000 35.7140000 23.8458000 50.9155000 1922 83.7929000 43.7915000 74.2899000 42.6265000 29.4574000 51.8315000 1923 34.1502000 17.0854000 42.3412000 7.52787000 4.88195000 14.7245000 1924 33.1849000 53.7676000 43.7415000 15.5704000 20.9934000 18.4258000 1925 35.2675000 63.4164000 47.6765000 20.5638000 29.3018000 22.8456000 1926 67.5562000 62.9818000 60.5719000 35.6179000 36.5008000 35.9396000 1927 73.4316000 71.6663000 65.8893000 44.5044000 47.1869000 43.8156000 1928 26.8658000 28.8042000 20.2696000 5.44438000 6.31700000 4.14451000 1929 54.7591000 39.1709000 16.8492000 15.7361000 14.8113000 4.31181000 1930 93.5039000 37.9213000 22.1615000 40.3828000 27.0419000 6.89947000 1931 92.9260000 74.1239000 31.2060000 54.5469000 54.9753000 15.2447000 1932 34.2237000 27.2655000 42.7956000 8.88323000 7.46769000 15.4768000 1933 40.2647000 31.9832000 44.8014000 11.5911000 10.0528000 17.3215000 1934 44.6089000 50.8784000 56.7087000 19.9345000 21.4882000 29.7248000 1935 50.2112000 51.6866000 63.3481000 23.6111000 23.6322000 37.2824000 1936 75.9799000 56.5843000 82.2135000 43.7883000 36.1071000 65.3992000 1937 71.5101000 27.4050000 31.1848000 22.9891000 14.9281000 9.16766000 1938 83.3240000 35.0869000 34.0924000 32.6202000 21.9815000 11.5269000 1939 84.8283000 43.8124000 32.5724000 35.7405000 26.8022000 11.4862000 1940 58.7681000 32.3538000 30.9690000 17.0180000 13.1467000 9.03169000 1941 60.3238000 77.2125000 32.9831000 34.8377000 47.3764000 15.7170000 1942 14.6336000 20.4611000 64.0111000 8.63987000 5.52259000 35.3662000 1943 10.9674000 33.1856000 77.9540000 13.9777000 10.7963000 55.2453000 1944 9.47658000 41.0267000 77.8311000 15.6375000 14.3187000 55.6471000 1945 11.9817000 39.7762000 84.4519000 17.5551000 14.5981000 66.4167000 1946 6.10580000 19.4189000 80.2307000 12.2939000 6.73337000 58.1466000 1947 16.5327000 24.1815000 82.9350000 14.4819000 8.63081000 62.8460000 1948 34.3150000 93.1766000 90.5997000 48.8569000 68.7324000 86.3096000 1949 19.4413000 31.0345000 29.2649000 5.35682000 6.78125000 7.61604000 1950 17.4295000 29.2970000 43.8917000 6.47396000 6.70583000 16.2599000 1951 14.1399000 54.5894000 52.9328000 14.3608000 20.6465000 26.1403000 1952 13.8936000 75.3642000 71.5291000 28.0773000 41.5328000 51.0064000 1953 7.53231000 78.6518000 93.3165000 36.4776000 47.8753000 88.1702000 1954 26.3585000 23.1605000 54.1751000 8.49333000 6.17346000 24.8436000 1955 47.6221000 26.8876000 78.3130000 20.4361000 12.4550000 55.7835000 1956 54.0487000 36.2688000 94.2521000 30.0979000 19.4385000 84.8667000 1957 4.53157000 11.1217000 15.7355000 0.95425900 1.07642000 2.17640000 1958 9.68711000 15.4515000 12.5302000 1.39266000 1.78467000 1.63408000 1959 13.7225000 17.3272000 4.73119000 1.66715000 2.19908000 0.68651200 1960 93.7684000 52.1061000 11.1022000 44.2193000 35.1987000 5.58218000 1961 94.2838000 58.4634000 8.62032000 46.9865000 40.1816000 6.03886000 1962 53.0880000 55.9773000 9.73784000 20.0092000 24.8187000 4.64622000 1963 53.9822000 60.2110000 49.6225000 25.7034000 29.8526000 24.3279000 1964 68.0934000 62.6139000 82.0303000 41.4167000 38.5950000 65.7011000 1965 69.9708000 64.0526000 91.2215000 46.2647000 41.6892000 82.4074000 1966 100.000000 100.000000 100.000000 95.0458000 99.9985000 108.896000 1967 9.53243000 32.6029000 29.1675000 4.73605000 6.90479000 7.62797000 1968 14.6882000 56.3040000 38.3767000 12.8846000 21.0969000 14.9130000 1969 21.8074000 67.7917000 40.4917000 18.9860000 31.6479000 18.0063000 1970 23.6516000 84.4752000 50.4802000 30.2277000 51.3542000 28.9904000 1971 32.6419000 55.1461000 9.77085000 13.2313000 20.8570000 4.24295000 1972 40.1224000 61.2153000 9.59841000 17.5890000 26.7200000 5.12086000 1973 66.1764000 70.2005000 6.87545000 32.5357000 40.6940000 6.69198000 1974 84.3147000 75.7398000 42.2590000 49.8194000 53.7261000 21.8654000 1975 84.8441000 87.6164000 46.5404000 58.2332000 68.9774000 27.5962000 1976 36.4490000 20.6976000 6.24877000 5.86493000 4.88782000 1.12171000 1977 39.1624000 18.4825000 19.5132000 6.83302000 4.97373000 3.59021000 1978 38.7510000 41.1115000 89.1862000 24.0811000 18.2802000 75.2362000 1979 48.6281000 41.1205000 90.6023000 27.7756000 20.1303000 78.0454000 1980 14.3481000 6.27385000 76.5494000 10.8042000 4.70451000 52.0845000 1981 25.6250000 8.56745000 76.4148000 12.3195000 5.63731000 51.9819000 1982 39.7613000 10.3965000 74.2701000 15.0177000 7.24210000 48.9693000 1983 39.5535000 8.02139000 83.0646000 17.4679000 8.01942000 62.7889000 1984 92.7051000 16.4683000 92.1832000 50.5578000 25.5628000 80.9144000 1985 56.1100000 16.5604000 36.1753000 14.1213000 8.29796000 11.0390000 1986 64.0292000 34.4965000 41.1770000 21.1978000 15.8108000 15.2995000 1987 68.2676000 50.6561000 61.0156000 31.3129000 27.1419000 34.8582000 1988 79.3296000 54.3297000 68.4840000 41.3036000 34.0118000 44.7560000 1989 32.1297000 24.2777000 16.6860000 5.61926000 5.39756000 2.98780000 1990 58.5265000 22.0865000 13.2930000 14.1564000 9.38789000 2.57168000 1991 58.7209000 64.5135000 15.3205000 26.2636000 33.3397000 6.97661000 1992 67.9166000 67.2492000 15.5979000 32.3087000 38.3665000 7.68985000 1993 81.2534000 70.6183000 74.0939000 51.3012000 49.6389000 54.9856000 1994 89.0649000 76.1634000 78.2402000 61.4222000 59.1780000 62.5283000 1995 56.0466000 28.9694000 5.28041000 13.8305000 10.7445000 1.74240000 1996 80.1326000 28.4603000 12.6264000 27.6152000 17.7036000 3.34272000 1997 96.7951000 29.8434000 9.25660000 41.0529000 24.9954000 3.50506000 1998 93.5194000 42.8505000 8.61619000 41.0646000 29.3165000 4.25343000 1999 91.5648000 42.0964000 41.5319000 41.6579000 29.0371000 17.0198000 2000 91.6564000 41.7799000 51.4704000 43.1665000 29.5147000 24.9830000 2001 93.2368000 75.7828000 67.8766000 61.8526000 59.4053000 47.7837000 2002 93.8254000 80.9489000 74.7960000 67.2281000 66.4903000 58.4229000 2003 21.5466000 36.4502000 40.0131000 7.88147000 9.58977000 14.0142000 2004 19.8220000 41.9407000 41.9921000 9.25186000 12.2590000 15.8099000 2005 46.6716000 42.7372000 49.0604000 16.7834000 16.3388000 21.7046000 2006 56.3551000 43.2039000 61.0534000 23.0175000 19.4808000 33.8590000 2007 56.6503000 48.6954000 68.6808000 26.5610000 23.5298000 43.7675000 2008 56.3611000 68.3363000 72.3053000 35.3275000 39.7508000 51.3646000 2009 62.6008000 73.3332000 73.2733000 41.1444000 46.5557000 53.7428000 2010 62.2668000 94.6854000 90.5717000 60.2546000 76.2870000 87.1145000 2011 28.6457000 73.7538000 40.8110000 23.2497000 38.4138000 19.3032000 2012 29.3946000 84.9463000 44.8754000 30.6697000 52.1408000 24.4949000 2013 62.7611000 85.3979000 51.9906000 43.7177000 59.1780000 31.1545000 2014 71.2066000 36.7834000 21.8163000 23.8827000 18.1475000 5.93861000 2015 82.3189000 57.4190000 27.2701000 37.9896000 34.8147000 10.4365000 2016 81.8984000 90.9732000 34.4603000 56.8560000 71.9361000 20.0934000 2017 91.3605000 92.3566000 66.2964000 70.6129000 79.8926000 49.2606000 2018 10.9838000 9.48720000 53.6812000 5.31550000 2.71026000 23.8656000 2019 9.96659000 59.4582000 90.2072000 25.8601000 28.2567000 78.9708000 2020 11.5810000 59.0233000 95.3805000 27.7158000 28.7263000 89.0477000 2021 9.35368000 21.9704000 38.2683000 3.97298000 3.89663000 11.9949000 2022 6.01644000 26.0790000 46.2625000 5.44751000 5.36642000 17.8783000 2023 22.7100000 57.5899000 69.7198000 20.1619000 24.9220000 45.7523000 2024 21.4340000 76.6106000 82.7653000 32.9114000 44.6944000 68.5509000 2025 26.7772000 90.7129000 92.7199000 46.2656000 64.6444000 89.7242000 2026 11.6241000 33.2608000 37.1182000 5.80765000 7.55737000 11.8961000 2027 10.8478000 44.6956000 52.7617000 10.8236000 14.0062000 24.8848000 2028 6.90348000 64.2088000 52.1126000 17.6927000 28.2675000 26.6717000 2029 69.6548000 63.7894000 65.6667000 38.3257000 38.3015000 42.1486000 2030 75.4578000 64.8268000 71.7241000 43.8899000 41.6976000 50.4760000 2031 77.4583000 71.3909000 71.5874000 48.3985000 48.8158000 51.4225000 2032 6.70079000 25.0604000 7.28259000 2.17446000 3.82139000 1.21987000 2033 9.50949000 30.0555000 5.93229000 3.09821000 5.48954000 1.35258000 2034 7.99369000 30.5045000 38.9941000 5.27799000 6.47987000 12.8862000 2035 5.76713000 37.8057000 45.2220000 7.52393000 9.78322000 17.8057000 2036 9.08826000 63.3547000 80.9114000 24.3750000 30.3368000 63.1666000 2037 4.98240000 72.0569000 81.2821000 28.5401000 38.7730000 65.1810000 2038 56.2033000 38.5051000 43.8503000 18.6827000 15.8055000 17.3420000 2039 72.4346000 45.3718000 42.8051000 28.9173000 23.8086000 17.5823000 2040 93.5134000 51.4264000 48.6561000 47.1937000 35.9868000 23.5519000 2041 94.8264000 65.5917000 56.2646000 55.4128000 48.5755000 32.6300000 2042 27.6759000 15.0113000 13.1102000 3.54987000 2.83989000 1.83141000 2043 27.0573000 12.6820000 5.52281000 3.05959000 2.34877000 0.71078300 2044 36.6780000 23.2887000 14.1445000 6.47147000 5.65093000 2.42396000 2045 48.4054000 37.4825000 25.4227000 13.3247000 12.9126000 6.76462000 2046 57.5277000 69.7991000 23.0713000 28.6803000 38.3240000 10.0004000 2047 35.5986000 44.1205000 23.6126000 10.9632000 14.2415000 6.47480000 2048 60.9680000 43.3075000 57.6335000 24.4938000 20.3670000 30.2282000 2049 60.9781000 54.5639000 81.3327000 34.1743000 30.0467000 63.2833000 2050 64.4685000 54.9916000 88.6890000 38.5496000 32.2569000 76.2552000 2051 32.2809000 29.1002000 17.2138000 6.42226000 6.91411000 3.36882000 2052 40.3756000 34.1240000 16.2170000 9.40449000 9.86268000 3.53792000 2053 46.4353000 78.6779000 12.3190000 28.5775000 45.5786000 8.61663000 2054 58.2074000 85.2381000 11.2733000 37.4119000 56.2304000 10.0271000 2055 69.5529000 93.8154000 7.95001000 49.2737000 71.3054000 11.8411000 2056 81.0172000 94.2853000 14.5431000 57.2386000 75.9112000 13.3922000 2057 81.8296000 91.4051000 51.2886000 59.4426000 73.4623000 32.4425000 2058 82.9589000 93.6915000 68.4245000 65.5456000 78.6842000 52.0232000 2059 35.2879000 41.3371000 29.7009000 10.6030000 12.8773000 8.71580000 2060 38.8454000 47.8330000 32.7061000 13.6844000 17.1988000 10.8634000 2061 40.5391000 56.9923000 74.2102000 25.0210000 26.9409000 52.1575000 2062 43.1724000 62.2949000 75.7358000 28.4507000 31.9199000 55.1850000 2063 85.9357000 73.3514000 88.3849000 60.6749000 56.0986000 79.1341000 2064 50.9345000 7.65333000 8.77678000 9.57924000 5.28113000 1.29297000 2065 59.5100000 12.4387000 11.6622000 13.6437000 7.76384000 1.99052000 2066 67.0472000 8.86900000 11.5221000 17.3149000 9.34516000 2.07919000 2067 96.4148000 11.3160000 11.5080000 38.6222000 20.5347000 3.11440000 2068 72.6471000 11.5258000 60.1337000 26.2960000 13.5574000 31.5151000 2069 81.8828000 9.20025000 70.2215000 34.6984000 17.4182000 44.2146000 2070 81.2685000 24.2751000 76.4090000 37.3484000 20.6701000 53.5564000 2071 84.1632000 32.2215000 85.4478000 43.5820000 25.5075000 68.8797000 2072 28.0273000 8.71784000 49.9733000 6.78299000 3.48360000 20.5411000 2073 31.2295000 74.4040000 58.2130000 27.0101000 40.5489000 34.6030000 2074 10.6959000 52.7535000 24.6479000 9.94829000 17.7871000 7.58969000 2075 23.5251000 53.3358000 30.2318000 12.0094000 19.1062000 10.0930000 2076 29.0878000 65.9280000 32.9301000 18.4587000 30.1485000 13.2268000 2077 33.6167000 84.1130000 37.3139000 30.0518000 51.1309000 19.1469000 2078 56.9535000 85.9468000 56.3205000 42.0940000 58.7884000 35.3591000 2079 66.2868000 94.0854000 59.6284000 53.1726000 72.9752000 41.0096000 2080 71.6431000 93.4912000 85.0847000 62.6619000 76.4177000 77.0669000 2081 45.1521000 54.8432000 84.4396000 28.7482000 27.2874000 68.2549000 2082 57.6939000 72.2707000 92.5950000 44.4081000 46.6767000 86.1112000 2083 65.3647000 92.5029000 93.8531000 61.4531000 74.3512000 93.0215000 2084 7.37554000 18.0013000 16.0392000 1.63643000 2.24239000 2.43568000 2085 7.64941000 20.7717000 14.4369000 1.88115000 2.81910000 2.17961000 2086 11.3364000 55.9259000 8.77974000 10.4154000 19.8459000 4.06004000 2087 15.3094000 74.5888000 10.7931000 19.4971000 37.4249000 7.26467000 2088 74.6685000 77.3141000 9.97801000 41.5170000 51.0725000 8.61513000 2089 89.3990000 79.8834000 10.2720000 53.6958000 59.6095000 9.66478000 2090 93.8382000 74.3739000 9.81924000 54.2093000 55.1501000 8.71032000 2091 95.5871000 76.7953000 55.2465000 61.7207000 60.5117000 33.5781000 2092 16.1390000 3.54776000 8.41084000 1.15786000 0.72624600 0.81017400 2093 19.3702000 7.66806000 13.0133000 1.80521000 1.25883000 1.59956000 2094 58.2513000 9.64788000 20.3335000 13.2680000 7.27371000 3.93607000 2095 79.4014000 8.58724000 16.9486000 25.2130000 13.3727000 3.55925000 2096 95.3229000 8.72552000 48.5649000 40.9102000 21.1074000 20.9345000 2097 94.5241000 48.6355000 71.9670000 52.1003000 36.5717000 49.3935000 2098 19.6508000 13.6634000 23.3225000 2.71874000 2.19446000 4.48269000 2099 17.3478000 11.5975000 40.2319000 3.92981000 2.41876000 12.9843000 2100 14.9994000 70.0032000 53.0744000 21.2243000 34.2160000 28.5314000 2101 14.4168000 77.0975000 55.4072000 25.4551000 42.0670000 32.0883000 2102 15.4641000 86.6581000 56.8788000 31.8136000 54.1820000 35.5844000 2103 8.70738000 56.1308000 49.6824000 13.9863000 21.3801000 23.3617000 2104 19.5862000 66.3956000 55.8163000 20.4627000 31.1277000 30.6507000 2105 55.8229000 65.7160000 85.0647000 37.6498000 38.6339000 71.0575000 2106 60.6900000 72.3377000 87.3825000 44.0000000 46.7342000 76.3868000 2107 38.7603000 78.5082000 57.6418000 31.0897000 46.1456000 34.8642000 2108 41.9130000 87.0335000 69.6289000 40.1396000 58.5189000 51.0618000 2109 16.7278000 47.9453000 28.8359000 9.19252000 14.9761000 8.80201000 2110 36.2459000 47.4033000 37.0540000 13.3207000 16.7590000 13.2374000 2111 21.8537000 22.4069000 18.3006000 3.59202000 3.97556000 3.23256000 2112 20.1885000 20.9689000 26.2671000 3.69682000 3.71084000 5.82826000 2113 22.5521000 77.9075000 37.3020000 24.1308000 42.4022000 17.7670000 2114 49.3268000 77.7747000 80.9766000 40.0370000 49.4331000 66.1335000 2115 59.9222000 79.6564000 85.7315000 47.2161000 54.6151000 74.8027000 2116 62.3187000 84.7160000 86.8010000 51.9355000 61.7227000 77.8183000 2117 32.0473000 7.41868000 13.5909000 3.98533000 2.36394000 1.81037000 2118 42.3856000 10.8138000 16.7781000 7.03267000 4.17788000 2.70069000 2119 74.6736000 28.5804000 19.2692000 24.2737000 15.9765000 4.72588000 2120 87.1151000 50.4478000 22.3554000 38.7119000 31.4568000 7.90385000 2121 85.5481000 65.7586000 25.0683000 43.8260000 43.1877000 10.8659000 2122 86.1811000 79.1065000 22.5862000 51.2519000 57.5911000 12.3639000 2123 94.1657000 91.2750000 23.5483000 65.8618000 77.0105000 15.6746000 2124 55.8624000 68.7348000 10.5210000 26.8111000 36.6346000 6.68485000 2125 68.9834000 83.5196000 12.2401000 41.9205000 56.8937000 10.0837000 2126 89.7689000 94.2973000 84.1279000 75.7810000 84.1135000 76.2095000 2127 7.92003000 13.3064000 5.86723000 0.94863800 1.32524000 0.65636900 2128 12.1505000 8.33059000 4.54289000 0.90141200 0.86217700 0.45359500 2129 24.0352000 9.71959000 10.9537000 2.49454000 1.77145000 1.30417000 2130 24.1794000 5.89562000 5.75825000 2.22072000 1.38953000 0.59200800 2131 25.8560000 19.3619000 11.3714000 3.57789000 3.47253000 1.64373000 2132 23.9272000 23.1366000 32.3381000 5.02941000 4.73622000 8.72385000 2133 34.3902000 32.8674000 44.0277000 10.0907000 9.54699000 16.7188000 2134 33.9897000 44.6282000 57.9779000 15.2264000 16.1330000 30.2617000 2135 40.8735000 57.1482000 79.9535000 26.8542000 27.7830000 60.9960000 2136 67.3112000 66.6495000 78.9292000 41.8736000 41.6926000 61.2624000 2137 78.3892000 67.1729000 87.3236000 51.6818000 46.8106000 75.8911000 2138 20.2590000 5.11186000 21.5879000 2.23404000 1.28651000 3.75066000 2139 20.2058000 9.77212000 29.6106000 3.02511000 1.92425000 6.95974000 2140 18.2550000 14.2505000 35.5411000 3.66495000 2.62492000 10.1265000 2141 54.6845000 43.7030000 42.6767000 19.2054000 18.0937000 16.8985000 2142 68.1076000 51.2256000 69.3221000 33.3616000 28.2596000 45.1698000 2143 68.3393000 51.7880000 79.9033000 36.6418000 29.8957000 60.8083000 2144 39.4176000 38.6189000 43.8378000 12.6377000 12.7294000 17.0573000 2145 70.1339000 37.2791000 51.1641000 26.7132000 19.3869000 23.6182000 2146 72.2995000 40.3353000 84.4091000 36.9864000 24.8273000 67.2943000 2147 41.3175000 50.6185000 46.7801000 17.0746000 20.0844000 20.5199000 2148 47.3822000 58.9539000 45.6842000 22.0005000 27.2433000 20.7727000 2149 66.0373000 64.6401000 48.1865000 33.2242000 36.6449000 24.0192000 2150 73.0240000 78.4728000 58.3552000 46.3872000 53.9855000 36.3269000 2151 81.5510000 87.9150000 57.4946000 57.9390000 68.9067000 37.6899000 2152 54.1148000 35.1933000 8.26728000 14.2516000 12.7275000 2.41912000 2153 58.4182000 40.1238000 4.91039000 17.2410000 15.9802000 2.54042000 2154 83.1684000 69.3899000 11.5571000 43.1138000 45.5238000 7.70823000 2155 68.1721000 56.0317000 24.4423000 28.1035000 28.9416000 8.71049000 2156 73.5690000 56.8783000 59.5264000 36.4228000 33.1652000 34.0977000 2157 74.0364000 62.9500000 61.5577000 39.6793000 38.5496000 37.2344000 2158 83.6705000 67.9635000 68.8340000 50.3366000 47.3222000 47.3084000 2159 86.0406000 92.4829000 93.0801000 74.6157000 81.1500000 92.1192000 2160 93.5401000 91.9590000 98.8508000 82.5792000 84.4283000 104.093000 2161 62.4729000 70.9585000 76.9169000 40.8480000 44.4174000 58.7255000 2162 63.5267000 79.0055000 79.7333000 46.7082000 53.9955000 64.6580000 2163 35.6944000 49.8704000 58.1156000 17.2865000 19.5906000 30.9669000 2164 36.1609000 58.9599000 66.0027000 22.4908000 27.0473000 41.2291000 2165 3.52110000 34.9040000 27.3083000 4.77820000 7.64023000 6.95685000 2166 5.54695000 36.3450000 38.3560000 6.26438000 8.74474000 12.8648000 2167 45.3672000 40.4812000 37.4883000 14.1264000 14.2748000 12.9793000 2168 63.9744000 39.5802000 40.7896000 22.2785000 18.0954000 15.4188000 2169 35.1434000 22.8286000 52.2156000 9.94629000 6.89950000 23.0516000 2170 46.4594000 27.2259000 56.2435000 14.6791000 10.1901000 27.3456000 2171 54.5979000 31.1219000 62.1956000 19.7297000 13.6424000 34.2112000 2172 62.2072000 39.9552000 69.3254000 26.8781000 19.9801000 43.9179000 2173 80.0973000 62.0229000 71.3813000 45.6687000 40.7592000 49.7268000 2174 65.4397000 41.1695000 47.2972000 24.3867000 19.6735000 20.4754000 2175 70.2347000 49.8712000 51.0302000 30.2627000 26.4347000 24.6707000 2176 78.2933000 54.6062000 52.9968000 37.3772000 32.5221000 27.2807000 2177 93.6071000 53.2799000 59.9603000 50.0222000 38.1678000 34.8231000 2178 92.6092000 52.6631000 66.2638000 50.3681000 37.8563000 42.1735000 2179 93.7889000 75.1215000 85.5255000 67.0693000 60.9525000 74.6185000 2180 32.6657000 31.0101000 49.1932000 10.1242000 8.94697000 20.7427000 2181 39.8644000 30.1424000 59.0955000 13.6451000 10.3181000 30.4191000 2182 48.0588000 31.6514000 72.5307000 19.7757000 13.5206000 47.4378000 2183 47.2965000 42.3253000 72.4582000 21.9164000 18.2400000 48.1341000 2184 59.2926000 55.0327000 75.1244000 31.6901000 29.2378000 53.5885000 2185 83.0004000 61.0193000 77.2232000 48.9402000 41.6168000 58.2263000 2186 94.2258000 66.0973000 87.1907000 63.3619000 52.0757000 76.0527000 2187 24.8582000 34.9500000 4.46219000 5.71945000 8.25925000 1.62075000 2188 34.2685000 49.1635000 10.2056000 11.5324000 16.8785000 3.62876000 2189 45.1407000 68.6654000 9.45161000 22.5978000 34.4145000 6.32076000 2190 22.6139000 31.3135000 25.7077000 5.55292000 6.99264000 6.14228000 2191 36.3773000 41.1383000 36.1493000 11.4711000 13.1739000 12.1044000 2192 39.7576000 42.6505000 45.5478000 14.0129000 14.9389000 18.7119000 2193 44.6465000 49.3993000 51.5190000 18.4976000 20.1291000 24.5152000 2194 48.8227000 59.5345000 56.3843000 24.5977000 28.7240000 30.5435000 2195 52.1714000 62.4987000 63.9699000 28.7610000 32.5615000 39.4755000 2196 51.9360000 83.1491000 71.7137000 41.6646000 55.4525000 53.2331000 2197 52.5663000 84.0562000 78.1906000 44.3212000 57.4767000 63.0228000 2198 92.5131000 87.3039000 89.2722000 74.8008000 75.9736000 83.8584000 2199 92.8070000 8.47258000 19.0033000 35.6372000 18.7271000 4.58377000 2200 93.2634000 6.28261000 74.4107000 44.6543000 22.2288000 50.5063000 2201 95.0823000 6.61713000 89.3451000 50.9555000 24.9524000 75.4036000 2202 31.7096000 32.7619000 6.68192000 6.61773000 8.05374000 1.73770000 2203 69.4180000 47.7392000 8.50901000 25.2054000 23.2616000 3.90594000 2204 74.3672000 51.3328000 30.7496000 30.6380000 27.6633000 11.0105000 2205 86.7334000 59.5243000 36.0719000 42.9969000 38.5613000 15.2992000 2206 89.3174000 64.4007000 59.4560000 50.8703000 45.3418000 35.6099000 2207 65.5496000 47.5436000 53.3398000 27.2793000 23.7428000 26.4432000 2208 65.2401000 82.7068000 64.8392000 45.8916000 57.4128000 44.4212000 2209 14.2996000 22.8522000 15.6501000 2.65166000 3.58921000 2.55177000 2210 11.8505000 31.6992000 92.4793000 18.5827000 12.1835000 80.5902000 2211 12.0444000 48.4752000 94.4582000 23.5691000 20.9462000 85.9121000 2212 11.5844000 73.7025000 93.4462000 33.9621000 42.3962000 87.4999000 2213 12.5408000 83.5412000 92.3310000 39.4500000 53.9289000 87.2591000 2214 16.2043000 29.2214000 33.4726000 5.06358000 6.10561000 9.57908000 2215 23.8204000 31.0764000 35.7278000 6.61438000 7.36769000 10.9940000 2216 46.3542000 25.1348000 28.9898000 10.5713000 8.03708000 7.45932000 2217 56.7955000 26.8032000 38.0762000 15.8979000 11.0471000 12.6264000 2218 67.6870000 29.2417000 41.1318000 22.1773000 14.8320000 15.0280000 2219 89.5491000 58.0099000 48.7735000 46.3469000 39.1748000 24.3105000 2220 22.5508000 44.7051000 7.15651000 7.84394000 12.9627000 2.67128000 2221 32.0961000 53.0852000 74.5505000 21.4843000 22.9379000 52.0675000 2222 75.4587000 75.2406000 87.7481000 54.0829000 54.2684000 77.9701000 2223 82.7609000 82.5939000 95.2868000 66.2454000 66.7210000 94.1619000 2224 23.1828000 11.8423000 26.4735000 3.30785000 2.28305000 5.65669000 2225 35.7023000 7.84710000 53.9879000 9.13185000 4.55299000 24.3162000 2226 38.9352000 93.2847000 56.5234000 40.7553000 65.7587000 36.9829000 2227 9.92395000 70.8037000 18.3154000 17.3459000 33.2754000 8.16658000 2228 14.1791000 84.5775000 23.2299000 25.9973000 49.6361000 12.3795000 2229 15.4506000 87.9853000 36.1936000 29.5459000 54.7187000 19.1959000 2230 62.5584000 89.5743000 47.2422000 45.6754000 64.5039000 27.9604000 2231 89.1385000 92.8314000 72.8491000 70.8132000 80.3210000 58.0930000 2232 92.4272000 93.1160000 79.3569000 75.6030000 82.8868000 68.1119000 2233 10.9497000 14.7220000 20.4072000 1.77544000 1.85083000 3.51644000 2234 15.9496000 15.2610000 19.0484000 2.16977000 2.12870000 3.15538000 2235 12.6827000 39.4876000 16.6342000 5.65524000 9.73007000 3.80975000 2236 11.1249000 57.6697000 21.0672000 11.5892000 21.3988000 6.97497000 2237 41.7384000 61.9927000 23.8879000 19.0747000 27.9064000 8.78377000 2238 70.7776000 64.0062000 24.0246000 32.9201000 36.3725000 9.73811000 2239 83.0293000 65.9047000 52.2386000 45.3335000 43.6833000 28.3080000 2240 21.6749000 16.5496000 55.6565000 7.30146000 4.44093000 26.0327000 2241 38.7726000 22.7977000 60.5470000 12.5162000 8.03125000 31.6340000 2242 63.6771000 22.8219000 67.8710000 24.0491000 13.7878000 40.9637000 2243 22.5572000 3.43879000 14.4489000 2.14402000 1.20869000 1.85748000 2244 42.6012000 18.3119000 10.2210000 7.45402000 5.31279000 1.61383000 2245 55.1666000 37.6848000 22.6422000 15.8783000 14.3210000 5.89519000 2246 56.7115000 43.8296000 25.3478000 18.3213000 17.8994000 7.43516000 2247 64.4382000 59.4403000 40.4047000 28.9841000 31.2246000 17.3394000 2248 74.5541000 64.0062000 41.4829000 36.9891000 38.2694000 19.0133000 2249 13.4782000 5.78931000 5.76291000 0.92367000 0.71545300 0.53069800 2250 9.60231000 4.06566000 11.5858000 0.72936100 0.51646600 1.25904000 2251 14.9731000 11.1873000 9.85913000 1.41060000 1.34176000 1.11226000 2252 18.3694000 10.5537000 2.92058000 1.59603000 1.39701000 0.39976500 2253 29.0847000 21.6690000 5.10059000 4.28796000 4.24824000 0.97525400 2254 28.1011000 24.8321000 9.77622000 4.61703000 5.02490000 1.64196000 2255 37.7430000 72.1532000 32.9256000 23.5849000 37.4146000 14.3567000 2256 64.8765000 72.4236000 62.0362000 39.0759000 45.0843000 39.0752000 2257 81.7035000 79.5368000 68.8814000 55.2224000 59.2065000 49.4070000 2258 90.9028000 85.8739000 75.7907000 68.1941000 71.6367000 60.8388000 2259 52.0673000 47.2780000 44.7678000 19.4668000 19.7546000 18.7538000 2260 64.8297000 52.5099000 43.7336000 26.9921000 26.2157000 18.8264000 2261 72.8198000 59.7429000 50.3551000 35.3818000 34.5388000 25.3639000 2262 25.8194000 21.3993000 22.5693000 4.33404000 4.14517000 4.51468000 2263 27.4544000 20.5151000 33.4971000 5.42454000 4.44913000 9.25342000 2264 43.5962000 20.5959000 92.6885000 23.0175000 11.9694000 80.7219000 2265 30.1333000 6.60425000 69.0516000 11.0892000 5.10503000 41.5159000 2266 45.3533000 8.89352000 67.7412000 14.9730000 7.29675000 40.0203000 2267 48.9326000 9.20461000 93.1965000 24.1200000 11.1276000 81.4936000 2268 94.2052000 80.3526000 94.3151000 73.6188000 68.5005000 92.1687000 2269 16.9368000 17.1085000 12.9905000 2.16699000 2.40179000 1.79686000 2270 12.4851000 43.4543000 56.1774000 11.2295000 13.6212000 28.1225000 2271 4.33339000 42.5320000 63.4087000 12.0417000 13.4894000 36.0059000 2272 14.8037000 34.2923000 52.1984000 8.47416000 8.99137000 23.5171000 2273 22.2658000 40.1610000 65.3956000 13.4174000 13.2273000 38.2865000 2274 7.61112000 25.4760000 30.6621000 3.54622000 4.47116000 7.91869000 2275 8.94731000 23.9359000 33.1101000 3.63649000 4.16785000 9.08898000 2276 24.8070000 29.1386000 40.7340000 7.02671000 6.99966000 14.0428000 2277 33.9204000 27.4120000 62.2631000 12.3043000 8.86484000 33.7579000 2278 74.8250000 26.8360000 63.1055000 29.9563000 17.8104000 35.5384000 2279 87.2827000 32.6969000 66.4972000 40.6379000 24.7541000 40.4518000 2280 91.5437000 57.0278000 72.8859000 52.7855000 41.3192000 51.5678000 2281 94.3236000 73.6142000 77.4312000 64.1656000 58.5165000 61.0053000 2282 86.3841000 78.6117000 71.3023000 58.7841000 60.1509000 52.6696000 2283 85.5306000 78.1787000 76.8886000 59.4190000 59.9203000 60.6963000 2284 85.0740000 89.8410000 86.3268000 69.5752000 76.0062000 78.8027000 2285 4.85927000 2.72990000 8.20406000 0.36718700 0.28606200 0.74092400 2286 5.59678000 7.20299000 12.9883000 0.68372500 0.65066100 1.53663000 2287 6.70738000 9.38281000 28.6286000 1.76072000 1.25144000 6.45291000 2288 5.09983000 4.84341000 29.2005000 1.55324000 0.85767000 6.64366000 2289 62.3717000 40.8285000 28.6025000 20.4703000 17.7806000 8.64605000 2290 64.9350000 50.1038000 28.0641000 24.4832000 23.9021000 9.38030000 2291 73.2032000 76.6684000 26.8309000 41.0963000 50.2018000 13.0600000 2292 46.6652000 45.2185000 20.8930000 14.4218000 16.5127000 5.82889000 2293 58.2489000 65.6996000 28.8770000 27.4495000 34.6680000 11.6591000 2294 69.6109000 65.2511000 74.0339000 41.1149000 40.4860000 53.6680000 2295 79.9734000 72.6236000 83.8870000 54.3959000 52.4554000 70.8146000 2296 94.1842000 81.2351000 86.0882000 71.1956000 68.3961000 76.8275000 2297 8.42207000 7.37961000 18.6605000 1.07387000 0.83395900 2.85585000 2298 8.38940000 5.78760000 35.2034000 2.32050000 1.23316000 9.73691000 2299 13.2745000 15.1675000 70.9044000 9.68848000 5.09521000 44.0820000 2300 9.96019000 24.9318000 92.5262000 17.3490000 9.88244000 80.3019000 2301 31.7567000 24.2749000 92.7360000 20.3157000 11.2662000 80.8209000 2302 67.2145000 33.7122000 90.1400000 34.4673000 21.0587000 77.0025000 2303 92.8893000 38.2686000 92.5234000 54.3409000 32.6957000 82.7512000 2304 49.6757000 20.4212000 51.1101000 13.9866000 8.57074000 22.1523000 2305 75.7880000 25.6829000 51.2662000 28.0568000 16.8429000 23.1485000 2306 76.2056000 16.4486000 26.4595000 24.1870000 13.5783000 6.73135000 2307 67.0036000 26.4834000 5.75491000 18.8884000 12.7560000 1.90758000 2308 84.7686000 47.9762000 12.2352000 35.6197000 28.7289000 4.97936000 2309 94.4973000 47.8138000 20.7982000 43.8613000 32.8575000 7.40368000 2310 41.8773000 9.92594000 33.9337000 8.09368000 4.50260000 9.35842000 2311 47.1584000 6.75014000 40.9972000 10.5112000 5.43018000 13.7353000 2312 46.9779000 47.6361000 42.8037000 17.3795000 18.8751000 17.2367000 2313 47.5042000 52.0365000 48.5648000 19.8767000 22.2168000 22.2560000 2314 55.5116000 51.9876000 61.3155000 25.4376000 24.7811000 35.0518000 2315 38.6989000 64.4759000 62.8834000 24.8344000 31.8828000 38.2627000 2316 37.4440000 63.7808000 74.7097000 27.1498000 32.2635000 53.8016000 2317 68.2807000 71.4563000 75.1927000 43.7368000 46.3491000 56.3576000 2318 79.3583000 72.7791000 78.6607000 52.4192000 51.7487000 62.2254000 2319 59.8239000 19.3486000 17.9775000 14.6562000 9.15160000 3.56300000 2320 61.9579000 19.5130000 35.7307000 17.1232000 10.2878000 11.0059000 2321 74.4554000 20.4289000 40.8688000 24.9439000 14.4000000 14.6192000 2322 85.8944000 32.0678000 50.7309000 36.2114000 22.6632000 23.3616000 2323 88.3015000 45.3506000 56.4277000 42.3357000 30.4574000 29.9887000 2324 88.7660000 75.4595000 56.8003000 55.5156000 56.1509000 34.6353000 2325 93.1070000 75.0172000 60.8918000 59.7008000 57.8448000 39.1482000 2326 16.3823000 21.7975000 6.24248000 2.43225000 3.31249000 0.99788800 2327 14.6939000 19.3994000 38.9165000 4.16077000 3.54299000 12.3278000 2328 10.7902000 23.4208000 44.8358000 5.12250000 4.66484000 16.6482000 2329 12.3625000 26.4743000 52.7479000 6.95629000 6.10978000 23.5516000 2330 57.5546000 34.7645000 71.8451000 24.1011000 16.6956000 46.8624000 2331 91.3265000 33.2982000 80.4710000 47.8517000 28.2076000 60.8056000 2332 65.7351000 25.8923000 62.4237000 24.2917000 14.6938000 34.4375000 2333 82.5310000 23.8642000 64.2760000 35.0624000 19.7708000 37.0437000 2334 25.8220000 47.5610000 30.9389000 10.5143000 15.4577000 9.80544000 2335 27.1070000 46.4599000 36.5648000 10.9824000 15.1315000 12.7531000 2336 38.3525000 65.7435000 39.5483000 21.2921000 31.3944000 17.2096000 2337 6.46887000 15.8439000 4.30922000 1.05492000 1.68324000 0.58602300 2338 2.82292000 12.3142000 6.28898000 0.68464900 1.08543000 0.66473100 2339 3.72972000 8.35617000 10.3999000 0.58490900 0.68582800 1.10958000 2340 11.6725000 9.17069000 15.3341000 1.21040000 1.04755000 2.06702000 2341 16.3216000 12.1957000 14.0327000 1.74714000 1.59589000 1.86770000 2342 36.9075000 43.3236000 60.8960000 16.1939000 16.0159000 33.3715000 2343 35.8647000 49.3481000 77.1099000 21.8328000 21.1408000 55.5284000 2344 37.8531000 70.0045000 85.0491000 33.4058000 39.5605000 71.4325000 2345 56.7260000 76.5247000 93.0705000 46.4910000 51.2106000 87.8034000 2346 69.7321000 78.3140000 92.1777000 53.9023000 56.6127000 86.7197000 2347 51.7710000 40.5804000 51.6305000 18.5571000 16.3597000 23.8865000 2348 57.9345000 68.1144000 54.0834000 31.8207000 38.2559000 29.7176000 2349 63.3578000 71.4621000 66.0923000 38.7021000 44.0313000 43.7654000 2350 10.2119000 34.8867000 21.8400000 4.70187000 7.64025000 4.92851000 2351 8.63355000 62.9540000 33.1735000 14.6164000 26.1448000 12.7851000 2352 9.71839000 82.9940000 82.0902000 35.3918000 51.7230000 68.6509000 2353 10.3392000 93.8365000 93.4475000 46.8528000 68.3067000 91.8241000 2354 12.1193000 21.0649000 21.1751000 2.53386000 3.16798000 3.96705000 2355 16.8664000 29.4444000 18.7959000 4.05008000 5.76998000 3.68822000 2356 46.0815000 31.4766000 20.3779000 10.9122000 9.84200000 4.56884000 2357 90.3146000 62.7323000 18.1399000 45.7952000 42.2053000 8.34530000 2358 63.8225000 38.4062000 12.3995000 19.6709000 16.5872000 3.50510000 2359 71.2327000 43.7788000 11.6509000 25.1932000 21.5038000 4.03195000 2360 92.2904000 46.4523000 38.8450000 43.1623000 31.6896000 15.6604000 2361 45.8790000 15.8934000 54.6630000 12.8001000 7.21090000 25.2918000 2362 86.9355000 15.2492000 59.2321000 36.3409000 19.1635000 31.0784000 2363 94.2719000 14.6547000 81.2351000 48.0241000 24.4575000 61.3155000 2364 92.4051000 6.45069000 36.3853000 36.6318000 18.9458000 12.0327000 2365 91.8441000 9.51917000 57.0471000 39.4802000 20.2549000 28.8076000 2366 91.9420000 22.8119000 55.1875000 40.3919000 22.5318000 27.3132000 2367 91.6774000 38.2903000 64.8005000 45.0078000 28.8522000 38.9091000 2368 40.4340000 15.5741000 27.2313000 7.44325000 4.82401000 6.24120000 2369 41.4802000 44.0466000 25.6289000 12.7109000 15.0951000 7.29873000 2370 43.4251000 70.5678000 55.4728000 27.6722000 37.9182000 31.2365000 2371 42.5365000 72.2408000 73.4200000 32.4163000 41.1825000 53.3755000 2372 25.8990000 46.7714000 55.0747000 13.6426000 16.3222000 27.4116000 2373 24.9361000 51.8314000 66.5248000 17.5810000 20.5115000 40.8817000 2374 24.6675000 60.8186000 80.6047000 24.8607000 28.9563000 62.3768000 2375 24.3468000 67.1989000 92.6192000 31.7839000 36.3509000 84.8303000 2376 51.3950000 68.0257000 94.5688000 40.2973000 41.2537000 89.1714000 2377 8.37575000 15.2178000 62.2705000 7.27452000 4.09728000 33.1113000 2378 10.2368000 29.0940000 68.2105000 10.5221000 8.19653000 41.0381000 2379 9.88696000 50.2010000 70.9249000 16.4501000 18.9793000 46.4336000 2380 26.2658000 72.8092000 75.0047000 29.2301000 39.9385000 55.6073000 2381 36.8372000 83.8152000 85.1346000 41.1186000 55.3422000 74.2211000 2382 74.7852000 94.1349000 90.6258000 67.0163000 79.1555000 87.4143000 2383 21.9262000 44.2876000 23.0063000 8.30357000 12.9448000 6.15354000 2384 32.4390000 92.0187000 25.3227000 34.0883000 61.4134000 14.9926000 2385 44.8998000 93.2714000 27.5685000 38.6438000 65.1095000 16.3732000 2386 44.8759000 93.2868000 83.4912000 49.5280000 69.4807000 73.6829000 2387 22.6301000 45.0117000 49.3455000 11.5871000 14.6029000 21.8887000 2388 37.9363000 56.3608000 67.4524000 22.2770000 25.3656000 42.7515000 2389 47.0171000 63.4673000 67.8665000 28.1693000 32.7878000 44.4075000 2390 34.3909000 45.6826000 49.8253000 14.1312000 16.1973000 22.4773000 2391 45.7829000 47.8596000 66.0048000 21.3623000 20.5320000 40.0338000 2392 53.7766000 47.6349000 82.1081000 28.7851000 23.7398000 63.6281000 2393 3.81439000 12.1676000 22.2942000 1.34696000 1.33826000 4.03811000 2394 12.2061000 2.47366000 31.3377000 2.08207000 1.00824000 7.65674000 2395 16.0697000 6.86822000 34.3175000 2.86283000 1.58413000 9.28042000 2396 18.7583000 4.45271000 39.0304000 3.61170000 1.78267000 12.0906000 2397 41.6714000 30.9612000 78.5692000 19.2317000 12.8510000 56.3230000 2398 49.9515000 59.1042000 81.1785000 31.0900000 31.0869000 63.3936000 2399 32.9292000 38.8002000 50.5792000 12.0695000 12.3798000 22.5138000 2400 38.2319000 38.0737000 52.2465000 13.5138000 12.8336000 24.0373000 2401 47.0142000 45.7268000 56.1045000 19.0071000 18.6003000 28.6005000 2402 93.3799000 44.8347000 80.9154000 52.5363000 34.7828000 62.5483000 2403 64.4130000 9.93648000 31.2142000 17.1518000 9.20497000 8.38490000 2404 65.3517000 13.6880000 39.8547000 18.8413000 10.3278000 13.4748000 2405 73.0847000 15.1370000 47.1571000 24.4581000 13.2750000 19.1219000 2406 76.5373000 48.8765000 91.2636000 44.5036000 32.0681000 80.7235000 2407 9.92164000 49.6184000 35.4325000 9.79613000 16.0105000 12.3251000 2408 8.91837000 51.7307000 91.4261000 23.3100000 22.5462000 80.3119000 2409 9.14735000 67.2638000 95.3955000 31.2336000 35.9921000 90.2949000 2410 52.9716000 91.9069000 92.8532000 54.7776000 70.3063000 90.6285000 2411 75.7865000 92.3223000 93.8353000 67.5031000 77.2747000 93.2319000 2412 44.0362000 56.2182000 61.2816000 22.6170000 25.6238000 35.3245000 2413 64.0541000 57.7555000 69.0343000 33.4892000 31.9120000 45.4867000 2414 31.8658000 26.4267000 28.7445000 6.65815000 6.30631000 7.22186000 2415 61.8025000 34.7651000 26.8693000 18.6246000 14.7400000 7.41513000 2416 70.6373000 35.4468000 32.5997000 24.1080000 17.7250000 10.3611000 2417 70.0175000 80.1215000 73.3684000 49.1284000 56.4528000 55.3686000 2418 7.58721000 20.5103000 10.2713000 1.70551000 2.70031000 1.41978000 2419 10.4700000 41.4929000 8.19928000 5.71230000 10.5504000 2.43973000 2420 13.7449000 94.1498000 16.6121000 32.2992000 62.8908000 12.6606000 2421 12.2130000 94.6424000 65.0392000 38.9887000 66.1463000 46.7140000 2422 14.9702000 61.4870000 46.6426000 16.1515000 25.7874000 21.5586000 2423 11.9355000 65.0619000 69.5795000 22.1427000 30.7099000 46.5768000 2424 5.18094000 63.6889000 62.2867000 19.4016000 28.5658000 37.2133000 2425 16.9596000 70.9952000 85.4179000 30.1640000 38.6304000 72.0664000 2426 18.5214000 92.2135000 87.7631000 44.3525000 65.4734000 80.6716000 2427 17.7274000 35.3110000 19.9862000 5.34731000 8.12025000 4.41390000 2428 37.9973000 66.5974000 20.0341000 19.8582000 31.4568000 8.16750000 2429 77.1776000 90.3183000 22.7417000 52.1197000 68.9142000 14.5562000 2430 90.8531000 95.5363000 28.1082000 66.5671000 82.0355000 18.4019000 2431 22.0087000 21.6517000 5.12810000 3.08687000 3.62572000 0.92079800 2432 27.4063000 32.3384000 87.2186000 18.8063000 12.6971000 70.8495000 2433 45.5803000 32.8044000 87.6709000 23.7691000 15.3731000 71.9208000 2434 60.8713000 41.5980000 91.3337000 33.4131000 23.1916000 79.7280000 2435 92.7668000 56.1653000 91.5739000 59.4135000 43.5546000 82.7490000 2436 33.0610000 13.1566000 21.4111000 4.92291000 3.28966000 3.93943000 2437 90.7440000 20.2274000 21.7122000 34.9943000 19.7581000 5.63058000 2438 91.0780000 76.0791000 20.3093000 53.2676000 56.0294000 11.2317000 2439 91.6729000 84.8256000 43.8891000 61.4088000 67.8898000 25.1728000 2440 41.9084000 32.7205000 29.2968000 10.4344000 9.87576000 7.96046000 2441 41.5414000 32.4975000 36.1405000 10.9576000 10.0024000 11.5144000 2442 62.2737000 8.11396000 16.5407000 14.9432000 8.04589000 2.97363000 2443 61.9417000 6.13290000 25.0788000 15.1962000 7.99606000 5.58591000 2444 77.0921000 6.72062000 29.4648000 24.3968000 12.7328000 7.85356000 2445 78.5918000 84.2411000 37.2745000 50.2486000 61.6683000 20.0931000 2446 78.5282000 92.9325000 44.4287000 57.1582000 74.0660000 26.9920000 2447 86.8316000 94.4220000 44.8328000 64.3898000 79.4370000 27.9550000 2448 93.1098000 59.9135000 24.4172000 47.3028000 41.1428000 10.0449000 2449 92.4954000 57.6597000 31.4865000 46.4462000 39.2734000 12.7792000 2450 96.0308000 57.4782000 46.1593000 51.2355000 41.4296000 22.3446000 2451 79.1043000 48.1465000 36.6701000 33.3350000 27.4286000 14.0116000 2452 82.3480000 62.8887000 35.1866000 41.0439000 39.7037000 15.1126000 2453 33.0981000 38.0026000 14.4082000 8.28791000 10.5673000 3.33160000 2454 34.2767000 75.2562000 9.54758000 22.9632000 39.7675000 7.34827000 2455 76.7811000 74.3129000 19.0991000 41.5638000 48.5368000 10.0512000 2456 96.1641000 84.9197000 16.4031000 62.8438000 69.0105000 12.1825000 2457 94.2214000 83.2212000 31.3709000 61.0700000 66.3457000 17.1759000 2458 40.9849000 28.6230000 13.6345000 8.45070000 7.85823000 2.64390000 2459 42.3072000 28.6599000 6.77971000 8.66239000 7.99927000 1.62964000 2460 44.8465000 38.2017000 4.90232000 11.3689000 12.2560000 2.13019000 2461 44.7662000 47.6229000 11.6247000 14.0800000 17.4611000 3.83238000 2462 52.1658000 49.9127000 9.64986000 17.4733000 20.3078000 3.89712000 2463 60.3819000 95.6709000 45.1241000 48.7549000 72.7805000 27.7168000 2464 26.0937000 57.6202000 45.7000000 15.8879000 23.2944000 20.3448000 2465 30.4706000 67.1421000 58.0117000 23.0574000 32.9466000 33.1301000 2466 69.1293000 70.4253000 60.8453000 40.1333000 44.1090000 37.4755000 2467 43.1863000 27.8039000 23.0223000 9.47469000 8.12981000 5.16812000 2468 93.0437000 29.9459000 24.2536000 38.4903000 23.6193000 7.06686000 2469 92.9024000 29.1342000 43.1876000 40.1847000 24.0573000 17.3139000 2470 40.7773000 21.5625000 17.3373000 7.53129000 5.85687000 3.13739000 2471 44.3454000 18.6478000 26.3940000 8.88162000 6.00309000 6.04826000 2472 51.5704000 16.3955000 29.1598000 11.5083000 7.00825000 7.28782000 2473 64.9228000 20.2378000 27.8535000 17.9822000 10.9373000 7.12902000 2474 84.4710000 18.1792000 91.4626000 43.8740000 22.3897000 79.2691000 2475 54.1131000 10.2439000 63.2017000 17.2988000 8.72668000 34.5654000 2476 54.9143000 27.5201000 75.1336000 22.4894000 13.7686000 51.1013000 2477 26.2234000 8.19363000 18.9902000 3.11428000 1.93798000 3.05254000 2478 26.4935000 8.26927000 23.2297000 3.41870000 2.07117000 4.38915000 2479 30.5023000 5.24358000 21.2017000 3.94026000 2.17552000 3.70973000 2480 41.2866000 4.62644000 25.7806000 6.96394000 3.66960000 5.45575000 2481 53.3819000 8.75468000 39.5805000 12.8129000 6.77039000 12.9251000 2482 57.7999000 8.84835000 71.5954000 20.9023000 10.2369000 45.4364000 2483 78.8301000 9.70057000 83.6081000 36.4699000 17.9213000 64.6190000 2484 82.5741000 7.21220000 93.0929000 42.3043000 20.3702000 82.1164000 2485 83.5923000 61.2193000 92.4726000 54.5043000 44.0298000 84.8315000 2486 39.7869000 16.0455000 31.7782000 7.69491000 4.96872000 8.34461000 2487 39.8184000 15.7451000 39.4325000 8.51831000 5.25716000 12.7630000 2488 38.5771000 17.8286000 70.6819000 14.2946000 7.83450000 44.0640000 2489 21.2990000 20.4075000 34.9645000 4.57735000 3.97601000 10.0119000 2490 18.1993000 45.9642000 85.5403000 20.1992000 18.4285000 68.9060000 2491 22.8553000 54.6928000 88.3726000 24.6958000 24.9614000 74.9970000 2492 34.5630000 62.5627000 94.8277000 32.5218000 33.4587000 88.5951000 2493 43.1076000 70.3035000 93.7004000 38.1615000 41.8851000 87.6804000 2494 43.5281000 78.6785000 93.1049000 42.6971000 51.1148000 88.0523000 2495 17.7878000 22.7498000 49.5841000 6.40482000 5.11040000 20.5358000 2496 21.4831000 24.7108000 61.4345000 9.39735000 6.78472000 32.5588000 2497 30.1724000 38.3066000 78.8213000 17.9333000 14.4669000 57.0994000 2498 8.56390000 4.55182000 42.6178000 3.19674000 1.51948000 14.5012000 2499 10.9437000 7.13031000 59.5301000 6.34534000 2.94385000 29.8532000 2500 8.02039000 8.99249000 85.1752000 13.1502000 5.78265000 66.1999000 2501 27.6351000 39.0139000 92.5697000 22.2122000 16.3935000 81.3865000 2502 38.8256000 55.8902000 91.3241000 29.5833000 28.0284000 80.8448000 2503 53.3917000 78.8554000 91.0495000 45.6689000 52.8907000 84.2727000 2504 33.8952000 45.6639000 39.9117000 12.5605000 15.5465000 14.8504000 2505 46.9970000 47.6241000 38.5276000 16.8306000 18.6503000 14.3290000 2506 51.3889000 59.6810000 38.6925000 22.8602000 28.2393000 15.9667000 2507 54.8268000 75.4358000 41.9587000 32.3632000 44.4760000 20.7865000 2508 67.5870000 76.7393000 43.9171000 39.6813000 49.3168000 22.7533000 2509 64.6666000 83.3629000 43.0257000 41.9805000 56.4809000 23.3592000 2510 94.0688000 93.0376000 50.0585000 70.1203000 80.7631000 32.1938000 2511 31.1597000 7.84163000 4.76483000 3.58078000 2.21008000 0.59086100 2512 29.5358000 4.23693000 8.33700000 3.18202000 1.79896000 0.90182700 2513 48.9685000 18.5308000 6.40750000 9.56203000 6.44289000 1.24345000 2514 68.6361000 21.2848000 8.73826000 19.1655000 11.8423000 2.04928000 2515 79.3188000 18.7703000 7.15549000 25.5930000 14.7435000 2.08031000 2516 79.4974000 42.4728000 2.56216000 29.9846000 23.4639000 3.13705000 2517 80.4043000 54.0004000 8.89051000 34.3839000 31.1378000 4.99187000 2518 82.6830000 61.8628000 8.42210000 39.1436000 38.2514000 6.05324000 2519 93.8585000 65.9637000 8.73469000 49.9015000 46.5536000 7.12907000 2520 94.0761000 94.1782000 8.73299000 67.2517000 80.9766000 12.8582000 2521 8.84297000 30.7748000 46.2206000 6.36241000 6.99787000 18.1115000 2522 8.96708000 33.9472000 46.0907000 6.96437000 8.22256000 18.2133000 2523 5.18553000 47.2209000 46.1411000 10.1838000 14.9182000 19.3754000 2524 11.0273000 71.1747000 47.2373000 20.5216000 34.8618000 23.5604000 2525 9.79202000 87.0792000 48.7038000 30.1813000 53.9317000 27.9507000 2526 55.0108000 86.9480000 63.7317000 43.4721000 60.3156000 43.7719000 2527 62.0473000 93.4589000 65.2432000 51.7247000 71.3903000 47.3061000 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.0000 100.0000 100.0000 95.04580 99.99850 108.8960 1 0.000000 46.29880 100.0000 24.53120 20.18940 97.20680 2 100.0000 0.000000 76.46220 51.09030 25.20480 53.78810 3 0.000000 0.000000 55.42670 4.831880 1.932810 25.44840 4 100.0000 64.43180 0.000000 54.57220 47.92310 6.374840 5 0.000000 34.08410 0.000000 3.400750 6.801800 1.133550 6 78.93020 0.000000 0.000000 24.16320 12.45890 1.132090 7 5.026380 4.490600 3.592920 0.338157 0.353794 0.312873 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "December 18, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.0458 99.9985 108.896 1 0.00000 100.000 100.000 53.8013 78.7321 106.963 2 100.000 0.00000 100.000 59.2906 28.4850 96.9776 3 0.00000 0.00000 100.000 18.0462 7.21869 95.0452 4 100.000 100.000 0.00000 76.9996 92.7798 13.8504 5 0.00000 100.000 0.00000 35.7552 71.5134 11.9180 6 100.000 0.00000 0.00000 41.2445 21.2664 1.93239 7 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 8 50.0000 50.0000 50.0000 20.3442 21.4043 23.3087 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/ti1/d3-e4-s41-g121-m11-b11-f0.ti1000644 000765 000000 00000452350 12237536424 022110 0ustar00svpwheel000000 000000 CTI1 ORIGINATOR "Argyll targen" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "11" CREATED "Sat Oct 19 04:56:23 2013" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "121" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "11" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "41" KEYWORD "COLOR_REP" COLOR_REP "RGB" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 2527 BEGIN_DATA 1 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 2 0.000000 75.00000 0.000000 19.50000 37.99480 7.166710 3 0.000000 87.50000 0.000000 27.15900 53.31060 9.719720 4 0.000000 92.50000 0.000000 30.66220 60.31620 10.88750 5 0.000000 30.00000 10.00000 3.772160 6.256990 2.807790 6 10.00000 30.00000 0.000000 4.002270 6.396360 1.883530 7 30.00000 30.00000 10.00000 6.762520 7.798830 2.947920 8 35.83330 35.83330 35.83330 10.92970 11.44600 12.37920 9 36.66670 36.66670 36.66670 11.41690 11.95860 12.93760 10 55.00000 65.00000 45.00000 28.25510 34.67030 22.05170 11 0.000000 12.50000 0.000000 1.508060 2.015980 1.169350 12 0.000000 10.00000 10.00000 1.533980 1.781260 2.061730 13 10.00000 0.000000 10.00000 1.588350 1.282640 1.962610 14 15.00000 0.000000 0.000000 1.800540 1.412760 1.037510 15 17.50000 0.000000 0.000000 2.055170 1.544050 1.049440 16 20.00000 0.000000 0.000000 2.351670 1.696930 1.063340 17 20.00000 0.000000 10.00000 2.530790 1.768560 2.006780 18 20.00000 10.00000 0.000000 2.706530 2.406550 1.181620 19 20.00000 10.00000 10.00000 2.885650 2.478180 2.125060 20 22.50000 0.000000 0.000000 2.691820 1.872310 1.079280 21 25.00000 0.000000 0.000000 3.077280 2.071050 1.097340 22 40.00000 10.00000 0.000000 6.779900 4.506790 1.372500 23 40.00000 10.00000 10.00000 6.959020 4.578420 2.315930 24 40.00000 0.000000 0.000000 6.425040 3.797170 1.254210 25 40.00000 0.000000 10.00000 6.604160 3.868800 2.197650 26 50.00000 10.00000 0.000000 10.09420 6.215650 1.527800 27 50.00000 10.00000 10.00000 10.27330 6.287290 2.471240 28 50.00000 0.000000 0.000000 9.739340 5.506030 1.409510 29 50.00000 0.000000 10.00000 9.918460 5.577670 2.352950 30 60.00000 10.00000 0.000000 14.36120 8.415720 1.727740 31 60.00000 10.00000 10.00000 14.54030 8.487360 2.671180 32 60.00000 0.000000 0.000000 14.00630 7.706100 1.609450 33 60.00000 0.000000 10.00000 14.18540 7.777740 2.552890 34 70.00000 10.00000 0.000000 19.64630 11.14070 1.975390 35 70.00000 10.00000 10.00000 19.82540 11.21240 2.918830 36 70.00000 0.000000 0.000000 19.29140 10.43110 1.857110 37 70.00000 0.000000 10.00000 19.47060 10.50280 2.800540 38 80.00000 10.00000 0.000000 26.00920 14.42150 2.273550 39 80.00000 10.00000 10.00000 26.18840 14.49310 3.216990 40 80.00000 0.000000 0.000000 25.65440 13.71190 2.155260 41 80.00000 0.000000 10.00000 25.83350 13.78350 3.098700 42 90.00000 10.00000 0.000000 33.50500 18.28640 2.624790 43 90.00000 10.00000 10.00000 33.68420 18.35800 3.568230 44 90.00000 0.000000 0.000000 33.15020 17.57670 2.506500 45 90.00000 0.000000 10.00000 33.32930 17.64840 3.449940 46 92.50000 0.000000 0.000000 35.20720 18.63740 2.602890 47 95.00000 0.000000 0.000000 37.33910 19.73650 2.702790 48 35.00000 15.00000 25.00000 6.706070 4.867140 6.212550 49 10.83330 10.83330 10.83330 2.069530 2.125150 2.225660 50 0.000000 0.000000 2.500000 1.034580 1.013830 1.182140 51 0.000000 5.000000 0.000000 1.139350 1.278670 1.046450 52 0.000000 7.500000 0.000000 1.232660 1.465260 1.077550 53 10.00000 10.00000 0.000000 1.764090 1.920620 1.137460 54 0.000000 15.00000 0.000000 1.694180 2.388160 1.231390 55 0.000000 17.50000 0.000000 1.914970 2.829690 1.304990 56 0.000000 20.00000 0.000000 2.172080 3.343830 1.390700 57 0.000000 22.50000 0.000000 2.467040 3.933660 1.489020 58 0.000000 25.00000 0.000000 2.801280 4.602050 1.600430 59 0.000000 27.50000 0.000000 3.176180 5.351750 1.725400 60 0.000000 32.50000 0.000000 4.053110 7.105360 2.017710 61 0.000000 35.00000 0.000000 4.557570 8.114140 2.185870 62 0.000000 37.50000 0.000000 5.107580 9.214000 2.369200 63 0.000000 40.00000 10.00000 5.883350 10.47880 3.511530 64 0.000000 40.00000 0.000000 5.704230 10.40710 2.568090 65 0.000000 45.00000 0.000000 7.041720 13.08170 3.013920 66 0.000000 47.50000 0.000000 7.784590 14.56730 3.261550 67 0.000000 50.00000 10.00000 8.757290 16.22590 4.469520 68 0.000000 50.00000 0.000000 8.578170 16.15420 3.526080 69 0.000000 52.50000 0.000000 9.423420 17.84450 3.807830 70 0.000000 55.00000 0.000000 10.32120 19.63990 4.107110 71 0.000000 57.50000 0.000000 11.27260 21.54220 4.424210 72 0.000000 60.00000 0.000000 12.27820 23.55330 4.759440 73 0.000000 62.50000 0.000000 13.33910 25.67470 5.113060 74 0.000000 70.00000 10.00000 17.04020 32.78940 7.230520 75 10.00000 70.00000 0.000000 17.27040 32.92880 6.306260 76 0.000000 70.00000 0.000000 16.86110 32.71780 6.287090 77 0.000000 72.50000 0.000000 18.15100 35.29710 6.717030 78 0.000000 77.50000 0.000000 20.90900 40.81240 7.636380 79 10.00000 80.00000 0.000000 22.78790 43.96230 8.145450 80 0.000000 80.00000 0.000000 22.37860 43.75130 8.126270 81 0.000000 82.50000 0.000000 23.90970 46.81300 8.636640 82 0.000000 85.00000 0.000000 25.50290 49.99900 9.167710 83 10.00000 90.00000 0.000000 29.28770 56.96020 10.31210 84 0.000000 90.00000 0.000000 28.87850 56.74920 10.29290 85 0.000000 95.00000 0.000000 32.51080 64.01280 11.50370 86 0.000000 97.50000 0.000000 34.42490 67.84050 12.14170 87 10.00000 100.0000 0.000000 36.81440 72.01150 12.82100 88 0.000000 100.0000 0.000000 36.40520 71.80050 12.80180 89 0.000000 10.00000 0.000000 1.354860 1.709620 1.118290 90 0.833333 0.833333 0.833333 1.060700 1.063850 1.069560 91 0.000000 0.000000 5.000000 1.070340 1.028130 1.370490 92 0.000000 0.000000 7.500000 1.117440 1.046970 1.618560 93 0.000000 0.000000 12.50000 1.256450 1.102560 2.350740 94 0.000000 0.000000 15.00000 1.350390 1.140130 2.845550 95 0.000000 0.000000 17.50000 1.461840 1.184710 3.432560 96 0.000000 0.000000 20.00000 1.591620 1.236610 4.116120 97 0.000000 0.000000 22.50000 1.740500 1.296150 4.900290 98 0.000000 0.000000 25.00000 1.909210 1.363630 5.788910 99 0.000000 0.000000 27.50000 2.098450 1.439310 6.785630 100 0.000000 0.000000 30.00000 2.308860 1.523460 7.893910 101 0.000000 0.000000 32.50000 2.541080 1.616340 9.117050 102 0.000000 0.000000 35.00000 2.795720 1.718170 10.45820 103 0.000000 0.000000 37.50000 3.073340 1.829200 11.92050 104 0.000000 0.000000 40.00000 3.374500 1.949650 13.50680 105 0.000000 0.000000 42.50000 3.699760 2.079730 15.21990 106 0.000000 0.000000 45.00000 4.049610 2.219650 17.06260 107 0.000000 0.000000 47.50000 4.424580 2.369620 19.03760 108 0.000000 0.000000 50.00000 4.825150 2.529820 21.14750 109 0.000000 0.000000 52.50000 5.251800 2.700450 23.39470 110 0.000000 0.000000 55.00000 5.704990 2.881700 25.78170 111 0.000000 0.000000 57.50000 6.185170 3.073740 28.31080 112 0.000000 0.000000 60.00000 6.692780 3.276750 30.98450 113 0.000000 0.000000 62.50000 7.228260 3.490910 33.80490 114 0.000000 0.000000 65.00000 7.792030 3.716380 36.77430 115 0.000000 0.000000 67.50000 8.384490 3.953330 39.89490 116 0.000000 0.000000 70.00000 9.006050 4.201910 43.16870 117 0.000000 0.000000 72.50000 9.657100 4.462290 46.59790 118 0.000000 0.000000 75.00000 10.33800 4.734630 50.18440 119 0.000000 0.000000 77.50000 11.04920 5.019060 53.93040 120 0.000000 0.000000 80.00000 11.79110 5.315740 57.83760 121 0.000000 0.000000 82.50000 12.56390 5.624830 61.90820 122 0.000000 0.000000 85.00000 13.36810 5.946450 66.14390 123 0.000000 0.000000 87.50000 14.20400 6.280760 70.54670 124 0.000000 0.000000 90.00000 15.07190 6.627880 75.11830 125 0.000000 0.000000 92.50000 15.97230 6.987970 79.86060 126 0.000000 0.000000 95.00000 16.90540 7.361150 84.77530 127 0.000000 0.000000 97.50000 17.87150 7.747550 89.86420 128 0.000000 0.000000 100.0000 18.87110 8.147310 95.12900 129 0.000000 0.000000 10.00000 1.179120 1.071640 1.943440 130 1.666670 1.666670 1.666670 1.121400 1.127710 1.139120 131 2.500000 2.500000 2.500000 1.182090 1.191560 1.208680 132 3.333330 3.333330 3.333330 1.242790 1.255420 1.278240 133 10.00000 0.000000 0.000000 1.409230 1.211000 1.019180 134 4.166670 4.166670 4.166670 1.303720 1.319520 1.348060 135 5.000000 5.000000 5.000000 1.370400 1.389660 1.424470 136 5.833330 5.833330 5.833330 1.444910 1.468050 1.509860 137 6.666670 6.666670 6.666670 1.527500 1.554930 1.604510 138 7.500000 7.500000 7.500000 1.618410 1.650570 1.708690 139 8.333330 8.333330 8.333330 1.717860 1.755190 1.822650 140 7.500000 0.000000 0.000000 1.268310 1.138340 1.012570 141 5.000000 0.000000 0.000000 1.160710 1.082860 1.007530 142 0.000000 2.500000 0.000000 1.068510 1.137000 1.022840 143 9.166670 9.166670 9.166670 1.826060 1.869010 1.946640 144 12.50000 12.50000 12.50000 2.350420 2.420640 2.547550 145 13.33330 13.33330 13.33330 2.505350 2.583630 2.725100 146 14.16670 14.16670 14.16670 2.670200 2.757050 2.914010 147 15.83330 15.83330 15.83330 3.030270 3.135850 3.326650 148 16.66670 16.66670 16.66670 3.225840 3.341590 3.550770 149 17.50000 17.50000 17.50000 3.431980 3.558450 3.787000 150 18.33330 18.33330 18.33330 3.648850 3.786590 4.035520 151 19.16670 19.16670 19.16670 3.876600 4.026180 4.296520 152 20.00000 20.00000 20.00000 4.115370 4.277370 4.570150 153 20.83330 20.83330 20.83330 4.365330 4.540330 4.856600 154 21.66670 21.66670 21.66670 4.626610 4.815190 5.156020 155 22.50000 22.50000 22.50000 4.899360 5.102120 5.468580 156 23.33330 23.33330 23.33330 5.183710 5.401260 5.794440 157 24.16670 24.16670 24.16670 5.479800 5.712750 6.133760 158 25.00000 25.00000 25.00000 5.787770 6.036730 6.486680 159 25.83330 25.83330 25.83330 6.107750 6.373350 6.853370 160 26.66670 26.66670 26.66670 6.439870 6.722740 7.233970 161 27.50000 27.50000 27.50000 6.784250 7.085030 7.628630 162 28.33330 28.33330 28.33330 7.141030 7.460360 8.037490 163 29.16670 29.16670 29.16670 7.510320 7.848860 8.460690 164 30.00000 30.00000 30.00000 7.892260 8.250660 8.898380 165 30.83330 30.83330 30.83330 8.286960 8.665880 9.350700 166 31.66670 31.66670 31.66670 8.694530 9.094650 9.817770 167 32.50000 32.50000 32.50000 9.115110 9.537090 10.29970 168 33.33330 33.33330 33.33330 9.548790 9.993330 10.79670 169 34.16670 34.16670 34.16670 9.995710 10.46350 11.30890 170 35.00000 35.00000 35.00000 10.45600 10.94770 11.83630 171 11.66670 11.66670 11.66670 2.205200 2.267870 2.381140 172 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 173 37.50000 37.50000 37.50000 11.91790 12.48560 13.51160 174 38.33330 38.33330 38.33330 12.43260 13.02710 14.10150 175 39.16670 39.16670 39.16670 12.96120 13.58320 14.70730 176 40.00000 40.00000 40.00000 13.50380 14.15400 15.32910 177 40.83330 40.83330 40.83330 14.06050 14.73960 15.96700 178 41.66670 41.66670 41.66670 14.63130 15.34020 16.62120 179 42.50000 42.50000 42.50000 15.21650 15.95580 17.29180 180 43.33330 43.33330 43.33330 15.81610 16.58650 17.97890 181 44.16670 44.16670 44.16670 16.43010 17.23250 18.68260 182 45.00000 45.00000 45.00000 17.05880 17.89380 19.40300 183 45.83330 45.83330 45.83330 17.70210 18.57070 20.14030 184 46.66670 46.66670 46.66670 18.36030 19.26300 20.89450 185 47.50000 47.50000 47.50000 19.03330 19.97110 21.66580 186 48.33330 48.33330 48.33330 19.72130 20.69480 22.45420 187 49.16670 49.16670 49.16670 20.42440 21.43450 23.26000 188 50.00000 50.00000 50.00000 21.14270 22.19010 24.08310 189 50.83330 50.83330 50.83330 21.87620 22.96170 24.92360 190 51.66670 51.66670 51.66670 22.62500 23.74950 25.78180 191 52.50000 52.50000 52.50000 23.38930 24.55360 26.65770 192 53.33330 53.33330 53.33330 24.16910 25.37390 27.55130 193 54.16670 54.16670 54.16670 24.96460 26.21070 28.46290 194 55.00000 55.00000 55.00000 25.77570 27.06410 29.39250 195 55.83330 55.83330 55.83330 26.60270 27.93400 30.34010 196 56.66670 56.66670 56.66670 27.44550 28.82070 31.30600 197 57.50000 57.50000 57.50000 28.30430 29.72410 32.29010 198 58.33330 58.33330 58.33330 29.17910 30.64440 33.29270 199 59.16670 59.16670 59.16670 30.07010 31.58180 34.31370 200 60.00000 60.00000 60.00000 30.97730 32.53610 35.35340 201 60.83330 60.83330 60.83330 31.90080 33.50770 36.41170 202 61.66670 61.66670 61.66670 32.84070 34.49640 37.48880 203 62.50000 62.50000 62.50000 33.79710 35.50250 38.58470 204 63.33330 63.33330 63.33330 34.77000 36.52600 39.69970 205 64.16670 64.16670 64.16670 35.75950 37.56700 40.83370 206 65.00000 65.00000 65.00000 36.76580 38.62560 41.98680 207 65.83330 65.83330 65.83330 37.78880 39.70180 43.15920 208 66.66670 66.66670 66.66670 38.82870 40.79580 44.35090 209 67.50000 67.50000 67.50000 39.88560 41.90760 45.56200 210 68.33330 68.33330 68.33330 40.95950 43.03730 46.79270 211 69.16670 69.16670 69.16670 42.05040 44.18510 48.04290 212 70.00000 70.00000 70.00000 43.15860 45.35090 49.31290 213 70.83330 70.83330 70.83330 44.28400 46.53480 50.60260 214 71.66670 71.66670 71.66670 45.42680 47.73700 51.91220 215 72.50000 72.50000 72.50000 46.58700 48.95750 53.24170 216 73.33330 73.33330 73.33330 47.76460 50.19640 54.59130 217 74.16670 74.16670 74.16670 48.95980 51.45370 55.96090 218 75.00000 75.00000 75.00000 50.17270 52.72960 57.35080 219 75.83330 75.83330 75.83330 51.40320 54.02420 58.76100 220 76.66670 76.66670 76.66670 52.65150 55.33740 60.19160 221 77.50000 77.50000 77.50000 53.91770 56.66940 61.64260 222 78.33330 78.33330 78.33330 55.20180 58.02030 63.11410 223 79.16670 79.16670 79.16670 56.50390 59.39010 64.60630 224 80.00000 80.00000 80.00000 57.82410 60.77890 66.11920 225 80.83330 80.83330 80.83330 59.16240 62.18680 67.65280 226 81.66670 81.66670 81.66670 60.51890 63.61380 69.20740 227 82.50000 82.50000 82.50000 61.89370 65.06010 70.78280 228 83.33330 83.33330 83.33330 63.28680 66.52570 72.37930 229 84.16670 84.16670 84.16670 64.69830 68.01060 73.99690 230 85.00000 85.00000 85.00000 66.12840 69.51500 75.63570 231 85.83330 85.83330 85.83330 67.57700 71.03900 77.29580 232 86.66670 86.66670 86.66670 69.04420 72.58250 78.97720 233 87.50000 87.50000 87.50000 70.53010 74.14560 80.68000 234 88.33330 88.33330 88.33330 72.03470 75.72850 82.40430 235 89.16670 89.16670 89.16670 73.55820 77.33120 84.15020 236 90.00000 90.00000 90.00000 75.10060 78.95380 85.91770 237 90.83330 90.83330 90.83330 76.66190 80.59630 87.70700 238 91.66670 91.66670 91.66670 78.24230 82.25890 89.51800 239 92.50000 92.50000 92.50000 79.84170 83.94150 91.35100 240 93.33330 93.33330 93.33330 81.46030 85.64430 93.20580 241 94.16670 94.16670 94.16670 83.09820 87.36730 95.08280 242 95.00000 95.00000 95.00000 84.75530 89.11050 96.98180 243 95.83330 95.83330 95.83330 86.43170 90.87420 98.90290 244 96.66670 96.66670 96.66670 88.12760 92.65820 100.8460 245 97.50000 97.50000 97.50000 89.84300 94.46280 102.8120 246 15.00000 15.00000 15.00000 2.845110 2.941060 3.114460 247 10.00000 10.00000 10.00000 1.943210 1.992260 2.080900 248 12.50000 0.000000 0.000000 1.585910 1.302100 1.027450 249 37.50000 0.000000 0.000000 5.736960 3.442390 1.221970 250 42.50000 0.000000 0.000000 7.168140 4.180310 1.289030 251 45.00000 0.000000 0.000000 7.967460 4.592450 1.326480 252 67.50000 0.000000 0.000000 17.87140 9.698930 1.790560 253 72.50000 0.000000 0.000000 20.77890 11.19810 1.926810 254 82.50000 0.000000 0.000000 27.42010 14.62230 2.238000 255 85.00000 0.000000 0.000000 29.25740 15.56960 2.324090 256 87.50000 0.000000 0.000000 31.16720 16.55430 2.413580 257 85.00000 5.000000 35.00000 31.19240 16.56640 11.82880 258 10.00000 20.00000 10.00000 2.760430 3.626470 2.353310 259 10.00000 20.00000 0.000000 2.581310 3.554840 1.409870 260 0.000000 20.00000 10.00000 2.351200 3.415470 2.334140 261 50.00000 20.00000 10.00000 11.09050 7.921500 2.743650 262 50.00000 20.00000 0.000000 10.91140 7.849860 1.800210 263 70.00000 20.00000 10.00000 20.64260 12.84660 3.191240 264 70.00000 20.00000 0.000000 20.46350 12.77500 2.247800 265 90.00000 20.00000 10.00000 34.50140 19.99220 3.840640 266 100.0000 20.00000 10.00000 43.18140 24.46760 4.247370 267 100.0000 20.00000 0.000000 43.00230 24.39600 3.303930 268 30.00000 20.00000 10.00000 5.341560 4.957310 2.474260 269 30.00000 20.00000 0.000000 5.162440 4.885670 1.530820 270 30.00000 30.00000 0.000000 6.583400 7.727190 2.004480 271 50.00000 30.00000 10.00000 12.51150 10.76300 3.217300 272 50.00000 30.00000 0.000000 12.33240 10.69140 2.273860 273 70.00000 30.00000 10.00000 22.06360 15.68810 3.664900 274 70.00000 30.00000 0.000000 21.88450 15.61650 2.721460 275 90.00000 30.00000 10.00000 35.92230 22.83370 4.314290 276 90.00000 30.00000 0.000000 35.74320 22.76210 3.370860 277 100.0000 30.00000 0.000000 44.42320 27.23750 3.777580 278 100.0000 30.00000 10.00000 44.60230 27.30920 4.721020 279 30.00000 40.00000 10.00000 8.873710 12.02060 3.651650 280 30.00000 40.00000 0.000000 8.694590 11.94900 2.708210 281 50.00000 40.00000 10.00000 14.62270 14.98480 3.921040 282 50.00000 40.00000 0.000000 14.44360 14.91320 2.977600 283 70.00000 40.00000 10.00000 24.17480 19.90990 4.368630 284 70.00000 40.00000 0.000000 23.99570 19.83830 3.425200 285 90.00000 40.00000 10.00000 38.03350 27.05550 5.018030 286 100.0000 40.00000 10.00000 46.71350 31.53100 5.424760 287 100.0000 40.00000 0.000000 46.53440 31.45930 4.481320 288 75.00000 45.00000 15.00000 28.72680 24.22210 5.859180 289 30.00000 50.00000 10.00000 11.74760 17.76770 4.609640 290 30.00000 50.00000 0.000000 11.56850 17.69610 3.666200 291 50.00000 50.00000 10.00000 17.49660 20.73190 4.879030 292 50.00000 50.00000 0.000000 17.31750 20.66030 3.935590 293 70.00000 50.00000 10.00000 27.04870 25.65700 5.326620 294 70.00000 50.00000 0.000000 26.86960 25.58540 4.383180 295 90.00000 50.00000 10.00000 40.90750 32.80260 5.976020 296 100.0000 50.00000 10.00000 49.58750 37.27800 6.382750 297 100.0000 50.00000 0.000000 49.40830 37.20640 5.439310 298 20.00000 60.00000 10.00000 13.80900 24.32180 5.766210 299 20.00000 60.00000 0.000000 13.62990 24.25020 4.822770 300 40.00000 60.00000 10.00000 17.88240 26.42210 5.957080 301 40.00000 60.00000 0.000000 17.70330 26.35040 5.013640 302 60.00000 60.00000 10.00000 25.46370 30.33100 6.312330 303 60.00000 60.00000 0.000000 25.28450 30.25940 5.368890 304 80.00000 60.00000 10.00000 37.11170 36.33680 6.858140 305 80.00000 60.00000 0.000000 36.93260 36.26520 5.914700 306 90.00000 60.00000 10.00000 44.60750 40.20160 7.209380 307 98.33330 98.33330 98.33330 91.57780 96.28790 104.8000 308 99.16670 99.16670 99.16670 93.33230 98.13360 106.8110 309 0.000000 42.50000 0.000000 6.348600 11.69570 2.782880 310 20.00000 70.00000 0.000000 18.21280 33.41470 6.350420 311 40.00000 70.00000 0.000000 22.28620 35.51500 6.541290 312 50.00000 70.00000 0.000000 25.60050 37.22380 6.696600 313 50.00000 70.00000 30.00000 26.90930 37.74730 13.59050 314 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 315 60.00000 70.00000 0.000000 29.86740 39.42390 6.896540 316 70.00000 70.00000 0.000000 35.15260 42.14890 7.144190 317 80.00000 70.00000 0.000000 41.51550 45.42970 7.442350 318 90.00000 90.00000 0.000000 61.02870 73.32590 11.79940 319 30.00000 70.00000 0.000000 19.85150 34.25970 6.427210 320 30.00000 80.00000 0.000000 25.36900 45.29310 8.266390 321 40.00000 80.00000 0.000000 27.80370 46.54850 8.380480 322 50.00000 80.00000 0.000000 31.11800 48.25730 8.535780 323 60.00000 80.00000 0.000000 35.38500 50.45740 8.735720 324 70.00000 80.00000 0.000000 40.67010 53.18240 8.983380 325 80.00000 80.00000 0.000000 47.03300 56.46320 9.281530 326 90.00000 80.00000 0.000000 54.52880 60.32800 9.632770 327 100.0000 80.00000 0.000000 63.20880 64.80350 10.03950 328 100.0000 90.00000 0.000000 69.70870 77.80140 12.20610 329 20.00000 80.00000 0.000000 23.73030 44.44820 8.189610 330 30.00000 90.00000 0.000000 31.86890 58.29100 10.43300 331 40.00000 90.00000 0.000000 34.30350 59.54640 10.54710 332 50.00000 90.00000 0.000000 37.61780 61.25520 10.70240 333 60.00000 90.00000 0.000000 41.88480 63.45530 10.90240 334 70.00000 90.00000 0.000000 47.16990 66.18030 11.15000 335 80.00000 90.00000 0.000000 53.53290 69.46110 11.44820 336 0.000000 65.00000 0.000000 14.45600 27.90820 5.485360 337 0.000000 67.50000 0.000000 15.62970 30.25540 5.876620 338 20.00000 90.00000 0.000000 30.23020 57.44610 10.35620 339 20.00000 100.0000 0.000000 37.75690 72.49740 12.86520 340 30.00000 100.0000 0.000000 39.39560 73.34240 12.94200 341 40.00000 100.0000 0.000000 41.83020 74.59770 13.05600 342 50.00000 100.0000 0.000000 45.14450 76.30650 13.21130 343 60.00000 100.0000 0.000000 49.41150 78.50660 13.41130 344 70.00000 100.0000 0.000000 54.69670 81.23160 13.65890 345 80.00000 100.0000 0.000000 61.05960 84.51240 13.95710 346 90.00000 100.0000 0.000000 68.55540 88.37730 14.30830 347 100.0000 100.0000 0.000000 77.23540 92.85270 14.71510 348 27.50000 0.000000 0.000000 3.509620 2.293970 1.117600 349 32.50000 0.000000 0.000000 4.520920 2.815400 1.164980 350 35.00000 0.000000 0.000000 5.102680 3.115350 1.192240 351 55.00000 0.000000 0.000000 11.74950 6.542480 1.503700 352 57.50000 0.000000 0.000000 12.84660 7.108130 1.555110 353 62.50000 0.000000 0.000000 15.22970 8.336900 1.666780 354 65.00000 0.000000 0.000000 16.51780 9.001010 1.727140 355 97.50000 0.000000 0.000000 39.54650 20.87470 2.806220 356 100.0000 10.00000 10.00000 42.36410 22.83340 3.974960 357 100.0000 0.000000 10.00000 42.00930 22.12380 3.856670 358 100.0000 10.00000 0.000000 42.18500 22.76180 3.031520 359 100.0000 0.000000 0.000000 41.83020 22.05220 2.913230 360 30.00000 0.000000 10.00000 4.169480 2.613480 2.083560 361 30.00000 10.00000 0.000000 4.345220 3.251460 1.258410 362 30.00000 0.000000 0.000000 3.990360 2.541840 1.140120 363 30.00000 10.00000 10.00000 4.524340 3.323100 2.201850 364 47.50000 0.000000 0.000000 8.824150 5.034160 1.366630 365 52.50000 0.000000 0.000000 10.71410 6.008620 1.455190 366 75.00000 0.000000 0.000000 22.33460 12.00020 1.999700 367 77.50000 0.000000 0.000000 23.95950 12.83800 2.075840 368 90.00000 70.00000 0.000000 49.01130 49.29450 7.793590 369 100.0000 70.00000 0.000000 57.69130 53.77000 8.200320 370 20.00000 20.00000 10.00000 3.702870 4.112400 2.397470 371 20.00000 20.00000 0.000000 3.523750 4.040760 1.454030 372 40.00000 20.00000 10.00000 7.776240 6.212640 2.588340 373 40.00000 20.00000 0.000000 7.597120 6.141000 1.644900 374 60.00000 20.00000 10.00000 15.35750 10.12160 2.943590 375 60.00000 20.00000 0.000000 15.17840 10.04990 2.000150 376 80.00000 20.00000 10.00000 27.00560 16.12730 3.489400 377 80.00000 20.00000 0.000000 26.82650 16.05570 2.545960 378 90.00000 20.00000 0.000000 34.32230 19.92060 2.897200 379 0.000000 30.00000 0.000000 3.593040 6.185360 1.864350 380 10.00000 30.00000 10.00000 4.181390 6.467990 2.826970 381 20.00000 30.00000 10.00000 5.123830 6.953920 2.871130 382 20.00000 30.00000 0.000000 4.944710 6.882280 1.927690 383 40.00000 30.00000 10.00000 9.197200 9.054160 3.062000 384 40.00000 30.00000 0.000000 9.018080 8.982520 2.118560 385 60.00000 30.00000 10.00000 16.77850 12.96310 3.417250 386 60.00000 30.00000 0.000000 16.59940 12.89150 2.473810 387 80.00000 30.00000 10.00000 28.42650 18.96890 3.963050 388 80.00000 30.00000 0.000000 28.24740 18.89720 3.019610 389 80.00000 80.00000 60.00000 52.72580 58.73990 39.26600 390 10.00000 40.00000 0.000000 6.113460 10.61810 2.587270 391 10.00000 40.00000 10.00000 6.292580 10.68980 3.530700 392 20.00000 40.00000 10.00000 7.235020 11.17570 3.574870 393 20.00000 40.00000 0.000000 7.055900 11.10410 2.631430 394 40.00000 40.00000 10.00000 11.30840 13.27590 3.765740 395 40.00000 40.00000 0.000000 11.12930 13.20430 2.822300 396 60.00000 40.00000 10.00000 18.88970 17.18490 4.120980 397 60.00000 40.00000 0.000000 18.71050 17.11320 3.177540 398 80.00000 40.00000 10.00000 30.53770 23.19070 4.666790 399 80.00000 40.00000 0.000000 30.35860 23.11900 3.723350 400 90.00000 40.00000 0.000000 37.85440 26.98390 4.074590 401 10.00000 50.00000 0.000000 8.987400 16.36520 3.545250 402 10.00000 50.00000 10.00000 9.166520 16.43690 4.488690 403 20.00000 50.00000 10.00000 10.10900 16.92280 4.532850 404 20.00000 50.00000 0.000000 9.929840 16.85120 3.589420 405 40.00000 50.00000 10.00000 14.18230 19.02300 4.723720 406 40.00000 50.00000 0.000000 14.00320 18.95140 3.780290 407 60.00000 50.00000 10.00000 21.76360 22.93200 5.078970 408 60.00000 50.00000 0.000000 21.58450 22.86030 4.135530 409 80.00000 50.00000 10.00000 33.41170 28.93770 5.624780 410 80.00000 50.00000 0.000000 33.23250 28.86610 4.681340 411 90.00000 50.00000 0.000000 40.72830 32.73100 5.032580 412 10.00000 60.00000 10.00000 12.86660 23.83590 5.722050 413 0.000000 60.00000 10.00000 12.45730 23.62490 5.702870 414 10.00000 60.00000 0.000000 12.68740 23.76430 4.778610 415 30.00000 60.00000 10.00000 15.44770 25.16680 5.843000 416 30.00000 60.00000 0.000000 15.26860 25.09510 4.899560 417 50.00000 60.00000 10.00000 21.19670 28.13090 6.112380 418 50.00000 60.00000 0.000000 21.01760 28.05930 5.168950 419 70.00000 60.00000 10.00000 30.74880 33.05600 6.559980 420 70.00000 60.00000 0.000000 30.56970 32.98440 5.616540 421 90.00000 60.00000 0.000000 44.42840 40.13000 6.265940 422 100.0000 60.00000 10.00000 53.28750 44.67710 7.616110 423 100.0000 60.00000 0.000000 53.10840 44.60540 6.672670 424 10.00000 70.00000 10.00000 17.44950 33.00040 7.249700 425 20.00000 70.00000 10.00000 18.39190 33.48640 7.293860 426 30.00000 70.00000 10.00000 20.03060 34.33130 7.370650 427 40.00000 70.00000 10.00000 22.46530 35.58660 7.484730 428 50.00000 70.00000 10.00000 25.77960 37.29550 7.640030 429 60.00000 70.00000 10.00000 30.04660 39.49550 7.839980 430 70.00000 70.00000 10.00000 35.33170 42.22060 8.087630 431 80.00000 70.00000 10.00000 41.69460 45.50130 8.385780 432 90.00000 70.00000 10.00000 49.19040 49.36620 8.737020 433 100.0000 70.00000 10.00000 57.87040 53.84160 9.143750 434 0.000000 80.00000 10.00000 22.55780 43.82290 9.069710 435 10.00000 80.00000 10.00000 22.96700 44.03390 9.088880 436 20.00000 80.00000 10.00000 23.90940 44.51990 9.133050 437 30.00000 80.00000 10.00000 25.54810 45.36480 9.209830 438 40.00000 80.00000 10.00000 27.98280 46.62010 9.323920 439 50.00000 80.00000 10.00000 31.29710 48.32900 9.479220 440 60.00000 80.00000 10.00000 35.56410 50.52900 9.679160 441 70.00000 80.00000 10.00000 40.84920 53.25410 9.926810 442 80.00000 80.00000 10.00000 47.21210 56.53480 10.22500 443 90.00000 80.00000 10.00000 54.70790 60.39970 10.57620 444 100.0000 80.00000 10.00000 63.38790 64.87510 10.98290 445 0.000000 90.00000 10.00000 29.05760 56.82080 11.23630 446 10.00000 90.00000 10.00000 29.46680 57.03180 11.25550 447 20.00000 90.00000 10.00000 30.40930 57.51780 11.29970 448 30.00000 90.00000 10.00000 32.04800 58.36270 11.37650 449 40.00000 90.00000 10.00000 34.48270 59.61800 11.49060 450 50.00000 90.00000 10.00000 37.79700 61.32690 11.64590 451 60.00000 90.00000 10.00000 42.06390 63.52690 11.84580 452 70.00000 90.00000 10.00000 47.34910 66.25200 12.09350 453 80.00000 90.00000 10.00000 53.71200 69.53270 12.39160 454 90.00000 90.00000 10.00000 61.20780 73.39760 12.74280 455 100.0000 90.00000 10.00000 69.88780 77.87300 13.14960 456 0.000000 100.0000 10.00000 36.58430 71.87220 13.74530 457 10.00000 100.0000 10.00000 36.99360 72.08320 13.76440 458 20.00000 100.0000 10.00000 37.93600 72.56910 13.80860 459 30.00000 100.0000 10.00000 39.57470 73.41400 13.88540 460 40.00000 100.0000 10.00000 42.00940 74.66930 13.99950 461 50.00000 100.0000 10.00000 45.32370 76.37820 14.15480 462 60.00000 100.0000 10.00000 49.59060 78.57830 14.35470 463 70.00000 100.0000 10.00000 54.87580 81.30330 14.60240 464 80.00000 100.0000 10.00000 61.23870 84.58400 14.90050 465 90.00000 100.0000 10.00000 68.73450 88.44890 15.25180 466 100.0000 100.0000 10.00000 77.41450 92.92430 15.65850 467 20.00000 10.00000 20.00000 3.298150 2.643160 4.297740 468 20.00000 0.000000 20.00000 2.943290 1.933540 4.179450 469 40.00000 10.00000 20.00000 7.371520 4.743400 4.488610 470 40.00000 0.000000 20.00000 7.016660 4.033780 4.370320 471 60.00000 10.00000 20.00000 14.95280 8.652330 4.843860 472 60.00000 0.000000 20.00000 14.59790 7.942710 4.725570 473 80.00000 10.00000 20.00000 26.60090 14.65810 5.389670 474 80.00000 0.000000 20.00000 26.24600 13.94850 5.271380 475 100.0000 10.00000 20.00000 42.77660 22.99840 6.147640 476 100.0000 0.000000 20.00000 42.42180 22.28880 6.029350 477 0.000000 10.00000 20.00000 1.946480 1.946230 4.234400 478 10.00000 10.00000 20.00000 2.355710 2.157230 4.253580 479 10.00000 0.000000 20.00000 2.000850 1.447610 4.135290 480 30.00000 10.00000 20.00000 4.936840 3.488070 4.374530 481 30.00000 0.000000 20.00000 4.581980 2.778450 4.256240 482 50.00000 10.00000 20.00000 10.68580 6.452260 4.643920 483 50.00000 0.000000 20.00000 10.33100 5.742640 4.525630 484 70.00000 10.00000 20.00000 20.23790 11.37740 5.091510 485 70.00000 0.000000 20.00000 19.88310 10.66770 4.973220 486 90.00000 10.00000 20.00000 34.09670 18.52300 5.740910 487 90.00000 0.000000 20.00000 33.74180 17.81330 5.622620 488 0.000000 20.00000 20.00000 2.763700 3.580440 4.506810 489 10.00000 20.00000 20.00000 3.172930 3.791450 4.525990 490 30.00000 20.00000 20.00000 5.754060 5.122280 4.646940 491 40.00000 20.00000 20.00000 8.188740 6.377610 4.761020 492 50.00000 20.00000 20.00000 11.50300 8.086470 4.916320 493 60.00000 20.00000 20.00000 15.77000 10.28650 5.116270 494 70.00000 20.00000 20.00000 21.05510 13.01160 5.363920 495 80.00000 20.00000 20.00000 27.41810 16.29230 5.662080 496 90.00000 20.00000 20.00000 34.91390 20.15720 6.013320 497 100.0000 20.00000 20.00000 43.59390 24.63260 6.420040 498 0.000000 30.00000 20.00000 4.184660 6.421970 4.980470 499 10.00000 30.00000 20.00000 4.593890 6.632970 4.999650 500 20.00000 30.00000 20.00000 5.536330 7.118890 5.043810 501 30.00000 30.00000 20.00000 7.175020 7.963800 5.120590 502 40.00000 30.00000 20.00000 9.609700 9.219130 5.234680 503 50.00000 30.00000 20.00000 12.92400 10.92800 5.389980 504 60.00000 30.00000 20.00000 17.19100 13.12810 5.589920 505 70.00000 30.00000 20.00000 22.47610 15.85310 5.837580 506 80.00000 30.00000 20.00000 28.83900 19.13380 6.135730 507 90.00000 30.00000 20.00000 36.33480 22.99870 6.486970 508 100.0000 30.00000 20.00000 45.01480 27.47410 6.893700 509 0.000000 40.00000 20.00000 6.295850 10.64380 5.684210 510 10.00000 40.00000 20.00000 6.705080 10.85480 5.703380 511 20.00000 40.00000 20.00000 7.647520 11.34070 5.747540 512 30.00000 40.00000 20.00000 9.286210 12.18560 5.824330 513 40.00000 40.00000 20.00000 11.72090 13.44090 5.938420 514 50.00000 40.00000 20.00000 15.03520 15.14980 6.093720 515 60.00000 40.00000 20.00000 19.30220 17.34990 6.293660 516 70.00000 40.00000 20.00000 24.58730 20.07490 6.541310 517 80.00000 40.00000 20.00000 30.95020 23.35560 6.839470 518 90.00000 40.00000 20.00000 38.44600 27.22050 7.190710 519 100.0000 40.00000 20.00000 47.12600 31.69590 7.597440 520 0.000000 50.00000 20.00000 9.169790 16.39080 6.642200 521 10.00000 50.00000 20.00000 9.579020 16.60180 6.661370 522 20.00000 50.00000 20.00000 10.52150 17.08780 6.705530 523 30.00000 50.00000 20.00000 12.16010 17.93270 6.782320 524 40.00000 50.00000 20.00000 14.59480 19.18800 6.896400 525 50.00000 50.00000 20.00000 17.90910 20.89690 7.051710 526 60.00000 50.00000 20.00000 22.17610 23.09690 7.251650 527 70.00000 50.00000 20.00000 27.46120 25.82200 7.499300 528 80.00000 50.00000 20.00000 33.82420 29.10270 7.797460 529 90.00000 50.00000 20.00000 41.32000 32.96760 8.148700 530 100.0000 50.00000 20.00000 50.00000 37.44300 8.555430 531 0.000000 60.00000 20.00000 12.86980 23.78990 7.875550 532 10.00000 60.00000 20.00000 13.27910 24.00090 7.894730 533 20.00000 60.00000 20.00000 14.22150 24.48680 7.938890 534 30.00000 60.00000 20.00000 15.86020 25.33170 8.015680 535 40.00000 60.00000 20.00000 18.29490 26.58710 8.129760 536 50.00000 60.00000 20.00000 21.60920 28.29590 8.285060 537 60.00000 60.00000 20.00000 25.87620 30.49600 8.485010 538 70.00000 60.00000 20.00000 31.16130 33.22100 8.732660 539 80.00000 60.00000 20.00000 37.52420 36.50180 9.030810 540 90.00000 60.00000 20.00000 45.02000 40.36660 9.382060 541 100.0000 60.00000 20.00000 53.70000 44.84210 9.788780 542 0.000000 70.00000 20.00000 17.45270 32.95440 9.403200 543 10.00000 70.00000 20.00000 17.86200 33.16540 9.422380 544 20.00000 70.00000 20.00000 18.80440 33.65130 9.466540 545 30.00000 70.00000 20.00000 20.44310 34.49630 9.543330 546 40.00000 70.00000 20.00000 22.87780 35.75160 9.657410 547 50.00000 70.00000 20.00000 26.19210 37.46050 9.812710 548 60.00000 70.00000 20.00000 30.45910 39.66050 10.01270 549 70.00000 70.00000 20.00000 35.74420 42.38550 10.26030 550 80.00000 70.00000 20.00000 42.10710 45.66630 10.55850 551 90.00000 70.00000 20.00000 49.60290 49.53120 10.90970 552 100.0000 70.00000 20.00000 58.28290 54.00660 11.31640 553 0.000000 80.00000 20.00000 22.97030 43.98790 11.24240 554 10.00000 80.00000 20.00000 23.37950 44.19890 11.26160 555 20.00000 80.00000 20.00000 24.32190 44.68480 11.30570 556 30.00000 80.00000 20.00000 25.96060 45.52970 11.38250 557 40.00000 80.00000 20.00000 28.39530 46.78510 11.49660 558 50.00000 80.00000 20.00000 31.70960 48.49390 11.65190 559 60.00000 80.00000 20.00000 35.97660 50.69400 11.85180 560 70.00000 80.00000 20.00000 41.26170 53.41900 12.09950 561 80.00000 80.00000 20.00000 47.62460 56.69980 12.39760 562 90.00000 80.00000 20.00000 55.12040 60.56460 12.74890 563 100.0000 80.00000 20.00000 63.80040 65.04010 13.15560 564 0.000000 90.00000 20.00000 29.47010 56.98580 13.40900 565 10.00000 90.00000 20.00000 29.87930 57.19680 13.42820 566 20.00000 90.00000 20.00000 30.82180 57.68270 13.47240 567 30.00000 90.00000 20.00000 32.46050 58.52760 13.54920 568 40.00000 90.00000 20.00000 34.89520 59.78300 13.66320 569 50.00000 90.00000 20.00000 38.20950 61.49180 13.81850 570 60.00000 90.00000 20.00000 42.47640 63.69190 14.01850 571 70.00000 90.00000 20.00000 47.76160 66.41690 14.26610 572 80.00000 90.00000 20.00000 54.12450 69.69770 14.56430 573 90.00000 90.00000 20.00000 61.62030 73.56250 14.91550 574 100.0000 90.00000 20.00000 70.30030 78.03800 15.32230 575 0.000000 100.0000 20.00000 36.99680 72.03710 15.91800 576 10.00000 100.0000 20.00000 37.40610 72.24810 15.93710 577 20.00000 100.0000 20.00000 38.34850 72.73410 15.98130 578 30.00000 100.0000 20.00000 39.98720 73.57900 16.05810 579 40.00000 100.0000 20.00000 42.42190 74.83430 16.17220 580 50.00000 100.0000 20.00000 45.73620 76.54320 16.32750 581 60.00000 100.0000 20.00000 50.00310 78.74320 16.52740 582 70.00000 100.0000 20.00000 55.28830 81.46830 16.77510 583 80.00000 100.0000 20.00000 61.65120 84.74900 17.07320 584 90.00000 100.0000 20.00000 69.14700 88.61390 17.42450 585 100.0000 100.0000 20.00000 77.82700 93.08930 17.83120 586 20.00000 10.00000 30.00000 4.015390 2.930010 8.075530 587 20.00000 0.000000 30.00000 3.660530 2.220390 7.957240 588 40.00000 10.00000 30.00000 8.088760 5.030250 8.266400 589 40.00000 0.000000 30.00000 7.733900 4.320630 8.148110 590 60.00000 10.00000 30.00000 15.67000 8.939180 8.621650 591 60.00000 0.000000 30.00000 15.31520 8.229560 8.503360 592 80.00000 10.00000 30.00000 27.31810 14.94500 9.167460 593 80.00000 0.000000 30.00000 26.96320 14.23530 9.049170 594 100.0000 10.00000 30.00000 43.49390 23.28530 9.925420 595 100.0000 0.000000 30.00000 43.13900 22.57560 9.807140 596 0.000000 10.00000 30.00000 2.663720 2.233080 8.012190 597 10.00000 10.00000 30.00000 3.072960 2.444090 8.031370 598 10.00000 0.000000 30.00000 2.718090 1.734460 7.913080 599 30.00000 10.00000 30.00000 5.654080 3.774920 8.152320 600 30.00000 0.000000 30.00000 5.299220 3.065300 8.034030 601 50.00000 10.00000 30.00000 11.40310 6.739110 8.421700 602 50.00000 0.000000 30.00000 11.04820 6.029490 8.303420 603 70.00000 10.00000 30.00000 20.95520 11.66420 8.869300 604 70.00000 0.000000 30.00000 20.60030 10.95460 8.751010 605 90.00000 10.00000 30.00000 34.81390 18.80980 9.518700 606 90.00000 0.000000 30.00000 34.45900 18.10020 9.400410 607 0.000000 20.00000 30.00000 3.480940 3.867300 8.284600 608 10.00000 20.00000 30.00000 3.890180 4.078300 8.303780 609 20.00000 20.00000 30.00000 4.832620 4.564220 8.347940 610 30.00000 20.00000 30.00000 6.471300 5.409140 8.424730 611 40.00000 20.00000 30.00000 8.905980 6.664460 8.538810 612 50.00000 20.00000 30.00000 12.22030 8.373330 8.694110 613 60.00000 20.00000 30.00000 16.48730 10.57340 8.894060 614 70.00000 20.00000 30.00000 21.77240 13.29840 9.141710 615 80.00000 20.00000 30.00000 28.13530 16.57920 9.439860 616 90.00000 20.00000 30.00000 35.63110 20.44400 9.791100 617 100.0000 20.00000 30.00000 44.31110 24.91950 10.19780 618 0.000000 30.00000 30.00000 4.901900 6.708820 8.758260 619 10.00000 30.00000 30.00000 5.311140 6.919820 8.777440 620 20.00000 30.00000 30.00000 6.253580 7.405740 8.821600 621 40.00000 30.00000 30.00000 10.32690 9.505980 9.012470 622 50.00000 30.00000 30.00000 13.64120 11.21480 9.167770 623 60.00000 30.00000 30.00000 17.90820 13.41490 9.367710 624 70.00000 30.00000 30.00000 23.19330 16.13990 9.615370 625 80.00000 30.00000 30.00000 29.55630 19.42070 9.913520 626 90.00000 30.00000 30.00000 37.05210 23.28560 10.26480 627 100.0000 30.00000 30.00000 45.73210 27.76100 10.67150 628 0.000000 40.00000 30.00000 7.013090 10.93060 9.462000 629 10.00000 40.00000 30.00000 7.422330 11.14160 9.481170 630 20.00000 40.00000 30.00000 8.364770 11.62750 9.525330 631 30.00000 40.00000 30.00000 10.00350 12.47240 9.602120 632 40.00000 40.00000 30.00000 12.43810 13.72780 9.716200 633 50.00000 40.00000 30.00000 15.75240 15.43660 9.871510 634 60.00000 40.00000 30.00000 20.01940 17.63670 10.07150 635 70.00000 40.00000 30.00000 25.30450 20.36170 10.31910 636 80.00000 40.00000 30.00000 31.66750 23.64250 10.61730 637 90.00000 40.00000 30.00000 39.16330 27.50730 10.96850 638 100.0000 40.00000 30.00000 47.84330 31.98280 11.37520 639 0.000000 50.00000 30.00000 9.887030 16.67770 10.42000 640 10.00000 50.00000 30.00000 10.29630 16.88870 10.43920 641 20.00000 50.00000 30.00000 11.23870 17.37460 10.48330 642 30.00000 50.00000 30.00000 12.87740 18.21950 10.56010 643 40.00000 50.00000 30.00000 15.31210 19.47490 10.67420 644 50.00000 50.00000 30.00000 18.62640 21.18370 10.82950 645 60.00000 50.00000 30.00000 22.89340 23.38380 11.02940 646 70.00000 50.00000 30.00000 28.17850 26.10880 11.27710 647 80.00000 50.00000 30.00000 34.54140 29.38960 11.57520 648 90.00000 50.00000 30.00000 42.03720 33.25440 11.92650 649 100.0000 50.00000 30.00000 50.71720 37.72990 12.33320 650 0.000000 60.00000 30.00000 13.58710 24.07670 11.65330 651 10.00000 60.00000 30.00000 13.99630 24.28770 11.67250 652 20.00000 60.00000 30.00000 14.93870 24.77370 11.71670 653 30.00000 60.00000 30.00000 16.57740 25.61860 11.79350 654 40.00000 60.00000 30.00000 19.01210 26.87390 11.90760 655 50.00000 60.00000 30.00000 22.32640 28.58280 12.06290 656 60.00000 60.00000 30.00000 26.59340 30.78280 12.26280 657 70.00000 60.00000 30.00000 31.87850 33.50790 12.51040 658 80.00000 60.00000 30.00000 38.24140 36.78860 12.80860 659 90.00000 60.00000 30.00000 45.73730 40.65350 13.15980 660 100.0000 60.00000 30.00000 54.41720 45.12890 13.56660 661 0.000000 70.00000 30.00000 18.17000 33.24130 13.18100 662 10.00000 70.00000 30.00000 18.57920 33.45230 13.20020 663 20.00000 70.00000 30.00000 19.52170 33.93820 13.24430 664 30.00000 70.00000 30.00000 21.16030 34.78310 13.32110 665 40.00000 70.00000 30.00000 23.59500 36.03840 13.43520 666 2.500000 0.000000 0.000000 1.079010 1.040740 1.003700 667 60.00000 70.00000 30.00000 31.17630 39.94740 13.79040 668 70.00000 70.00000 30.00000 36.46140 42.67240 14.03810 669 80.00000 70.00000 30.00000 42.82440 45.95310 14.33630 670 90.00000 70.00000 30.00000 50.32020 49.81800 14.68750 671 100.0000 70.00000 30.00000 59.00020 54.29340 15.09420 672 0.000000 80.00000 30.00000 23.68750 44.27470 15.02020 673 10.00000 80.00000 30.00000 24.09670 44.48580 15.03940 674 20.00000 80.00000 30.00000 25.03920 44.97170 15.08350 675 30.00000 80.00000 30.00000 26.67790 45.81660 15.16030 676 40.00000 80.00000 30.00000 29.11250 47.07190 15.27440 677 50.00000 80.00000 30.00000 32.42680 48.78080 15.42970 678 60.00000 80.00000 30.00000 36.69380 50.98090 15.62960 679 70.00000 80.00000 30.00000 41.97890 53.70590 15.87730 680 80.00000 80.00000 30.00000 48.34190 56.98660 16.17540 681 90.00000 80.00000 30.00000 55.83770 60.85150 16.52670 682 100.0000 80.00000 30.00000 64.51770 65.32690 16.93340 683 0.000000 90.00000 30.00000 30.18740 57.27270 17.18680 684 10.00000 90.00000 30.00000 30.59660 57.48370 17.20600 685 20.00000 90.00000 30.00000 31.53900 57.96960 17.25020 686 30.00000 90.00000 30.00000 33.17770 58.81450 17.32690 687 40.00000 90.00000 30.00000 35.61240 60.06980 17.44100 688 50.00000 90.00000 30.00000 38.92670 61.77870 17.59630 689 60.00000 90.00000 30.00000 43.19370 63.97880 17.79630 690 70.00000 90.00000 30.00000 48.47880 66.70380 18.04390 691 80.00000 90.00000 30.00000 54.84170 69.98450 18.34210 692 90.00000 90.00000 30.00000 62.33750 73.84940 18.69330 693 100.0000 90.00000 30.00000 71.01750 78.32480 19.10000 694 0.000000 100.0000 30.00000 37.71410 72.32400 19.69570 695 10.00000 100.0000 30.00000 38.12330 72.53500 19.71490 696 20.00000 100.0000 30.00000 39.06570 73.02090 19.75910 697 30.00000 100.0000 30.00000 40.70440 73.86580 19.83590 698 40.00000 100.0000 30.00000 43.13910 75.12110 19.94990 699 50.00000 100.0000 30.00000 46.45340 76.83000 20.10530 700 60.00000 100.0000 30.00000 50.72040 79.03010 20.30520 701 70.00000 100.0000 30.00000 56.00550 81.75510 20.55280 702 80.00000 100.0000 30.00000 62.36840 85.03590 20.85100 703 90.00000 100.0000 30.00000 69.86420 88.90070 21.20220 704 100.0000 100.0000 30.00000 78.54420 93.37610 21.60900 705 20.00000 10.00000 40.00000 5.081040 3.356200 13.68840 706 20.00000 0.000000 40.00000 4.726180 2.646580 13.57010 707 40.00000 10.00000 40.00000 9.154400 5.456440 13.87930 708 40.00000 0.000000 40.00000 8.799540 4.746820 13.76100 709 60.00000 10.00000 40.00000 16.73570 9.365370 14.23450 710 60.00000 0.000000 40.00000 16.38080 8.655750 14.11620 711 80.00000 10.00000 40.00000 28.38370 15.37110 14.78030 712 80.00000 0.000000 40.00000 28.02890 14.66150 14.66200 713 100.0000 10.00000 40.00000 44.55950 23.71140 15.53830 714 100.0000 0.000000 40.00000 44.20470 23.00180 15.42000 715 0.000000 10.00000 40.00000 3.729360 2.659270 13.62500 716 10.00000 10.00000 40.00000 4.138600 2.870280 13.64420 717 10.00000 0.000000 40.00000 3.783740 2.160650 13.52590 718 30.00000 10.00000 40.00000 6.719720 4.201110 13.76520 719 30.00000 0.000000 40.00000 6.364860 3.491490 13.64690 720 50.00000 10.00000 40.00000 12.46870 7.165300 14.03460 721 50.00000 0.000000 40.00000 12.11380 6.455680 13.91630 722 70.00000 10.00000 40.00000 22.02080 12.09040 14.48210 723 70.00000 0.000000 40.00000 21.66590 11.38080 14.36390 724 90.00000 10.00000 40.00000 35.87950 19.23600 15.13150 725 90.00000 0.000000 40.00000 35.52470 18.52640 15.01330 726 0.000000 20.00000 40.00000 4.546590 4.293490 13.89750 727 10.00000 20.00000 40.00000 4.955820 4.504490 13.91660 728 20.00000 20.00000 40.00000 5.898260 4.990410 13.96080 729 30.00000 20.00000 40.00000 7.536940 5.835330 14.03760 730 40.00000 20.00000 40.00000 9.971620 7.090650 14.15170 731 50.00000 20.00000 40.00000 13.28590 8.799520 14.30700 732 60.00000 20.00000 40.00000 17.55290 10.99960 14.50690 733 70.00000 20.00000 40.00000 22.83800 13.72460 14.75460 734 80.00000 20.00000 40.00000 29.20100 17.00540 15.05270 735 90.00000 20.00000 40.00000 36.69680 20.87020 15.40400 736 100.0000 20.00000 40.00000 45.37680 25.34570 15.81070 737 0.000000 30.00000 40.00000 5.967540 7.135010 14.37110 738 10.00000 30.00000 40.00000 6.376780 7.346010 14.39030 739 20.00000 30.00000 40.00000 7.319220 7.831930 14.43440 740 30.00000 30.00000 40.00000 8.957900 8.676850 14.51120 741 40.00000 30.00000 40.00000 11.39260 9.932170 14.62530 742 50.00000 30.00000 40.00000 14.70690 11.64100 14.78060 743 60.00000 30.00000 40.00000 18.97390 13.84110 14.98060 744 70.00000 30.00000 40.00000 24.25900 16.56610 15.22820 745 80.00000 30.00000 40.00000 30.62190 19.84690 15.52640 746 90.00000 30.00000 40.00000 38.11770 23.71170 15.87760 747 100.0000 30.00000 40.00000 46.79770 28.18720 16.28430 748 0.000000 40.00000 40.00000 8.078730 11.35680 15.07480 749 10.00000 40.00000 40.00000 8.487970 11.56780 15.09400 750 20.00000 40.00000 40.00000 9.430410 12.05370 15.13820 751 30.00000 40.00000 40.00000 11.06910 12.89860 15.21500 752 50.00000 40.00000 40.00000 16.81810 15.86280 15.48440 753 60.00000 40.00000 40.00000 21.08510 18.06290 15.68430 754 70.00000 40.00000 40.00000 26.37020 20.78790 15.93200 755 80.00000 40.00000 40.00000 32.73310 24.06870 16.23010 756 90.00000 40.00000 40.00000 40.22890 27.93350 16.58130 757 100.0000 40.00000 40.00000 48.90890 32.40900 16.98810 758 0.000000 50.00000 40.00000 10.95270 17.10390 16.03280 759 10.00000 50.00000 40.00000 11.36190 17.31490 16.05200 760 20.00000 50.00000 40.00000 12.30430 17.80080 16.09620 761 30.00000 50.00000 40.00000 13.94300 18.64570 16.17300 762 40.00000 50.00000 40.00000 16.37770 19.90100 16.28700 763 50.00000 50.00000 40.00000 19.69200 21.60990 16.44230 764 60.00000 50.00000 40.00000 23.95900 23.81000 16.64230 765 70.00000 50.00000 40.00000 29.24410 26.53500 16.88990 766 80.00000 50.00000 40.00000 35.60700 29.81570 17.18810 767 90.00000 50.00000 40.00000 43.10290 33.68060 17.53930 768 100.0000 50.00000 40.00000 51.78280 38.15600 17.94610 769 0.000000 60.00000 40.00000 14.65270 24.50290 17.26620 770 10.00000 60.00000 40.00000 15.06200 24.71390 17.28540 771 20.00000 60.00000 40.00000 16.00440 25.19990 17.32950 772 30.00000 60.00000 40.00000 17.64310 26.04480 17.40630 773 40.00000 60.00000 40.00000 20.07780 27.30010 17.52040 774 50.00000 60.00000 40.00000 23.39210 29.00900 17.67570 775 60.00000 60.00000 40.00000 27.65900 31.20900 17.87560 776 70.00000 60.00000 40.00000 32.94420 33.93410 18.12330 777 80.00000 60.00000 40.00000 39.30710 37.21480 18.42150 778 90.00000 60.00000 40.00000 46.80290 41.07970 18.77270 779 100.0000 60.00000 40.00000 55.48290 45.55510 19.17940 780 0.000000 70.00000 40.00000 19.23560 33.66750 18.79380 781 10.00000 70.00000 40.00000 19.64490 33.87850 18.81300 782 20.00000 70.00000 40.00000 20.58730 34.36440 18.85720 783 30.00000 70.00000 40.00000 22.22600 35.20930 18.93400 784 40.00000 70.00000 40.00000 24.66070 36.46460 19.04810 785 50.00000 70.00000 40.00000 27.97500 38.17350 19.20340 786 60.00000 70.00000 40.00000 32.24190 40.37360 19.40330 787 70.00000 70.00000 40.00000 37.52710 43.09860 19.65090 788 80.00000 70.00000 40.00000 43.89000 46.37930 19.94910 789 90.00000 70.00000 40.00000 51.38580 50.24420 20.30030 790 100.0000 70.00000 40.00000 60.06580 54.71960 20.70710 791 0.000000 80.00000 40.00000 24.75310 44.70090 20.63300 792 10.00000 80.00000 40.00000 25.16240 44.91190 20.65220 793 20.00000 80.00000 40.00000 26.10480 45.39790 20.69640 794 30.00000 80.00000 40.00000 27.74350 46.24280 20.77320 795 40.00000 80.00000 40.00000 30.17820 47.49810 20.88720 796 50.00000 80.00000 40.00000 33.49250 49.20700 21.04250 797 60.00000 80.00000 40.00000 37.75950 51.40700 21.24250 798 70.00000 80.00000 40.00000 43.04460 54.13210 21.49010 799 80.00000 80.00000 40.00000 49.40750 57.41280 21.78830 800 90.00000 80.00000 40.00000 56.90330 61.27770 22.13950 801 100.0000 80.00000 40.00000 65.58330 65.75310 22.54630 802 0.000000 90.00000 40.00000 31.25300 57.69880 22.79970 803 10.00000 90.00000 40.00000 31.66220 57.90990 22.81880 804 20.00000 90.00000 40.00000 32.60470 58.39580 22.86300 805 30.00000 90.00000 40.00000 34.24340 59.24070 22.93980 806 40.00000 90.00000 40.00000 36.67800 60.49600 23.05390 807 50.00000 90.00000 40.00000 39.99230 62.20490 23.20920 808 60.00000 90.00000 40.00000 44.25930 64.40490 23.40910 809 70.00000 90.00000 40.00000 49.54440 67.13000 23.65680 810 80.00000 90.00000 40.00000 55.90740 70.41070 23.95490 811 90.00000 90.00000 40.00000 63.40320 74.27560 24.30620 812 100.0000 90.00000 40.00000 72.08320 78.75100 24.71290 813 0.000000 100.0000 40.00000 38.77970 72.75020 25.30860 814 10.00000 100.0000 40.00000 39.18890 72.96120 25.32780 815 20.00000 100.0000 40.00000 40.13140 73.44710 25.37190 816 30.00000 100.0000 40.00000 41.77010 74.29200 25.44870 817 40.00000 100.0000 40.00000 44.20470 75.54730 25.56280 818 50.00000 100.0000 40.00000 47.51900 77.25620 25.71810 819 60.00000 100.0000 40.00000 51.78600 79.45630 25.91800 820 70.00000 100.0000 40.00000 57.07120 82.18130 26.16570 821 80.00000 100.0000 40.00000 63.43410 85.46200 26.46390 822 90.00000 100.0000 40.00000 70.92990 89.32690 26.81510 823 100.0000 100.0000 40.00000 79.60990 93.80230 27.22180 824 20.00000 10.00000 50.00000 6.531690 3.936370 21.32910 825 20.00000 0.000000 50.00000 6.176830 3.226750 21.21080 826 40.00000 10.00000 50.00000 10.60500 6.036610 21.52000 827 40.00000 0.000000 50.00000 10.25020 5.326990 21.40170 828 60.00000 10.00000 50.00000 18.18630 9.945540 21.87520 829 60.00000 0.000000 50.00000 17.83150 9.235920 21.75690 830 80.00000 10.00000 50.00000 29.83440 15.95130 22.42100 831 80.00000 0.000000 50.00000 29.47950 15.24170 22.30270 832 100.0000 10.00000 50.00000 46.01020 24.29160 23.17900 833 100.0000 0.000000 50.00000 45.65530 23.58200 23.06070 834 0.000000 10.00000 50.00000 5.180010 3.239440 21.26580 835 10.00000 10.00000 50.00000 5.589250 3.450440 21.28490 836 10.00000 0.000000 50.00000 5.234390 2.740820 21.16660 837 30.00000 10.00000 50.00000 8.170370 4.781280 21.40590 838 30.00000 0.000000 50.00000 7.815510 4.071660 21.28760 839 50.00000 10.00000 50.00000 13.91930 7.745470 21.67530 840 50.00000 0.000000 50.00000 13.56450 7.035850 21.55700 841 70.00000 10.00000 50.00000 23.47150 12.67060 22.12290 842 70.00000 0.000000 50.00000 23.11660 11.96090 22.00460 843 90.00000 10.00000 50.00000 37.33020 19.81620 22.77230 844 90.00000 0.000000 50.00000 36.97530 19.10660 22.65400 845 0.000000 20.00000 50.00000 5.997230 4.873650 21.53820 846 10.00000 20.00000 50.00000 6.406470 5.084660 21.55730 847 20.00000 20.00000 50.00000 7.348910 5.570580 21.60150 848 30.00000 20.00000 50.00000 8.987590 6.415490 21.67830 849 40.00000 20.00000 50.00000 11.42230 7.670820 21.79240 850 50.00000 20.00000 50.00000 14.73660 9.379680 21.94770 851 60.00000 20.00000 50.00000 19.00360 11.57980 22.14760 852 70.00000 20.00000 50.00000 24.28870 14.30480 22.39530 853 80.00000 20.00000 50.00000 30.65160 17.58550 22.69340 854 90.00000 20.00000 50.00000 38.14740 21.45040 23.04470 855 100.0000 20.00000 50.00000 46.82740 25.92580 23.45140 856 0.000000 30.00000 50.00000 7.418190 7.715180 22.01180 857 10.00000 30.00000 50.00000 7.827430 7.926180 22.03100 858 20.00000 30.00000 50.00000 8.769870 8.412100 22.07520 859 30.00000 30.00000 50.00000 10.40860 9.257010 22.15190 860 40.00000 30.00000 50.00000 12.84320 10.51230 22.26600 861 50.00000 30.00000 50.00000 16.15750 12.22120 22.42130 862 60.00000 30.00000 50.00000 20.42450 14.42130 22.62130 863 70.00000 30.00000 50.00000 25.70960 17.14630 22.86890 864 80.00000 30.00000 50.00000 32.07260 20.42710 23.16710 865 90.00000 30.00000 50.00000 39.56840 24.29190 23.51830 866 100.0000 30.00000 50.00000 48.24840 28.76730 23.92510 867 0.000000 40.00000 50.00000 9.529380 11.93700 22.71560 868 10.00000 40.00000 50.00000 9.938620 12.14800 22.73470 869 20.00000 40.00000 50.00000 10.88110 12.63390 22.77890 870 30.00000 40.00000 50.00000 12.51970 13.47880 22.85570 871 40.00000 40.00000 50.00000 14.95440 14.73410 22.96980 872 50.00000 40.00000 50.00000 18.26870 16.44300 23.12510 873 60.00000 40.00000 50.00000 22.53570 18.64310 23.32500 874 70.00000 40.00000 50.00000 27.82080 21.36810 23.57270 875 80.00000 40.00000 50.00000 34.18380 24.64880 23.87080 876 90.00000 40.00000 50.00000 41.67960 28.51370 24.22210 877 100.0000 40.00000 50.00000 50.35960 32.98910 24.62880 878 0.000000 50.00000 50.00000 12.40330 17.68400 23.67350 879 10.00000 50.00000 50.00000 12.81260 17.89500 23.69270 880 20.00000 50.00000 50.00000 13.75500 18.38100 23.73690 881 30.00000 50.00000 50.00000 15.39370 19.22590 23.81370 882 40.00000 50.00000 50.00000 17.82840 20.48120 23.92780 883 60.00000 50.00000 50.00000 25.40960 24.39010 24.28300 884 70.00000 50.00000 50.00000 30.69480 27.11520 24.53070 885 80.00000 50.00000 50.00000 37.05770 30.39590 24.82880 886 90.00000 50.00000 50.00000 44.55350 34.26080 25.18000 887 100.0000 50.00000 50.00000 53.23350 38.73620 25.58680 888 0.000000 60.00000 50.00000 16.10340 25.08310 24.90690 889 10.00000 60.00000 50.00000 16.51260 25.29410 24.92610 890 20.00000 60.00000 50.00000 17.45500 25.78000 24.97020 891 30.00000 60.00000 50.00000 19.09370 26.62490 25.04700 892 40.00000 60.00000 50.00000 21.52840 27.88030 25.16110 893 50.00000 60.00000 50.00000 24.84270 29.58910 25.31640 894 60.00000 60.00000 50.00000 29.10970 31.78920 25.51640 895 70.00000 60.00000 50.00000 34.39480 34.51420 25.76400 896 80.00000 60.00000 50.00000 40.75770 37.79500 26.06220 897 90.00000 60.00000 50.00000 48.25350 41.65980 26.41340 898 100.0000 60.00000 50.00000 56.93350 46.13530 26.82010 899 0.000000 70.00000 50.00000 20.68630 34.24760 26.43460 900 10.00000 70.00000 50.00000 21.09550 34.45860 26.45370 901 20.00000 70.00000 50.00000 22.03790 34.94460 26.49790 902 30.00000 70.00000 50.00000 23.67660 35.78950 26.57470 903 40.00000 70.00000 50.00000 26.11130 37.04480 26.68880 904 50.00000 70.00000 50.00000 29.42560 38.75370 26.84410 905 60.00000 70.00000 50.00000 33.69260 40.95370 27.04400 906 70.00000 70.00000 50.00000 38.97770 43.67880 27.29170 907 80.00000 70.00000 50.00000 45.34060 46.95950 27.58980 908 90.00000 70.00000 50.00000 52.83650 50.82440 27.94110 909 100.0000 70.00000 50.00000 61.51640 55.29980 28.34780 910 0.000000 80.00000 50.00000 26.20380 45.28110 28.27370 911 10.00000 80.00000 50.00000 26.61300 45.49210 28.29290 912 20.00000 80.00000 50.00000 27.55550 45.97800 28.33710 913 30.00000 80.00000 50.00000 29.19410 46.82290 28.41390 914 40.00000 80.00000 50.00000 31.62880 48.07830 28.52790 915 50.00000 80.00000 50.00000 34.94310 49.78710 28.68330 916 60.00000 80.00000 50.00000 39.21010 51.98720 28.88320 917 70.00000 80.00000 50.00000 44.49520 54.71220 29.13080 918 80.00000 80.00000 50.00000 50.85820 57.99300 29.42900 919 90.00000 80.00000 50.00000 58.35400 61.85780 29.78020 920 100.0000 80.00000 50.00000 67.03400 66.33330 30.18700 921 0.000000 90.00000 50.00000 32.70360 58.27900 30.44040 922 10.00000 90.00000 50.00000 33.11290 58.49000 30.45960 923 20.00000 90.00000 50.00000 34.05530 58.97590 30.50370 924 30.00000 90.00000 50.00000 35.69400 59.82090 30.58050 925 40.00000 90.00000 50.00000 38.12870 61.07620 30.69460 926 50.00000 90.00000 50.00000 41.44300 62.78500 30.84990 927 60.00000 90.00000 50.00000 45.71000 64.98510 31.04980 928 70.00000 90.00000 50.00000 50.99510 67.71010 31.29750 929 80.00000 90.00000 50.00000 57.35800 70.99090 31.59560 930 90.00000 90.00000 50.00000 64.85380 74.85580 31.94690 931 100.0000 90.00000 50.00000 73.53380 79.33120 32.35360 932 0.000000 100.0000 50.00000 40.23040 73.33030 32.94930 933 10.00000 100.0000 50.00000 40.63960 73.54130 32.96850 934 20.00000 100.0000 50.00000 41.58200 74.02730 33.01260 935 30.00000 100.0000 50.00000 43.22070 74.87220 33.08940 936 40.00000 100.0000 50.00000 45.65540 76.12750 33.20350 937 50.00000 100.0000 50.00000 48.96970 77.83640 33.35880 938 60.00000 100.0000 50.00000 53.23670 80.03640 33.55880 939 70.00000 100.0000 50.00000 58.52180 82.76150 33.80640 940 80.00000 100.0000 50.00000 64.88470 86.04220 34.10460 941 90.00000 100.0000 50.00000 72.38050 89.90710 34.45580 942 100.0000 100.0000 50.00000 81.06050 94.38250 34.86250 943 0.000000 10.00000 60.00000 7.047640 3.986380 31.10280 944 30.00000 10.00000 60.00000 10.03800 5.528210 31.24290 945 30.00000 0.000000 60.00000 9.683140 4.818590 31.12460 946 50.00000 10.00000 60.00000 15.78700 8.492410 31.51230 947 50.00000 0.000000 60.00000 15.43210 7.782780 31.39400 948 70.00000 10.00000 60.00000 25.33910 13.41750 31.95990 949 70.00000 0.000000 60.00000 24.98420 12.70790 31.84160 950 90.00000 10.00000 60.00000 39.19780 20.56310 32.60930 951 100.0000 10.00000 60.00000 47.87780 25.03850 33.01600 952 100.0000 0.000000 60.00000 47.52300 24.32890 32.89770 953 10.00000 0.000000 60.00000 7.102020 3.487760 31.00370 954 10.00000 10.00000 60.00000 7.456880 4.197380 31.12190 955 20.00000 10.00000 60.00000 8.399320 4.683300 31.16610 956 20.00000 0.000000 60.00000 8.044460 3.973680 31.04780 957 40.00000 10.00000 60.00000 12.47270 6.783540 31.35700 958 40.00000 0.000000 60.00000 12.11780 6.073920 31.23870 959 60.00000 10.00000 60.00000 20.05400 10.69250 31.71220 960 60.00000 0.000000 60.00000 19.69910 9.982850 31.59390 961 80.00000 10.00000 60.00000 31.70200 16.69830 32.25800 962 80.00000 0.000000 60.00000 31.34720 15.98860 32.13970 963 90.00000 0.000000 60.00000 38.84300 19.85350 32.49100 964 0.000000 20.00000 60.00000 7.864860 5.620590 31.37520 965 10.00000 20.00000 60.00000 8.274100 5.831590 31.39430 966 20.00000 20.00000 60.00000 9.216540 6.317520 31.43850 967 30.00000 20.00000 60.00000 10.85520 7.162430 31.51530 968 40.00000 20.00000 60.00000 13.28990 8.417750 31.62940 969 50.00000 20.00000 60.00000 16.60420 10.12660 31.78470 970 60.00000 20.00000 60.00000 20.87120 12.32670 31.98460 971 70.00000 20.00000 60.00000 26.15630 15.05170 32.23230 972 80.00000 20.00000 60.00000 32.51920 18.33250 32.53040 973 90.00000 20.00000 60.00000 40.01500 22.19730 32.88170 974 100.0000 20.00000 60.00000 48.69500 26.67280 33.28840 975 0.000000 30.00000 60.00000 9.285820 8.462110 31.84880 976 10.00000 30.00000 60.00000 9.695060 8.673110 31.86800 977 20.00000 30.00000 60.00000 10.63750 9.159040 31.91220 978 30.00000 30.00000 60.00000 12.27620 10.00390 31.98900 979 40.00000 30.00000 60.00000 14.71090 11.25930 32.10300 980 50.00000 30.00000 60.00000 18.02520 12.96810 32.25830 981 60.00000 30.00000 60.00000 22.29210 15.16820 32.45830 982 70.00000 30.00000 60.00000 27.57730 17.89320 32.70590 983 80.00000 30.00000 60.00000 33.94020 21.17400 33.00410 984 90.00000 30.00000 60.00000 41.43600 25.03880 33.35530 985 100.0000 30.00000 60.00000 50.11600 29.51430 33.76210 986 0.000000 40.00000 60.00000 11.39700 12.68390 32.55260 987 10.00000 40.00000 60.00000 11.80620 12.89490 32.57170 988 20.00000 40.00000 60.00000 12.74870 13.38080 32.61590 989 30.00000 40.00000 60.00000 14.38740 14.22570 32.69270 990 40.00000 40.00000 60.00000 16.82210 15.48110 32.80680 991 50.00000 40.00000 60.00000 20.13640 17.18990 32.96210 992 60.00000 40.00000 60.00000 24.40330 19.39000 33.16200 993 70.00000 40.00000 60.00000 29.68850 22.11500 33.40970 994 80.00000 40.00000 60.00000 36.05140 25.39580 33.70780 995 90.00000 40.00000 60.00000 43.54720 29.26060 34.05910 996 100.0000 40.00000 60.00000 52.22720 33.73610 34.46580 997 0.000000 50.00000 60.00000 14.27100 18.43100 33.51060 998 10.00000 50.00000 60.00000 14.68020 18.64200 33.52970 999 20.00000 50.00000 60.00000 15.62260 19.12790 33.57390 1000 30.00000 50.00000 60.00000 17.26130 19.97280 33.65070 1001 40.00000 50.00000 60.00000 19.69600 21.22810 33.76480 1002 50.00000 50.00000 60.00000 23.01030 22.93700 33.92010 1003 60.00000 50.00000 60.00000 27.27730 25.13710 34.12000 1004 70.00000 50.00000 60.00000 32.56240 27.86210 34.36770 1005 80.00000 50.00000 60.00000 38.92530 31.14290 34.66580 1006 90.00000 50.00000 60.00000 46.42110 35.00770 35.01710 1007 100.0000 50.00000 60.00000 55.10110 39.48310 35.42380 1008 0.000000 60.00000 60.00000 17.97100 25.83000 34.74390 1009 10.00000 60.00000 60.00000 18.38020 26.04100 34.76310 1010 20.00000 60.00000 60.00000 19.32270 26.52700 34.80730 1011 30.00000 60.00000 60.00000 20.96140 27.37190 34.88400 1012 40.00000 60.00000 60.00000 23.39600 28.62720 34.99810 1013 50.00000 60.00000 60.00000 26.71030 30.33610 35.15340 1014 70.00000 60.00000 60.00000 36.26240 35.26120 35.60100 1015 80.00000 60.00000 60.00000 42.62540 38.54190 35.89920 1016 90.00000 60.00000 60.00000 50.12120 42.40680 36.25040 1017 100.0000 60.00000 60.00000 58.80120 46.88220 36.65710 1018 0.000000 70.00000 60.00000 22.55390 34.99460 36.27160 1019 10.00000 70.00000 60.00000 22.96310 35.20560 36.29070 1020 20.00000 70.00000 60.00000 23.90560 35.69150 36.33490 1021 30.00000 70.00000 60.00000 25.54430 36.53640 36.41170 1022 40.00000 70.00000 60.00000 27.97890 37.79170 36.52580 1023 50.00000 70.00000 60.00000 31.29320 39.50060 36.68110 1024 60.00000 70.00000 60.00000 35.56020 41.70070 36.88100 1025 70.00000 70.00000 60.00000 40.84530 44.42570 37.12870 1026 80.00000 70.00000 60.00000 47.20830 47.70640 37.42680 1027 90.00000 70.00000 60.00000 54.70410 51.57130 37.77810 1028 90.00000 80.00000 60.00000 60.22160 62.60480 39.61720 1029 0.000000 80.00000 60.00000 28.07140 46.02800 38.11070 1030 10.00000 80.00000 60.00000 28.48070 46.23900 38.12990 1031 20.00000 80.00000 60.00000 29.42310 46.72500 38.17410 1032 30.00000 80.00000 60.00000 31.06180 47.56990 38.25090 1033 40.00000 80.00000 60.00000 33.49650 48.82520 38.36500 1034 50.00000 80.00000 60.00000 36.81080 50.53410 38.52030 1035 60.00000 80.00000 60.00000 41.07770 52.73410 38.72020 1036 70.00000 80.00000 60.00000 46.36290 55.45920 38.96790 1037 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 1038 100.0000 70.00000 60.00000 63.38410 56.04670 38.18480 1039 100.0000 80.00000 60.00000 68.90160 67.08020 40.02400 1040 0.000000 90.00000 60.00000 34.57130 59.02600 40.27740 1041 10.00000 90.00000 60.00000 34.98050 59.23700 40.29660 1042 20.00000 90.00000 60.00000 35.92300 59.72290 40.34070 1043 30.00000 90.00000 60.00000 37.56160 60.56780 40.41750 1044 40.00000 90.00000 60.00000 39.99630 61.82310 40.53160 1045 50.00000 90.00000 60.00000 43.31060 63.53200 40.68690 1046 60.00000 90.00000 60.00000 47.57760 65.73210 40.88680 1047 70.00000 90.00000 60.00000 52.86270 68.45710 41.13450 1048 80.00000 90.00000 60.00000 59.22570 71.73780 41.43260 1049 90.00000 90.00000 60.00000 66.72150 75.60270 41.78390 1050 100.0000 90.00000 60.00000 75.40150 80.07810 42.19060 1051 0.000000 100.0000 60.00000 42.09800 74.07730 42.78630 1052 10.00000 100.0000 60.00000 42.50720 74.28830 42.80550 1053 20.00000 100.0000 60.00000 43.44970 74.77420 42.84960 1054 30.00000 100.0000 60.00000 45.08840 75.61910 42.92640 1055 40.00000 100.0000 60.00000 47.52300 76.87440 43.04050 1056 50.00000 100.0000 60.00000 50.83730 78.58330 43.19580 1057 60.00000 100.0000 60.00000 55.10430 80.78340 43.39580 1058 70.00000 100.0000 60.00000 60.38940 83.50840 43.64340 1059 80.00000 100.0000 60.00000 66.75240 86.78910 43.94160 1060 90.00000 100.0000 60.00000 74.24820 90.65400 44.29280 1061 100.0000 100.0000 60.00000 82.92820 95.12940 44.69950 1062 20.00000 10.00000 70.00000 10.71260 5.608460 43.35030 1063 20.00000 0.000000 70.00000 10.35770 4.898840 43.23200 1064 40.00000 10.00000 70.00000 14.78590 7.708700 43.54120 1065 40.00000 0.000000 70.00000 14.43110 6.999080 43.42290 1066 60.00000 10.00000 70.00000 22.36720 11.61760 43.89640 1067 60.00000 0.000000 70.00000 22.01240 10.90800 43.77810 1068 80.00000 10.00000 70.00000 34.01530 17.62340 44.44220 1069 80.00000 0.000000 70.00000 33.66040 16.91380 44.32390 1070 100.0000 10.00000 70.00000 50.19110 25.96370 45.20020 1071 100.0000 0.000000 70.00000 49.83620 25.25410 45.08190 1072 0.000000 10.00000 70.00000 9.360910 4.911540 43.28700 1073 10.00000 10.00000 70.00000 9.770140 5.122540 43.30610 1074 10.00000 0.000000 70.00000 9.415280 4.412920 43.18790 1075 30.00000 10.00000 70.00000 12.35130 6.453370 43.42710 1076 30.00000 0.000000 70.00000 11.99640 5.743750 43.30880 1077 50.00000 10.00000 70.00000 18.10020 9.417570 43.69650 1078 50.00000 0.000000 70.00000 17.74540 8.707940 43.57820 1079 70.00000 10.00000 70.00000 27.65240 14.34270 44.14410 1080 70.00000 0.000000 70.00000 27.29750 13.63300 44.02580 1081 90.00000 10.00000 70.00000 41.51110 21.48830 44.79350 1082 90.00000 0.000000 70.00000 41.15620 20.77870 44.67520 1083 0.000000 20.00000 70.00000 10.17810 6.545750 43.55940 1084 10.00000 20.00000 70.00000 10.58740 6.756750 43.57860 1085 20.00000 20.00000 70.00000 11.52980 7.242680 43.62270 1086 30.00000 20.00000 70.00000 13.16850 8.087590 43.69950 1087 40.00000 20.00000 70.00000 15.60320 9.342910 43.81360 1088 50.00000 20.00000 70.00000 18.91750 11.05180 43.96890 1089 60.00000 20.00000 70.00000 23.18440 13.25180 44.16880 1090 70.00000 20.00000 70.00000 28.46960 15.97690 44.41650 1091 80.00000 20.00000 70.00000 34.83250 19.25760 44.71460 1092 90.00000 20.00000 70.00000 42.32830 23.12250 45.06590 1093 100.0000 20.00000 70.00000 51.00830 27.59790 45.47260 1094 0.000000 30.00000 70.00000 11.59910 9.387270 44.03300 1095 10.00000 30.00000 70.00000 12.00830 9.598270 44.05220 1096 20.00000 30.00000 70.00000 12.95080 10.08420 44.09640 1097 30.00000 30.00000 70.00000 14.58940 10.92910 44.17320 1098 40.00000 30.00000 70.00000 17.02410 12.18440 44.28720 1099 50.00000 30.00000 70.00000 20.33840 13.89330 44.44250 1100 60.00000 30.00000 70.00000 24.60540 16.09340 44.64250 1101 70.00000 30.00000 70.00000 29.89050 18.81840 44.89010 1102 80.00000 30.00000 70.00000 36.25350 22.09910 45.18830 1103 90.00000 30.00000 70.00000 43.74930 25.96400 45.53950 1104 100.0000 30.00000 70.00000 52.42930 30.43940 45.94630 1105 0.000000 40.00000 70.00000 13.71030 13.60910 44.73680 1106 10.00000 40.00000 70.00000 14.11950 13.82010 44.75590 1107 20.00000 40.00000 70.00000 15.06200 14.30600 44.80010 1108 30.00000 40.00000 70.00000 16.70060 15.15090 44.87690 1109 40.00000 40.00000 70.00000 19.13530 16.40620 44.99100 1110 50.00000 40.00000 70.00000 22.44960 18.11510 45.14630 1111 60.00000 40.00000 70.00000 26.71660 20.31520 45.34620 1112 70.00000 40.00000 70.00000 32.00170 23.04020 45.59390 1113 80.00000 40.00000 70.00000 38.36470 26.32090 45.89200 1114 90.00000 40.00000 70.00000 45.86050 30.18580 46.24330 1115 100.0000 40.00000 70.00000 54.54040 34.66120 46.65000 1116 0.000000 50.00000 70.00000 16.58420 19.35610 45.69480 1117 10.00000 50.00000 70.00000 16.99350 19.56710 45.71390 1118 20.00000 50.00000 70.00000 17.93590 20.05310 45.75810 1119 30.00000 50.00000 70.00000 19.57460 20.89800 45.83490 1120 40.00000 50.00000 70.00000 22.00930 22.15330 45.94900 1121 50.00000 50.00000 70.00000 25.32360 23.86220 46.10430 1122 60.00000 50.00000 70.00000 29.59050 26.06220 46.30420 1123 70.00000 50.00000 70.00000 34.87570 28.78730 46.55190 1124 80.00000 50.00000 70.00000 41.23860 32.06800 46.85000 1125 90.00000 50.00000 70.00000 48.73440 35.93290 47.20130 1126 100.0000 50.00000 70.00000 57.41440 40.40830 47.60800 1127 0.000000 60.00000 70.00000 20.28430 26.75520 46.92810 1128 10.00000 60.00000 70.00000 20.69350 26.96620 46.94730 1129 20.00000 60.00000 70.00000 21.63590 27.45210 46.99150 1130 30.00000 60.00000 70.00000 23.27460 28.29700 47.06820 1131 40.00000 60.00000 70.00000 25.70930 29.55240 47.18230 1132 50.00000 60.00000 70.00000 29.02360 31.26120 47.33760 1133 60.00000 60.00000 70.00000 33.29060 33.46130 47.53760 1134 70.00000 60.00000 70.00000 38.57570 36.18630 47.78520 1135 80.00000 60.00000 70.00000 44.93860 39.46710 48.08340 1136 90.00000 60.00000 70.00000 52.43440 43.33190 48.43460 1137 100.0000 60.00000 70.00000 61.11440 47.80740 48.84140 1138 0.000000 70.00000 70.00000 24.86720 35.91970 48.45580 1139 10.00000 70.00000 70.00000 25.27640 36.13070 48.47490 1140 20.00000 70.00000 70.00000 26.21880 36.61670 48.51910 1141 30.00000 70.00000 70.00000 27.85750 37.46160 48.59590 1142 40.00000 70.00000 70.00000 30.29220 38.71690 48.71000 1143 50.00000 70.00000 70.00000 33.60650 40.42580 48.86530 1144 60.00000 70.00000 70.00000 37.87350 42.62580 49.06520 1145 80.00000 70.00000 70.00000 49.52150 48.63160 49.61100 1146 90.00000 70.00000 70.00000 57.01730 52.49650 49.96230 1147 100.0000 70.00000 70.00000 65.69730 56.97190 50.36900 1148 0.000000 80.00000 70.00000 30.38470 46.95320 50.29500 1149 10.00000 80.00000 70.00000 30.79390 47.16420 50.31410 1150 20.00000 80.00000 70.00000 31.73640 47.65010 50.35830 1151 30.00000 80.00000 70.00000 33.37500 48.49500 50.43510 1152 40.00000 80.00000 70.00000 35.80970 49.75040 50.54920 1153 50.00000 80.00000 70.00000 39.12400 51.45920 50.70450 1154 60.00000 80.00000 70.00000 43.39100 53.65930 50.90440 1155 70.00000 80.00000 70.00000 48.67610 56.38430 51.15210 1156 80.00000 80.00000 70.00000 55.03910 59.66510 51.45020 1157 90.00000 80.00000 70.00000 62.53490 63.52990 51.80150 1158 100.0000 80.00000 70.00000 71.21490 68.00540 52.20820 1159 0.000000 90.00000 70.00000 36.88450 59.95110 52.46160 1160 10.00000 90.00000 70.00000 37.29380 60.16210 52.48080 1161 20.00000 90.00000 70.00000 38.23620 60.64800 52.52490 1162 30.00000 90.00000 70.00000 39.87490 61.49300 52.60170 1163 40.00000 90.00000 70.00000 42.30960 62.74830 52.71580 1164 50.00000 90.00000 70.00000 45.62390 64.45710 52.87110 1165 60.00000 90.00000 70.00000 49.89090 66.65720 53.07100 1166 70.00000 90.00000 70.00000 55.17600 69.38220 53.31870 1167 80.00000 90.00000 70.00000 61.53890 72.66300 53.61690 1168 90.00000 90.00000 70.00000 69.03470 76.52780 53.96810 1169 100.0000 90.00000 70.00000 77.71470 81.00330 54.37480 1170 0.000000 100.0000 70.00000 44.41130 75.00240 54.97050 1171 10.00000 100.0000 70.00000 44.82050 75.21340 54.98970 1172 20.00000 100.0000 70.00000 45.76290 75.69940 55.03390 1173 30.00000 100.0000 70.00000 47.40160 76.54430 55.11060 1174 40.00000 100.0000 70.00000 49.83630 77.79960 55.22470 1175 50.00000 100.0000 70.00000 53.15060 79.50850 55.38000 1176 60.00000 100.0000 70.00000 57.41760 81.70850 55.58000 1177 70.00000 100.0000 70.00000 62.70270 84.43360 55.82760 1178 80.00000 100.0000 70.00000 69.06560 87.71430 56.12580 1179 90.00000 100.0000 70.00000 76.56140 91.57920 56.47700 1180 100.0000 100.0000 70.00000 85.24140 96.05460 56.88370 1181 20.00000 10.00000 80.00000 13.49760 6.722290 58.01930 1182 20.00000 0.000000 80.00000 13.14270 6.012670 57.90100 1183 40.00000 10.00000 80.00000 17.57100 8.822530 58.21010 1184 40.00000 0.000000 80.00000 17.21610 8.112910 58.09180 1185 60.00000 10.00000 80.00000 25.15220 12.73150 58.56540 1186 60.00000 0.000000 80.00000 24.79740 12.02180 58.44710 1187 80.00000 10.00000 80.00000 36.80030 18.73720 59.11120 1188 80.00000 0.000000 80.00000 36.44540 18.02760 58.99290 1189 100.0000 10.00000 80.00000 52.97610 27.07750 59.86920 1190 100.0000 0.000000 80.00000 52.62120 26.36790 59.75090 1191 0.000000 10.00000 80.00000 12.14590 6.025360 57.95590 1192 10.00000 10.00000 80.00000 12.55520 6.236370 57.97510 1193 10.00000 0.000000 80.00000 12.20030 5.526750 57.85680 1194 30.00000 10.00000 80.00000 15.13630 7.567200 58.09610 1195 30.00000 0.000000 80.00000 14.78140 6.857580 57.97780 1196 50.00000 10.00000 80.00000 20.88530 10.53140 58.36540 1197 50.00000 0.000000 80.00000 20.53040 9.821770 58.24710 1198 70.00000 10.00000 80.00000 30.43740 15.45650 58.81300 1199 70.00000 0.000000 80.00000 30.08250 14.74690 58.69470 1200 90.00000 10.00000 80.00000 44.29610 22.60210 59.46240 1201 90.00000 0.000000 80.00000 43.94120 21.89250 59.34410 1202 0.000000 20.00000 80.00000 12.96310 7.659580 58.22830 1203 10.00000 20.00000 80.00000 13.37240 7.870580 58.24750 1204 20.00000 20.00000 80.00000 14.31480 8.356510 58.29170 1205 30.00000 20.00000 80.00000 15.95350 9.201420 58.36850 1206 40.00000 20.00000 80.00000 18.38820 10.45670 58.48250 1207 50.00000 20.00000 80.00000 21.70250 12.16560 58.63780 1208 60.00000 20.00000 80.00000 25.96950 14.36570 58.83780 1209 70.00000 20.00000 80.00000 31.25460 17.09070 59.08540 1210 80.00000 20.00000 80.00000 37.61750 20.37150 59.38360 1211 90.00000 20.00000 80.00000 45.11330 24.23630 59.73480 1212 100.0000 20.00000 80.00000 53.79330 28.71170 60.14160 1213 0.000000 30.00000 80.00000 14.38410 10.50110 58.70200 1214 10.00000 30.00000 80.00000 14.79330 10.71210 58.72120 1215 20.00000 30.00000 80.00000 15.73580 11.19800 58.76530 1216 30.00000 30.00000 80.00000 17.37450 12.04290 58.84210 1217 40.00000 30.00000 80.00000 19.80910 13.29830 58.95620 1218 50.00000 30.00000 80.00000 23.12340 15.00710 59.11150 1219 60.00000 30.00000 80.00000 27.39040 17.20720 59.31140 1220 70.00000 30.00000 80.00000 32.67550 19.93220 59.55910 1221 80.00000 30.00000 80.00000 39.03850 23.21300 59.85730 1222 90.00000 30.00000 80.00000 46.53430 27.07780 60.20850 1223 100.0000 30.00000 80.00000 55.21430 31.55330 60.61520 1224 0.000000 40.00000 80.00000 16.49530 14.72290 59.40570 1225 10.00000 40.00000 80.00000 16.90450 14.93390 59.42490 1226 20.00000 40.00000 80.00000 17.84700 15.41980 59.46910 1227 30.00000 40.00000 80.00000 19.48570 16.26470 59.54590 1228 40.00000 40.00000 80.00000 21.92030 17.52010 59.65990 1229 50.00000 40.00000 80.00000 25.23460 19.22890 59.81520 1230 60.00000 40.00000 80.00000 29.50160 21.42900 60.01520 1231 70.00000 40.00000 80.00000 34.78670 24.15400 60.26280 1232 80.00000 40.00000 80.00000 41.14970 27.43480 60.56100 1233 90.00000 40.00000 80.00000 48.64550 31.29960 60.91220 1234 100.0000 40.00000 80.00000 57.32550 35.77510 61.31900 1235 0.000000 50.00000 80.00000 19.36920 20.47000 60.36370 1236 10.00000 50.00000 80.00000 19.77850 20.68100 60.38290 1237 20.00000 50.00000 80.00000 20.72090 21.16690 60.42710 1238 30.00000 50.00000 80.00000 22.35960 22.01180 60.50380 1239 40.00000 50.00000 80.00000 24.79430 23.26710 60.61790 1240 50.00000 50.00000 80.00000 28.10860 24.97600 60.77320 1241 60.00000 50.00000 80.00000 32.37560 27.17610 60.97320 1242 70.00000 50.00000 80.00000 37.66070 29.90110 61.22080 1243 80.00000 50.00000 80.00000 44.02360 33.18180 61.51900 1244 90.00000 50.00000 80.00000 51.51940 37.04670 61.87020 1245 100.0000 50.00000 80.00000 60.19940 41.52210 62.27690 1246 0.000000 60.00000 80.00000 23.06930 27.86900 61.59710 1247 10.00000 60.00000 80.00000 23.47850 28.08000 61.61630 1248 20.00000 60.00000 80.00000 24.42100 28.56590 61.66040 1249 30.00000 60.00000 80.00000 26.05960 29.41090 61.73720 1250 40.00000 60.00000 80.00000 28.49430 30.66620 61.85130 1251 50.00000 60.00000 80.00000 31.80860 32.37510 62.00660 1252 60.00000 60.00000 80.00000 36.07560 34.57510 62.20650 1253 70.00000 60.00000 80.00000 41.36070 37.30010 62.45420 1254 80.00000 60.00000 80.00000 47.72370 40.58090 62.75230 1255 90.00000 60.00000 80.00000 55.21950 44.44580 63.10360 1256 100.0000 60.00000 80.00000 63.89940 48.92120 63.51030 1257 0.000000 70.00000 80.00000 27.65220 37.03360 63.12470 1258 10.00000 70.00000 80.00000 28.06140 37.24460 63.14390 1259 20.00000 70.00000 80.00000 29.00390 37.73050 63.18810 1260 30.00000 70.00000 80.00000 30.64250 38.57540 63.26480 1261 40.00000 70.00000 80.00000 33.07720 39.83070 63.37890 1262 50.00000 70.00000 80.00000 36.39150 41.53960 63.53420 1263 60.00000 70.00000 80.00000 40.65850 43.73970 63.73420 1264 70.00000 70.00000 80.00000 45.94360 46.46470 63.98180 1265 80.00000 70.00000 80.00000 52.30660 49.74540 64.28000 1266 90.00000 70.00000 80.00000 59.80240 53.61030 64.63120 1267 5.000000 55.00000 15.00000 10.83230 19.86290 5.960190 1268 0.000000 80.00000 80.00000 33.16970 48.06700 64.96390 1269 10.00000 80.00000 80.00000 33.57890 48.27800 64.98310 1270 20.00000 80.00000 80.00000 34.52140 48.76400 65.02720 1271 30.00000 80.00000 80.00000 36.16010 49.60890 65.10400 1272 40.00000 80.00000 80.00000 38.59470 50.86420 65.21810 1273 50.00000 80.00000 80.00000 41.90900 52.57310 65.37340 1274 60.00000 80.00000 80.00000 46.17600 54.77310 65.57340 1275 70.00000 80.00000 80.00000 51.46110 57.49820 65.82100 1276 90.00000 80.00000 80.00000 65.31990 64.64380 66.47040 1277 5.000000 45.00000 15.00000 7.552820 13.30470 4.867010 1278 0.000000 90.00000 80.00000 39.66960 61.06490 67.13050 1279 10.00000 90.00000 80.00000 40.07880 61.27590 67.14970 1280 20.00000 90.00000 80.00000 41.02120 61.76190 67.19390 1281 30.00000 90.00000 80.00000 42.65990 62.60680 67.27070 1282 40.00000 90.00000 80.00000 45.09460 63.86210 67.38480 1283 50.00000 90.00000 80.00000 48.40890 65.57100 67.54010 1284 60.00000 90.00000 80.00000 52.67590 67.77100 67.74000 1285 70.00000 90.00000 80.00000 57.96100 70.49610 67.98770 1286 80.00000 90.00000 80.00000 64.32390 73.77680 68.28580 1287 90.00000 90.00000 80.00000 71.81970 77.64170 68.63710 1288 5.000000 95.00000 5.000000 32.74190 64.12380 11.88170 1289 0.000000 100.0000 80.00000 47.19630 76.11630 69.63950 1290 10.00000 100.0000 80.00000 47.60550 76.32730 69.65870 1291 20.00000 100.0000 80.00000 48.54790 76.81320 69.70280 1292 30.00000 100.0000 80.00000 50.18660 77.65810 69.77960 1293 40.00000 100.0000 80.00000 52.62130 78.91340 69.89370 1294 50.00000 100.0000 80.00000 55.93560 80.62230 70.04900 1295 60.00000 100.0000 80.00000 60.20260 82.82240 70.24890 1296 70.00000 100.0000 80.00000 65.48770 85.54740 70.49660 1297 80.00000 100.0000 80.00000 71.85060 88.82810 70.79470 1298 90.00000 100.0000 80.00000 79.34640 92.69300 71.14600 1299 5.000000 15.00000 15.00000 2.205280 2.611160 3.084480 1300 20.00000 10.00000 90.00000 16.77850 8.034430 75.29990 1301 20.00000 0.000000 90.00000 16.42360 7.324810 75.18160 1302 40.00000 10.00000 90.00000 20.85180 10.13470 75.49080 1303 40.00000 0.000000 90.00000 20.49700 9.425050 75.37250 1304 60.00000 10.00000 90.00000 28.43310 14.04360 75.84600 1305 60.00000 0.000000 90.00000 28.07820 13.33400 75.72780 1306 80.00000 10.00000 90.00000 40.08120 20.04940 76.39180 1307 80.00000 0.000000 90.00000 39.72630 19.33980 76.27360 1308 100.0000 10.00000 90.00000 56.25700 28.38970 77.14980 1309 100.0000 0.000000 90.00000 55.90210 27.68010 77.03150 1310 0.000000 10.00000 90.00000 15.42680 7.337500 75.23660 1311 10.00000 10.00000 90.00000 15.83600 7.548510 75.25580 1312 10.00000 0.000000 90.00000 15.48120 6.838890 75.13750 1313 30.00000 10.00000 90.00000 18.41710 8.879340 75.37670 1314 30.00000 0.000000 90.00000 18.06230 8.169720 75.25840 1315 50.00000 10.00000 90.00000 24.16610 11.84350 75.64610 1316 50.00000 0.000000 90.00000 23.81130 11.13390 75.52780 1317 70.00000 10.00000 90.00000 33.71820 16.76860 76.09370 1318 70.00000 0.000000 90.00000 33.36340 16.05900 75.97540 1319 90.00000 10.00000 90.00000 47.57700 23.91420 76.74310 1320 90.00000 0.000000 90.00000 47.22210 23.20460 76.62480 1321 0.000000 20.00000 90.00000 16.24400 8.971720 75.50900 1322 10.00000 20.00000 90.00000 16.65320 9.182720 75.52820 1323 20.00000 20.00000 90.00000 17.59570 9.668640 75.57230 1324 30.00000 20.00000 90.00000 19.23440 10.51360 75.64910 1325 40.00000 20.00000 90.00000 21.66900 11.76890 75.76320 1326 50.00000 20.00000 90.00000 24.98330 13.47770 75.91850 1327 60.00000 20.00000 90.00000 29.25030 15.67780 76.11850 1328 70.00000 20.00000 90.00000 34.53550 18.40280 76.36610 1329 80.00000 20.00000 90.00000 40.89840 21.68360 76.66430 1330 90.00000 20.00000 90.00000 48.39420 25.54850 77.01550 1331 5.000000 25.00000 15.00000 3.312380 4.825050 3.453510 1332 0.000000 30.00000 90.00000 17.66500 11.81320 75.98270 1333 10.00000 30.00000 90.00000 18.07420 12.02420 76.00180 1334 20.00000 30.00000 90.00000 19.01660 12.51020 76.04600 1335 30.00000 30.00000 90.00000 20.65530 13.35510 76.12280 1336 40.00000 30.00000 90.00000 23.09000 14.61040 76.23690 1337 50.00000 30.00000 90.00000 26.40430 16.31930 76.39220 1338 60.00000 30.00000 90.00000 30.67130 18.51930 76.59210 1339 70.00000 30.00000 90.00000 35.95640 21.24440 76.83980 1340 80.00000 30.00000 90.00000 42.31930 24.52510 77.13790 1341 90.00000 30.00000 90.00000 49.81510 28.39000 77.48920 1342 100.0000 30.00000 90.00000 58.49510 32.86540 77.89590 1343 0.000000 40.00000 90.00000 19.77620 16.03500 76.68640 1344 10.00000 40.00000 90.00000 20.18540 16.24600 76.70560 1345 20.00000 40.00000 90.00000 21.12780 16.73200 76.74970 1346 30.00000 40.00000 90.00000 22.76650 17.57690 76.82650 1347 40.00000 40.00000 90.00000 25.20120 18.83220 76.94060 1348 50.00000 40.00000 90.00000 28.51550 20.54110 77.09590 1349 60.00000 40.00000 90.00000 32.78250 22.74110 77.29580 1350 70.00000 40.00000 90.00000 38.06760 25.46620 77.54350 1351 80.00000 40.00000 90.00000 44.43050 28.74690 77.84170 1352 90.00000 40.00000 90.00000 51.92630 32.61180 78.19290 1353 5.000000 25.00000 5.000000 3.032320 4.713040 1.978450 1354 0.000000 50.00000 90.00000 22.65010 21.78210 77.64440 1355 10.00000 50.00000 90.00000 23.05930 21.99310 77.66360 1356 20.00000 50.00000 90.00000 24.00180 22.47900 77.70770 1357 30.00000 50.00000 90.00000 25.64050 23.32390 77.78450 1358 40.00000 50.00000 90.00000 28.07510 24.57930 77.89860 1359 50.00000 50.00000 90.00000 31.38940 26.28810 78.05390 1360 60.00000 50.00000 90.00000 35.65640 28.48820 78.25380 1361 70.00000 50.00000 90.00000 40.94150 31.21320 78.50150 1362 80.00000 50.00000 90.00000 47.30450 34.49400 78.79960 1363 90.00000 50.00000 90.00000 54.80030 38.35880 79.15090 1364 100.0000 50.00000 90.00000 63.48030 42.83430 79.55760 1365 0.000000 60.00000 90.00000 26.35010 29.18120 78.87770 1366 10.00000 60.00000 90.00000 26.75940 29.39220 78.89690 1367 20.00000 60.00000 90.00000 27.70180 29.87810 78.94110 1368 30.00000 60.00000 90.00000 29.34050 30.72300 79.01790 1369 40.00000 60.00000 90.00000 31.77520 31.97830 79.13190 1370 50.00000 60.00000 90.00000 35.08950 33.68720 79.28720 1371 60.00000 60.00000 90.00000 39.35650 35.88730 79.48720 1372 70.00000 60.00000 90.00000 44.64160 38.61230 79.73480 1373 80.00000 60.00000 90.00000 51.00450 41.89300 80.03300 1374 90.00000 60.00000 90.00000 58.50030 45.75790 80.38420 1375 100.0000 60.00000 90.00000 67.18030 50.23330 80.79100 1376 0.000000 70.00000 90.00000 30.93310 38.34570 80.40540 1377 10.00000 70.00000 90.00000 31.34230 38.55670 80.42460 1378 20.00000 70.00000 90.00000 32.28470 39.04260 80.46870 1379 30.00000 70.00000 90.00000 33.92340 39.88750 80.54550 1380 40.00000 70.00000 90.00000 36.35810 41.14290 80.65960 1381 50.00000 70.00000 90.00000 39.67240 42.85170 80.81490 1382 60.00000 70.00000 90.00000 43.93940 45.05180 81.01480 1383 70.00000 70.00000 90.00000 49.22450 47.77680 81.26250 1384 80.00000 70.00000 90.00000 55.58740 51.05760 81.56060 1385 90.00000 70.00000 90.00000 63.08320 54.92240 81.91190 1386 100.0000 70.00000 90.00000 71.76320 59.39790 82.31860 1387 0.000000 80.00000 90.00000 36.45060 49.37920 82.24460 1388 10.00000 80.00000 90.00000 36.85980 49.59020 82.26370 1389 20.00000 80.00000 90.00000 37.80220 50.07610 82.30790 1390 30.00000 80.00000 90.00000 39.44090 50.92100 82.38470 1391 40.00000 80.00000 90.00000 41.87560 52.17630 82.49880 1392 50.00000 80.00000 90.00000 45.18990 53.88520 82.65410 1393 60.00000 80.00000 90.00000 49.45690 56.08530 82.85400 1394 70.00000 80.00000 90.00000 54.74200 58.81030 83.10170 1395 80.00000 80.00000 90.00000 61.10490 62.09100 83.39980 1396 90.00000 80.00000 90.00000 68.60070 65.95590 83.75110 1397 100.0000 80.00000 90.00000 77.28070 70.43130 84.15780 1398 0.000000 90.00000 90.00000 42.95040 62.37710 84.41120 1399 10.00000 90.00000 90.00000 43.35970 62.58810 84.43040 1400 20.00000 90.00000 90.00000 44.30210 63.07400 84.47450 1401 30.00000 90.00000 90.00000 45.94080 63.91890 84.55130 1402 40.00000 90.00000 90.00000 48.37550 65.17420 84.66540 1403 50.00000 90.00000 90.00000 51.68980 66.88310 84.82070 1404 60.00000 90.00000 90.00000 55.95670 69.08320 85.02070 1405 70.00000 90.00000 90.00000 61.24190 71.80820 85.26830 1406 80.00000 90.00000 90.00000 67.60480 75.08900 85.56650 1407 5.000000 35.00000 15.00000 5.068670 8.337140 4.038950 1408 0.000000 100.0000 90.00000 50.47710 77.42840 86.92010 1409 10.00000 100.0000 90.00000 50.88640 77.63940 86.93930 1410 20.00000 100.0000 90.00000 51.82880 78.12530 86.98350 1411 30.00000 100.0000 90.00000 53.46750 78.97020 87.06030 1412 40.00000 100.0000 90.00000 55.90220 80.22560 87.17430 1413 50.00000 100.0000 90.00000 59.21650 81.93440 87.32960 1414 60.00000 100.0000 90.00000 63.48350 84.13450 87.52960 1415 70.00000 100.0000 90.00000 68.76860 86.85950 87.77720 1416 80.00000 100.0000 90.00000 75.13150 90.14030 88.07540 1417 90.00000 100.0000 90.00000 82.62730 94.00510 88.42660 1418 100.0000 100.0000 90.00000 91.30730 98.48060 88.83340 1419 20.00000 10.00000 100.0000 20.57760 9.553860 95.31060 1420 20.00000 0.000000 100.0000 20.22280 8.844240 95.19230 1421 40.00000 10.00000 100.0000 24.65100 11.65410 95.50150 1422 40.00000 0.000000 100.0000 24.29610 10.94450 95.38320 1423 60.00000 10.00000 100.0000 32.23230 15.56300 95.85670 1424 60.00000 0.000000 100.0000 31.87740 14.85340 95.73840 1425 80.00000 10.00000 100.0000 43.88030 21.56880 96.40250 1426 80.00000 0.000000 100.0000 43.52550 20.85920 96.28420 1427 100.0000 10.00000 100.0000 60.05610 29.90910 97.16050 1428 100.0000 0.000000 100.0000 59.70130 29.19950 97.04220 1429 0.000000 10.00000 100.0000 19.22600 8.856940 95.24720 1430 10.00000 10.00000 100.0000 19.63520 9.067940 95.26640 1431 10.00000 0.000000 100.0000 19.28030 8.358320 95.14810 1432 30.00000 10.00000 100.0000 22.21630 10.39880 95.38740 1433 30.00000 0.000000 100.0000 21.86150 9.689150 95.26910 1434 50.00000 10.00000 100.0000 27.96530 13.36300 95.65680 1435 50.00000 0.000000 100.0000 27.61040 12.65330 95.53850 1436 70.00000 10.00000 100.0000 37.51740 18.28810 96.10440 1437 70.00000 0.000000 100.0000 37.16260 17.57840 95.98610 1438 90.00000 10.00000 100.0000 51.37610 25.43370 96.75370 1439 90.00000 0.000000 100.0000 51.02130 24.72410 96.63550 1440 0.000000 20.00000 100.0000 20.04320 10.49110 95.51970 1441 10.00000 20.00000 100.0000 20.45240 10.70220 95.53880 1442 20.00000 20.00000 100.0000 21.39490 11.18810 95.58300 1443 30.00000 20.00000 100.0000 23.03350 12.03300 95.65980 1444 40.00000 20.00000 100.0000 25.46820 13.28830 95.77390 1445 50.00000 20.00000 100.0000 28.78250 14.99720 95.92920 1446 60.00000 20.00000 100.0000 33.04950 17.19720 96.12910 1447 70.00000 20.00000 100.0000 38.33460 19.92230 96.37680 1448 80.00000 20.00000 100.0000 44.69760 23.20300 96.67490 1449 90.00000 20.00000 100.0000 52.19340 27.06790 97.02620 1450 100.0000 20.00000 100.0000 60.87340 31.54330 97.43290 1451 0.000000 30.00000 100.0000 21.46410 13.33270 95.99330 1452 10.00000 30.00000 100.0000 21.87340 13.54370 96.01250 1453 20.00000 30.00000 100.0000 22.81580 14.02960 96.05670 1454 30.00000 30.00000 100.0000 24.45450 14.87450 96.13340 1455 40.00000 30.00000 100.0000 26.88920 16.12980 96.24750 1456 50.00000 30.00000 100.0000 30.20350 17.83870 96.40280 1457 60.00000 30.00000 100.0000 34.47050 20.03880 96.60280 1458 70.00000 30.00000 100.0000 39.75560 22.76380 96.85040 1459 80.00000 30.00000 100.0000 46.11850 26.04450 97.14860 1460 90.00000 30.00000 100.0000 53.61430 29.90940 97.49980 1461 100.0000 30.00000 100.0000 62.29430 34.38480 97.90650 1462 0.000000 40.00000 100.0000 23.57530 17.55450 96.69700 1463 10.00000 40.00000 100.0000 23.98460 17.76550 96.71620 1464 20.00000 40.00000 100.0000 24.92700 18.25140 96.76040 1465 30.00000 40.00000 100.0000 26.56570 19.09630 96.83720 1466 40.00000 40.00000 100.0000 29.00040 20.35160 96.95130 1467 50.00000 40.00000 100.0000 32.31470 22.06050 97.10660 1468 60.00000 40.00000 100.0000 36.58170 24.26060 97.30650 1469 70.00000 40.00000 100.0000 41.86680 26.98560 97.55420 1470 80.00000 40.00000 100.0000 48.22970 30.26630 97.85230 1471 90.00000 40.00000 100.0000 55.72550 34.13120 98.20360 1472 100.0000 40.00000 100.0000 64.40550 38.60660 98.61030 1473 0.000000 50.00000 100.0000 26.44930 23.30150 97.65500 1474 10.00000 50.00000 100.0000 26.85850 23.51250 97.67420 1475 20.00000 50.00000 100.0000 27.80100 23.99850 97.71840 1476 30.00000 50.00000 100.0000 29.43960 24.84340 97.79520 1477 40.00000 50.00000 100.0000 31.87430 26.09870 97.90920 1478 50.00000 50.00000 100.0000 35.18860 27.80760 98.06450 1479 60.00000 50.00000 100.0000 39.45560 30.00760 98.26450 1480 70.00000 50.00000 100.0000 44.74070 32.73270 98.51210 1481 80.00000 50.00000 100.0000 51.10370 36.01340 98.81030 1482 90.00000 50.00000 100.0000 58.59950 39.87830 99.16150 1483 100.0000 50.00000 100.0000 67.27940 44.35370 99.56830 1484 0.000000 60.00000 100.0000 30.14930 30.70060 98.88840 1485 10.00000 60.00000 100.0000 30.55860 30.91160 98.90760 1486 20.00000 60.00000 100.0000 31.50100 31.39750 98.95170 1487 30.00000 60.00000 100.0000 33.13970 32.24240 99.02850 1488 40.00000 60.00000 100.0000 35.57440 33.49780 99.14260 1489 50.00000 60.00000 100.0000 38.88870 35.20660 99.29790 1490 60.00000 60.00000 100.0000 43.15560 37.40670 99.49780 1491 70.00000 60.00000 100.0000 48.44080 40.13170 99.74550 1492 80.00000 60.00000 100.0000 54.80370 43.41250 100.0440 1493 90.00000 60.00000 100.0000 62.29950 47.27730 100.3950 1494 100.0000 60.00000 100.0000 70.97950 51.75280 100.8020 1495 0.000000 70.00000 100.0000 34.73220 39.86510 100.4160 1496 10.00000 70.00000 100.0000 35.14150 40.07610 100.4350 1497 20.00000 70.00000 100.0000 36.08390 40.56210 100.4790 1498 30.00000 70.00000 100.0000 37.72260 41.40700 100.5560 1499 40.00000 70.00000 100.0000 40.15730 42.66230 100.6700 1500 50.00000 70.00000 100.0000 43.47160 44.37120 100.8260 1501 60.00000 70.00000 100.0000 47.73850 46.57120 101.0250 1502 70.00000 70.00000 100.0000 53.02370 49.29630 101.2730 1503 80.00000 70.00000 100.0000 59.38660 52.57700 101.5710 1504 90.00000 70.00000 100.0000 66.88240 56.44190 101.9230 1505 100.0000 70.00000 100.0000 75.56240 60.91730 102.3290 1506 0.000000 80.00000 100.0000 40.24970 50.89860 102.2550 1507 10.00000 80.00000 100.0000 40.65900 51.10960 102.2740 1508 20.00000 80.00000 100.0000 41.60140 51.59550 102.3190 1509 30.00000 80.00000 100.0000 43.24010 52.44040 102.3950 1510 40.00000 80.00000 100.0000 45.67480 53.69580 102.5090 1511 50.00000 80.00000 100.0000 48.98910 55.40460 102.6650 1512 60.00000 80.00000 100.0000 53.25610 57.60470 102.8650 1513 70.00000 80.00000 100.0000 58.54120 60.32970 103.1120 1514 80.00000 80.00000 100.0000 64.90410 63.61050 103.4100 1515 90.00000 80.00000 100.0000 72.39990 67.47530 103.7620 1516 100.0000 80.00000 100.0000 81.07990 71.95080 104.1680 1517 0.000000 90.00000 100.0000 46.74960 63.89650 104.4220 1518 10.00000 90.00000 100.0000 47.15880 64.10750 104.4410 1519 20.00000 90.00000 100.0000 48.10130 64.59340 104.4850 1520 30.00000 90.00000 100.0000 49.74000 65.43840 104.5620 1521 40.00000 90.00000 100.0000 52.17460 66.69370 104.6760 1522 50.00000 90.00000 100.0000 55.48890 68.40250 104.8310 1523 60.00000 90.00000 100.0000 59.75590 70.60260 105.0310 1524 70.00000 90.00000 100.0000 65.04100 73.32760 105.2790 1525 80.00000 90.00000 100.0000 71.40400 76.60840 105.5770 1526 90.00000 90.00000 100.0000 78.89980 80.47320 105.9280 1527 100.0000 90.00000 100.0000 87.57980 84.94870 106.3350 1528 0.000000 100.0000 100.0000 54.27630 78.94780 106.9310 1529 10.00000 100.0000 100.0000 54.68550 79.15880 106.9500 1530 20.00000 100.0000 100.0000 55.62800 79.64480 106.9940 1531 30.00000 100.0000 100.0000 57.26670 80.48970 107.0710 1532 40.00000 100.0000 100.0000 59.70140 81.74500 107.1850 1533 50.00000 100.0000 100.0000 63.01570 83.45390 107.3400 1534 60.00000 100.0000 100.0000 67.28260 85.65390 107.5400 1535 70.00000 100.0000 100.0000 72.56780 88.37900 107.7880 1536 80.00000 100.0000 100.0000 78.93070 91.65970 108.0860 1537 90.00000 100.0000 100.0000 86.42650 95.52460 108.4370 1538 15.00000 5.000000 5.000000 2.010240 1.719560 1.454450 1539 25.00000 5.000000 5.000000 3.286970 2.377850 1.514270 1540 35.00000 5.000000 5.000000 5.312370 3.422150 1.609180 1541 45.00000 5.000000 5.000000 8.177150 4.899240 1.743420 1542 55.00000 5.000000 5.000000 11.95920 6.849270 1.920640 1543 65.00000 5.000000 5.000000 16.72750 9.307810 2.144070 1544 75.00000 5.000000 5.000000 22.54430 12.30700 2.416640 1545 85.00000 5.000000 5.000000 29.46710 15.87640 2.741030 1546 95.00000 5.000000 5.000000 37.54880 20.04330 3.119720 1547 100.0000 70.00000 80.00000 68.48240 58.08570 65.03800 1548 100.0000 80.00000 80.00000 73.99990 69.11920 66.87710 1549 100.0000 90.00000 80.00000 80.49970 82.11710 69.04380 1550 35.00000 15.00000 5.000000 5.867190 4.531650 1.794120 1551 45.00000 15.00000 5.000000 8.731980 6.008740 1.928360 1552 55.00000 15.00000 5.000000 12.51400 7.958770 2.105580 1553 65.00000 15.00000 5.000000 17.28230 10.41730 2.329020 1554 75.00000 15.00000 5.000000 23.09920 13.41650 2.601580 1555 85.00000 15.00000 5.000000 30.02190 16.98590 2.925970 1556 95.00000 15.00000 5.000000 38.10360 21.15280 3.304670 1557 15.00000 15.00000 5.000000 2.565060 2.829050 1.639390 1558 15.00000 25.00000 5.000000 3.672160 5.042950 2.008430 1559 25.00000 25.00000 5.000000 4.948900 5.701240 2.068250 1560 35.00000 25.00000 5.000000 6.974300 6.745540 2.163160 1561 45.00000 25.00000 5.000000 9.839080 8.222630 2.297400 1562 55.00000 25.00000 5.000000 13.62110 10.17270 2.474620 1563 65.00000 25.00000 5.000000 18.38940 12.63120 2.698050 1564 75.00000 25.00000 5.000000 24.20630 15.63040 2.970620 1565 85.00000 25.00000 5.000000 31.12900 19.19980 3.295010 1566 95.00000 25.00000 5.000000 39.21070 23.36670 3.673700 1567 95.00000 55.00000 5.000000 46.73070 38.40460 6.180380 1568 25.00000 15.00000 5.000000 3.841800 3.487340 1.699220 1569 25.00000 35.00000 5.000000 6.705190 9.213330 2.653690 1570 35.00000 35.00000 5.000000 8.730590 10.25760 2.748600 1571 45.00000 35.00000 5.000000 11.59540 11.73470 2.882840 1572 55.00000 35.00000 5.000000 15.37740 13.68480 3.060050 1573 65.00000 35.00000 5.000000 20.14570 16.14330 3.283490 1574 75.00000 35.00000 5.000000 25.96260 19.14250 3.556060 1575 85.00000 35.00000 5.000000 32.88530 22.71190 3.880440 1576 95.00000 35.00000 5.000000 40.96700 26.87880 4.259140 1577 15.00000 35.00000 5.000000 5.428450 8.555040 2.593860 1578 15.00000 45.00000 5.000000 7.912600 13.52260 3.421920 1579 25.00000 45.00000 5.000000 9.189340 14.18090 3.481750 1580 35.00000 45.00000 5.000000 11.21470 15.22520 3.576650 1581 45.00000 45.00000 5.000000 14.07950 16.70230 3.710890 1582 55.00000 45.00000 5.000000 17.86160 18.65240 3.888110 1583 65.00000 45.00000 5.000000 22.62980 21.11090 4.111540 1584 75.00000 45.00000 5.000000 28.44670 24.11010 4.384110 1585 85.00000 45.00000 5.000000 35.36940 27.67950 4.708500 1586 95.00000 45.00000 5.000000 43.45110 31.84640 5.087190 1587 5.000000 35.00000 5.000000 4.788610 8.225130 2.563880 1588 5.000000 45.00000 5.000000 7.272760 13.19270 3.391940 1589 25.00000 55.00000 5.000000 12.46890 20.73910 4.574930 1590 35.00000 55.00000 5.000000 14.49430 21.78340 4.669840 1591 45.00000 55.00000 5.000000 17.35910 23.26050 4.804080 1592 55.00000 55.00000 5.000000 21.14110 25.21050 4.981300 1593 65.00000 55.00000 5.000000 25.90940 27.66900 5.204730 1594 75.00000 55.00000 5.000000 31.72620 30.66820 5.477300 1595 85.00000 55.00000 5.000000 38.64900 34.23760 5.801690 1596 5.000000 55.00000 5.000000 10.55230 19.75090 4.485130 1597 5.000000 65.00000 5.000000 14.68700 28.01920 5.863380 1598 15.00000 65.00000 5.000000 15.32690 28.34910 5.893360 1599 25.00000 65.00000 5.000000 16.60360 29.00740 5.953190 1600 35.00000 65.00000 5.000000 18.62900 30.05170 6.048090 1601 45.00000 65.00000 5.000000 21.49380 31.52880 6.182330 1602 55.00000 65.00000 5.000000 25.27580 33.47880 6.359550 1603 65.00000 65.00000 5.000000 30.04410 35.93730 6.582980 1604 75.00000 65.00000 5.000000 35.86100 38.93650 6.855550 1605 85.00000 65.00000 5.000000 42.78370 42.50590 7.179940 1606 95.00000 65.00000 5.000000 50.86540 46.67290 7.558630 1607 95.00000 75.00000 5.000000 55.90940 56.75950 9.239980 1608 95.00000 85.00000 5.000000 61.91230 68.76370 11.24100 1609 25.00000 75.00000 5.000000 21.64760 39.09400 7.634540 1610 35.00000 75.00000 5.000000 23.67300 40.13830 7.729440 1611 45.00000 75.00000 5.000000 26.53780 41.61540 7.863680 1612 55.00000 75.00000 5.000000 30.31980 43.56540 8.040900 1613 65.00000 75.00000 5.000000 35.08810 46.02390 8.264330 1614 75.00000 75.00000 5.000000 40.90500 49.02310 8.536900 1615 85.00000 75.00000 5.000000 47.82770 52.59250 8.861290 1616 5.000000 75.00000 5.000000 19.73100 38.10580 7.544730 1617 5.000000 85.00000 5.000000 25.73400 50.11000 9.545720 1618 15.00000 85.00000 5.000000 26.37380 50.43990 9.575710 1619 25.00000 85.00000 5.000000 27.65050 51.09820 9.635530 1620 35.00000 85.00000 5.000000 29.67590 52.14250 9.730440 1621 45.00000 85.00000 5.000000 32.54070 53.61960 9.864680 1622 55.00000 85.00000 5.000000 36.32280 55.56960 10.04190 1623 65.00000 85.00000 5.000000 41.09100 58.02810 10.26530 1624 75.00000 85.00000 5.000000 46.90790 61.02730 10.53790 1625 85.00000 85.00000 5.000000 53.83060 64.59670 10.86230 1626 15.00000 55.00000 5.000000 11.19210 20.08080 4.515110 1627 15.00000 75.00000 5.000000 20.37090 38.43570 7.574710 1628 15.00000 95.00000 5.000000 33.38170 64.45370 11.91170 1629 25.00000 95.00000 5.000000 34.65840 65.11200 11.97150 1630 35.00000 95.00000 5.000000 36.68380 66.15630 12.06640 1631 45.00000 95.00000 5.000000 39.54860 67.63340 12.20070 1632 55.00000 95.00000 5.000000 43.33070 69.58350 12.37790 1633 65.00000 95.00000 5.000000 48.09890 72.04200 12.60130 1634 75.00000 95.00000 5.000000 53.91580 75.04120 12.87390 1635 85.00000 95.00000 5.000000 60.83850 78.61060 13.19830 1636 95.00000 95.00000 5.000000 68.92020 82.77750 13.57700 1637 5.000000 5.000000 15.00000 1.650450 1.501660 2.899540 1638 15.00000 5.000000 15.00000 2.290290 1.831560 2.929520 1639 25.00000 5.000000 15.00000 3.567020 2.489850 2.989340 1640 35.00000 5.000000 15.00000 5.592420 3.534160 3.084250 1641 45.00000 5.000000 15.00000 8.457210 5.011250 3.218490 1642 55.00000 5.000000 15.00000 12.23920 6.961280 3.395710 1643 65.00000 5.000000 15.00000 17.00750 9.419810 3.619140 1644 75.00000 5.000000 15.00000 22.82440 12.41900 3.891710 1645 85.00000 5.000000 15.00000 29.74710 15.98840 4.216100 1646 95.00000 5.000000 15.00000 37.82880 20.15530 4.594790 1647 95.00000 25.00000 15.00000 39.49070 23.47870 5.148770 1648 95.00000 45.00000 15.00000 43.73120 31.95840 6.562260 1649 35.00000 15.00000 15.00000 6.147250 4.643650 3.269190 1650 45.00000 15.00000 15.00000 9.012030 6.120740 3.403430 1651 55.00000 15.00000 15.00000 12.79410 8.070770 3.580650 1652 65.00000 15.00000 15.00000 17.56230 10.52930 3.804080 1653 75.00000 15.00000 15.00000 23.37920 13.52850 4.076650 1654 85.00000 15.00000 15.00000 30.30190 17.09790 4.401040 1655 95.00000 15.00000 15.00000 38.38360 21.26480 4.779730 1656 100.0000 20.00000 90.00000 57.07420 30.02390 77.42220 1657 100.0000 40.00000 90.00000 60.60630 37.08720 78.59960 1658 25.00000 25.00000 15.00000 5.228950 5.813240 3.543320 1659 35.00000 25.00000 15.00000 7.254350 6.857540 3.638230 1660 45.00000 25.00000 15.00000 10.11910 8.334630 3.772470 1661 55.00000 25.00000 15.00000 13.90120 10.28470 3.949690 1662 65.00000 25.00000 15.00000 18.66940 12.74320 4.173120 1663 75.00000 25.00000 15.00000 24.48630 15.74240 4.445690 1664 85.00000 25.00000 15.00000 31.40900 19.31180 4.770080 1665 85.00000 45.00000 15.00000 35.64950 27.79150 6.183570 1666 15.00000 25.00000 15.00000 3.952210 5.154950 3.483500 1667 15.00000 35.00000 15.00000 5.708500 8.667040 4.068930 1668 25.00000 35.00000 15.00000 6.985240 9.325330 4.128760 1669 35.00000 35.00000 15.00000 9.010640 10.36960 4.223660 1670 45.00000 35.00000 15.00000 11.87540 11.84670 4.357900 1671 55.00000 35.00000 15.00000 15.65750 13.79680 4.535120 1672 65.00000 35.00000 15.00000 20.42570 16.25530 4.758560 1673 75.00000 35.00000 15.00000 26.24260 19.25450 5.031120 1674 85.00000 35.00000 15.00000 33.16530 22.82390 5.355510 1675 95.00000 35.00000 15.00000 41.24700 26.99080 5.734210 1676 100.0000 100.0000 80.00000 88.02640 97.16840 71.55270 1677 15.00000 45.00000 15.00000 8.192650 13.63460 4.896990 1678 25.00000 45.00000 15.00000 9.469390 14.29290 4.956810 1679 35.00000 45.00000 15.00000 11.49480 15.33720 5.051720 1680 45.00000 45.00000 15.00000 14.35960 16.81430 5.185960 1681 55.00000 45.00000 15.00000 18.14160 18.76440 5.363180 1682 65.00000 45.00000 15.00000 22.90990 21.22290 5.586610 1683 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1684 5.000000 15.00000 5.000000 1.925220 2.499150 1.609410 1685 25.00000 15.00000 15.00000 4.121850 3.599350 3.174290 1686 100.0000 90.00000 90.00000 83.78060 83.42920 86.32440 1687 15.00000 55.00000 15.00000 11.47220 20.19280 5.990170 1688 25.00000 55.00000 15.00000 12.74890 20.85110 6.050000 1689 35.00000 55.00000 15.00000 14.77430 21.89540 6.144910 1690 45.00000 55.00000 15.00000 17.63910 23.37250 6.279150 1691 55.00000 55.00000 15.00000 21.42110 25.32250 6.456370 1692 65.00000 55.00000 15.00000 26.18940 27.78100 6.679800 1693 75.00000 55.00000 15.00000 32.00630 30.78020 6.952370 1694 85.00000 55.00000 15.00000 38.92900 34.34960 7.276750 1695 95.00000 55.00000 15.00000 47.01070 38.51660 7.655450 1696 95.00000 75.00000 45.00000 58.88870 57.95100 24.93210 1697 95.00000 85.00000 45.00000 64.89160 69.95520 26.93310 1698 25.00000 65.00000 15.00000 16.88360 29.11940 7.428250 1699 35.00000 65.00000 15.00000 18.90900 30.16370 7.523160 1700 45.00000 65.00000 15.00000 21.77380 31.64080 7.657400 1701 55.00000 65.00000 15.00000 25.55590 33.59080 7.834620 1702 65.00000 65.00000 15.00000 30.32410 36.04930 8.058050 1703 75.00000 65.00000 15.00000 36.14100 39.04850 8.330620 1704 85.00000 65.00000 15.00000 43.06370 42.61790 8.655010 1705 95.00000 65.00000 15.00000 51.14540 46.78490 9.033700 1706 15.00000 65.00000 15.00000 15.60690 28.46110 7.368430 1707 15.00000 75.00000 15.00000 20.65090 38.54770 9.049780 1708 25.00000 75.00000 15.00000 21.92770 39.20600 9.109600 1709 35.00000 75.00000 15.00000 23.95310 40.25030 9.204510 1710 45.00000 75.00000 15.00000 26.81780 41.72740 9.338750 1711 55.00000 75.00000 15.00000 30.59990 43.67740 9.515970 1712 65.00000 75.00000 15.00000 35.36810 46.13590 9.739400 1713 75.00000 75.00000 15.00000 41.18500 49.13510 10.01200 1714 85.00000 75.00000 15.00000 48.10780 52.70450 10.33640 1715 95.00000 75.00000 15.00000 56.18940 56.87150 10.71510 1716 95.00000 85.00000 15.00000 62.19240 68.87570 12.71600 1717 95.00000 85.00000 25.00000 62.75120 69.09920 15.65940 1718 25.00000 85.00000 15.00000 27.93060 51.21020 11.11060 1719 35.00000 85.00000 15.00000 29.95600 52.25450 11.20550 1720 45.00000 85.00000 15.00000 32.82080 53.73160 11.33970 1721 55.00000 85.00000 15.00000 36.60280 55.68160 11.51700 1722 65.00000 85.00000 15.00000 41.37110 58.14010 11.74040 1723 75.00000 85.00000 15.00000 47.18800 61.13930 12.01300 1724 85.00000 85.00000 15.00000 54.11070 64.70870 12.33740 1725 5.000000 85.00000 15.00000 26.01400 50.22200 11.02080 1726 5.000000 95.00000 15.00000 33.02190 64.23580 13.35680 1727 15.00000 95.00000 15.00000 33.66180 64.56570 13.38680 1728 25.00000 95.00000 15.00000 34.93850 65.22400 13.44660 1729 35.00000 95.00000 15.00000 36.96390 66.26830 13.54150 1730 45.00000 95.00000 15.00000 39.82870 67.74540 13.67570 1731 55.00000 95.00000 15.00000 43.61070 69.69550 13.85300 1732 65.00000 95.00000 15.00000 48.37900 72.15400 14.07640 1733 75.00000 95.00000 15.00000 54.19590 75.15320 14.34900 1734 85.00000 95.00000 15.00000 61.11860 78.72260 14.67330 1735 95.00000 95.00000 15.00000 69.20030 82.88950 15.05200 1736 5.000000 5.000000 25.00000 2.209270 1.725150 5.842890 1737 15.00000 5.000000 25.00000 2.849110 2.055060 5.872880 1738 25.00000 5.000000 25.00000 4.125840 2.713350 5.932700 1739 35.00000 5.000000 25.00000 6.151240 3.757650 6.027610 1740 45.00000 5.000000 25.00000 9.016030 5.234740 6.161850 1741 55.00000 5.000000 25.00000 12.79810 7.184770 6.339070 1742 65.00000 5.000000 25.00000 17.56630 9.643300 6.562500 1743 75.00000 5.000000 25.00000 23.38320 12.64250 6.835070 1744 85.00000 5.000000 25.00000 30.30590 16.21190 7.159460 1745 95.00000 5.000000 25.00000 38.38760 20.37880 7.538150 1746 95.00000 5.000000 35.00000 39.27410 20.73340 12.20750 1747 95.00000 45.00000 55.00000 48.08580 33.70000 29.49840 1748 95.00000 55.00000 55.00000 51.36530 40.25810 30.59150 1749 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 1750 45.00000 15.00000 25.00000 9.570850 6.344230 6.346790 1751 55.00000 15.00000 25.00000 13.35290 8.294260 6.524010 1752 65.00000 15.00000 25.00000 18.12120 10.75280 6.747440 1753 75.00000 15.00000 25.00000 23.93800 13.75200 7.020010 1754 85.00000 15.00000 25.00000 30.86080 17.32140 7.344400 1755 95.00000 15.00000 25.00000 38.94250 21.48830 7.723090 1756 95.00000 35.00000 45.00000 43.94630 28.07030 19.95130 1757 95.00000 35.00000 55.00000 45.60160 28.73240 28.67030 1758 35.00000 25.00000 25.00000 7.813170 7.081030 6.581590 1759 45.00000 25.00000 25.00000 10.67800 8.558130 6.715830 1760 55.00000 25.00000 25.00000 14.46000 10.50820 6.893050 1761 65.00000 25.00000 25.00000 19.22830 12.96670 7.116480 1762 75.00000 25.00000 25.00000 25.04510 15.96590 7.389050 1763 85.00000 25.00000 25.00000 31.96790 19.53530 7.713440 1764 95.00000 25.00000 25.00000 40.04960 23.70220 8.092130 1765 95.00000 45.00000 35.00000 45.17650 32.53650 14.17490 1766 15.00000 25.00000 25.00000 4.511030 5.378440 6.426860 1767 15.00000 35.00000 25.00000 6.267320 8.890530 7.012290 1768 35.00000 35.00000 25.00000 9.569460 10.59310 7.167020 1769 45.00000 35.00000 25.00000 12.43420 12.07020 7.301260 1770 55.00000 35.00000 25.00000 16.21630 14.02020 7.478480 1771 65.00000 35.00000 25.00000 20.98450 16.47880 7.701910 1772 75.00000 35.00000 25.00000 26.80140 19.47800 7.974480 1773 85.00000 35.00000 25.00000 33.72420 23.04740 8.298870 1774 95.00000 35.00000 25.00000 41.80590 27.21430 8.677560 1775 5.000000 35.00000 25.00000 5.627490 8.560630 6.982310 1776 5.000000 45.00000 25.00000 8.111640 13.52820 7.810370 1777 25.00000 45.00000 25.00000 10.02820 14.51640 7.900170 1778 35.00000 45.00000 25.00000 12.05360 15.56070 7.995080 1779 45.00000 45.00000 25.00000 14.91840 17.03780 8.129320 1780 55.00000 45.00000 25.00000 18.70040 18.98790 8.306540 1781 65.00000 45.00000 25.00000 23.46870 21.44640 8.529970 1782 75.00000 45.00000 25.00000 29.28560 24.44560 8.802540 1783 85.00000 45.00000 25.00000 36.20830 28.01500 9.126930 1784 95.00000 45.00000 25.00000 44.29000 32.18190 9.505620 1785 15.00000 45.00000 25.00000 8.751470 13.85810 7.840350 1786 15.00000 55.00000 25.00000 12.03100 20.41630 8.933530 1787 25.00000 55.00000 25.00000 13.30770 21.07460 8.993360 1788 35.00000 55.00000 25.00000 15.33310 22.11890 9.088270 1789 45.00000 55.00000 25.00000 18.19790 23.59600 9.222510 1790 55.00000 55.00000 25.00000 21.98000 25.54600 9.399730 1791 65.00000 55.00000 25.00000 26.74820 28.00450 9.623160 1792 75.00000 55.00000 25.00000 32.56510 31.00370 9.895730 1793 85.00000 55.00000 25.00000 39.48780 34.57310 10.22010 1794 95.00000 55.00000 25.00000 47.56950 38.74010 10.59880 1795 95.00000 65.00000 25.00000 51.70430 47.00840 11.97710 1796 95.00000 65.00000 35.00000 52.59080 47.36290 16.64640 1797 95.00000 75.00000 35.00000 57.63480 57.44950 18.32770 1798 35.00000 65.00000 25.00000 19.46790 30.38720 10.46650 1799 45.00000 65.00000 25.00000 22.33260 31.86430 10.60080 1800 55.00000 65.00000 25.00000 26.11470 33.81430 10.77800 1801 65.00000 65.00000 25.00000 30.88300 36.27280 11.00140 1802 75.00000 65.00000 25.00000 36.69980 39.27200 11.27400 1803 85.00000 65.00000 25.00000 43.62260 42.84140 11.59840 1804 95.00000 75.00000 25.00000 56.74830 57.09500 13.65840 1805 5.000000 65.00000 15.00000 14.96710 28.13120 7.338450 1806 5.000000 75.00000 15.00000 20.01110 38.21780 9.019800 1807 25.00000 75.00000 25.00000 22.48650 39.42950 12.05300 1808 35.00000 75.00000 25.00000 24.51190 40.47380 12.14790 1809 45.00000 75.00000 25.00000 27.37670 41.95090 12.28210 1810 55.00000 75.00000 25.00000 31.15870 43.90090 12.45930 1811 65.00000 75.00000 25.00000 35.92700 46.35940 12.68280 1812 75.00000 75.00000 25.00000 41.74380 49.35860 12.95530 1813 85.00000 75.00000 25.00000 48.66660 52.92800 13.27970 1814 5.000000 75.00000 25.00000 20.56990 38.44130 11.96320 1815 5.000000 85.00000 25.00000 26.57280 50.44550 13.96420 1816 15.00000 85.00000 25.00000 27.21270 50.77540 13.99410 1817 25.00000 85.00000 25.00000 28.48940 51.43370 14.05400 1818 35.00000 85.00000 25.00000 30.51480 52.47800 14.14890 1819 45.00000 85.00000 25.00000 33.37960 53.95510 14.28310 1820 55.00000 85.00000 25.00000 37.16160 55.90510 14.46030 1821 65.00000 85.00000 25.00000 41.92990 58.36360 14.68380 1822 75.00000 85.00000 25.00000 47.74680 61.36280 14.95630 1823 85.00000 85.00000 25.00000 54.66950 64.93220 15.28070 1824 15.00000 65.00000 25.00000 16.16570 28.68460 10.31180 1825 15.00000 75.00000 25.00000 21.20970 38.77120 11.99310 1826 15.00000 95.00000 25.00000 34.22060 64.78920 16.33010 1827 25.00000 95.00000 25.00000 35.49730 65.44750 16.38990 1828 35.00000 95.00000 25.00000 37.52270 66.49180 16.48490 1829 45.00000 95.00000 25.00000 40.38750 67.96890 16.61910 1830 55.00000 95.00000 25.00000 44.16950 69.91890 16.79630 1831 65.00000 95.00000 25.00000 48.93780 72.37750 17.01970 1832 75.00000 95.00000 25.00000 54.75470 75.37670 17.29230 1833 85.00000 95.00000 25.00000 61.67740 78.94610 17.61670 1834 95.00000 95.00000 25.00000 69.75910 83.11300 17.99540 1835 5.000000 5.000000 35.00000 3.095770 2.079700 10.51220 1836 15.00000 5.000000 35.00000 3.735610 2.409600 10.54220 1837 25.00000 5.000000 35.00000 5.012350 3.067890 10.60200 1838 35.00000 5.000000 35.00000 7.037750 4.112190 10.69690 1839 45.00000 5.000000 35.00000 9.902530 5.589290 10.83120 1840 55.00000 5.000000 35.00000 13.68460 7.539320 11.00840 1841 65.00000 5.000000 35.00000 18.45280 9.997850 11.23180 1842 75.00000 5.000000 35.00000 24.26970 12.99710 11.50440 1843 0.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1844 5.000000 15.00000 25.00000 2.764090 2.834650 6.027840 1845 5.000000 15.00000 35.00000 3.650600 3.189190 10.69710 1846 15.00000 15.00000 35.00000 4.290440 3.519100 10.72710 1847 25.00000 15.00000 35.00000 5.567170 4.177390 10.78700 1848 35.00000 15.00000 35.00000 7.592570 5.221690 10.88190 1849 45.00000 15.00000 35.00000 10.45740 6.698780 11.01610 1850 55.00000 15.00000 35.00000 14.23940 8.648810 11.19330 1851 65.00000 15.00000 35.00000 19.00770 11.10730 11.41670 1852 75.00000 15.00000 35.00000 24.82450 14.10650 11.68930 1853 85.00000 15.00000 35.00000 31.74730 17.67590 12.01370 1854 95.00000 15.00000 35.00000 39.82900 21.84290 12.39240 1855 95.00000 65.00000 55.00000 55.50000 48.52640 31.96980 1856 15.00000 15.00000 25.00000 3.403930 3.164550 6.057820 1857 25.00000 25.00000 35.00000 6.674270 6.391280 11.15600 1858 35.00000 25.00000 35.00000 8.699670 7.435580 11.25090 1859 45.00000 25.00000 35.00000 11.56450 8.912670 11.38510 1860 55.00000 25.00000 35.00000 15.34650 10.86270 11.56240 1861 65.00000 25.00000 35.00000 20.11480 13.32120 11.78580 1862 75.00000 25.00000 35.00000 25.93160 16.32040 12.05840 1863 85.00000 25.00000 35.00000 32.85440 19.88980 12.38270 1864 95.00000 25.00000 35.00000 40.93610 24.05680 12.76140 1865 95.00000 25.00000 45.00000 42.19000 24.55830 19.36580 1866 25.00000 35.00000 25.00000 7.544060 9.548820 7.072120 1867 25.00000 35.00000 35.00000 8.430560 9.903370 11.74140 1868 45.00000 35.00000 35.00000 13.32070 12.42480 11.97060 1869 55.00000 35.00000 35.00000 17.10280 14.37480 12.14780 1870 65.00000 35.00000 35.00000 21.87100 16.83330 12.37120 1871 75.00000 35.00000 35.00000 27.68790 19.83250 12.64380 1872 85.00000 35.00000 35.00000 34.61070 23.40190 12.96820 1873 95.00000 35.00000 35.00000 42.69240 27.56890 13.34690 1874 95.00000 45.00000 45.00000 46.43040 33.03790 20.77930 1875 95.00000 55.00000 45.00000 49.70990 39.59610 21.87250 1876 25.00000 45.00000 35.00000 10.91470 14.87100 12.56950 1877 35.00000 45.00000 35.00000 12.94010 15.91530 12.66440 1878 45.00000 45.00000 35.00000 15.80490 17.39240 12.79860 1879 55.00000 45.00000 35.00000 19.58690 19.34240 12.97580 1880 65.00000 45.00000 35.00000 24.35520 21.80090 13.19930 1881 75.00000 45.00000 35.00000 30.17210 24.80010 13.47180 1882 85.00000 45.00000 35.00000 37.09480 28.36950 13.79620 1883 5.000000 25.00000 25.00000 3.871200 5.048540 6.396870 1884 5.000000 55.00000 25.00000 11.39120 20.08640 8.903550 1885 15.00000 55.00000 35.00000 12.91750 20.77080 13.60280 1886 25.00000 55.00000 35.00000 14.19420 21.42910 13.66270 1887 35.00000 55.00000 35.00000 16.21960 22.47340 13.75760 1888 45.00000 55.00000 35.00000 19.08440 23.95050 13.89180 1889 55.00000 55.00000 35.00000 22.86650 25.90050 14.06900 1890 65.00000 55.00000 35.00000 27.63470 28.35910 14.29250 1891 75.00000 55.00000 35.00000 33.45160 31.35830 14.56500 1892 85.00000 55.00000 35.00000 40.37430 34.92770 14.88940 1893 95.00000 55.00000 35.00000 48.45600 39.09460 15.26810 1894 95.00000 65.00000 45.00000 53.84470 47.86440 23.25080 1895 25.00000 65.00000 25.00000 17.44250 29.34290 10.37160 1896 25.00000 65.00000 35.00000 18.32900 29.69740 15.04090 1897 35.00000 65.00000 35.00000 20.35440 30.74170 15.13580 1898 45.00000 65.00000 35.00000 23.21920 32.21880 15.27010 1899 55.00000 65.00000 35.00000 27.00120 34.16880 15.44730 1900 65.00000 65.00000 35.00000 31.76950 36.62740 15.67070 1901 75.00000 65.00000 35.00000 37.58630 39.62660 15.94330 1902 85.00000 65.00000 35.00000 44.50910 43.19600 16.26770 1903 85.00000 75.00000 45.00000 50.80700 53.78400 24.55340 1904 15.00000 65.00000 35.00000 17.05220 29.03910 14.98110 1905 15.00000 75.00000 35.00000 22.09620 39.12570 16.66240 1906 25.00000 75.00000 35.00000 23.37300 39.78400 16.72230 1907 35.00000 75.00000 35.00000 25.39840 40.82830 16.81720 1908 45.00000 75.00000 35.00000 28.26320 42.30540 16.95140 1909 55.00000 75.00000 35.00000 32.04520 44.25540 17.12860 1910 65.00000 75.00000 35.00000 36.81350 46.71400 17.35210 1911 75.00000 75.00000 35.00000 42.63030 49.71320 17.62460 1912 85.00000 75.00000 35.00000 49.55310 53.28260 17.94900 1913 95.00000 85.00000 35.00000 63.63770 69.45370 20.32870 1914 15.00000 85.00000 15.00000 26.65390 50.55190 11.05080 1915 15.00000 85.00000 35.00000 28.09920 51.12990 18.66340 1916 25.00000 85.00000 35.00000 29.37590 51.78820 18.72330 1917 35.00000 85.00000 35.00000 31.40130 52.83250 18.81820 1918 45.00000 85.00000 35.00000 34.26610 54.30960 18.95240 1919 55.00000 85.00000 35.00000 38.04810 56.25960 19.12960 1920 65.00000 85.00000 35.00000 42.81640 58.71820 19.35310 1921 75.00000 85.00000 35.00000 48.63330 61.71740 19.62560 1922 85.00000 85.00000 35.00000 55.55600 65.28680 19.95000 1923 5.000000 95.00000 25.00000 33.58070 64.45930 16.30010 1924 5.000000 95.00000 35.00000 34.46720 64.81390 20.96940 1925 15.00000 95.00000 35.00000 35.10710 65.14380 20.99940 1926 25.00000 95.00000 35.00000 36.38380 65.80210 21.05930 1927 35.00000 95.00000 35.00000 38.40920 66.84640 21.15420 1928 45.00000 95.00000 35.00000 41.27400 68.32350 21.28840 1929 55.00000 95.00000 35.00000 45.05600 70.27350 21.46560 1930 65.00000 95.00000 35.00000 49.82430 72.73200 21.68910 1931 75.00000 95.00000 35.00000 55.64120 75.73120 21.96160 1932 85.00000 95.00000 35.00000 62.56390 79.30060 22.28600 1933 95.00000 95.00000 35.00000 70.64560 83.46760 22.66470 1934 95.00000 95.00000 45.00000 71.89950 83.96900 29.26910 1935 15.00000 5.000000 45.00000 4.989510 2.911080 17.14660 1936 25.00000 5.000000 45.00000 6.266250 3.569370 17.20640 1937 35.00000 5.000000 45.00000 8.291640 4.613670 17.30130 1938 45.00000 5.000000 45.00000 11.15640 6.090770 17.43560 1939 55.00000 5.000000 45.00000 14.93850 8.040800 17.61280 1940 65.00000 5.000000 45.00000 19.70670 10.49930 17.83620 1941 75.00000 5.000000 45.00000 25.52360 13.49850 18.10880 1942 85.00000 5.000000 45.00000 32.44630 17.06790 18.43320 1943 95.00000 5.000000 45.00000 40.52800 21.23490 18.81190 1944 15.00000 15.00000 55.00000 7.199710 4.682620 26.05060 1945 15.00000 15.00000 45.00000 5.544330 4.020580 17.33150 1946 25.00000 15.00000 45.00000 6.821070 4.678870 17.39140 1947 35.00000 15.00000 45.00000 8.846470 5.723170 17.48630 1948 45.00000 15.00000 45.00000 11.71130 7.200260 17.62050 1949 55.00000 15.00000 45.00000 15.49330 9.150290 17.79770 1950 65.00000 15.00000 45.00000 20.26160 11.60880 18.02120 1951 75.00000 15.00000 45.00000 26.07840 14.60800 18.29370 1952 85.00000 15.00000 45.00000 33.00120 18.17740 18.61810 1953 95.00000 15.00000 45.00000 41.08290 22.34440 18.99680 1954 95.00000 15.00000 55.00000 42.73820 23.00640 27.71580 1955 15.00000 25.00000 45.00000 6.651440 6.234470 17.70060 1956 25.00000 25.00000 45.00000 7.928170 6.892760 17.76040 1957 35.00000 25.00000 45.00000 9.953570 7.937060 17.85530 1958 45.00000 25.00000 45.00000 12.81840 9.414150 17.98950 1959 55.00000 25.00000 45.00000 16.60040 11.36420 18.16680 1960 65.00000 25.00000 45.00000 21.36870 13.82270 18.39020 1961 75.00000 25.00000 45.00000 27.18550 16.82190 18.66280 1962 85.00000 25.00000 45.00000 34.10830 20.39130 18.98720 1963 85.00000 65.00000 55.00000 47.41830 44.35950 31.59110 1964 15.00000 25.00000 35.00000 5.397540 5.732990 11.09620 1965 15.00000 35.00000 45.00000 8.407730 9.746560 18.28600 1966 25.00000 35.00000 45.00000 9.684460 10.40480 18.34580 1967 35.00000 35.00000 45.00000 11.70990 11.44910 18.44070 1968 45.00000 35.00000 45.00000 14.57460 12.92620 18.57500 1969 55.00000 35.00000 45.00000 18.35670 14.87630 18.75220 1970 65.00000 35.00000 45.00000 23.12490 17.33480 18.97560 1971 75.00000 35.00000 45.00000 28.94180 20.33400 19.24820 1972 85.00000 35.00000 45.00000 35.86460 23.90340 19.57260 1973 15.00000 35.00000 35.00000 7.153830 9.245080 11.68160 1974 15.00000 45.00000 35.00000 9.637980 14.21270 12.50970 1975 15.00000 45.00000 45.00000 10.89190 14.71420 19.11410 1976 25.00000 45.00000 45.00000 12.16860 15.37250 19.17390 1977 35.00000 45.00000 45.00000 14.19400 16.41680 19.26880 1978 55.00000 45.00000 45.00000 20.84080 19.84390 19.58030 1979 65.00000 45.00000 45.00000 25.60910 22.30240 19.80370 1980 75.00000 45.00000 45.00000 31.42600 25.30160 20.07630 1981 85.00000 45.00000 45.00000 38.34870 28.87100 20.40060 1982 85.00000 55.00000 45.00000 41.62820 35.42910 21.49380 1983 85.00000 65.00000 45.00000 45.76300 43.69740 22.87210 1984 15.00000 55.00000 45.00000 14.17140 21.27230 20.20730 1985 25.00000 55.00000 45.00000 15.44810 21.93060 20.26710 1986 35.00000 55.00000 45.00000 17.47350 22.97490 20.36200 1987 45.00000 55.00000 45.00000 20.33830 24.45200 20.49620 1988 55.00000 55.00000 45.00000 24.12040 26.40200 20.67340 1989 65.00000 55.00000 45.00000 28.88860 28.86060 20.89690 1990 65.00000 65.00000 45.00000 33.02340 37.12880 22.27510 1991 5.000000 45.00000 35.00000 8.998140 13.88280 12.47970 1992 5.000000 55.00000 35.00000 12.27770 20.44090 13.57290 1993 5.000000 65.00000 35.00000 16.41240 28.70920 14.95110 1994 15.00000 65.00000 45.00000 18.30610 29.54060 21.58550 1995 25.00000 65.00000 45.00000 19.58290 30.19890 21.64530 1996 35.00000 65.00000 45.00000 21.60830 31.24320 21.74020 1997 45.00000 65.00000 45.00000 24.47300 32.72030 21.87450 1998 100.0000 100.0000 100.0000 95.10650 100.0000 108.8440 1999 75.00000 55.00000 45.00000 34.70550 31.85980 21.16940 2000 75.00000 65.00000 45.00000 38.84020 40.12800 22.54770 2001 75.00000 65.00000 55.00000 40.49560 40.79010 31.26670 2002 5.000000 65.00000 45.00000 17.66630 29.21070 21.55550 2003 5.000000 75.00000 45.00000 22.71030 39.29730 23.23690 2004 15.00000 75.00000 45.00000 23.35010 39.62720 23.26690 2005 25.00000 75.00000 45.00000 24.62690 40.28550 23.32670 2006 35.00000 75.00000 45.00000 26.65230 41.32980 23.42160 2007 45.00000 75.00000 45.00000 29.51710 42.80690 23.55580 2008 55.00000 75.00000 45.00000 33.29910 44.75690 23.73300 2009 65.00000 75.00000 45.00000 38.06740 47.21550 23.95650 2010 75.00000 75.00000 45.00000 43.88420 50.21470 24.22900 2011 85.00000 85.00000 45.00000 56.80990 65.78820 26.55440 2012 5.000000 85.00000 35.00000 27.45930 50.80000 18.63350 2013 5.000000 85.00000 45.00000 28.71320 51.30150 25.23790 2014 15.00000 85.00000 45.00000 29.35310 51.63140 25.26790 2015 25.00000 85.00000 45.00000 30.62980 52.28970 25.32770 2016 35.00000 85.00000 45.00000 32.65520 53.33400 25.42260 2017 45.00000 85.00000 45.00000 35.52000 54.81110 25.55680 2018 55.00000 85.00000 45.00000 39.30200 56.76110 25.73400 2019 65.00000 85.00000 45.00000 44.07030 59.21970 25.95750 2020 75.00000 85.00000 45.00000 49.88720 62.21890 26.23000 2021 5.000000 65.00000 25.00000 15.52590 28.35470 10.28180 2022 5.000000 75.00000 35.00000 21.45640 38.79580 16.63250 2023 5.000000 95.00000 45.00000 35.72110 65.31540 27.57390 2024 15.00000 95.00000 45.00000 36.36100 65.64530 27.60380 2025 25.00000 95.00000 45.00000 37.63770 66.30350 27.66370 2026 35.00000 95.00000 45.00000 39.66310 67.34780 27.75860 2027 45.00000 95.00000 45.00000 42.52790 68.82490 27.89280 2028 55.00000 95.00000 45.00000 46.30990 70.77500 28.07000 2029 65.00000 95.00000 45.00000 51.07820 73.23350 28.29350 2030 75.00000 95.00000 45.00000 56.89510 76.23270 28.56600 2031 85.00000 95.00000 45.00000 63.81780 79.80210 28.89040 2032 5.000000 5.000000 45.00000 4.349670 2.581180 17.11660 2033 5.000000 5.000000 55.00000 6.005050 3.243220 25.83560 2034 15.00000 5.000000 55.00000 6.644880 3.573130 25.86560 2035 25.00000 5.000000 55.00000 7.921620 4.231420 25.92540 2036 35.00000 5.000000 55.00000 9.947020 5.275720 26.02030 2037 45.00000 5.000000 55.00000 12.81180 6.752810 26.15460 2038 55.00000 5.000000 55.00000 16.59380 8.702840 26.33180 2039 65.00000 5.000000 55.00000 21.36210 11.16140 26.55520 2040 75.00000 5.000000 55.00000 27.17900 14.16060 26.82780 2041 85.00000 5.000000 55.00000 34.10170 17.73000 27.15220 2042 95.00000 5.000000 55.00000 42.18340 21.89690 27.53090 2043 95.00000 25.00000 55.00000 43.84530 25.22030 28.08490 2044 25.00000 15.00000 25.00000 4.680670 3.822840 6.117650 2045 25.00000 15.00000 55.00000 8.476440 5.340910 26.11040 2046 35.00000 15.00000 55.00000 10.50180 6.385210 26.20530 2047 45.00000 15.00000 55.00000 13.36660 7.862300 26.33950 2048 55.00000 15.00000 55.00000 17.14870 9.812330 26.51670 2049 65.00000 15.00000 55.00000 21.91690 12.27090 26.74020 2050 75.00000 15.00000 55.00000 27.73380 15.27010 27.01280 2051 85.00000 15.00000 55.00000 34.65650 18.83950 27.33710 2052 5.000000 25.00000 45.00000 6.011600 5.904570 17.67060 2053 5.000000 25.00000 55.00000 7.666970 6.566610 26.38960 2054 15.00000 25.00000 55.00000 8.306810 6.896510 26.41960 2055 25.00000 25.00000 55.00000 9.583550 7.554800 26.47940 2056 35.00000 25.00000 55.00000 11.60890 8.599100 26.57430 2057 45.00000 25.00000 55.00000 14.47370 10.07620 26.70860 2058 55.00000 25.00000 55.00000 18.25580 12.02620 26.88580 2059 65.00000 25.00000 55.00000 23.02400 14.48480 27.10920 2060 75.00000 25.00000 55.00000 28.84090 17.48400 27.38180 2061 85.00000 25.00000 55.00000 35.76360 21.05330 27.70620 2062 85.00000 35.00000 55.00000 37.51990 24.56540 28.29160 2063 5.000000 35.00000 55.00000 9.423260 10.07870 26.97500 2064 15.00000 35.00000 55.00000 10.06310 10.40860 27.00500 2065 25.00000 35.00000 55.00000 11.33980 11.06690 27.06490 2066 35.00000 35.00000 55.00000 13.36520 12.11120 27.15980 2067 45.00000 35.00000 55.00000 16.23000 13.58830 27.29400 2068 55.00000 35.00000 55.00000 20.01210 15.53830 27.47120 2069 65.00000 35.00000 55.00000 24.78030 17.99690 27.69470 2070 75.00000 35.00000 55.00000 30.59720 20.99610 27.96720 2071 5.000000 35.00000 45.00000 7.767890 9.416660 18.25600 2072 5.000000 45.00000 45.00000 10.25200 14.38430 19.08410 2073 5.000000 45.00000 55.00000 11.90740 15.04630 27.80310 2074 15.00000 45.00000 55.00000 12.54720 15.37620 27.83310 2075 25.00000 45.00000 55.00000 13.82400 16.03450 27.89290 2076 35.00000 45.00000 55.00000 15.84940 17.07880 27.98780 2077 45.00000 45.00000 55.00000 18.71420 18.55590 28.12210 2078 55.00000 45.00000 55.00000 22.49620 20.50590 28.29930 2079 65.00000 45.00000 55.00000 27.26450 22.96450 28.52270 2080 75.00000 45.00000 55.00000 33.08140 25.96370 28.79530 2081 85.00000 45.00000 55.00000 40.00410 29.53300 29.11970 2082 85.00000 55.00000 55.00000 43.28360 36.09120 30.21290 2083 5.000000 55.00000 45.00000 13.53160 20.94240 20.17730 2084 5.000000 55.00000 55.00000 15.18690 21.60450 28.89630 2085 25.00000 55.00000 55.00000 17.10350 22.59260 28.98610 2086 35.00000 55.00000 55.00000 19.12890 23.63690 29.08100 2087 45.00000 55.00000 55.00000 21.99370 25.11400 29.21520 2088 65.00000 55.00000 55.00000 30.54400 29.52260 29.61590 2089 75.00000 55.00000 55.00000 36.36090 32.52180 29.88850 2090 5.000000 25.00000 35.00000 4.757700 5.403090 11.06620 2091 5.000000 35.00000 35.00000 6.513990 8.915180 11.65160 2092 15.00000 55.00000 55.00000 15.82680 21.93440 28.92630 2093 15.00000 65.00000 55.00000 19.96150 30.20260 30.30450 2094 25.00000 65.00000 55.00000 21.23820 30.86090 30.36440 2095 35.00000 65.00000 55.00000 23.26360 31.90520 30.45930 2096 45.00000 65.00000 55.00000 26.12840 33.38230 30.59350 2097 55.00000 65.00000 55.00000 29.91050 35.33240 30.77070 2098 65.00000 65.00000 55.00000 34.67870 37.79090 30.99410 2099 5.000000 15.00000 45.00000 4.904500 3.690670 17.30160 2100 5.000000 15.00000 55.00000 6.559870 4.352720 26.02060 2101 5.000000 65.00000 55.00000 19.32170 29.87270 30.27450 2102 5.000000 75.00000 55.00000 24.36570 39.95940 31.95590 2103 15.00000 75.00000 55.00000 25.00550 40.28930 31.98590 2104 25.00000 75.00000 55.00000 26.28230 40.94750 32.04570 2105 35.00000 75.00000 55.00000 28.30760 41.99180 32.14060 2106 45.00000 75.00000 55.00000 31.17240 43.46890 32.27480 2107 55.00000 75.00000 55.00000 34.95450 45.41900 32.45210 2108 65.00000 75.00000 55.00000 39.72270 47.87750 32.67550 2109 75.00000 75.00000 55.00000 45.53960 50.87670 32.94810 2110 85.00000 75.00000 55.00000 52.46240 54.44610 33.27250 2111 95.00000 75.00000 55.00000 60.54400 58.61300 33.65120 2112 95.00000 85.00000 75.00000 71.18000 72.47020 60.05490 2113 95.00000 85.00000 85.00000 74.21010 73.68200 76.01440 2114 25.00000 85.00000 55.00000 32.28520 52.95170 34.04670 2115 35.00000 85.00000 55.00000 34.31060 53.99600 34.14160 2116 45.00000 85.00000 55.00000 37.17540 55.47310 34.27580 2117 55.00000 85.00000 55.00000 40.95740 57.42320 34.45310 2118 65.00000 85.00000 55.00000 45.72570 59.88170 34.67650 2119 75.00000 85.00000 55.00000 51.54260 62.88090 34.94910 2120 85.00000 85.00000 55.00000 58.46530 66.45030 35.27350 2121 95.00000 85.00000 55.00000 66.54700 70.61720 35.65210 2122 5.000000 85.00000 55.00000 30.36860 51.96350 33.95690 2123 5.000000 95.00000 55.00000 37.37650 65.97740 36.29290 2124 25.00000 95.00000 55.00000 39.29310 66.96560 36.38270 2125 35.00000 95.00000 55.00000 41.31850 68.00990 36.47760 2126 45.00000 95.00000 55.00000 44.18330 69.48700 36.61180 2127 55.00000 95.00000 55.00000 47.96530 71.43700 36.78910 2128 65.00000 95.00000 55.00000 52.73360 73.89560 37.01250 2129 75.00000 95.00000 55.00000 58.55050 76.89480 37.28510 2130 85.00000 95.00000 55.00000 65.47320 80.46410 37.60940 2131 95.00000 95.00000 55.00000 73.55490 84.63110 37.98810 2132 95.00000 95.00000 65.00000 75.64190 85.46580 48.98080 2133 15.00000 5.000000 65.00000 8.731920 4.407810 36.85830 2134 25.00000 5.000000 65.00000 10.00870 5.066100 36.91810 2135 35.00000 5.000000 65.00000 12.03410 6.110400 37.01300 2136 45.00000 5.000000 65.00000 14.89880 7.587490 37.14720 2137 55.00000 5.000000 65.00000 18.68090 9.537520 37.32450 2138 65.00000 5.000000 65.00000 23.44910 11.99610 37.54790 2139 75.00000 5.000000 65.00000 29.26600 14.99530 37.82050 2140 85.00000 5.000000 65.00000 36.18880 18.56460 38.14490 2141 95.00000 5.000000 65.00000 44.27050 22.73160 38.52350 2142 95.00000 45.00000 85.00000 55.74890 36.76470 69.86060 2143 95.00000 45.00000 95.00000 59.28620 38.17940 88.49200 2144 25.00000 15.00000 65.00000 10.56350 6.175590 37.10300 2145 35.00000 15.00000 65.00000 12.58890 7.219900 37.19790 2146 45.00000 15.00000 65.00000 15.45370 8.696990 37.33220 2147 55.00000 15.00000 65.00000 19.23570 10.64700 37.50940 2148 65.00000 15.00000 65.00000 24.00400 13.10560 37.73280 2149 75.00000 15.00000 65.00000 29.82080 16.10480 38.00540 2150 85.00000 15.00000 65.00000 36.74360 19.67410 38.32980 2151 95.00000 15.00000 65.00000 44.82530 23.84110 38.70850 2152 95.00000 65.00000 85.00000 63.16310 51.59120 72.33210 2153 95.00000 75.00000 85.00000 68.20710 61.67780 74.01340 2154 95.00000 75.00000 95.00000 71.74440 63.09250 92.64480 2155 35.00000 25.00000 65.00000 13.69600 9.433790 37.56700 2156 45.00000 25.00000 65.00000 16.56080 10.91090 37.70120 2157 55.00000 25.00000 65.00000 20.34280 12.86090 37.87840 2158 65.00000 25.00000 65.00000 25.11110 15.31940 38.10190 2159 75.00000 25.00000 65.00000 30.92790 18.31860 38.37440 2160 85.00000 25.00000 65.00000 37.85070 21.88800 38.69880 2161 95.00000 25.00000 65.00000 45.93240 26.05500 39.07750 2162 95.00000 35.00000 95.00000 56.80200 33.21180 87.66390 2163 25.00000 25.00000 65.00000 11.67060 8.389490 37.47210 2164 25.00000 35.00000 65.00000 13.42690 11.90160 38.05750 2165 35.00000 35.00000 65.00000 15.45230 12.94590 38.15240 2166 45.00000 35.00000 65.00000 18.31710 14.42300 38.28670 2167 55.00000 35.00000 65.00000 22.09910 16.37300 38.46390 2168 65.00000 35.00000 65.00000 26.86740 18.83150 38.68730 2169 75.00000 35.00000 65.00000 32.68420 21.83070 38.95990 2170 85.00000 35.00000 65.00000 39.60700 25.40010 39.28430 2171 95.00000 35.00000 65.00000 47.68870 29.56710 39.66300 2172 95.00000 35.00000 75.00000 50.23470 30.58530 53.07310 2173 95.00000 45.00000 75.00000 52.71880 35.55290 53.90110 2174 95.00000 65.00000 95.00000 66.70040 53.00590 90.96340 2175 35.00000 45.00000 65.00000 17.93640 17.91350 38.98050 2176 45.00000 45.00000 65.00000 20.80120 19.39060 39.11470 2177 55.00000 45.00000 65.00000 24.58320 21.34060 39.29190 2178 65.00000 45.00000 65.00000 29.35150 23.79910 39.51540 2179 75.00000 45.00000 65.00000 35.16840 26.79830 39.78790 2180 85.00000 45.00000 65.00000 42.09110 30.36770 40.11230 2181 95.00000 45.00000 65.00000 50.17280 34.53470 40.49100 2182 15.00000 15.00000 65.00000 9.286750 5.517310 37.04320 2183 15.00000 45.00000 65.00000 14.63430 16.21090 38.82570 2184 25.00000 45.00000 65.00000 15.91100 16.86920 38.88560 2185 25.00000 55.00000 65.00000 19.19060 23.42730 39.97880 2186 45.00000 55.00000 65.00000 24.08070 25.94870 40.20790 2187 55.00000 55.00000 65.00000 27.86280 27.89880 40.38510 2188 65.00000 55.00000 65.00000 32.63100 30.35730 40.60860 2189 75.00000 55.00000 65.00000 38.44790 33.35650 40.88110 2190 85.00000 55.00000 65.00000 45.37070 36.92590 41.20550 2191 95.00000 55.00000 65.00000 53.45230 41.09280 41.58420 2192 95.00000 65.00000 75.00000 60.13310 50.37940 56.37260 2193 95.00000 75.00000 75.00000 65.17710 60.46600 58.05390 2194 35.00000 55.00000 65.00000 21.21600 24.47160 40.07370 2195 35.00000 65.00000 65.00000 25.35070 32.73990 41.45190 2196 45.00000 65.00000 65.00000 28.21550 34.21700 41.58620 2197 55.00000 65.00000 65.00000 31.99750 36.16700 41.76340 2198 75.00000 65.00000 65.00000 42.58260 41.62480 42.25940 2199 85.00000 65.00000 65.00000 49.50540 45.19420 42.58380 2200 95.00000 65.00000 65.00000 57.58710 49.36110 42.96250 2201 15.00000 65.00000 65.00000 22.04850 31.03730 41.29720 2202 15.00000 75.00000 65.00000 27.09260 41.12390 42.97850 2203 25.00000 75.00000 65.00000 28.36930 41.78220 43.03840 2204 35.00000 75.00000 65.00000 30.39470 42.82650 43.13330 2205 45.00000 75.00000 65.00000 33.25950 44.30360 43.26750 2206 55.00000 75.00000 65.00000 37.04150 46.25370 43.44470 2207 65.00000 75.00000 65.00000 41.80980 48.71220 43.66820 2208 75.00000 75.00000 65.00000 47.62670 51.71140 43.94070 2209 85.00000 75.00000 65.00000 54.54940 55.28080 44.26510 2210 95.00000 75.00000 65.00000 62.63110 59.44770 44.64380 2211 95.00000 85.00000 65.00000 68.63400 71.45190 46.64480 2212 25.00000 65.00000 65.00000 23.32530 31.69560 41.35700 2213 25.00000 85.00000 65.00000 34.37220 53.78640 45.03940 2214 35.00000 85.00000 65.00000 36.39760 54.83070 45.13430 2215 45.00000 85.00000 65.00000 39.26240 56.30780 45.26850 2216 55.00000 85.00000 65.00000 43.04440 58.25780 45.44570 2217 65.00000 85.00000 65.00000 47.81270 60.71640 45.66920 2218 75.00000 85.00000 65.00000 53.62960 63.71560 45.94170 2219 85.00000 85.00000 65.00000 60.55230 67.28500 46.26610 2220 15.00000 85.00000 55.00000 31.00850 52.29340 33.98690 2221 15.00000 95.00000 55.00000 38.01640 66.30730 36.32290 2222 15.00000 95.00000 65.00000 40.10340 67.14200 47.31550 2223 25.00000 95.00000 65.00000 41.38010 67.80030 47.37530 2224 35.00000 95.00000 65.00000 43.40550 68.84460 47.47020 2225 45.00000 95.00000 65.00000 46.27030 70.32170 47.60450 2226 55.00000 95.00000 65.00000 50.05240 72.27170 47.78170 2227 65.00000 95.00000 65.00000 54.82060 74.73020 48.00510 2228 75.00000 95.00000 65.00000 60.63750 77.72940 48.27770 2229 85.00000 95.00000 65.00000 67.56020 81.29880 48.60210 2230 5.000000 5.000000 65.00000 8.092090 4.077910 36.82830 2231 5.000000 5.000000 75.00000 10.63810 5.096150 50.23840 2232 15.00000 5.000000 75.00000 11.27790 5.426050 50.26840 2233 25.00000 5.000000 75.00000 12.55470 6.084340 50.32820 2234 35.00000 5.000000 75.00000 14.58010 7.128650 50.42310 2235 45.00000 5.000000 75.00000 17.44490 8.605740 50.55730 2236 55.00000 5.000000 75.00000 21.22690 10.55580 50.73460 2237 65.00000 5.000000 75.00000 25.99520 13.01430 50.95800 2238 75.00000 5.000000 75.00000 31.81200 16.01350 51.23060 2239 85.00000 5.000000 75.00000 38.73480 19.58290 51.55500 2240 95.00000 5.000000 75.00000 46.81650 23.74980 51.93360 2241 5.000000 15.00000 65.00000 8.646910 5.187400 37.01320 2242 5.000000 15.00000 75.00000 11.19290 6.205650 50.42330 2243 25.00000 15.00000 75.00000 13.10950 7.193840 50.51310 2244 35.00000 15.00000 75.00000 15.13490 8.238140 50.60800 2245 45.00000 15.00000 75.00000 17.99970 9.715230 50.74230 2246 55.00000 15.00000 75.00000 21.78170 11.66530 50.91950 2247 65.00000 15.00000 75.00000 26.55000 14.12380 51.14290 2248 75.00000 15.00000 75.00000 32.36690 17.12300 51.41550 2249 85.00000 15.00000 75.00000 39.28960 20.69240 51.73990 2250 95.00000 15.00000 75.00000 47.37130 24.85930 52.11860 2251 95.00000 55.00000 85.00000 59.02840 43.32290 70.95380 2252 95.00000 85.00000 95.00000 77.74740 75.09670 94.64580 2253 25.00000 25.00000 75.00000 14.21660 9.407730 50.88220 2254 35.00000 25.00000 75.00000 16.24200 10.45200 50.97710 2255 45.00000 25.00000 75.00000 19.10680 11.92910 51.11130 2256 55.00000 25.00000 75.00000 22.88880 13.87920 51.28850 2257 65.00000 25.00000 75.00000 27.65710 16.33770 51.51200 2258 75.00000 25.00000 75.00000 33.47400 19.33690 51.78450 2259 85.00000 25.00000 75.00000 40.39670 22.90630 52.10890 2260 95.00000 25.00000 75.00000 48.47840 27.07320 52.48760 2261 95.00000 25.00000 85.00000 51.50840 28.28500 68.44710 2262 95.00000 25.00000 95.00000 55.04570 29.69970 87.07850 2263 25.00000 35.00000 75.00000 15.97290 12.91980 51.46760 2264 35.00000 35.00000 75.00000 17.99830 13.96410 51.56250 2265 45.00000 35.00000 75.00000 20.86310 15.44120 51.69680 2266 55.00000 35.00000 75.00000 24.64510 17.39120 51.87400 2267 65.00000 35.00000 75.00000 29.41340 19.84980 52.09740 2268 75.00000 35.00000 75.00000 35.23030 22.84900 52.37000 2269 85.00000 35.00000 75.00000 42.15300 26.41840 52.69440 2270 95.00000 35.00000 85.00000 53.26470 31.79710 69.03260 2271 5.000000 45.00000 65.00000 13.99450 15.88100 38.79580 2272 5.000000 45.00000 75.00000 16.54050 16.89920 52.20590 2273 25.00000 45.00000 75.00000 18.45700 17.88740 52.29570 2274 35.00000 45.00000 75.00000 20.48240 18.93170 52.39060 2275 45.00000 45.00000 75.00000 23.34720 20.40880 52.52480 2276 55.00000 45.00000 75.00000 27.12930 22.35890 52.70200 2277 65.00000 45.00000 75.00000 31.89750 24.81740 52.92550 2278 75.00000 45.00000 75.00000 37.71440 27.81660 53.19800 2279 85.00000 45.00000 75.00000 44.63710 31.38600 53.52240 2280 85.00000 85.00000 95.00000 69.66570 70.92970 94.26710 2281 15.00000 45.00000 75.00000 17.18030 17.22910 52.23580 2282 15.00000 55.00000 75.00000 20.45980 23.78730 53.32900 2283 25.00000 55.00000 75.00000 21.73660 24.44560 53.38890 2284 35.00000 55.00000 75.00000 23.76200 25.48990 53.48380 2285 45.00000 55.00000 75.00000 26.62680 26.96700 53.61800 2286 55.00000 55.00000 75.00000 30.40880 28.91700 53.79520 2287 65.00000 55.00000 75.00000 35.17710 31.37550 54.01870 2288 75.00000 55.00000 75.00000 40.99390 34.37470 54.29120 2289 85.00000 55.00000 75.00000 47.91670 37.94410 54.61560 2290 95.00000 55.00000 75.00000 55.99840 42.11110 54.99430 2291 15.00000 55.00000 65.00000 17.91380 22.76900 39.91890 2292 15.00000 65.00000 75.00000 24.59460 32.05560 54.70730 2293 25.00000 65.00000 75.00000 25.87130 32.71390 54.76710 2294 35.00000 65.00000 75.00000 27.89670 33.75820 54.86200 2295 45.00000 65.00000 75.00000 30.76150 35.23530 54.99630 2296 55.00000 65.00000 75.00000 34.54350 37.18530 55.17350 2297 65.00000 65.00000 75.00000 39.31180 39.64380 55.39690 2298 75.00000 65.00000 75.00000 45.12870 42.64300 55.66950 2299 85.00000 65.00000 75.00000 52.05140 46.21240 55.99390 2300 5.000000 35.00000 65.00000 11.51030 10.91340 37.96770 2301 5.000000 35.00000 75.00000 14.05630 11.93160 51.37780 2302 5.000000 75.00000 75.00000 28.99870 41.81230 56.35870 2303 25.00000 75.00000 75.00000 30.91530 42.80050 56.44850 2304 35.00000 75.00000 75.00000 32.94070 43.84480 56.54340 2305 45.00000 75.00000 75.00000 35.80550 45.32190 56.67760 2306 55.00000 75.00000 75.00000 39.58750 47.27190 56.85480 2307 65.00000 75.00000 75.00000 44.35580 49.73040 57.07830 2308 85.00000 75.00000 75.00000 57.09540 56.29900 57.67520 2309 85.00000 85.00000 75.00000 63.09830 68.30320 59.67620 2310 15.00000 85.00000 65.00000 33.09550 53.12810 44.97950 2311 15.00000 85.00000 75.00000 35.64150 54.14640 58.38960 2312 25.00000 85.00000 75.00000 36.91820 54.80470 58.44950 2313 35.00000 85.00000 75.00000 38.94360 55.84900 58.54440 2314 45.00000 85.00000 75.00000 41.80840 57.32610 58.67860 2315 55.00000 85.00000 75.00000 45.59050 59.27610 58.85580 2316 65.00000 85.00000 75.00000 50.35870 61.73460 59.07930 2317 75.00000 85.00000 75.00000 56.17560 64.73380 59.35180 2318 75.00000 85.00000 85.00000 59.20560 65.94560 75.31130 2319 5.000000 85.00000 65.00000 32.45570 52.79820 44.94950 2320 5.000000 95.00000 65.00000 39.46360 66.81210 47.28550 2321 15.00000 95.00000 75.00000 42.64940 68.16020 60.72560 2322 25.00000 95.00000 75.00000 43.92610 68.81850 60.78540 2323 35.00000 95.00000 75.00000 45.95150 69.86280 60.88040 2324 45.00000 95.00000 75.00000 48.81630 71.33990 61.01460 2325 55.00000 95.00000 75.00000 52.59840 73.28990 61.19180 2326 65.00000 95.00000 75.00000 57.36660 75.74850 61.41520 2327 75.00000 95.00000 75.00000 63.18350 78.74770 61.68780 2328 85.00000 95.00000 75.00000 70.10620 82.31710 62.01220 2329 95.00000 95.00000 75.00000 78.18790 86.48400 62.39090 2330 95.00000 95.00000 85.00000 81.21800 87.69580 78.35040 2331 15.00000 5.000000 85.00000 14.30800 6.637880 66.22790 2332 25.00000 5.000000 85.00000 15.58470 7.296170 66.28770 2333 35.00000 5.000000 85.00000 17.61010 8.340470 66.38260 2334 45.00000 5.000000 85.00000 20.47490 9.817560 66.51690 2335 55.00000 5.000000 85.00000 24.25690 11.76760 66.69410 2336 65.00000 5.000000 85.00000 29.02520 14.22610 66.91750 2337 75.00000 5.000000 85.00000 34.84210 17.22530 67.19010 2338 85.00000 5.000000 85.00000 41.76480 20.79470 67.51450 2339 95.00000 5.000000 85.00000 49.84650 24.96170 67.89320 2340 95.00000 5.000000 95.00000 53.38380 26.37640 86.52450 2341 95.00000 55.00000 95.00000 62.56570 44.73760 89.58520 2342 25.00000 15.00000 85.00000 16.13950 8.405660 66.47270 2343 35.00000 15.00000 85.00000 18.16490 9.449960 66.56760 2344 45.00000 15.00000 85.00000 21.02970 10.92710 66.70180 2345 55.00000 15.00000 85.00000 24.81180 12.87710 66.87900 2346 65.00000 15.00000 85.00000 29.58000 15.33560 67.10250 2347 75.00000 15.00000 85.00000 35.39690 18.33480 67.37500 2348 85.00000 15.00000 85.00000 42.31960 21.90420 67.69940 2349 95.00000 15.00000 85.00000 50.40130 26.07120 68.07810 2350 95.00000 15.00000 95.00000 53.93860 27.48590 86.70950 2351 5.000000 25.00000 85.00000 15.33010 9.631360 66.75190 2352 25.00000 25.00000 85.00000 17.24660 10.61960 66.84170 2353 35.00000 25.00000 85.00000 19.27200 11.66390 66.93660 2354 45.00000 25.00000 85.00000 22.13680 13.14090 67.07080 2355 55.00000 25.00000 85.00000 25.91890 15.09100 67.24810 2356 65.00000 25.00000 85.00000 30.68710 17.54950 67.47150 2357 75.00000 25.00000 85.00000 36.50400 20.54870 67.74410 2358 85.00000 25.00000 85.00000 43.42670 24.11810 68.06850 2359 15.00000 25.00000 75.00000 12.93990 8.749440 50.82240 2360 15.00000 25.00000 85.00000 15.96990 9.961270 66.78190 2361 15.00000 35.00000 85.00000 17.72620 13.47340 67.36730 2362 25.00000 35.00000 85.00000 19.00290 14.13160 67.42710 2363 35.00000 35.00000 85.00000 21.02830 15.17590 67.52200 2364 45.00000 35.00000 85.00000 23.89310 16.65300 67.65630 2365 55.00000 35.00000 85.00000 27.67510 18.60310 67.83350 2366 65.00000 35.00000 85.00000 32.44340 21.06160 68.05690 2367 75.00000 35.00000 85.00000 38.26030 24.06080 68.32950 2368 85.00000 35.00000 85.00000 45.18300 27.63020 68.65390 2369 15.00000 35.00000 65.00000 12.15010 11.24330 37.99770 2370 15.00000 35.00000 75.00000 14.69620 12.26150 51.40780 2371 15.00000 45.00000 85.00000 20.21030 18.44100 68.19540 2372 25.00000 45.00000 85.00000 21.48710 19.09930 68.25520 2373 35.00000 45.00000 85.00000 23.51250 20.14360 68.35010 2374 45.00000 45.00000 85.00000 26.37730 21.62060 68.48430 2375 55.00000 45.00000 85.00000 30.15930 23.57070 68.66160 2376 65.00000 45.00000 85.00000 34.92760 26.02920 68.88500 2377 75.00000 45.00000 85.00000 40.74440 29.02840 69.15760 2378 85.00000 45.00000 85.00000 47.66720 32.59780 69.48190 2379 85.00000 45.00000 95.00000 51.20450 34.01250 88.11330 2380 85.00000 65.00000 95.00000 58.61870 48.83890 90.58470 2381 85.00000 75.00000 95.00000 63.66270 58.92550 92.26610 2382 25.00000 55.00000 85.00000 24.76660 25.65740 69.34840 2383 35.00000 55.00000 85.00000 26.79200 26.70170 69.44330 2384 45.00000 55.00000 85.00000 29.65680 28.17880 69.57750 2385 55.00000 55.00000 85.00000 33.43880 30.12880 69.75470 2386 65.00000 55.00000 85.00000 38.20710 32.58740 69.97820 2387 75.00000 55.00000 85.00000 44.02400 35.58660 70.25070 2388 85.00000 55.00000 85.00000 50.94670 39.15590 70.57510 2389 85.00000 55.00000 95.00000 54.48400 40.57060 89.20650 2390 15.00000 55.00000 85.00000 23.48990 24.99910 69.28860 2391 15.00000 65.00000 85.00000 27.62460 33.26740 70.66680 2392 25.00000 65.00000 85.00000 28.90130 33.92570 70.72660 2393 35.00000 65.00000 85.00000 30.92670 34.97000 70.82150 2394 45.00000 65.00000 85.00000 33.79150 36.44710 70.95580 2395 55.00000 65.00000 85.00000 37.57350 38.39710 71.13300 2396 65.00000 65.00000 85.00000 42.34180 40.85560 71.35640 2397 75.00000 65.00000 85.00000 48.15870 43.85480 71.62900 2398 85.00000 65.00000 85.00000 55.08140 47.42420 71.95340 2399 85.00000 75.00000 85.00000 60.12540 57.51080 73.63470 2400 5.000000 55.00000 65.00000 17.27400 22.43910 39.88890 2401 15.00000 75.00000 85.00000 32.66860 43.35400 72.34820 2402 25.00000 75.00000 85.00000 33.94530 44.01230 72.40800 2403 35.00000 75.00000 85.00000 35.97070 45.05660 72.50290 2404 45.00000 75.00000 85.00000 38.83550 46.53370 72.63710 2405 55.00000 75.00000 85.00000 42.61760 48.48370 72.81430 2406 65.00000 75.00000 85.00000 47.38580 50.94230 73.03780 2407 75.00000 75.00000 85.00000 53.20270 53.94150 73.31030 2408 75.00000 75.00000 95.00000 56.74000 55.35620 91.94170 2409 75.00000 85.00000 95.00000 62.74290 67.36030 93.94270 2410 15.00000 75.00000 75.00000 29.63860 42.14220 56.38860 2411 15.00000 85.00000 85.00000 38.67150 55.35820 74.34910 2412 25.00000 85.00000 85.00000 39.94830 56.01650 74.40900 2413 35.00000 85.00000 85.00000 41.97370 57.06080 74.50390 2414 45.00000 85.00000 85.00000 44.83850 58.53790 74.63810 2415 55.00000 85.00000 85.00000 48.62050 60.48790 74.81530 2416 65.00000 85.00000 85.00000 53.38880 62.94640 75.03880 2417 65.00000 85.00000 95.00000 56.92610 64.36110 93.67010 2418 5.000000 95.00000 75.00000 42.00960 67.83030 60.69560 2419 5.000000 95.00000 85.00000 45.03960 69.04220 76.65520 2420 15.00000 95.00000 85.00000 45.67940 69.37210 76.68510 2421 25.00000 95.00000 85.00000 46.95620 70.03030 76.74500 2422 35.00000 95.00000 85.00000 48.98160 71.07460 76.83990 2423 45.00000 95.00000 85.00000 51.84640 72.55170 76.97410 2424 55.00000 95.00000 85.00000 55.62840 74.50180 77.15130 2425 65.00000 95.00000 85.00000 60.39670 76.96030 77.37480 2426 75.00000 95.00000 85.00000 66.21350 79.95950 77.64730 2427 85.00000 95.00000 85.00000 73.13630 83.52890 77.97170 2428 5.000000 5.000000 85.00000 13.66810 6.307980 66.19790 2429 5.000000 5.000000 95.00000 17.20540 7.722670 84.82930 2430 15.00000 5.000000 95.00000 17.84530 8.052580 84.85920 2431 25.00000 5.000000 95.00000 19.12200 8.710870 84.91910 2432 35.00000 5.000000 95.00000 21.14740 9.755170 85.01400 2433 45.00000 5.000000 95.00000 24.01220 11.23230 85.14820 2434 55.00000 5.000000 95.00000 27.79420 13.18230 85.32540 2435 65.00000 5.000000 95.00000 32.56250 15.64080 85.54890 2436 75.00000 5.000000 95.00000 38.37940 18.64000 85.82140 2437 85.00000 5.000000 95.00000 45.30210 22.20940 86.14580 2438 15.00000 15.00000 75.00000 11.83280 6.535550 50.45330 2439 15.00000 15.00000 85.00000 14.86280 7.747370 66.41280 2440 15.00000 15.00000 95.00000 18.40010 9.162070 85.04420 2441 25.00000 15.00000 95.00000 19.67680 9.820360 85.10400 2442 35.00000 15.00000 95.00000 21.70220 10.86470 85.19890 2443 45.00000 15.00000 95.00000 24.56700 12.34180 85.33320 2444 55.00000 15.00000 95.00000 28.34910 14.29180 85.51040 2445 65.00000 15.00000 95.00000 33.11730 16.75030 85.73380 2446 75.00000 15.00000 95.00000 38.93420 19.74950 86.00640 2447 85.00000 15.00000 95.00000 45.85690 23.31890 86.33080 2448 5.000000 15.00000 85.00000 14.22300 7.417470 66.38290 2449 5.000000 15.00000 95.00000 17.76030 8.832170 85.01420 2450 5.000000 25.00000 95.00000 18.86740 11.04610 85.38320 2451 25.00000 25.00000 95.00000 20.78390 12.03430 85.47310 2452 35.00000 25.00000 95.00000 22.80930 13.07860 85.56800 2453 45.00000 25.00000 95.00000 25.67410 14.55560 85.70220 2454 55.00000 25.00000 95.00000 29.45620 16.50570 85.87940 2455 65.00000 25.00000 95.00000 34.22440 18.96420 86.10280 2456 75.00000 25.00000 95.00000 40.04130 21.96340 86.37540 2457 85.00000 25.00000 95.00000 46.96400 25.53280 86.69980 2458 15.00000 25.00000 65.00000 10.39380 7.731200 37.41230 2459 15.00000 25.00000 95.00000 19.50720 11.37600 85.41320 2460 15.00000 35.00000 95.00000 21.26350 14.88810 85.99870 2461 25.00000 35.00000 95.00000 22.54020 15.54630 86.05850 2462 35.00000 35.00000 95.00000 24.56560 16.59060 86.15340 2463 45.00000 35.00000 95.00000 27.43040 18.06770 86.28760 2464 55.00000 35.00000 95.00000 31.21240 20.01780 86.46490 2465 65.00000 35.00000 95.00000 35.98070 22.47630 86.68830 2466 75.00000 35.00000 95.00000 41.79760 25.47550 86.96090 2467 85.00000 35.00000 95.00000 48.72030 29.04490 87.28520 2468 5.000000 25.00000 65.00000 9.754010 7.401300 37.38230 2469 5.000000 25.00000 75.00000 12.30000 8.419540 50.79240 2470 15.00000 45.00000 95.00000 23.74760 19.85570 86.82670 2471 25.00000 45.00000 95.00000 25.02440 20.51400 86.88650 2472 35.00000 45.00000 95.00000 27.04980 21.55830 86.98150 2473 45.00000 45.00000 95.00000 29.91460 23.03530 87.11570 2474 55.00000 45.00000 95.00000 33.69660 24.98540 87.29290 2475 65.00000 45.00000 95.00000 38.46490 27.44390 87.51630 2476 75.00000 45.00000 95.00000 44.28170 30.44310 87.78890 2477 5.000000 55.00000 75.00000 19.82000 23.45740 53.29910 2478 5.000000 55.00000 85.00000 22.85000 24.66920 69.25860 2479 5.000000 55.00000 95.00000 26.38730 26.08390 87.88990 2480 15.00000 55.00000 95.00000 27.02720 26.41380 87.91990 2481 25.00000 55.00000 95.00000 28.30390 27.07210 87.97970 2482 35.00000 55.00000 95.00000 30.32930 28.11640 88.07460 2483 45.00000 55.00000 95.00000 33.19410 29.59350 88.20890 2484 55.00000 55.00000 95.00000 36.97610 31.54350 88.38610 2485 65.00000 55.00000 95.00000 41.74440 34.00210 88.60950 2486 75.00000 55.00000 95.00000 47.56130 37.00130 88.88210 2487 5.000000 45.00000 85.00000 19.57050 18.11110 68.16540 2488 5.000000 45.00000 95.00000 23.10780 19.52580 86.79670 2489 5.000000 65.00000 95.00000 30.52210 34.35220 89.26820 2490 15.00000 65.00000 95.00000 31.16190 34.68210 89.29820 2491 25.00000 65.00000 95.00000 32.43860 35.34040 89.35800 2492 35.00000 65.00000 95.00000 34.46400 36.38470 89.45290 2493 45.00000 65.00000 95.00000 37.32880 37.86180 89.58710 2494 55.00000 65.00000 95.00000 41.11090 39.81180 89.76430 2495 65.00000 65.00000 95.00000 45.87910 42.27030 89.98780 2496 75.00000 65.00000 95.00000 51.69600 45.26950 90.26030 2497 5.000000 35.00000 85.00000 17.08640 13.14350 67.33730 2498 5.000000 35.00000 95.00000 20.62370 14.55820 85.96870 2499 5.000000 75.00000 95.00000 35.56610 44.43880 90.94950 2500 15.00000 75.00000 95.00000 36.20590 44.76870 90.97950 2501 25.00000 75.00000 95.00000 37.48260 45.42700 91.03930 2502 35.00000 75.00000 95.00000 39.50800 46.47130 91.13420 2503 45.00000 75.00000 95.00000 42.37280 47.94840 91.26850 2504 55.00000 75.00000 95.00000 46.15490 49.89840 91.44570 2505 65.00000 75.00000 95.00000 50.92310 52.35700 91.66910 2506 5.000000 65.00000 75.00000 23.95470 31.72570 54.67730 2507 5.000000 65.00000 85.00000 26.98480 32.93750 70.63680 2508 5.000000 75.00000 85.00000 32.02880 43.02410 72.31820 2509 5.000000 85.00000 95.00000 41.56900 56.44300 92.95050 2510 15.00000 85.00000 95.00000 42.20880 56.77290 92.98050 2511 25.00000 85.00000 95.00000 43.48560 57.43120 93.04030 2512 35.00000 85.00000 95.00000 45.51100 58.47550 93.13520 2513 45.00000 85.00000 95.00000 48.37580 59.95260 93.26950 2514 55.00000 85.00000 95.00000 52.15780 61.90260 93.44670 2515 5.000000 65.00000 65.00000 21.40870 30.70740 41.26720 2516 5.000000 75.00000 65.00000 26.45270 40.79400 42.94860 2517 5.000000 85.00000 75.00000 35.00170 53.81650 58.35960 2518 5.000000 85.00000 85.00000 38.03170 55.02830 74.31920 2519 5.000000 95.00000 95.00000 48.57690 70.45690 95.28650 2520 15.00000 95.00000 95.00000 49.21680 70.78680 95.31650 2521 25.00000 95.00000 95.00000 50.49350 71.44500 95.37630 2522 35.00000 95.00000 95.00000 52.51890 72.48930 95.47120 2523 45.00000 95.00000 95.00000 55.38370 73.96640 95.60550 2524 55.00000 95.00000 95.00000 59.16570 75.91650 95.78270 2525 65.00000 95.00000 95.00000 63.93400 78.37500 96.00610 2526 75.00000 95.00000 95.00000 69.75090 81.37420 96.27870 2527 85.00000 95.00000 95.00000 76.67360 84.94360 96.60310 END_DATA CTI1 ORIGINATOR "Argyll targen" KEYWORD "DENSITY_EXTREME_VALUES" DENSITY_EXTREME_VALUES "8" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 8 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 47.3607 100.000 25.6130 21.6292 97.3763 2 100.000 0.00000 79.3514 52.4258 26.2898 58.7215 3 0.00000 0.00000 58.9971 6.48583 3.19399 29.8944 4 100.000 66.6593 0.00000 56.0588 50.5054 7.65614 5 0.00000 35.6011 0.00000 4.68562 8.37021 2.22855 6 84.4444 0.00000 0.00000 28.8428 15.3558 2.30466 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 END_DATA CTI1 ORIGINATOR "Argyll targen" CREATED "October 19, 2013" DESCRIPTOR "Argyll Calibration Target chart information 1" KEYWORD "DEVICE_COMBINATION_VALUES" DEVICE_COMBINATION_VALUES "9" KEYWORD "INDEX" NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT INDEX RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 9 BEGIN_DATA 0 100.000 100.000 100.000 95.1065 100.000 108.844 1 0.00000 100.000 100.000 54.2763 78.9478 106.931 2 100.000 0.00000 100.000 59.7013 29.1995 97.0422 3 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 4 100.000 100.000 0.00000 77.2354 92.8527 14.7151 5 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 6 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 END_DATAdispcalGUI-1.7.1.6/dispcalGUI/theme/brace-r.png000644 000765 000000 00000000400 12025152311 020707 0ustar00svpwheel000000 000000 PNG  IHDR /9tEXtSoftwareAdobe ImageReadyqe<IDATxbf``0PP`T; eR9TQ9.JP .XP+^a}=Ŧ,TQKsf,ր\CQ~y.\p FZt#+E0lqpW0gK@N ( $c7wIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/checkerboard-32x32x5-333-444.png000644 000765 000000 00000000204 12241576567 023714 0ustar00svpwheel000000 000000 PNG  IHDRnPLTE888333@9IDATHӱ 0 Atb\]jWKITގ(BnQ 28npQ\7*L^IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/cross-2px-12x12-fff.png000644 000765 000000 00000000264 12025152311 022556 0ustar00svpwheel000000 000000 PNG  IHDR atEXtSoftwareAdobe ImageReadyqe<PLTEfffƆ{tRNSS*IDATxb`f&00adBFf`FF0`>.>IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/dashed-16x2-666.png000644 000765 000000 00000000223 12025152311 021644 0ustar00svpwheel000000 000000 PNG  IHDRf3tEXtSoftwareAdobe ImageReadyqe<PLTEfffstRNS0JIDATxb`F0`@$ IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/gradient.png000644 000765 000000 00000001476 12025152311 021207 0ustar00svpwheel000000 000000 PNG  IHDR`WGtEXtSoftwareAdobe ImageReadyqe<PLTEײٴުÿڢԶŬ͠ϼߣ~ ؜SIDATxYBEїB_`:g ^nzYr+^F@ 3P/C^ze-P/@2 P/^zyK^nz P/G^@zYP/O@ zG^~z`````H```````` `ފn+VIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/header-about.png000644 000765 000000 00000120521 12025152311 021743 0ustar00svpwheel000000 000000 PNG  IHDR@"tEXtSoftwareAdobe ImageReadyqe<IDATx\u&Zucf0A A#I)Q,[iזv޷-g+ؒ,%jIssCOϫ޾=ip0}CU:U'?ރ*BЍqm6BM'/uDC_|4j:'o,}[⽜9F6Dx ?t(E>zwyEt_}T,ɐ?ahĹ'21)_+[}_B`O?mb({4Pqk@D M;/ @w+r}w| D |\ l=GL;o/ 5RMϽUZMk'8Sj Y v 4B =˩HԾGsSGԚ[!h*'O]Ω[r*c7ɽ+J*1ؚe ylX_ORق-rK #ޣ {mνyEqZ+rFU7j54AkPpPVCBj1>PJch8-3Goc_pz=iy7LLtdnOZ{SЫ_U}Skdcp|B0oK:sw؊Xw,Xܲ*0u O82kV3LY4 [ͩn=*?۲}pe'rۻw1cln+Rv޽y<ؖ kvx X~Džm[J}vUjmǎY ȓ:'5;K3ފ!F|lbo] Sj}nSLX+5C1FTuV7 9w}OC}WһH@Dޜx X>_Œ?ta Ξ|cΏBћW X5@heP:t=!oS}R5*$u1gd|z M`ڎ'1-a(9ϗ} 6;w'{4fR{wND[tW ALu1ue't aFӧpzOkD@M!Tͣ{ZA'6WPpU6bކJ\9r_Pġx;=wE2*ܑug/ҫ)x(F4LXAsP;[7 {6O"D]?hk@WP paH~t taA˶.^~ ~C_E^#7p4E OUm.>5k 5w]hH GKG<^la ^t0߷Y60u(E  |Y! +xip) pzUs=Iɿ YjWܲ~=䎶BB(J uܘu {{֩Q`9xM}rMĪ)Ƿ;63- 9a' bY1sK7FdwggK-6-{sT^b9sBojKtخcn+R&Fbd 3%It+<2A?sl[;I`۵1Б;aY,Ǒm97Bn4 Vr1G:MѸmbzg3_#[;Ë<)myۓkwV2e< :ߞĖ(c.aص1v_N'?3{{gU#xcYy58M;@5`ڱ򞹡fc1VD {ߺ{g31uZ7 /D'ha`9Ua*>{9JzU$23x&VE^0!u!,UeyFTyUd.~m n2V<3qYn"W(˲ߙG2=­Es9\gPBP*vbpoø,U{ZM>yx<Ƅ)Zd-S4Ekn,^aY2,'ȱnJV7a"F"IA'Z9X \h$C& 㦮 6('FmV(jq nn;*iJ$>aOQRcu!EQ2-UR&u~stVK%*&_LD pZiV(. рErwBúY~6^Ůi ˍ`uY\s]\ɵ+L_vs%Baǭ@1[8:%4b׹#{% skҾW?U#H:cwס{ mQ^`~6`v3eECNQWUET?/>Q`A~e HĬ|+0!;<c|:T51}W63?t]]-ϼs{ƈBN҂_|58:?Qv VV_L&;)(E*D~*'Ǣ" ǰ#fpq'hpS#kg|v?dʯ srCN&zjbY|"GNWq+Hgt_޺kQF酱'/xlT*ķ\`.`۠t36!v1?} xYQeY2c8h*v !د`i iZkGľ,F^ ڶHzP>젱@Yiznrx\L0F1y[lmZUV޹ {$dFT*Irz)ScT<0mJRvQ{PSijbk6CE<r; RS5~C*q!rY='nDYv6x 0l}N޴ N2Ɏ S8P#s64t][ke&}䍿2V%{޽ 3GRolDL+ˑ5)L߱!L%}䢩o=wMFb@܉♧@qh@T+c䋣؃aDA Br:3#f֯,>=ȅbU%WLDr^Ǻ%s2C"k Cp! -f<@aRMia pҴ%k!m0ҩcuN;T6#~ `CDsp.ی—G-ux-DES[ƔW=?vNmoy\5Vy!y޻{  iGOs"Z\Ӽ狉}jeQhX^j7sF[b)0vgK<hnde0 + vG'm%Vq j]!dMܘӳ-K\ӻhbhA;5uԜ];c^ C7XV&JMCFgd#;NoOO)a+36EP`Ú*R#n{YIfVlj}H!u#.ԶJRGX-.`UGyI'{9fq(*F1O$G$K\)Y̠W5ƌĬ{U*jlV8Hs_(U!ʳeIk,P˼R)@ي̋x2i5&l\ (sB,E9jUݖ?ћ9_ȚTzBjH$hj] Wǜk `5di6İQ]HzP8Rl:Sw8ً.E{KJXZ.±J$}kz/ s/q{-shN#eK=/=|Q0K˛g4F̞ x\ϥpf/ِ9_F3xZ^?4# 7XќGbE˽qxc+ϑM^w?d ݰuݢ%8Q݅REʗ='_;ir$YrfuwE g5b"`,]˾q|.6_1B*JD]`8ruw[Ʈ-焊(HS ĞZC+׶=[8P Q |#VBzX(l9ܵf ڿvh ZwklR/ -r0hMkŔ建֯yAo&ك{u[DhQό K~}0m&[躅KzQhKeUbГuZѼRuKXB-M7_Dzu۾Zq%͍{Fƕ ^z_=k >N^06nN_>64-IOvwuuܰW=c(z,pͲj_m}cg' S/]Ժ4!4V$AM RYvJ8DžH-DT91| GF# '&4c3A;Vt}F: nw@IċHPxS*lބ[MN\%'PtTF/XRY 93DH[٩ҿ~뻋C;+] V-O"I}nD_ sTW[;02й\Yђ^6hr;ڬ(ʎCgOLwfnf)~ƅsˌmY6ZP#B:Y2XU[N*I 0:U4$";[֞yup1LBh\D6ǚRfL}@,@OT\K? -Xg"`A.bu`Zqڴec5?[u[j_.}=qtvEUޅn!FMf8᪍C^`yi5+Ib#7¬w&T$o;OU4sn?m;}:yYaHX揾b%ATLh<tDEʕk.U"$YC7-5;7.}j%M`IyPXbDJOjJ' d}fY,#/:}~h1phjoEw_own[`C"ؠV{Ȏ!%R-Tʥr)x/$ vy[k^P-7(R#qLዩ_ľM/6 5%K:k= uɆWSy؇h/3! # |Ǡ%g~s^^ז6<7j8oSF64U]70;C6F]9hg'^X|`2oXҔNZ3gM]AMSo>/>{{$"zY\6'mkPG_;I}s0ްbq kQN_nDWu51LQ<fZ:㈱:Rmxzkqb7ư3sU l{hkVeD\33?hlF c`/ЅON4v_QVy&8ƙr:#-7Ӓ_~K@[,ϬM,sS"骅#cDHLdDP I$eT7Rg:|( EaM:Zr)CBmy Z;I_6#jqb_M* )ٟh<wĺ7)j؟BSs@L-r-LKx[jE2{dAԱ༃?y >0mYcWȶѫr֞[΂aY漴;sFwu9)i=? gЃO>>` p]R1c$Q<14>ɵ6Go\3ϜDMDkSDQٯ@mRҤHdZF"hCV::"i=ә@5,ڔ^Sh|9η196J((tSjWzA?3$<"p& Q /w-P|UW|' 8"yDEVѾ!bčzo@ n93#7=2*rw>wF;#Gg*HK>IeEt GS=$'L.a|9,:c_͍ie7]qJPo.I4rY-+DEYFWDfբb,clڀ}jATeA 6 #% pI[S2UE1j#+}]HWHC hB0h ضND#]BIg)Q0SڴeHLY:zmG4|5]qrAmh ZKhqp"ʂ!;QU{r}WB. 5DUmڌAC@F 8*=#Z@X:/%9+L#w\"?hZ՟y`$N2U`5s*Au FSݝցg/4>-،]Vt5#`'\R䎁npA\$Ɉ &),U/b,C vlXkE67B"Ud v 5pgSطia ꍨgYxHmGzܦc %(4hh">LY22e`BIx}V1C4nS O$lD'ё猿-hoeKL,C>HKϿ셥OLݻQv FbIzgl]Eh&c4uC\ a{5/(3뺚"RtQ>v-,D>snzlMigF )[r" +K2` @ H>xM%b[|^c"D1f'F.Yc HF&6wo\h4bt0XU)4)&"1T\En6\ UYkɄPtLc+60}12)譱=t{xBCOEA/@;1PϺ9c[aȓMk~ оP%kk<[bEu:>gz~"z}7ۦQ j_ 1]7b`,;8no K{ZrSyZ*Vkm뎑IIh׉i9sb$g,ۉNvTt#F-Ve5 N+:MIZ"8W.>Tkws[{9nhknL%"d[DE }m'7o}WwM ic& X@S`IWCT`0-)~Z)dͰ>ȗlPv{EW7>nh9IyE}NqA&\AZ ]\3@<~]kĖ}T>~|3|RF@d&w躍(GD8݅Sr636G7jy1ruΦS\\0ŔJVQ޴jA-5x0E#s.Ե͜ҁAN[8sx6;etkcu*QQɫGOw^57?9{fޟ"ؒ9?K XFXh3}3 C-D2ڡa[⎫[۞X,t0͊< _r߲;9`}qu˓(I-fߌyIPJx8^c+ :BdGA*Uݙ2, @Q^>A`,QT S~v}錟ۿQm>W% @ovh&#\趕͠O!UAnԗ~gnrβe/nG{e'bH_ݵB.W"G6&,AhlL&7 o_Q455U*3I=?{֦BJJm`JD. I)mk"OfcYwkRT(&?c X\Vkݿ33ԟJJTc5YCUVoX589/L3߼k-7€2vKe{6˓G&FȀZ.x\C'RP5YͿ \v|r|dbt83raI N<=Mxp8C(4h*sr nc7i08齚ꅰ(9{yp0\:M: >; |EmVg;"*.!d⑭?o7uaav*%s+uI:WU=7l%7܆/_Im|=ssoGWE@ma3(i@ւU͸+Ƿ6O6]Ԕ=L4cVM7F 6EyUUY_ӞcόdaF'ϏTZ<3sw?9~~KDKPse9Nf7|=n|~p{{_E/&?/o&ۥkւcЈ{+}b~=e}$c?}MԽȹ|?_( fctgj_Uee SQ^a߽]qۧH4 2!u|``h!.DE7P2'vΝHޞ,:)"IձLaɒq,Ն少SΓL5j3P֑o=p<(MQՁ̯:N26A]Qbh}G0Ey7&]s. 1ҕjT`#<'\4]IFLlAa =YSG's.M 4(o;|qsr1&HՌQ"DșgC x_ء}Gς*9BN,W%Wv3N .{tuFX,9;Y4pgqG~¿<4}t,>U!? PBj2YlF,*E[0q՚θklJ)ٔ7M(<(Ʈ k%9'j_)d("T }VCxS'R Կ{߹nĪW3uf7סOBDM?3i $#uvE7<7ޣ|SnpB+Ŷ4 cUԜD dtM ^CV BNɞH5d֒9-+|&-@:Ys$iec7ܷ!3?}}2<6gxAH!Qx B:[,UF"OPF%3}aɴbIyjT̑[Eh,AnZJKV)TbU+k,Y+ȾT85Hu"bQj,VȚ/GEF^'#YyUh\Q~WRUCJ:mWj: ttZ3f.CK8w_HooE' Ssџ@381+"Gi S键\kL"Tc6F -dSWUKbx&٬]8Xc!|2٬ڸji?OǫQgD"H4J6qxq馉aܢ0A=/lC5K~K#H,h.=]hHwTQIS:He뫥+l; #d3+0Vu81fSri6u`n<&Ӊ bsTSbNŴO  ጣL ~~ Q2*XLl':eW.d!s6vB蘩 s~WGQz~ :%qʨ Jtl34(D)Vz'4Kfyz-]R"H܏Mo*ukoT{L\Vm VBk14h'K6&٨pCwJ78]`FH1͢HP q4cx(Znu5ȳ੧``)% `=A9p~4u%J,K|5UۣBi^@I*z-/_ C"/Ӄ׬y$i%HsU29gccT0A"Z & `_yDwpm{uqrYj]6E*iBlh=%uLe0udD um"yr]eajRGY1uC|3 4# { 7 >^icG˝Bo˛ag滦Z\?0~;w +ZxQյގlZ7ޅUZNq qɑkQAP>urj#+|Dr U$B hP!JeLWACUl!WMs}fM.@=VъCH1& k5}=rY|'B<oاC]/=;}_*VV~fdǢQ {@MB'K Fޯ{YďM^^oj1Rn|4/pVR ұ"`Lx"l \'h-v2\f}{L1B;3'7DT :~c"m7*MMZY#)*S'u79s~%@"2],61T(my9"4Rwz>|tR@`s/\ {[;RaũW6#Ŧj.w?EM853W8suKm>ʠ$Ses ?;T|u`0.uP07E\[ U?B Uְz(dkS`.=S3 w ՠ=>$*8C2 ;͹}*27Zha\|f?:ӦCk[B6`Dhj~V pOCVnfijUDc_ETumgdY!N%7$%]Fe ~,ɺ9ԋT@\\U(@AG_)桠%YVMZ\1U}Yp,AHF?P =P PBJ2@["} ^W >8_T0~Ā3o 8q[p x#\m?mJ/ym4#Lw|hw; O7{]3.TCGJ) ML2q YZF! \,a#Jޕ E)7>+^+(\"z[yN-W͉;^2,DA*N).Y( (Iqsg.bV^,F4yzZY7'&T%K=TOZ+RԪ;WNiVE.sA*xBzE"u IQuj_vuIIUγڙ`,6}2vNqh%{aBrg4j Fo9N XDge%Of'_+Ph|o/3I ͧB_GKz'S4dD%D"_{|Rnݹgh" ?zdIhi{.gMc[uq,l4/"bD1x,Y=L|vYkj@w V@g]˺5syιSinvkcc G˪QRF.*W̊e}~gPu#Ter,]ӉaUcXĚ F5Dt3C4T*SHĨAYNܷ~ _s|e;J o+YfamgAf`ܚ٬dcntD*eYHil<ຬ flLtm 321V9MlQjGcSgO OAgt0|evA W r_D"#+o.d(~WJ$65Ck Y}ӀLOd> 5Td;tft6n_3}p͟lWT5iOE/)Z)7DLȑ[aq##b,ǣY=M.s,OAT3wӻ_(2,GX>֪q6_J2钢 s BT/6rTUX B!cVTDOh^!{}%,>Y>ZM' I)B4E&aT9)dXH bȘeIH/1>*cIrATB!_0Fdw\?wEEQ(mM0%Y+kb$JqͫB,jom_)IijxFiC/f<˰Se-ʸ\RS#9$" [lJFDyӼ DDZE`]jIpZRy[p|,Syb$DQךcX^Rh4"*%MbU)Vh,uXqxit4ݦ '2!#V.sN!& N:4."*u z(EX/C2^Y$ \〠1T ιF& ~}mg&ܴO} {#!ӱ1yn$"d\K>yaf?Y?ucϮS''TGU*ŻoX{.T[g&@UUg.g|繃ŒLZ|޷[5 6v _{rMܰ8_{Am6,u5*F}t4ܰgo~Mss㟹}qBdɎp?>}!ٻU$rN&!EM_6, vm|8Yy89ܹX`Q ~WղCQ ?B@BĔHW(gLoٟ!teb&Ӽ'Vڞ==Rs+DZIt`.͵dHWx/: Q^s.<3[gf&TU^oX[a0vڋ|#:d1ScM3&b*j/jIJDž&,>eln`oXs2"֎mLɁ"J -qDGл:[ÂeXQ[ebnۋϰV^}6/zɳ㗲Zcy#tU+)gw9c$Gc2Y-m/vIH85?al'fdЅlsgWxyl C7lUikj0wʷ;ǧfp( e;O3F'r kR~5sp|<=Rz|v|I2ͧJ/dFɪ]%2e%1c@JU59G4bFq%ͨY:΋aDz/T{1V~&52 EPp=}"ÚB,#x ҾEA̝:{R@ P=s1.;Ƙ—?yhɣbyQK*ScY-I޸H+t`fkpl d"nM9=@WgkόV_K#b$bXg7,wm.d_`!S+ND2uh 2qjsT'795DQ4t"<_~\`U_AoU#X2 Q86x5 jF/s½x1ʳlH g״YRwT4 uƘ#(p K5d#[q]#!bE|'o_1^6n()f2 h,jJD+O%YM9Y,Mkks뾳MfYg] Z*jF4/yt"kDT e⍶A 8)=$B[C}.6W )^rdǢ/NlI/3CX׭jhDEz gn1zQp듾MaPAw pL4B/ ?$W1B xv3 Y~?#?6v)2^@k՗EKoy(c3`ټ%sZ{gl?6bd&"'o^yy7 |UA.f霭.TْloJgJƥle圆Ҏ3DkeFӖΕBUd[?j":7C'UJY"XLeEdY& r'[M* &Lɒdxu Uqh436dY2;uN(|C h,QTF4$=]%Y!2G4rrdVR+-R5ň+j<"OGXr|.1ɒNN7I"4cp_;ZB)r"/'I3*E"JLb7 ƨƖ))DBUUʥBc'Qer J"D6Hjf4#r8lNSEE0ъTglI}_5;(WuF4'lY|,ՈA9䙒U&0QV3b1R°d UhTDDzaȱM-̦XQ̎k4!H eȐa13Xx/U `*w'c8}Sɨ:"B'r˸0-$D7; 2*Y-'nv)JS(ED5ɹRF0͹HE6ܐE9@]`N&a3PKQ0ec@rk4O5^`TzL,2 /cy%Bs8 -I[ իf[(TB~WxM:^3fc#dtAT89dmݡ0$Ǽ Cṯש}}Kh62귀.@\ƭYB[w6ycq^a/OopNf/힚Y`uY7,e[a9^ol GF-mnRNKKz^ 5x$D*sB|:iii6ewHgˡ =UÒÆT/yd4B( J:'@. &Ql syPWL'8nRbȖ<:%UQ86 |8]}w+8J(2 #0k`u%NX(CU*4bd=T*!됔Sݔn|{appyRvQ2KKor_ggn]7/[zA..⡫D-OZ|%kltdq;??7nm} ^3AA t0O&g+GO;t1SīB|0wLW+tsQ+F!=ak9s YFam|8jx!$*J)GrW"s~g!TʲTJ:Hȑ|.]h4Ze^9*Y$˲r6r9&0y œ)]Sbü5DB.@* H$u[ZUVrIIbŘ%HTJE8w1j=g$NPN&\-"#јؚ 0(EqaI"Q]ڵ|&p ehL%$YKGE{>p Ν'y5{ [U=O0B)vu(2d8[q ?dB;v@X@ BLU+/zD-'48_c֎/]ӂ35DU ؼ!-t<'3 ]5%0̱oM^{!]+QG^ԠjPTuJSLQzrUEnӑʗ84&D\4r܈zOܲT# ď_ޜ;@?yEF0I竒4N7?6?*2͋% ɋcg$Un^G,~DOH$q<“UXАse^sv`쩝gU]LXDض{ގ7$͟?V[WUWM6-RIS"{DInw ˆf, hlxl0lx3ې-X%6 IE-.ͥd/쵺KȌx*RJ]+##ŋ=s܅vcuWWm͕ͬpk8hI%CԈLJMkR-X%Ę.Zk>5aq$Pї;c/i:pwv=uOZ h1&+ǺFßݱbvk&R+}d]+V+-V^r?rǖ35:!> xM[˗yuOZ_ww?w'S=5׿_{]Ƨ|~O>'?o_w߻uʥG~W?+{3_cO?|]믜lfۧ^Js={s0ޕOKۏ~??oNzVUG/?=_zK?S[\-k?wc?w<ҙ?~?Y/?|G֮졥:N/]\x7=5]=\R{]~sCG<}[}{^~܏sO}WV6X]4R\\-3kWnwݕeYX*nJrkt8S>{o_=ڃwn4G=uqz'~ן};>4ڞgz;7۪k;o뎍~={=8S/=ŻNfi&n}N>yontm_z٧yzssk>r{#k{gۂHU2 l!_ Y%d`ْ5mP', #7$IT\!+N_sd!w 4f^Xr ؐݛ<(Fb!vsŃ, 2wB $Jq>zק^pgz/x_U4o/<׮.=3g^x_>Zr=qyyyz?<ܷt}3D'[~OV6;~7O_^_[ L}_83/?{vW]x4:{u>>73N7hkךx5bӣQO|w~m[^7^KYYo~_ݵI ;_ٿrf;5eΊf-)8;2Ex_*TEad_ Ze7e1I&D3Wȣ{>d B{ݿowor7Mor~ss_}{7Y]7=?>כP{my3deuxw>pωzų͞zW[ɚz̓>'ytsޕx?_3?v7.{|]:}isze{핛wG}Wo_{0Gycw9ه/miK?Իvo?|czc}bDY^U!QpG,KI^= ްS:mܟk{ۂ:L{yUzIh69r@^BjiY3rВ IXڵc!6Ʊ iGxO j;Yr_fyW^Z#Վ~3 /۾Gkϝ~`}5_ѼGzׯM76K}ً+m;lʞLob2^Kۇ&?YLWwعz5ܼڏ~?v_}&If"ӈܸv}M,pmgս+-uqW&Ӄ5hu}4p}wڜ6xdh?vaYPO s?o.m*b^;y>]|][pV" ܺڅ;WpI+k6 J.\i1-ǿ͕#,>#':*d0n2]ڞ}-W:zsfYBs#.4a|z.=6:5\Yӱ Z?'7֏ޙvWXWm\;{k.]{o}?wVsқ\a~ͭ)6_rt<\g }[06׌2MvʥsFՍ#Z IoQxZlӦ2.KM 4,ݶ3oHl `T2EܯL2mӾ-D-Xt Yb?"oIfe Jٻ$.īj\M Btxhr9Sg.?ܼ%~^N#]W^Xt[̼k^fh歡2`?WfԫQk4|&bO!ށwiOpuG מT%65١u#f=|-9Jpx]Ӫ.ZA_c JLA-4/<y8,& fzv>S򇐇D &M~7 P\@}|>%YJŎ~),T\pKa(GFL ,TpiHz&KZK!< n7a}nX"_] JfP/-¡|)k@FlgfIwgs3;S]]i~VZtHHJ NgKM65Ma",BBfsyM!R9ZE3\\\65BZZF1:J;+zVD&y5mѺn789~ ԙ.(yPAū ٷzGX@NR4e|%#q'1-.Nsֿ\ A7ccj NDN2eJ(+(60aBm ^Yvg5GѨJõ ug"W"Fkz/Nǀ 48҂I O_1U [eMC  + 7 f(YG)Y6bƥGWV+{2yF[֝hm`[|C[3ߵqZfy"pUxVm9VUl1\TH$kxpE6 Ѭ$d(m)2tYJUwE 1PTzenOi6fQAHkT}N#n\FKĕƽgSfym#S"k3s3K_fFe_\!]#KykאfGTZ ,=5j2,Wk<oK.@p*d(iژl#V1yTbTax>m3j8l7 V؍~W!h. mkfK&ZX}T?:JCўw6ΊE~ӵV^v#25 v|uS\-Ud?z03]ʶ쫗DLc'0&RPͱ+o߾D~OABִl{XVx'QBgDC.e2m{;&YUؠ$]ڱU_Sb6B%ZծrLPG|J^2/^U>ܐ͕9+~.{Z3[V/۱ =@@9/<bYtGY${SErDXN`N,]c5 / SfQvEX]'m Pɢ@Hfnv3YA5pG\L K KJxg"违9,L{J9CPL3|iE~xmHwtކ-`=2\er>XKu)d!Arڞ}f+P:V5#M)gmSl9) ̻5W|= +|KN%B=.g NԐ)Nה)gꊥ]jMs5ˑr1};>#N<`t,C iG&9)AdbeԾ*+ vX/6/%_(ZnQهcO7DN9lAc$v1XR~-4+}8KxȊE`KB`,*،|+a(nɆXukpl$k=c+BP'M4p,.YTҵJgl~|q*G̗~w_ v{/*b솈Z(a5k1J/J a룈c^*Ex?7ZuDR5r@$,1*z :ZC$ut7YoN'{Xmz婂@eg9ΩY t}æg+{M'CSHze{t=LȥXB]on i̚$~yd2UݕUA9~B3c6Ma*1"*%k"RBkuל'}:@B \a$6#=*E?Y ~JR4uX& HtMI*劈J|W{iJOYd}??>Ae a^\z 4R68* nR@㣧J( X[t3›3i\@^Mٱ-X԰E\r:ZٌlgNRl Sѯ~O^KzFB +#p#9.TJU!6)R}Cz쉌OgjM*T5Ѳ9y zk!$1]¾S;ق;¾B2)OC kG) OYk""M8 {gס1AȮ}S*0kZs 4bcsPMn b5v{,5 T2LoMMK)|PcE(䯒T bu)Qwr Q5QoRPCV95<_-W WkZ/LsݑK JivNUBF('}?LCW3RFd% p.ʧrIu~|Vм}S+WWkcu(!r3N0, Q3nÈy9uLH,"P,wH?+p muHi@0.UauFʒkD˲Xabzj_YbR hJ8EKts~x3"~i9[o otb_u 2cFZ\Uh 9" CY 'x46CUG6u2SM̚SӠd!5'煒ifTm%)kIܺw>qGJh&!* Sf@ω#Bzc7 ҚCbF>cVyJgPz}WS]ENlTSŠcz'= }jϪ"X){ֱ*![欱a.\^4/6 Qp  ,h{jw%~H uY^ j6Tq>XR`rQ oIoT6&'vN?+hڇyhw ؄=brPF\g(pR[P'ʓ%n&ą9)`Ϫ݂8B?`oy=br/I+-Y'%!cuyjpӀ fs6B#jrz8!jKm> 9JqjLA.OOF**0 .'ܾ ZȕS 4)%1vjk|d_=#x7c\U@wKZ۞ohE̐w8S$ӏ{t4V|ZoT}ݺ5/eWtaFU">#? \6$F$-f ŘAvn4ʪT !jB~MomTK s,Dq{Y\мi*:-.EЁ/M Z )wETI Q|+ɵ+qtB(]"p(n Y% PJ7D(F_C Hi^\.|@JĮﬤtY q/:ɈH45UoOmwCdJ)(/YXhxP?ok;>+! 8b'/!kǃ>N}ZDOzc=O7o "nfb5VB+cKrBo8Q( b)sTPA0)x/'HP%B-{h~#B璄, ]Vdtefu)7C͖0!rgth=Cvl>.WDeѦF׊*J}+! i\5-i<]wKn2X/%YĸֳHi/e;zuMٍiS-)c6)B7HJ^ TAq&٪6)wZ ԭfj*RCCR@P#2*I'yD\Iz l( fe%{IHf~X|" (%_I|;b(3ҹ1S{Yoan^EYSsa zU?M@ӄˣtԢC~c$-"CvV#ϡ$GF =žL#S"ץPW"ZmC&)C ġj<TJiyg}SdlXCYo{ѫ`(zS<"s#L k!IADj^>Zw+8@22$QR!+J4j('y/ƏJY p"YzrtU`m:jI"២q5pѼ;zOਖ<&y#W@ ~M̒P̋h1WΉ@E /G0yutk]@I>0NF6ɻJndSp)䁓-kR/<-x6ֲb@ F2aiv>8R G.胂>S#FcHZǸ}+I? g)%]oD)F%TB|o+,&;uC S6IBp߿Y3E%2,5- -ÏOEZծ `(Y~XQ^1f^ҫ6}%%XhFȢGCE;F-cՕo[#)DBpb]aJk㳊5ijRB7Eӥ ֗V䜊_֊5`Q;MD!>G!6}*4|ڏo(ˈo)s8 v'@T82&9`S;52Cm'7j"ً֙}Z/ˆ2F p˫!h=qb87n5 A!7=?ؚsTOHTBHZ;c<%& nej)X@q='²ߟE3q^T5pTe0/iS j&)Ww`LJiD6k >S2o$Q1ai$D6L\yJ);agĵa2%fV͛ %\~_1Y6ids AYU)}Tb(}.\6]5yUgbI \˞#1! dRIKof C\IZ@Ԕ1`B 0|XMMcikQURmJebv}2I.qCьyvDT${br Pxq )/c uR=\U$PMbA`GK&jG0+NK ISY״@qxFcd_HM:FS'8۴K"&K9JAQG[)lF;,BaYSGHz k‡ѿsj^'\: T-ia y%+pP=R FHXXOy}M-= A.PBkׅ(]RLr߇:P.H>xS Jý}8u.dxJ f1`:Yu$g=%Wz <[=%)npgȫ_\17(SWǽ;D ۊ @)KƠ9P<JM"&ea8+̈oUqH5ʃ[5"=Tuͬ8JL.te0t{ݑj3R9ձUC0x,?`U*9w)Y d0Ye" ,?0}QRtE`j%5|(h51\1(d1#$N b_DWV5i~xF}1<ٻBFtAhfN3(s RMQhCM05%an2Z<fSlaXy67׭)u#S4S17_!s2,/U{ncS/w^Q9w׬lߞZ{+cح[^y1kϷ8}w|ũO;$Pj:O%PD> r|iM2Edá6x0 u݉%LP<fA\M!x5,*Q!a^R%!aK% oǩd~ecgESDֳ#:P:#T;g΅~ԗ5gDX}Պk2%JIsY|o~l'R_4Xl%1'/2F6ar JRBfSw#V^l Jd@Bķ 4),do|cgfIhgKtrQʼVf28o7Ro!V-U4 Xa\6$\Mkέ8: Ck:*v5.a]*gr  xMT ;kĺPP jD:b%"}c(WmdITY#_|~ZpK<*'J3AQ[S=x'@4Ld\xEt,,z P؄!ē qR=V+@caϜ$eNRdD.(M~h*jMķp$Q5'S&7xNpRL'$,+IQ@a,tq;5dA֕KJqdjOIMӜTo;5P%΋5Oƺ\ 4~Sp&0s<ª y.չ`Ad"&IծғSHh&$=2 KYX"ibcXl`]plmst-*^;ʼnKA"R?jQq? s s䰸;]Z\PM_ڦykdF} = =D S Bk,}bhuGPN sDY(ǜ}W3Qh cZR??1 2~,8\DT?>""Y/"+0 O,91Lr yQI+:gѸ2jbVQr\!yaZ4K=^`71i,TQ8%.wً|:eiOnGBa-˅|r;iBmFUd+;Ӵ>nr9a<0 -59_|e[e}Sv+S_ag֞:2"5S0Ց,HK ٌ>UBLzH-jͫR֊p;pS2ɮ7KUKzqy zkHp&yY.K=iPE¨"$dΫGHC`D|x9B ̸P q_"؁dn=2aثCeC9]hg&XxYTipbg<L)H,%Riǥ5~B\X*%Ϡo@#kYNTO$w!ٮ'R0Mod3IyAJ7[:=٥r.ç,j OxZYN>UzK(5Ms>3IjH$lT4Z_a=qM`^cMڋ@iӹ!,GKg!Hu/g7*Fگ"6P;eUTpe͐i1ȝ3T6&i,+}N`P(ƒ_ύiϦ DSE/*b:`ޏ G U~npbZF`u}׶!ظd Z).aI˵JW5Q0@6~/c!cp6.Vw9.C bZyt3 k ;b"Ys>)}C,F)Z=Y?w\u5;ݖVOkzfywZk>K8n= RJ;QO` QӾe.!X61Aya5lucϛ7w؆jjuM7s#| aJ;g#*>v?{F ܸ8W;.5o۽fV8Vnݱz+yh6olkc.6qrҾ[sFR"Tam$~vn*[.H$pcQV‹r0۫.N`-nG*+TYk 7heF6 '+vY 15&ߌ/ff|Z0T&3"[N'ehubv;ƞ(qq>ŕ*N'QUoW;5sIG4Y34y@#l\J)S}oFIVU+"wXi㌝d,@6fRY{V-!Zh8Ӝ<^h~GJ ;I;prRshfde)KS%Y3X8K4-fJ?OuOj$F5kjSzl՚Fy?(cRplM} 1[-]3]LM~UKRՎ 'GL pVce#V/]tSd:/WEsVARӵ ˈU(1IS}qR+(GROEWUժT%c^Rǔն ^jTSK(|QVC1`vn:RS_,p n2-'q|[[>{D,{,N!=G6f'K#gdp9K$Rqo.7Φ /CZST8!%0+x/sT "ִ{؎P')֊U4EB08.Д6I~?Zd&^+Ȼӂ]%8iJuR!Xƣ9R@`A <_dmaR3~ ho";f:,"6M(Z!;:-&IYnO5-Ԏ H&UfB"y̓ uL@SR6S}:ٸ)Q'yFHVIrݯG2Zt_fSl;_4c`2D9*z5^*%kY8PO܈D:~* oխ&LZJrddX< 'aNG51<'0ㄏ(iE7洨(^ .P'H+Uq0qx ^ JEWgi RaƒR孅񝻞!ү-ʣN˘DÕ.\BNsVu_za/ic΅Lea,ԇ`!ǼƙBBcqtJײmeZBuzK/RA黀J|R+MK֜+ya@Zx}pd[x%$|>D9mK4ţG |YfZ.n,,DݴvH{ES1C'F-iٵRtP)B%hY.o$2\H;,ji p>k1s8,sE3BI辗bW[P6O:,IuO=a)һ8^Ij´lΐ/{)55W6):@]ޜFخzC]oܒÔL:;?MQ֫HCqvr@y䌖 'CQ,_ˑ,!^f>:jXVWǐ3޼ٔZ T{%#)45ӫ+5)5g7:R Q87ny!ۖ9 ⻚mU{9le\.gQA. }Ifq%̉٧R3|}pp0vf @Z "&#i~緘:au6t0H $zQrl]3"VR `: ++_xQKR4Fm>fݸP5z^n >DJdzw*=N@Art $(xAʋEQ0,$jw#PDwNCchXMx,W$RUAҌZCt:8FLoj|;P},K͑,24T#[w]RwGq/H4"+xUK[j Qe|cw[Ԑ0r9KDʊB#c% 4͇ *k5zlK5\>Bp!P25P 3ttF&9v D}*sX!`eJ-QSX6I nU^G‹'x}+V)KBF.aVp4"i)%X NFGҌ/)y5,+'GYVN`L#H&a7f_Ar6Ĕ:t#`ʅ{A͈H ^)7~אs`߹G4f]lwCeYI䙚dچ#{=WS;N6O l6=cK?/X|L?۟b?D/|<ɜ,osCc {_3}m4!d !G7 , C>MwZhK+V4 ہ?$m~n1M׊$ o˫+ ?hވzMȹiV N0>mˠt?UȚ4Ʀf&vF+bQKw\ Ca[_ `sEPcƊύ,K58ip}Sqs"NZF/Ǥ 1'smUsQu(dlW~$qBt~ N\b}EjpBē9ORpBQt1,Ǔl؎8 Q"N6b"ИSq9wb8i+NlWUy:T # I:L'6FHn4isDU%9h^|6k (C,Z;8W<(Un5 T i4zͿ£ :KD />0D:zN\7(H pQCQB1JXu(րџl74s` Қ|wt3} P1'!Bѧ ӭ+}:U7'*;D'QP晕1,8*h P69st>_=٨oHFc>o>-fI)=ˁ D|R Wp;t/22{ ό5Q0_",̢V#l"ԕ9*QhYN1j2 b*@W%AKhAsP`09OIlj ;L3Yފ4p5۪B&z42p2:w8>hJ2NF=UJ(d<汭W |վ*&D \C'X#32YI^9d~܏x nP1Udغ}O ΖS "|!58Ԉ&Y~}+/asp~qClBv~򼃗["?rl7nk;;W]J12+P]T,ͳ"Hl bٹ#Ʊێ wxq,f->mc)ޖ$/ΦH6aIWPDwGꝔC%QP3Vn oTCe%5T\풮B^>m$6& }[cHA:Dgkt=KK]ʂ6h~B.WY8?yj<%s5Ccz.L"WM ]]FEdz̥ŀ6Ҍ!)XD%bClj~Sr:wΌ74bn+җFG@H`Ag@32ƂjJF%%\(CYKF!ذ1K2`#c>M l*NmM L=N?Gq5(*_'b8qNēx;q`y3t(M*N6'b`hD`c%"$'uB`Mމ$Jqy'R,Dpx1N ';N'XzZ'8?q/NONSO"|*Lw8'Q~p!?h3~jͶj0u7uY›:tw2hѹ`}EɩS[fR| ~tM[o n`!pNT]+U0k hSw{X>-حHh>m3Zf`vwŴٱ 튡Qf-5cڌVnE.nuEFEZmԍdK7J>`vp6'}lA4 TKٴshQYn@K?8 \TkrRaY?rr_\KV"dmRk!ht4E3.SI^w@4L#hg?<7Y٘Ёʁ ,& ܼV0`bU9 HTD&FkmhY ] B%@R\Z'R.c!m%|Dh% xnY0FN ^lj okO@6t3;'oHHoq>@oU:j3:¿UZYeDEwt(X2 N\S8.$THOMÉva 'ƗԀ6CIJkOp^kQ1NÉOph7a>'hpD_{'^xj+OpÉteމkN '83`MމIJ `NO+M ʼnG ʼnJD7PJO(NiIJ'c2ewcZk?ݗ9-]_4Z =ĸg<;hrq{.~¸_ 2;<;6dHP :4-BP:ۻ]֦ )jyv4o!-]߁%"ogm#;Ftg7466.\V#R͒cݫ\t6XJoK)CߡɜwĶ ++W}y+$1_%mm_D3F'K'Bh\@]3n+M`-\L/0 F3NFYImkd@]Im*%-0H&ۯ6 #wYR?@hIE9iUޏDoNri(L`0*FL >p@_҅ƓDڌ'4'MRqBIqpRit;*n'۸!Ɠqez`0$ᄴ$'%6NLDKI NDOp"8 N0!p'D;1ʼ mt;1 c(N '[VN$}72amɩ@ԊC``B} U-tầ*DWh"IߌlO.*0n,ᵣŖ5~ƜA!3+0%JKC;aȔ3v/OI'*G9%(N-/VW$ԇ%}| ޜ{(]Zs(+RQF^Ztt!0O $Z+ +bb%N0cqBDs&'Yċ '帑*'Hqw YiEN|[UljNH˱.'t'‰z(Ǔ8%RXRw p_ՑNo8 NÉ='U$D&vNp;mgN' 8e$*uuމh8NQ ? D~BmJ't*<6'Q?$~sI9NO2ePzj8A48ԣ'86ALm}ڇƓW ;4 xŔ')8Ax=xVpq .8ć0h4F7/zg-&w;/^?s:W!EA(ӽF13tKren],嵭͜Zo@dQDҙ-х%HV#`tu \/x1`tLsY&#.ZMn/AE"})lBUY"BI{B%EiYTu`-wEV!QU#dI"/G'UiPBX8n[?o&<#t6p]>@ jH!+hgB"Mus-"ӥ$00=!H0'&vفN޹95 (P,T'L)@6pJx^F|_?C5@J8,/Uߗ@\#La[MDEP,n8bi YUUOK=Jm60lRM;|˝!hh`4eA|~i83fn!Rr:\# \mT"j24XP *Ti5J/H:xnpܝ5*"8RI˴<IO^& Cc)#q14TgilꝊpJbit)8Q@H+7'̀6^>|e:NH5 ]H*Ns+'8ORpOpxHtg_ˏ5U}6!g;.p䑕~ӰwutylMlHJwȣ5ڥ.h^@Ɓ9QvgWg)+(uNcA7G. odFjNZ'Av+U-xo0cصfSU#c% Ҷ:xZ"J-lh}W+49Ց}]@E> ~~loC\3![HTvNFO(ROID !b4JDF6Xr , - nJ$JXZ,Yx~:gZIb`y*per` pI"1 ,?B _Nr0'A H s2Ҝ"ŢE0ZUQADQ{ dۖ^*7˱ӻq_W5KU^uDL=t+RCt e54sva0ףjq@^/hM'd p^8Ab2GINBvN ㄼ!@WY!'u8\aXFU8A(/Q*N6Ѽfp NDq^܀ plL;a9R2NJTqbwI'w*eh'8AMv=?qpsw*? o:?t] Xc2e˛e)0h}#۞vZ/{99M7ܲdAnrٞv>~iVVWo>ч/;K}hN54 ݪlxh֘zMb 6pmey%#2m`9W)i/Yh_cf϶[ ^:~f+:n;$鯯@4WW{+,˼ Sc.'ۭ8bm6 [nL&xzmO*סf-׏v}pQHXgtĻoS <%"vnEU"wOYAr(=l'By7Z`DA doh"+H c kF1hJ3ڤؠjˉ2vT3 ԭQ/EU|辉8V\жj Ŀo}ĩyql$ㄞ;i9'ޘ1t.NCфQ'pn2NH:'|sSp2N->qBw4ZQ6Uiy;1z]F%NR΍ jzK:drh*NIrrY??md̯W hpFr$c2ej?k7[[,9?蛯ܷkznuvvD+"ܺ?xo}uF߬|I'?l=2@2;tU͞`0ŠUc WGQS]"b\"EtLBBIG+LBM`T g1ZSrߖc&61A 68v®$RD`׾{5aMUcsf?@:K*r ʶi*7 m"(€UH뉂JUCHsb%UwdC]2oU#`nJ@HsT43 OƉ 81 cI8QxFRpBW 4'&RZʼnȉ8񈯷u8)IƉ~ NE`@U62X> }]<=/&tPUfNotn9"e.y=5]+pA?ט=)S4D _"zOzhExsB D+ÅS?..TcU-T1Bm>$N7WEORn6Cawt3g4S7r%nxknSxL+VsJ׍FחcG/=Þ>l[~Fg)uA0q[tRA?؄4,"o;4F; ]wut(; H bmLhXGG B4B.˖D2{p0텤RchGPǥ"AIS$H6A(@+V!!yfGrw,Z}]kt -!ݧΒ&N^,Ubh#|GARLK:Hã*Xa `1R_X=5FkDnکXݍ:O)B>7o V60=Cؗ) IzpZCbߜ+mE3^#XCeB" -BP5.R~-p܆VO %^hH`:v[*OK ю9 6Q+-|4FVbpZc$8;DJIgy⍆Z'2z(hiИ9#w2N L. '2xI|ƓH-INLBpI Nx2Ojqb0Ǔ$in< H5'/$ᤈxR*N'F4Dq2IN:pb[w8R,DpU N^w8+Yw81' Iat~Bq"~EON;Pl"~"lD2~Bp'''>cF90e)2R?7-ݑ*v:D'NѣݯEʡljV~[L ƅ 鑊:X%LhJMK.1.") 6[jQs uC-~^qWNܱWzT9;ռx[w筬D稐AQJwcr? |J%D&M$vnN^<tH1[ ,&E2hehR.RUYE!OF:0^KMw7%娹 VDa]Aug7z)fdC#Q2]ljBU]%<&"UIZbI%(iE;b~Wkfbt4TAth7>H-WEN+u1UR?2k! QqT,Qdc@Zeu*QpUa_)BM~yD4}$&uZ2ԒQsTrA2 PFK T!M75NX60--giQR~@*Bf2VRQqBIZe%@>խ ,/"ENV"*;+C1dR" {%adJϤq.` yDw8H }LJÉzvUkȤDJJ뛌$iB4Nt1И'@tPJvȟ NlNIx͘$'Rݏ')8Q')81oxo+Ǔ qBIN0OpgH HxH@;1}NԋʼI1 Xމ_Nuy'jN'Rk,y'H'DDXL'''&>Џ{'~bq y,Xc2e^U~t՝m4gF+8\?W\э JFr4 <sSNz\]M(1 t047꼜Y@bYZ$cUf!:]=!6|}ٱkצ|]#V9(Z)!3(ZNZy !U$Cy(FImSTi n;QGӬY:;p4%>jJKI3J14X%8hBknqڼ2#8tg\if^/W34u(o_|~==8?k4R# 昚Z6iaF}@: G:c1.-2sS\ "BhBO/Q?'BtG2O@_`>HjW1(Q"JMQpۜ#u3scyh,0K2!ty)4\N;33fQ* $ Bt Ъ [ inɶhw^rsGFE%$Z,n$@4* ~ \ZX^p)RbDlAJC5'S8$DYS8A  U8AD*q%8)i p"# ]#ljDRLM >"4* MxIpqI=NJ 'xȃy`#+i  cqޢ^NPq7pމm_XމJ.'kqRf8w" 8-N˔$~Bp"=_O .'fD~}O Xc2ėeCM:o:_}yuZ  Ka4ue5c,---O}m|MĎg7~znzn~(kg_ۜdם:14p}^inGa'x܌9x6rߞzSs Z%gSG\oO>x`n//-qöSS^?]//i%V"BWrۮn3|m#[Y-D_E0zsB"!#F5G)'UGx$m] #DHU4by/8^HCW $oBxP[4ERZ(Wzݪu/%1t9|y\?1e'sI{u+MԘaM&RɯHIQl1;CqBXrI$ HJ5Tްpŷ_]=􋯴[ٵ4]K\ 6oS/>~ϣNY޻}nbnvfۖov M Oy)|/wQWDzW~]?xU{"jX Gդ&qoL,aԂ2I>1.D&Κ%&t-{x.EWQB1Ip!cS.HƤ^rB\ab4T Zk%X%w,Sȏ&C =={mœ a>ILyQIprP5TTY7(N MD4O1'X'&d]&u`م%'I2sa,pLDKYO^ˣ Ww;k΄= 'o,Įl ,'"큘dk O^M gAy'dl܏@җ) kT HV'}dwvلV~/ȶAw{+l1&^z>0;6gSh=}?˅Eڿ/w`3='o޶gѻ}0`ro>;i/ ;6ϭFC fGy{׳fvKucQ~k<{55+`̳LݒCn|/7?"|{w՟jcNOO~C*`~*ۺ0[|sGִa% Kg ucc陹tGvX%> L d_q+HY;VQoB 6Tѿ춲1B"cƖ;TK@1_WЊUWbm0rAxba k:8 sV-cQn3:mA ylhj̶FqGAˮ N53/Z sl446 r15A ,&Q;K@ mL c-G*_۹*HHB.bug*N5j{ OĉZ_r|=N:L#'+t&N`[H5Nڣd ' 6&t1qQǓ\')8骘Ǔhl$' ϥx7x񹳭r6N7>֦//󞿬ZCX_?7\]J)zD$b8frE{;}? wny"D`tcun޲o{q8̲@_ G~OͿW_W~Yz;ȫk85_ k[w]??@UCW4=g,8yG^O|~#eo6E9blJ]?@W.'R !ž+(NWpʓ=B>ucAN '(5LntZnNse}0f}VWe~6Mή?33˽ DzmY85>w#?g;sWM!tn}ۧzRRF0 g̐I}T٪v_o<׷*̶}#|?\<WIИ &5BV7h:1vH-\'5֭Æ$g(7$s N^|!Kzblo22?Tcވx(>Wp=\p3t>bs Z\O'c2eR= 1=/{n*ԽP+hyQ@U{#}㽹M[x I _/CY(<¡/|م{7ʠw^.ĸ"ǟ'43=Օ59 cض0;@ZH э2T0p/v<>~ogDnZZ#imv8^CK'Y5mhȯ*7 [M$GΘM]׋*xT/FX=7|uyOz_g%J8c{QMJN0s#F$07,1Eٜ53OkYHȓ8y ]vɆseNAuڜᤦ=Y%N zS'Icf̩8ūaRĆ7`zP[҂xIs$lVXw*N%7I59'%aH89'ʭ ;FNt~H[Z0ey`S0Ճ#W?Y~X<}'\w-nۺ2}oD8ӍƸ㧎/ 7mFAt;_=W.`,XŬRD7o~/MfY+9әRvBc w,9ݐKVpC5DEU:3Srݞi8rTHYT;J0 Ֆ/̴'z]и聣gF[;.l}3䲁<9@n"A/'ˀ.!A4B+9O|xlQu#5HaWLGb.XF:n 5#js/2G?u"QMr&'|୕oz'0Y{ġS)CMA .w"twb؄+gBx|O6x/&qt\w E˜QR2@_#|bkg yИp7@8Ax*YlVnܽ}/{ݯ]/5gtZSl6aG6c'L\[t;E 8RU^S[ B v.wȬ8:XZ?d滟>3sȳdqԫwbNGe=dޱ-ea8l53hdOmi5~čv_M?P/]_;lIq,  #94U$0Yԅ9Fرau!/BxʱNFjdE OxbzT<0I\@KB%PL&iH'+JBP='U&쒿g}!1""zi*RFihNk*_ pZN0,J‰+;:Ҥ^5<>1-N&W(V/p*dN*w`bNyI'/jpb^XWN 9;y_VN\\Mf1~n NR!0U6gJX_B⋶NB<6'~^'/0'|ˆAl$'|K Xc2ejJ.S) w|/UcPU -{D GЂ3Ȳ4z )Ǻ G@PoBw,$ ۣEUm <\9- u0GPb2h$WQaԔGWUs-UBQN] ڂwd:NöCRqBD8"8^Yu8UXe#:'I;Dp"-/q :c8)+'4xr.')8Vn1iCKy߉'I8tGGZkE'2 K U*NJ p(gG2bl[NmN '*BRW'=ڄN ' NdXPV}1DxlNJm'I`̩8~⿟t~"B<'0ew~>;ˍ?!R~0 75W޽֭،3eN`N\/,CVHZBR5VӝK:Z]lfۿo?_'>x+>˟ޑyc٭sʈD۾e8饬\{~a5|g57Si3xK_Y+lyyBN7OE4l~K/˷-[#ƕ9MWOkڻ0lZFr3`#ޞ ŹN,F\ U_(XA./ Op|L]-djҫw9*}k QGSa}Q*+)G:e]V΁2FQzCP,m~>0+wIݱUt[ӵGs[ EU[8r_gaq`2Q76R$p,%av̷n1paiD8vJfTX|L΋Щi wu7 7D}Hq@Lc3ٰ@U-_{rgl4lI.j+kAl qⶏtzĒ"'C'8u {PmcH GгpB4XEORpR!$'%V$㤼{D:Nז 'V8qF TûG$<ɕI=NPq AEމDR}4q\N42pB0;1 +pFeމHƉ}P8N|1\O~wG+}^,*.azz$pP7X]fEԢ34P6ّK~j]svekw({tyټyT4??cg?yW_<ܷHً{p5 8.-X⢝ŵ;#~oǮdۮG vs3^( cb@.)n?a*rwI™*$+?/d*)G&wϭT¸l~ lB;+`~XAP-)'n֍ "\ !H_^j{ISo"M]|n?k]rOȂQ .O@Cb ՄCςH5lOH1;@bRj:P2p "?g V@y N@,J_"b޼))$5b up b@)S'L х2A Z'*ʷ+ݗŠC>$_DI0k,R'-R8!Iɸ#p]60& eiV%N)X$TlqB(I޵8VЙ"IN+4$ 't8DLIa;'vwRz8Η)V!. ' ^œH|"peEމļN$ny'.q<DÉUy';xމDjO(Nx8I ʼn$S ʼnR_&'8WO{~Bq좔O2eT>k9j4Nԩl%{յj6gbn[7~x @C.>U4̪ܽc:gN|ŭdR Pd^5gc;~W_:2yd71^T7b˱-C/-gy5F0zt?7MMe r춢ϯLGZ;ɅҏzY d} /լbwIvyz>u.v|WZUO9VW0 hPMYHIP2`PdWRzFA>Vkri" iPE;_ZZ^4~4մ#/W  FI!Tpɫ00}{%`hA]`FN6!҃ j^{AȲp4eNPl7d#F&WZ = Q"#DGYB mڵ&I%"cA4!Q܂BδHEG;Ť/hA" ͋ nHkP-mCjC֡/3kDWA A0oRPʙhf&|ʓ)f/v=̙y=y {\zx @qs<`]m?W~@`_c]S'~eF-#AeHbU z SٙN0fbHk`}|Çx_V .?pኁ/"Ea7&ÀQ Ӽ/w9#?81Q;+ӎ]v[~|R@._Y蕗xv3l7;Ї-;]wuTVn5YZ5zzǦjѝX<w?5>r /9XI=MȞ{x{ZsO~ЅU?}x@{+48(/ y N zCWWW>eޔH~}V?}o>[xf/zLܨԓ:xvЊ~FDjrV1(+mv5D:DŽnFUR,!D=LۮHd\t3J[H(i($Qn9mԒ0)=6wbe:5EѰ3T\ÖU"[/RZr&+pP_7 <3FM&8>z?gVWo17t內Dyɍ,_&h4qQKK#G?G6{/mZʧ (}*}߼qաCCs;zfՆ`3WnƕLud/}m?kA<7{Ͻ҉ 3Vse}ݟ~ϥݴm}O<ϛ3ȥC[&YS=u) ~eW]kk;kFoWyfG=noWo웃_8%=(+ә:P\L}Gif=sU/[RvȨu@"sj}8\V͵㏞QP`G 1ZKNמNU^ /<^ /.߷~MO.x`SCd9Yyj ]aJ#hy'26pibUVF) |~t_-sguT_kogԬwoIs# \ʀFU9r#.J<==; h/}O=:~~jz_}~o_櫖ʥc~}߅+?}>rS;urs7Qt[.<V_wg XBTPa$hgW~M;?psBeBT3UV P,;]p̲/ۯV:D P"t9Q(!Jl<¸HMK@2v?&8 '˰ q\.u }2Z˰d; 5$c2FJA6#A@𹌔+5h h-c"*UQD/ԝ률A(ԚgKDF' ~\z$i@VED DzD fEUr*t,b]]ӯrǜvMWk<}*cD}r7QcOt#b_*ws vTJ|w9yGzsۚWV{6>9 QtvuoS\zڑ7/ Ƅ|GGڹo?%C=]ti۞nͳ.3Z Ml=2>:1ͽ"h/u̚sS}7gމ/3k+X|tbj R%G+߾ғ_|겅s;+QX?06=w<wA{b2??AS)>Z֝b2zJ!*еBѪ{"dT&3yt$ NSBM~.Ͼ(GAXu EdF`Q"Qq[/Q\*:^)-+㬺8Eg+9Kf)Ӑ\)Ծ)Up!@J!zT[` ĂNIE锨 >B$dM!rpiԗ ,A-PN T Eq!1!1Q{{1":pǕԸ!>;!6 iUUI_FI Ђj6'," TTzh}H[C("9m&P~ D#f9WQD$l#k U#1"$Tt8cD!'"zLxUKeÕVn 2tA^H6cj /ғ0!qR#U\hT,g9L+h,LhFmh>B"cꭴ&L9IP:-]Pp$v 8{[ܨOgqEy4V,$H( Hv b\GR~IU*oLԕ2E>WNI*eQ+\zv=#͙Dr! "B@佀RXFtEhCIUF!|?pbAA쨶D(@#*=fTNZ\` ۟?}[.u׭-ܴG i3@ǎ*ERc[FA`@H2h->=qbP=hlzW4 #fH8/h{_7x-uBgg0F3h5vut5s+yE$@?zz{GՅǔ֤::'+xzV5y$u^Ơz\>ܠcΥ X.gL Ag7ݟ Gs4F #B">R$-TGkEX87QМD&W5JST AS҅t_~ԛ#qmXEC M0 ')OLyŖf̀<kԇ@&b3BF z02/e:c* #R+´Su҃M⨂\!Qc*~W2,eA\vrR%$ J2R 'V!#y_|nCy \wFkmi:brqQDUw^nR5y5k~t%yHUrpfzlQLޓ6F^ H! (,1T`!r= 5N* PK(1LL`nb[YD='1d,k !fhf΢T8v6RN`O,pb(l$I{e`2DlN$ NMp' R"XDN6]2Dφ켓s>5d$NNN&NU;8!{8y''YYy' 'B:dD:2dD=?8ΎP0e3GVF{~Bni'@vl #K~x㱎:x㱎:x㱎:x㱎:x㱎:x㱎:x㱎:xǪbN]zw!699>U='պZXBtUD?$m,\?p$ό<xpw|kw^A8q|(xnZT^E E1@ؙL,]o pL&aKҏ$v5 3 /G3rP|>׬q512Pp?hcUcuЪ0iB>I`T. A,'MS2<ޕ]iqh7B>gչє/~QO'y4CUL.?Hq.:oYL8`jة AɅ$a@ʐb=ؖY{`Le m>k-u%B]?o#y|bRA'1f@<T|Rᢞ%Q+Q#(ek ̍0j(l"LTGУNMVzY71uR reo圐zgư)ĉ@.5Sb $mFƱEeK\¢RiyL-tLw01AȐ˙Ao5/%ƇI9тLBR̅dА~g0fl.E7}D %H0߇aTMۨpHH;T"W#iڭʄ@478mV$$"뜸fD i. Ju'FqrMV8Q!%J X')=N$H#ʼn;-'\#fNcJ< MX3ljP' N҈'68.I-NNDnwp/2NN4W;Y8!켓NNBntDmwpl/;dDaÒPӖPАcO(NH^'8m8h=?S9 ]-+~BJe[~ Xcuv{v~-W= ܃:>uq˟ GQSCjïEJjxr;Dlf10hwXI\ cK9"9; zV%JXv1ğޑj't_Ҥ )// ] fJ~'He1 `,b3;讏(5(. WFL:`B m\=&<O})u\OgCa@ feru(~G#c'@yGl%d5]xR8.u> , aS.H=-Db`0lvR*j@iLF@j|ɕ6P@ghʔ[S0O{a7p1.@^`D0(!ӄ#H0e`4{R"TW`!ta}W2/ır7LhVdem[D;h:lR pvq"&'R+HWDL4-pBDQD:=NܐZDx< W <3$rL+/D< '{ ,eq'dxbe'68! 4Dx'Op9[, 73-d rBf‰Rmwp/pFIow2q7;8ZYy'' %g{~b?1w[gO(NBg~o1|a?ZQ_ c ޻͕f8o 8?4@A%b#Ë)GlufQ+4$(q| d䲙ry̓=ُ@Ce5ߺ"=흃!N~{ӾWiu@Rf__sl9c7˩k-N >1x,3Т*Z"^JASnw搟`3t c*1uj"(L>,>J¨L#UCdk *3*CbrBEi!7mrY*Lv%2Ժ!mFOS7+ - p6N x21iմlr3R LGG"]@1!y,MA쪌.^ UfYwJ*Y(UbDLhAZL .En*&KlARRǍm#L4iO!'mq\qq81ljq4‰zn2ʼnVha26 h-EpB'0x1F8~l 'Sy2 Nd>$'\'68ANUthXI.-dch /kܝwpBĨ-v:NLNwpBg~VIĚԼZ,^:dE[~BpBr?G{~Bqdވ MzR{~bw0َkq*X{~Bq[':x㱎:x㱎:x㱎:x㱎:x㱎:x㱎:x㱎Ǿx,=T>QU|l%HSLHu>bx?{}\=88>@M| $*YzӴb0a;\|') B`#5:v @'#T*ܱ,lKM0SCZ78Vb͉g7rބ_ܕc~X8>[p1*="!7t:ìEH΢Oapd'1/Ȳm0ȓ3*%^55|N&#i|{fłW K2_U j7oO^s5HC2k#-n*THbr5Qת˜ =/o\;Y!"94յ<4kopm#1زŝ:Jj#XFC\SUtsk!ͮ!uO+j.$S}OǔU63!{y`VsrP=(z|p/:XMU ȵIԱ1B6Ć>qm|d&mYW㤬M sU_/ f}-U ņ|22Cacs?mHZ8!1 S1DPjnY7'#>f0zmqb3K|NH5؂ N*1' N؞ 2#>'W)NHO68ڜ'68IgIڵ8mxYy' 'N08QEIF‰NNqy' '~IG:I{'yВ$UI# I3fI W6⤒px㱎:x㱎:x㱎:x㱎:x㱎:x㱎:x㱎:xBFJA )}|a쟝SW~Qg> 'd 4*۫R]ǁ-M 5oGQiALIĝ" **K 3,O`vPe/ZOŅF8 z.M@z: cSS[߲4:Q@JJ*Ok5K=ھl* tmS7:f9ڌK!Z @sY1~ռ6x ŵ|_J/oLƲCRZi#)skI1wHM#hՁ7}-6qTAG-@6 -}25k82e7 *1U*$ _q2Wʊ|ڄB/ f4\l[N~fV$&qҼXmpb ϝ"K)(-d { VNL$OǨp]'68 w*å_Yk~lbeloӄ}-~)8<'Olpbru̡'b.;Y8iUy-Ss2NV+̣?j[$iy' $?[D K~b4نdmc[,q2yfm5Y(>[cuy&LdD&mbԃAjpcmIREH ԠC.K@/HOk3c<'\X681B.'W'!uGjf{<'d4׵ WVF< 2&ITD>xb([}dhĉv3 N'Y'2> NNX2dĴ3N;Y8 owp"[,ZZ$nwp"d˼I[cdOb ?19?1pb?qeT;~Bq'h.Dj۞8x㱎:x㱎:x㱎:x㱎:x㱎:x㱎:x㱎::7aWY$ HB b}ReH}i>?_ToVg}`o~#:0(IjͧYa"̚c8 Bzs#,S_hr8Z>sID8ZTeٲ[u#e^>r^Fbgjz*U.Wh~!MOOŠ-ˋ|6&v9mYT,ٳ7yZ˥ԝNZ#L.{^V !FȌɈOࡔMF&V DX(ٞ'Fj^*0iHA'-t`J&h4SHDVL֒tT*|4JYlI˹DǘE%$lfrBxX`rt[t5`5sA"Kt@hH&13O QnֵZz.t ?S}5Ԍ~Q\ W|Esitġyw3ٳ+/GQRPP:Od]39Or 9PΘdFb\ǗdDq'SdmۅR rFjC,ÐS!r?[/y1S"(Ap8b+JP0HA&͒שa1zv"7h[LE `'' %N$O-p梈£-NE&zuiru5NT2cqӻv8Q & h'M$eh.0Olp7qxbN& 'V8I^{y'V8sJ[ DH"dĀsF dVĉN&NDowp0*db}wpRq"dDE‰P'F4''m0%PZD}k~bnJ#K~Bp@ieO(NP?qQOcTKϖNj]r*$`;G&S>cY=;G|N(1@MXC~n[& 'p3덉WgwLP`c &/9n޾ѩMã̦k?'6ֽ \UHхaxz,;66W<џYz+:sF=ӗ޺?WfQmSX<|~O7Vuzʲ9}]{YT,WYI<5Z=BIgRDcl*p잧^m;Y߬=F^7Jk.x}Bɱ`Bīhҙ GM!,S\=^ܥEPE0kyH-C$A*rJ0"FSix/`JBEGClZQ%2 -2JLG1.3vimԀ!݄2E_ MDXJ^'\L2HCk"NU0FU.EU)jI- 5 '|u5N m&8sQ ihpjN0 5[{ȜB8UZ$ )ev8'V84$c`}‡9Apn$N"n'V8ixb-O6NAn pmv'N'dћw2q"{E‰-NN0~< ̼# f,蹟wps9hOL\FXP ΄8A1-I|gON.5?81D ʼn#[~x㱎:x㱎:x㱎:x㱎:x㱎:x㱎:x㱎:xǒn&:&~~T?I|LeړrC%7 ZՑ7@G.[pI!&x3zE1zGCEa8ZTH#aAF,fs֘.V gK7z >o}X}^O>b}OXsy>, oS:ZYUEzdqb|rqw\?͙}WM &eda낱+\c_̕{=? B+F’}Qlz^s^;=oWkf4m&FSV,}R!˻oz|Oibb#g/o}`|C1>~ͫJ:'6dDLU3.r*xDJNucHdv#'9>ҟ0rT-*aHɃ Qٛ( XچH~Y RHu ^ #X1& Hj _ӄ"ziiRV+BF%'bF,!2ᎎ # )RBAI2bZH%@! G*-:/mڇzTD W};c>Q^1O0!RNL3"U-IIzg:s3@$KV #:+T BfRb 해Zv8A#^sF8!]V8ADX8Qc-ڴ ِ9lqvS'$ * W;p*|'r&N3OޅmMAi<$:w&-Ixb)œ8~XxbCw2plZ,Mɖy'',3dGjwZgt>K%3dᄬ[tDse  N­ {~Bq"Ob'd"I 'z,ƉiK~Bq". ?8yX?qkԧ+ohV~XZg:[ƁcU̕^ FZ~+b{prsfn*¬|>WU(m}QoWv] ɩ?upQwāqtt6CsDJ΃ /ֲy^vÖݥΞ?>]1]ouv(_Tg/+~,pvɑ tvNNUxmvw % :;WGu7PhbrtKi\N5u[v劥\"4CM7+B.NNLlnujإs;T ֘W'OMMN-靕h \>/V6C}} 0<L_x>qF'/[4rX+|3^ZX(:E+\VM}wtwuvmD$PRϙ Qp9 K!T2C+ ^Ldh* QJyY&&N\3 ĤKj+AX9RVI09"@j/`qhTI!kT* Cl&цf1q\f:N(DED~SRHAUoD j(H{^[Wi)[rIMD KdFLvL]"SLr ,0TTsGo$N\ 6;z;7[)1&D)YY%_[E N6$6 ٴlj\a0fX"8tm'j mPK^ p9r)?)ĉ Xazi]or=u yr>UDkF #Be?@^HFHsQ{D _ME!ޣ~;zsѯ_+{ >q/n\odEw˦ϞW?qq.?kWo\SG uqGt# uAVc; s ZU5zGﭏTſ|EF&-Ov˟36o^s/_޾cvo:^}iǍ/8no9e]-{KzG-?:hOlqի]M >.uo>Cx~mƿ{ϹC/;dn_gw\yơ脍- ~Ç|o&r桯_ ל̯VpBoνUK SϛVmu}v_Wi7vzuzz!sUk^}K:=#U~TO?fIg3Fn{d];WtC-<0Q+[pڍ{IZ[44/ηuU矵xh黮8+MMO/xm灯jN:}?@j|׫YY3}%S83xX2nz /;ˏ?|#g`͋/|}ju^5@os?z|!nݱ˫Uj4=+תs~{o=\uzc]K߽c][ۼ}9+~7lc/ wh OX2X?k^;y7>sG,w>kłϼ;Voaopc>7O]<y=s%'r>v^v⹽OnVnUKf>>~}}ݼuo>uÆ?]J_rm;>v)d]~h+\`s˪?O}'ふ'kOqВ[v5?_㝻X}ǟPO7='o?+xpv_}c#z9{|v7:{Ŝsf81U}!}NWʥ` ?w r/ꏯ:;7>לÛ;<rE#OВ矸t ?Y:7;}~?k.s9. DV]6vӁ)4%ss K8z-G[-ݳW_i-l޹?Nz1wNDu`bV}Gt>eQveʵ=j_2# H]@vH !1'#IԃqT0 TW:.'kw4 -V B4'q9d3Es$)vоm1 y_bGM j7RJAԔ Yz"ؠCD BY-2ZB $ @\,dBzc,#H!1LB ͦ&bDkvp\Ë)OXsb8! '&`u pw4ĉ9*[MXhk;$5\Y$e8Qq2- \'X<ʼnZxbbG2$MA(.Tys^^G_;.Xx~6lybށy~vY^)4G^t~ư–}+Ww^Л>_rYϑ|`mzgzwg ay\nۮ=epΛչg߯Şzms/xBMNW _dm{/_4019-m_۾{T`=hu:q9G0hؖ὏aA=|>Wrؠ^SåԨߜ=i`lݵRxm}d};ywC׿y[tpOz`Wb/|~!ssP./ق} {[hpPx`^nO_s܁B!Wm\X~U79\h~YsǦ&|z1̊#cݕ{6m_a0|It`t|g_t/l5Gp5<N^>ϟvabsz hN߼FY8l`WgᄂVΞsٍzm͆ū_֝BQ\Nyw>˻;.M64{)*MIcc]zf3kŢ5wOUw?: ^)(vxE[Wzy/y`+Ȋo]tb!iރ/賯-;K6_}9YMO቗溋{}dz_$cftHp'eD)@cP5msƕls}[]L|ULV{n!_ZHJs: .IFΣVl-`)R{1[izc5JiŒc<3v f IU]lX^ 0isk~\.0cH&Mʿg>2/S˅X^(dhˡZGGK=GRp4{;̠P7"h`ws{;_۾k [:;-Nb;mĆ^wڽg</a D \y-?꾠c5;Xnٱ/sq@xڲ~erV1/^.ZZ/xaÖ=Wl`zX)J`~ܴt/޲_~Ccu]ppxh4S0~gf"`/ѧ]:F!+X֑Ǟ;7^u];F&=gvygy#6`K˛7ϕ̟:~%g Ŋ6MkkG/ܲ3YVA ǧ=X N}%g*jn._eǟ=]6~S`\tF&ѽMΎW.ܼ }Ϣ̐w?пV{swP0lX[w}G^w3ð+sEC7ug5OV6W~/&klK>wdxraa] /~JۿqCsͲL݃7t,j3ك#7\F6?qv+_c߰8^: WpK[67;?1|;'\~O-=ryUuڏ>wc6/G#3K ~OL-.Iɵu`hbu{_yp׋㧛Cͅo<7q⭛^A0_q;mu; /޻baj,.-[Mw>_O}WaY r졓^xk7^mmy LYfXdtbs#{>kR5]5k~KGՏ;ʶmctceJWaK{3\z "-jCu"F+̼1XW yCfѨŸ1X9> Ob|` T n! |G`@DOGrL;2'5o$xh5Pty*K3!,n)'0@d4K#,]r9'$9 6CPC jZfYh ƣA$ay? N MtA2GF9(8a K8!=^)q' z 'VȬ'8a/'2 yp^Nz'r Yu=Ya?KF{=W p—ش]-N`}م gVO4‘ `7169/phS OM- 6UK߹ow ̑+_;.ȴ O得FgN<5ȩR}Ї{/:N+'YV;Я]^=h/w뉃ohӭBãv:4179nuãoݱu}/|a;5߂rv^|O9fppǾ.7;; /_zƾZ<<˜Om.qLǰB w/8Wk}O5;i M?_`ۅ{v3l`נF(ѭ}#4Z;vL-v|_H04>"η{suWٹr+Faݻ>׼zv:4rT˺?o\޹翳}'~>koX?xrcǧ -8p|5[6N5/y͖.ymsvN/~?]Zmo~OZݽok+%G8xn:>`zS3K D0_,>y|EJE=m?{U+7et|?7#վwf͛/~i:ov^f43iL-.?sߍ_iK'=u?]}xq*BZvG֞% ç{ֳ:82E~O;tW\lcc]l3s).=ߜ"r_h4ݻel:;əCm0*c3Rťg>|8^КPBТsB6 ՐZ϶0a[SQT5UXX,& ŗUpoc,oPA,BϤ-%RN4)6%04n'(0D" Dl(U 9TS D(/$;'I #AA!QǦ_эB2<$)O_x5YV?y0Jуh2(BhIi2D+jHGEo#" (97nWu~17 ~u?xq[1%DJx0U[L8nabb!QXp烙NN+Q'f$"NT VTCT^zÉp ({a z`]}lS]8i|m.d?vhuzqdrC ヘ@*:֩iL26Q,#nlz~C;529_p\׭=TO߱ӋSO񺾒aL[/8vǮm;^;z4TpTæA?w8ߋbmmY7>s41X\befڟX_ɞkWE(T>Gs\gxvdm mJ'_o7f"K}P{ә m>X):[mR.w:/`ךJ5_Sۿ~Ǫ~gQ]l.M̷klAOL/Q.WM/YkJ06rJLԷs٥Z¯ǻ tl:Jx.{N.X ,C=||+Fk\2:1䁓ryr]n U[z>G,,*U`ǩ*>{rSJͻ"'OO!#`ܕLpTH`h>V% r7e$jFބ1 dS'bm?EVAGG8+J+Jۈ/^ډAě;@l$Vql.OHjcÊ fMaEMt0H8ybB ٴSf@D12Hi~8&@J>x9ȏ.s%$- Dsl+$ 8QB߭4z,NJK Kn8=f$zI]89Ƈ$,NxBIb8zIZ̉,;Y8 | OÉ.} NVzYs~IS̉K;8f+D$ H!9q8!??I*9 sQ聟ć?ײZKS3`rF0JanF?`p[6MX.3Ji@lʋn ./TrhZj3uYb-Ӫ7Y˾`6 έt1 ڇcrE` @az]pwz٠𮀅xݩ&냡()Ho2LXDS }ΣYYk.].R?n8&JсFó/aP*Wcz1,z__2E"f{mjێvﰂkxuư,*xלR X.,lG%xHazQéV\qs^rbxp .yewr3fV?^M=Z_1jxHw^pÔN3 o_oYv` jlk.zeG N ~ȑr9t>Xfv>+E4>؛C'Oku`XSPh FJŭƦMu\ #ԄQ+*WEZ8ec|l\Iz(/KX#(j)|@_%lJE9QR( ΍=k^LkZA% f@i$פDK"8;FPZ!k?A$?٠Ey/EJ}Kpa# o2ɨb+gsu28Ub"9F{ sɨ *N˘<8IpjW‰IED t`ʅT"k8@\֓<8 Fn9Nz'ԺDo5roRCx"=DAId=Ɂ!wp1d,DwptZ‰]NNRNNG;Y8UAwp"ۥdD\u#7N87OTn2?Qp/$?N0gO0NdhܚE-qV8%DIzQJ'eR.sT"7 L N6' - cλTJ*IIxۑJ}644aqL=T=%(8@@%Z_ee#:PH !pK++QS (B  M\@[v1pOX\8ʅ~q)yyq \(M1w @*Nl( N)'B(x9psa&Nr@$ii')fq*')u#7Nd֗2!z @b^ljܕ$ng$]GdL('N if'H3wp"fQeLs?R=Ms=/NjN^߼8Ie8I:mO(8IU.hy汚jy汚jy汚jy汚jy汚jy汚jy汚jcP ;!h" b(I,ME7Tmi@"Pqf .Z$EU #W|LЍTpA@"7&·[ʋ'lbado|o@v<lM=2@=Mc #GsrN1p'.!$T@Ev<2bwzA`#%dBbMV# Mb~Q@Xc 0$jCIm'Sv,Qn] RG B'` V؍ΐI[!H*vN+T6- mvTDN5%y2]qZa[|Cxc=z+B*CT=^=eTI͛xjCL4< hRe$*Q}BgU^xtb|ʅkk($#Q9CI)䋅w 501b&24Z1b9\ `&V7ʛ8B)̐ - !rݡяVBPBr/A (.U!P "*vxv$XUY4CC<$jtA/F&H( "yBI*3DIhE?"" 2lBE!ˇW|ډ"'Nf+r>`E^pe'JEX'dDd` 9\8'pAv'+$VHO8Q !+$NN H ҦdeNXz'u;Y89+4Ҕw{ĉwkgtȓ,` }NJD8.Oop =Dq=n䕟_aH''U2'?~U”#$*E ɤHi# 61'f z:LŽ# SK)QH/c'`i{]/j&HѬA W?$u1 q_I/I_M+R1PCLHrcuT$kzAMJ&L&>?Q xl"'!xA @i4ǨsƵ,ruO. KS(߁^l-saL$ɉ9у)J 7)v\!uNz,h\  Ti0)רԼEhF)DܣAcHLJ'4KM*GYkH#K PJtH$)7#| px").RHtP!(:fwT%sc`BFq3+V- N8a^N8qj7ͅ>8ᓘ"Ɣ'R&,qNBI{ `:)Q>p=nhDz wIԓqb$N:+JㄿI'ypDyQ,V‰'8eWIx=Ƀc$Nx,(wp”]:NNEw2q"Cխ}' 'bϙ.}''8d''lߴ2?8"O0NnD9 ~~qyNDDMV~q"`>~.?t 䓤==51?3a-=8 ,=8QAqid`)GU]qIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/refresh_lr.png000644 000765 000000 00000002006 12025152311 021533 0ustar00svpwheel000000 000000 PNG  IHDR w}YtEXtSoftwareAdobe ImageReadyqe<IDATxڤUYhSA3y4KZwK+kO]Z(. VqUqDkS[i4{wBK\2o{Ι3wf,ːixB^. 6Yjq캳&7wXߟ0IprQr|` /מ/ /JL9a%Hnj: l -5pBןi1K,LI4:}V8 ޽uB×6[Uar)cUQQL9-f:l"Ҫ^ɹ^2|g8"h٥GxN+KiQ)*C`D YR?w9؞֣"MGC[ko?\]~&$JcR9% +gk? qiشpVqhZ(t AV+.֧S 0[k׻i̝Gs[0^e)8N]ja"=+7H~d MW=R>h؄Q9n?vjTs.MSڱDBte'Zy{mq<#5ܺ=0C.`GT&M `/ƌ/3*t5y܅O]3h$[#J~xgw$UJUh<TOCh#\ش j㜟Ī7v\ _ͬ1xr-Wc=AfXYtvjx2ZQDxBl"#.&'CL\ky`{}-ٍU.CE K'hKq\LĐ#@8Jo5w6ToJ2t @< **LLg{rɥ-D0ʾXw>?E(JIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/sash-left.png000644 000765 000000 00000000236 12025152311 021271 0ustar00svpwheel000000 000000 PNG  IHDR ptEXtSoftwareAdobe ImageReadyqe<@IDATxb?:9sf=3`a&40k֬z 0Emj$G҈`D1EIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/sash-right.png000644 000765 000000 00000000233 12025152311 021451 0ustar00svpwheel000000 000000 PNG  IHDR ptEXtSoftwareAdobe ImageReadyqe<=IDATxb?60k,Učiii(rL AH#5aH&Fr45FR] IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/sash.png000644 000765 000000 00000000256 12025152311 020343 0ustar00svpwheel000000 000000 PNG  IHDR ptEXtSoftwareAdobe ImageReadyqe<PIDATxڄ Da]n 5>R:PyZͬPϭ"K8r d=d)vCDIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/solid-16x1-fff.png000644 000765 000000 00000000221 12025152311 021743 0ustar00svpwheel000000 000000 PNG  IHDRoftEXtSoftwareAdobe ImageReadyqe<PLTE3338TtRNS0JIDATxb`D ]@c!?7IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/solid-16x2-666.png000644 000765 000000 00000000176 12025152311 021535 0ustar00svpwheel000000 000000 PNG  IHDRf3tEXtSoftwareAdobe ImageReadyqe<PLTE\\\IDATxb`  ">IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/tab_hilite.png000644 000765 000000 00000000604 12237536425 021527 0ustar00svpwheel000000 000000 PNG  IHDRTHQPLTE333444555666777888t-IDATHǵ0DQN5; vWĀRbKN,t6{K _# ,Xrb=$C@iC(n4GX]!k(:A'.*l"4:(jűz:""lmн"#CŷZulVĈ>(l0XΡ=Y2X^`K@_F,ZK+M~LU#V-7ahm]sfֆUYuVqߜ)}%X(6G0O%bSX]@+<;kAUۯ4'IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/tab_selected.png000644 000765 000000 00000001645 12237536425 022047 0ustar00svpwheel000000 000000 PNG  IHDRTH_"PLTE""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""pPMtRNS0f괓]$o{ l r9BҺ*!LzfUDM8<0YṊ ЭwoWg&@M)z>kGd.QhW&6K u.]h譖 ZY9}% Hr@{h&`u3;M Y _ӜW=.:9hxulz$/KDlH2dƢHݙ4_1=5# W_Q%NӼeuh2?4dNgv瞎G4JVLR(թWT|0H$=Ց&Q^S[d%Ϋȫ0oG( @ArFB2~fPkt޹7:Y'YjeU$l)k՘c[km]OG,A |LW* ~{"ᒽaIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/theme-info.txt000644 000765 000000 00000000200 12025152311 021460 0ustar00svpwheel000000 000000 Default theme This theme uses some icons from Gnome 2.18 icon theme (http://art.gnome.org/themes/icon/1352) licensed under GPL.dispcalGUI-1.7.1.6/dispcalGUI/theme/x-2px-12x12-999.png000644 000765 000000 00000000304 12025152311 021460 0ustar00svpwheel000000 000000 PNG  IHDR atEXtSoftwareAdobe ImageReadyqe<PLTEwwwQQQ```3336BtRNSS:IDATxl10&eLPM`go`< fR?3/X06NIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/10x10/000755 000765 000000 00000000000 12266723171 020577 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/000755 000765 000000 00000000000 12266723171 020613 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/22x22/000755 000765 000000 00000000000 12266723171 020605 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/24x24/000755 000765 000000 00000000000 12266723171 020611 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/256x256/000755 000765 000000 00000000000 12266723171 020767 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/000755 000765 000000 00000000000 12266723171 020607 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/48x48/000755 000765 000000 00000000000 12266723171 020625 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/72x72/000755 000765 000000 00000000000 12266723171 020617 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/dispcalGUI-uninstall.ico000644 000765 000000 00000554456 12025152311 024521 0ustar00svpwheel000000 000000   ` (na`` iHH T>@@ (BR00 %   > hPNG  IHDR\rf IDATxY\u6ګ  HMYKr./a[?y#2o0aLdThqxŰ%JA@э^<u̼{s9y2osNx:VLsvvL[F﷿-._28>O9O&0Wǧ>Z^{  *QD^K:sn>Ѝ)]xrGֳヒBP [o>۷O)2>|8ߞ;wx ^G(ƟytzzuRZ 郴K\6~qm.~?66~?Fյ ?::r9.'Ν{!XxΠ8Ϩ0%l2 gҬ_saWxSa4 yliK{P.CJp%gjd2~'~!]wbmmM*uܹ ? ^}տ}}?Mgsu=t Eu:zc{]ס8li6:xZgn\;qPpueHM`z-פ Hi{m&'';rvY#ǧt?x AXHΝ;} V W_m}G7]Biԧ3Vҫ8Zf V(ah-x&Wsjz&zz0mk uw ,\?~rd||ܟ sεxW{<5"ge/ʥ6L3"GJ&7Mmhp'*lddcccx'+x4V4d-R>w\)(^}4? 礴DK f6x Çchhj:!HZ~_ETʩ|l9%M+yreO5 &j?g$D(_]p3i,ٳgH$H B<@.+.H$D4U?pTl3`uG˧|\0p\mJT\Y=#Lm,# B.='l\^ߐ'N@ooM(nY]]/HRz4`w> ]]-- /&>”mcOӹ<.Mq}a]vNxh܃\&YzcqwI4%wf-h04</^㯣OxjڊL1@;ͼ K:Hf+w0/#4ZmNDW>&''K$x'K/y̌u \IH. GQϕ<~߄^|}ŜưB}?Haj$H(HYiwjEގH$3g <4׵NBccc'JHO}4y9:& nIpfDn5EiA>|)Զccc<Ϋ 硥lW@!Rpq.@zRqp<~G7W8ˤ<mmm(#=S=q :K>ӵ+LƯLz᜴6 ,=^N+R ܵcIKYA(K,>dyW) . AgsWza+\4CA2z H.]ݳg8PZ#Z X, u($0 LM%2Mj &[l=^\q=_SR!y1==.}z{{4~i b<m_!ivs!]Ӹ&߅ 6|XsxCoF000`tRF`L\^RMy9̄ PlN2[.up;lLmL-y*8"N:T*UMNN6:"]ZT ---l ~:pMrQ{uph4X,V)H$طRTX]]r\'X%'n4=w:$p]l._^=z(Kj.h4] umYYdR,u`uPjcJR&Z&'N,C*BSS&xW1s477WX^^rIU=d|$x4?+ցβ###"a144  1??_uG"Qb7;JϞ^|hLzaI 1 V̔G"455!NW F L8aqqt&$af^Zs8&ᢇs8D{zL&3gΰqZy5t' l۶?Ϥ5r@qCKK'#ATIlBrd٤eMhkk+ٷ+d3K-NJ_ǟz'̡f JįX<MMM 1@`c * I"@&A*uێALgJ/ՑQ뭾ceelkkkl^[03|GPիW5<?~bBy5558mmmblv@hN$ Uqj Z:M&+hjNyHRضm|\K%@x圐gBaJL|@QoعstkFftuu4иx}Z](niq^H---& II٩]}aWح.ɦiFR(ez`uE,C__<&''" _9Qzq Z;<É',&&&H$g־aT~ `ĜrF[q,A9l> `RmjKZ.o4EOO 4=8@Zj;pi>|a[|!ʤ :py4Z[[k#2 8*|Y+6{SR5Zl4 briִu !l2\~m.]Ñ#Gqf [2kM>)dKK jP (=x!ӞW|QIå%OmhS^N-LO*$T:T*۷czz ,o ,iIePSSS~zEEss3Μ9o0??ߐd2o@`&/nP ҇ALvn.m۶Ud(\v4)T G[0{ga≖gt` zh4{/Qa=%4d >y'$֡'҇>*7>8ikjj*y{WlSIrkzZb6RAmvQx111T =~dι\!yZ.9yW }Ae(L49)OM4 su);qL|٣^1<<\3CCCسgSZUFSUկd\_s(ʜ,jsy(Y{W86h>.\l͕Ki,LilGWM|7n#iWAIv9+NmR )սiP[ZZ*S`D4 mD`]+&GMd@spL&3\='''kK$8}ZtcU={gԐY_:ڻ/ԙ\m%n0յ+,.-6 z ]]]3] ._|y=ZZ66 bzrr}hi:S'^xk4/g]a.Ve҂D"@e]pw^رC,t7qtuudY.zpG~uYB0Hܿ)}-I9J y'z6twwѣbY@%jD=H$#(tLaZNL+`^k FB@&z~(:9{챊r$?Pn_L&5~'SPz/ .N4nkoLHB@Up4)Uyŗ|4sδn90qTl9ۀcpppko02bppwe\4ʕ+5,g.q^WV\|G2D{{{Ö\kkk zzz~xTۿݾV;v܉g:}v63? LtmZ \;v`׮]FM.X,V2p}C|x~BŧtD"/+ @ȩL4dÚIg[^ӌ<[+ѥ}(۱X֭[F{{;N8433S]~`ji덥%͕=s]Kp{``Ӵ^Al'ٳzSuH6MNCٍyj˜LIuWeΝ; ˁv%Rύ>dR&'+.R[J}۶mpfz &8A"3l|¤R lvJӏD"ǃMϘҾrJU3_Q_M簰Ū۝Z'- y|)mP.?+{dƒK aW_>G6-sOM-To/4X.vm J&g R9zJulxAba}}}w#U9*Nʝ.xFT2<+9Ct"G 2 .rjh4 HE{*4$zjUW[uY"M({@'D S0 ` 79/h^I"JkI.qmل gI]/ FTZIu}<sk%ҡx)/-㟛%hSCi/7&:Ѳ8Aј);<ٳ|z(rڠ'~#89 끥%dYɛIm<ϫ|(71k̶:Ô+jxptR%+sB .*gϞ=@6<_}Y{ݽ.wr/IZ Ee+~DOINM5u9D_TPLğy.ťជKgy~튷]ӃXMOOlo<gW//Sa}@;$=Lɮ:/G惠i^N ͕+ :󘤳η$ G/wffϟKhjjb7PdzY"l 2AҺը\6>l&|Rn{)p9zzPm_"S.رchܙ#B 6Q0ΆJO3 :eb}`Tl=cf1ڮ$aæ'֭[}ȟSl'/SH$bZ}TgzͅION}_;63 ΧD"reivCU[Й%0L)/]IJ`ee&sN-6(\&W:M5SA.O;lM@"6=[Q82 nm|MvE"}<5l~]wt"s#t|l['BM=MT\o*d~xr/zƒj3.vaxǏG45wff>hmmmD"Ǝ_k3336n q{=& &0z] hRm& L348̰zP>%^]g< 4H=ÁW ~=|ISÓ$z{{vp"+jW7) SeO˸ Sfz.Å^2w;v`Ʋl}> \d2 \.),,,*~ԗJ6.xFZQFP>o(OGG:T }Um<4Kz^qW_#}leU)$޹p8) ohL] 6:N _23lU}|}UVSP6Ϋtww׽O)u_:I4^hxVtxLpQ9\hԚfزQ–_ 7x#駟.yԹVZZZgŎ/)u_KLaaA{S^ O^l]RI8ϕoZx5uҲ^\h~օ?iHoƝ;we8p:qX𕕕vi8*l>];ԡ(FVB]ZŪY[zIrj MǭA@8Ht\T%gI ^ET>l;. '> (;O_[[[c9 G+OPS%\.ɒw>S!`ϕ|Aip,1k#N%Hip3(azfAD>li_0P'H<ۍ˂?TL͍ &m6'A) -aI*f&lT۠0Źaj7 }Higff9y237nJ(zzz _#r}&A]lm`⏣U(J(:>Oz[|<pF"tuum𯭭OI\<{fLϹrhWS?,dGl0'|_&KӘmND"N<^t)O$m&^cmV;H$ʾ?h{FbKxAy2nUXʼn@\"W{즁D&IQa&4ky$іEGo7ٳgm6<Ti;.g~Dy(":;4\RLL\桃)C~ULI QpeWrwڅcǎU<OW\wuulLLLT|U&Xm0MtɴV6.؈q\fOD4Xx 򛄚4kK3ěg\ww~wX:sssyfmU*rxaw$齉o)T>)Ɛ_mBc-kyWԈ窊 ]@qr=? b%??R=Ckk+H$J30hhiiqm&&&0??ou15L&Z\Y.|H1S2CNd߯ksN|_g?bڄH$={`߾}K~۷o"077fw~333IWM}8YʯO6G$8TPAɀjU>ntorrknn /Gx3/X `E:ÿU5H1?? $a|Fa|8aof tbQ>xI5;lKu4NÔ/i+WގNE"|d_cccN|řֳLׄ5<|l'dl)¨A(ׁC44NM&Kp|R2mċLm҂m۶>F:؏y\t ΂:JٳC8µR+ oʓvlTIˌ821Ai 8=kiK,2m ,5 S9Z(_n||ʖp11㧵WWW:+@LB=mG<9p1,/(>[Ƿ!hz[a 0Is0wIJߏnq^2δ7Qс+8mmmx']_<477D055Up5yޮu3 J/=G/V(|Ag ^(*p}#m oXZZ}0ʯ9M63?P&W\|$2iNT; p۠U&<*mgg'v=xo``Q/;mF?^j>Moip)Ν;gAq.U i+E4R%I[.M5LO$ؽ{7grR) ?-OCCCeʾWK||4H)@a``===~zN6uن~Pĕf#QR!]]?xpҌ{iFS88UŖO~``CCCp_ݺO(sϱBiuu+++U~58t&&&puVz-&ZA,mAx,8K\/g0.х?gCUFr/`߹$w)BigRHo'l.&:;;~&L}K_RYx k2 //묬ʕ+wU)رc>nݺU&>lwMk7LHׁ;vTAaroo˄8^uى|+l4nܸJ寥իʰfKP l :#59NrE"MYl{{{/|u&&&y@tL&'Ne80?GW_uP/Kϳ%D"CU qС~`eeEyك߯rxBSSwA2ĉ'0<<\b{'lvNHN;|Jɱ-7i=z&gܛǏg?ٲ_~h4ӧOW8 `nn###@(uD$Cpmܾ} gp)CuP_Yv*470IMx2kaoI`ƾ٧CruwwfY/l|'wwK'h [y}رh7n0k}p׵,_G<*LA$L\*hD3履/dR:::p/&IX wWqO2>9 \z5G2ݯFKg pe&))İ!ōeCMC9:E:=W$єB6ikkdߟٟa'4/VȹWշZ---4 IdKiE*KV}?@qJl$[xt.4liKhmmO=>OliiWՊ5 ؄͠ىm5Kzۄd ^R *IMqɣ3dJr\gkk+9RSUXr K###o+ގ}kea/{uuVsmtLPuwwcmm ׯ_k2%.&E=:]fCtQu:&!!b4)}lGrqњ98_:ƷL6H|_, S_qD\.O8Aǫ0Iuv1#M6. `eew/-OIee3]Ӵ_6 ||:j6Tysmq~%iyXfqyDGGH*=&WX.*ݻq$#AMv4PNJG 2sK%<|>Z2H ! J>.eAO_g>'N(͗6D"9sbg4ݻWo4&%).H?y8ë/iHҠ 2qx"W.hNvQ auu^:A6@PrbHRH&`+{'9߁Ju 'g)[rrqWB$;^(zpa[NmæU[G_҆J&IeK*WVVZ 7h*{\.;X̦eP ˕ߏj92 o~H$~}}}yXcǎ2!rrУX,#G9S%Yg;oEI Ҙ>`fNX:]/^lο5 &U+˕;w={GOɊ|tdJa<AV 6;ZZZsNܼywiLq#93 8Z&@ʠ C BIiqqFhii1FqСP _BIO~|_.sP(022b=SurڌLn n=6Yƅn7xX]]|a 6$H)N1m'm6cff@}z߾}uq{ }կ~///ʕ+Ɓ+A(xK' xhJ˥ nZ[[`qqˈD"%uTy$D05gx4VdkkkUW+P߶m@q;S0>599۷o$k=(RMZYOK&8y$FFFZ'sou\ٱ9Q,,,fzcooo]Pz.>ǔ}!؏j'`k IDAT#NΝ;^6G"l۶4}͛7/}l6#L&Cm\K&Fe_Kvqlr\ΊS~kp% K& Liu{:/~<˗Ń;\}c޽*˥/|Ûaߦ\Y1:lM=w.fsGQhkkݻu=3x'K6P,_.& ?8vY2\bW J7V(|0==\.g5hE8CO#^HIm=p uԩxrΝ;}G?~;3 w-m_Sp+ AP[+opp>,3 ]x4]-$'z?;;[~IQ%LJv 6qlV5i2;v@ww7[FxOOe}Rr {6Xu_|l"+&@pm4Ari($-T\lhhD/wMKq&ğM ʊb8~1}X莿H$o~R$PPWU$I,..bxx] S+TCiiiAwwmg3i%A wɴ݋QR*m@&fܛʷq.Pj1$莿}s8z(ߙL_D0>>^zmUGUkIa e]vabbip൥3ʳ=Ϙ~"([QA-A%/I()ѳIen,ٸj;;{z >>]Vᘫ#ϗmZdJIea4?k0 fbllHG*k?#ۖ w^\tICHTńۜ~zix3e7 {zj)^!}+fWpΝcc7&R?4J$jamdvp)ԩtЎ髅r|l}xgqRױn\A+4@=49>M$$>40::joҤHxTy@oooc+ԦMiELMq|H|``.W6?@>G$SO=GV|>w`K44h:)mr\ K/.y]S:y+ t\xQ6Sz:i bCrwW {'SOX,??@?}ݲ?K2MMM,9L:l5mu ގl6kT$UЦnI* cFhj ɟॗ^ ${9$ \p^꾎ĺ}N]*g"(&.Ci5GK/۷oBsiS[dǻ6ǡɶ`W4^B, /W^yKKKH򗿌ܺuTz ;[DGGRl H Prx|3_z꾎硯7o,I > B @y}õkh:EI(pA~d->,RN©S0<<Ն:fffح[pG0n p.'_vE<_TM&(JL="..#`h0z?Odp?'> }]]]uWu,--Ugd2-/N%^1p\ 8O!HhkkPCOr[ ۋJ%3hpiJt&޽{]i6FhO%z8S^%^~eObeeطoj^ -QGOO]lOJÅrœ=t.]$2dMLISWW\Z_pmmm}O<ى:޽2uR)477b (j t*ѣGq0#\:i2 lNI.O5O.Ûo;v`Ϟ=( ؿy=Ȱ-Tj͑șAAσ?~/^k D J'E'W}vttt4\1::[IPw?7)0 xӑQǎ+is2dpi\l/r=uQb)2.^̠qbvvO?4xh8dsJ\ZIm\&.$DR 0$Ǧ+A+u $]|<?.{wU3Zaq> *|F\0\4$|$:6~CVΦƻxRR@ٷJj/0W4LCGGGٻ&A]%>m6=O^MIm3`zzSSSlyiAP$_ O%Fw  Q='ʾD"a\称MItmTiXnADZItwFkk+_Y7¢-4ڜj: u] ntwwcuuׯ_*?|X5=(| Hy5. gKy&g`,N7\>~NqiC62MhZhoo|mtJ=S]6 *і4|:nbKKK t:#+Nchh@]Z}*t2DPؐB Lncl3꽌Q @%imKitQR fj`zy+`jjʸJ!ri]*\ݛݦ`SWmKvG}yW~5p-N>:ֆR4&''+<\ٞ!mZG )δC-䯡>Wϥu+ƣ:M0 `<+J!Ƥ jjfGG:;;haqq󘙙)9}T,H$%u8 ]doJ8HZ)\PIb7N$<[d&{AM< IKSGM3fŐddʾyަ]СC:.'L]f=-MHy9n(.eruKbH 6!Z4 6 Laֲ@WS\:rzW^.uw4M^\T[O6>F,T*h4|>ެlKH}ܬA-TzQЬYa\ZFM-ɑN7(P(0 .>ϋ:K%JP & 6kzVO?;T)Nӻ: rO#\ 1|jfG"@=L5J`a/$eRwhz> 2MBCZr!]5(RTwXԣ]'j'2 0i@} rBqS`*Q-~0)i$kRݹܘt6IfMRuǦHu<B`ݣܦh$k [: dglWNLӥ(G333eہ)_1&&pZ'UBPE-P𥥥G͎%2M*4]Y/$GʯYf;jU |tf,뀙]~&G9 AI|@PHGc-l7Ɂ3Ѥ ~Z`aaaKl!H>&Uw8в9&~|A-Z`5&(l&.=O.Z[[(0\kΦ3l6::ZfHVngc*K_ejhQg(LNNZ }׬>Tc3v͊۷oۛRK-#PGPԦ%5M69McS[&&&6Bcp޽W\tysf4N WV`+++݀ll&ܾ}[39% P4屭V%lҦ֨7} ،`p3㿂Y 0b3 h4k1XKn-TIW}ceeeׯ_ FN&%)b$K)l:>JIK @TQڵKQF6Ç+^&.\.NB[xhDUllҮ$ND JC%K1mfmʗꍰJq}]hB=01( P0۠Uq4l[oj-Pܾ}tꏂc N.460;;l6fň\. Xr9 aFMMMM }]orrLfCl6ԲF⅃+<( Ipm攖y4~lqqP56q:qd҆i20ppoaao6 MwSGoo/xJoLP 4abb]]]VslKw)p^yi+S_t1-#B! joclw3ƍ6RxإAeJo+ôry^^ ;Sz`ii zR\.PCի߻.GK$_Ҹ!M@0I^̰K$OzU, 7y2M#<.׳x7qVMA! m7 %VkW &'aJ T͛7qС Inmz5g\;Xlˊt-zZ)dKsi}%˥%[.ry~1{WP7P4MxJKitu0mEGO7oe7*N:ϴii}y{S{Ϗ?sR]t>4o\% ߔDodfDh(zRzJ_^h2W]]KWsq:T$.\Pg*Cw(-ږ1&ˀ&fs49a!.?}T0!L[_o,,,xmI2%h: mr3Y.89 æHu_|}:K8sL1l* |׮]kB(`ii ڌ܀y7pm{L愺w٥Hyy%SC_|EhQ%!Ŗ/nZ^^۫0lfo~W"nJoѰsgf~I@nV Ʋ5$]vZUy(֭[/~Q?):p̙#4tT iIp[$)8u]y{a׮]hmm Lcff\#H"w5U O[܋/*:x̙g J`X4V FuyFr$y5 ݻTyK_l6_-MFYkAMr6B:G @%oѥizCBTě:{5'h$퀖EdGcff{q֧y cdd&: յs4M:iW~DN~ _6"͚z~*h)}nr>d|2FGG@.ۚ*?48oD_V rmW&@@ @ڀϟ/qgjܬ/=0^*_zN{ (&''188z=|pOK.kFL(SyL>>?????????===;;;888666666666666666666666666666666666666666666666666555111,,,'''#######################################  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))----------------------------------------------------------------11111111111111111111111111111111111111111111111111111111111111115555555555555555555555555555555555555555555555555555555555555555::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ________________________________________________________________ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddiiiiiiiiiiiiiiiiiiiiiiiiixxxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiinnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnsssssssssssssssssssssssssspppssssssssssssssssssssssssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxfffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}}}}}}}}}}}}}}}}}}}}}}}}}}}}ppp}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}łłłłłłłȂłłłłłłłłłȂłłłłłł܂ނfff܂ςׂ̂̂͂߂܂LJLJLJƇLJLJLJɇƇLJLJLJƇLJLJLJLJɇƇLJLJLJƇLJLJɇeee҇އӇ̇̇̇·ȌnjnjnjnjȌnjʌȌnjȌnjȌnjnjnjnjʌnjnjnjnjȌnjnjnjȌʌȌllleeeƌ팠ɌҌˌ̌̌ˌȑȑȑȑȑȑȑˑȑȑȑȑȑȑȑȑȑˑȑȑȑȑȑȑȑȑȑˑȑeeeiiiȑ̑̑̑ɑ˖˖˖˖˖˖˖͖˖˖˖˖˖˖˖˖˖͖˖˖˖˖˖˖˖˖˖͖˖ʖ{{{eeetttŖŖ̖̖̖̖Ėʚʚʚʚɚʚʚ̚ʚʚʚʚɚʚʚʚʚ̚ʚʚʚʚʚʚʚʚʚ̚ɚʚeeeeee˚̚̚̚˚ʟʟʟʟʟʟ˟͟ʟʟʟʟʟʟʟʟ˟͟˟ʟʟʟʟʟʟ˟˟͟ʟʟʟeeeeeeɟ̟̟̟̟ɟˤˤˤˤˤˤˤͤˤˤˤˤˤˤˤˤˤͤˤˤˤˤˤˤˤˤˤͤˤˤˤällleeefffŤ̤̤̤̤̤Ť˩˩̩˩˩̩˩Ω̩˩̩̩˩̩˩˩˩Ω̩̩˩̩̩̩˩̩̩Ω̩̩̩˩eeeeeekkk̩̩̩̩̩˩̮̮̮̮̮̮ͮϮ̮̮̮̮̮̮̮̮ͮϮ̮̮̮̮̮̮̮̮ͮϮ̮̮̮ͮˮyyyeeeeeevvvˮ̮̮̮̮̮ɮ̲ͲͲͲͲͲͲвͲͲͲͲͲͲͲβͲвͲͲͲͲͲͲͲͲͲвͲͲͲͲ̲eeeeeeeeeȲ̲̲̲̲̲̲Ųηηηηηηзηηηηηηηηηзηηηηηηηηηзηηηηeeeeeeeee÷̷̷̷̷̷̷˷ɼμμμμμѼμμμμμμμμμѼμμμμμμμμμѼμμμʼiiieeeeeeiii˼̼̼̼̼̼̼ɼeeeeeeeeerrrŶŶŶŶŶŵvvveeeeeeeeeŁŶŶŭŘŘŘŘŘšŵŶŶŹųɳɳɾɾɳɳɳɳɳɳɡeeeeeeeeeeeeɓɳɳɧɘɘɘɘɘɞɲɳɳɳɴʹʹʹͼͼʹʹʹʹʹʹʹʹ͆eeeeeeeeegggͤʹʹͤ͘͘͘͘͘͝Ͱʹʹʹͼ͵ѵѵѵѵѸѼѵѵѵѵѵѵѵѵѵѲjjjeeeeeeeeennnѯѵѴѢјјјјјћѰѵѵѵѼѶննյյնյնչյննյնյնյյչՔeeeeeeeeeeee|||յյմբ՘՘՘՘՘՚ծյնչննٶٶٶٶٶٶٺٷٶٶٶٺٶٶٶٶٶٶٶٶٶٺٵuuueeeeeeeeeeeeَٶٶٹٞ٘٘٘٘٘٘٬ٶٺٶٶٿٷݷݷݷݷݷݷݻݷݷݷݸݾݿݸݷݷݷݷݷݻݷݷݷݷݷݷݷݷݷݻݷݥeeeeeeeeeeeeeeeݠݷݻݳݛݘݘݘݘݘݘݪݻݷݷݷݼݸḸḸḸḸḸḸἼḸḸḸḸḸḸḸḸḸἼḸḸḸḸḸḸḸḸḸỻḸḸḸḸḸḸḸḸḸỻḸḸᄄeeeeeeeeeeeekkkᮮἼḸᳳᚚᘘᘘᘘᘘᘘᘘ᧧ḸḸḸḸṹḸ丸丸乹丸丸丸似丸丸乹乹丸丸丸丸丸似乹丸乹丸丸乹乹丸乹似乹丸丸乹丸丸乹丸乹似丸丸䲲jjjeeeeeeeeeeeewww人丸丸䱱䙙䘘䘘䘘䘘䘘䘘䤤丸丸乹丸乹乹蹹蹹蹹蹹蹹蹹载蹹蹹蹹蹹蹹蹹蹹蹹蹹载蹹蹹蹹蹹蹹蹹蹹蹹蹹载蹹蹹蹹蹹蹹蹹蹹蹹蹹载蹹蹹蹹薖eeeeeeeeeeeeeee艉蹹蹹蹹误蘘蘘蘘蘘蘘蘘蘘衡踸蹹蹹蹹载뽽뾾뽽뾾뽽뽽뾾뾾뽽뽽뽽뽽뽽뽽뾾뾾뽽뽽뾾뽽뽽뽽뽽뽽뽽뽽뽽뾾뽽뽽뽽뽽뽽뽽뽽뽽뼼wwweeeeeeeeeeeeeee띝뽽뾾뽽믯똘똘똘똘똘똘똘럟빹뽽뽽뻻溺eeeeeeeeeeeeeeehhh滻Ļ񻻻񻻻񻻻񻻻񻻻񿿿񻻻񻻻񻻻񻻻񻻻񻻻񻻻񻻻񻻻񿿿񻻻񻻻񻻻񻻻񻻻񻻻񻻻񻻻񻻻񿿿񻻻񻻻񻻻񻻻񻻻񻻻񻻻񻻻񻻻񿿿񻻻񻻻񻻻񻻻񻻻񆆆eeeeeeeeeeeeeeerrr񷷷񻻻񻻻񻻻񥥥񘘘񘘘񘘘񘘘񘘘񘘘񘘘񛛛񲲲Ļ{jjjeeeeeeeeeeeeeee􂂂{缼eeeeeeeeeeeeeeeeee瘘NvvveeeeeeeeeeeeeeegggNI뽽eeeeeeeeeeeeeeeeeennn똘Iͽeeeeeeeeeeeeeeeeee|||ﴴ͛(0` %mmmaaa`````````aaaaaaaaa`````````    &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&++++++++++++++++++++++++++++++++++++++++++++++++000000000000000000000000000000000000000000000000666666666666666666666666666666666666666666666666<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'GSdjrCI)kQ1]B{8< iԗ6Od&"$LI{e gMH#fU_(|]?6xaլqdjiL<;}iԝj*o1zےlii΀,=rFhZTpx_WmPĉ/;A9Jz J:qn>7R䃫, ~FoR날ӄ\)\m!PuC_tT}")I){ 2IxCiY$9^"'zXS&Rr3Ƹo}SK?/ߙ};6=kIE[Oy,?14 a1HAu%MR,f)]uNGى+%s\"83Cj|Qg-OZsGߔ`@Py؄AV?ŸI?:wīv\3#ޢłBdX=.siX^l3]1]vޏNCvY'lAN0>%9fe$pQ5v .$ 7w n @| b2nJ:[ctv/8SE˝vD` gH<, ? P9տSy-^; l<*!:F9_-6I{"0)SshD(rP`y7='Zm*WY, -'H]Q ۱Q] Q:^q|ٖ(БqiO Q %p%gWy^/ 'ϝF6o.,VQ0[V]VŦ@C{4lC_F:Ofk.f9N sQ]1Cil ~LZPJeg,,,8e An)JU*a<1[!{Z?!i"HI@("fRAը;_ɻ +&:;f5뽍˦܉ÁU=3簳#MZߒD&ƭ1:{HIy^t8HBц˳s[eTQ@heFAd*ٳtC"8LeƝM; CLVcJfk$y#| 4\2d.J}r͞`$pP|҄/ϷgK¡R? \,pz)x<٥s1E\,Ɓ7z&g 8U= 8U:bbWDdf $`Åz`t~vS"3ra\o9[,%赐KyrU韲hTw,p)h4Ȟ0DUc$)񉈨F8ֲY uf> -7NԿڬ&eP) 3D5d]W78{0R~++ wzx%ч>rMLZiLߘl+dsj 6M $2QތH!gS\OB%"%ۣ`H$n.X +Ug4]I㥌bRt܁3я H|cY4ga $ 0UAe Dv,Uƒ hesְaDrL< Tn~ s;49bh2nϗ#yi e6oLhMV9fv_G^C\:u(RʢK!jihDϠ0 N"iCP-bqZQl ZvBv!"MQ)W T#<`u" ֑Q ~@0>C-e;g~Hwee7I5Eb P6*hSkS٣йur;d{!O=Ơ&5U Q ڕxS'L.Gx?)sJEOheHy R:QusB' <(J3ҭ``,k_9F|i[<@9kPPI`=O83}`VSH22I39"tl0+P_[@eUEG50WT2l޾5pBen he*ɺlPuF, l,O05ya6ӝ2-y\~̎2ɉZ 8+ZEZY}mbwrQ3I K@Vk=,5f DJ,v]x 4Wrxŷ} ]9S +XLHa4QBOOӾ4Bmd 3|d2VZT(v,S\̈́r1Vr} ypO*&fTf7zF`J&゠w=>N|łJ}kV`X(]ɣiz7zrhPM[5t1Wi ;.׺>eB΍Ȼ 鎤93hv_`Nvf1EK;+.Qps(%w[j$t(uBPuT ^Nۭt5k3uBOkË|O|}QD @lzJ/vwBg_'*DoiيL}1g=b>{FH]Ͼٟj yq&k 1UP<UQ,;[:ʻ t̬0| 싲z'蛥sU:[뙔7(pQXG;%YV!0[ b8v $X1XrvoPGC^6Dq9jqc?ra"sC{7v^_WylD/;G{rFZ_ /-OCB7-m¡`@ Vq&a$dyg'b9֪V!6/)>E/6?*⭽ ,-D-2]|A UҥS%@;R52{c_ - Z`SP#g\@O% D<=ҷIlP^V Xȍ&/Y :0K ,limd9޷;iny-8&rvY65Z)UHL4ʼn(;" 0=_JQ9wSO">v;ݙ<# 0IƼK̛(}}\7 f :*]zЊ<䚒_gIaK@X/h7MN܁X쟉3-el#=G2V(R`$)O/SrN%'˔ G SMVůZ5kc|Q10r$2/)$G|Qж H0xW55г}+_KG2D^yh>4AΩu^x6"d K) %/Db8a9LiUuPl勾$Cѕ2l;l)y(: KN-*nwJ~).62vqX_u\9 {@ewd/ uO:." ukx'7m 2T: 9=TQqEFcCIڇ?XAR[ՂMz"se ]+G+ɱl ,Aʂ;b1f Jjq^e[Fo0gz+B/kůRpކ$8GE7,E؝ALeZa\GQԇG?U_uvK-m r @KG-V; D:P2fv1V*Q{I2;8|Xf ╅*kΒ B4” He<$u$Ahoț!A@ήՓՌ`X8z hu͎3 4e$2gA1͖[Xf.B[RyJ8(ZkW<=邈z^%L{LLe8N[;?dwp؛MQfF[R\i7*ΑNb`e ҆arηS4DCHť6&Y !(p6g TA!e6"xg l'B$? lGAzvC|5zųAa+gG(dF|3 lJ5Ŏiˁȉ)nwZfCk/"2o>sͿ"³Ԩ8rKIX$Y}N):B݇7|_^*nBW;6!-< J.+7;~ '; 9G?l !6w 2~X"Q](B֩κk._9IPy=M9º৩.|AGlU:=F`ārKb%LG-%xcu9vs9;F#[|MщǖU_s_T+0J>-G b,>fAQ$}fiNd (=Y;WK#)Յ Jsߤ+$9nW2ڡ:bP:d,)'}, 4ǫ*Oy&y $5HCb^tFJ 3c{I-CJYBA=!T֭4tL\ݑGtwk oAxB%^OǏn(~Tuݰs"fzH-uB]:FZ` s^n$)hqtQbD9 Y7~4+Dw!2Jkn9!sPa(JZ2o5q(FM-%f/D㾪5Ge`Ibnuy[}<`(W/FOGd+=_z?퉌BM}Y:isIIճ 6Hǧ'ͧ.+e rp8oe]~CrB(ҝ%钷81-(UjX v04-Z I4tE٬vVs[:%.<DPf10ݞɁ$&dQ Б7LisO2ؓyOV#Vf`Pmn7}6PgnHd>,=-[Jt"*e,napCfS^Km$^.>lV[Z wIÄ_,gIٴic_Ew0e5ڏ!vZ[C%,_"եͱP&,g%r{v$ DmMʃdϦX W슞p] 3"DHeZ1o3߃ {F Pg"3l)r&0g>q@b>Թ5c%fzjlIx8gM]X\RѓU^3h^-~6 PA.!2?Cm]׳ʴs42r 4ьw⮀v)u^6xH5ATBVS ?Xy]PKh L wAwn:E\?@wirF׀wVw49#R^d V& ?B֚~Sp3@ОjE_ ]1aIU2d ߈33]H{tqh\&;E ?)˜KiwQi* ]f(3NVʼnh"I@GR~ >crl +mSXazEl;HHRVH>M@oȮ"EhJMt/1Bx"S8 mt(6EMRYEP}O7OAdw0+*ga갿2dUmѝ-(.VM9ciI*D{I~7e'ex'Z >M%e 4RDǍ5I,Tex- 9Aί:d<+%0&n֞O$(r=XN>)WI֡T6%Nz$;/PF\e`)7 W l{V1VyAm7ir 6/+iw,Q0&/&B%Ҵ%ѕ!4[3c*QR#ټ4DU1!x"U-cE5Eh}`:Cs_m^X#l8SDKgRC<}w"lʣA(LcHy`ױ\2td' =|Iw w!^j:./Kf)V@0> 9}EyXv ΠBn~3Jѳk%+?($-4c ìRmgr:0œ6y0Ikh@}m,BMJ7(ys$Ԛ2;T,s ϙz0hѸJ"kz)By.Ҿҷ3yBۇcmh舍)DFăP~le-()ҼpNƍt]хex4=W‘Y%}y J =&C&Ԟu#`jF#f%Q"lJWΎsyen~?>V`Q/0~odX:_c hnTxNqik{w*-2C D)p;gtH)-vj+U(UetGlL1_E5eUBwJ}P^3B.< }O9;P'=ڻ&E.YZ q9sĻ«6)o'rp2`)@G.;5e{c9hBK6e6s@QhBetQy({:ӻ/ Z)z$[oW*krG%BygHJ2Pcs?Sb rh&6kGZ nDH ćo/}HNݞi>!ˉĴC?7>UJ KqS%JGYjl &Sm>(nӂ(ju6-S;b#$u_GKΤ5e{''4~aK:F$"V4iu$oS~ZG,^ړJ/Vl" ;Kp~%Fz HP 1`,3(XZ9A_CMX`e8 @!lIo"r9E҈|RdsHS'FM(I/7u:jL\|pH2 f0{7b ;,?Imī[ dy8ĈArftu|_ܧ,A :V*ə6yĤFMNa=X=CS^u5<ѫ%CC炰UVLYΔ7]32ќ6E(#3t+쌡Z'Xk7{46,j)6nk@m+ 'Z { 5,Y Yڰ/JY'#vm>Su 5(l}f 6zKʱ!vqkP]Zo>Acݖ~}̮ؽ"2Lox~ Rh45fSy\3,<QM& k!!X{v0*w `SwSXOw߉" 跰`kED+꟒c-EIT6$`J}aB:5gQw Qs56xȂt=Ie$GS6JEHpSPBug+ܐ\;̙PO]{+zɫ3(ܶJ*C|mUf$ 靬D;/.pZAn (Y^<SEv{&%USCp|*I5Y.nG39;?F7d:.@kτ; Ik( + E< 2#/ 8ZοY'eD%NX 9@0Js-`}sDG]L:OŗV7E<4>%):(_v%U"`@G^Nq JC`5#-Olk7ud*dyZv:(44+2ĉT  <2P:fGKTa'=xuLYSK$c=;z-︘)cD='e* !Bڀ‹}LyP qO#ChklQx.g+x{3\ŞzQ>ЈJ,zy<~a9^a.< Ć&:˕-E1gP͑.lTWG-2ߜu \Kl'ͽ"IkP\.-IU]v/૭m1Ա]uRk5C#3q-wJڢ&-P"Y[2^o OZOh5 V.D&B朜 `e.U%dk8fIKʟ-'Ɩ gu)gڶ зߛ4f5FݚGwr"c6V7 ڮ6ozaRIS;<2eTR~~l?M֞ũr$cOuv2^,Ff.=;Ҵ`aHkⰰ$.ܑ/"y=cSD:\h %Č%*&!ΊG'ݔr29Qh#,%>$)imc%~`lH1-GZb'{鷘YB&@w&5mg YsKB {D_TԒ\Zv|rY3X,LW j5u־VݪϐG\"Q>'O{{-KAe]-뭌˨_rf̎4V|@o =6+VDKT[M~H , mggĪkF ғB&_3̧FJߠ[USrҡK- "<#0 00c |W l&!'_<;G]۔/?d;Y|ݨW1_ey!%zB" YBl\ /X{l|&6H.Np6dw_l(\c!LLRߞjaek[j[7^$'#ǚ3Zc,CtK=[=L{lfģ򨔯e_M; t߰ޤ#L"ֶA)awx%uβw$hȳo5@ Xhc3b@o̞=aND )`p šiz7ʾɏwo/bĤ;ߟeGh!;8#b[FJgSȿl>Vv$wi\A 5rSAW2tUgk7 9 "fKUɴX)iҀ# LŖ$,aUN V_C܋~A$N_jgLO 3+O(-L۪3yeԣ#C3QeӽJ3@ x\3;Ǟ c? jlGHfL2垺*%-[N}H? "&@ݕB PJ,-\3Wd휸U.MVHBq/T}@(ec^B #)X)*dNQBn[2-(,_3ctWRF_ =qs%|[=3pLFU/-u\t 9vdNl:d7b :o փ4H=OhP_7 Ea }Kk;EHMRp>S- {;'5 #edS/A U]j m/>ufH|B-{)$e#ZbtgށSܓX_Tnj7)W& 0ž$V.W,FmAipĢ!A鹧tYfOהq!:BGx.`B[J)-UVa>)L8=Ng\+k0jCgwa U?*O''J V̟چ$;[`u6RÐ) mUZ]>U!o{gB f>=#0*}o'γ#C `~uXف,} V(in;8:H6o9W`MBjrϙEM{#AmK$>x|A\tfK!Vb6G gKX9f[-i|9D}s]{CJwӁ/UŪ׶!wUB'I,¡ :rфs?v=HDZ3kzA/-;e~`= zM7lVW5 \ DzKy+~52l@UVyAݻ7c ̿6l: 'k},cǻ#=&ϧW&7JDezOF`Cew}hd_f#3u*C ^% ڤ9|!%'7v,A#QC+F{ŨC|Q0z+:6C'n=B-)*6CO+ytu;$h~*h].tQe$4}.`7pټ&*Q-s?xnU°e &wk4%C MbgB1a,TyIA_ iۄ)PW:,;"z *򻅅3#!9&Z V8>ZgH\QޣH;@IK`ai7BAy&s6| i2dCzXEn3J 0D'>( VMO"=Ԇr1ǝ["_}l>h&wzYDoZjuI1K!{tMWi(Čj4 x~ 1g葻Z fiT;$ r!u^ZxpݝQZox T4I774De镠\{$AkXҝ=]rIlv QxQ[lqSO}Og>.p, ^Dԟ Y':Oo|\vO$ZG, An1XǓmLLPtk2I? %Q4oCk_f p[.Yf I쁤[}F D:4֪*=&t[ϖ;YLͶl&%!2`eg-lrB3I)ѢnZYLmj {ʾO]Gc@B?#)4mi}Kz< T|ߣaW5ȄHcPuׄT9Э9$Ug<1><&'}yNʖDsjczO_VA u-BWܾ,Ez-ۚ[墢>$/k ԁrJ3:ܰ_ᔩ'cc"olk\YdfP2_2P8ggs|m( P5,v758$%"% kb Ej[12AEGH](hϿU]k1bzi=hQYJCEre 7DIE.gn i}M#x`R|#CvR8~tkX7I\fLT 0@o:Bۓ_H;&8yk'@vE31& laX?缣>aU/ E qҨ$t8/ex`>\hWYK*_㯦)7;FP9ԤN&2C"W$ ߘ+.HwgaR~g'AZ?^?$T9r؅f(U7 N _r>hcst^bA:]8 ꘐ8+nT5)@(di!?n̺BX SaQ!^̵mI4|DWybLYg;g:a͘=s$&Ԣ8a*KLzeћP 1zʪhZ<iH`g O7{H#)dž$*?u44uW=U4=>PƝ`Ñ$V ЯĽue9ۥϒ9~?pm 8 ѨONXUd[#*ApY:qO a?Byz̷Qˍ UE+Aܶa>26!nQ6A[sVm䐁7Ǡf׫O \}@ߜqxL x{ߠ"0Az=92.OnElS dǶ\%5_8ezbEsƸ'&eHP#J?g.uHr1a/y|NdډXD{V1O cF?:T5[>/猂l.(isc囅';xCZYo֎~v6#ܦa'vɭhq ?a BS'W~&,{\Xu:Xߜ180?2P!jaBG=$3Xa;WH.30L= .ۑ3S=Zߢǃk-uxAႶc&RD}-5! yB͎LŪ(EY);1z_GvK^-?sۿqPOЯMYxrgw{,})!ekY}6~X.[r![dє)#p+iHYǁcPMȈ 8;1hI ~ 4'DKc@M]Ɓ~yh (:,줕Wő&2`r{#aءQ^-flS3M:r&+x,VS1-';&EmiӺT*t8hr@WF;n":%+]?GW.uرϮ`/ 0u kz3.Wzad1krVB:KO eug-5YZUĕ:l®/hB%BK!eRhnJJΉi_(^N5dsrYRr%M3 O%-Z,MN;cB@53%*WNޯV|^Iqj99h6t.񛥚 \濿uWl˧H{2;C+pA$siHr$JUPcG6n5*XS7/|GX g(S諿QdH.3ylVQp[VTG '?RM2jQ[5aƍW+۟N9A3kaxww|}b]2}'_rxJK{jF>@3Řc msbjG zʈC=Oܣ٫Z-Һ0#{OؿjsB%rl̉~c[!xFAk*W yCk\;f$k#lNo 㙬"KIlOƲKPy;UqUYfAjq;T*NAf/v3jj\0f[FCX pʼnR>T @`ٮ5K' x(DR?û412ԳHr祶FAf ?srRp/JP<~rDfF;xQ|ϼHuȹMiTA zf\AvOnr#N>N ۄbo.?Lp<]nūI3mcK 2p Pж@pipvG\ ~aK;:Ĥ2I'YG =y+~K+J-b%&{O1NPk^% ko탒b$ KS#Z1(rVwYWX+,7LO:ix9-ujE9ؑB cZsROb.RnSNi@>rBFOVSU\KQ&0$ ےnei2oSX}O{eds41{DžBpBUwމoc$ @OܗD4!!nWgIҝWߴ5 ӨU`Id '6rlpCc!7R_)j| s3#GJK-WO܅yV4@z:9Z|-vѰ~Mn[FDxv/`D`= LFXLqL-#YI>cK*j- pG=*o xCU8Gw%Sb0Y1+D4sRfLn)7H٪ V#krK(8b[HkDZHo}6C)+ӓ/ó2VN=(z9%1kqYuAcKȭrg@0e?yN=vؿSZ@'++_o3N5*J,-hO+75ai̺g7ާl#~]L^LgN/5Q{c3\pu j(O|]!KhG *(84LDaXqۉ pZEI_ .'$F%3 JϐURfl'$5>˜o^sc b/.C~ITvMz94jdti]Mo_{[9b{U%I*`HFs785.oVgBVa񼢩V?,©}<2Edg!He[ CZyY HC#^hխv/i73TChQɊeWYS+֦@^o 5$ >? 7Tyakq˦CP*s|ϏK 0Uע9{z\ZF7Y,/ I?E҃\< S_G-crN<2 Ryxu5b(!p^C7:bdB:ӈ ;_)Rۇݙvب:9b4lM?b1KĨڨe:(q¨ /o;8ZGVw/a#M-7/@;hbu𼏠3b Ț$P9`5q_%jukAql$DCܜYr|NRȏ@ʤ3*X)%< W~΃VYm(Uine=Nd4 eQ,*HW O*댔ѼBq.R9NTHh4(U2NSө#Tp@(#*bg܅I4%cn6\=r2gk_cLt?jpx]6sN@*02u|diRZ8ҪJ ZMdF^Aze c>qŧX a9 2v0)(ح 3m<@P4E`jrq}>oi_lސ;o1}$_o'{̪puy p*oڐIWl |%9x^hM¸fp>,mDrs 8XǜSG-,@t%7BeueHαw9eU ;.<eսsn) d'"’yY`0s@cH.PrVmud,sLs q L"y'cFzǡ̜E8O 1-' ğk<8ߴ-.}ڙX2摟v0?Gd,*w;q!X-Ts}j=IJEIa@Vc'0*`N {( R1%_i`W-O=VER ^ethPXeO W``yku ] R2p݌ES;xṬb~M֑#eZLslMn.FVk$=t|ӇyͼP-!ZDPݘtMGv'KD\|n1sTGy=ݑ|GTrr's; Qfr"[McwtsF<˪Sk}CHZ=?@K0@1F;mejU᱐Kjs" ,E Rg@rj9Ig~nrL"mPZ:]"xI_ aN+Pۨ{m8I Ҏ]Qp1Sg>}st$uN?2 ev!,40oݍKG&k3hWVD]$ԇ6i*%}yk3I ڗhX + CLS1Er>U&ey$I2X7*u)O$Y4CGjIЉXy='%2]WqaU ڭ̱ݿoK8MH w>p~Y\kkҴwJ_ 3ɋ8xBxbv_cWndU~{j+$md_Qy袹H'71M7vIb*ʠ#Gԯ=M Bd}75 :!+Pz?yCq3{q%2 3K$d njiQ"DH] 956$snAJ]xmpT;!40`7u#Q珇R穪4j𕄉$锊|V'$o}5Dշ,gR>)ZM/0U mjctl93ijųuFOJBqN˾Ζ'ay+&mY5 s`\Kq;ibSsJ*+B 9ypZC_TuL0?x.4ݧfm <"ukxlfFIm} 9>W~qsx}OM J$FBU@O %*gHʝQ4VvёF"F5CՖ_0GkU)BT f-4 s*.qb#k@WBeÙ:?x,Ο^^?+-M\u0"qhVC'\2zyiM`O 0|)Ƈ}8ne"ԁ= t>-~ej 偤-;鐢_6H(`KS:WWG^gde(8A 8l IhRY櫷'plPVׯpʁiW]ʙ$RP ?;G9aE,ic.&1->јJ!j"&[1BDrQhjψc A狆TS7c[W qh3WT$bEQok 6e/x `4&(zsPM(Э]|0tb궻[ 3G];W|v"'ɨj\ՎXTrD+DMQ~U*3[-aȪvZ7Qω10+mX3anQ"#ؠ]qzJ;s 3cs4l</V+[zfXO64׵jbTߊmM*S9sQT5@w݈} &e3x9A;$ N=^# G4MԁN&3dlQTH E「7Gw1vpl#KŇd"w$.[PU,ikkh)˅!d| eB/2ggs}C@'g· Pň1.۴O'V޳sc6 l0)3CI5ɂW$trb؝&#ˏI7E^@8 =^A6W8:6HYQs$ s"@\mLoX"$ϟKNxL9=mO7@ԑ%ċ. 0نllXiNNEu*h*z/e7 IVabƮ;o4Bڼ:H@ݫi}zk]`_bqѐf]^ֈsfw>zj?քVA7FDa,-h~  fA2eפ%sϪJe ɏ3,>{L~8:-˝ ^& Qg4o="ѼJtUywPE򂺀C1AšJU}UKByY `0:XܺX ?W:?/ܢ,p.'AhMQK2gLo# aK3>Qc;H  6`@L KFPZhoL\3>w ftD0[H~LbSNX0ԙO{[1gźO@;+$G|@Б͵.ACS"UwhmhӬ9a4s'e쇧e%W$5L;*Xyf, Iw;G* q(A?e<0 Xzt,"b,h_\C,KDm߉+N&+!+|pCę3 2RÊwCliِ)U ݌Ti omY^\=i#+>//Yz$": [jCG!-D#4] %El{2i󱈋Y>?Gl%'>S4 /5].T y"*3򞭊Hȃ$mwPZ i4`A?瘻xVCS'"-o|?{wo O h#F+R,efP:eаHzȦܵd{Ʋ "6ET.Y['>G`rqPH̨KVaxPE} E{Sh?4~х0lziHp9KklְR7D(. A2JpS[f=C:I([ŀCKӴ=#*q+W! lLUδ]HŴX154HuEm>]Xn.'nMQ Z7`&G"π&Q}urNDVG˽ 1eR:a(\EB)P`2,H$Ŀ1H_ڄCBy >:T7Nzin?g%WSdXYp)q%s NAM/8J~)DnKٽ{N:'dW@0ΫT K|ן`ڣ9şIϥ핃S;VS?c}SD7%G_w2B xs6nl!П[8\V⺡i%mbO L{6Bon- pmS DtQ=cM3杸3fHxOZS 14 $m@nVQYٗaS~OH:7A'9vx<8IB̥z{}q:,N TlaC;J,vx+)4-( &7|M)6|#޺H=l9Cy#7%'mVSfHs~Q_w _k:` d/H5iH]2p~R2z_:};X lBׇ+A/cNUT8]q? p0?XlZG9o3̯Ul:Mqȝ _m @Y# qV׏WGV DF~&z:<rtw#͏*;˔0YBU.Pt\ ի^-m_c.tl,JRJs8JN];\Jr07x.#D@>  [t/ ``&tUPbl_j5 J7b~H$wr~#URb:ף0 ] -L}J^VV_JZOUJC}k')՗/e";0g SnͯL2"G,7fApC/QVCn5\vѶ$,!)^'TTS,'~U,I%1|܈uωϾWF9g ڷbClh1 ,?Va̛{㭤#NH QlJ|g}p߰>[{F>&y8?Uxj״)R:8 b%R`*0$Dre={C)u$dyuy;IH$5HO4u8HatM2POWl1O K0|WK: /4~cƴP*2C FaKQtx5GR0JWcӠ ]骰΀-Y?ʎ+^s ԥ6p栽6ʋhi9U_-DFuĸݶډ I|^tA^-GPS:*:B *WLCcĞX%+ݤԛ([@ XJ ֙-Pwш;v"p~y<\ex!DV"0uPMu%*ݵUưȃFyD~rqś+ *paUR2I|>  `tFIÑӖ 5 5dY;dSgKȲrwXURTĈZ[c@,~1ĸԩk (%DT/5,tc".4ݘq7Nsw؁ 8k@&kRT:+4RlC:iISVif/'HlRW7$be=9ec+-Oq?RMF6q P ;uDE_)\h:_$yf;"6+PgP۱$DP%oᯗjb)bx&IO5-T,h#3y]^3}s:J`D0gMzH^OAϾ$^=y*՟gFeq򵕓Jjˬt:7?wiOmR~Hi v?&+ZӰrA ۚjV.N46!QYM aR#AW)?jVC_D8`QihҳU?,Ts.yvق\1XF%]oz6cĞ< lEtG#(B@Yjw W2~dOzÿ/[^@hGΤV:ΡW͓b%f'A * ]xtMQ3 >Ժz1]6W%& K* B%ԥE=%^p x$?#1)#=>S,îFH7τ͒p !Uiz] z!I*=4qGџ$\YB.mW`  :־.*ey =ĩ7Wě2Q\ݬ:8-v_g8v⫇w>8d ヘ:=/Z[( I!qAz(d&*4hxU?I/ůS_Yԩb@7$U d}pJMAQ GHV|Jߥh +اtN{BAکiet˛Uq|h|mŘ v<#*'2?{H :_B ) B2JrE 3hڗxHe$Q[7‹k rs7'Y&1l ScxG&总sel-fM/': й)/עgqM< Ci6rR.~흍'0^efx䉧c/,ؐ{VXb!7]"}ie+m$-]~ ?/rA ?`H1gpUצf&;l졢3Tt+-P*Es)zHɚCæCJ:Qo5N[iMlNJN2wѤFRvviҦqBRȸ}J$Ȉ$pWQ?g ׅED6F=;kPu ni![ j=o}=)Bj5 (qC|ߛnNWcFKl" M 鑢||PK޿d?Ui.B YkUAڼf_90qjԀ{e xc~m "A!i|owJ$3d}_| ܺժ.em}kG"a9'HO$`EUoQSRujx2cJSUf?U^lX}RH}-M[CI2Y#Z@ì98E0 hR6 R8IV>^ droro3fr2R`Xԝϵa+|Ȼ(o3#!cu{(cۂNy&I(c "f~ \AK*d1dn?EjH3oY1V* 7gCj i5J >mu8RVs.lrWs^ϼ!  C/ :Lt8>,Ҝ*I 1bhr=Y!92s 8jlFƮ.Rr-NEroz=*i̞}U5צU`ps.L,5'vb>`XbX}Ѽ7" UI#I]q*q6өql:N)W~\;'&Sڂ%YgR Wv劦M : &hf{_0o qe$Ǭa9V6^ {i tL8^gѻɟ3s)!<鬡t*q\y^H@LAKpteCRScJ5] RP6F]zkvR n5?Mc6cꠚX!3}]Uz Cryfn;;V%JrWoR5Ʀ6XT^2^a-%•}GuY Ι2&bL[۬2ae_F K+J@]?^Vs.c/z _d}X)yVLRYdW`!@S("%:t0  )Z^0|PlZWPQh3؇!4جꎘb]n^PEObKx.j@OT=ZWF=VS1|1n$%:Ei}e lx:#ՅfWj"u,Ed79jB Wz~0@$'mT̝.LP0<lxB1E'0o*\#0y" ]IƖMwe=FPõ̾g{i_=GNhȘv_fO\WĜ!ó=UnD=j0n4˽ݨö-'\CybwdhS:~q?'DgPqQ] fpM!h#<ՀwHM*(({`e=%nQjmP2h"ZIӔTlm5\sg҂aH{QGl _H1ԚqXlLN *9Cl#x~1eo")+>z;9`tpmVſ_C*(@ApT\T_'N*t>TGn9\XC~!xRLRNo'@X7u1TUaQ֚C9^ ػ $!%9W6a6ͱ 㧖:pW9 cG;Lwòt~  nٸeC!X Z:#>i "4xq~giaq4o_ެ􁎎+L_Xje- o=˄(u0Y}3 p ʃʜwha7RC`b,ߵW(uYG="[s:dMZ8CvU.I$٢(9!;Cl[UҝO!tjr˦WMoKj7F}1,i;%b\FFűoP6hR M5Brﭥ{FtiÎjj9J~?<%kFߥnˍ^7x$_GQVFLYYWfnW,`?O2B5yq8]DsTgf?Cɚ 2ǗCv50O]\kQvd@*9 5x%J92@x,DQ*q2ר cT3)I_^a 4!Y&#LKX?i}TaB0$eIe3;=/eu*t` MåĀP4$}EaDi~Y."{"!fu3ǜϛbeX9׌YCqR=ih~VØc >۞ SO`I݃.g؇ՊԵa0'4g|6EfzS29~Ś.__Ϯ%>#p,ChF4S(f#:PN9 F?3`seU? UpҕvX<#|`M'|Zܟ tu}1:c}" 3<~Zo uNK)/'x}K& j'E|,9i#-f~QT{g \vx|"Ƥ .ڏsx|'7Ѫ3T6yUI_RQW2WQl(TTa.]uRJk~6~^n2ז@=F G-!%"rwyX€0EDÖ0摰` gd?XnͶJB{ffnwLQF :Z7%\/ ofJÆ!Aww|'K"#Ok[XFrXu>O_O{GhSCrA%W H``'ud](g3HpR.sOW/N5z@[\|OQG[~V1V#k[.ck6xUK~~/c2e0`4򑁉daahG#[V)nYA6enUBkXd]# e U:}o#ȼ6bĥʙ;WlLπk |>jZw8ڥia:,ʨLx%1'o O, }DjT'8 mX Oy\ 2cXk*&+pm[ P Fن+N2Ss]Esˆ-w7l']Є1=~k~eUL@IZ|O ?ywiәRNA[ DGL>xg_ n1A߱ED"vZlHEH𿅕>`u$#Q0B1# ʜ9T|B$Epn;Z)6]j9b<1y븲;r<5 ZRgNF'1aQRLY~ ~ DN%Im5(:lIlh)#m\/4Қ# 8tr(ots11C^WV@tm"$ddɊ쪁Ψ;]Eq!J}A9g,X:}11ELq7_1a0q=F}L0 ˋmJ^+| _k(6EPd' >a<1Cy9=y;0wUdn|Ij`]Z]wPphiYev4[vNWӱiϧ?n>E^bfx_k%W6BU9z7$+:jap#D7@*yroމ8!?uICݺ|- WMHCݯ&DtY}6a6zuwNkH5`$;3>6 ӥvp )@p?JR9)NM늚^Ae.7=xbEFZw@޸+ xcdMR Ó+4OъB,q $$ry3;mz)Njݝ@k-1 2 3}ciԤ@4(}Y8 qؖ!jƣE!Ii'&̾F4'a%. @*<@RC';\c HǁD%}\&5Ew͞6(|5)UL'SP笻aX93gzf/uEʲj@#7Ba=8l"CE((sA!򷗠_AP G$ 7`$TJ=r1ѡ8񂶡qU^5N5 48E`ʪ`+j=ګ / FqKM^:ɕ?@ 7~֠iq>2gݽ䷊4P"ucd#h U1ڎϫ K!lR(Vv CDߍE3M7Āg<و7rHm>YP`VȦ ˘r DV !ۈK7|@†kM%?zƒZ\'YG//]A\]0uB̖`q_G4ϪtQb\VzY[)zkz)R g$ vSS\GrP,@߲eԺG8: mG0Fm~!XG?P=z0f?Y"TwF2izA0G$T_m`f؁<&[YkabsEHMOLy-fߢ7/}xw졙hϢ:?Ϊ~C!hVm;NōQ:]̒FB B}1ЗMu9w#@`ahr$skb_P>vm,gŇh@)I%+IY?!`F1 G@4)#␆LwIyfU`eT˩_WHQ-`n%yq$+i(1.c'0ELձn9J@ \hos=m-R8޴]zIznr Nl52;z}q)5mtkyEndGS?Ps9ѱrG %rLhײ$UlFBCj)) Qv8\@9ֶgJgG%M#kae@֫o[n@[}!<]VD)fH4@ ;՚25Oj(:nItWa#Ojb gIUdè+!mjїQ+!pp3#`\~̫ڈ5<޽CeD{#U{jY<4`rD$cAp񴁹_)TLحMaMUϮ ĢTu{LJɚ۴Om76p~#o:\;;Bظz>416qM4Hӌlh9lµ{y:ĂY11kxn؅~[_u.]PͲ V>ᷙS]\s718g"K7 fJ_.]Kg怤I?ϊAed'c Nd&xGL*(wASC;N BzK(D~9Y"A7HCpMu1+v1 ˍ:CD@w5!M>Mcdcen3Z o&>Zbgzؕ֍e7B;?7G r2n+E^gWS4/@JCk,@yaI? ދ%"f8WX^n#HxRL ! '.I>q÷/u q~_U݄DLEUY,~z-6ĐwA"7rzEbrc,Ƽy4nnko(߉I'މ|NTNԣTثwI|6_^r3q9&ݰF|UjUw{UJW]_mqUUx( wyj7naM-zblwbƺ2Ɔ-eoʀͥ]z$CLmdr"ih|!^M:G9)qzubJe/QAtp iӢ9-͡2Ɔp=p#Bw.lqL1f][3^y1rLU6hA}%9Y\8P5V@E!Fq6_u'SsFv jUxf_ρDġ})|-aq赺g|KoA)XTKa3L^TFE`pP;p}kwHoy k\8@no3ngaeJȀ:_-t^)j\לo? VdW&-Z $ntt?bʊ_̀i8eu Osκ>`oҰoZGpyx@Z23*L^]Y4"*%_hq-75Xbų+_B~rlOؙ[ n CNѲY^z N B.IaMe]wǦZ078n?LśC͖xI'L3A"^L$7cܮ1-䲋5>eM֤jM.Z_a7-f DS(ȴ%t%EկQr'G9pX4֤q`m4CʪlYh7QA,_SJtrFY2{0my( 4E n#W ,}Yr~)X\y bi[WƐF @RpW"t|0ՙHqYںm΀ܷ'ᆋ),%[P*o IMpnQ [yb=Hmb{cN)c" OBgw![ nQAUCxf_#{CBtZӓNDXZN*auw.u\ ly`UXNA%Ej) ='&|;.RV~Ո&2|yhb]~2˂uN7ˬ5紴 646I6ވB_*$(τ: ~ŏ@B`0׻H2Iw&Gkbx*HUm<Bg?GOHD ,):ŲZ:CSNHnҤ7z UK"z X>T qCP_$&^EmʋjP x kLGYW6~t\2 C)<$x\dkwۿ Vk QSWq[6yw6\rc2`WZ&YHNj[>՛'zWcfgI[+`ك svKAgmTޖ%zGb”exaapͲ96"F6٨{1xmx a*%'27Ҵ@fe?>(V(թ*&a˴gtO}b_mU>wsۍl#-٫O#z2@䪱]=JpYlT"-FDkpw07c.+mZ "!i՛#ʃ5 a]:}lE([tA|'SB14ģduI*Otз/g&?l%f'\ԁ..416g`nKc%kj/ev+9Y1ԜqGS;rCn.N}5ն##㠜ohv {ϬT1 3/NMu˷Qb\aQ}斤DctFڃMCpD-_,0pfJ@|ΣJE =rf/Z^|EvCH6aaWeRG< 'umgP=WNyT$f[Dz>_MSUl6"^_y킣V 3o86eFu-G+$ zhtٔ y Uonɞ_W@5c(Cd|[akm(6Og=\&ʷc.hG49ɉHW/7(37kt;VTIuJ2pLjңZ:il+sw=|Ka]r9O b t#I7Aee#O-g텭(# s%CCbnv=]'))<6_A5TڍiMRom˦,f!YD=c; ŕmDB%mޫ J<yf)|IE`TޏEyDl\6Q{3'DqM#80SӞa[3?:Ww~c>W,T}0\ԫ<0Ewt9E#U'lbe$b9ZxƓD;oJҖ|~}w~7 LoQDx$%G:gqE C3^4&G, J_?tL啙ǎ3O ?VʗYu)dܼQ)qpt+JhN_1Ap3S)? bJn ZC.iX ݾ\!hlCLCr%q~P`U &92!&.G֋v)Jy{_KƼۨ*DPJHuK_fH1@n*6IEKN@.b xB|X]\Fi㥚$E@N3 _y@wYEFKMѫ8r3 vf7hmDnRĎ=N gZb8XlWW"0>rZ>[L#%p,1uwX &Um:6;*~!KwƠ!M&J!^+lFYKBd" !_i. mK3VyClj! Դ@_YZPRxLH]4}?,}h)56]?%i%IS.S4l^|qWFS&w.@==p[~0" 4e)tX+%#AIMNu.MO\TmbCk9pR%9f@K|4~i "7Rq_H-9~hIJqwpA0 RͳdzLmQiIq.9!`@;Bc`˃{b 7Sx[alhEZԞ 0Ycٲu= pxQj{T T=j8pkM~-_RhQ+'r.ۻYKqOe}i$Q-G}!b|V+2e[*Hذ7jjpps/v,ZbNd'@ =\j *K0EY!n{\%;WJ]|VWhNju}0ǺIVI͗<}=?FQtBkVK4i }"Vtk`67E2`#d[vW,3m&`$^xڛ@֛eZS/d?*,5/ST :zDϱh=}E"&KO/%RH _*= YُqF~Y bIa;ck=I` 9ȎI[K0I2mlJo,r}dvRшxm `/o >w om#]DD`NvjTLMoTĶ AFEe|ɕd RO1B6BoyK:B+Wٓ0: ͋{^% 6ga~o^8AW,@3¬6T"AU=JW韗"87:3:KL}DdFliv^d>6붲nq-\šL{Wݼ t*C 2Rz{b:Y*S𐽚%ZZ_9[AK7 圭*lî zofaѾ쯷ԧv:#}Ok̪" \ͳ3kW$Vv=Kav0C]yxJ)>~Js)k u%{hU/Cm$yJ-@+DŽ|u`!cZ;Xv Րcf%/;!iI5 yS=cȔ9a^? F2j3w.8jEC2F5ctcl#m!mH8fߐ`H\Jiܓ* $^Db~$R[6ҥMidH;S]8h*O[V'[yL󎝱[n2 sfBnUp,P%)V ];#};-Ai$C[b}Mw0\)j{)fcaV_SVU2fwOs.oeWt tsήAZ?q0vn$C(b278}sVhKلjʡ m+/vS'M'dŠqB[:EA ^'ݓ p$+IVV$+n["&^Țwk4TCG67Ia{j_꾟drKztti8! r-^M%K5વI$rҼe7p6VK۱)k%|'Ovij=;$6_+fN8vsT3X\Bj2Ai#N4nUh>Dt/WczBX<*_RɞN>G\CuTC 5@ny PB@f? Gq$؊UlxtC!~t'ih螦삍?.zɩM6^! llO0t#89 Ñ4Y$D4+%9U%꼾ʹ󏛠~N+7EbQ{M$9kxĝca٣Cp9yfnaU h?J`[q~cz{@ygD?H3UVa L Ss _QO\^Tpϕ]G:}X=tn#5*VԴ_u ;?iZR9_1wc4_”Bb?FɞOlfYlT2IbS5~Hczp_`@4X<0H`O)^OϿ]\}&FnPZ؍Ă\޶9)}rfUl4 B{`Kgπ+L +ޒ}1KmȮ-ZD}5{bn`$au0 "B/v%0,@~sٲV%y@th)-|ybHݯ7[&BZΊXHzjyHh] < 6@!>5LHHE4Z2Ls#$+g9gv9V嘐RHf !,EM\١> XR!s8HcN>C6gB?wLUa̒ [Ѻ}hJBМHQ.v)]|#ҳ8?A öTW:Q]Gh5:) g\3\3r$%; %N8HFEz<R?irݪ,%,_|oE:D 9[ķySV{Q>1 1EՊUУUZHx xV)fӃi[qsBqr"#yPaBWrC_Kڲ,I}]z=!'@d){Aw2\ql~G<1njF Iבav NivGN)Stp"lqx)*hG omiԎ)?攗R} xŤkw0Q/RwWQmՏF6[[fuθMmk{ST']Ԛ3Lv t <莭Wr ^3:Jp-$b07Q.݃h\oc[?O(,p @$&Y44LDu*8b"zL2;_ayh;t# 4`|cՖ; |\DaYw Ўv( EPxe#y M+7䳍g_M,Ω?JqU WsD =<;ѹZ }|e`/9P\&lLW\&%-oȈ_ o;t\Yfٮ}MK]cr(iCBkzɱa><[4t]cV+f;.>;QRxZ~m] *`h56t+[ K|-oadvCQ^0s:ɹ&F#MX3>%E3=ы4tA _3;!T u2ob݊9V{bݣS6 } s 3gàUr97cӦ!ȋx,мm4Nؽc*@gp//D|O WՄѤ%1hJX-T߂N}F`\S+7Xgؼe >&QԈ<Yp[SD.RVɀbO``sOQs"^w͉?']07ȳg6Q|/ Fk .B-e`LDU%<'-\#ev+bLHEUNCL'N=сM-d8H,/=5`(xq3w# ܝ/˘J<*H7$0~=˩XYv.#KL#3Eճm)]gh 5BA,m_6eqvG}.|ÕExO,/,*}QRB&@<1Pܹ;!3C~6 sL>&5ЕU>ZhfArZ$mE@G2iu;f iIE6EsLD3 i.X8|FcOtwO2CCxMl"9R?|9\RY}g +lS/wmc{> bihڊ %I'2`+e̜ҕs+D{yWJk3#CӺH2 8GW^ōFniQ>[%R`9[ktyZNy,?7p1I;t"igr㠲ljsǵr\3IqEӽa) Bv=eЁF,))XJN6&5p%;zov]?|ØKn<}@@\]zwxﻱxL(\ij:Ъ0\/ByƮnCieέ8Z(qk<[v:R2azJ u}km2, ` I =Rg: )i~ *`ajw0L-f&YGkާe=>dce+ŝoUi}[ƽzFHm: 8gW` a_UnO UGܫѦ}!Q^Y <)x 'f3!=e'(Ә1֡K;1 =\na#nkҋ:YA1{_U ƞޞdȾ[-cʶRa0 ]a>r@Pq3ls˻~38ŁVGG} ,n&,V7yH잷4H9,R/+yБfe%_X\i`5OMoP \VHΓD+6GE.L)hHW0rd`]_1p)엶ljΗdc؈HVc$ttWpOjF.[ڧ־P,] ϥ\&0Z8h034/Mu=Fa.^Ƿ}gƻJWeYwd-mU5QV=9t/e?Z5A݃)*W]unRѕp˥eɇ)6KeĔ#=g3%}ApPRrВ%hV}m;<Ţ IcLݚQ(]#(&H~M oY-Bŭއ;k}5OG_׻"ׂ%[R~ʺiw}Jp 6L@$`*{td 6Xйx|_Fᡝ#I}n9ѻ1R?$?2df|Q=KƆ߿gDV=aSፄyA69X _UѢk΂5c:mp| lj+=펲,[0j5gb.ƕ3`uk$+'o ü~7He dM||Ol̕ /_ժϊaHoyDqC; 0[Pa \qMXEvI'f+*Ue=m]7$#߁&x<T,d좎 qߞ$L}Z{wjDr8.g T|U ʄ&tƜq$0-Z&"1B:v3gvɆ!CdLȭIBzư)t=+|Q%ND5/Q_:4C*sEc$^/J:k6۩NJh0t2[N<mHs4bf|w(&+ ɢB&H{0ZEo +9]ސ2:y "*YAg\0tW{Y GMoDfd E1kRnȀV7C ;yW¹ú [mqgQ ^+B nR_c_No{q9\!29_U 4> 3˴&i!J¬hzp^ַW\]Ā ӉF(Y{Sv9DL_Fc7t?a6/>Pt@HL5%n+1h-M8R[(0gp3[pG 3F@]nmtOZtW6#E*O7+!a{ﲾ0fa ~UfJ.\רK?L)u]e0?a`Hc'JCOYJ*pQ}5}M/6"yS-YfK/ށm3T^%%_itUSHW e8 8~Mm[7weƒ+xG]7(]+x3^6YPFxۏk" ҧ*dw>Tԭ_ 9@#.ddm^xl;\q!Y"Tླe]͓>@4䋐5]~}Kg 2mGG8k~Ylۤν%_Cɿ2TH)'翉6J. ٘!%xOH7(-vH) nU%>QGsqbmj̑vr, FWQ)< (Uz˖jU3F!ۭ8a+}}4]ܿ1Iͺ!zG 1rUIFvH @㎕:JI.!x@yP1J{,RR&!. /Py3W jE EBZn UUO, $NA}Aj奚B$g:PT5ڒ:‡qE59x$C35qZQ}A+rX3Fed\Tpr xap[\tۓLCeidu `F ]%clo:jה vKZV ټ5+w \ ߭ I~m5+IP>"ܱڜS"KQSv6-XKbu+ 5Dz `-ܯԙ.}{NA.?U LGҽʝd"c'-z{q`,F I☛͒&[ 43k+!t]phy^b3My1)>Sn!B3( :M/ ux k1E"SܴYzƬP;; ‘XiM 4bRH^ޣy~1?X>TTmТalzq=% IuCl}I_dkAd @<LPSʮ-(E [g}[r99 ih32djdjdjdjddj_82cdidididjdiddf<211bcicicicicccb@12112bhbhbhbhbukbbD28b gbbababgbab*agbaabaagbabb|baI21121<]ggfggkgfggffkfgfggkgfggkfgg fgR22112?dg`f`f`f`f``e``Q2C_``_e_e_e_e__j_T31122G_I^ d^^d~`^d^d^qqdW52112Q^6]du]c] c]]^723Oc]X \uԀl\b\Y;1125R\bL[y[f]Z=2116T[[>```l_@2<\`]' YtXXlzXC112BtE>E>E>E>DJLtFDJDJDJDJD;<;C;=Reo^K;C;;<;C;C<;C;:B:B:B:B:B:B:9A9A9A9@9@9A98@8@8@8@8@8@87?7?7?7?7?7?76>6>6>6>6>6>6=C=C=C=C=C=C=5<5<5<5<545<5<5454;4;4;4;4;4;43;3;3;3;3;3;332:2:23:2322:2:2:322:29292:2:292 {21125B2112kg1211T62Bׂ R1127ˀ蟂|2112tA2\֕d121Hʓ|612:‘h4 P223vR22u221aB1@12M񠎎o721c22?׀띑Y2 614yF21121@rO22f ׎s912115` p22Sɏ_32N?1DK1211?s _26u>25^{52jd4212M{M2WQ212?lp2F|B225_>9|h612Kx[3lՇV22>j z5[zE25Z|}~}~}}~}~} MJk92Jt}}}~}}~}~|||g=Z3=k|||{|{ x@J5Xx{{{̕~~Ys=Mv~~~~~~~~~҇xp\s@dx}x}x}x[\Xuw|w|w|w ӭ[m{v{vuvuv{v{v ӟtztztztytxsxsxsxs xrwrwrwr qvqvqvq ̃uyuyuyuqontntntn msmsmsmlrlrlrl kqkqkqk jpjpjpjioioioi jinsnsnsn hgmhmhghhmghhgmglglg flflflf ekefekekekekejeke̓̈́̓̓ 21126ͽF4ʀ̃̈́̓͂J2112R211̃̄̃̂1211f]12115˃˄˃ˁ82Kk2Fȁˀɀc112:z21121Q˃˄˃ˀ3112ʋ22112\ʂɃɄɃI2rǗ32jǂȃȄǃ121SƢ81122x҂ƃƄƃij812>Ƭ=2113ŃńŃ a223öD28ăĄăę321|¸N112=ÃÄÃI12\X211CăĄă}22Ed2N816r112Wт`22211c 22f322pĀG1M613~Ђ y29;26ڼ73A1;]2nI1@ˁ2SS2HڻFC^1Y潷ϊ6ʉ1uȳ;2ҳtt5캳Q= [Hʼn"Z|rӁ!ЖрǤƀͦǡҀ؁١il32 dddhdhdhdhd leg>2cgcgcgcgckcC2bfbfbfb fbb|}bG2=eheheheheeeM2Cc`d`d`d`d``O2E__^ b^a}m^^b^ bffR322L^Y]qۓa]apX422MaM[[i[{V624P[=] m^^[825V[& YX:28SM'Sb=2:W>GVV |@29:9:>: >:9::>::99>:9>:9:8=8=8=8=8=8=87;7767<76<7677<7<67<7:?:?:?:?:?:?:49494949494943838383838383227272727272722 <22S _22A 326р嗗 K22rƀܚ q22[Д ;2FőQ \29@2 32to522 I2`X2;l2J홀E223Y:N3T{}}}Uv?Ep}}}{{}~{o`u=a~{~{~{ Ԙ||\_Sy|}||}|}j[kw{w{w{wiyuyuyuyuwswswswsrurururԁsvsvsvsunrnrnrnmplmllplplkokokokiijmjmjjijmjlololollgkgkgkgȁfjfjfjfeieieieé́́̀ A22dW3ˁ́ˁˀ v22Ie223ˁʁˁ ɰ428s2VʁˁˁX22Ʉ2 dȀ ǒ22oǒ2rǀƁƁƁ ƽA2Pž522āāā s2<:25ÁÁÁ 43@29ÁÁÁ V2yH2?2YQ2G@B]2QǼo5i2\Ҽ4x2h߼ Sa2vĀ S7ζ QDҳUԂ鸁~k𳀮〮ƒ娨񞞠ȍ̝is32deed`π\iZ312dee`sjc`8021`baXdZ`=/213]^]TW`B/207S[]YesXJ020;X^UWMMK110?UZYSUK[K301EVYS)NNWD8/3EUS7JC{C8/6IP@ H?e5/8KJ% ?G109+;;98:8ZM*6=;9:7988:88+16835435354353R-2,e90.A s-2.u S--Oր 򩎏:.5Ā2䚇n.,_ҊR*?\;-d~i?-}j+G~ysJ//2zP/iهtX4.21/uu8Hw\=-/./6Gvb2cD.,08I]ovsEqF0-9I[ksrrod]p16J\ipnmlkmkd]B\ionkljkkjljib`jjfggfhfggfhf b*2)~ը602ͼ<0,HҺA-30ϔ+1,S*3-6d**_h(2*A÷?,6*1)RɻÑ,)wΑ/.*ee%E8*/zܴ@)E&8&[V#E d/l"S 2C_``_\_o_o_o_o_e_o_^C2H_R_^^__^__^_o^_^_^_^_^^_^_n_^_^^_^_^^__^__^^_^o_^_^__^_n___o_H2S_^_^_^_B^_^n_^fj^_^_n^n^re^^n^K23Qn^],^n^aЮ`^n^n^φv^n^^P25T^n^U]^^]]^^]]^n^]^]a Ȑ`]]^]^]^n]^]^]^^]^^]]^]]n^]] ]]^]n^S327V]^m]^]]H ]m]]pn]m]^]m]]c]mU52:Y]m]4]\] \\]]\]moq\]]m\]\]l\\`]\h72=Z\]\]m\X\]\\]\]ce\l]\]\]]\\m\pm\Z?2A[\]\l\\M\l\l\υ\[<2E\l\;\\[\[[ac\\[\[\\[l\[\[@2J[[\[\i&[tr[\[q\[D23M[P[Z[Z[[Z[Z[ZZ[Z[[e[H24Q[Z[BZZ[Zoz[ZL26TZY-ZZ΅ZP329VZSjjijjjÂjb6223KWWXWX;+TXWutWXWWYWA24WXWV&KWXWWֻXWW\fVWVWE2 5PgWWVWWN FQRQbQ RQRQRQRQRQQJ32>Q- 8QbQL42APQPQL(MP QPQPQPPQPPQbP QPQQPQQPQQ:2JaTRbababbaababbjbaabababa[23GPOPP3 7aOPOOPOPOOaOOPPOPOOPPOi24HOM!'LO`O`O}25WNOOEDOON`ONONONON`ONNONON27K`NN8 6N`NO`N29LM_M'&KNMNN_MNMNMN_NMMNMNMMNM32=MYCM_MMNM_M92SMM<  5MMLMLMLL^LLMLM LMLMMLL^MMLMLLMLM@23LL-%IL^LML^LJ28HAKLKLKKLKLLKKL^KLKLKLLK LKLKK^LKLKLKLKKLW2?  4K]KLKLK]Kf2I$HJJKKJKJJKJ\JKKJKJ]KKJJKJKx2Vq@J\J\J2e; 3[IJIJIJIIJJI[IJIJIIJJIJIJI\JJIJIIJIJ2w$FI[I[IJI[JIJI322?IZIIHIHHIHI[IHIHIZIHIHIHIHI723N!XHZHZHZH?26"~^HHGYHGHGHGHGGHZHGHGHGYGHGHGG2>K҃GYGHGYGYGT2Gb!GFGYF GFGFGGFFGFFGFYFGFGFGGFGYGFFGFGGFGFG c2S0~]XXYXbYXYXYXYbXXYXYXYYXYXYYXXYYXYbYXYXXY s2aK܂ FFEFEFFXFFEFFEFEFEFXEFFEEFEEFXFEFEFFE2sw!NEEFEXEFEXEFEWE2A~DDEWDEEDEEDEDEDEWEDEEDEEDEEDDEEDDWDEDEEI3K܅GDVDEDWDEDWDCq9!vDDCDVDCDCDCDVDCDCCDVCDCCDCCFT~CVCVCVCJަV'K܈JCUCUCBBCBCCBUCBCBCBBCbn+cBCCBUBBCBUBCBBCCBCBUBBCBCB~a~~BUBABUBUBABAz܋ABATABBTABBABABTABAÌATATATA@A@@A@@A@A@S@A@AS@A@S@A@A@@S@S@S@?@?mu??@@?@?@?S@?@? @?@??@??@??S@@?@?@??R@?@?@?TΧU?R?@?R?@?R?>?>??>@T>??>>?>??>?>??>??Q>??>??> ??>??>>?>R?>??>?>>??>?R>?>??>>?>WɡX>Q>?>Q>Q>Q>==>=>=PmΝo>Q=>=>=>Q>>=>>=>=>=>=>Q>=>>==>=>=>>=Q=>=>=>>=Q==kq=P=>>=P=>>=Q=>==>>=P=PZP_ܓޝaPZPZPZPZP<=2NˈJ2 i2> t92625{򠀍`2L2iꙄK2|2V❘?2>>2C؏g425^_27 ̌R2L52o~A2=p L2[چn725^p2H͆Y2L~>2;󟕂F2=o]23u뗉s:24]~52b㑉`32M}K2OٍL2=nn2?Ήx=24\=25yq52K{\2hS2=m|52Tۄ{B24\K2Cτl72K{m28|˄햂Y2=l=2m䏁~G24[  [2[ۊq:2Jyz52Hφ_32=k J2;}M24Zu24yB2L =2af52 2ÁO2fȐȐɐ\23V2u €ȁ€€ƒȗ2}c23€Ȉ„ȐȐE2]s26ǂ~2E2 ;ǀǀ7262BƐƐƏ[252KɐɐɎ2i<2VƐƍE2L@2bƾžŀx2:I2pǍŐŐŌ72S2҃ žŽž[2s^25ĐČċ2Um2:ƐýĂĽE2@|2@ĂѼÍÊÊw242 Hü޾ÀÐÉ6242RÀʼn†»†Z2`92]»€ˆ2F>2jݽŠ„D27ºF2yĀ…v2Q24ς  62jY28ݼZ2Ng2>…2<|2E͇D22Nۺ t2t42Z 62V72e͌ Y2A<2s۹25E23ŏC2M27 ̼s2`U2<ڷ62Hc2C鿴X2<2ZϿ˂ ƥ22jٶM232|轅2a92Ȳ922D@23Ä n224J28⸲€2W2?ΒȁM22pf2Iݕ߲22Mx2V췰9282e n222w 22322  M2X723 ݇2>?26 ·93G2>ʤݍn2T2G٦ȃ2ec2SЇMGs2aာ5Ή2s݇92킫 nu3ĉ P9VFŲ͇Vճᩨ~nǁцИဧˆ ڦ醥 熠׆ ß۞՝ ڿそн䊜 Ļإ󠋛 ͚εߎٳ잎𫉙ݭ顣ߝˀ𰁘͛ܧl8mkSSUUUUUUs8mkkkkkt8mk@6Թ6TW1199TU4466UV99::WW6ᾁ6dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/dispcalGUI.ico000644 000765 000000 00000633074 12025152311 022504 0ustar00svpwheel000000 000000    (|`` HH TL[@@ (Bԯ00 %   L( h1PNG  IHDR\rf IDATx̽y]u/st5 JI@Bۀ3xc`qN %OR8~O2J.GǴͽFa)3sky^W+tƋcs}G߅- s  j"1;XR9C-F@U"VI9uP>v(S)S1EYG31p8hҎM?`K_?%@qNQG_[y߈~,7hR*T|֟y˖el vT7$Bp3j2OoJzŅY L!,eVY+Ch,Ԟ N :@PJmc7 BAmAN2Gj.u$H=#:%앢Sc)\RwLݸwب*!>~5^+ F+3}vS}@^Ne8ORJi^LJxPk\:0U8!S;+3InQ ' 1 }㜫 KZβݕFnh5&gb**n~/|8ZIr_B&sEfWbk D.N 9UM Dɭ%m\ظW 'EM&DO~yy?R=T N1@%0s 7=!Ő: ~]xrExܼ-#v`;/eQPS7~%Af>U}J}(8 V5EӜ3ɕJⱸk|6_6:Fw)9= IB1ҒbR$&3Z0}c ]Mu3ʴ$dQf%>)t-]ïX*^NtE-{ű0KMQ+BlOdRWX~w?f5Ow:J FGr7Du/]7_/eKLn.  l0!\C L1jb=("1`(12`HJ#blaKim۷$%Z0Uv!y*R|' ʴ FUhUlG$Qv)L^-vWP@8 DDnS?z IٙwA=grW G, H8-Z4;6{~}&dT jxT10U'Zx[:m4 Wɲ.t @7d=T[iAhY_Z!-7IbXisyL%eX%c MlW UT0;WclK^B]S&HZJtɨ#DN@ޚ5K ZTމ:i2m5_Nc|"՘LIy4J"71 B_9x}ĊOu]?J]uxQm3Lp{7GTK? `ʁȊURuP⧬{37Yێv  1@RLޅGtնҋcǕhQH2)EDȊ4>p} /BUX6&6VNWm WC8B_~s?_z1VpjYœ<)GGy?'=rL.e%yL!_S'GL lrރԄO{ v fp5$~1R`/=ʵAuYwCћېM Ir43\c N4MޱVp ~ZA$%H.zشCs!MpjE%ώO0Z(TvI2ܴ*K=Sj/Vej&ʠGڠYE4n34Lcw_V`Y(-}֓xd +7/>+`R r+rpPyi> lA,; wvuBME;->;P=K9wN,+i\u+x uk4cbG'Wsi2Y@=u``P4HS 4gM^y03'^$۪ڀ!t\72l\0XHR؋+Dhb}c\¦? WU!G9bw';9X @HG^ ,Fe4]@OV"co'M I'a x/ F#J{^D yQXl w>KUg(Tjʜ0 }65(+,j!h@фITIa,-8_|Ua6~Gb@:&F h"4aU)$eNkjV o&Jkj@1!3-@'/y}:}EVW1]$М΅2琴$'o{`xE]Cpҏ"h^Ňȉ EZ_-ՀYCXyAb# U$5BEv4lvR4 b1GX.-.LQ&k#M8"##O/S#QmД'ZJoIw& NZ-t4\Cr} .[s uZ\/9G)5)\y?ְ=X`ϛCҨͳ}O oB]th1=n7l@i=Ў4'M2pVI-d!s+SZ37KfM賭16ͬ)SHQn]<%A0mtؒĦ&rݘ!{1zڰ:OcC=_&o èF+>ڽ=Ato!w i캅/F0]M,J&Is vA26k?U^2R36=RJř׵'*IyUR w;Uh]L5:߱`AZS:GpnQcj1aߑHa6Rk(I`;~7FZ% _dnCGu%3^m:+ѶRSuKUM{ Xi|3r0#9>E\}f)^'bgi\YۘAKؚ,JXY8O ”9'Bu[c)H3~qL} 5M? Z1gm,"Bv6 yR\D,#Z] n --#hK뤰4.ATS'^+KBnYqVSQ";dNıq=+1h!{ȔPZV t9o8Oھ =6#FK_Fwz!PUYS#qP^0^=FF_7fq&c-_܄rLƯIV$iZ -x߮3bVǥ?¹XR S8җpL-m=viۭ[qNiy|{H嘙R{ѭ}7J*b(p9y! 5{naz}>s/%_}Ư:3 =/QSn#OtD! xw3pbKz3dc#&3\.3~uBL@cB@`%ԂL!GV)²<&!DF[to9' urɡFTd M2i4pJbo`vp{ {K:f+$uҘJTf#?0f` 'g}xV7G@'赙QP:djBjC͂*-l90`pNWǂl(ϻv-Rz&/S  x㤇 ~J]FaBE>[@OɊUkiCߘFB)1Ö`KWmΧ;Gjpt̨Tş)N5Y&YXYoj@ǐ@/4if| OaXsy|Pɒ*^&;ºӐ)uٷ1Fl:=U{ lt5Q+'e&`U>pٖp ]:uK,٪*5[\rONy2V_Y늧+I vJ^~f됿j}D/Īˈ"ԬOY5{'5|54uJ#Mw6f8qhGߤ !(/ZiRhejHYXҨڮT 0 rlݼj|5evjRTZ.D0\VI B`ƱV:WB'aYy#mhҨBDLhd+8R\J=ůMoԓeٍH1Yhl#m˗}ÎFs1M"@\]ML cg1Q $hD'|ЪqCA"bKq~BCl7DPQk)2wbl-ݪڍTs#a 4~K#&T4ܬo("^@%:sC9"ް.,қpi0b$zmu).i᪇&}X|ף*X)oUcT_yW؁>u^^\zQ)7MNFÌ`@#^s qlc];Yqz;$IL˶Ym0 zN 'KA *C%"1s`keV,[2hQ93 &*4PHiiSbL)ؗxHȼ\GZ1"ʲ~exV> U8QD2lC GK }Ck>5btdP%=5&݇W>p  'ߍ{*s0%lA!4QcW{9 -8bT ]a^o* -KY|>Z* 9$֓V̊J'nr.F.|fhGzGSɈ}3~w `[V`y:oL]&%9+iw`_7o֮9mMis6Nؑ "Q[=%dԫp=>-_0Ti@0D0 `2kB|UٓIx "_J ]maIeE6IҩWkOqt[3 ?)pC]SvnO܁NYps&´ݜng?JLy.wF ]Fϖ# 3tQG"olw#;c]0aYX9YzE,0]J&ìTizCX. vSaףD6(JyKJq_V}+Iઇ8聿WoyE2)zAۂ51ݾ_^F_7cet 1Փ栯84Kr_8*j)k-db4[Na棎@S r'XZO[bgϻ}B%UK2#wn9}&<}u%S/%x4lGU+{G ?~0 D Mc  q.kʄR~U8pff2i#ҤTW9Hr=v`؍@2s.rgtt#AMP:3^‚ai7J14W=ijkmds|Y<>513K1 !J7oA4"< [.MX^$]{"sOfY #Kt@LQ0!u> @.jv8on%HlJV>/I)M"!C\G8w!`Ք(R,)fk{6.L K]Მ6ʍPkSo8;uˍ9LxFW!є<ĭkoE0!LQEBBȈ3!J ܄SB OM4XdJo` ~&}j8S!H[9pۏR5 gYR!$˰HKPN&( I''FQ1~ f>7Kq?kOEeϖKugD|D<Č#ƫiT(B>&,V-˅4* `|=Lҫ_&0CPy=nav>I#"{0%tqo5eFJ)(2+X#i98(^c|\=ȁm=qٟ@+48;=-N?o:g>)5ʼn?#7$,qr,q.u`߁nw<mf)r PWC܌.[PB>B3!4RGQeKVUiC*Z0khgxB7 HDc:I=Jњl[SA3I Fpu9ǣЦZpQ훺+p 6^s2fzjaj3b+W¥|n.^~iGQMMw:71 e"@Mew4\ڥ=~1TwEu/RJޝm_صck!oUo(Sv8Y5rE2[D L 1^,<5|jõ[xzxfլ2.4/%`_0sӅSQ*Bv2Lo1 ȟ*wD: 5λ:%w9BC,88z;^f>~&=pg,%pRG| o?];?o@$枡Бf6H(V =g. J[%dYq;ǜ Y|Zi7}0 ~_/s[j=P^b;<%Źgpkbҗ86 G~TZceoAã\+nH Ul)O p1,BpSJ VHHDbaXl FCz;)f%oBb7Z5g:p3k EU0n"66Q\ ;@2حPMm^55/ ޅGf.6BsuO0hxR w\1/b(iìҐ74&opsزy V`1Ԧ<^cbTSg^#\ @OÖCd%x4! [La;(0;cOEܾ% )$$V#CDHciƔ>v/ 8$~;h'|9lL]:_=A]7 3~i0p t&N2Ѹ㎅ػwXO8ꎨjt)kB& zGQ+K~w^P(Yyq'}iB@J)5U@ w~LJoX> `:1XY?L)??%(š~%`- 1{5 ]"4i)30l:v>;|ޘ ʚZ YTR.V8O>1RK@{fE0"KVM AcŪ% SLIKm犭MC k bsLDbG"l7θeO;WBLQNW?A B;1r\$-;Xl{oNiĖO{ c&v@p`?⎡J U994cq]Uo#H#QvK(V+ocqi0OeC 09 QWfZ{^zK)%٩'ޤ~Ĵ}rlzvg|kw䝧}~-7^_ܱ"а ij:;x-]@юKەN;%EX5 { ˳w?#Bvv (St:+(4 >EiM)s J@6vA?"l~7tD O;pv<6\Ai]O!F+{S_.Νod;tﯦmB4t8$N7もv@Y3`cCqw0)(( F=C H.L@.4 ܹ8.|O + on.tҖpW%'|A͂wz[w_~&誃80KdsI/)<\~qw UjAf2YY 6.%wNNU8ġEjeA=}3E,7Y9PdP "vTqz­ro(~jRZ<ݍ'pԦ`ꎭ<ߟIO5F"۱/5|Q_L.Ä'1ØJ|ȸ=LCS}ߵs$d0TcZ&fK X.gzz~v M6m`'%vt}+)NyoY7!#UhRXA zX36xqk ߇uy6nL1:s_c>쯽v<}cL[A4jQnÖ݊EoSt*?@(^Ѯ~^(L?MYe`S,dsC4不%)gaY`v'#Ѫ !}cL1BpCѤ˛v(m^U$Ψ_<*ݸ6'VFM ϕΉsFpWi`'ɗT' B)/^SM:ظ3CLn}%Vs-|~MȩAXl<%ZW(*pE%Ž=#\nz[׷iK O8Bqijcdڛ<ݲuw!9;3Nۆ3N_cN@@ TP(w4A]S.d@g>T]XJ  "g8%uPς땶Yj/o>р'OKZ|kʎm}񬫰q ~n Pe(XjLUZh;,E"쎩Yv"tPkN@NAܩ۩5ˏ~OǦ/F Kڱ1lyL%uk' GZXp:r+ꢓ"q@ Q9{շJZDc~~wEjNo9$4WD^C >VEq~ @H|9- ;S?ޝb(n@k}&r8\P"ȭ:+t矛)]v. K2wε>7̥o1<Կ1G_D•lyYT 9o2 |>nKEW>C9}K*~$@]xʯu^1csv^=ݽg$!m;zmòeTet8f, řp|*ț_O&:SHs${}jӤȵp*Xpn#/?Avq)10|ko5= Xƍb9N=O/{|'+;g`U|<}v!X`2eBBX&D<_sh:g[LAeRhԼ ‰`Wx| b}Skx<BrJ)j^tóG[?vn~"iܭM!c}kR1Ss#vaXYN gV+5xIjaXx41VȖ$ÞU0\`46C1$@K˱25CVm("vkTkQӆ&y[Д,H4 m`r~$=gFZvZuǵZҁnY`O(1-uE`?A3x} hEүbq)B)'d8l*nwA*~ s̸t=] ;njN%g y ăCɓge@0~0nvT;p0I͸>TIam" /7.]䁿]F῟} }uJyeS_~ } ~yƮ8yZ.67VU"swiرc;Czzaɲ1}$zN~B*ь|bռ n4Zc<#V.J \Oj3].];zW%*oLUثi@y{t0 J0NU#\VSV?{gql9.q7}m+i<80 S |"1HU ͋Q K jIjJպnSK.{!q)P C;  SwmkOÅy5KeMFa]U}Dk:0safȄ[OW8(I3M?YޛQNB]%3#X[6sM/]YvdVYܛGVz 7%qWQ&.RHu#eӔpk _G][q3Ƒ'{㶅$cc@[Al88ȔL8noLK}T}pm⎞Xs~i/7;pZ8n*@'Pڒ,1ԬaWDZ qX~&kgry4hܖʣ ^:V6$\tR E<.H\{7La"tGZo`_no>Ϟ)oj7o8kcȐTW$q<-P낽ّFō@y ֖ǜ8iC [kquEB^_>S1+#Qʄ!. R ՘mp,_ɑx'7IJV_ ߺFQ`[ ͗|{f:6Ji1G@`7ujԐP%PsŠ߂cs\ne0go)XqU# EO|áSzT.e`pּ.B%)pS\*30NYZ^^WHqX7ev]w`OQy L @ucCHl⡇NņIS~qzqacc o'嗎=={qu)C&66PKe&XʍjB= i@⅔ 3H5ͅk@?^L!PϖСX]24E`5/TF_3圧d`F>VVf[?hB&nƏz}F 3$"%Scxw \mq.SlA-) +HLe[ 1Y twTC.6KeBJ LUw)Z[m:4MgYB< Z?+! c[}ccG~OsqΧBच 6l:ޭXdF]VS[6|k)x~.RJj[e'[9G-2\0>BS\VL/ ЊӐckˑ2Y^omӈbe[[qGpsA/*Xg=0ʉE$45]o ߇p+h g iئiOkw!b+{Z<{V>7>ӳ<6G6O`u~̳JsG{P0J6@KJz Op$;"pmL :pŷ:MJ!|ry VuyGVp|nP#XkgׁgI;ql@K}}t?;O#_9 S~ -qwxEز\aꇞ8H5X(8F.N6_`/M$q:H_ ׭isә< _e#)_lS0oT )s .W,9R+ F4a[JW,;@oBIyA}۶xػޭ8mJË80sfOd xqO[sɿ2';9}­|'ʴ:=>Eَը[m"ON\Ker\V}b98ص6{\Lb^Ȕ 3csqGO^,>mn)ˍ㖍k[qr{\4'ՊuИҋj;׽T}|ޚ Ѐ:al$!Qw:F9T-pf3 23ʱ?5ܙ!`,>|1dberopc bCe}Pc)w3{Xp]&R]~џ\^e٪~5Ex)mVja޼W0oj4g">y9гg:#JȻvdvNI_)7$*8HJADY5vJ AKߴA&ӁN9߄dFY]+*­Q+>3>N]' 3O^uj%1`D **oǎx%عs/2u N[cFt)ċGx1USEH nXg{@:׏dgjgY?L&j:$`z?'sp5 ^J\ͺemA0*sorܸmǐSZAۀĀS {HP*}'?ro?#v ,`$ aixrWwə',GO,)i>ԒOq -*MAp.̬yLIۤ4($(@.,np[?+ߡi»B\YB.4ޮO~x;~z`Fl[G}aw-z^A"ZV]]-4e̟RU4l_üVP\PڣqEo|_?4.1[d#QwZZKȄ {eԗ)N_/bUBHG!_7<7z K[{׮Hd6=l^ڋ;L݂D=~ʣKUڌIn?Etه|7,_pB)8( }A]5$|ȘX˲"xbXNض*[EthJuX3z!FЕP׬7ӌ+C3ܟ+*ްZ ,n킘 .aGGg٘O A.+`l7M#,CwqGO^,:meG%:"KOD6s !*_(+ <>9 VtH"D$7ŤWm:J"u%(3a(}<dխ'~5pD;׷o,dz*B͝i `4nj4 w6:ZbƁɛ/KV?4@3_;- lnŲrutB^D V&]촚VPnP[F%+kƃrp;V[ۀ;J`cЏ-.:>cy&Mj$nd.л֏D,mߎ'o%Yހ}>!7 qًŋVwڦV tDՒZތO:u/׵{G=:K+X&V巉cPg-䒠$oSnf^mU>kkSIivtm+5 <7m.p@`hc U=40X.,jLYs:0U!t?l/g6[,ґf3/[f?ƨ "w4B'TE@r9-ڮʼeb>*oU ;}7+U:kԱB4T]f~o AUSioNhߧbj/ 8]DHN~R1X` s Kg}0LO`ڷ`vEOukv;IgBOD$܋|n&츃;a=0w,VGP l_df{j-gjъyצ!Sxa+R@8[ȔK>Sy `q?uBEp/{Fp{v?| ? 'K]Fc?Sж?qQxwcѧQbpβXa';]ߔY"r;_:t\G6s T?~ᖑ3%Ѝ@%"LN:XE>t+CremwՍ\(6S@`Xo?+_VJ\"Nh8e#Fan6uۏVQ F}W_WW?2[3ZL4k .5J!jVU~f^/ęM'Bl~ 3|yFYkʠ$}$%ada0 Ob`n'|!rTU6 _ $e6=aT> f3ӕtAI31HSYZ|fx}d./$YL9 ΅3÷GBUa66#'Xi )45D2|/0ǝ ,Ot>z֭F F>0] ;G>w0Ns檻gBZ`^uy @dT%tP*cLA:3PzVut9㥄\l>؇vxSyW650VHTW1`2@k< 0(p_#ֺ~7Mo~]oNxi`FڃSO2 m*iYV=L<Ֆ%C"; !cG3>&11C?tkXX3Q2[}& k0=3G Uug*1\()xE,)ڞ\a|lg< 3Qmg^{]On&xf3W[}֟43y{|s@ ;)frD186k>'7=Wpju7`Qca MuysoYQ܋;3 3ࠬ# BQ՛? &<$WȍWc@C$^`b6L W\Yf 6:;:3|Gwu >UU}H"df nWΠUhbdUiӵsBg`؈#tZF6 ceJ:ǘ\9X^@уdEow|wو^]tV}Ex_lYnw__l~blq'ÎVBq;M{3$1 0MJ7uTTa7:..{ $'u&7#Keۀ8v 6ʏLl <0\tf$3߸^Wn W7O'mjS龕ןV7.KUW 7{p_ t\&ʕXzwCh,^p!r&# 6L.T@:Gܡ2O IDATn@|ZzF) nNp&^ctrTG{o;.x2](NzIظiCIom8_O\6_s\iZ%X eB #/iNVrTWiD=iNqcڍE7 0VOb>m]͒F˼Z-LRêBJQnzn4@LJ$^|X~{Z 7`+xv5MVX~A9>bU \u:&ӚwO]cHm^،;WutY w;ڵ~l۹5f ÎN{@Z]y[Y{={<6M*,_2ڨ%Jv*pR#(̖kDry=`T3#&= ;;eA>@> Z-xgDOSQC!#S^} +i1^@nz=8_0L+WV' Hxw_Yz%Wa~P c/ 2KC5`F䈪(S _K#Dp4[iå]M^ite nkx923JS7gXa frh~qV= gٙXs˚we pD5LKtPf^>w7? MSVt9%\\v}I iT8-M]!𗁂?ʃe7^~{^&A3/妌C%bzв yʄHjToJ_*7/sni?8g#;K7}Xشi&aʕ*" '.F c熚ziʴkʟʽ/ta(&l3[ޝi]@Fݲ\WC*ZݖaWp)hrTxrQ/ԒfG|1;FC/>U IQ˛ʂ@s໸Z5΋;'}/煇\eJ:q柝]6[-[Fأf Wx>n Hܖ8ޤ@/Q#F{ 038džB[5):X6ʲnVDZ0F[yԂU&ɍIxT[|1υ٠ gĈSatZf9Dד2k^*뀧w^W]mFu4NӰrJ;?Z|Iä.mhТxqd/HuT-fXKc~Jb6KaΣV;a֫Ԭd}2݇TI]v{ 2yވ#Ds%yO xGu`=ﯜ|pI&kpϟGMo9c=޿ _o@v۽D|'LgUWx1?S`@_BՏ%MvAE~iϊ˗t?3ynMylnܬ釀PU 6M0|v|0$K>,䐞26k_\u'N|Éoi}oItR?np6[8p`*yk߄(pd\ s';p=sk:uuM3au=)@TcF1(ΜbFTRhR(H5꤈DDF[Q\q?7ZkM  O Y>iMaD=vsQpmZiM8NĝKZX\ɟ;]r\OK]2(p7 z<4Ay30j 1H՚tND#)kv5xkND^NN%O6M^$_[͆ @7kC8$@ XP^~:'}~Ӹjj&$~@]:a#0Rґ1Nθrʏ!Yy2 ysӎq/ #o6Y\eC^tuQݳY l|x.pGn~B5*l9d Z i ]LsgV ~ C_xFuV*r.k ˝J\yP3!Q HP$N%|]y!&qvEt rO|38g;/׮yӒ%l:AjV  ]L`){ׯZF*]t e 遍(!P{lNA}XYV'\#5k͹n#eJ! -gO1r>ڽYJ_7NĬգQkP -,:Xھ}=lIq>zGwË[ŭâamws,^jԥU5~Iۿ\k_WWd[Z/}@-=*];  GRNU*MvwmWH&98 h^~c!ڱhʮּXups?ӏ8ꦣ?v|~vkCO_\V=ß*hM96$34Lp' |8+}8Y0dl5?cQy('ʯaMvj/q42QFa' 27R!w XFC2G }cMyS;H|FugW.<ΐ>`7r5Tܕ͎ & Fwsv@=.kUo7'dl^/Կ^?w{\߸ȍ F{'RUvF4S5{*DU IW(Wz{1p+n (GCfG/h3<͏Zk0UϳaZY of/I_*g9 *@^:Ou'vNKwˇM)}x"6mw _}scϭ:箾}W{|:$mrW`YtMUDwl(JWrMy~죯ꥺZzC^Mաtg dBqSF(Fj#mYK1q [6ù*;O`2@w>Eq&z*?_l}dS/l=XlxϲǗὟ~/~?ah=_ 1+'KJ bWZ6Tau1/75˾V}CnÅqu3b /϶+j*Lm75H0k\gwFw_ұg8N=FI^JMόYA#=h7~2B0X2N.V::Crqvn#uvȆB` gxݾd?}`36LVZU٣r>?7 ߩ뀽 7g"ɝ2Ojc~z&s!opRL>KYeڼ86wܸ )O}ǓL0ϧ`gљv#E.J. tDXpd#6v=^ekױs?O,<$Ƈ׬޸u68ht+N}2?d':ܞ-H2#? 6ጥP+6Җf0+X>Yy?CiWaK" s8XFx}9)O`qw{iE/vĆ]6-?lή~o^z7\<ؘ̱g 4\}i)XR|-9<΂҄{/(~_H쾚$?$( GI{N~j)(dRr_{ȯ_ Ԁx(=y9ˑ̢,Ts*/KL`#a}q3U -Yp׎ظF/[\Oi9}C [eM_\Z9jg\w+\<Fgz<5q'\wHRrg =4֡!ңSq-v|[.Ty#iUO y֖Au/pףqWroe_7r[A<)oxFD<yCIR"6/Ae*OLA]HWz}A)'pրj*yqSe?w[q`|?+,S,F }~'Gq/4ǰvG>oW>un>i_;\zi'"A샏ǰ}{{f??`8%: ЄUa 7 ?zy yiPwt ;][x"^iOt~E2RU_UOT2ܓw#6|Lc,/ ~?Ƌѥ~?r x4;g`bC >gW h2E;8 H{rX583MM=++A-˚ +Qk11ҵZNlTOLrN̓w8ݿ8,:ZG"Rs&6t/͵gMA-_Ojʪ}%&TXzAKQWDre̓C Ꮬ pZqFp8CV>4q3pm ٿ ls?myu/ivo^\ \`WUGtGg{p\Uѳ/ HLLp:&kyr;C`[u! #$OUg@oşaPE-wfp3 kTqZf~^zP?9Ozw8xyov}1>OW>?s?=7/ǟ}Io>s$pm>212/"(/hս13Gl̂f[Ib铛C0)_+G&7b|1z&:5:QUk6ᒣvS\ VV bMޅŽFȷ1K6c Ɯ/~<ʃ(SB=3S~ Ѧ X?i$zSLi,'@<#^FAELP]w__y·pқwo^>y^{kOG~~+\7?OkJyߕKqL5U7ohힷӈgL]2A/p% adthN6SO"tLbTB0 *H2|‚_yؔ2Q*-y8S{bSi'!=o=q/>Z?q6[ӷV,>X"ϛf4"ߗW.(n;3e@v 2j Q'gru)Ek=R`LE1gX1`A7 _j5L⇩T8zgaurSpSNSg̀ʴ7xVjgq߰\V]o0py6Qh#b&؞:C.h:j^G_;zՠ!l@ 0&_Z3aܴXj[gVlwɒ{,:W*ΦԸE N 0R6.)@* ʠ1plD+r ^%׻q[6_=l~oo|*|8p _'s >>qXdK8Ue"oַX tJ'.&-0kln} ;}th> V!WP]ƥg"Aӄa+b9ɒ_ _/'\igsԞ/M %$H726"׏3x IDATE">ij'N; X 84CdKpGN'o\_6[PG'zpȶ d ۝.svWu4߂z띆c֬+Mg`% w#N`Ĝ:`W*Qy?о3MKTGfR"B/FΨVg0rϲT B7(W[[, jASéZ`-'Tх{9FrS:8@=,z*$T;Ճ9NbsgC)B͟(|57)@.Q8yc~# pK [X>]v8M,q8~ 𮥮g|V~O{lLϸ֒g~n]޿쓔]Җ4ߒq΢ "VyIt_na,$ a@v{XǤSO3 =k{mP>~Dj&FTڡ9oHz)wC-&p9'ʛFe5y8Wxt"m>:qʒũ%> G++!C~qj@~@ߑMq0$6u75C5plK)/u;WQO{F# ŕ9(UG+_GϿ @~]aHSlέ[ut_j%nSI9r#m?yv@El0`>3ϛǠg,ې>alO?ĩo{9_| }a>\TVr=PI U鍱腾;?4Q72 3m>,/wR_{;jl.@!3ΞUۆq:Z&5,8=2Q3[d/wЁx>W_Qg㿼X>38e~ mU> ܮE!N68Sulfó1u~^Ǒx`4ՁUD>,=zLuZfa+tvdBrWe4AQ!ɟEzƯ0` =p";̛5r6@^|6͛銋qqas>?1 v wsa>=i/(xQ xW/ܺ% Whp( #n*%Y+k{B%WAbՠslBM剨shPu.Zn0"MK-װz6a ɪE<5y:ME!J bi󗿀?]pi~ g\! zKF7~c0(#`|ՈQ AL7kM'0`&0t~4't@zJa5FPr Ұu6A;nY - ^@gڣ yNy<4X~>VϛȲ&tԮ~q?J/psO8s@ۺG>qDoX 6ffK9"yÀz<gF#]%(3BGdzCSQX_OSlɅ2 )Ӂyk2[U>uD=5F{y?xQDb!Yv}+ M`Iȷ(*JEQANVb FKyu"r`p|^ rk}.I5>ř|#ܽ5MkSw0KЉ{Ny4P`42LZ42Yt7a̴ "D%͋ӯ7jL.;Ihi38GM˥VVCKh=DIΨ;-,f<ߕcڃ EvUe(+](ф euʰP%njr" Gi['# E^Clp8V3GϤ[]4=e2{~f Wo :12P]S1Wk |\իudI/-F۞V̨/0;x/#ǯ3tsʍpiNk|W;:wLb C']_>]$I)gPt;'$ ߛ Ȯ u$GHò,i'KL[NYOD@KsWhZ>05*4_סXXi\\%/<A`_*C"Q1 s}9{{T:37 eⲕggaeצ)mzk@e'>S:pBe8c3`,>ǰ~ `=\DTJAfE 𮔇 r2,+~ȺՑH_5(FH1qY?>Rs@+:VVB0Ԉ/3-enBD\]I:\''_*6(?_@eg [f0AjcXxjJbbVd n|<֨bRӎQTڠ ˌLEs<+beEXaA@/s'&a8!0zqGF8}'~1V_ h^C`:M/@?̐AE>ĺBIȫh@/fM+_?죷2f "qń~C+73-ru[)nft?o?X/NpsCX0s"ȘG0> ѻ0 CPNy-9l#S eJWN*w{2P]EСHܿY4cTtD\|0xK$R@FSOrڂŞ7ȃ:Ea~9h:|zNG2FKxj?g!hx6Y|!&91.iαNVwB$zNXJuMfSCַiAu"Xj ߛv dXFv&& LPFG) Uy ɋ=(ی?vfl%!+3f1-X)͙N5\N <Y˄r96@{:W(aCe-UHkP!CçJ<\ @s̓k`vO'/]yK! pN@\\Օ7%5]/9ԋFc+EcVwax AELƲ}2x).g`R~%C0 @qۍ@bl}62ؾV/[gLjG %){#_BOB%-KMg$!x7px>Z櫸+,>Qa~ |-tr -u ްڶaJau~MQ]XV@:pkL8p辅Zle U~^ @3˷ U-_ ; :$j๧{4$؍.4-$H\.<(o:\ӱaWU^̆%_*c6 SZӍqJ,Kp4@|H?hNT*V,$k z*>2V r}UXΛ"2C~)`(Fҗ`CV'w;OH1`iJ5f6z>ak\rZ;SwͳRG[J.+L%k{|Qyi;?E>y{L3/Iwkw? t7gs1N?pr;ڛlr)szF#"}aQШз!;s|^灷1M0#/] X/S\ڵ)Cr^bs) cZ|yX"xO%B7S bK *X눉9ٗʇ;^|$K$v0JWSW'H-@ZZkP{!B~y g!H8n%ލr@zt8ާQQP]umK2xp.l76Q^'F8'[:9enr3<7ܰRAsn:K{xb$)323 .4{SR]C ({=vLii!D>u)ʃ~Ƚm3˧1(ѦKdztًN yALvr :lf+.{^q@(#8߶8r)PDj蚥jYL<˺nAD-<ߺ|YI)6R\ "Oz\I"9]`ǟeQ 5M/3A}С$)c%s Eԑ),"Ղj{iE{o̞i=3瘡vd?POпT}^;krD9`Z#N(1y0=&N n(Ehg%&# hdyD{;D]u<Z?yUK \qǬFmc@)X:Ĩa+,ԀAʚK4i*y+Xa?;y쟹M~YrP7`d>R`F 6d9U+=U^=m 7< p_IoU%M|+O\?A_`/\onnGxie"3EDz{tIF"]]BZ1 Փf#Sifُ})%oLaK#VWp)r]C)rykv,dz+8䓂7Wz_T#t1KFq#5fqxޤ8icT5 8dC*|r}J K5`=?wC>^n/ L?4)h_ٸc NsZ ͪv^] `%Є2@FIJڪ2N(ME=8~ep]QyPyQU{eH:V3v żxj 8^4%in=̰̻!"2hE~#0Β]#YQ^g`$%? wyÐEZ (_*䋖MkŸ1{yfT k?4*!z~ٙ|*LL̦ʚeaD_FA"ϋl._%W2>cPs~E3O5C/|Sh"`uJ>VfK ~V *SpSR!$b/3gl|yۯ{3SOQ iWԵ7#E| {WGx=GM f4-V|%LoǺ3h/zO$nuAlRd74|l5;(Hs&N:Y -a~,v|C4o ~kY6MsE_@o/"R[0?wWU)e} ,Sϗ!.X\J9?e [ФɂEO{9ȜG&As}Yw.Q?xJ0mH @-g;ӱKt@+S҄-#.clg.eYFtyVDwס*iLI%[G*1;^k  U6xoRH_o uQ{<[ wk>6$F:pb Qvns8Ϸt_5:SiG T.23#iU^6z>ܩʑ]hT 'ڔC^0u,:UO3[Ie'6NGA5c'op;zimkA_uJ+qtN{hsJG\Izm R 6j i47.:,_c.<5:vTncmG7'ˍ  $>UzJݹLԟp)?xxVͱXnĜ'|K{۩QAÉEGD#"\N\r pH3JyHouL+,_<*[rwyvܳfjedS6o;'4V3c~^K,NxVFn|[Hߟ*hOS/Ș?;~Ξ\F7'*[֛"n<ѐ{+r+F2½Y\>Fe 7~>X>SVxBX.9`a#<6d x`ckϬnu0;0SoN`7nIگjG;O[cԣ#98|\)FJ5QV+p>@y㰢$|usP4AJ+'⇭Z`ycNz tZA1hm쀨Dck;S(#B,*ioZlaƦ=r|C1eb~Ӏޥ̪Mj>8CcqnÈ($z3/=Ft8{eǜT{=C#=S{Q7wfhup^v8?C݀C'd#̣m5ZWl=y҅"< >(?p9,_+m$9N:,ӝyo :uʲ[؀l7Iʇs&+{n_VOUVRusR9(D)r-Sf| '?7g°B˝,\+-n%4 JF--Vudw6y3Tۀx.k+k\,inh]}.R,FPUK^Dž!$"k޼X嬙3<ܿWV7hd(4cx_~8467x}c8㲶6~@Ɠ\K*_s8Չ ޫa2/,z J>$"ңl$1$ f~mEu.{. ?.:G瘙^e9kj~@;3?MhB(CsAX|7YѰy^==`F0q'h5JQ)ȧj#aYxL̲f; qyQ0ӎ7hv%oo}S-(ofG@k Tޢn_^z 脀FNabx6t* ] @tH0k'y?*c& .g >)B/DSE=x֭,~B|6M}t% g!Vu^o|P})/S&2T|Ŧ0;vu= n٦_Nm@~NBz`VDxz"u؏zͰy :45^E 6:MD5 L'Rb z]/_k%Vvs(|ca79YЮ7Ԉ .zC>/mM̌eA6pėk_*b U'[+ T9쬔@{b\6:7v^ ^\l^89úLXG9__7Z]*nW+[F&Q^[l` W4zۻFƜ7>Xe0Nh =R'p%=NŵO_ ImC+;; =X_^{~@T,pt88V8 *JqBFQ+l5/sG.bKk/;o9JeӝOxvc`*o͜ޙļkqN c❡]WVrb~O|' ZFUIzn_wP:Q]ͫ¸'D7{|qT :cQ5WlF<!rCo&6b*o&fbJ_lIHPҙerx*¥Jx ?H|)N .!X꧝A=ԤӟU5E댄 +;cCACKnmbZ*AYFkC4Eu4b TM@#:@?%4TLwQ^iJ4;R#J Nmu9PbtJ^z z 0W7ltKî`*Y$(k+.Tpv5/sgul{4мC\:n ,\(⋈SuSP@ϘÞ\C[vg #BJ=m51rjg揫J"aJ3̛vOyU m$7]}5}]|45i4@Hc1^~Y$=m}]͸IAc P7^{l 5h m- `s W"jS@$f.5z+Eq=U&0Й `*i"%g˲ƏT#Pu|4|"}גG/I5./efC")U'R ۔A3\joe_o*Ci4S'.OoP ɨSW#55 M0x򒐰 "ѩB ~"xg',X8i]f$U20:gVGT A^]Ln &rB ,{2+/kGuj.!9JZy/c'P{ [/fk;LzS]s;ZƜ|{.x-?(Zi6 xBP)|3lD̓#~|+;r2F,qWt%tS<%EKiC&s4HA`GDx,B%@*:C*T+U7mKMӍަu/KMƢ(ˁ |@u:|+$sYoM> ljdYyͿfM5S=/k6;9fu# ΩVޒ9π\+ nj6LoiNΊA Q+T =-~jj:ӝ^Y RN&gA_{ piC΄9IҜӊIt7fC~^jxZl ׇ]G\ ؁tB%z9[#a1s8M'p_ٍD+HךK *Zi}jk `54W|64@:xk8y-Bs;Pey?> QVzς {h}^6xe:ꘜтx6E9z=\'OF\21!sԭNըd%kLeEPRs0%Nc2(MyeMU~ +]{ېjim:/N҆6UHb5;Grv5]. ~Dcv[..0rJX2  Fy{uuC!s`]gJw| ~KQ.W%fIpuS{#CT@w]S+XYd5%cmPb*0w$Kk'Y<dZv0&GP/c6h->/u 9Nk "f䬃9 d}8{wwenh#ҩV.i2m·0`xJEr=tb_aE#-¯fWcQوn)]Ѝ0G<*lڳg1ît{띧xqu3>AF.Mk>aM?u}^1IENDB`( 262222F2222222222222222222F22222222222222222e2e2tFe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2tFe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2tFe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2tFe2e2e3e262W3ј22222G2222222222222222222F222222222222222223e2tFe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2tFe2e2e2e2e2e2e3e2e2e2e2e2e2e2e2e2e2e2e2tGe2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2uGe2e2e2f2e2Ҙe2W222222222G2222222222222323222G222222222222222222i2uGe2e2e2e2e2e2e2e2e3e2e2e3e2e2e2e2f2e2e2tFe2e2e2e2e2e2e2e2e2e3e2e2e2e2e2e2f3e2f2tGe2e2f2e2e3e2e2e2e2e2e2e2e2e2f2e2e2e2e2uGe2e2e2f2e2f2e2e23:223332223G2332232223232222222G3232222332222222333uGe2e3e3f2e2f2e2f3e3e3f3e3f2f2e3f2f2e3f3tFf2f3f3e2f2e3e3e2e2f2f3f2e2f3e3e2e2e2f2uGe3e2e2e2f3e2f2e3e2e3f3e2e3e3e2f3e2f3f3tGe3f3e2e3f2e2e3e3f3:393333333333G3333333333333333333G3333333333333333333wGf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3uGf2f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3uGf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3uGf3f3f3f3f3f3f3f3f3f39333333333333G3333333333333333333G3333333333333333333Hf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3uGf3f3f3f3f3f3f3f4f3f3f3f3f3f3f3f3f3f3f3uGf3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3uGf3f3f3f3f3f3f3f3f3f3f3333333333433G3333333433333333333G3333343333333334333Gf3f3g3f3g3f3f3f3f3f3g3f3f3f3f3f3f3g3f3uGf3g3f3f3f3f3f3f3f3g3f3f3g3f3g3f3f3f3f4uGf3f4f3f3f3f3f4f3f3f3f3f3f3f4g3f3g3f3f3vGf3f3g3f3f3f3f4f3f4f3f33U343334333443H3344443333333333343H4343444334344434434H3f3g4g3f4f4f4g3f3g3g3g4g3f4f3g4f4f4g4uGf3g4f4g4g3f4f4g3g3g4f4f4g3g3g3f4g3g3g4vHf3f3f3f3g4f3g4g4g4f4f3g3f4f4f3f3f3g3g3uHf4f4f3g3f4f4f3g3g4f4f4f3V4К444444444444H4444444444444444444H4444444444444444444H4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4vHg4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4vHg4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4vHg4g4g4g4g4g4g4g4g4g4g4g4464444444444444H4444444444444444444H4444444444444444444H4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4wHg4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4vHg4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4g4vHg4g4g4g4g4g4g4g4g4g4g4g4g4654444444544544H4444444454454544454I4444455544544444444H5{4g4g5h4g4g4g4h4g4g5h4h4g4g4g4g4g4g5vHg4g4g4g4g4h4g5g5g5g5g4g4g5g4g4g4h4h4g4vHg5g4g4g4g5g5g4g4g5g5g4g4g4g4g4g4g4g4g4wHg4g5g4g4g4h5g4g4g4g4g4g4g555555445544455H4545545555544544455I5554555545555555555H55h5g5h5h5g5g5h5h5h4h5h5g5h5g5h5h5g4wIg5h4h5h4h5g5h5g4h5g5h4h5h5h5h5h5h5g5h5wIg4h5h5h4h5h5g5h5h5h4g5h4g5h5h4h5g5h4g5vIg5h4h5h4h5g4h5h5h5h5h5h5g555555555555555I5555555555555555555I5555555555555555555I55h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5wIh5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5wIh5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5h5wIh5h5h5h5h5h5h5h5h5h5h5h5h5IIIIJIIIIJIIIITIIIIIIIJIIIIIIIIIIJSIJIIIIIIIIIIIIJIIIISIIwIwIwIxIwIwIwIwIwIxIxIwIwJwIwIwIwI~SwIwIwIwIwIwIwIwIwIwIwIwIxIwIwIxIwIwIwISwIwJwIwJwIwIwIwJwJxIwIwIwJwIwIwIwIwIwISwIwIwIwIwIwIwIwIwIwIwIwIxI65666666655666J6655665656665655655J6656655566665665566I56j6h6i6i6i5i6h5h5h5i6h6h6h5h6i5i5h6wJh5i5i5i6i6h6i5h5i6i5h5i5h5h5i5i6i5h6h6xIh6i6i6i6h6i5i5h5i5i5i5i5i6i6h6h5i5h6h6wJi6i6h5h5i5h6h6i5h6h5h5i6i666666666666666J6666666666666666666J6666666666666666666J66|6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6xJi6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6i6xJi6i6i6i6i6i6i6i6i6i6i7i6i6i6i6i6i6i6i6xJi6i6i6i6i6i6i6i6i6i6i6i6i666666667666666J6676666666676666667J6666666666667666666J667i6i6i6i6i6i6i6i6i6i6i6i6j6i6i6i6xJi6i6i7i6j6i6i6i6i6i6i6i6i6i6i6i6j6i6i6xJi6i6i6j6j6i6j6i7i6i7i6i6i6i6i6i7i6j6i6xJi7i6j6i6i6i6i6i7i6j6i6i6i777766776667776K6666777676766677676K7776666666676666766J776i6i7i7i7i6i7i6j7i6j6i7j7j7i6j7i7xKi6j6j6j7i6i7i7j7j6j7i7j6i6j7j7i7i6j7j7yKj6j6i6j6i6i6j7i6i7i7i6j7i6j7i7i6i6j7j7yKj7i6j6j6i7i7j7j6j7j6i7j7i677777777777777K7777777777777777777K7777777777777777777K777j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7yKj7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7yKj7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7j7yKj7j7j7j7j7j7j7j7j7j7j7j7j777788777777877K7877777777777778778K7877777787877777787K777j7j7j7j7j7j8j7j7j7j8j7k7j7j7j7k7yKj7j7j7j8j7j7j7j7j7j7j7j7j8j7j8j8j7j7j8yKj7j7j7j7j7k7j7j7j7k7j7j7j7j7j7j7j7j7j7yKj8j7j7j7j7j7j7j7j7j7j7j7j788888878887778L7887888788788888887L7888888888787878887L788k8k7k8k8k8k8k8k8k7k8k8j7k7j7j8k7yLk7j8j8k8k8k8k8k8k7j8k8k8k8j8k8k8j8j7k8yLk8j8k8k8j8j8j8k8k8k8k7j8k7k8k7k8k8k7k7yLj8j8k8j8k8k7k8k8k8k8j7k8k788888888888888L8888888888888888888L8888888888888888888L888k8k8k8k8k8k8k8k8k8k8k8k8k8k8k8k8yLk8k8k8k8k8k8k8k8k8k8k8k8k8k8k8k8k8k8k8yLk8k8k8k8k8k8k8k8k8k8k8k9k8k8k8k8l8k8k8zLk8k8k8k8k8k8k8k8k8k8k8k8k889899988888889L8889888888888888899L9888998888998989888L898l8k8k8k8k9k8k8k8k8k8k8k8k8l8k9k8yLk8k9k8k8k8k8k8k8k8k8l9k8k9k8k8l8k8k9k8zLl9k8k8k8l8k8k9k8k8l8k8k8k9k8k8k8k8k8k8zLk9k8k8k8k8k8k8k8k8k8k9k8k899999999999889L8999999999999999999L9989999999998999999L999l9l8l9l9l9l9k9l8l9l9k9l9k9l9l9l9zLl9k9l8l9l9l9l9k9l9l9l8l9l9l9l9l9l9l9l8zLl9l9l9l9l9k9l9l9l9l9l8l9l8l9l9l9l9l8l9zLl9l9l9l8l9l9l9l9l9l9l9l9l99:999999999999M9999999::9999999999M9999999999999999999M999l9l9l9l9l9l9m9l9m9l9l9l9l9l9l9m9{Ml9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9zLl9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9l9{Ml9l9l9l9l9l9l9l9l9l9l9l9l99:99:9:9::9::9M:99:9999999:99:::9:M9:::999999:9:::999:M99s9l9l:m9m:m9m9m:m:l:m:m9l:m9l:m9l9{Ml:m:l:l:m:m9m9l:l:l9l:m:m:l:l9m9m:m9m:{Ml9m:m:l:l:l:l:l9m:l:l9m9l:l9l9l:l9m9l9{Ml:m:m:m:l9m9m9m:l:l9m9m:l:::::::::::::::M:::::::::::::::::::N:::::::::::::::::::M::m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:{Mm:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:{Mm:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:m:{Nm:m:m:m:m:m:m:m:m:m:m:m:m:;:::::::::::::M::;::;:::::::::::::M:::::::::::;:::::::N::m:m:m;m:n:m:m:m:m:n;m:m:m;m:m:m;m:{Mm:m:m:m:n:n:m;m:m:m:m:m:m:m:m:m:m:m;m:|Nm:m:m:m;m:m:m:m;m:m:n;m:m;m:m:m:m:m:m:{Nm:m;m;m:m:m:m:m:m:m:m:m:m:;;;;;;;;;:;;;;N;:;;;;;;;;;;;;;:;:;N;;;;;;;;;;;;;;;;;;;N;;n;m:m;n;n;n;n;n;n;n:n;m;n;n;n;n;n;|Nn;n;n;n;n:n;n;n;n;n;n;n;m;n;n;m;n;n;n;|Nn:n;n;m;n;n;n;n;n;n:m;n;m;n;n;n;n;n;n;|Nn;n;m;m;n;n;n;m;n:n;m;m:m:;;;;;;;;;;;;;;O;;;;<;;;<;;;;;;;;;;O;;;;;;;;;;;;;;;;;;;O;;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;}On;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;|Nn;n;n>=Q==kq=====Pp=p=p=p=p=p=p>p>p=p=p=q=q=p=p=q=p=p=p=~Pp=p=p=p=p=p=p=p=p=p=p>p>p=p=p=p=p=p=p=~Qq=p=p=p=p=p=p=p=p>p=p=p>p>p=p=p=p=p=p=~Pp=p=p=p=p=p=q=p=p=p=p=p=p===>>>>>>>=>>>=Pmo>>>Qq=q>q=q>q>q>q>p>q>q>p>q>q>q=q>q>p>q>q>Qq>p>q=q>p>q=q>q=p>q>p>q=q>q=q>q>q>q>q>Qp>q>q>p=q>q>q=q=q>q>p>q>q>p=q>p=q>q>q=Qp=q>p>q>p>q=q>q>q>p>q>q>q>>>>>>>>>>>>>>WX>Qq>q>q>q>q>q>q>q>q>q?r>q>q>q>q>q>q>r>q>Qq>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>Qq>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>q>Qq>q>q>q>q>q>q>q>q>q>q>q>q>>???>??>>>>@Tr>q?r?r>q>q?q>q>r>r?r?q>r?r>r?r?q>r?q?Qr>q?r?r>q?q?r>q>r>r>r?q?q>r?r?r>r>r?q>Rq?q>q>r>r>r?q?q>q?r?q?q?r?r>q>q?q?q>q?Rq>r>r>r?r>r?q?r>r>q?q?r?r?????????@?TrrUr?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?Rr?r?r?r?r?r?r?r?r@r?r?r?r?r?r?r?r?r?r?Rr?r@r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?r?Rr?r?r?r?r?r?r?r?r?r?r?r?r????????@?m}srrur?s?r@r@r?r?s?r@s?r?r?r@r?r?r?s?s?Sr@s?r?r?r@r?r?r?r@s?r@r?r?s@r?r?r@s?r?Sr@r@r?r?s?r@r?r?r?s?s?s?s?r@s@r@r@s?s?Rr@r?r?r?r?r?s?r?r?s?r@r?r?@@@@@@@@ssssss@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@Ss@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@Ss@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@s@Ss@s@s@s@s@s@s@s@s@s@s@s@s@@@@A@@@tsssstss@t@s@s@s@sAs@s@sAt@s@t@s@sAs@Ss@t@s@s@t@s@s@s@s@s@s@t@s@sAs@s@s@t@sASs@tAt@s@s@s@t@t@s@s@s@s@s@s@s@s@s@s@s@St@s@s@s@s@t@s@sAs@sAs@s@s@AAAAAAɲ~tttttttttAtAtAtAtAtAtAtAtAtAtAtAtAtATtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtATtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtAtATtAtAtAtAtAtAtAtAtAtAtAtAtAAAAAAяztttttuutuutAtAtAuAtAtAtAtAtAtAtAtBtATtAtAtAtAtAtAtAuAtAtAtAtAtAtAtAtAtAtBtBTtAtBtBtAtAtAtAtAtAtAtAtAuAtAtBtAtAtAtBTtAtAtAtAtBtAuAtAtAtAtAtAtABBBB~a~uuuuuuuuuuuu~uBuBuBuBuBuBuBuBuBuBuBuBUuBuBuBuBuAuBuBuBuBuBuBuBuBuBuBuBuBuBuBUuBuBuBuBuBuBuBtBuBuBuBuBuBuBuBuBuBuBuBUuBuBuBuBuBuBuBuBuBuAuBuBuBBBCb~nn㶉H+auuuuuuuuuuuuucuBvBuBuCuCvBuBuBuBuBvBUvBuBuCuBuBuBuBuBuBuBuBuBuBuBuBuBvBuBuBUuBuBuBuBuBuBvCuBuBuCuCuBuBuBuBuCuBuBuBUuBuBuCuBuBuBuBuBuCvBuBvBuBCCJVVՅ<'FKmvvvvvvvvvvvvJvCvCvCvCvCuCvCvCvCuCUvCuCuCvCvCvCvCvCvCvCvCvCvCvCuCvCvCvCvCUuCvCvCvCvCvCvCvCvCvCvBvBvCvCuCvBvCuCvBUvCvCvCvCvCuBuCvCvCvCvCvBvCCCVHFFřHT4S~tvvvvwvvvvvvCvCvCvCvCvCvCvCvCvCVvCvCvCvCvCvCvCvCwCvCvCvCvCvCvCvCvCvCvCVvCvCvCvCwCvCvCvCvCvCvCvCvCvCvCvCvCvCvCVvCvCvCvCvCvCvCvCvCvCvCvCvCCqbP<99X3;!bwwwwwvwwwwvwDvDwCwCwCwDwDvDvDVwDvDwDwDvDwDwDwDwCvDwDwDwDwCwDwCwDvDwDVwDwDwDwDvDwDwDvDvCwDvDwDwDwDwCwCwDwDwDVwCwDwDwDwDwCwCwDwDwDwDwDvDIwwnFuH33g92HKnwwwwwwwwwwGwDwDwDwDwDwDwDwDVwDwDwDwDwDwDwDwDwDwDwDwDwDwEwDwDwDwDwDWwDwDxDwDwDwDwDwDwDwDwDwDxDwDxDwDwDwEwDWwDwDwDwDwDwDwDwDwDwDxDwDwDxwxo94Y22LJsDA24U~uxxxxwxxxwDxDwExExEwEwExEWxDwExExDwExExDxExExExDxExEwExDxExEwExEWxExEwExExDxExExDxExExDxEwExDxDwExEwDxDWxDxEwExExExExEwEwEwExDxExExxxxxxU53gƉ22ss{\w22;!cxxxxxxxxNxExEyFxExExExEXxExExExExExExExExEyFxExExExExExExExExEXyExExExExExExFxExExExExExEyExExExExExEWxExExExExExExExExExExExExEyyxyxyxxvM;G9sss22aad622GKoxxyyyyyFyFyEyFxEyFyFXyFyFyEyFxFyEyEyEyFyFyFyEyFxEyFxFyFyFxFXyEyFxFxExEyFxFxFyFxFyFyFyEyExFyFxFyFyFXyFxEyFyFyFxFxFyFyFyExFxFyEo22eEcc22SS}D0224W~]XXYXXXbYYYXYYYYYXYXXXYYYYYbXXYXYXYYXYXYYXXYYXYbYYYYYYYYXYXXYzzzyzzyyyzyyyzyzyynG22STT22GGْwMb222;!dzzzyyGzGyGzGzFyGYzFzFzFzGzFyGyFyGzGzFzFyGzFzFyGzGzGzGyFYyFzGzFzGzGzGyGyGzGyFyFyFzGyGzFyGzGyGzGYyGzFzFzGzFyGzGzFyGzGzGyFzGzzzzzzz{zzzzzzzzzzzzzzp9432dGG22>>ʝz^4222GKpzzzGzGzGzGzGzGYzGzGzGzHzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGYzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGzGYzGzGzGzGzGzGzGzGzGzGzGzGzG{zzzz{zz{z~{{{{{zzz{{{{z{z{{{{V22>6p٠??2266{m<"2224V~xz^zHzHzG{G{GY{H{HzHzHzHzG{H{G{HzHzHzGzH{GzG{HzH{HzHZ{HzH{H{H{HzGzG{GzH{GzGzG{GzHzH{H{H{H{GYzGzGzG{H{HzHzG{G{G{GzG{HzG{{{{{{{{{{{|{{{{{{{{{{{{{{{{{{{{{{{{{{{yM<22X?̛772233{vHN2222;!eX{H{H{H{H|HZ{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{HZ{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{H{HZ{H{H{H{H{H{H{H{H{H{H{H{H{H{||{{|||{{{||||{||{|{{||||||||{{|||{{||{||||{{|{|f2222O|332222Ō|{Y22222Hr?|I|I|IZ|I{I{H|I|I{I{I|I{H{H{I|H|I{I|I|I|I|I{I[{I|I|I|I|I|H|I|I{I|I{H{I{I{I|I|I|I{I|IZ{I|H{I{H|I{H|H{H|I{H|I|I|I||||||||||||||||||||||||||||||||||||||||||||||||||nH2222_|222222ww|i822224W$yF|I[|I|I|I|I}I|I|I|I|I|I|I|I|I|I|I|I|I|I|I‰[|I|I|I|I|I|I|I|I|I|I|I}I|J|I|I|I|I|I|I[|J|I|I|I|I|I|I|I|I|J|I|I|I}|||}}|}}}}}}||||}}}}}|}}|}}}|}}}}|||}}}}|}}||}|}}s942284n|Ï222222ee}uC;22222< f3[}I}J|J}J}I|J|J}J|I|I}I}J|J|J}I|I}J}J|I[}I|J|J}J|I|J|J}J}I|I}J|J}I|J}I|J}J}J}I\}J|J}I|I|I}I|I}J}I}I}J|I}J}}}}}}}}}}}}}}}}}}~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}X2222M 2222222< h5MMLMLLLMLL^LLMMMMLMMMMMLMLMMLL^MMLMMMLLMMMLMތ}M<222222T3322222222|=MMMYH22222222IvCMMMMMMMM_MMNMMMMMMMMMMMMMMMM_MMMMMMMMMMMMMƁi22222222g2222222222j9LM_MY'222222224Y&~KNMMMNN_MNMMMNNNNNNNNNNNNMN_NMMNMMMMNMMNMXI222222<6u•2222222222Z7ڍK`ρNNk8822222222< i6NNNNN`NNNNNNNNNNNNNNNNNNO`NNNNNNNNNNNNNw64222222H?~c}2222222222C5WNOOxEC222222222IvDOON`ONOOOOOONNNONONNNNN`ONNONOOONNNNNsZ22222222`NUi2222222222<4HOOOMS!2222222224Z'LO`OOOOOOOOOOOOOOOOOOO`OOOOOOOOOOOOOC=22222222aM[222222222273GPOPPf35222222222< j7aOOOOPOOPOOOOOPPPPOOaOOPPOPPPOOPPOu2222222254yE:222222222232JaaaaɂTB2222222222LŁRbabaaaaabbaabbbabbjbbbaabaaababaYJ22222222A;}L<4222222222222sAPQPQLM22222222224Z(MPPPPPQPQPQPPQPPQbPPPQPQQPQQPQQz6522222222VHQJ73222222222222e>QQQQQ_-32222222222= k8QQQQQQQQQQQQQQQbQQQQQQQQQQQQQt[2222222222t[sQQH42222222222222Z;PRQRQq>:22222222222JyFQQQQQQQRQQQQQbQQQRQRQRQRQRQD=2222222222mRRRE22222222222222N8ORRRR~JG222222222224[(ORRRRRRRRRRRcRRRRRRRRRRRRRm2222222222<8|fRRR|P22222222222222E6NSRRRQY'222222222222= l9SRSRRSRRSRcSRRSSRRRSRSRSZK2222222222NCWSSdg?22222222222222>5LSSSSSl:7222222222222K{HSSSSSSSSdSSSSSSSSSSSSS|652222222222jTSSdSY<2222222222222283JSTSSS{HB2222222222224\)PSSSSSSeSTSSSSSTTSSSSv\222222222222hTeTRQ92222222222222242GTTTTTQS!2222222222222= m:TTTTTeTTTTTTTTTTTTT“D=222222222275yr”eUTRF72222222222222222yDTTTTUUqB52222222222222K{ITTU“fTTTTTTTTTTTTU”””n222222222222F?mUUUP>52222222222222222j@UUUUU”fxD= 22222222222224\*RU”fUUUUUUUUUUUUU”””ZK222222222222`OUUUUN942222222222222222]=TUUU”fUPL22222222222222= n;”gVUUUUUUUUUUUUÔÔÔ[~k65222222222222bVVVVL422222222222222222R:SVVÔgVVU`-322222222222222M}JVVVVVVVVVVVVÕÕÕVVw]22222222222243u~VVVVI222222222222222222H7QVÕgVVVVs@:222222222222224]*SVVVVVVVVVVWÕĕĕXWW\E>222222222222@;fVWVW|E222222222222222222@5PĕgWWVWWāNF222222222222222= o22222222222222222253KWWXXXWXn;72222222222222225^+TXXXWWXXYŖŗŗZXXXXXXl7522222222222222oXXXXVS;22222222222222222222GXXXXXXX~KA2222222222222222= p=XXXXXXYhƗŗŗiYYXYYXXXx_22222222222222:7nXXXXVI822222222222222222222pCXYYYXYYTR 22222222222222222LLYXYYYYzƗƗƗ{YYYYYYYYY^E>22222222222222LC_YYYYT@622222222222222222222b?XYYYYYYYg4422222222222222225^+VƗjƘjƘiƘjƘjƘƘƘƘƘƘƘƘƘɞƘƘƗƘƘƘƘƘƗƘƘƘƘƘƘƘƘƘƘɝƘƘƘƘƘƘƘƘƘƘƘƘƘƘƘƘƘƘƘɝƗƗƘƘƘƘƘjƘjƘjƘjƘjƘjƘjƘjƘjƘjƘj|2222222222222222iVƘjƘjƘjƘjƗjb<622222222222222222222V ZZZZZZƘƘƘZZZZZZZZZZZZZ[L2222222222222222iZZZZZP5322222222222222222222K9VZZZZZZZĆSK22222222222222222ZZZZZZZǘǘǘZZZZZZZZ[ZZZZZo762222222222222265{z[ZZZZL2222222222222222222222B6TZZZZZZZY`-2222222222222222[ZZZ[[[ZǙǙǙ[[Z[Z[[[ZZ[[[Z[[~i2222222222222222E>e[[[[[H2222222222222222222222;4Q[[[[[[Z[tB922222222222222[[[[[[[[[tșŽșșr[[[[[[[[[\[[[[[[[•qE>2222222222222222]N\[[[[[sD222222222222222222222263M[[[[[[[[ɃPJ2222222222222Ž\\Ž[[[Ž[[Ž\[Ž[așŽŽŽŽŽŽșŽȚcŽ\\[Ž[[[[[Ž\\\Ž[\\[[[[Țls222222222222222222}b\Ž[[Ž[\[c@222222222222222222222232J[[Ž\[[[Ž[\ɗiY&222222222222\\\\\\\\\\\\ȚȚɚl\\\\\\\\\\\\\\\\\\\Țl\\M222222222222222233w\\\\\[V<222222222222222222222222uE\\\\\\\Țl\n;52222222222\]\\]\\\\Ï\\\]ÏcȚÏÏțÏÏe\Țl]\\\\\\\]\\\\\\]]\\ɚm\p752222222222222222>:mÏ\\\\\ZO?222222222222222222222222fA[\]\Ï\\ɛl\\̀M@222222222Ð]]]Ð]Ð\Ð]Ð]Ð]Ð\Ð\Ï]Ð]Ð\Ï]ɚmÐoÐÐÏÐÏÐÐÐÐАϐÐАÐÐɛАÐϐÐÐÐÐÐÐÐÐÏÐqÐ\Ð]Ð]ɛmÐ\Ï\Ð\Ð]Ð]Ð]Ð]Ð]Ð]\Ð]]Ï]Ð]Ð]Ð]Ð]Ð]Ï]ɚlÏ\Ð\za222222222222222222SG`Ð]Ð]Ð]Ð]Ð\hC7222222222222222222222222Y=ZÐ\Ð]Ð\]ɛmÐ\Ð\\ƋXQ22222222Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]ɛmÐ]Ð]ÐpÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐɛÐÐÐÐÐÐÐÐÐÐÐÐÐÐnÐ]Ð]Ð]Ð]Ð]ʛmÐ]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð^Ð]Ð]Đ]Ð]Ð]Ð]Ñ]Ð]Ñ]ʛmÐ]Ð]cF?222222222222222222r[Ð]Ð]Ð]Ð]Ð]ɛmU<5222222222222222222222222N:YÐ]Ð]Ð]ʛmÐ]Ð]Ð]Ð]Ð]f44222222Ð]Ð]Ð]Ð]Ð]Ð^Đ^Ð]Ð]Ð^Ð^Ð]đ]Ñ^ʛnđ^Đ]Ñ^Ð]ÐaĐÐÐÐÑđĐÐÑÐÐđÐĐʜĐĐÑÑÐÐđÐÐÐÐÑ`Đ]Ñ]Ñ^Ñ]Ñ^Đ]đ^ʛnÐ]Ñ]Ð]Ñ^Ð]Ð^Ð^Ð^đ]đ^Ð^Ð]Ñ^Ð^đ]Ð]đ^Ñ]Ð]ʛnÐ^đ]Ð]t22222222222222222222qÐ]Đ]Ñ^Đ]ʛnĐ^S73222222222222222222222222D7VĐ]đ^ʛmĐ]Ð^Ñ^Ð^Ð]Ñ]zH< 22222đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^ʜnđ^đ^đ^đ^đ^đ^đ^đađđđđđđđđđđđʜđđđđđđđđđ`đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^ʜnđ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^ʜnđ^đ^đ^đ^\N22222222222222222296vđ^đ^đ^ʜnđ^đ^P32222222222222222222222222=5Tđ^ʜnđ^đ^đ^đ^đ^đ^đ^ɈUJ2222ő^đ^đ^đ^đ^đ^đ^ő^đ^ő_đ^đ^đ^đ^˜nđ_đ^đ^Ē^đ^đ^đ^đ^đ^đ^đ^đ^đfđđđđĒđʜőđđđjđ^đ^đ^đ_đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ_ʜnő^đ^Ē^đ^Ē^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^ʜnđ^ő^đ^đ^r75222222222222222222JAeđ^đ^ʜnđ^đ^đ^K2222222222222222222222222273Qʜnđ^đ^đ^Ē^đ^đ^đ^ő^Ő]_,222Œ_đ^đ^Ē_ő_ő^đ^ő^Œ^Ē^đ_ő_Œ^ő_ʝoő^ő_đ_Ē_Ē^Œ_đ^Œ_ő^Œ_Ē_đ_Œ^ő^đ_Œ^Œ_Ē_Ē_˝nŒ_Œ^Ē_đ^Œ^Ē_Œ^Ē_Ē^đ^đ_Ē_Ē^ő_Ē_Œ^Œ^Ē_ő^ʝoĒ_Œ_Œ_Œ^Ē_Œ^Ē_Ē_Œ^Ē^Œ^Œ_Œ_Œ_Œ_Œ_Œ_Œ_Ē_ʝnŒ_đ_Œ_Œ_Œ_{b22222222222222222222eSő_Ē_˝oő_Ē_Œ_ő_yH2222222222222222222222222232Sđ_Œ_Ē_Œ_ő^Ē_ő^ő_Œ^ő_uB82Œ_ƒ_ƒ_Œ_Œ_Œ_Œ_Œ_ƒ_Œ_Œ_Œ_Œ_Œ_˝oƒ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_ƒ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_ƒ_˝oŒ_Œ_Œ_Œ_ƒ_ƒ_Œ_Œ_ƒ_Œ_ƒ_Œ_Œ_ƒ_Œ_Œ_Œ_ƒ_Œ_˝oŒ_Œ_Œ_Œ_Œ_Œ_Œ_ƒ_ƒ_Œ_Œ_Œ_Œ_ƒ_Œ_Œ_ƒ_ƒ_ƒ_̝oŒ_Œ_Œ_Œ_Œ_eF?22222222222222222222jŒ_˝oŒ_Œ_ƒ_ƒ_Œ^hC2222222222222222222222222222{HŒ_Œ_Œ_ƒ_Œ_ƒ_Œ_Œ_Œ_Œ_ͅRDƒ_ƒ_ƒ`ƒ`ƒ_œ_ƒ_ƒ_ƒ`ƒ`ƒ_Œ_ƒ_Œ`̝oƒ_ƒ_Œ_Œ_ƒ_ƒ_ƒ_ƒ_ǒ_Œ_Ǔ_Œ_ƒ_Ɠ_ƒ_ǒ_ƒ_Ɠ_ƒ_̝oƒ_œ_ƒ_Ɠ_ƒ_ǒ_Œ`Œ`ƒ_Œ_ƒ_ƒ_Œ_ƒ_ƒ_ƒ_œ_ƒ_Œ_̝oœ_Œ_Œ_ƒ_ƒ_ƒ_ƒ`Œ_ƒ_ƒ`ƒ`ƒ_ƒ_ƒ_ƒ_ƒ_ƒ`ǒ_ƒ_˝oŒ`Ɠ_ƒ_ƒ_ƒ_ƒ_v2222222222222222222254~̝oŒ`ƒ_ƒ_ƒ`ǒ_•^Z>2222222222222222222222222222kCē_ƒ`ƒ`Œ_Ɠ_ƒ_ǒ_Ɠ_ƒ_Œ_ȏ\Ɠ`Ǔ`Ǔ_Ǔ`ǒ_ǒ`Ǔ`Ǔ`Ǔ`ǒ`Ǔ`Ɠ`Ǔ`Ǔ`̝pǓ_ƒ`Ǔ`Ɠ`Ǔ_Ǔ`Ǔ`Ɠ_Ǔ`Ɠ`ǒ`Ɠ`Ǔ`Ǔ`ǒ`Ɠ_Ǔ_Ǔ`Ǔ`̝pǒ`Ɠ`ǒ`Ɠ`Ǔ`Ǔ_Ǔ_ƒ`Ɠ`Ǔ`ǒ`Ǔ_Ɠ`Ǔ`ƒ`Ǔ`Ǔ`ǒ_Ɠ`̝pǓ`ǒ`Ɠ`ƒ`Ɠ`Ǔ`Ǔ`Ǔ_Ǔ`ǒ`ǒ_Ǔ_ǒ`Ɠ`Ɠ`ǒ`Ɠ_ǒ`Ǔ_̝pǓ`Ǔ`Ǔ`Ǔ`Ǔ_Ǔ`Ǔ_]N22222222222222222222C=yƓ`ǒ`ǒ`Ǔ`Ǔ`Ɠ`]P;2222222222222222222222222222]?]ǒ`Ǔ`ǒ`Ǔ`Ǔ_Ɠ`Ǔ`Ɠ_Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ȓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`͝pǓ`Ǔ`Ǔ`ǓaǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`̞pǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`͞pǓ`Ǔ`ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ǔ`Ǔ`Ǔ`Ǔ`͞pǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`s7522222222222222222222[MŒaǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`\E82222222222222222222222222222Q<\Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ȓ`ȓaǔaǓ`Ǔ`ǔaǓaǓaǔ`ǔ`ǔaǓ`Ǔ`͞pǔ`ǔ`Ǔ`ǓaǓ`Ǔ`Ǔ`Ǔ`ȓaǓaǓ`Ǔ`ȓ`Ǔaǔ`Ǔ`Ǔ`Ǔaǔ`͞pǓ`Ǔ`Ǔ`ǔ`ǓaǓ`Ǔ`ǓaǓ`Ǔ`Ǔ`ǓaǓaǔ`Ǔ`Ǔ`ǓaǓaǔ`͝pǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ȓaǓ`Ǔ`ǓaǓ`Ǔ`ǔaǓaǓ`Ǔ`Ǔ`̞pǓaǓ`Ǔ`Ǔ`ȓ`Ǔ`Ǔ`ǔa|c2222222222222222222222|bǓ`Ǔ`ǓaǓ`ȓ`Ǔ`Ǔ`Y=52222222222222222222222222222H9ZǓaǓ`Ǔ`Ǔ`Ǔ`ȓ`ȓ`ȔaȔaǔaȔaȔaȔaȔaǔ`ǓaȔaǔ`Ȕ`ȔaȔa͞pȔaȔaȔaȔaȔ`Ȕ`ȔaȔaȔaǔaȔ`ȔaȔaȓaȔaȔ`ǔaȔaǔa͞pȔ`ȔaȔaǔaȔaȓaȔaȔaȔaǔ`ȔaǔaǔaǓaȔaǓaǔaǓaȓ`͞pȔaȔaǔaǔaȔaǔaǔaȓaǔaȔ`Ȕ`ȔaȔaǔaȔaȔaȔaȔaȓa͞pȔaȔ`ȔaȔaȔaȔaȔaȔafF?2222222222222222222232xǔaȔ`ȔaȓaȔaȔaȔaW842222222222222222222222222222?6WȔaǔ`ȔaȔaȔaǔa͞p͞p͟q͟pΞqΞp͞q͟p͞p͞p͞p͞p͟p͞qФx͞q͟q͞p͞q͞pΞpΟpΟp͟qΟq͞p͟p͞p͞p͟p͞p͟pΟq͟qФx͟p͞p͞p͟p͞qΞqΟpΟpΟp͞pΟpΞp͞p͟pΟp͟qΞqΞq͞pФxΟpΞp͞qΞpΞqΞq͞p͞p͞q͟p͞p͞p͞p͞q͞p͞qΞq͟p͞pФy͞p͞p͞q͟q͞q͞p͞p͞q͞p2222222222222222222222=9͞p͞pΞp͟q͞pΞp͞pa43222222222222222222222222222294[ΞqΟp͟p͞q͞pȔaȔaȔaɔaȔaȔaȔaɔaȔaȔaɔaȔbȔaȔaΟpȔaȔaȕaȔaȕaȔaȕaȔaȔaȔaȔaɔaȔaȔaȔbȔaȔaȕaȔaΞqȕaȔaȔaȔaȔaȔaȔaɔaȔaȔaȔaȕaȔaȔaȔbȔaȔaȔaȔbΟqɔaȔbȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaΟqȔaȕaȔaȔaȔaɕaȔaȔaȔaȕa^N2222222222222222222222QFĒeȔaȔaȔaȔaɔaȔaȔaN22222222222222222222222222222242PȔaȔbȔaȔaɕaȕbɔbɔbɕaȕbȕaɕbȕbɔbɕbɕaȔbɕbΟqȕaɔbɕbɔbȔaɕbɔaȕbȔbɕbȔbȔbɕaȔaȔaɕbȕbɔbɕaΟqɔbɕaȔbȔaɔaȕbɕbɕbɔbɕbȕbȕaȔbɕbɕaȕbɕbɔaɕbΟqɕaɕbȕbɔaȕbɕaȔaɕbɔaȕaɔaɕbȕbɕbɕaȕbɕaɔaɔaΟqɕbȕaɕbɕbɕaȔbȕbȔbȕaɔbu752222222222222222222222oZɕbȔaȕbȔaȕbɔbɕbȔbJ22222222222222222222222222222222KɕaɕbȔaɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbΟqɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbΟrɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbΟqɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbΟqɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb}c222222222222222222222222qɕbɕbɕbɕbɕbɕbɕbɕbmE22222222222222222222222222222222pFǖaɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɖbϟqɕbɕbɕbɕbʕbɕcɕbɕbɕbɕbɕbʕbɕbɕbɕbɕbɕbɕbɕbΟrɕbɕbɕbɕbɕbɖbɖbɕbɕbɕbɕbɕbɕbɕbɕcɕbɕbɕbɕbϠrɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbϠrɕbʕbɕcɖbɕbɕbɕbɕbɕbɖbɕbĒhF?222222222222222222222286}ɕbɕbɕbɕbɕbɕbʕbǖb^@22222222222222222222222222222222bAYɕb4ɕcʕbʕcʕbɕbɕbʕcʖcɖbɖbɖcʖcɕcϠrɕcɖbɖcʕcɕcɕbɕbɕbɖbʖbɕbʖbʖcʖbɕbɕbɕbɕcɕbϠrɕcɕcɕbɕbɖbʕbɖbʖbʕbɕbɖcʕcʕcʕcɖcɖbʖbʕcʕcϠrɕbɕbɕbɕbʕcɕcɖbɕcɖcɕcɖbʕcɕbɖbɖbʖcʖbɖbɕbϠrʕcɕcɖbɕcɕbɕbɕbɕbɕbɕcʖbʕcx222222222222222222222222H@kɕbɖbɖcʕcʖcʖcʕcÚaT=22222222222222222222222222222222L:4ʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcϠrʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcϠrʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcϠrʕcʖcʖcʖcʖcʖcʖcʕcʖcʖcɖcʖcʖcʖcʖcʕcʖcʖcʖcϠrʖcʖcʖcʕcʖcʖcʖcʕcʖcʕcʖcʖcɖc^O222222222222222222222222dSɕcʖcʖcʖcʖcʖcʖcʖc_H9222222222222222222222222222222ɕbTʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcРrʖcʖcʖcʖcʖcʗcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcϡsʖcʖcʖdʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖc˖cʖcʖcϡrʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcϡrʖcʖcʖcʖcʖcʗcʖcʖcʖcʖcʖcʖcʖcv75222222222222222222222222iʖcʖcʖcʖcʖcʖcʖcʖc]?62222222222222222222222222273U˖cʖcʖcʖcʖcʖcʗcʗcʖcʖcʖcʖcϡsʖcʖcʖcʖcʖcʖcʖcʖcʖc˖cʖcʗcʖcʖd˗cʖcʖcʖdʗcϡsʖcʖcʖcʖcʖcʖdʖcʖcʗcʖdʖdʖcʖcʖcʖcʖcʖcʖcʖcСsʖc˖cʖc˖cʖcʖcʖcʗdʖdʗcʖcʖcʖdʖc˖cʖcʖc˖cʖcϡsʖdʖcʖcʖdʖcʖcʖcʖc˖cʖcʖcʗcʖcʖc~d22222222222222222222222243~ʖcʖcʖcʗcʖcʖcʖdʖcY:4222222222222222222222222ʖc˖dʖdʗd˗cʖc˖c˗c˖d˗cʗd˖cϡsʗcʖcʗd˖dʖd˖c˗cʖcʗdʗcʖc˖c˖dʖcʖcʗd˗cʗcʗdСs˗dʗcʖcʖdʖdʖcʖc˗d˗d˗c˖cʗdʗcʗdʖcʖc˖c˖cʗdСsʖcʖc˗dʗdʖcʗd˗cʗcʖcʖcʗdʖc˗d˖dʖd˗d˖cʗd˖cϡsʗcʖc˖c˖dʖdʗd˖d˖c˖dʗdʖcʖc˖dʖcœiG?222222222222222222222222Aq=p=p=p=p>p=p=p=p=p=p=p={Lp=p=p=p=p=p=p=p=p=p>p=p>p=p={Lp=p=p=p=p=p=p=p=p=p=p=p=p=p={Lp=p=p=p=p=p=p=p=p=p=>>>>>>>>>MqNq>q>q>q>q>q>q>q>q>q>q>q>q>q>{Lq>q>q>q>q>q>q>q>q>q>q>q>q>q>|Lq>q>q>q>q>q>q>q>q>q>q>q>q>q>{Lq>q>q>q>q>q>q>q>q>q>???????@o~rMr?r?r>r?q?r?r?r?r?r>r?r?r?|Mr?q?r?q?r?r?r?r?r?r?r?r?q?r?|Mr?r?r?r>r?r?r?r?r?r?r?r?r?q>|Mr?r>r?r>r?r?r?q?r?r???????A}rr^r?r?r?r?r?r?r?r?r?r?r?r?}Nr?r?r?r?r?r?r?r?r?r?r?r?r?r?|Mr?r?r?r?r?r?r?r?r?r?r?r?r?r?}Mr?r?r?r?r?r?r?r?r?r?@@@@@Gs}sssts@s@s@s@s@s@s@s@s@s@s@}Ns@s@s@s@s@s@s@s@s@s@s@s@s@s@}Ns@s@s@s@s@s@s@s@s@s@s@s@s@s@}Ns@s@s@s@s@s@s@s@s@s@@@AALys~ssss|t@s@s@s@s@sAs@s@sAs@~Os@s@s@s@s@s@s@sAt@t@s@s@s@t@~Os@tAs@s@sAt@s@sAs@s@s@s@s@s@~Ot@t@s@s@t@s@s@t@s@s@AAAFâtt~tttttqtAtAtAtAtAtAtAtAtA~OtAtAtAtAtAtAtAtAtAtAtAtAtAtA~PtAtAtAtAtAtAtAtAtAtAtAtAtAtA~OtAtAtAtAtAtAtAtAtAtABBBېjuuuuutuuuduAuBuBuBuAuBuBuBPuBuBuBuAuBuBuBtBuBuBuBuBuBuBPuBuBuBuBuBuBuBuBuBuBuBuBuBuBPuBuBuBuBuBuBtBuAuBuBBCxlLbluuuuuuuuuQvBuBuCuBuBuBuBPuBuBuBuBvCuBuBuBuBuBuBuBuBuBPuBuBvBuBuCuBuBuBuBuBuBuBuBuBPuBvBuBuBuBuBuBuBvBuBCcxllv=,VuvvvvvvvvCvCvCvCvCvCvCQvCvCvCvCvCvCvCvCvCvCvCvCvCvCQvCvCvCvCvCvCvCvCvCvCvCvCvCvCQvCvCvCvCvCvCvCvCvCvCHMuVVɑB>>,kvwwwvvvwywCvCwCwCwDvCRwCwCwDvDwDwDwDvDwDwDwDwCwDvDQwDwCwCvCwDvDvCvDvDwDwDwCwDwDRwCwDwDwDwCwCwDwCwDvDwnV>MMOi5 JXnwwwwwwwNwDwDwDwDwDRwDwDwDwDwDwDwDwDwDwDwDwDwDwDRwDwDwDwDwDwDwDwDwDwDwDwDwDwDRwDwDwDwDwDwDwDwDxDwD{xxxXcB==c57XvxxxxxxExExExExESxExExExExExExExExExExExExExESxExExExExExEwExExExExExExExERxExExExExExExExExExEyxxxxxwW>O55Ŕp>,1=*exxyyyPyEyExExFSyFxFyExExEyEyEyFyEyExExFxFyFTxExExExExFxFyExFxFyExEyExFxESyFxEyFxFxFxFyFyExEyEk<5f66сLY23QZyTTTT]TTTTTTTTTTTTTT]TTTTTTTTTTTTTT]TTTTTTTTTTzzzz|zzzzzzzzzzyzK=6ṕ22rrZ327ZxzyGzGzGzGUzGzGzGzGzGzGzGzGzGyGzGzGzGzGUzGzGzGzGzGzGyGzGzGzGzGzGzGzGUzGzGzGzGzGzGzGzGzGzG{zzzzzz{z{zzzzz{{{z{zqC8U>tt11^^i;"11>,ez_zHzG{GU{GzGzGzHzG{HzHzHzGzGzGzGzGzHUzH{G{G{GzGzGzGzGzGzGzGzH{GzHUzGzGzH{GzG{GzGzGzGzG{{{{{{{{{{{~}{{{{{{{{{{{{{{{{{{[11yP__22QQސrGI223L$q>{H{HV{H{H{H{H{H{H{H{H{H{H{H{H{H{HV{H{H{H{H{H{H{H{H{H{H{H{H{H{HV{H{H{H{H{H{H{H{H{H{H||||||||||||||||||||||||||||||||||{|zS>42[RR22IIљySt3218Z'zGV|I|I|I|I|I|I|I|I|I|I|I|I|I|IV|I|I|I|I|I|I|I|I|I|I|I|I|I|IV{I|I|I|I|I|I|I|I|I|I}||}|}||||||}}}||||}}||}}||}}||}}||}|i7453jߐJJ11==|e9111? o@|I|J}I|I|J|J|I|I}I|J|J|J}I}JW}I|J}J|I|I|I}I|I|J}I|J|I}J}IW|I|I|I|I}I|I}J}I}J}I}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{M22M i6~K~KK~K~L~K~KK~KYK~K~K~KL~L~K~K~KKLKK~KYKKKKK~K~K~K~K~K}V?2253f332222vvLn;? 12214MtBLLLLLLLYLLLLLLLLLLLLLLYLLLLLLLLLLډi7322E9s̄222211fAKMQK221227]+~KMMMMMZMMMMMMMMMMMMMMZMMMMMMMMMMĀhN1111\B{ww111111Q6IZM[(511111? j7MMMM[MMMMNNNNMNNMMN[MMMMMMMMMMv=81122uQӁˉWg112222J5TNNk8; 221223NvCNN[NNNNNNNNNNNNNN[NNNNNNNNNNy]112222cEQ222211=5FOOxED2122128]*M\OOOOOOOOOOOOOO\OOONOOOOOOI@111196pCH11111142DOOMW$3111111@sCOOOPOOOOOOPPOO\OPPOOPOOPOr542211IAx=411221152|K]]\l;82122124S#łS]]]]]]]]]]]]f]]]]^]]]]]`N111111[KdH5211111132k?QPQuAA11111118_,OQPQQPQQQQQ^QQPQQPPQPPz=8112222w]YQF5211222211_= 111111118`.PSRSRS_SSSSSSSSSRp54221122QEY`S`=2211222211B6LSSSMK212212212An;SSSS`SSSSSSSSSSbP22112222oXcTRX;1122221122>5JTTTQ`/5221221224P{HTTaTTTTTTTTTT|<811111143sUUQK8111111111183ITTUao<81111111119`-SbUTUUTTTUUU~b11222211<8xuUUQC6221122221142}EUUbU}JG1221221221AwHUUUUUUUUUUZJA22221122KA_VVO?5112222112242pBUbVVQW%32122122124P~KVVVVVVVVw’’’YVp5411111111gSYVVL83111111111111g@bVVVVh5611111111119b/TVVVVVVW’““gWWWdR2211221122dWWWK42221122221122ZATWWWWzGB22122122122@r?VWWWWXaÓÓÓWXXW~n>911221122:7uXXX~F42112222112222N9SXXXX„QP312212212214Q~KXXXXXsĔÔÔZXXXXX~b1111111111D=eXXXsC11111111111111G7RXXXXVc04111111111118c1VXYYYĔĔĕ`YYYYYY\KB2211222211[L_YYXhA22221122221122>5OYYYYYwD= 212212212212Br?ĕfĕeĕfŕfĕĕĕĕĕĕǛĕĕĕĕĕĕĕĕĕĕĕĕĕĕǚĕĕĕĕĕĕĕĕĕĕĕĕĕĕȚĕĕĕĕĕqĕfĕfĕfĕfĕfĕfĕfĕfy641122221122{dÕgĕfĕfd[>2211222211222294XÖfĕfĕfĕfĕfˉZL2221221221224ZZZZ[ŕŕŕjZZZZZZZZZ[dR111111111165rZZZWN:1111111111111173IZZZZZÉV]+211111111111[[Z[[ZƖŖŖe[ZZ[Z[[Z[[Zz=92222112222<9p[[[VH82222112222112232tDZ[[[[[q>:1221221221[[[[[[[zƗƖƗ`[[[[[[[[[[[[Ɩhe222211222211THe[[[T>52211222211222222kBY[[[[[υVF221221221\\[\\\\\eƗǗŽŽŽŽǗ\\\\\\\\\\\\[[Ɨg`IA111111111111oY\Ž[Ž\\Q:41111111111111121_?Y\[\Ž\ƗhŊWU"21111111\\\\\\\\\\ǗǘaǗh\\\\\\\\\\\\]\ǘh\w64112222112243k\\\\U732222112222112222O:X\\\ǘh\\k87221221Ð]Ð]Ð]Ð]Ð]Ï]Ð\Ð]Ï]Ð\ǘiÐ`ÐÐÐÏÐÐÐÐÐÐАÐǘÐÐÐÐÐÐÐÐÐÐÐÐnÐ]Ð]ȘiÐ]Ð\Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]ȘiÐ]^eS11222211222297~{Ð]Ð]Ð]ǙhK322211222211222211J9UÐ]Ð]ǘiÐ]Ð]Ï\|I@21221Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]ȘiÐ]Ð]Ð^Ð|ÐÐÐÐÐÐÐÐÐÐȘÐÐÐÐÐÐÐÐÐÐhÐ]Ð]Ð]Ð]șiÐ]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]șiÐ]Ð]s=9111111111111LCiÐ]Ð]ȘiÐ]wF221111111111111111B7SÐ]ȘiÐ]Ð]Ð]Ð]ɇTP1111đ^đ^đ]đ^đ^đ^đ^đ^Đ^đ^șjđ^đ^đ^đ^đ^đ^Đuđđđđđđđșđđđđđđđdđ^đ^đ^đ^đ^đ^đ^șjđ^đ]đ^đ^đ]đ^đ^đ^đ^đ^đ^đ^đ^đ^șjĐ^đ^đ^g22221122221122cRađ^əjđ^’]mD22222211222211222283Pșjđ^đ^đ^đ^đ^ŏ\f3421đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^ɚjđ^đ^đ^đ^đ^đ^đ^đ^đ^đ`đhđmđqđrɚ|đnđjđdđ_đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^əjđ^đ^đ^Ē^đ^đ^đ^đ^đ^đ^đ^đ^đ^đ^əjđ^đ^đ^bLC22112222112233eđ^əjđ^đ^\a@22221122221122221183V’^đ^đ^đ^đ^đ^đ^vC= 1Œ_ƒ_Œ_Œ_ő_Œ^Œ_ő^ő_Ē_ɚkƒ^Œ^Œ_Œ_Ē_Ē^Œ_Œ_Œ_Œ_đ^Œ_Œ^Œ_ɚkĒ_Œ_Œ_ő_ő_Ē_Œ_ő_Œ_ő^ő_Œ_đ_Œ_ɚkő_Œ_Œ_Œ_đ_Œ_Œ_Œ^Ē_Œ_Œ_ő_Œ_Œ_ʚkŒ^ő^Œ^ő_v5411111111111164{ʚkĒ_Œ^Œ_\P;11111111111111111153|HŒ_Œ_Œ_ő_ő_Œ_Œ_ͅRIƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ`ƒ_Œ_ƒ_ʚkƒ_Œ_Œ_ƒ_ƒ_ƒ_ƒ_Œ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_˚kƒ_Œ_ƒ_ƒ_ƒ_Œ_ƒ_Œ_ƒ_ƒ_ƒ_ƒ_Ɠ_ƒ_ʚkŒ_Œ_ƒ_Œ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_Œ_ƒ_ʚkŒ_ƒ_ƒ_ƒ_ƒ`hU11222211222211D=Œ_ƒ_ƒ_ƒ_ZK911222211222211222211nD^ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_Ǒ]Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ǒ`Ǔ`˛lǓ`Ɠ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ɠ`Ǔ`Ǔ`ǒ_Ǔ`˚lǒ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ɠ`ǒ`Ǔ`Ǔ`Ɠ_Ǔ`Ǔ`Ǔ`˛lǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ɠ_Ǔ`Ǔ`ǒ`˚lƓ`Ǔ`Ǔ`Ǔ_Ǔ`u?:22221122221122]Pfǒ`Ǔ`Ǔ`Ɠ`XC722221122221122221122cA\Ǔ`Ǔ`ǒ_Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`˛lǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`˛lǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`˛lǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`˛lǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`g1111111111111122x`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`U8311111111111111111122U=]Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ȔaǔaȔaȔaȔaǔ`ǓaȔaǓ`Ȕa̜lȔaǓaȔaǓ`Ȕ`ȔaǔaȔaȔaǔaȓaȔ`ǓaȔa˜lȔ`ȔaȔaǓaȓaȔaȔaǓ`ǔaǔaǓ`ǓaȓaǓa̛lȔaȓ`ǔaȔaǓaǓaǔaǓ`Ȕ`ȔaǔaȔaȔaǓ`̛lȓaȓ`ȔaǔaȔaȔaĒdMC2211222211222222tȔ`Ȕ`ȓaȔaȔ`S8411222211222211222211J9Yȓ`ȔaȔaǓa̜l̜m̜l̜l̜m̜m̜m̜m̜m̜mϡt̜m̜m̜m̜l̜l̜l̜m̜m̜m̜l̜m̜m̜l̜mϡt̜m̜m̜m̜m̜m̜m̜m̜l̜l̜m̜m̜m̜m̜lϡt̜l̜m̜m̜m̛m̜m̜m̜l̜m̜m̜m̜m̜m̜mϡt̜m̜l̜m̜m̜m̛m̜m~6411222211222211@<̜l̜m̜m̜m˜lS5322221122221122221122E9b̜m̜m̜lȔaȔaȔaȔaȔaȔaȔaȔaȔaȔa͜mȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔa͜mȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔa͜mȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔaȔa̜mȔaȔaȔaȔaȔaȔaȔaǓcgT1111111111111111SGjȔaȔaȔaȔaǕaJ1111111111111111111111<5UȔaȔaɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb͝nɕbɕbɕbɕbɕbɕbɕbɕbɕbɕaɕbɕbɕbɕb͝nɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb͝mɕbɕbɕbɕbɕbɕbɕbȕbɕbɕbɔbɕbɕbɕa͜mɕbɕbɕbɕbɕbɕbɕbɕbu>:2222112222112222jWȔbɕbɕbɕbɕbɕbpF221122221122221122221173Oȕaɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb͝nɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb͝nɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb͝nɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb͝nɕbɕbɕbɕbɕbɕbɕbɕbɕci222211222211222232nɕcɕbɕbɕbɕbÙ`dB222222112222112222112263kDɕb3ɕbɖbʕbɕcʕcɖcʕbɕbɕbΝnɕcɕbɕcɕbɕbɖbɖbʕbʕbɖbɕbɕcʕbʕbΝnɕbɕbɖbɖbɕcɕbɕbɕbɕbʕbʕbʕbɖbɕbΝnʕbɕbɕcɕcɕbʕbɕcɕcɕbɖbɕbʕbɖcɕbΝnɕcʕbɕbɕbɕbɕbɕbɕbɕbœgKB1111111111111111;8ɕbɕbʕbɖbɕc_W>1111111111111111111111D73ʖcʖcʖcʖcʖcʖcʖcʖcʖcΞnʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcΞnʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcΞoʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcΞoʖcʖcʖcʖcʖcʖcʖcʖcʖcʖc|641122221122221122IArʖcʖcʖcʖcʖc_K:22112222112222112232ʖc%ʖcʖcʖcʖcʖcʖcʖcʖcΞoʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcΞoʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcΞoʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcΞoʖcʖcʖcʖcʖcʖcʖcʖcʖcʖcɕdhU112222112222112222aQȔfʖcʖcʖcʖcʖc\F8112222112222112222%ʖcH˖d˗cʖcʗd˖cʖcʖdΞoʖcʗcʗcʖc˖cʗcʖcʗcʖdʖd˖dʖdʖd˗cΞoʖc˖cʖcʖcʖcʗd˗cʗcʗdʗcʖc˖cʖcʖdΞoʖdʗc˗dʗcʖd˖cʖcʖcʗcʖcʗd˗d˖dʖcΞoʗc˖cʗcʖdʖcʖdʗdʖdʖcʗdʖcx=9111111111111111111hʖd˖dʖcʖcʖcʖca<511111111111111Hʖc@˗d˗d˗d˗d˗d˗dΟo˗d˗c˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dϟo˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dϟo˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dϟp˗d˗d˗d˗c˗d˗d˗d˗d˗d˗d˗d˗dj22221122221122221165z˗d˗d˗d˗d˗dϟpW732211222211@˗d$˗d˗d˗d˗d˗dϟp˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dϟp˗d˗d˗d˗d˗d˗d˗e˗d˗d˗d˗d˗d˗d˗dϟp˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d̗d˗dϟp˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dǕhMD221122221122221122D>y˗d˗d˗d˗dϟp˗dQ63112222$˗d3˗d˗d˗dϟp˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dϟp˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dϟp˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dϟp˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dz54111111111111111111WJȖg˗d˗d˗dϟp˗d˘dlED74?(H `T22822ښ782222222222=2222222222m=e2e2e2e2e2e2e2e2e2e2m=e2e2e2e2e2e2e2e2e2e2i7i8e2e2e2e2e2e2e2e2e2e2m=e2ژe2e29e22 2222792222222222>2222222222q>e2e2e2e2e2e2e2e2e2e2n=e2e2e2e2e2e2e2e2e2e2i7j9e2e2e2e2e2e2e2e2e2e2n>e2e2e2e2e2 3 3Ø3223892332232323>2332223223>f3f3e3f2f3f3f2f3f3e2n>f2f3f3e3f2e3f3f3f2f2i8j9f3e3f3e3f3e3f2f2f3f3n>f3f3e2e3e3Ùf3 3333333893333333333>3333333333>f3f3f3f3f3f3f3f3f3f3o>f3f3f3f3f3f3f3f3f3f3j8j9f3f3f3f3f3f3f3f3f3f3n>f3f3f3f3f3f3f3373333339:3443333333?3334334333?~3g3f3f4g3f3g4f3f3f3o?f3f4g3f4g3f3f4g3f4f3j8k:f3f3f3g4f4f3f3f3f3g3o?f3f4f3f3f4f4f3844444449:4444444444?4444444444?4g4g4g4g4g4g4g4g4g4p?g4g4g4g4g4g4g4g4g4g4k9k:g4g4g4g4g4g4g4g4g4g4o?g4g4g4g4g4g4g45ښ444444::4544444444@4545454545@4h5g5g4g5g4h5g4g5g5p@g5h4g4g5g4g4g4g4g4h5k:l;g4g4h4g4g5g4g4g4g4g4p@g4g4g4g5g4g4g5ڡ@@@@@@@DE@@@@@@@@@@H@@@@@@@@@@H@u@p@q@p@p@q@q@p@p@vHp@p@q@p@p@p@p@q@q@p@sDtEp@p@p@p@q@p@p@p@q@p@wHp@p@q@q@p@q@q@6666656;<6666666666A6665665666A6x6i6i6i6i5i6i6i6i5qAi6i5i6i6i6i5i5i6i5i5l;m7877777788C8777877788C77j7j7j7k8j7j8k7j7sCj7j7j8j7j7j7j7j8j8j7nj7j7j7j7j7j8j7j7k7k7sCj7j7j7k7j7j7j78888888=>8888888888C8888888888C88k8k8k8k8k8k8k8k8sCk8k8k8k8k8k8k8k8k8k8o=p>k8k8k8k8k8k8k8k8k8k8sCk8k8k8k8k8k8k89999999>?9999999999D9999999999D99l9l9l9l9l9l9l9l9tDl9l9l9l9l9l9l9l9l9l9p>p?l9l9l9l9l9l9l9l9l9l9tDl9l9l9l9l9l9l999:9999>@99999999::E9:999:9:99D9x9l9m9m9m9m9l9l9l9uDl:l:m:m9l:l9l:l:l9l9p>q?m:l:l:l9l:m9l9l9l9m9uDm:m:l9m9l9l9l::::::::?@::::::::::E::::::::::E:p:m:m:m:m:m:m:m:m:uEm:m:m:m:m:m:m:m:m:m:q?r@m:m:m:m:m:m:m:m:m:m:uEm:m:m:m:m:m:m:;;;;;;;@A;;;;;;;;;;F;;;;;;;;;;F;n;n;n;n;n;n;n;n;n;vFn;n;n;n;n;n;n;n;n;n;q@rAn;n;n;n;n;n;n;n;n;n;vFn;n;n;n;n;n;n;<<<<<;;@B<<<<<>Vo}l[?<<<<<<;G>>>>>>isJq>q>q>q>q>q>q>q>q>q>yHq>q>q>q>q>q>q>q>q>q>tBuDq>q>q>q>q>q>q>q>q>q>yHq>q>q>q>q>q>q>?????DzrIr?r?r?r?r?r?r?r?r?zIr?r?r?r?r?r?r?r?r?r?uCvEr?r?r?r?r?r?r?r?r?r?zIr?r?r?r?r?r?r???@@OzrsYs@r?r?r@s?s@r?s@{Jr?r?s?s@s@r?s?r@r?r?vDwEr@r?r?s@s@s@s?s@r@s?zJr@r@r@r@r?r@s?@@@Us{sssbs@s@s@s@s@s@s@{Ks@s@s@s@s@s@s@s@s@s@wExFtAs@s@t@s@s@s@s@s@s@{Ks@s@s@s@s@s@s@AAOªɶvt|tttt[tAtAtAtAtAtA|LtAtAtAtAtAtAtAtAtAtAxFxGtAtAtAtAtAtAtAtAtAtA|LtAtAtAtAtAtAtABFҐqluu}uuuuuNuBuBuBuBuB}LuBuBuBuBuBuBuBuBuBuBxGyHuBuBuBuBuBuBuBuBuBuB}MuBuBuBuBuBuBuBC^hPqr}vvvvvvCvCvCvCvC}MvCvCvCvCvCvCvCvCvCvCyHzIvCvCvCvCvCvCvCvCvCvC}MvCvCvCvCvCvCvCgn^mmv=+bvwwwwwywDwDwDwD~NwDwDwDwDwDvDwDwDwDvDzH{IwDwDwDvDwDwDwDwDwDwD~NwDwDwDwDwDwDwDywQvZZ҉@1C@jxxxxwKxExEwEOxEwEwExDxExExDwExExE{I|JwExDwExExExExDxDwEwDOwDwDxExEwEwDxExxxtU>HHL`4PnsxyyyExExEPxFxExExEyEyEyExExExF|J}KxExExExFxFxExExExExEPxExExFxEyExExEbYB??^5 ;fRQQXQQQQQQQQQQTUQсQQQQQQQQQXQQQQQQQzzzzzzzzzzzyfD~M66l;"2DAlzpzGzGQzGzGzGzGzGzGzGzGzGzG}L~MzGzGzGzGzGzGzGzGzGzGQzGzGzGzGzGzGzG{{{{{{{}{{{{{{{{{{{n84b44ɅxHM24R6uB{HR{H{H{H{H{H{H{H{H{H{H~MN{H{H{H{H{H{H{H{H{H{HR{H{H{H{H{H{H{H||||||||||||||||||||||||||R:5mɅ11ttW31:`.R|I|I|I|I|I|I|I|I|I|IMN|I|I|I|I|I|I|I|I|I|IS|I|I|I|I|I|I|I}}}}}}}}}}}}}}}}}}}}}}}}}}wI:MMLLLQRLLMLMLLLLLVMLLLLLLʀwT11E9vԚ@@1182CWs@? 1224T!zGMMRSMMMNMMMMMMWMMMMMMM{A;22XC682252HN|IN2222:d1MSTNNNNNNNNNNXNNNNNNNe2222jT451122j>OO^,41212FvDUOOOOOOOOOOYOOOOOOOTG2232j{c222222`?XZvE< 22225X'TZZZZZZZZZaZZZZZZZt641196u^l?221122S9OQ{HH12121; e3PQQQQQQQ[QQQQQQQmV2222H@`Q`=222222J7MRPZ'322222FtARRRRRR[RRRRRRR>92211aOTZT:221122B5MRRk88212214V$MSRRS\SSSRSSRh222222}`]QK8222222;4JSS{HD222222:g4RSS]SSSTTSSTG222264zTPC622222283HTTSW&2222222GwDT^TTTTTTTx542211C>gUO<422112242~EUYZg461212123X%ćWUUUUUUU]nX222222WIZVM8322222232qBY[VxE? 2222222; i6TVVVVVtWcB<112211t\WWJ4222112211fCYWWƒPO12121222HyFWWWWX‘XXWj22222243nXXG3222222222W[ǗfÐ]Ð^Ð]|I? 21đ^đ^đ^đ^đ^đ^đ^ƔbƔcđ^đ^đ^đ^đ^đcđođđđȗđđrđeđ_đ^đ^đ^đ^đ^đ^ȗgđ^đ^đ^đ^đ^đ^đ^đ^đ^đ^Ǘgđ^đ^h@;2222222264wƔbƔcđ^L32222222222222R;ađ^đ^đ^đ^ɉVN2Œ_Œ_Œ_Œ_Œ_Œ_Œ_ƔcǕdŒ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_ȘhŒ_Œ_ƒ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_ȘhŒ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_Œ_ƒ_ȘhŒ_Œ_Œ_n2211221122A;tǕdŒ_Œ_xG22112211221122H8XŒ_Œ_Œ_Œ_Ɛ]c0Ɠ_Ɠ_ǒ_ƒ`Ɠ`ƒ`ƒ_ȕdȖdƒ_Ɠ_ƒ_ƒ_Ɠ_ƒ_ƒ_ƒ_Ɠ_ƒ_ʘhƒ`Ɠ`ƒ_ƒ_ƒ_ƒ`ƒ_ƒ_Ɠ_ƒ_ɘiƒ`ƒ_ƒ_Ɠ`Ɠ_ƒ_ƒ_ƒ_ƒ_ƒ_ʘhƒ`Ɠ_ƒ_đbXJ2222222222XL‘iǒ_Ɠ`Ĕ_lD22222222222222@6Uƒ_ǒ_ƒ_Ɠ_ƒ_Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ȖdɗeǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ʙiǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ʙiǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ʙiǓ`Ǔ`Ǔ`Ǔ`~542211221122u^Ǔ`Ǔ`Ǔ`—^]?22112211222211:4RǓ`Ǔ`Ǔ`Ǔ`ɗeɗfɗfɗeɗeɗeɗe˙i˚jɗfɗeɗeɗeɗfɗeɗeɗeɗeɗf̜mɗeɗeɗfʗeɗfɗeɗeɗeɗfɗf̜mɗeɗfɗfɗfɗfɗeɗeɗfɗfɗe̜mɗeɗeɗfɗeɗfv`222222222222tɗeɗeɗecT?2222222222222253Nɗeɗeɗfɗeʗeʗeʗeɗeʗeʗe˙h˚iʗeʗeɗeʗeʗeɗeʗeɗeɗeʗe̜mʗeɗeʗeʗeʗeɗeɗeʗeʗeɗe̜mʗeʗeʗeʗeʖeɗeʗeɗeʗeʗe̜lʗeʗeʗeʗeʗepC=2222222222=:ʗeɗeʗe^H92222222222222243NȘeɗeɕbɕbɕbɕbɕbɕbɕbʗfʘfɕbɕbɕbɕaɕbɕbɕbɕbɕbȕb̛kɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb̛jɕbɕbȕbɕbɕbȕbɕbɔbɕbɕb̚jɕbɕbɕbɕbɕbɕbq222211221122MDjɕbɕbɕb[@61122221122112211oEĘ`ɕbɕbɕbɕbɕbɕbɕb˘f˘gɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb̛kɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb̛kɕbɕbɕbɕbɕbɕbɕbɕbɕbɕb̛kɕbɕbɕbɕbɕbɕbǔeXK222222222222jWǔdɕbɕbɕbW;52222222222222222X>ɕb7ʖcʖcʖcʖcʖcʖc˘g̙hʖcʖcʖcʖcʖcʖcʖcʖcʖcʖc͜kʖcʖcʖcʖcʖcʖcʖcʖcʖcʖc͜kʖcʖcʖcʖcʖcɖcʖcʖcʖcʖc͜lʖcʖcʖcʖcʖcʖcʖc65112211222222lʖcʖcʖcʖcT5322112211221122>57ʖcʖcʖcʖcʖcʖcʖc̙g̙hʖcʖcʖcʖcʖcʖcʖcʖcʖcʖc͜lʖcʖcʖcʖcʖcʖcʖcʖcʖcʖc͜lʖcʖcʖcʖcʖcʖcʖcʖcʖcʖc͜lʖcʖcʖcʖcʖcʖcʖcʖct^22222222222286ʖcʖcʖcʖcP4222222222222242ʖc ʖd˗cʗd˗dʖd̙g̚hʗd˗d˖dʗdʗcʗdʖd˗d˗d˗d͝l˖d˗dʖd˗d˗d˗d˗cʗc˗cʖd͜lʖd˗dʗd˗d˗c˖d˗dʗd˗dʗd͜lʖc˗d˗d˖d˖dʖd˗d˗doC=221122221122F?q˖d˗d˖dʗcR112211221122 ʖc ˗d˗d˗d˗d̙h͚i˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dΝm˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dΝl˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dΝm˗d˗d˗d˗d˗d˗d˗d˗d˗dr22222222222222_Oȕg˗d˗d˗d͞lrF22222222 ˗d7˗d˗d͚h͚i˗d˗d˗d˘d˗d˗d˗d˗d˘d˗dΝm˗d˗d˗d˗d˗d˗d˗d˗d̗d˗dΝm˗d˗d˗d˗d˗d˗d˗d˗d˗d˗dΝm˗d˗d˗d˗e˗d˗d˗d˗d˗dɖfWJ11222211221122f˗e˗d˗dΝmǚcX>=5842(@ B222Ϙ2<222222222<22222222q2l444444444>444444444>g4g4g4g4g4g4g4g4g4n>g4g4g4g4g4g4g4g4g4n>g4g4g4g4g4g4g4g4g4n>g4g4g4g4g4g45Ϛ444444>444444444>445444444>{4g4g4g4g4h4g4g4g4o>g4g4g4g4g4g4g4g4g4o>g4g4g4g4g4g4g4g4g4o>g4g4g4g4g4g5Ϡ???????F?????????F?????????G?o?p?o?o?p?o?o?o?uFo?o?o?o?o?p?o?p?o?uFo?o?o?o?o?o?o?o?o?uFo?o?o?o?o?p?6666666@666666666@666665656?6i6i6i6i5h6i6i6i6p@i5i6i6h6i5i6i5i5h6p?i6h6i5i5i6i6i6i5h6p@i6i6i6h6i5i66666666@666666666@666666666@6i6i6i6i6i6i6i6i6q@i6i6i6i6i6i6i6i6i6q@i6i6i6i6i6i6i6i6i6q@i6i6i6i6i6i67777777A777777777A777777777A7j7j7j7j7j7j7j7j7qAj7j7j7j7j7j7j7j7j7qAj7j7j7j7j7j7j7j7j7qAj7j7j7j7j7j78888877B888888888B888888888B8k8k8k8k8k8k8k8k8rBk8k8k8k8k8k8k8k8j8rBk8k8j8k8k8k8k8k8k8rBk8k8k8k8k8k88898888B888888889B888888988B9k8k9k8k8k8k8k8k8sBk8l8k8k8k8k8k8k8k8sBk8k8k8k8k8k8k8k8k8sBk8k8k8k8k8k89999999C999999999C999999999C9l9l9l9l9l9l9l9l9sCl9l9l9l9l9l9l9l9l9sCl9l9l9l9l9l9l9l9l9sCl9l9l9l9l9l9:::::::D:::::::::C:::::::::D:m:m:m:m:m:m:m:m:tDm:m:m:m:m:m:m:m:m:tDm:m:m:m:m:m:m:m:m:tDm:m:m:m:m:m:;;;;;;;E;;;;;;;;;D;;;;;;;;;E;n;n;n;n;n;n;n;n;uEn;n;n;n;n;n;n;m;n;uDn;n;n;n;n;n;n;n;n;uEn;n;n;n;n;n;<<<<;;p=q=p=p=p=wGp=p=p=p=p=p=p=p=p=wGp=p=p=p=p=p>p=p=p=wGp=p=p=p=p=p=>>>>>>ӊxHq>q>q>q>q>q>q>q>q>xHq>q>q>q>q>q>q>q>q>xHq>q>q>q>q>q>q>q>q>xHq>q>q>q>q>q>????KyrLr?r?r?r?r?r?r?r?yIr?r?r?r?r?r?r?r?r?yIr?r?r?r?r?r?r?r?r?yIr?r?r?r?r?r?@@@VszssXs@s@s@s@s@s@s@zIs@s@s@s@s@s@s@s@s@zIs@s@s@s@s@s@s@s@s@zIs@s@s@s@s@s@AAUvt{tttVtAtAtAtAtAtA{JtAtAtAtAtAtAtAtAtA{JtAtAtAtAtAtAtAtAtA{JtAtAtAtAtAtABJđ|uu|uuuuJuBuBuBuBuB|KuBuBuBuBuBuBuBuBuB|KuBuBuBuBuBuBuBuBuB|KuBuBuBuBuBuBCY`Zu}vvvvvCvCvCvCvC|LvCvCvCvCvCvCvCvCvC|LvCvCvCvCvCvCvCvCvC}LvCvCvCvCvCvCw}|Xttj|B;lwwwwwxwDwDwDwD~MwDwDwDwDwDwDwDwDwD}MwDwDwDwDwDwDwDwDwD}MwDwDwDwDwDwDzx\j]]ف= MesxxxxGxExExENxExExDxExExExExExENxExExExExExExExExENxExExExEwExEbEJJʛJG7\~OOOVOOOOOOOOOVOOOOOOOOOVOOOOOOzzzzzzzzjL;< 227`-~KLLLLLULLLLLLLLKULLLLLLQ22RWW22IIݔJ|IO222Bo=MLMLUMMMMMMMMMUMMMMMM{;722dJJ22@3ʞGV^+3222QzHNNVNNNNNNNNNVNNNNNNb2275t:?2262HOo<:2227a/NWOOOOOOOOOWOOOONNOE22F>642232DXQJ2222BwGXXXXXXYXX_YXXXXXs3222]LG322222p@PPX&22222R }KPQQQPQQYPQQPQQgS2222|`RD222222c=QRk9722228c0QRQRRRZRRRRQR<82243r{RuI222222W:QRzGB22222CtASRRS[RSRSSRe2222@:c\d>222222L8PSQR 222222S!MSS\SSTTTSND2222TG_TW;222222D6OTUl<4222228e2T]TUTTTUv322222sZUTM9222222<4NU^xE= 222222CyHUUUUUUViU222222nVSD622222273K_VQL2222222T"PVVVV_^Wd<82222:7~nWR=522222242KWWWa.32222228f4VWWX|‘‘|XXXh222222LB]XP7322222222xEXXXuB:2222222DxEX’a’a’’’’’Ŗ’’’’’’’’ÒŖ’’’’’’’’’Ŗ’’’’a’a’a’acQG222222hU’a’aU4322222222iA`’a’aɈXK22222222V#ZZZÒÓÒZZZZZZz|33222222iZZJ2222222222\=XZZXZ(22222222[[[[ēēē[[[[[[[[n[22222265|z[[yF2222222222P:W[[[o=8222222\[\\\vŔŽŔŽŔ{\[\[\\\[[p<8222222E>fŽ[\jB2222222222G8V[[\ΆVA22222]\\\\\^ƕŕ^ƕd\\\\\\\]\ƕdj22222222]N]\\_D2222222222?5T\\ƕdŋXS!2222Ð]Ð]Ð]Ð]Ð]Ð]Ð]ƖeÐbÐÐÐÐÐÐÐÐƖÐÐÐÐÐÐÐaÐ]Ð]ƖeÐ]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ɩe_PE22222222~cÐ]Ð]cR;222222222294QÐ]ƖeÐ]Ð]i6422đ^đ^đ^đ^đ^đ^đ^ǖfđ^đ^đ^đhđđđđđǖđđđđiđ^đ^đ^đ^đ^ǖfđ^đ^đ^đ^đ^đ^đ^đ^đ^ǖfđ^}3222222233xđ^ǖfZG8222222222242Mǖfđ^đ^đ^}J= 2Œ_ő_Œ_ő^Œ^ő_Œ_ȗfŒ_Œ_Ē_Œ_Œ_Œ_đ_Œ^Œ_ȗgŒ_ő^Œ_Œ^Œ_Œ^ő_Œ^Œ_ȗgŒ_Œ_Œ_Œ_Œ^Œ_Œ_Œ_Œ_ȗgŒ_Œ_lX22222222>:oȗgŒ_Y?6222222222222KŒ_Œ_ő_Œ_ɊXMƒ_ƒ_ƒ_ƒ_ƒ`ƒ_ƒ_ɘgƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ɘgƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ɘgƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ƒ_ɘhƒ_ƒ_k<922222222THŕjƒ_ƒ_V94222222222222oEœ_ƒ_ƒ_ƒ_ƒ^Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ʘhǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ʘhǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ʘhǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ʘhǓ`Ǔ`Ǔ`l2222222222s]Ǔ`Ǔ`Ǔ`S42222222222222a@—_Ǔ`Ǔ`Ǔ`ʙhʙi˙hʙhʙhʙhʙh̝nʙhʙh˙hʙiʙhʙhʙhʙhʙi̝nʙhʙh˙h˙hʙhʙhʙhʙiʙh̝nʙhʙiʙiʙhʙhʙhʙhʙiʙh̝nʙhʙiʙhɘjRH2222222222uʙhʙhʙhW22222222222222T=cʙhʙiȔaȔaȔaȔaȔaȔaȔa˚iȔaȔaȔaȔaȔaȔaȔaȔaȔa˙iȔaȔaȔaȔaȔaȔaȔaȔaȔa˚iȔaȔaȔaȔaȔaȔaȔaȔaȔa˙iȔaȔaȔaȔa322222222297yȔaȔaȔaK22222222222222J9\Ȕaɕbɕbɕbɕbɕbɕbɕb̚iɕbɕbɕbɕbɕbɕbɕbɕbɕb̚jɕbɕbɕbɕbɕbɕbɕbɕbɕb̚jɕbɕbɕbɕbɕbɕbɕbɕbɕb̚jɕbɕbɕbɕbɕbnY2222222222KB‘iɕbɕbɕbqF22222222222222A7Wɕbʕbʕbʕcɖbɖbɕc̛jɖbɕcɕbɖbʕbʖbɕbɕbɕb̛jɕbɖbɕbʕbɕcʕcʕcɖbʕc̛jɕcɕbɕbɕcɕcɕbɖbʖcɕb̛jɖbɕbɕbɕbɕbn=92222222222gUɕcʕcʖcȗbcA22222222222222?6ɕbʖcʖcʖcʖcʖcʖc͛kʖcʖcʖcʖcʖcʖcʖcʖcʖc͛kʖcʖcʖcʖcʖcʖcʖcʖcʖc͛kʖcʖcʖcʖcʖcʖcʖcʖcʖc͛kʖcʖcʖcʖcʖcʖcn222222222222lʖcʖcʖcřbU=22222222222273ʖcPʗd˖c˗c˖cʖd͜kʗcʖd˗cʖcʖc˖dʖcʗdʗc͜kʖcʖdʖc˗d˗cʗcʖcʗcʖd͜kʗcʗdʗdʖcʖcʗcʖd˖dʖc͜k˖cʖdʖd˖dʖd˖cɖeRG222222222254˖cʖcʖc`L=2222222222PʗdK˗d˗d˗d˗d͜l˗d˗d˗d˗d˗d˗d˗d˗d˗d͜l˗d˗d˗d˗d˗d˗d˗d˗d˗d͜l˗d˗d˗d˗d˗d˗d˗d˗d˗d͜l˗d˗d˗d˗d˗d˗d˗d322222222222D=p˗d˗d˗dfB7222222K˗d˗d˗d̗dΜl̗d˗d˗d˗d˗d˗d˗d˘d˗dΜl˗d˗d˗d˗d˗d˗d˗d˗d˗dΜl˗d˗e˗d˗d˗d˗d˗d˗d˗dΝl˗d˗d˗e˗d˘d˗d˘d˗doZ222222222222\Nʗf˗d˗dΜlY?673(0` %2422:22222292222222k9e2e2e2e2e2e2k:e2e2e2e2e2e2e2j:e2e2e2e2e2e2k9e2e2e243c222:222222:2222223:e2e2e2e3e2e2k:e2f2e2e2e2e2e2k:e2e2e2e2e2e2k:e3e2e2e2c343333;333333;3333333;f3f3f3f3f3f3l;f3f3f3f3f3f3f3l;f3f3f3f3f3f3l;f3f3f3f3f3444444;444444;4444444;h4g4g4g4g4g4m;g4g4g4g4g4g4g4l;g4g4g4g4g4g4l;g4g4g4g4g455555<555555<5555555<5h5h5h5h5g5m666666>6666666>6i6i6i6i6i6o>i6i6i6i6i6i6i6o>i6i6i6i6i6i6o>i6i6i6j6i677777?777777?7777777?7j7j7j7j7j7p?j7j7j7j7j7j7j7p?j7j7j7j7j7j7p?j7j7j7j7j788888@888888@8888888@8k8k8k8k8k8q@k8k8k8k8k8k8k8q@k8k8k8k8k8k8q@k8k8k8k8k899999A999999A9999999A9l9l9l9l9l9r@l9l9l9l9l9l9l9r@l9l9l9l9l9l9rAl9l9l9l9l9:::::B::::::B:::::::B:m:m:m:m:m:sBm:m:m:m:m:m:m:sBm:m:m:m:m:m:sBm:m:m:m:m:;<;;;C;;;=Reo^K;;;;;Cq;o;n>>>BtEq>q>q>q>q>q>vEq>q>q>q>q>q>q>vEq>q>q>q>q>q>vEq>q>q>q>q>???VxrFr?r?r?r?r?wFr?r?r?r?r?r?r?wFr?r?r?r?r?r?wFr?r?r?r?r?@@dxssOs@s@s@s@xGs@s@s@s@s@s@s@xGs@s@s@s@s@s@xGs@s@s@s@s@A_ƵtztttJtAtAtAzItAtAtAtAtAtAtBzItAtAtAtAtAtAyHtAtAtAtAtAK[~m{vvvvCvCvC{JvCuCvCvCvBuCvC{JvBvCvCvCvCvC{JvCvCvCvCvC[\`XuwwwywDwD|KwDwDwDwDwDwDwD|KwDwDwDwDwDwD|KwDwDwDwDwDxp|\rrs@3dxxxHxE}LxExExExExExExE}LxExExExExExE}LxExExExExE~~YsZZ׈='MRv~~MS~MM~M~M~MM~MS~MN~M~M~M~MS~MM~N~M~M{{{{|{{{{{x[@HHśJR5 XOxEO{H{H{H{H{H{H{HO{H{H{H{H{H{HO{H{H{H{H{H|||||||||||||||||gQ===Z3= k:|I|I|I|I|I|I|IP|I|I|I|I|I|IP|I|I|I|I|I}~}~}}}}~}~}}}}}}}tMtJ55k92JtA}J}J}J}J}JQ}J}J~K}J}J~JQ}J}J}J}J~Jz;5[22ȉzjE25Z'|ILLLRLLLLLLRLLLLLυ[63lɉ11u=PV#22> j7MMTMMMMMMTMMMMMF>C9|^u11Y 2225^+QZTTTTTG?11MD]L631132~EUÆUK1211? sCUUUUUp2222fSWJ322222pB\U_,32222NLVVVo[W`O2222fWG221111c@VWs@912115`-TWYtXXl861164yzXrC111122W72111\\\\uēēēl\\\\\\ēbu322211|a\YN;111122=5R\ēbLB111Ð]Ð]Ð]Ð]Ð]ŔdÐÐÐÐÐÐŔÐÐÐÐÐÐuÐ]ŔcÐ]Ð]Ð]Ð]Ð]Ð]ŔcÐ]aP222233vÐ]^D722222283OŔcÐ]ƋXR 22đ^đ^đ^đ^đ^ƕdđ^đ^đdđđđƕđđđ~đ`đ^đ^đ^ƕdđ^đ^đ^đ^đ^đ^ƕdđ^q861122>:qƕdW=522111132Qđ^đ^Đ^h64Œ_Œ_Œ_Œ_Œ_ȖeŒ_Œ_Œ_Œ_Œ_Œ_ȖeŒ_Œ_Œ_Œ_Œ_Œ_Œ_ǖeŒ_Œ_Œ_Œ_Œ_Œ_ȖeŒ_Œ_d112211SHÓjƒ_T8311112222xGē_Œ_Œ_|IǓ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`Ǔ`Ǔ`Ǔ`Ǔ`ɗfǓ`Ǔ`eIA222222r\Ǔ`Ǔ`Q3222222222jCĕ_Ǔ`Ǔ`ʘgʘgʘfʘgʘg˛kʘgʘfʘgʘgʘfʘf˛kʘfʘgʘgʘgʘfʘgʘg˛kʘgʘgʗgʘfʘgʘg˛kʘfʘgʘg|32111122tʘfʘgR2222111122\?dʘgȕbɕbɕbɕbɕb˘gɔbɕbȔaɔbȔaɕb˘gɔbɔaɕbȔbɕbɕbȔa˙gɕbȔaȔaȕbɔaȕa˘gɕbȕaɕbȔbcR111122:7|ȕbȕazI2211112211Q<]ɕbɕbɕbɕbɕb˙hɕbɕbɕbɕbɕbɕb˙hɕbɕbɕbɕbɕbɕbɕb˙hɕbɕbɕbɕbɕbɕb˙hɕbɕbɕbɕbu86222222KBkɕbȖbkD2222222222F8ʖb4ʖcʖcʖcʖc̚iʖcʖcʖcʖcʖcʖc̚iʖcʖcʖcʖcʖcʖcʖc̚iʖcʖcʖcʖcʖcʖc̚iʖcʖcʖcʖcʖcg11221111fTɖcʖcǘb]@11221111524ʖc`˗d˗d˗d̛i˗d˗d˗d˗d˗d˗d͛i˗d˗d˗d˗d˗d˗d˗d͚i˗d˗d˗d˗d˗d˗d͛j˗d˗d˗d˗d˗dœiJB22111122k˗d˗dĠfR<221111`˗d3˗d˗d͛j˗d˗d˗d˗d˗d˗d͛j˗d˗d˗d˗d˗d˗d˗d͛j˗d˗d˗d˗d˗d˗d͛j˗d˗d˗d˗d˗d˗d{2211112265˗d͛j_F8424( @ 2U2Ӛ72222722227e2e2e2e2i7e2e2e2e2i7e2e2e2e2i7e2Әe2U3U3383333833338f3f3f3f3j8f3f3f3f3j8f3f3f3f3j8f3f3f3U4Ӛ4494444944449l4g4g4g4k9g4g4g4g4k9g4g4g4g4k9g4g4g4Ӟ:::?::::?::::?:l:l:l:o?l:l:l:l:o?l:l:l:l:o?l:l:l:777;7767<7776<7i6i7j7m9:9:>::::>:m9m:m:p>l:m:l9l9p>l:l:l:l9p>l:l9l:;;;@;;?T\I;;;@u;n;n;n;r@n;n;n;n;r@n;n;n;n;r@n;n;n;BBBI]FsBsBsBsBvFsBsBsBsBvFsBsBsBsBvFsBsBsB??crBr?r?r?uCr?r?r?r?uCr?r?r?r?uCr?r?r?@twssFs@s@wEs@s@s@s@wEs@s@s@s@wEs@s@s@aiyuuuBuByGuBuBuBuByGuBuBuBuByGuBuBuBj[rkwwywD{IwDwDwDwD{IwDwDwDwD{IwDwDwDߘ||\Ƃ_dSsy|KO}K}K}K|KO|K|K|K|KO}K|K}K{{}~{{{o~`kku='a2~L{H{H{H{H~M{H{H{H{H~M{H{H{H}}}}}}}}}}}UvUUԍ?'Ep=}J}J}JO}J}J}J}JO}J}J}J~Q>DDàmN3T"{HLPLLLLQLLLeS?75F`.4:e2RNNNNSNNNSGaP22vDuC; 2GxGTTTXTTTw43bxD22h?KI23W$NRVRRRoX54x|i@22\822HzGVVYl22YJXQ:22G8SŀME223Y'S]ÒÒÒm^^VI22y`[H822?5VÍ[X&222; [[ÑÑÑi[[[{4332tV@62294P[o=522Ð]Ð]Ð]ĒqÐÐÐÐēÐÐÐÐĒaÐ]Ð]Ð]Ð]Ēas\22<9pX:42252MĒàM@2đ^đ^đ^Ɣbđ^đađ}đƔđđmđ^đ^Ɣbđ^đ^đ^đ^ƔbfA;22PF‘fR532222Lđ^njYQǓ`Ɠ`Ɠ`ȕdƓ`Ǔ`Ɠ`Ǔ`ȕdƓ`Ɠ`Ɠ`Ǔ`ȕdƓ`Ɠ`Ǔ`Ɠ`ȕdǓ`q2222o[Ǔ`O222222rEŔ_ǒ_ɗeɗeɖeʙhɗeɗeɗeɗe˙hɗeɗeɗeɗe˙hɗeɖeɗeɗe˙hɗeɖeXK2222rɗeM222222dCŚcɕbɕbɕb˘fɕbɕbɕbɕbʘfɕbɕbɕbɕb˘fɕbɕbɕbɕbʘfɕbɕb|432286}ɕbsG222222V=ʖcUʖcʖc˙gʖcʖcʖcʖc̙gʖcʖcʖcʖc˙gʖcʖcʖcʖc˙gʖcʖcʖcv_2222IA‘kɗceC222232U˗dS˗d̚h˗d˗d˗d˗d̚h˗d˗d˗d˗d̚h˗d˗d˗d˗d̚h˗d˗d˗dÒlA<2222dS˗eȝgW>32S(0 ` g5c-d4i6g4f3h6e2e2g4g5e2e2g5g4e2e2h6f3e2f3h6e2f3#cB~|L`H^+i5m;h5g4h5i6g4g4i6h5g4g4i7g4g4g4i7g4g4i7bY^Aq0 < Qb0l:o>o=k9k9m;l:k9k9m;k9k9k9m Oa/j7n;o=l:j7j7m;k8j8k8m;k8k8n5gME1zR7-i:\2>-,2; M`.l9p=oP2.20.0: K`/o>xGvDuBs@t:nY23F;mA_6#0B4@pGg4C/0220./7I^+m:uBvAz>UF$+vT~9L6&073>pFvD^+: -12221./7yGyF>y\(,86m^>>4*1/1q;tG|MwDS!2.222221|J|JHsb64(,_NyCC32-1+1_;LzNNn4FxOPR{HU#2-2RRTLxl4301*-z^‰HUZ<)032-132EWRTVwFH.SSVSRMC-//097~h‡QQH7+032/1,1pCTTTZTg4UTWUÍJy_*-22)-cQŽN‚UP:4.12212)/[n;m;l9k8m:k8s1fEdqE,8F0-9I[)k9s@r@r@oc9D.,08I]+o}S5jPBxg'..9' bحIcdx|R$Ӓji5 ʹ"_x<SG*v:g2}'4eDrr%i%a倜 6CϘ1C*%$$fg EEE"??_ICX  SEeW'}91*C2g3䠱jj}ȁ-h(4d1$^?I]eg܄HP28חv&1?AD$ pd b^~B9a#>S ՄTv=d7)>~n[o:;;Eff&^~ب6 =(8Ue$MjooO= ׳j+a?ESHE½tÜ e^& )r,%HۀN³ȭ @I7nM <% ޔI[rH!Kv9i[A[us[ɬAmRKWIN a+-z5mp$M$瀜I$(cnn())R m5P (czyKG ʵ*Je2hQ&9D(gbE#enii1-HGM2E+];VWW'97.LމW Vȧ D_G$hmBnسrJ{7^#d,$(Ͻ<9I&Z,Cŵ1A|&)MtK![M0\Yl'LMok)=t*#B.@ڱJqKz i PFWe̐[tSКL\JxUx(V [šCDuu'&O,=BT}+џ"d_Ϲ.gu' @x<^8q„ A~BN"%\$p_\/JIIAo !K ȋ穣MRT Bt:u(//ׇ~2_bv VϨ^Av!BbAAdYQYG#F' FIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/72x72/black_point.png000644 000765 000000 00000007017 12025152311 023600 0ustar00svpwheel000000 000000 PNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe< IDATx\ pT#dS P@4)(j*>:i)5؂8(BE cd@R"$IBWvfI \{.w>jˣ5O&rss)11QShiuEPA]uEPmPb!С7v՘"I|tA;} 0"BRmذv{Jٳ)&&>*֑h4FTMW`(0'=@pHUnذadZI(hn]3n@S |":"xsۺu릪0ѣG;޵ Lׯ3gj_|1aG&|K D';ƍ}gF ~rrrAxxŊy.WS9>>i!sK$f_Y;.[6runSOl?^](%{v6 Evכk;v,l6*.)IsAbӨ#ƥ"ޗ%@:ܻiFk}K/P[S*ƕZ䜜]UubԸhz;t._n8`67 G.B%5l @-:r\: #CV+^ ZN"diASLzW5+WJ έ#AO[37 A0&]%) []7]:U.* 0q&I<9@`0RΔHD1.'_ׂnKG\%6@Iav?Ԍ@ Rdy&96 \-9. :3&S_oW84Aϊ$@`ڷu܀'S5v[ 6FE(|7gŧrkyyss#bǑ$Օ­Y'v1պ(7’V$[#Zwi*]r-Y2E%j$%<[Uj%F+[sȡ=>%4+AcTlҖ :g8?㉾?>2.5vn ͞(MvvZ} uΝ5e"rQL7q;ݍfɀS fҦֹ}MȐ'I B=z]PRax'eeg_Ί'Lz]wը."5r6Yod{X rշ937);k9MT.N˜dCޗH'ClUM$Ի>#*h"@M6eہ#FMA?W,b$┷r`W};Žv 9sP\\\S_ttԌ%gl6Ft+nDfN՝YVZV=x]VbYzukqV +Q׋OIǩ^'B-[֮bGAZ?u r-vN ~5G=Qb= 3A|s]X:.ufī՝dL]8Hzغ&]uEPG 036fIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/72x72/check_all.png000644 000765 000000 00000003203 12025152311 023211 0ustar00svpwheel000000 000000 PNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe<%IDATx[HWOFmZ/{mZ h}Y}؃m>VUcΩպL`Mh3/ѳ I>NL?|sQJ 0@ 1@ 1a b>2qNOOIww71z? &^^^|oWCGM+!菶I$::_J۷o}3OOϠ{(OƮA hE ZX,>MOO/GGG4Nū}7ݕ( =G@T" PWWgxԑqqqK@NSSS8޺uq4HRR>2=q: =G8 ?"O(99yoXV;g2Z4*D=>>>t~~ޮ*--8ib IB f`` miic^\\j5`|XXkKo޼I!Y1B2-Z<׀Di䄴fgGò3)qJURR%ZXX *5Γ%ddZ'44TΝor,<Kizz:$!!>~ۺ_ ^bxo= rr ܴ/_@hGDDޞ+DiYYB/a*(, F#Zf H[[Œ+++Q0'___'-,@CCC8Z` o޼Ag>*Igg y^akL`ȠLɱQ"`611q #HewD=\$33uV@`_`}9'R~ufǁs@⾾QdR qXk\n8>> Z-A#_lQO0R 6ay 9 ) 277w[Nh2ĶFPۊVA6 bbb.*C@&0$mj(~QKk_fWțfKj8MRȠ4vu$4$$]ʕ+J vaX^j< tz:;;k9PVD_xNPwVkjjU<}{:! p|zA~eZQQAυТ"pNAֳ-;c,Zֽ{(HKIjj*8g gnGh5 {coȪ(V@{,d2΢:q1@ 1@ b cB"/ [IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/72x72/contrast.png000644 000765 000000 00000003271 12025152311 023146 0ustar00svpwheel000000 000000 PNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe<[IDATxmLWoE[qT"0:h_)a1~ؗaŌ^$ 0p E&:tHyk)("{ >In}_Ͻy*p@q@q8 8 I=IdZ۫ZJ.˭*! L=~XVSSX^^gm6___5kZ222jՅ<|4'Ȇ'ϟ?뽁#G[hQ?dffBAAFa, 88uرs0''Ƕ=ٚAn޼'Of#NZ OgϞ\mdd@рǐ^fll%Ց۷o/^m۶BT ǎ}QP\\ yyyo>}v@nK񏎎{ܸq>I\&pA5'd2[^s.jP(4 .f_bE}xx8_ѣGO&;DذaC ɼͅlиYD399T^x1#^%nЬˌDܬ=Ν;%Z5_ZZeRRcIJJJM۷o'|aSYPJJ 14؂El6/F իW~ss;""ax):@.F!9eL&&]):@}}}̭͛O>>=F.\H5z&Ht T,ۇ}||CMFPZ~je}D34Pl您 |r,22dZX[[ AP&K.m[|Ytfff5IӪJ"iii*..&:Í)QV5,K"CL@ 9 UG{\tI+tGvvO111ٳG@w^z%5jN2{61,,?D :'̌F#ټyrCݽ{wFÑh =6m\ 1{BB:'}( 1(A2e(۷n=dee9 Ç766ƹT]֭[WFv$%%F3ׯV& f޽{OgϦtd2bdkfLz=+[P*Bg%$:\rg<*3x8pTj۲e MMM rrr@FF/fY//tww|!UEj4::GeCs$S}˖-jf eN$vor@q@q8 8 /[OFIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/72x72/luminance.png000644 000765 000000 00000006646 12025152311 023275 0ustar00svpwheel000000 000000 PNG  IHDRHHUGtEXtSoftwareAdobe ImageReadyqe< HIDATx[ TŮ#dJ*Z9"8$SW"fKz(KDDBD0pZL}45C}{zOyZ,=}}4 [w077ӧO5Lq3d #@F2dlF Q^^.̤R̟ ĉK/$N8Ν;:u믿pѬY3i"I!wvvv˖- IMM1W^yesDD 3b༙|M#DoAƜ9sċ/(S*$$D߿ȵkLMMt!/JJJ򆕕fgM:u~o---5E _G}_Dp0QTT$?wU0=/oߖpB?<Ɖ(+v2MM+'Bb7ڷo/,--+A!СC u 8_|y_LeoO/QV,??Gܷo?ptt>}~˖-nƍ F-u&RUV޽;aذaߵҦ2jxYWvݻ[~5a5>;wGvuuCj@$%%uڌffLτ7TDmر7l P.]Hp X}$׿Uڕ+WeM.H䛰0+VnڴvС!#,7l:t܁H|2 4Im۶%Xr:QtOݼy M Ryqq-jA'/]4`H"Uڵkxcu$'Me;,Y2|;s&L`(`͛g"???_Um50Xi~>Q %/xC-BNٳg9)ɴ$><@˒%S~-y>hq8| 7kӦMPAAyTTT4@#:vX Zse+L_`V[#]eee9rH[DR`РAy,ݜ@^S-[ Cڿj0}IѾ bRB҆| Y `QuV'88x 2f̘>>>.TQpG@;gN AuyyyVZRQj(ՆTꫯ^̃nvر,uAx-Zp@m5k@ 6! pDvvv3&*ewW((f R!/Ξ=+S@ 0 )QD}{ΝngΜI5k\h^ EDyG,A  S /qj $CݡU6/%8`58x`#F7n\ j_cǎިr [o%FqԬ{Fq 4BQk%hZ9p5eʔ`;;~a9yd"(+\P*(H r?rǥ+.y8S7bXs`ZUfZYYؾ}68gBffжiLIqoLO&Mr@ޔ 2xR$.4.8 !)Cx5=| :^~5NcI/|9^GUt֭k;--*NPP}4`ЖblѰan " 1իcV)7nqX%)?jc྽9QsiӦF G>LFyrr<666ka`o۶M.V0h3< rZ3@0HV*ϟ:upvv #,,Ԑf|4e^S6̓زf>QԚjTTT =#8B,Z[ sG~'=Vٳ}%3ׯ_ pS19s渣ꞃ~' r-"Xƥ<ʞ;wЯjjxx5թ`wy۵/h *ORw.5ЩSh6E珅Yh4|*_=io0uhy%C 45j&e RN\zA Wy=+\! G999ASv[juɕMٷMԷez(ަMAh>}!eggK ^UPP?sQ,\.e8DŽ[J!B>qڷr9}'sٲe;H0}dϥZFSDӇl7oVoO\R*'tZt)pus6.olYN[ yanj[Gِw*/// _?!կTi#G}ȊI%8Y+p^߾*[ P3@M|8ܷr*P$RA3KxDD9et: 'S3@WiRFMu{{0X@sεb8 2-t0c供;z5S3e#Է#:ipDhRRRS5az$m|Jw=g&M2pXnqJ*4ѷ)$$$;]{J^0\K8ٴikHT"Qqova0LrAތ~< z8kk<|@6PaZQ{\rU^v:inL=( Ϸd'MyITU)X¼J0tK4SI*V‹튏$F>hrCEŸ r… c!SkP"##DD¬V@`XGB+uC rww?TDN!H-?DNhyO"I~3 O5?mpTAjoF=&bq9ˬ⿉*2dl=r$}iս{v{"]V1fr *֍*eK #_ ԅ cȜ !_A%dB俐-D-a7x: a}CDwB[ZvMs1㵪aC1|'{}(,jG٥ppei!:(isfwlo!.",:tCzwj`:Lc1z 24UD  bP*X8DddHJ "'BfdA}:_"igo%P:k"K2$`Iq^U1 ݰA y #>Odžun^hC׹[i..aD"ٳtf+Vl *jɇfp$@ibӄ́~fMKXNeӦMݾ Ķ"A3ANR0Z2QH1@%#QʉR(m.L#x4xqQy {LIBex! q% PCW]Tdu_F^x@4Hy/^epOZ_Z1.(G.4uIn@QF`.TrD 9R RnoUWHGQwb*$,۝Yddx1P] 5 'u(S0e& R`)R~[M֗;U5g%$٧b2c%/F*M;VÝuIA̮T [D9{S~X Ĺت3gZ#rD7X2T]s+ (!ĵQI$-/⨽EO}%6ƿmʯƕ1Yh(F53WNu#G|iȦD *GO!{1veh2\v\oqsMQ˲XKrgk_|r]L4nj)x55+/ROTɐC?2K6Al:EOywVE' fl0j4\a7/{( B&x)_)_h^\ GzGbh f īd>8U !<RK. xr.FBAOk֫Tp5H1C h Dt0q^' A\hP0bIĕdL%2 !Vm ͊R 0{/ `ej'=71@0#TzKi0H ʋ R 'Ǖ(\ ۚtކƨqf?@VbCٟ(T׌$|o {b,͑2(lCՐV/Aֻ*VSp'`BB r.1XoC(@& D% lpr\V-qIFm"-ز>@Ԍش:\xHf''wnga(LuԶ1@m:]'z{CP^ԀM(EXOMdqOcD[~ W '6i\wtŊjؓHe3Z(4yLSIP-CHQjB%GXBfbuUìjpUCљ("8Z1=*+}I=a:d`̖A1"Y-e )I?cjl(kv<2, !T+,5`M.M#2}J_!G釠ѤNeD9ђj,h'ϥ޽{,E|l3oП >(`ΦYJmEE(!+j+/XuY`1$7! t7=BUThk|BTOgƆh}qr"W4|.dmoiC&@'Q}UR?R Mtmgb{1\{Ð.۠#p M{&d6Rs=*nE*T|'V<IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/48x48/dispcalGUI.png000644 000765 000000 00000006752 12025152307 023317 0ustar00svpwheel000000 000000 PNG  IHDR00W IDATxy}?} }d_uQXcՊ5ڦIhrn䜚cIZZӣ-K(â28003,3oxe@3>~|<#L|\}P0oiQ6Sfi!+iϱlޯh%[2$\O{/fi{={n;نGz78|l;@1@@UR* S oaȧޯ)x9u-~˽}m."^#Я. FwVƩx?@5JX0`yHW`%:J.AT6Y8x3OEw!a/?éIpM̰{kJp)0PްDr&S3X$`@b!^t.#;lƄq*flHg&I &3e]\g8Os lUFs+.n9kE K⺁N nI/ɱHostKhǎ ƫ E L58X(hwDo77n_O 狗u\оq7&ۮVݻǰyx-1Sb eBH$S`kB%jY0+ca =izJff4'syoÅv(xv-]lΣQDk")K !OwjA^l}4f ^.]i'bظg4?2Iu[7Nv+jB ?j%fKT`^>˝^ofU|'OqvxީaL|mm#ޅr^bmK/ W5,(oY@(+H뷿ɸSG 3:wv8_X羅fV|w6pFulZ ߎ;5vrƖ6iP٩^OﮟCBmRC3g/^/T&~[ˊ*R("V ]IAcNKW'D^'QJî˭߿3gUw=f^RWe1n=| WQ;`Gn_cټ[90ڱn{J>ܳ]mfӇPqKln|,v{^2GƱK\/OLnS .j;-vM [ :1$b9@BA2WE0 i}ó꘰C3m賷оlzs0٘1d.6f-+(8E" P&vmOo챯\hh[ =_eo;zFz\y1h/i3l _3+Lnc{V9xz6y8.\xLև] ʝ9~]<!'TX( fBZ`0=vݏؤUw['-]< ̠F?``+3c   "*0`A tnA~+Şs`Ȱ&4X;LO=I{5 $;q4j AB^ݺ<=Bt/2 % 3Cm =$ 9h2L#$RAO&w%^'BGk~ X !rG[v7H/U{R'PODuO,e"aBgacF̺@P| j<p&L֊c!kI֟G~yd-CVRbyՀƛq訠{/z:*WX+Ѝ +yE*@c+'U,q0ns";1ĈwА=œgJȪ~~ TJ_/BK@ČT BYBYtyP@og -.v2 U!tʌT%R޹!T@ȍGIᯏI"IL,#-m%*C)O2lc 9-A&l%]K"-$rޒ*Qy>|xL,Z cf:mU4a*ZV@zäA )/I-#L2FB ybo1?H$MI -QM@r4AHzbl}[(O$?GB#h}M;(EZM8?oo6;[XSBXӰ Z;2K2K$ |lH XLD(- ]?$! IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/dialog-error.png000644 000765 000000 00000003016 12025152310 023663 0ustar00svpwheel000000 000000 PNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<IDATXKdW}TխGjz~dGI!Np!*8ZY\dt'rFQ$ q`:LtwuwUϭsQ3sEUyR@hUC7Yj". pxYm-l`03I2kZUPyE৥Jp~~867geGFtm#,Zl7Q+H5K\+NM}t^DNhvZ[zWUu'&pePލbƼ^U}j"k\)ûw76ȾxQEy/[7_/ިSj"_2kO.,\-0Dz Qߦ[߷_!ȟZX!ydH~zm>P_|X-/Xȹ.p`l.-^*8fMCoMO/Z[oO[iO*&lnr= ~v&_|bD@ c33x&+nqBlj1D++|駋yW'ggK{h܎޿Oj"VM$cD>723Cyb# U49bρ$A} "KdxXD?Yϳv{ cÑá:e! m?w,L7t;!:^d0㝔u>x=0 Mq޿,Tu9".Wn#&7 pk-DfgzA!WHWLLA@@̰{mQ;Ơ@oN $#BfBV[FGQ:`&|ܩ)@Uq.Mˏ$~,R*Qw~Џv##}hV@ELOY$oUU8cz/ ~vҁ@oۍЙ}^=wΟ'r]WAS׶Z;;=9x#T~ HaPXz{ |~r.yrrt4CjgXXNU,lZ? `SU7&kՂ9c`^^HX8عnFKr/6-`UUCR0OB5qmV>qcٖhJ$v$ ;߾`;7(> PF/g+0A9 lܸ^7Ig9Ma2R˦қX꩓$;YKkRIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/dialog-information.png000644 000765 000000 00000003601 12025152310 025057 0ustar00svpwheel000000 000000 PNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<IDATX[Wk_;s̜03t0@1VlH&MS-/>CI51AJMӴjĚ(S )Uh tdt:콗b2̜~N^{Ě|%EH@#μ[Q=j`ߡm=Y*w$J ͖7]T!^ܿCgGK5-Vc[D._,}ْeK G˘-'㉗T9Мw Ia. z2=R'۩)Uמ TVoF΍bcS_ZC)_>T+E n K} T13&>* WyLߝtWX7C,c.~ysgq;2WdӾD$HZB()t!]gF3'[5_ۦ|͕B)IjҲH >Yzm{Zi%Jš6k];`\%J6c#ADDDԞI)_+l9sUxHIλZm犡f$>A R5viIQbѕv{>{?c ښ#&(q53Z("LL c$;[}"Ky--́bc;ۤ06Axi ޼Sg()81.M.]wR eS2Dז[pʼn#)uTj:7V=Qq1&|3]Wu 8;ǒZt \-锗)u6͕Mh,ƾC댯R"0m'j%:AJĸcKy-Yo|U-mG;6) J<)|-ɼصu#+ۙ+ǷY%c0m2M Po?"gX AV v 蟗E9Fo Z <) f+b(vF1[al~nA[&`$w&(6,,qb87iR"j8J1[Ē8K1Pƾ6G7rF^xmԳ)p`Eb, Hha#B==FJ+:bs௧.AI ZcbcQ ְ 876K1#sh?|<-0 Fi1k'.cyd%톇#܃R5 dkjE!vbnFt֮q#\8]pP TKڅbPn'( S%P# '!:]ؼ hLQq\3\ڷjJA=Q5-WI`2p(HwMv&_.,TBf>R=+{Z?6„MYS"h8sj[QOב0!Ng8k +Lh=/O]eA@bxֵPeb@Uz]"rM2@0FCIWշ{dXl\CۏwPY9Ggpyn9jRUxҹ7EBx.Xl^.n-,w WDoّa 7a/ +$X)4! 6 ;$?xAGᛗTdlkwX < -480P#2A^ dlW~T,)D$8Cԅ׬3XX;n—?YTT'S0X|d::"/Ѕ(3Wqƒ1G2aW пFŖeI᪫7l{[/"zI!3)5wt@ǯ'h~Qvf 9 0x|wۨ&j?T}'~Dʻܮ__\{榾"zOr[Xt\eU:-VPTݖadvXx櫆=p2:oWUݤ:{ZBJ,ޅ0pË{5-n6A+ B{ģ¼k%aݶE͖kTFL|Ѐڛj¢㪪]YS'E 9 Ptݬj* @rME@!]@K&N{z S"VNͱ+d>|Ԩ/4XKkDT(v0Rv]'ss?w5͚uj9T7 De4l&ߓ~+}놻w8ʴ>#|os5)n߾Fbʴ^=_wߓmNqUc#죧Na&u=wĂO/9ʊ>{z}H0VP'hau=10h_ ~vLdVDc(L0%elꏣV7ExyQ|Oe/Vwj_NȗP9$ ("ﴔw]c$̌Ki"fiiTa0uXߓ}`bG0$ Ғ@~dk0;}Ons7[j(T`ha\a\R՘9t/} Uә`(\ٲw{J$Q\01H"aX{rO"оv)} \(23V8W@~guL ֨{ro}(m}Œٶ1MQ"au0rn(U#V,k^uX2zjKvnzaC5 ]´:EMߓ!dʇB *^Wjȧඍ1̌$%i ܾ-t Gp3V( ~?N{ww\zĹ&&+[O'>}4 j!DB;<9](, /.LcUi/&k79ԗbw"~;ʼn AP_it;?ITa}O/=u%z| LsQ:(Wx{֫FgWx1;93FXDDDmwML}rQ UjX}!cQXKj@XY7~$HRo!"S;:Q0y<v#]H(7*llTk5W)J޾xp R$Z@ gFVtr-0YMGf'9vzpʚ6]CΎVpᓿܧSn>YYex"j~i1&/?^Hlj:Uöh50^C094\0آfkvo-d]TvӠ >2TDb).ǤІ|_jH- Q 0ֳrXDֳ vDIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/dispcalGUI.png000644 000765 000000 00000004343 12237536424 023306 0ustar00svpwheel000000 000000 PNG  IHDR szzIDATXÅWpުr+E16Nlp 8 N}sB+$y 3$ 6t'!`EfU{+]s'>A) ЊC0ZQtlG_5Jk@1o>?3>n/ AvsRNq<,1Y *ŶBϯ˿!wKd*׍Cr8" sM4ɖ/1[`E(@XCmOQXYiGѪ8 .+S5 wtoaB?︃ūD>V8 A| _3ZMEj-  6-padRX{CX3ΠZ)3ͼ{KPVAbc7谬%3֊.@4eJ:.􂙣@qz>\_j&HMy4pS?a66F@$h6w}KᗘxxEX!bz?C"z BHS!`* hHʳz3;ռH)n}$A# &(Vw WX5 Nt;Tėfߪ~UHXw3EZ`ld%B+Mwl;HϲλMd%L:ǕǀQR"3eor$[&*"vAvR~xilxQw~%LNaD_`[&TaB -c >b5jkFq ~Hijq _!z5$'0H:/`j<7wP'R4O c$$ QD6\Gk b_;1vSAFrVVƧP$}꯲ WHg:Z)Lrƭ( b Ch{$K+81˩!r !' PD& hr! _MrP߄}]2ȫ9w"ɚ)r44t_1`! 5 'iǩR_TDV֦&vZNq-If@cc$EI0]մT/R6c(^س(5ahCɍKenYY7+ݞHg* o;@n*dٚhlj'% RĥV\W\)RT,}iDd>O9O5;K폦r0A-QUi$4>U筈t9:OʹIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/window-center.png000644 000765 000000 00000001641 12025152310 024064 0ustar00svpwheel000000 000000 PNG  IHDR szz pHYs   cHRMz%u0`:o_F'IDATxWMHTQ}watSF!Ɵ1UP^21fXKK }M[ l>?22|v`Ě9{SDֵDblҿgQN[>\=2╱Y}jhhɉiձXڪ7xySkDc?]WWVdE7t#O㠫+.+pxRvahlvm# VHN^8X/ć+ -;wx\ve ]?eJ$IkO]y0?|@0 kUyJ$9̥JA;u//'kf)*~ӛ[m眡KA.U` h/G8;o,2eWg:` Gޗ)n5 ]MɊTڗ h u;!c=i1 E"2ݴb?8㝝Q/m,d=3$B{߿ ND뱜1Sf5M#(E. 4DNH{pUkYфW dEpZ@) !UV;~(1(+ZͦB@4RR,oþ0fCWBˆԝIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/zoom-best-fit.png000644 000765 000000 00000002543 12025152310 024000 0ustar00svpwheel000000 000000 PNG  IHDR szz pHYs   cHRMz%u0`:o_FIDATx]H[gsmocJ-SeFq1@?2J?wQvSJP6z%u]DINӓu&MLj1TcLr.zasc {!,y|^wc?PW:7׽w$\q mrg7QퟢpU龑n!*-ɀRLD=:U6wG4lq*gH7"I"͟_:&"?^VM`Ϛ}r[j Qi ڻ=E(8Fq`QlB{:=a\5a[~Q H.ۯEF)81 (ZvEBȮG W~at̚ ҂Ey~jTwEeQ `k5A47PJ v]3@Y^nvV\"1J Z6OH$2FY rRfE( _tYZ.ҭjԪcI'x|rt:q>[٤yI= i}Wrx{5GA @$Y0irg`6jᅈiL df/pxA!xojllȼ:KLf/WgRJ!0ssx*ߜ܌BS;uR5;qCJ|v)eha 甙xfkN \.:p;'UICm.?`&˾h4zwㆱQ;.[o+ JPJJi)H4H$~ ?p;gffCc'\l$3N*I0^@o=2j25hO,7/\lz3]DWH#Xz -!7'ex `}:OKw iwjRz$ My&P !$,? ŏ 9bu"IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/zoom-in.png000644 000765 000000 00000002476 12025152310 022676 0ustar00svpwheel000000 000000 PNG  IHDR szz pHYs   cHRMz%u0`:o_FIDATxoUǿvnm? .1}kxD K0514_єBCNwwV.tw^%+nr2$ssgOP<Ŝ= @~0 t@W VL#GpPS]g>Yq9*+d:jL@`dr{kZ|$S0HL"+-cW]Ve5Z7kuz3I+2ֻ7Rn*Q,N)䑂s*>眘Ip[,쯑3:uǞ#Go#Tkk)I%fr_O'z:11B(I[Gcǰ]WIpQJ@ b@A RP2嶮k117:>K J)sq%)Q)!_\\m UjlOe|}6Nvvڄ9=O)z:r_t f3n+P.쭵rj1ABHs\g\c_4lV Dn]LJc:u ! ǽ[~pj13N3uT:,`(m 6|S)Y:֨$Pɗ 4|k:r|^Æ>%N\qn\ikQB}B@ $D(/ 70Z 6r`Uӌ 2$"{/=m!q5r7Uor[J݄ՙC6}Nߦ.1izjQ$sŜD:j;rjyL{"\emXް9ߘpFY}^m3"zeW-++KAh&T9lp;=U"Dlյ\|qqgz`dx##JX H)w)^`t]d{ϫ}+޻|L\Bp߭&Fph;w7s_ytPe"$TV00 @@s [< ۻ{;x'@f3 M2)XJ |f< ըڹk !:?%<1y ?a9bIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/zoom-original.png000644 000765 000000 00000002457 12025152310 024073 0ustar00svpwheel000000 000000 PNG  IHDR szz pHYs   cHRMz%u0`:o_FIDATxK[gǿyM6FM5j~TY1|a1Z(݋pl0&t0_1e5(-!ѩSYFD͏{«s[f17}9s/eszTN?|Zk`QM-,Յg)kηpPoFA F^?05!YJhlnjS; ]{+=A=E(`qP tV= z'Gm-PN]RV9# >RJP"3~POTHKXGKcKcRg;ݣv%0ޮ.=6b0]Kn η2 ++[@peo?w`} 3B"ߖ˰>Hr% HD w~7cX5"'=tIJlj6!"#/cLXj1r2%7GXeg/<)3|sgl>+sM|#ZoF\,M>#-[Q9Pskx2dh|qn>494z2H$Qv{gj62BDPt>D5&BZ-F^*̆ۑfZWXUiyE*CjWeg`Mҕk9@_. )\DP>|"΍ 3Zs KߥVUT*#o2={xxX 55S!܏&Zn7cCdH |^A#pxd"~dиKadvU}<d$C8 ]i\V)y\P?|KDV~u>E"TFKdZ ;uZ Eo76LDl|ii郁g;eCooY @ S$"j4:"zL I/LGn~oݓﴧG‘ņ'5W._ ;;:uX Ε^w[cX 'z#ãǎ\uvtov3@La\4F~?9oݼ+>Ӑ`<@@| nñ_`#}\4e_'3roȲ^?v IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/32x32/zoom-out.png000644 000765 000000 00000002405 12025152310 023067 0ustar00svpwheel000000 000000 PNG  IHDR szz pHYs   cHRMz%u0`:o_FIDATxoTUǿ3e-viEKLD0)1D}'J0L$1&e)/<c!خ, R%-lKwݽ[DXF^8Ln2333r1zd9'=۷:"v>`:طrejh>LnHV v]GǗv, $ʼ=BڨC:n.&3!ݏƌ읟m[l/^TْZGHڸv@WL&|}m|{1 lL(PeFY0 &hXU]>נ9k]]]]U]Uy_{!-p:#pH{S1q ^u̽ҿ]~ ,H摻_?k.8S#nVsЊ``"܃_ApKlQt%錙\q2dlS8$"Lsijd,U$m5 0 K4\,Dn.˪@JX@6DU:[@RgnD/Ko0žLr| Euw~yF(`M.<;xeJFDx[ <Ve"œsrUEC+^unYH0CH@@`QCby\5!!.!Xb""@J7e*-mBqL A+$Y -">;h"!&2H^ϧ%u,M;#.hEiVEpBjงnq݊}^?5 7$'O>*v⾗;fjY]uHNDl @l'0lGјoZ"%VRB-PZ"FD F1rn;©}# ̕ \,h_yB_Z@Y0qTN-YQ'w!i2OœNCx&7UZK!)D*d{EeJ.EF {HpI "7`<ۧ,:Ȓ]'B&|bv4J?794e3-<K6"v(0RqmdtdE9 9dfLhVRܧ[#%6#iᗌA5*DɁ̬-Js_~{qg*[7$jcCuG]GO~T8uS Np=/g] _Z@I:?R yG:JLBS* J@\^#B@22hdE,%YPb%3U: n!2G:e^'Œ){ܗ{}{|\w$eމhr)[y_]^&.0+ӐZfzBi{^3+ #RmYNpз>-x䫵GH|7uҡvBa;,.lii7O;G&_|MBHD+q =hd:U8ԁWRG^EewAesi[$2J)pI[mj܆<:WN}<2{ /i}O7sOx YvP= |벬d%j+n_vCUl6JsByxB"FT#.8ik#C hIC"'~n)m䍤[rOKI6el'7*ŘAGJ "uR P8; a.;St~+~*79f;'o}g};&mLi(k0Ӂ[SUs٧$"8C둈H1NqvPB]1z$$DS{9"f2܄kHl4]ԪZ}836Q¡4 YfdLS'z'\r;f0pg?|Q=xzRt7D06+_qvګh_Sn/IDQ̆$#G5pA!Ҝo[IP::<,ћ3Ҕ@.m [!*|lEŘZdrQc<̣I28E2#$ I6h}QV$>\ZjxQ_f;f`}!|6񗤁2d/wz~KW,:_ !D|ԁzbaB䎏({O xD:% Qācn\V@J B1}(4g75 :(Hz n[D%BuKʗ]OsȠS8kYO:x#%p?0c.'dmB?h7 [ٲTvNGo \$'y[[o1{l(%*,@)WtMjkSe.n0ъ'_NB^:XPp-xou;Rxs XV˝;֙,Lȅ^tF7h#ݏH-ofN0*_j c Y(PPlӸWn!w-/z76MN5n2xIJ@;Ӵv#o`]Zwf٬i|bY d?wL׭(ׂ i 1ki7yưc٠޵a,9U $mma{:ݍ)Ot)Be4KQ6 .OGX#E#Yiw[}uq߼2S.5٫>&lÿ>FZxy ˁ*^]3̌#HJqF8XZ ~H{b.5§ΟA"^1DCgpKhD-㧺JMmSϳ#= o;E9̈Ƅ&LeqW+H5bji~//m߬gG Ms^{:U\S[]X4wN} 3y/M0O^>1"G fZ? 3Z,J$TEgs鐄G2v#NDd,jzXmq I‘@0)BZVnS;[OkC7M1\&y^ h#d&;m70<[%E=:~o35)RmiOukơ?#lv yjrJۜBmZ"b EԿWFf IY 9gɜ#b`JntP"A>y˧U~۲D"%z0@ahH`XHbhm$3Y 34I1)K zWy]{~iΝƁz{>n1oWl3q 0\GejU[ݑ_VTrvm$.o{o0U]OG~8!Ŕ"Hoo?Ϗy!n8$^K3$ س/Ɠ~O^^JeC,l..LzF),e'gRf8LV˔O#._Qb8ZAѳ`f{L8-TmKrvc8FJ9}]8"S/ugaeBKń]wܯ~W }R 2 ;D =-,ϣ$bwd큎"bas$0B}U ƒ[qz5,䬰b\B;m\jF<&-)/ yZ ̊(Iq{<,ҹik䁐\ q|(k1J#6 knoލѡ74#4jے Xv~޾=ئ 8aΊ&ꙜL='aF 9gbHLňqECq>3>_8}DE#%r^Pg< Mhi q-K2gk=RzQ28oj[8WHdG;5YAi+% QNBSA"q~Wym|33Um@[ QoYz,v 5[;9xzSO`=si箤)?#2kE)׈\$bֶic;iX9 bnmyn4Tr*ak|~HA聧 @j kbp`JYlUxm{7n\|s}7~t6|Ӆ>3V/9C;';ؘ4:eg<J: @UˮRelWef;S|!Xok6;sm__hc>4Xӭ{2'*dId5 o\WC#eⴂf2kod'x?aBw YmP}fnjooIg5)&[y9Bf1E>tg8O{kfZand!KǖNj h|$BiHy!Lss4_UԆ>UiiMœٰ_9Mxhdk.q%O$K;]3/ҟal=ė!#Ꜷ?mPIQWw%6VV>. mֵsT8FCR;% (OIMvJwB! n@\4bT`g+@ES`T+uGE;"I*S `6e:3S_Gx4Dpy<#jvٝ}<="Rp!)$eӺ>6%g 8mIَDy@/5̄4Oh8 9Q`S`y(41cfΤLMk]07Re;RK&)Zg.<ZԦ!"%yFkO9~ڛc:B܄l$E?X{ Ǯ44:Kq.dSmICٖ)ҫaWgBXL**iTjsD^0fT9ĩ:La=HJLA $mR[v ׳7uP5=)D:-0 ]m! }lS P#ݙ#n 1i >bBp#+(@3@as.+Kۧ]9e62#)"b$jaD|%8)8(2ݒ՘֠e[ی"zO5x+e[j2#Ȧ]s'(?h 9 RӼk><>s7*F&܍U/^ï+M40yb _56hWnݴMb+^*Q{4_ۃZiaXkQ6۵_6׌uhޮ+ʴ!ªp{'w/%dVjYkqk>~ϴGo)F6עr" lF)i$ARD<3|ys:ikab`7۪ ^:(l:֡s-2c`11NN|-ekb#R\*= "a-<R0FӬ́LAC8͎ٚ9mY=?mN|ړ !2hP+i*2z m2腡ď c7awr׬{OҟCc#< P|gv9͛&aD3jݬWyi??Id+mǓY@8 7F۠f$ Y"3$ж; w> {\=wT X5B<$&4ʇaOLGe)(BD̬,2}6l: ݃k9@<_/ 'OO0Fyoh?Y&W#޻i_EW)6&ҳIn~>j?\~Ɍb9[O+@l)#=έ#{QheIRpVQ4`]b?P33FЙ0Sj"e.Z0"NI)Z΋3<5o{o=5gaPAz闱u{a߾HᕸfU"c@7oo▛+A7n(=h%[l|I\,~q!!d\\+_g ҫR~R)3PCӫ^w7x~r̋['j/Cͅ1 Fo~w?N>$ڤ'cJf If?du싣Цl[-:+ѣش P" -8(d3?M6R.-ᶵ4nZە@2^P ekbq:^c5ܷJ!w~X>C;'WMw`dS<&5^n~url:Q9M>:䁖xHviT< Oȏ׀ dE~ MV$9A(!G$/enO.u:S Kr"nIj RVl ݫ _>=dx9Ha'HK2F#{zx.xmdD_aQF"{c~ǫ+lC.#>dZWsGL\c w,^T#|8E#o, NƄ,Tw/1_gx-h<ppfAn=`RR,!!!j6#ql$xk+$;H$茴$e(VQ ق*b'L 'Q~$Z{.B>%hjQ x銽﷤wx4{+7 q^C.#l0/@o#-G΍[stW^y|pnIyXgN丛(%D4[|sHll{L#S=!`FҐ=0ZI!7yJ¸ J`%sk>l$o[+/`p z!S#t AS0dKDDU>gB XpeF[0M `9PZqh/g7pew+$ő @P 7Dan]r.>e:0S8z_أI8GJs⚸7.~zoIͷ,M7-eFR?l2@G\4f `"x5*Ab47eā9͉7M6(;OBkEx:)!ŅʌڄR3j7-֛d|DN{!oÁf };zaH'(s GܰpJ#[gS?ԃbYVGp#wT_금\F5Ji-e ?x5yezsV_+Уxc UAS@T9"a~`dY0|BIQ[R%)T+eC3މM5`z=qܕX̟1\ħAL|j_a}r(m]~:~#eˤo$qفRhJyj$wJnM\ i &X4hF&kIHl3OR 6Q^y!$pyv`\$E]GqŅv[*;ۄ`M2M4pH@Fzcx}=dGq%7y<~y6=D \7V}B\{]I# 7%!|=v[JS. ,eZ}Ts]K2-p2ntln(|xOx "ʸT5DFlFC6Sf4Qv]‰5!uA$t%^v/h7<?;t<;҉>;OL(,F'f%y|Ey$\ +Q w ؇V"9\H`u8Ȏ#_ƖN)ZBI5m1g5|16å,ʘw,"捓KƆ SǏLTlH1$1w2 0 8 3@*cLQ#eދQ5u:Tv3aU,  p,$[Kf`FTZSOK|%a?7#{4}d>wcH}I.윾 }]2+LOJu~|衹ەT^ FLw-fiKCsBEϙKS"O K(5L.E䩹/A~ K>mh`zԬN}YR'>'@p㍇ۗUGHzDW5NGZIz!.j_gQ3DD&nҲGOfLPR3QD!4K#zQBV\ Ssbp,q$;263 㺃O VAE|+=:c^ p߁+InTZi9*KJ@tqGa͚{o .F'/C\kLBҳMޅɊ_Afx?lR/x^)A+`&F$ + Nx/i)T2͂\c:O0*D#E@C r_7*%k΀PN-D@#/,gPKۧbjt8-8KNe?:۶MlƟ4ڢJbN񮸍8#"87К F=+5J" ~ (Q'}fLB@J* (e``l !$Q^ 5nql{|KMkq{&it|yb4 '!f"fT ǟl }&lGA٤dgE/m-M7) RO!U'_۷L~+nqWwFJn_SlEvɢjR@>KElO_fM;C(yҨNo{$ C)$H+'Nݮ+M^K2efyOUW-žNCQ[W`YZU>SW$O[<"%4,יΈp:s%4:4O.l0EuY_szћ}w a^97ҩrNVR|߼i2(<8^$- `9{A>:p47q?Uhi׾yʰ}~  wf`K4r߿?HSހgޤX/>at_V̸ns>n9#sCO;V@S4k1R`z+ Nj WW;jm /f/;YKo6Jհ4@,_y ig.Ɔw|q-4|`M,JDǀ~W^p;i7^: `90OMԊLVoBX6WĖMMpm1-< :Ag9:c%3? 7~E709&Tk D{m(x{p|`Rh./wv^i6|=xj"<%\@ @.5;vLWի+xjᨣWa$|)>6Ң? ؏[lpw+.u|N(Z-JfN=u>AO*Y43&S[F6l V™3WT|{` ߁#&jQ1/.6I6XĪSwҡm?5O]7W^q4n;dZx=0}6Z H< ~C50El9USQ 6"ﻝp#[´ӫ/^ |hi |+pAxс~ gXxxfC'N%:׻]>|\n 혜 FG `(s ~{"M'?^d}ho xOTr +&YR[y_CȓaxYv\1xwUF57"ܸѥ!xX{޹J|cяa7Nޞ8WWpܕ4Gjuhy?Sޠ;혣=)- Fh| VDTwi?pbFђn~Q(GIމw? :貴6!WuXoV4aE'i"tGl0W^q 6nwjZx={1c6'۾ BӀ!=)~Hc,^@dJ&Zs÷A hd$*88;@K;hdaJ^,bg7FeTC}k =J;8M\--sHps%&gN?=蝨BJƎyW>.{5|ͦ1,*yNQxڽwpxqChC_P `0efXe0Uy&A*|jV6[+{C8ms7O"[~jC]oV\ Xǝr> tdYe.4蟽ѡa߁ }M- sxa,ɛ1㎓MdHtu'Cp{AS4>1Yqg 2p#Ym/x3EV<ᫍ^r."r&3LҴ@Hg[2xp٬HqY=ѷ$^y86e3~q^C;'awލ)F$*˯!ܼزu2h[$-^'ܚf}q\^n2/SZdl'BQ̺bvcFa`WO m1CǓ ]]]/ޭuyN;v:=Es>mѺ~;U f/fs0ы(u%/D+4(|jWxI H9IY}@Gs]gu9luSKz=VP7Oz)6gLX,[12w:6&X.!Jyկ*Խ}al~z̼M{!閤ٴy2xl8m؝4mvtXdfwϸO!.mI1&aکB-:&J\Ʋk+ po+)EC%C zzLzf'ה1Z#zt^_ݵ_/ ~+M/b/o==!#;w.{;D[-"w"'Qj<\sѿU}?v~V|Sőw$ ITz3#/# nQ^ѭof9K y%YeB}LD;/!h{pHlmt612doӵ&ğ6˻~%=|j pE,heWhWCe,ܼ_sJy;[5@[od';9{הM~&<6۷OUWu#7M 'tw||79s8Jߓ@9GoԖR10+,0Љp 0Hj0+xw*8(+5]fj1[RXO߫ʣW}悔)Ɋ\H IwfNy3d(#"G{XE]&=.lxYn5ؚ_u\{8qQ`dXL7~$m@ e1]dk7h^EJ"ޜ=/bJXM=PY]lF'e]QS<' 6C؝85:4^lדޒPZob!w/M,Ϸch*Ҧ|[ž+Eᤓi @\Ŋ+Y5)_yТQ?U(}QPZ+`ζZ`5yyde}:ʕȏ1JZpp{# #`?¦nڥ:lq31ǯdd%[$;Gp5G#x'5XVk[_w|7YBAmhX(^[m* Rqr oϣ\A21MDÃ#@{uPE%lEv!w'ePS57<_fŘ}K2SFF?tc}{#pG : Q7K[m z[qat\VL輰'Y· oo:+Wۃ;MۆO>!OǠWB1DV̋X%°]&k|*`^+˱ZʤF yhwV(WXcw63ó~̰~W`e mEz&=$)IK[&79O>hp4y{$P616+y`53yqA3w0tw~*(V/3BJ.f8ÞXl|qpƀ\\}qǶgd~Xa“s)4nkݧq-Z'x7OVWSڽAA`M)h~v;1I)F80ZH6"|ƴ~DA he/ Ձ!'}/Bl|+he ("0jhGsǝOq7i;V޿`tqi㋱?ޅ-B͐Y]+hVܾ wqn=4m6pXxmzwgi_r|GEP~H ^ @X(k^EHbek@L^/@7Ř,tV)#E7 .Fyİz.FT\L+lyO8i>bPHxIgh+xzqicwގ>zKOݱ}XYoH`hx q=AW%K&DE&$Z 6eWQ I:-k6,ʰ/Lߔ4ةS>߂ƱQ ŵ^NRnkҾcMW'P84ڳ/¶vFR?I j_xl۶oZhN8.LC8x,8*dř|/v}EYQ+[=#25TLYUso Ny#nx[瑲$p/| #׆G1/msx ~G4.6ͺ ̹>HdqiӶEkEC]n"-o_'qC)$w2a_AŨ#Om㝡:ϭ'x}0)!O^Ԡ,9ܐNPxgՃ~Ldl <#|~~UG OqUI0gc ďO ^{8bX~JkZ|@3I߈G{'=q>}|$ݐiirm^Dv2J1ث7@brR$FX)cMc/`-{G?h\*ؙm'|y&" $wV,,"ed|e 6yLb|MX{Eô)N=LF-AjMZм۸q:lڴXp-N8.̘ѡ^k{2OVʳj$IIBbyU_ Z fkEG^F )S{Cxϔm+-1d?-i (UMko3Ezv,o;EXTLjf7JqO汁N!sEzاG] R<0][ >DZ~Q 0#!} _G%PMCp߳7}~c,:ISn߁Oގ۪NtW.qn˲Y޼cϞ1i\~_< @'6Ӂx>[)&(:|ߚ3L003;0/7-Ow^1/ 5sτcމ eii p U}c8|vDt_eey:;pK.l5>JPȉr*UeY ^pxJ= ?#J sSѠ5vY e h8jI' nb`jZ"%|A Wq\%Y1N.T  [|4Zy}j}ǹgҪ>NϢ@И½V{=d\I ݎiӶeVpTqҚvIJGc״Bs8gJlqNtsx#pʪ0$Ñjo8j'u, kY r-§&:>4mۂ{^ݖw?p9mzr|'yהatB:FNqݵ'b/5X0G3 xx3fuJۜDM1,  V,`6_hFZ]V3ͳeX.fSV5[hL(畎ʥO^x,9=f'0I8MUs;Nw^9-׭?۷﹃;+1lo z!^U)u1-? XV*sRggs[_gi#Sep[h\d\LPPTWhR ]2\҉f.(0>twbaP˗`} SyEsؓq-\w;MjhZ~r9aZ.BP`#8f(unHʸX=Ђ:t-ؼ򅳓I TEvMcqLr <(G2ݑ6 FQ,0MCSLD/7rOn bn}RMXn@&&o_q\0"UF0[ Yd $Bv7ի _:u;v,\e: H[cm){̒|< ԱZǗs'y3q0 |溣()|l+T083R7hIWlB`!a ΙC1 &VF**c@@"[WDP8/`a@&.jWJwvj́# Vx]ە&N&`sw}s1GqzF,CҬIi57 3H+(JM,ف n(HcE1Ԓ%*|(h1Hv&4%;E& lqT#:W8z17p7s }=`@o6pЙSM|YǠi䉥`j1 <`;ԩ[qܱo^xz%se^ylxW ѽ e(#fA2ж?wG@"+iTOGq.exD,Ъ-ʦ;SUyR]2\ *OSOAt{Y0>ig6 YT.UL; %+1k%}6뀧dgjOf6+M2IpyQlj7j*cdI3; 3 `t?x#sКގiӷd  sҙ#dj0r0T{[q<()_' &j0<`Ы2t8͈n(l7yvwă.AG[lNP,>jiOi8#;'|ON}r W}knٽ4uj{.W75=ҋ?DVP]oD/WUJ"ESB$Ҋu̥i6ۃT֓|㵬MT"*$S@aoA]Z؈re2 ai+jih̿&Vwo9q߇xw_[7j--r/Ո&ya(J!KF L7B'>\WfX bl%P"=jDYЏžk/4$RR0A 6)-@* nlGөa" ,#vO3~ǨvAXҐ 8s0 `Wxv.hJ L!0 3l퀬k盹n㨧&7 <ƱlՇg=JT񵼏 _K'MZ?%[Yx@8 r$@Y+`~ӓISjes PXԱ}!= &|(MI 8o+݁%/~k>_/5IqƝg6P pJہ`C7M…=I `- !`KD^<ǟٰ<9A5_~ZL2)ڗ71'Փ%$HGSyS]'xRPk$n5|jJCA:%u`z%`>Lk f E;sK6k涙W?c9&{n x$aw{9yȨ*Mi+z}.ռ\-.D/LT o^\\:m5gv edz BV"*gX\[`cY>]4 L/Y/DpB|>*rmyp }AUS4NT 4TYm;O?g4@mJb,vPl `gB<fO FJ;V{|wCyNiBТ|)x|w `Et! |\ Ha,bg6 NV4&25@&aYxWNٖb DYVBp"FoЌ]C,:Sb | zߩ7?;dx\p;pإFF2lE4/^l79Ho!X$m:Dam˩5Ba'{?y NHOr\ya#\sqgM@"jLj0*k-6u'][3pwRy9'G}@w8cDŽ>g|{ co͓إ4~ݟfHR͕[)NK+TJⲾ.o SDCLƥYYPs5۾}WsNV /!14qGب.rDS_U Io󯙹xn=s~gkbVM }40FR}+x4/z>0ABz$kbĈдOfj".I$($)1D"D5@ dD XW%&Jk;*Tw{O]g L}Y(J/ '/`Jv+6OތfPo%x˺=l.ChPdV|h=vs9B1bdΏ4M42CBhn (y}BcQ>tiG9Cix[mD CzM;F TP5yw>Átϧ]!1 oh[4N~ rp ;JvAܻ*I;'(μ'vod-Ɲ980`TC:v*JgZY:H:YuH8A~ Aj>@\~mvguXHxρD%o~<ꡙ(m;8EҝߑJ <+d-–JG`.IGvӶBIt+.Ӂީ^}u\Wb涙oN~ snhh?$G+ +rs@e91j:'Pyϊv]ZL}T0Ds1 ZWL(_Y?ġ? Z(YPL暰sVoz ȳPڳ8XY M] 1s/.9gᆅ֔7~!OV4A0p#fu 4rbmdn&(5{fa/JS!:?MUB-y<Ɠ,3!bh4\*v! Ëh+S;4h!HgX[%Wu,.Bp".FyNAZk}zWk[V8 [t]ZZ2|+z r[x-Ÿͨ?u oP7( a&&I Úx lY5/ES!!i=~>(j(KΥLqY6WՏ8,yJ4tQ5U0K;1P0wNPB8-[n`:}% -YoxN^ )%'\O>NƧ)Lߡݺw+DZoTਣlOV؉ԱK8i$ LP 5JYq$-]twsh { %*<7G\7Gb5QyY 챥>SAN!-Xk\;Uפz>ڏTv3>Vw5pcs4SuK5ꅝyQe ) FͽQ~ek'eIޮ2eEM Z Q,(n>S,lLxq`ñ% fK횃mm؞JAY4ː٭9@fGfifoӽ A'wcٝ ]7iZj]%8N7]f\ Bs섄[Oz{+437\&c+'y&fGZL@;7O2RjLD4=XmqNPGN"%U1um& [N9ұ 1JtElHɾ)vT=~F'1P:x*pQ!i# 1btEW hLw_V@d[8$ZB8v ]đڕ%l0]h@MEA42B˖B`_sɊu,3Lo!LG2 WnA5FSUXm* QT˼']/u'|.9_3al>巼\nVpߔa/>ä?!ivjgta`IpEok+6Ga+G.4 w~YR,xMFv_cj -|gc3ԚbpSol{Q6#92~1WSNk=ʧ9ݍ/=0QKcjlg_Jь(k>,EB \>S%aoUw}W}%hvcWs{"hʳ!iC~*-nhdTk"5WkMo>C˅>s7^e9 M{k72Q{\/jS}]V/Hd}ZYAy`AwQ !UYq)mEν Hnդc8Kмgrb&ߐJ-_v X4[ܗm\씝cxY6 pghh,uOmrh]7#)vwߤˏu /§znMT_W L׶tKUsV`gOz,WULD)}}U7Wr! > m54/(~BHS*tm`L9{=)p_c/;*lj,R|X 3p4chBG`9/ul@ͰzlO53ि& qѱ}'>x">Oa涙 v`[)52:' Zy},Q p|l[ [&<ѻ]p4u 6s|!pg+9@%Q-RP4L?; 1FĻN@#D04WWtaG^^yr[aiEz~*>[~',K{^x &dWlpuf^*2㸕SξwWMW#ZH'JO׿=6p%L4AJK  ^cr4r&cix'M9f M pBC6w=| -x!pPsu^7\ CcC@s#pӦz3Hpz S EB"vep o5_:[ gg"R4SLe_`a"LRwHvC)B V[?}t-zP3 <Mp {|f&oѭ8`ch܃;C iՕϿg_q{׽'?ߙ~pˀ O׫9{)Se3љz>J1ӳuqBnne@v^ 8\=+P |r92Њ2P9:,#O揼j19bKzON>̀n֜ 8yp2xuxP$NǪ%z WhV)~G\g#U%ݏO,`,|:W 'f؁'%ݏ3tV)\T(nEޒ̀O/_y䩒]3цBu噁H|$m"g8ʒeGv$] ֯3^5x#/#Lf,ÓӞޡT|i7`7|§ȔasnR|` uӅRD0Bxg$p O0}Hh-v~f20V!$ ^se`y%6yߡ? yw>5}vNNCV'ߏ] tpT|_֫y^j}h_JDI j"H% )!Cp!ڑi3R#U{ql?WK ZŖFcۏ3N4TVOy.?r|5OY᯾WŸ V}jϔ!V<xuPjzkM\5{-x2 0Z 1"+\} ~1mD2"Kv)g4/xqB$Anס5j|0CBhK(#&q!?Q bpP)=2\X4{w1fQ,(]moB`ŁwCozC= 9ι<xo>Ai). C>U"Wԣ4J{' un%U,V4](eCCs+uW6|Z翣oI;s9zफ2D/n<k$uLdea3MW&|+@ƺHgpdkQ♹88lKJ?|6E3 :&L JѺHˍf3'YI1 {> úzλAt{Eߕ}O.^Y3sL|񟾈38x)7eC?rw-$  IDP:`8luṜt$QOiyM826L>CqqVU]T[&}`+_?˱ q h—cah,|j!VW|\[|0` MWӜoŽ;XJI8б6Ϳ+OyTlE/V,\͸L64ˠsɂGnP^A[g;tp,x@Fd BGݪuMw-S uQyϱY\OC⿽aXr5+⤫K7\|)og3b^::ń1_#'X\9yX+7wpd٦:FaaVf0)"Φz2H9P?2-y PS5y! r !a(q  ؜^I$0aG&|,s*>O?Y7e]0S HS[D7v4 W U iTjUP#~OqHyVW^}l+,`\falf1U.m?͋ti[0$+"* 4T@ Ϥfg3yj oD4t0>wqKp֣gw4->bf_I_i}5yWcG۽6Fdwǚ@!mD-噉R82Is %x]2E!a뒟^oxҮ(ozzܳ*zDV]M;w6[ނ|Bsq[״kw,Ryߏ<|7tgLVd+!AIp [!^e9p9K{ys!`V4KzinC:#w`* b(-QB4fu FϢ `W Xu% 2wZֻf{8}+ܹI%  '}y1̏-:PIDATTKAHbd!dR s}֚E0b^n9iN ~T.fq5oGЇD PyM6, ` Cz1Iu) >l/Q\(.th4E|Sb` a:Hzw+`kV{<ճ 85ѧ圚0{zƑV.+>G{7?G> L 6.+ȽANf<27X :RXHā([JF# FP+y_+t-BYJR/I7H,E]e\4G%eݴǽ{z=Eş~i`R4˰ނfxVs^Yi~Fsx1 2,,!oףk # 2wגCm5UE(|Y3k 15k p'KH8ڷ.ucGL^=<X^{gw= X0y'x mN\t~E6W&]m~;|([g=tT4䯼G5Ge_V)S65AQ!iE1K ,1V+Ϟ_+Vu9p;+7>~}} ~zSj }lݬf #_' F5"}K 1K @ZQD9 \C%ʩC,B7pLQrK"oiӊqKS/JD@R ~Ӷбt6B|iVs^w]E.ū's8K/u.qʡqZs_:*E1r{A"Z:ɋx%P?U4>yUpaA~IW3~7#~-nCQ\ +^jU*8}{Z#]2궈p?}~QL 7hj`NGӼ 9.DG1hC{7 ;0H' jzy?(=gܽ}\z6y.Lo?!ѥSﯣ]ÿ[ۅ7v/>w-w, Z3+P!SA+%2;Rθ3W;&,!wPT A /ŎHLy'SN.{ ϭ_~!X27LEdh[fՒ_屒+`u.,h^Un@ms/5͊Ɏ0T^rA.E&KüT0nH\/Œ|b%Hs[r qE+:15,ba'/-Pk ~`s^MĔ1=ڙK 9(-EsPD~oOoGh$L]q.iw|0I@ڊxE=Xv Nӎ@ĉa]_!JY #O(dkiW՚}.˦l|PK ÛO,Fx,CXsoe7eR5]c߰? 6UBJ Ek(N5*(~EhOY}MRQv4BTqf}&8Sz>J~WI=<2߫ qT^u)>˒7+#Rث_nMVc g?irj?^.5 t婵sj=Bs2yEr}ҜkGsM>;FAfq1Ðq@ ~0Fy >;ځ$J `6>m,.FӖZA2*k@B'"; :,w_[Z T4w}^ۢIM EhfEMgEm^cZ#hvṣhk!L9N:V[` .2 Yy\R "W؄hh*FA{RO{bZ!n0|;"mAv@qa#k{u@674fO"s&WZ <^8̰F-v>H@{}KI> `LS1hPsKSxWZ>ep{48^ugcP̰ie>)E9Iü \_E wYl69U\4Y;x?i@oԡp2 S=Pk܇b?B }-ARw tsn4k4ͺTу)aY+?gB#T֑3TeO7\ئZ,P*$dbvV]#ej:H!4w֨0h^#)SdC:2K w8ou Ot+o { ɶjwg]f3ܐR]f,Űsk@] zOAS(L~ P6Csj $²E_zmuDoʀыՃ bLm?pB" Q 5l䳿GJ[w@;qGihG " %`qQ6X_T,,HE{Lױ;6qZd@e"˒*q ˈv GCҏ@>}Ӧmhx‘m'd̚ >x rÙN]0%J``CV;C.2ѰZXn5ƛ DL** J905"\.>#wU:s0h[f9h'9K4##{:vIƇ]] =6Λdz<yjl :Ep! τ "z=7aϧmnB3w;v3OS0ŀ}׉\G`hT t2Em/؄W=\BQLxKOڿO$_ U\9Uȥ}h<|SH&4{ߨ =Q{jS!,"` ~h2XW74=\RM@ԅۦ;Ea@2[Ap%)?ۦ\_o1 'rP5A;?Jf)Dt%V| &t]S{"ymSr<#^QrݗƢVF8hǢi S YOb>&~+_ke,F 0Mueׅ9mD\{4>ff|6\BM ,>扮30,{oY*E6_3؅e\}o"jU[Cxh)(WI>n bZ (GgDYfv t*0MRԻضŪ!8,):zߵM<h7GI#hff4 pG5v" 0oUppZ=Wpfq YЁaaWKqYъҧ8؊LU]%w`/),iT41CiS%io%iU&I@8 ^[qm0{E>(;miݥm *ko>ַv%~z>u {h?ALhy )ZO4Y:٩b%P1fhw 938bנujhVVboֹc<^БGD.ښU^1 ^hQ[+z,j3]Lg+rULpSdḾ{:2dK'} QVc( X3CqR6KGBCJMY=fLVmW}j$H߇92Kc+ЧdPBX)p*~MNǼIC~V aN8EY#N>@d_wYF=%{qb5 -q*@Lje92HP.1B"5J%0B&ȱK-aonY=0)AFmUgIx-\K(ȖNᨹAх4 W!?ƴ/<6B-- &>`VfKhAά@%UڬHBH9xO3BD҈BO^Nf)\9fe؎ӥN.qGxYE&mq  4N%u:Y|]"P E,P)n8s$+!lOK"VCӣ!KRΣe: s1%T[>ŔOq톱-s b!2/]`I ->kKWwPIy"o &[&PRt1aX> ]S} Y[fqNC}dtuEݑr<Ց  wF^SU( BGoEÐEX4:]zGRtC%[9fwOQHJ]:!"Y۱aCrWϬ4!5y GX $/yAEpʖ8Wyr wkjz>а,˾O?|` v߅R8|wZ?fPH9сHpif|`2MJ 6!ِ^$bB\~5.t@!IUab6*`,:J6(JH姠n ɑ'$u@ss&3߫#:`wT*K@aJ ¾p;@4k | JNFE@_-^rAW-&e].`]! 3-z_jeJV\ vhn4C=i?JZ r]t C@Z}6:Z2 4nXcxӳєhiKvUc=I!QTz%TI-@& w(Nг]zE6g_Ճ,akа9zj$cycm/`VLYɂؼqD lN޻V9' >l]VN> !ak!8Xb u%\a/@{dZՆ9>DLCotd9Fcq/v%`H-ԫud23"Q< H Zl,?Pn VEHuAcݥ VghUe,̄Ej\GBŒ_,ucTj !fP _W8K7G̃ʢs9B[ Hs![ tH=^OAP>B0`1{eim,6ÓX46|ab~ lRFu5ȯ۫azubV.'Mb`lҫh-8*/o_F}qס賂 *7u "KZD;U! 6@|Uf=oeR_2*Bk,<;y/__?Y6sۀy`u_߽֤8Vʘ3Tq͎f5D$u3$(7 >q9CVsD&9.mn=.Kj^苚2*ڋZ-СTYJTolcv69:rX:Eo]uʞ/gT6Q7 v{|S~ @\@V_2 3iN ?kZ<0: ÂvC! h 8h&:'ơ9!IUBxYRzĽKhRRTDV]snMS+.;ng<_\VվTdA4$\!tJޗwJ%)m~1ULMSkQ=\ 3T׮ڻ.}BlĀ͍9<_mH5aUI4I77Uf=RXb!.RgwbxjmÀC%x *"^^5ȁkX־eS/(A(5٠ lYIol ۬ykW 7=[^&|eUz53*(#O瘁gވ=!rQ47@s 6 t]ChqxcSqP(F9PArDl{ņ,9u*7_%wl }vV(Z|b  dٷQN]#~`Xu _ﶯibv;-Ȃ8ڷ Q aBȜQb}EZt32)L˛lZ9O~8`@M͉0X-ch+nN'mcxz,;y,c7)->ǎH.D1ndZ}QZ77V i&F7TJ5[x^غ);Eҹ@r"åAF*#0O8YȂGARb~Wx?͕_! =ԩ=^'n xH'eҊB ˟㭌@@D<4FLuC*G갰kA4&_Y.+`<j `X[jG**$ AZÍ0,8nrycM̨<EܰpuߣKD]CH͊,~8PXd*!#J@/?<5RycH1:Ӎ}8>l{ՎݙT郴xJBN; `KuH:tOf05v~KBb*&%|'#7c%i1xvZ֢X۠JE=|+ύ ؊hnwS<DC)%YbhCx{RaEU'`'7hr86j;@upS1`LMw@42+`f^z f /W__&;l$ξ=Nx"t =mP/Pn EQRښ?(c)W+/+G V+aCA] ŲuSFOuH%ęTgұ jI_X\GX'T>>A=F<.UL>Tρ3T mN`w=̃ꠄ2Qwx?5D=euÅʢS&] 4wJk y$NY{$L=TZESuKEP@NL@\аJ)wpǃ!"p-cM cCڳpKs!KH.ssqut`AB%EGpWy6XӦr=>[If+P,zFS5wBPM3n)SPӳ .&z4LkRݢ+s[,1*>6›p#VJ6ۺ 2yA&m ^gv]{y^szRHB70aڙ bJka,TJ8ng&φ!윸m/IŸHy?tK#܃y Rb%l[\x rb⼳"WDt5Uxe9ʅ-ɖkU ELa³$CdHg)$v@,E7@76#}>gJu;, ٮߵ2V-jZ*=L`?SJ.]2R>ZV# 3&N mm-3 2Jvs[Y-~>qYxSS6MV\jk042U*;p@+9qvp?AdLcR;&^:^꿫+*P.頜!WڝYhHTYS֖\5@G%`!Y)]5fiZҩ-)C;&*"T8P@ *1 )k\n/$\\I֧XŮTfqK4s^{BP`:x_p@n#=Y_aiq-*rߟ9 T!Pp-feKJ>L v3P$62POVXP2m uHiE"$Z~}π=OZ[2.\ZU|f <Wi!'4Ҵ 3Aw9Xe!WԈLIHx ~zQHocVJ |ѬnfB^ s7u`v_øqGh( YbB͕"ıB1G54isR_ny ʻ\Uo@x7!iO~* 7Ϸ Ɏa2tm7)ۑ7xvޡ3i UFPYU]xZ $*RUlz$o^K-mRn~M"4-0RM- 3y:}ÖsH>2MfL]+)(ӄvΪS1Mޙ k: F3mM Pyj(_Tg1ީnOmշ% `3GS kjrE8&)VSsqTh$K}lU=Y NA@y?O&h*>6NqA{F;7#"MeIz~V 8ș'4FN?V-vOx/Bڛ ,&(rr?|91L Bok~:ہDe `K*erdli- +RPC)߹6 \).E<%c $I[oʢ<@YJkG)ʥ)Y mI҃h?ՐF4(&)9]mHQvU¶(Q QhN) ͱ @.)Y7[{`=fKñzӐ(:ƲUq =J>k#Kׄ@|fBڡ?;(A4z*冤<^J L|B0) 'tG7߆G\sМQ0e}pˋo/ޯZm:t,ZغXT bS vglM<W nWUFjdaV3RL 2//H=úrjNc 4)I)sdCjʵ*4{䫇 T~p,#\װ3 ogzvE  K05:oZΐx9ϻKO&B#j[ y-G.TR Dx۷V~Ԙ՚!P(!=xY*JƉSSNCs_Zv9OSf. U YEkk^FvvKWD)gȖǂMu1 `UT=y9fUc[C߬Q|l`6$ 6〜n"(?xYC[LnI$ Z!d͂ҿ< HbII鹜 |&Y']7"`T[OPxk0LR$i_3*ۋ;J©p`ał /)&$@j ^Wh%!.m{G]6*X'^}N{/ ҥiTnug= pB!Y0tt*. DB\,z|ӓy|'@y<"߰ `'++Qe鬥ExV` Ճz`%m۵eT܏F'BX(4J#9<.uIXa+_1l!#ѣyNp:QJ<{1 P6eҎBj*VɊ *Pwȡy{Cvô4#PT \/[8;KJ0XhΧya1*ƪ!^^=] \{Z½\΋'&fJpsʣFlMoI:0ض`*oG+(+)oF!t6ҙC/+To/Faf L{Yzt:s ZLYnIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/24x24/dispcalGUI.png000644 000765 000000 00000003025 12237536424 023304 0ustar00svpwheel000000 000000 PNG  IHDRw=IDATHeoT2w{<sqmZj"HPBzZԪRϭFR[F TI4$C99{ [:眥o}kk?~9_y!#(PƐ O)NsLd\dK^Av{Oᛢ{I\*ͦ5Js`=Q^zĺ"Lnrд 9 i &JGއ5"v?Ca$ƺ  r}oQ(@smk# Di2 l+_k_K&X$-*C'NѤ<ŋjQekeˠ[1w EN= Quѯ#XR}Zp.}I QQgvz $LQ>p5ahV9"wm҃ШȍK:'r-s w!4%{;36V^h4۪Y;s#_S‚fzyn>~ɹjNuw)Lv GD@^ V.",Du{3d<T:ʣ>NJ..ؘ"c7.6N~;i@d" foQĶNxH:+7u4aݳ$Axy-THcu4yҔ ]?Nhڄh홞*ᇛx%[-tRs!SR;Ws䆶AkGNO22܃5>nW@)PcSsm=MO@v|#'bK9hFFqep y@|4ҊU6͖Ǽwz.rીB)\Ehg0̭\0S˓8 0)&{?aggO":">ދ:cG; ia# ի /{bcDH!N32;/` (qr)Cwm[ÌvnUć_ubݴU2cU3NfW=Ho> :]],]viBw:QW[0sѿ&W2X$2IwkU/c\. /Gxzd{b-&'V92 *ԛl' ^alفk|2+^B>7KW8RB-#K 8NlR'y+ d}bvhh/V)o5F67 qq.Q"I! ă0R~jj?#6bF/҈;">^.(VoW7IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/22x22/dispcalGUI.png000644 000765 000000 00000002671 12025152307 023273 0ustar00svpwheel000000 000000 PNG  IHDRĴl;tEXtSoftwareAdobe ImageReadyqe<[IDATxTU[oTU]6NRT{-K\FHiAhĘ_aQb  bF`2t:)t:3綏g3'3{Yp` 3Qv̒@C޽v./,Gi#Lyc'0%&@C;?-hY<ޤIR'c$J+ԥ!.O0s ;OQn{W=j\-C 21~ pO$U҆PEBvLG( Tno9qdpu:I.I8TYA`I]#TR7WKB6Lm)T*]T*nEI~Kdp2 %T'x\HԐS4fb¹S4Wi?^8BIK,F* Pms)糤/*~\}/S*!{<ʵBbk 0 S I17"-VXwe!I@<Ҏ-5ː ! h' Y) wp"Dq&w\'Pu'WP/B$5a@ *ؖM$\ ikVs 50;@BN&~8Q%G汰Fd&TlOGFPTm}`+̵࿹=>E2_S9gl;X5Ȏ&mh8M,$5QuyKHN h=wI& -it&0ExԆH ? h3uXmU53*95 7/Ɂ[H }0Ka2Ai+C]w:P"Bmm4cб{*?[q3C6ӎd|5y.aŊID"ITfv$!0 *-,j4||_Jb&4:YP55W"N@eNt4T1tox؅kUYÓOܪs:t,,wdnHUU 8wB;H\> xU46aemUUE1amI>/p*u=g hp b@DJXi}=I 3 o y~:&q<*Z-K$F2tl3E.7+'Ui;$@ 0ڏWIIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/black_level.png000644 000765 000000 00000000651 12025152310 023546 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<KIDATxڌ+EQ񃃋0000S&fU^3#AsLd@QE L.3L($q|Wv}˪O8k?Nч eYR+^ta .AGD^}?+8GCɺm.*ЎetjΚƏQGܣ9la(-bZy¨wn[g'$m$n0#Zm[i{ΉĵT2CBDjDC#:5yXkc zg-aqք JunVߴ~ -2Z|R_|_1:$[pGglQV97~ƥpnvIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/black_point.png000644 000765 000000 00000001243 12025152310 023566 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<EIDATx|]lQovmJ-,*dY1"Y\ q!L\I\+[7BLH,& ll(6D-//za}_{s<_x`6idçpAKo)89`⋸ jRQ?wNq_iM& y6::(!?"y旚|)GȈ ~4p䘮`|X&= F"bJ1]r>yۨh 0殕-f0;ö_A:nBpéXr U(~Rg9@̡^ NpkVvZ)]L*m ɉ*E`|}ɻZKN#U^`El!5I( )0y4n%"EVBrnbΎ1mX@76n!]ۈ97Kc?!ymİ;g# =G;%^G<59fR<&1[ 5B;>pVCЎm n iIHe5[Ș{ lpp<AǛѡ%}>#Ob53]_A.3&N)c ok;1ᘙEQn̈́h+Ij}_ omIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/contrast.png000644 000765 000000 00000001025 12025152310 023134 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڔMKa fbXZNS(Q>D"(,{>Fd\.׿x @1&b1lb<JrGD  @*d<'o^1|=ZǧW*T*]MZ,T g+[aIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/dialog-information.png000644 000765 000000 00000001054 12025152310 025063 0ustar00svpwheel000000 000000 PNG  IHDRabKGD pHYs  tIME 4' MIDAT8˵KSq?ǝFs?&!RK zWiBB *'Bэy4Wb:ˣo7KƱ$|.<d$]S+Ng5H=8؋,h:`vi &y_.7Z;,Mhi4W:/S`4(YPS*mUڰIl/[OXO\ѠrJhzͨ.o ~ؠZLylHͅQǥY(Ao?X͔!!3b`";%sكI(ս< @ zkf慮k"2L̅bfY9O&rQ?kiܺ7C3%<~D`Ms98]׀ -Y<ߔ1z~IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/dialog-warning.png000644 000765 000000 00000001100 12025152310 024173 0ustar00svpwheel000000 000000 PNG  IHDRabKGDtIME 7oWIDAT8Ϳkq]ri~5hPD\tATѩڱ .:d']\ DpSmDv$@0)g{>I" "Ng|ՓcxeG>%y<7ظI)8xG%pm{(!,4/s(0, /sjWQ dEM,ҲC<$Р~bx 8GۨB[mH`s܉<0VvTC:.qJ?p3mct 6*)UX8AkC:SB2"3N! 5ϑVmEY͙,d)U .ZXo.P2`;!OU2:҅"pU(}ƀJDT5Cf y[ajnWQQ Gdkw۟c5^恳xCaf hMX^E:FR.xqtSi2e< "WwPzP]EUn]鴝fr; < 9{ērs( __<uRNT*pn$fe !{M0c 7`vl5]~raD)##a5qƧ.^4{~nݱ%޿[yna&{I[l} $IZkWuZ-3T"YE!Nh{DžqK%Vbg#oWWQJe67XX[eRZEܥX,22L:0Za3j=ed=s|l6|0}j.;V[_dbZk|#'Vx/'GZELA@#IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/edit-delete.png000644 000765 000000 00000001417 12025152310 023471 0ustar00svpwheel000000 000000 PNG  IHDRabKGDC pHYs  tIME6r8>IDAT8uKq?۳=s^D+IP [$fJ]]t]E7DW]t'݈]RJEL4|3$]{{(mcu}89Q -@(!s30q7QP+]A#afvAP9Wht? =B߳L}deiȥNθ8 *oQP\\zDb,o`um(Z NqvdppZ`h"Jny@{{xRPd0ȄLTjubfe>$DeERݧ),r(qRb`.$Aju//C Li49t:MZU5XUUx^,^OC#D[yf>Md4IqSy7o yVYJIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/info.png000644 000765 000000 00000001361 12025152310 022235 0ustar00svpwheel000000 000000 PNG  IHDRaIDAT8mKHQq~/ZiYTZvQ)J*nEYFn"j&M- Z1`ADP+]D8yd?3f}q_ 7o޲u[[`Pz^6bNXRO=iI6b?PtH.v7{fx2țdh MRV8󰣃E{NOοtAk3 HMrsIR\)" (^hOjR2/{R"6h)lށ7#ʕ9.`mo_ۍۇJB)e,ױҊkr833x]h4x$O.5g[io04-4RXxHasGR dؾRcJ)r4Ma)c#D"R 1i-oqo91-2,Q۾im=JB9\$WlĩMN$..Ș%@iu/g^٩S17nphq2M͵ˊKW|O Gz[!5Vryy@wtg0?2R)# |S@grn;$ !eY |Q ױޅnIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/install.png000644 000765 000000 00000001346 12025152310 022753 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڜSKHTa{ Ә:cJ#B h\gA’"]% 0$(7AR"XDH59qwsif(kӁRLè54MJ%a(eZ> ObgIE0; E|Vzs$ntEwm^k,͢!W.Lm[`܍P36JdXY ͠e/nF:h:Tbz W"`K**ͣQ2B;gw 4# yHb-ӄjeq,Iž)~[qEIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/luminance.png000644 000765 000000 00000001105 12025152310 023251 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxb`xxx/ R>+2G]]࿉I >6dl# @Aa [SRRrCw [bbNiii|f wss[Ĥ R$_PPp ԝSLydo733tvv+,,< d phnn~00a„w@qO fDPh䱲m _¢ R2%==}iSS<(BCCxyy99 +j~عsg(333Coo+8(6qqq< \\\iԀԋ [#k;wW @?@uuuW @kAq -,,i5`Ƀh N` g!0V 6tt@6?6/ X^055mERÌq"7@/725`rIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/media-floppy.png000644 000765 000000 00000000725 12025152310 023673 0ustar00svpwheel000000 000000 PNG  IHDRabKGD pHYs  tIME 3-92bIDAT8˝=KBaPE  MM☈_  *j% %nz)[Һי9xG@X[/&C עTi_@z4 NX?瘌dNM  5' Bf;Y4+PT:at|>_wW.5 `?x7:: wn]Q4{g>06iFvj-"jH_;zZEi;pu'0i4˲(VXHv3_L@EL$)Jض $ "CU`essmk , cnɃSIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/rgb_gain_blue.png000644 000765 000000 00000000533 12025152310 024061 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxb?%Bc022˜R b O00pgP!HA$G d37>Zㆬ?Dn C TP {o ֙lR z30p2f  ą ^#΀pU0`).R,10F ` b` t?,|rz:`iFJz > B ?t~8b E>IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/rgb_gain_green.png000644 000765 000000 00000000542 12025152310 024232 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxb?%Bc022˜2 9 @37 {3b RjI '(+2d`dpGևd,C P<P vz~2D6>@1f ` D v1%ʀ j6`T%€ 'QH Oxq&w:}\JV~ >CvHtӌuL,$^ p8C?PzJdDb=CIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/rgb_gain_red.png000644 000765 000000 00000000556 12025152310 023711 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxb?%Bc022˜ Y. @Swc`{RjI3H F7@+ܑ ]?fdN h?@l0x 2080f e` '&%?5a`20B@y`T=1̠+ o4x2W6Pt׌H ~ 2 /na`8~(w =%2xfoh|IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/rgb_offset_blue.png000644 000765 000000 00000001105 12237536425 024447 0ustar00svpwheel000000 000000 PNG  IHDR(-S5PLTE!ei&yz#1p{0? ?E|`qGxfVF)~j]M=+O6*eu n# *tRNSʉG$ږ%/NY,٣2hIDATc` 0221s02B8uty|zFA=S3s K+k!D@K " , HG%$&A!◪s&̥oݟIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/rgb_offset_red.png000644 000765 000000 00000001102 12237536425 024267 0ustar00svpwheel000000 000000 PNG  IHDR(-S2PLTEbj$qx#8jr,C0:{_pFwfU(h\L<)S3'r4EC*tRNS͊6G)َ/CU!֝*T!IDATc` 0221s02B8uty|:zFAc]S3s K+!D@[ " $  HD'$A!`s&̥m?,csIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/rgbsquares.png000644 000765 000000 00000000332 12025152310 023455 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<|IDATxbd``@&?# qNM [9FD,fJcd|2V9]]]hDw6S9iia!$(@s'19IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/sound_off.png000644 000765 000000 00000000410 12025152310 023256 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxb9s&>WBYfR rj:uA?7z ltI,4XE @5@5/&޵ncu7M I1 ""q3!OF$eGaf1 3?}(qh!l"*)K!b=2ssNj""B]׏qnD">>2J\.3Ff^G]9Nhħ?ZusNIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/stock_filters-pop-art.png000644 000765 000000 00000001101 12025152310 025525 0ustar00svpwheel000000 000000 PNG  IHDRaIDATxuAhQ}f!jB6J)HzA-4X! fPU d@SijZtX[AS_? `y(5ǹxSOr[/@vԐ_=~n c` Q9@0u u`*\\%u3Ŕ.vxŁn@o 5 ;9L0/0PeVsjZ3IkP ~;CUH 9l @?$4;ٔHnHO$h Hl_]\|}Y ?Nm$ L{R[jIr{JNQL>'$°@64F mxε[.;IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/stock_lock-open.png000644 000765 000000 00000001265 12025152310 024377 0ustar00svpwheel000000 000000 PNG  IHDRabKGD pHYs  tIMEp9tEXtCommentMenu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggGIDATxڭkSQ{ojb%bBAjLKA!.wC@;!"HԡB$%1E=p}x{΁c`y^ٌ{m4L& p uMJ%m꺮<\ VGnwf?jiZYEdMD}9F#)[)^am5xbOJW5Kkʱ5غr417f!yMؽs M:#hL|O_I͋pw7>b#1q% 6B>`Ypf6Q$bɗ>"!<+{Bͼ`HD )lv(Ixe ,[§A`~J:C:=WKcAmc1> @Ϲg DVIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/stock_lock.png000644 000765 000000 00000001331 12025152310 023432 0ustar00svpwheel000000 000000 PNG  IHDRabKGD pHYs  tIME 5%_tEXtCommentMenu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggGIDATxڭ=SA"\6jL?! B!6{E fbt%9ALq<̼ꏀ@nG@ ?JWV+ q8vle28ٶ-zWfeez]t:e۶ wh\z A-tBo";9bo- /4<-NdJKESܐ 1@4]_4w9 r:k".)a ֆDk R 3U% åR29M7 K,EWgX`z:Cz`:=sza(ИX|9O_  ΤZdwIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/stock_refresh.png000644 000765 000000 00000001571 12025152310 024146 0ustar00svpwheel000000 000000 PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org< IDAT8mMhTW2W&ƘAE5АPbDJA,ņ;t#XAW%VR)%j1"`6dib&7ysO΃Yx?sV4_ODg-DeSDcwA7kA9RWw!/SGi||X|+FCFAȯ5D$E$C#-Jbbk| 4Mع,R*낅;;SAj ӵA|6xTTDTW:jۂ2kn.DO8>^wȏB.BhnB׻2i,99|rⱋa~qVjRKvZ>x/t7ujlK":fRGKManվYdS?1]$@SQk{U ( 2= bTǞU42Sg70M &g@!?%{^485= @*@"lGkc=>O̬,,/%lL:Ҭ,~tGyᅧH%$}OWn\X}.?McNΣϨ& D§ eU)? -!ęyqncH(p&DVNBI( 0l2vA ~AJk,rt a9 ؚ"tr;n}4vL ,4ݩ%(-ox7?Vo g8pʥߟ PDq!9@GZ n8{ɨd~#IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/16x16/white_point.png000644 000765 000000 00000001362 12025152310 023634 0ustar00svpwheel000000 000000 PNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATx|KHTawgtν38b*QJa =lMaڴeM6hѦh 7=B A%ff8:|;SC ;|sw<ߓ p :z< QJLC|0〃p&GW0TyR;ߧTeb_ @;<y ^y:)E۟gK Φ0\Ad?LږD٧:wa $>+=WHs@9l%A:r=-"K[caY,|rk^@ai&$z2.wNыVp}z8jȥN ezjYƁfImm,6YIvڊd VB´eWc;,Q;f<%N rvU'V{d*M`|Wxb?=̉O%{S,aIJ$DNg9/%ax0N^X~Ԕft@2h] @ oͰQeӅy Ÿ,0|qdKj3$#Lt1NKVkF5amPS." *RNz?|݋I29k=? WjIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/10x10/back.png000644 000765 000000 00000000252 12125375736 022210 0ustar00svpwheel000000 000000 PNG  IHDR 2ϽtEXtSoftwareAdobe ImageReadyqe<LIDATxb9s&`-,=BH R`bf(f j`¢&€0=b| a&,j`, 3QpAB `dx@!^IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/10x10/record.png000644 000765 000000 00000000334 12025152311 022544 0ustar00svpwheel000000 000000 PNG  IHDR 2ϽtEXtSoftwareAdobe ImageReadyqe<~IDATxb9s&qCg8LP >~@, ~P BI- HΆ `ƣ$R@01A /,Ha ţ$W < ArG`nb /xT $`pIENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/10x10/record_outline.png000644 000765 000000 00000000437 12025152311 024307 0ustar00svpwheel000000 000000 PNG  IHDR 2ϽtEXtSoftwareAdobe ImageReadyqe<IDATxڌP @JN:uQE<+^ޘ`D{V0 I-p7 Ujw^h:>;bXґnBU%!ʧpDS4ӆqX0E* ÙQk=ʂ#,mۢ>Dg1Yf0dӅI`IENDB`dispcalGUI-1.7.1.6/dispcalGUI/theme/icons/10x10/skip.png000644 000765 000000 00000000302 12025152311 022227 0ustar00svpwheel000000 000000 PNG  IHDR tEXtSoftwareAdobe ImageReadyqe<dIDATxb9s >€?`b{ > hG`(uL :&*x:&€IRǂGh*8H@Xm 6b T5 v;&(IENDB`dispcalGUI-1.7.1.6/dispcalGUI/report/base.css000644 000765 000000 00000004662 12261120515 020544 0ustar00svpwheel000000 000000 * { font-family: sans-serif; } h1 span { border-radius: 4.5px; -moz-border-radius: 4.5px; -webkit-border-radius: 4.5px; display: inline-block; height: 9px; font-size: 1px; margin: 3px 6px 0 0; width: 9px; } h1 span.r { background: #f00000; } h1 span.g { background: #00f000; } h1 span.b { background: #0000f0; margin-right: 11px; } h3 { font-size: 1.5em; font-weight: normal; margin-bottom: .5em; } table { border: none; border-spacing: 0; width: 100%; } td, th { border: none; border-bottom: 1px solid silver; padding: .125em .25em .125em 0; text-align: center; vertical-align: middle; white-space: nowrap; } .graph { page-break-inside: avoid; } .graph td div { margin: 0 auto; } .graph td, .graph th { border-bottom: 0; font-weight: normal; padding: 0; } .graph th { padding: 0 .5em 0 0; text-align: right; } .graph .last-col { text-align: left; } .graph .col, .graph .canvas { font-size: 1px; overflow: hidden; position: relative; } .canvas .inner { position: absolute; } .graph .wrap { height: 7px; position: absolute; z-index: 0; } .graph .wrap-act { height: 5px; z-index: 1; } .graph .ref, .graph .act { background: #fff; border: 2px solid silver; height: 6px; left: 50%; position: absolute; } .graph .ref { border-radius: 7px; -moz-border-radius: 7px; -webkit-border-radius: 7px; height: 10px; margin-bottom: -7px; margin-left: -7px; width: 10px; } .graph .act { border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; height: 6px; margin-bottom: -5px; margin-left: -5px; width: 6px; } .info td, .info th, td.first-column, th.first-column { text-align: left; } .info th { padding-right: 1em; } td.bar { padding: 0; text-align: left; } td.patch { border-left: none; border-right: none; padding: 0; vertical-align: top; width: 1.75em; } td + td.patch > .patch { border-left: 1px solid silver; } td.patch + td.patch > .patch { border-left: none; border-right: 1px solid silver; } .overview td.patch { border-bottom: none; } .overview tr.last-row td.patch { border-bottom: 1px solid silver; } div.patch { padding: .125em .25em .125em 0; width: 1.75em; } td.patch.sample_id, div.patch.sample_id { width: auto; } .ok { color: #339900; } .warn { color: #FF3300; font-weight: bold; } .ko { color: red; font-weight: bold; } .hidden { color: white; visibility: hidden; } td.ok, td.ko { line-height: 1em; } .statonly, tr.statonly td { color: gray; } tr.verbose { display: none; } dispcalGUI-1.7.1.6/dispcalGUI/report/compare.constants.js000644 000765 000000 00000006141 12025152306 023112 0ustar00svpwheel000000 000000 var DELTA_A_MAX = 'DELTA_A_MAX', DELTA_A_AVG = 'DELTA_A_AVG', DELTA_A_MED = 'DELTA_A_MED', // Median DELTA_A_MAD = 'DELTA_A_MAD', // Median absolute deviation DELTA_A_RANGE = 'DELTA_A_RANGE', // The 'range' between two delta values is calculated as follows: abs(delta1 - delta2) // e.g. if delta1 = -0.2 and delta2 = 0.3, the range is 0.5 DELTA_A_STDDEV = 'DELTA_A_STDDEV', // Standard deviation DELTA_A_B_RANGE = 'DELTA_A_B_RANGE', // The 'range' between two delta a b values is calculated as follows: abs(delta_a - delta_b) // e.g. if delta_a = -0.2 and delta_b = 0.3, the range is 0.5 DELTA_B_MAX = 'DELTA_B_MAX', DELTA_B_AVG = 'DELTA_B_AVG', DELTA_B_MED = 'DELTA_B_MED', // Median DELTA_B_MAD = 'DELTA_B_MAD', // Median absolute deviation DELTA_B_RANGE = 'DELTA_B_RANGE', // The 'range' between two delta values is calculated as follows: abs(delta1 - delta2) // e.g. if delta1 = -0.2 and delta2 = 0.3, the range is 0.5 DELTA_B_STDDEV = 'DELTA_B_STDDEV', // Standard deviation DELTA_E_MAX = 'DELTA_E_MAX', DELTA_E_AVG = 'DELTA_E_AVG', DELTA_E_MED = 'DELTA_E_MED', // Median DELTA_E_MAD = 'DELTA_E_MAD', // Median absolute deviation DELTA_E_RANGE = 'DELTA_E_RANGE', // The 'range' between two delta values is calculated as follows: abs(delta1 - delta2) // e.g. if delta1 = -0.2 and delta2 = 0.3, the range is 0.5 DELTA_E_STDDEV = 'DELTA_E_STDDEV', // Standard deviation DELTA_L_MAX = 'DELTA_L_MAX', DELTA_L_AVG = 'DELTA_L_AVG', DELTA_L_MED = 'DELTA_L_MED', // Median DELTA_L_MAD = 'DELTA_L_MAD', // Median absolute deviation DELTA_L_RANGE = 'DELTA_L_RANGE', // The 'range' between two delta values is calculated as follows: abs(delta1 - delta2) // e.g. if delta1 = -0.2 and delta2 = 0.3, the range is 0.5 DELTA_L_STDDEV = 'DELTA_L_STDDEV', // Standard deviation DELTA_C_MAX = 'DELTA_C_MAX', DELTA_C_AVG = 'DELTA_C_AVG', DELTA_C_MED = 'DELTA_C_MED', // Median DELTA_C_MAD = 'DELTA_C_MAD', // Median absolute deviation DELTA_C_RANGE = 'DELTA_C_RANGE', // The 'range' between two delta values is calculated as follows: abs(delta1 - delta2) // e.g. if delta1 = -0.2 and delta2 = 0.3, the range is 0.5 DELTA_C_STDDEV = 'DELTA_C_STDDEV', // Standard deviation DELTA_H_MAX = 'DELTA_H_MAX', DELTA_H_AVG = 'DELTA_H_AVG', DELTA_H_MED = 'DELTA_H_MED', // Median DELTA_H_MAD = 'DELTA_H_MAD', // Median absolute deviation DELTA_H_RANGE = 'DELTA_H_RANGE', // The 'range' between two delta values is calculated as follows: abs(delta1 - delta2) // e.g. if delta1 = -0.2 and delta2 = 0.3, the range is 0.5 DELTA_H_STDDEV = 'DELTA_H_STDDEV', // Standard deviation GAMMA_MAX = 'GAMMA_MAX', GAMMA_MIN = 'GAMMA_MIN', GAMMA_AVG = 'GAMMA_AVG', GAMMA_MED = 'GAMMA_MED', // Median GAMMA_MAD = 'GAMMA_MAD', // Median absolute deviation GAMMA_RANGE = 'GAMMA_RANGE', // The 'range' between two delta values is calculated as follows: abs(delta1 - delta2) // e.g. if delta1 = -0.2 and delta2 = 0.3, the range is 0.5 GAMMA_STDDEV = 'GAMMA_STDDEV', // Standard deviation CIE76 = 'CIE76', CIE94 = 'CIE94', CIE00 = 'CIE00', CMC11 = 'CMC11', CMC21 = 'CMC21';dispcalGUI-1.7.1.6/dispcalGUI/report/compare.css000644 000765 000000 00000016220 12261120515 021251 0ustar00svpwheel000000 000000 a { text-decoration: none; } a:link, a:active { color: #006699; } a:visited { color: #666666; } a:hover, a:visited:hover { border-bottom: 1px dotted #0099CC; color: #0099CC; text-decoration: none; } :focus { box-shadow: none; outline: none; } html { background: #fff; border-top: 4px solid #202020; } body { font-size: 12px; margin: 17px auto; padding: 15px 20px; width: 900px; } button { background: rgb(249,249,249); /* Old browsers */ /* IE9 SVG, needs conditional override of 'filter' to 'none' */ background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2Y5ZjlmOSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjY2NjY2MiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); background: -moz-linear-gradient(top, rgba(249,249,249,1) 0%, rgba(204,204,204,1) 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(249,249,249,1)), color-stop(100%,rgba(204,204,204,1))); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, rgba(249,249,249,1) 0%,rgba(204,204,204,1) 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, rgba(249,249,249,1) 0%,rgba(204,204,204,1) 100%); /* Opera11.10+ */ background: -ms-linear-gradient(top, rgba(249,249,249,1) 0%,rgba(204,204,204,1) 100%); /* IE10+ */ background: linear-gradient(top, rgba(249,249,249,1) 0%,rgba(204,204,204,1) 100%); /* W3C */ border: 1px solid #999; border-radius: 15px; -moz-border-radius: 15px; -webkit-border-radius: 15px; color: #333; height: 30px; opacity: .9; padding: 0 10px; text-shadow: 1px 1px 1px #fff; } button:hover, button:focus, button:active { border-color: #09c; opacity: 1; } h2 { color: #333333; font-size: 20px; font-weight: normal; margin-bottom: 9px; } h3 { cursor: pointer; } p { line-height: 18px; } form, div.process { clear: both; } #F_out { margin-bottom: 20px; } form { margin: 0; } h1 { background: #202020; color: #fff; border: none; border-radius: 20px; -moz-border-radius: 20px; -webkit-border-radius: 20px; font-size: 12px; font-weight: lighter; padding: 12px 15px; z-index: 1; } p.error { color: #c00; font-weight: bold; } #report { /* display: none; oddly cuts off part of the summary in IE6 */ visibility: hidden; } .disabled { color: #999; } .options { line-height: 2em; margin: 6px 0 10px; width: 430px; } .functions { margin: 6px 0 10px; text-align: right; } .functions button { margin-left: 1em; } * > .functions { float: right; width: 430px; } input[type=checkbox] { vertical-align: middle; } label[for=FF_gray_balance_cal_only] { display: none; } table { width: 900px; } td, th { font-size: 12px; } .graph { position: relative; } .graph table, .graph th, .graph tr.x td, .graph .canvas, .canvas .overlay { background-color: #eee; border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; color: #333; } .canvas .overlay { height: 900em; opacity: 0; pointer-events: none; position: absolute; width: 900em; z-index: 9999; } .graph th { padding: 0 .5em 0; } .graph .ref, .graph .act, .canvas .overlay { background: #eee; -moz-transition: all .125s linear; -webkit-transition: all .125s linear; -o-transition: all .125s linear; transition: all .125s linear; } .graph .col:hover .ref, .graph .col:hover .act, .hover .wrap.hover .ref, .hover .wrap.hover .act { -moz-transform: scale(1.6); -webkit-transform: scale(1.6); -o-transform: scale(1.6); -ms-transform: scale(1.6); transform: scale(1.6); } .hover .overlay { opacity: .9375; } .graph .act:hover, .hover .wrap.hover { z-index: 10000; } .toggle:before { content: '▼ '; font-size: 12px; position: relative; top: -2px; } .collapsed .toggle:before { content: '► '; } .collapsed .collapsed { display: none; } .dragging, .dragging * { cursor: move; } /* Pure CSS3 Tooltips */ [data-title] { cursor: default; } a[data-title] { cursor: pointer; } [data-title]:before { /* Tooltip body */ background: #333; border-radius: 7px; -moz-border-radius: 7px; -webkit-border-radius: 7px; box-shadow: 0 1px 3px rgba(0, 0, 0, .25); color: #fff; content: attr(data-title); font-size: 12px; font-weight: normal; margin-left: 21px; overflow: hidden; padding: 4px 7px; text-align: left; text-overflow: ellipsis; white-space: pre; } [data-title]:after { /* Tooltip arrow */ border-bottom: 7px solid transparent; border-top: 7px solid transparent; border-right: 7px solid #333; content: ""; margin-left: 14px; margin-top: 12px; } [data-title]:before, [data-title]:after { opacity: 0; pointer-events: none; position: absolute; top: 46%; -moz-transform: translate3d(0, 0, 0) translateX(11px); -webkit-transform: translate3d(0, 0, 0) translateX(11px); -o-transform: translate3d(0, 0, 0) translateX(11px); -ms-transform: translate3d(0, 0, 0) translateX(11px); transform: translate3d(0, 0, 0) translateX(11px); -moz-transition: -moz-transform .25s ease, opacity .25s ease, visibility .25s ease; -webkit-transition: -webkit-transform .25s ease, opacity .25s ease, visibility .25s ease; -o-transition: -o-transform .25s ease, opacity .25s ease, visibility .25s ease; transition: transform .25s ease, opacity .25s ease, visibility .25s ease; visibility: hidden; z-index: 99999; } .canvas [data-title]:before { border-radius: 0; -moz-border-radius: 0; -webkit-border-radius: 0; bottom: 0; height: 14px; left: 0; margin-left: 0; margin-top: 7px; text-align: center; white-space: nowrap; width: 100%; } .canvas [data-title]:after { border-bottom: 7px solid #333; border-left: 7px solid transparent; border-right: 7px solid transparent; bottom: 22px; margin-left: -6px; margin-top: 0; } .canvas [data-title]:before, .canvas [data-title]:after { position: fixed; top: auto; -moz-transform: translate3d(0, 0, 0) translateY(20px); -webkit-transform: translate3d(0, 0, 0) translateY(20px); -o-transform: translate3d(0, 0, 0) translateY(20px); -ms-transform: translate3d(0, 0, 0) translateY(20px); transform: translate3d(0, 0, 0) translateY(20px); } .canvas.dragging [data-title]:before, .canvas.dragging [data-title]:after { opacity: 0; visibility: hidden; } [data-title]:hover:after, [data-title]:hover:before { opacity: 1; -moz-transform: translate3d(0, 0, 0) translateX(0); -webkit-transform: translate3d(0, 0, 0) translateX(0); -o-transform: translate3d(0, 0, 0) translateX(0); -ms-transform: translate3d(0, 0, 0) translateX(0); transform: translate3d(0, 0, 0) translateX(0); visibility: visible; } .canvas [data-title]:hover:before, .canvas [data-title]:hover:after { -moz-transform: translate3d(0, 0, 0) translateY(0); -webkit-transform: translate3d(0, 0, 0) translateY(0); -o-transform: translate3d(0, 0, 0) translateY(0); -ms-transform: translate3d(0, 0, 0) translateY(0); transform: translate3d(0, 0, 0) translateY(0); }dispcalGUI-1.7.1.6/dispcalGUI/report/compare.functions.js000644 000765 000000 00000212612 12263672717 023131 0ustar00svpwheel000000 000000 var p; // Array methods p=Array.prototype; p.indexof = function(v, ignore_case) { for (var i=0; i -1) ipart+=v.substr(i).length; while (v.length-1 && (data_end = src.search(_data_regexp2))>data_begin) { if (!this.data.length) { // 1st var header = lf2cr(src).substr(0, data_begin).replace(_data_format_regexp, ""); if (v = header.match(_header_regexp1)) for (i=0; i -1 && this.data_format.indexOf('CMYK_M') > -1 && this.data_format.indexOf('CMYK_Y') > -1 && this.data_format.indexOf('CMYK_K') > -1) this.device = 'CMYK'; else this.device = 'RGB'; if (comparison_criteria[this.id]) this.id = comparison_criteria[this.id].id; else this.id = this.device; return src ? true : false }; p=dataset.prototype; p.header_get = function() { var header=[], i, j, v; for (i=0; i-1) { header.push(["BEGIN_"+this.header[i][0]]); v=this.header[i][1].split("\n"); for (j=0; j 3 ? 3 : 0, // start offset for device values in fields_match (CMYK if length > 3, else RGB) devend = criteria.fields_match.length > 3 ? 6 : 2, // end offset for device values in fields_match (CMYK if length > 3, else RGB) missing_data, delta_calc_method = f['F_out'].elements['FF_delta_calc_method'].value, patch_number_html, verbosestats = f['F_out'].elements['FF_verbosestats'].checked, warn_deviation = criteria.warn_deviation, no_Lab = (this.data_format.indexof("LAB_L", true) < 0 || this.data_format.indexof("LAB_A", true) < 0 || this.data_format.indexof("LAB_B", true) < 0), no_XYZ = (this.data_format.indexof("XYZ_X", true) < 0 || this.data_format.indexof("XYZ_Y", true) < 0 || this.data_format.indexof("XYZ_Z", true) < 0), gray_balance_cal_only = f['F_out'].elements['FF_gray_balance_cal_only'].checked; if (profile_wp.length == 3) { for (var i=0; i

Basic Information

', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', (e['FF_correction_matrix'].value ? '' : ''), ' ', ' ', ' ', ' ' ]; if (profile_wp.length == 3) this.report_html = this.report_html.concat([ ' ', ' ', ' ', ' ' ]); if (wp.length == 3) this.report_html = this.report_html.concat([ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ]); if (bp.length == 3 && bp[0] > -1 && bp[1] > -1 && bp[2] > -1) this.report_html = this.report_html.concat([ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' ]); this.report_html = this.report_html.concat([ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '
Device:' + e['FF_display'].value + '
Instrument:' + e['FF_instrument'].value + '
Correction:' + e['FF_correction_matrix'].value + '
Target profile:' + e['FF_profile'].value + '
Profile whitepoint XYZ (normalized):' + profile_wp_round.join(' ') + (profile_wp_norm_round.join(' ') != profile_wp_round.join(' ') ? ' (' + profile_wp_norm_round.join(' ') + ')' : '') + ', CCT = ' + profile_colortemp + 'K
Measured luminance:' + wp[1].accuracy(1) + ' cd/m²
Measured whitepoint XYZ (normalized):' + wp_round.join(' ') + ' (' + wp_norm_round.join(' ') + '), CCT = ' + colortemp + 'K
Assumed target whitepoint (XYZ):' + colortemp_assumed + 'K ' + (planckian ? 'blackbody' : 'daylight') + ' (' + wp_assumed_round.join(' ') + ')
Measured black luminance:' + bp[1].accuracy(4) + ' cd/m²
Contrast:' + (wp[1] / bp[1]).accuracy(1) + ':1
Testchart:' + this.testchart + '
Simulation profile:' + (SIMULATION_PROFILE || 'None') + '
BT.1886 gamma mapping:' + (BT_1886_GAMMA ? BT_1886_GAMMA.toFixed(2) + ' ' + {"b": "relative", "B": "absolute"}[BT_1886_GAMMA_TYPE] : (SIMULATION_PROFILE ? 'No' : 'N/A')) + '
Whitepoint simulation:' + (WHITEPOINT_SIMULATION ? 'Yes' + (WHITEPOINT_SIMULATION_RELATIVE ? ', relative to target profile whitepoint' : '') : (!DEVICELINK_PROFILE ? 'No' : 'N/A')) + '
Chromatic adaption:' + e['FF_adaption'].value + '
Devicelink profile:' + (DEVICELINK_PROFILE || 'None') + '
Evaluation criteria:' + criteria.name + '
Date:' + e['FF_datetime'].value + '
' ]); var result_start = this.report_html.length; this.report_html = this.report_html.concat([ '
', '

Summary

', '
', ' ', ' ', ' ', ' ' ]); var seen = []; for (var j=0; j(' + window.CAL_RGBLEVELS[0] + '/' + CAL_ENTRYCOUNT + ')'; } else { rules[j][3] = null; rules[j][4] = null; continue; } break; case 'CAL_GREENLEVELS': if (window.CAL_RGBLEVELS) { result[j].sum = (window.CAL_RGBLEVELS[1] / CAL_ENTRYCOUNT * 100).accuracy(1); result[j].htmlsum = result[j].sum + '%
(' + window.CAL_RGBLEVELS[1] + '/' + CAL_ENTRYCOUNT + ')'; } else { rules[j][3] = null; rules[j][4] = null; continue; } break; case 'CAL_BLUELEVELS': if (window.CAL_RGBLEVELS) { result[j].sum = (window.CAL_RGBLEVELS[2] / CAL_ENTRYCOUNT * 100).accuracy(1); result[j].htmlsum = result[j].sum + '%
(' + window.CAL_RGBLEVELS[2] + '/' + CAL_ENTRYCOUNT + ')'; } else { rules[j][3] = null; rules[j][4] = null; continue; } break; case 'CAL_GRAYLEVELS': if (window.CAL_RGBLEVELS) { var cal_graylevels = Math.min(CAL_RGBLEVELS[0], CAL_RGBLEVELS[1], CAL_RGBLEVELS[2]); result[j].sum = (cal_graylevels / CAL_ENTRYCOUNT * 100).accuracy(1); result[j].htmlsum = result[j].sum + '%
(' + cal_graylevels + '/' + CAL_ENTRYCOUNT + ')'; } else { rules[j][3] = null; rules[j][4] = null; continue; } break; case 'WHITEPOINT_MvsA': // Measured vs. assumed if (wp.length == 3) { target_Lab = jsapi.math.color.XYZ2Lab(wp_assumed[0], wp_assumed[1], wp_assumed[2]); actual_Lab = jsapi.math.color.XYZ2Lab(wp_norm[0], wp_norm[1], wp_norm[2]); // alert(rules[j] + '\ntarget_Lab: ' + target_Lab + '\nactual_Lab: ' + actual_Lab); delta = jsapi.math.color.delta(target_Lab[0], target_Lab[1], target_Lab[2], actual_Lab[0], actual_Lab[1], actual_Lab[2], rules[j][5]); result[j].E.push(delta.E); result[j].L.push(delta.L); result[j].C.push(delta.C); result[j].H.push(delta.H); result[j].a.push(delta.a); result[j].b.push(delta.b); } else { rules[j][3] = null; rules[j][4] = null; continue; } break; case 'WHITEPOINT_MvsP': // Profile vs. measured if (wp.length == 3 && profile_wp.length == 3) { target_Lab = jsapi.math.color.XYZ2Lab(profile_wp_norm[0], profile_wp_norm[1], profile_wp_norm[2]); actual_Lab = jsapi.math.color.XYZ2Lab(wp_norm[0], wp_norm[1], wp_norm[2]); // alert(rules[j] + '\ntarget_Lab: ' + target_Lab + '\nactual_Lab: ' + actual_Lab); delta = jsapi.math.color.delta(target_Lab[0], target_Lab[1], target_Lab[2], actual_Lab[0], actual_Lab[1], actual_Lab[2], rules[j][5]); result[j].E.push(delta.E); result[j].L.push(delta.L); result[j].C.push(delta.C); result[j].H.push(delta.H); result[j].a.push(delta.a); result[j].b.push(delta.b); } else { rules[j][3] = null; rules[j][4] = null; continue; } break; } }; this.report_html.push(' '); this.report_html.push('
'); this.report_html.push(' '); this.report_html.push(' '); var bar_html = []; if (result[j].sum != null && rules[j][2] && rules[j][2].indexOf("GAMMA") < 0) { if (!rules[j][3] || (rules[j][5] && rules[j][5].substr(3) != delta_calc_method.substr(3))) rgb = [204, 204, 204]; else { var rgb = [0, 255, 0], step = 255 / (rules[j][3] + rules[j][3] / 2); if (Math.abs(result[j].sum) <= rules[j][3]) { rgb[0] += Math.min(step * Math.abs(result[j].sum), 255); rgb[1] -= Math.min(step * Math.abs(result[j].sum), 255); var maxrg = Math.max(rgb[0], rgb[1]); rgb[0] *= (255 / maxrg); rgb[1] *= (255 / maxrg); rgb[0] = Math.round(rgb[0]); rgb[1] = Math.round(rgb[1]); } else rgb = [255, 0, 0]; }; for (var l = 0; l < actual_rgb_html.length; l ++) { bar_html.push(Math.abs(result[j].sum).accuracy(2) > 0 ? ' ' : ' '); }; }; this.report_html.push(' '); this.report_html.push(' '); if (rules[j][1] && rules[j][1].length > 1 && rules[j][5].substr(3) == delta_calc_method.substr(3)) seen.push(rules[j][1].join(',')); }; this.report_html.push('
CriteriaNominalRecommended# Actual Result
' + rules[j][0] + '' + (rules[j][3] ? (rules[j][2] ? '<= ' + rules[j][3] : '>= ' + rules[j][3] + '%') : ' ') + '' + (rules[j][4] ? (rules[j][2] ? '<= ' + rules[j][4] : '>= ' + rules[j][4] + '%'): ' ') + ''); patch_number_html = []; actual_rgb_html = []; target_rgb_html = []; var haspatchid = false; if (rules[j][2].indexOf("_MAX") < 0 && rules[j][2].indexOf("_MIN") < 0) { for (var k=0; k 1 && seen.indexOf(rules[j][1].join(',')) < 0 && rules[j][5].substr(3) == delta_calc_method.substr(3)) { patch_number_html.push('
 
'); haspatchid = true; if (rules[j][1][k].length == 4) // Assume CMYK target_rgb = jsapi.math.color.CMYK2RGB(rules[j][1][k][0] / 100, rules[j][1][k][1] / 100, rules[j][1][k][2] / 100, rules[j][1][k][3] / 100, 255); else target_rgb = [rules[j][1][k][0] * 2.55, rules[j][1][k][1] * 2.55, rules[j][1][k][2] * 2.55]; target_rgb_html.push('
 
'); actual_rgb_html.push('
\u2716 
'); } }; if (rules[j][1].length) { for (var k=0; k' + n.fill(String(number_of_sets).length) + ''); haspatchid = true; } target_rgb = jsapi.math.color.Lab2RGB(target_Lab[0], target_Lab[1], target_Lab[2], "D50", 255, true); actual_rgb = jsapi.math.color.Lab2RGB(actual_Lab[0], actual_Lab[1], actual_Lab[2], "D50", 255, true); target_rgb_html[k] = ('
 
'); actual_rgb_html[k] = ('
 
'); }; matched = true } } } else matched = true; if (matched) { delta = jsapi.math.color.delta(target_Lab[0], target_Lab[1], target_Lab[2], actual_Lab[0], actual_Lab[1], actual_Lab[2], rules[j][5]); result[j].E.push(delta.E); result[j].L.push(delta.L); result[j].C.push(delta.C); result[j].H.push(delta.H); result[j].a.push(delta.a); result[j].b.push(delta.b); if (actual.gamma) result[j].g.push(actual.gamma); if ((rules[j][1].length || rules[j][2].indexOf('_MAX') > -1 || rules[j][2].indexOf('_MIN') > -1) && (rules[j][2].indexOf('GAMMA') < 0 || actual.gamma)) result[j].matches.push([i, i, n]) } }; this.report_html = this.report_html.concat(patch_number_html); var number_of_sets = n; if (!rules[j][1].length || ((rules[j][1][0] == 'WHITEPOINT_MvsA' || (rules[j][1][0] == 'WHITEPOINT_MvsP' && profile_wp.length == 3)) && wp.length == 3) || result[j].matches.length >= rules[j][1].length) switch (rules[j][2]) { case DELTA_A_MAX: result[j].sum = jsapi.math.absmax(result[j].a); break; case DELTA_A_AVG: result[j].sum = jsapi.math.avg(result[j].a); break; case DELTA_A_MED: result[j].sum = jsapi.math.median(result[j].a); break; case DELTA_A_MAD: result[j].sum = jsapi.math.mad(result[j].a); break; case DELTA_A_RANGE: result[j].sum = Math.abs(jsapi.math.max(result[j].a) - jsapi.math.min(result[j].a)); break; case DELTA_A_STDDEV: result[j].sum = jsapi.math.stddev(result[j].a); break; case DELTA_A_B_RANGE: result[j].sum = Math.abs(jsapi.math.absmax(result[j].a)) + Math.abs(jsapi.math.absmax(result[j].b)); break; case DELTA_B_MAX: result[j].sum = jsapi.math.absmax(result[j].b); break; case DELTA_B_AVG: result[j].sum = jsapi.math.avg(result[j].b); break; case DELTA_B_MED: result[j].sum = jsapi.math.median(result[j].b); break; case DELTA_B_MAD: result[j].sum = jsapi.math.mad(result[j].b); break; case DELTA_B_RANGE: result[j].sum = Math.abs(jsapi.math.max(result[j].b) - jsapi.math.min(result[j].b)); break; case DELTA_B_STDDEV: result[j].sum = jsapi.math.stddev(result[j].b); break; case DELTA_E_MAX: result[j].sum = jsapi.math.absmax(result[j].E); break; case DELTA_E_AVG: result[j].sum = jsapi.math.avg(result[j].E); break; case DELTA_E_MED: result[j].sum = jsapi.math.median(result[j].E); break; case DELTA_E_MAD: result[j].sum = jsapi.math.mad(result[j].E); break; case DELTA_E_RANGE: result[j].sum = Math.abs(jsapi.math.max(result[j].E) - jsapi.math.min(result[j].E)); break; case DELTA_E_STDDEV: result[j].sum = jsapi.math.stddev(result[j].E); break; case DELTA_L_MAX: result[j].sum = jsapi.math.absmax(result[j].L); break; case DELTA_L_AVG: result[j].sum = jsapi.math.avg(result[j].L); break; case DELTA_L_MED: result[j].sum = jsapi.math.median(result[j].L); break; case DELTA_L_MAD: result[j].sum = jsapi.math.mad(result[j].L); break; case DELTA_L_RANGE: result[j].sum = Math.abs(jsapi.math.max(result[j].L) - jsapi.math.min(result[j].L)); break; case DELTA_L_STDDEV: result[j].sum = jsapi.math.stddev(result[j].L); break; case DELTA_C_MAX: result[j].sum = jsapi.math.absmax(result[j].C); break; case DELTA_C_AVG: result[j].sum = jsapi.math.avg(result[j].C); break; case DELTA_C_MED: result[j].sum = jsapi.math.median(result[j].C); break; case DELTA_C_MAD: result[j].sum = jsapi.math.mad(result[j].C); break; case DELTA_C_RANGE: result[j].sum = Math.abs(jsapi.math.max(result[j].C) - jsapi.math.min(result[j].C)); break; case DELTA_C_STDDEV: result[j].sum = jsapi.math.stddev(result[j].C); break; case DELTA_H_MAX: result[j].sum = jsapi.math.absmax(result[j].H); break; case DELTA_H_AVG: result[j].sum = jsapi.math.avg(result[j].H); break; case DELTA_H_MED: result[j].sum = jsapi.math.median(result[j].H); break; case DELTA_H_MAD: result[j].sum = jsapi.math.mad(result[j].H); break; case DELTA_H_RANGE: result[j].sum = Math.abs(jsapi.math.max(result[j].H) - jsapi.math.min(result[j].H)); break; case DELTA_H_STDDEV: result[j].sum = jsapi.math.stddev(result[j].H); break; case GAMMA_MAX: if (result[j].g.length) result[j].sum = jsapi.math.max(result[j].g); break; case GAMMA_MIN: if (result[j].g.length) result[j].sum = jsapi.math.min(result[j].g); break; case GAMMA_AVG: if (result[j].g.length) result[j].sum = jsapi.math.avg(result[j].g); break; case GAMMA_MED: if (result[j].g.length) result[j].sum = jsapi.math.median(result[j].g); break; case GAMMA_MAD: if (result[j].g.length) result[j].sum = jsapi.math.mad(result[j].g); break; case GAMMA_RANGE: if (result[j].g.length) result[j].sum = Math.abs(jsapi.math.max(result[j].g) - jsapi.math.min(result[j].g)); break; case GAMMA_STDDEV: if (result[j].g.length) result[j].sum = jsapi.math.stddev(result[j].g); break; } else if (!rules[j][1].length || (rules[j][1][0] + '').indexOf('LEVELS') < 0) missing_data = true; if (result[j].matches.length) { matched = false; for (var k=0; k' + result[j].finalmatch[2].fill(String(number_of_sets).length) + ''); haspatchid = true; var colors = get_colors(target, actual, o, no_Lab, no_XYZ, gray_balance_cal_only, true, profile_wp_norm, wp_norm, absolute, cat); target_Lab = colors.target_Lab; actual_Lab = colors.actual_Lab; target_rgb = jsapi.math.color.Lab2RGB(target_Lab[0], target_Lab[1], target_Lab[2], "D50", 255, true); actual_rgb = jsapi.math.color.Lab2RGB(actual_Lab[0], actual_Lab[1], actual_Lab[2], "D50", 255, true); target_rgb_html.push('
 
'); actual_rgb_html.push('
 
'); }; } if (!target_rgb_html.length) { target_rgb_html.push(' '); actual_rgb_html.push(' '); }; if (!haspatchid) this.report_html.push('
 
'); this.report_html.push('
' + target_rgb_html.join('') + '' + actual_rgb_html.join('') + '' + (result[j].sum != null ? result[j].htmlsum || result[j].sum.accuracy(2) : ' ') + '' + (bar_html.join('') || ' ') + 'OK ' : (result[j].sum != null && rules[j][3] ? 'warn">OK \u26a0' : 'statonly">')) + '✔' : '"> ')) : 'ko">' + (result[j].sum != null ? 'NOT OK' : '') + ' \u2716') + '
'); var pass, overachieve; for (var j=0; j rules[j][3] : Math.abs(result[j].sum) < rules[j][3])) pass = false; if (!rules[j][4]) continue; if (missing_data || isNaN(result[j].sum) || (rules[j][2] ? Math.abs(result[j].sum) > rules[j][4] : Math.abs(result[j].sum) < rules[j][4])) overachieve = false; } if (rules[j][5] && rules[j][5].substr(3) == delta_calc_method.substr(3)) for (var k=0; k -1) { this.data[result[j].matches[k][1]].actual_DE = Math.abs(rules[j][2].indexOf('_MAX') < 0 ? result[j].sum : result[j].E[k]); this.data[result[j].matches[k][1]].tolerance_DE = rules[j][3]; } else if (rules[j][2].indexOf('_L_') > -1) { this.data[result[j].matches[k][1]].actual_DL = Math.abs(rules[j][2].indexOf('_MAX') < 0 ? result[j].sum : result[j].L[k]); this.data[result[j].matches[k][1]].tolerance_DL = rules[j][3]; } else if (rules[j][2].indexOf('_A_') > -1) { this.data[result[j].matches[k][1]].actual_Da = Math.abs(rules[j][2].indexOf('_MAX') < 0 ? result[j].sum : result[j].a[k]); this.data[result[j].matches[k][1]].tolerance_Da = rules[j][3]; } else if (rules[j][2].indexOf('_B_') > -1) { this.data[result[j].matches[k][1]].actual_Db = Math.abs(rules[j][2].indexOf('_MAX') < 0 ? result[j].sum : result[j].b[k]); this.data[result[j].matches[k][1]].tolerance_Db = rules[j][3]; } else if (rules[j][2].indexOf('_C_') > -1) { this.data[result[j].matches[k][1]].actual_DC = Math.abs(rules[j][2].indexOf('_MAX') < 0 ? result[j].sum : result[j].C[k]); this.data[result[j].matches[k][1]].tolerance_DC = rules[j][3]; } else if (rules[j][2].indexOf('_H_') > -1) { this.data[result[j].matches[k][1]].actual_DH = Math.abs(rules[j][2].indexOf('_MAX') < 0 ? result[j].sum : result[j].H[k]); this.data[result[j].matches[k][1]].tolerance_DH = rules[j][3]; } }; }; this.report_html.push(''); this.result_html = this.report_html.slice(result_start); this.report_html.push('
'); this.report_html.push('
'); this.report_html.push('

Overview

'); this.report_html.push(' '); this.report_html.push(' '); var device_labels = fields_match.slice(devstart, devend + 1), device_channels = device_labels.join('').replace(/(?:CMYK|RGB)_/g, ''); this.report_html.push(' '); this.report_html.push(' '); this.report_html.push(' '); if (mode == 'Lab') labels = 'L*,a*,b*'; else if (mode == 'XYZ') labels = 'X,Y,Z'; else if (mode == 'xyY') labels = 'x,y,Y'; else if (mode == "Lu'v'") labels = "L*,u',v'"; this.report_html.push(' ' + (criteria.fields_match.join(',').indexOf('CMYK') < 0 ? '' : '') + '' + (criteria.fields_match.join(',').indexOf('CMYK') < 0 ? '' : '') + '' + /* '' + */ ''); this.report_html.push(' '); var grayscale_values = [], gamut_values = []; for (var i=0, n=0; i'); var bar_html = [], rgb = [0, 255, 0]; if (actual.tolerance_DE == null) actual.tolerance_DE = 5; if (actual.actual_DE == null) actual.actual_DE = delta.E; var step = 255 / (actual.tolerance_DE + actual.tolerance_DE / 2); if (actual.actual_DE <= actual.tolerance_DE) { rgb[0] += Math.min(step * actual.actual_DE, 255); rgb[1] -= Math.min(step * actual.actual_DE, 255); var maxrg = Math.max(rgb[0], rgb[1]); rgb[0] *= (255 / maxrg); rgb[1] *= (255 / maxrg); rgb[0] = Math.round(rgb[0]); rgb[1] = Math.round(rgb[1]); } else rgb = [255, 0, 0]; bar_html.push(actual.actual_DE.accuracy(2) > 0 ? ' ' : ' '); if (criteria.fields_match.join(',').indexOf('CMYK') > -1) var device = current_cmyk; else { var device = current_rgb; for (var j=0; j' + n.fill(String(number_of_sets).length) + '' + (criteria.fields_match.join(',').indexOf('CMYK') < 0 ? '' : '') + '' + (criteria.fields_match.join(',').indexOf('CMYK') < 0 ? '' : '') + '' + /* '' + */ ''); this.report_html.push(' '); }; this.report_html.push('
#Device ValuesNominal Values Measured ValuesΔE*' + delta_calc_method.substr(3) + ' 
 ' + device_labels.join('').replace(/\w+_/g, '') + '' + labels.split(',').join('') + 'γ  ' + labels.split(',').join('') + 'γΔL*Δa*Δb*ΔC*ΔH*ΔE* 
' + device.join('') + '' + target_color[0].accuracy(accuracy) + '' + target_color[1].accuracy(accuracy) + '' + target_color[2].accuracy(accuracy) + '' + (target.gamma ? target.gamma.accuracy(2) : ' ') + '
 
 
' + actual_color[0].accuracy(accuracy) + '' + actual_color[1].accuracy(accuracy) + '' + actual_color[2].accuracy(accuracy) + '' + (actual.gamma ? actual.gamma.accuracy(2) : ' ') + '' + delta.L.accuracy(2) + '' + delta.a.accuracy(2) + '' + delta.b.accuracy(2) + '' + delta.C.accuracy(2) + '' + delta.H.accuracy(2) + '' + delta.E.accuracy(2) + '' + bar_html.join('') + '
'); this.report_html.push('
'); if (grayscale_values.length) { grayscale_values.sort(function(a, b) { // Compare signal level if (a[0][0] < b[0][0]) return -1; if (a[0][0] > b[0][0]) return 1; // If same signal level, compare target L* if (a[3][0] < b[3][0]) return -1; if (a[3][0] > b[3][0]) return 1; return 0; }); // CCT var CCT = [], hwidth = 100 / 18, width = (100 - hwidth) / grayscale_values.length, rows = 16, start = 10000, end = 2500, rstep = (start - end) / (rows - 1), rowh = 30; CCT.push('
'); CCT.push('

Correlated Color Temperature

'); CCT.push(' '); CCT.push(''); for (var i = 0; i < grayscale_values.length; i ++) { var target_XYZ = jsapi.math.color.Lab2XYZ(grayscale_values[i][3][0], grayscale_values[i][3][1], grayscale_values[i][3][2]), actual_XYZ = jsapi.math.color.Lab2XYZ(grayscale_values[i][4][0], grayscale_values[i][4][1], grayscale_values[i][4][2]); if (!absolute) { target_XYZ = jsapi.math.color.adapt(target_XYZ[0], target_XYZ[1], target_XYZ[2], [96.42, 100, 82.49], profile_wp_norm, cat); actual_XYZ = jsapi.math.color.adapt(actual_XYZ[0], actual_XYZ[1], actual_XYZ[2], [96.42, 100, 82.49], wp_norm, cat); } window.console && console.log(target_XYZ.join(', '), actual_XYZ.join(', ')); var target_CCT = jsapi.math.color.XYZ2CorColorTemp(target_XYZ[0], target_XYZ[1], target_XYZ[2]), actual_CCT = jsapi.math.color.XYZ2CorColorTemp(actual_XYZ[0], actual_XYZ[1], actual_XYZ[2]); var rgb = [0, 255, 0], brgb = [], step = .75; if (target_CCT != actual_CCT) { rgb[0] += Math.min(step * Math.abs(target_CCT - actual_CCT), 255); rgb[1] -= Math.min(step * Math.abs(target_CCT - actual_CCT), 255); var maxrg = Math.max(rgb[0], rgb[1]); rgb[0] *= (255 / maxrg); rgb[1] *= (255 / maxrg); rgb[0] = Math.round(rgb[0]); rgb[1] = Math.round(rgb[1]); } for (var j = 0; j < 3; j ++) brgb[j] = Math.round(rgb[j] * .8); CCT.push(''); } CCT.push(''); for (var i = start - rstep; i >= end; i -= rstep) { CCT.push(''); } CCT.push(''); for (var i = 0; i < grayscale_values.length; i ++) { CCT.push(''); } CCT.push('
10000K
' + i + 'K
%' + (grayscale_values[i][0][0] / 255 * 100).accuracy(0) + '
'); //var idx = this.report_html.indexOf('
'); //this.report_html.splice(idx, 0, CCT.join('\n')); this.report_html = this.report_html.concat(CCT); // Gamma tracking var numgamma = 0; for (var i = 0; i < grayscale_values.length; i ++) { if (grayscale_values[i][1].gamma && grayscale_values[i][2].gamma) numgamma ++; } if (numgamma > 0) { var gamma_tracking = [], hwidth = 100 / 31, width = (100 - hwidth) / numgamma, rows = 21, start = 30, end = 10, rstep = (start - end) / (rows - 1), rowh = 30; gamma_tracking.push('
'); gamma_tracking.push('

Gamma

'); gamma_tracking.push(' '); gamma_tracking.push(''); for (var i = 0; i < grayscale_values.length; i ++) { if (!grayscale_values[i][1].gamma || !grayscale_values[i][2].gamma) continue; var rgb = [0, 255, 0], brgb = [], step = 255 / 2; if (grayscale_values[i][1].gamma != grayscale_values[i][2].gamma) { rgb[0] += Math.min(step * Math.abs(grayscale_values[i][1].gamma - grayscale_values[i][2].gamma) * 12.75, 255); rgb[1] -= Math.min(step * Math.abs(grayscale_values[i][1].gamma - grayscale_values[i][2].gamma) * 12.75, 255); var maxrg = Math.max(rgb[0], rgb[1]); rgb[0] *= (255 / maxrg); rgb[1] *= (255 / maxrg); rgb[0] = Math.round(rgb[0]); rgb[1] = Math.round(rgb[1]); } for (var j = 0; j < 3; j ++) brgb[j] = Math.round(rgb[j] * .8); gamma_tracking.push(''); } gamma_tracking.push(''); for (var i = start - rstep; i >= end; i -= rstep) { gamma_tracking.push(''); } gamma_tracking.push(''); for (var i = 0; i < grayscale_values.length; i ++) { if (!grayscale_values[i][1].gamma || !grayscale_values[i][2].gamma) continue; gamma_tracking.push(''); } gamma_tracking.push('
' + (start / 10).toFixed(1) + '
' + (i / 10).toFixed(1) + '
%' + (grayscale_values[i][0][0] / 255 * 100).accuracy(0) + '
'); //var idx = this.report_html.indexOf('
'); //this.report_html.splice(idx, 0, gamma_tracking.join('\n')); this.report_html = this.report_html.concat(gamma_tracking); } // numgamma > 0 // RGB Balance var rgb_balance = [], hwidth = 100 / 21, width = (100 - hwidth) / grayscale_values.length, rows = 13, start = 30, end = -30, rstep = (start - end) / (rows - 1), rowh = 30; rgb_balance.push('
'); rgb_balance.push('

RGB Gray Balance

'); rgb_balance.push(' '); rgb_balance.push(''); for (var i = 0; i < grayscale_values.length; i ++) { var target_rgb = jsapi.math.color.Lab2RGB(grayscale_values[i][3][0], grayscale_values[i][3][1], grayscale_values[i][3][2], 'D50', 100), actual_rgb = jsapi.math.color.Lab2RGB(grayscale_values[i][4][0], grayscale_values[i][4][1], grayscale_values[i][4][2], 'D50', 100); window.console && console.log(target_rgb.join(', '), actual_rgb.join(', ')); rgb_balance.push(''); } rgb_balance.push(''); for (var i = start - rstep; i >= end; i -= rstep) { rgb_balance.push(''); } rgb_balance.push(''); for (var i = 0; i < grayscale_values.length; i ++) { rgb_balance.push(''); } rgb_balance.push('
+' + start + '%
' + (i > 0 ? '+' : '') + i + '%
%' + (grayscale_values[i][0][0] / 255 * 100).accuracy(0) + '
'); //var idx = this.report_html.indexOf('
'); //this.report_html.splice(idx, 0, rgb_balance.join('\n')); this.report_html = this.report_html.concat(rgb_balance); } if (gamut_values.length) { var accuracy, offset, multiplier; switch (mode) { case "Lu'v'": xy = "u'v'"; accuracy = 4; offset = [10, 95]; multiplier = 1200; break; case 'XYZ': xy = 'XZ'; accuracy = 2; offset = [5, 95]; multiplier = 8; break; case 'xyY': xy = 'xy'; accuracy = 4; offset = [10, 95]; multiplier = 1000; break; default: xy = 'a*b*'; accuracy = 2; offset = [50, 50]; multiplier = 3; } this.report_html.push('
'); this.report_html.push('

Gamut CIE ' + xy + '

'); this.report_html.push('
'); // Sort by L* gamut_values.sort(function (a, b) { if (a[4][0] < b[4][0]) return -1; if (a[4][0] > b[4][0]) return 1; return 0; }); for (var i = 0; i < gamut_values.length; i ++) { var n = gamut_values[i][0], device_channels = gamut_values[i][1], device = gamut_values[i][2], target_color = gamut_values[i][3], target_xy, actual_color = gamut_values[i][5], actual_xy, target_rgb = gamut_values[i][6], actual_rgb = gamut_values[i][7], delta_calc_method = gamut_values[i][8], deltaE = gamut_values[i][9]; switch (mode) { case 'XYZ': target_xy = [target_color[2], target_color[0]]; actual_xy = [actual_color[2], actual_color[0]]; break; case 'xyY': target_xy = target_color; actual_xy = actual_color; break; default: target_xy = target_color.slice(1); actual_xy = actual_color.slice(1); } this.report_html.push('
'); } this.report_html.push('
'); } return this.report_html.join('\n') }; function bggridlines(rowh) { return window.btoa ? 'background-image: url(data:image/svg+xml;base64,' + btoa('') + ');' : ''; }; function trim(txt) { return txt.replace(/^\s+|\s+$/g, "") }; function lf2cr(txt) { return txt.replace(/\r\n/g, "\r").replace(/\n/g, "\r") }; function cr2lf(txt) { // CR LF = Windows // CR = Mac OS 9 // LF = Unix/Linux/Mac OS X return txt.replace(/\r\n/g, "\n").replace(/\r/g, "\n") }; function compact(txt, collapse_whitespace) { txt = trim(txt).replace(/\n\s+|\s+\n/g, "\n"); return collapse_whitespace?txt.replace(/\s+/g, " "):txt }; function comma2point(txt) { return decimal(txt) }; function decimal(txt, sr, re) { if (!sr) sr = "\\,"; if (!re) re = "."; return txt.replace(new RegExp("((^|\\s)\\-?\\d+)"+sr+"(\\d+(\\s|$))", "g"), "$1"+re+"$3") }; function toarray(txt, level) { txt=comma2point(compact(cr2lf(txt))); if (!txt) return []; if (level) { txt=txt.split(/\s/) } else { txt=txt.split("\n"); for (var i=0; i -1) current_cmyk = [actual[fields_extract_indexes_i[3]], actual[fields_extract_indexes_i[4]], actual[fields_extract_indexes_i[5]], actual[fields_extract_indexes_i[6]]]; } else { current_rgb = [actual[fields_extract_indexes_i[4]], actual[fields_extract_indexes_i[5]], actual[fields_extract_indexes_i[6]]]; if (fields_match.join(',').indexOf('CMYK') > -1) current_cmyk = [actual[fields_extract_indexes_i[0]], actual[fields_extract_indexes_i[1]], actual[fields_extract_indexes_i[2]], actual[fields_extract_indexes_i[3]]]; } for (var l=0; l 0 && current_rgb[0] < 100 && target_Lab[0] > 0 && actual_Lab[0] > 0) { var target_XYZ = jsapi.math.color.Lab2XYZ(target_Lab[0], target_Lab[1], target_Lab[2]), actual_XYZ = jsapi.math.color.Lab2XYZ(actual_Lab[0], actual_Lab[1], actual_Lab[2]); target.gamma = Math.log(target_XYZ[1]) / Math.log(current_rgb[0] / 100); actual.gamma = Math.log(actual_XYZ[1]) / Math.log(current_rgb[0] / 100); } } return {target_Lab: target_Lab, actual_Lab: actual_Lab, current_rgb: current_rgb, current_cmyk: current_cmyk}; }; function get_data(which) { var f=document.forms; if (which == "r" || !which) { data_ref=new dataset(f["F_data"].elements["FF_data_ref"].value) }; if (which == "i" || !which) { data_in=new dataset(f["F_data"].elements["FF_data_in"].value) }; if (which == "r" || !which) { if (!data_ref.data_format.length) return false; if (!data_ref.data.length) return false }; if (which == "i" || !which) { if (!data_in.data_format.length) return false; if (!data_in.data.length) return false }; return true }; function compare(set_delta_calc_method) { form_elements_set_disabled(null, true); var fe = document.forms["F_out"].elements, fe2 = document.forms["F_data"].elements; if (fe2["FF_variables"]) try { eval(fe2["FF_variables"].value); window.comparison_criteria = comparison_criteria; if (window.location.href.indexOf("?debug")>-1) alert("Comparsion criteria: " + (comparison_criteria.toSource ? comparison_criteria.toSource() : comparison_criteria)) } catch (e) { alert("Error parsing variable:\n" + e + "\nUsing default values.") }; var report = data_in.generate_report(set_delta_calc_method); document.getElementById('result').innerHTML = report; layout(); document.getElementById('reporttitle').style.visibility = "visible"; document.getElementById('report').style.visibility = "visible"; form_elements_set_disabled(null, false); if (document.getElementsByClassName) { var canvas = document.getElementsByClassName('canvas'), inner_coords, mouse_is_down, mouse_down_coords; document.addEventListener('mouseup', function (e) { for (var i = 0; i < canvas.length; i ++) { jsapi.dom.attributeRemoveWord(canvas[i], 'class', 'dragging'); } mouse_is_down = false; }); for (var i = 0; i < canvas.length; i ++) { var act = Array.prototype.slice.apply(canvas[i].getElementsByClassName('act')), ref = Array.prototype.slice.apply(canvas[i].getElementsByClassName('ref')), pts = act.concat(ref); for (var j = 0; j < pts.length; j ++) { pts[j].addEventListener('mouseenter', function (e) { var linked = this.parentNode.parentNode.getElementsByClassName('patch-' + jsapi.dom.attr(this, 'data-index')); jsapi.dom.attributeAddWord(this.parentNode.parentNode, 'class', 'hover'); for (var k = 0; k < linked.length; k ++) { jsapi.dom.attributeAddWord(linked[k].parentNode, 'class', 'hover'); if (jsapi.dom.attributeHasWord(linked[k], 'class', 'ref')) { linked[k].style.backgroundColor = jsapi.dom.attr(linked[k], 'data-bgcolor'); linked[k].style.borderColor = jsapi.dom.attr(linked[k], 'data-bordercolor'); } } }); pts[j].addEventListener('mouseleave', function (e) { var linked = this.parentNode.parentNode.getElementsByClassName('patch-' + jsapi.dom.attr(this, 'data-index')); jsapi.dom.attributeRemoveWord(this.parentNode.parentNode, 'class', 'hover'); for (var k = 0; k < linked.length; k ++) { jsapi.dom.attributeRemoveWord(linked[k].parentNode, 'class', 'hover'); if (jsapi.dom.attributeHasWord(linked[k], 'class', 'ref')) { linked[k].style.backgroundColor = ''; linked[k].style.borderColor = ''; } } }); } // Reset viewport canvas[i].addEventListener('dblclick', function () { var inner = this.getElementsByClassName('inner')[0]; this.style.fontSize = '1px'; inner.style.marginLeft = ''; inner.style.marginTop = ''; }); // Click drag viewport canvas[i].addEventListener('mousedown', function (e) { var inner = this.getElementsByClassName('inner')[0]; inner_coords = [parseFloat(inner.style.marginLeft) || 0, parseFloat(inner.style.marginTop) || 0]; jsapi.dom.attributeAddWord(this, 'class', 'dragging'); mouse_is_down = true; mouse_down_coords = [e.pageX, e.pageY]; e.preventDefault(); }); canvas[i].addEventListener('mousemove', function (e) { if (mouse_is_down) { var fontSize = parseFloat(this.style.fontSize) || 1, inner = this.getElementsByClassName('inner')[0]; inner.style.marginLeft = inner_coords[0] + (e.pageX - mouse_down_coords[0]) / fontSize + 'em'; inner.style.marginTop = inner_coords[1] + (e.pageY - mouse_down_coords[1]) / fontSize + 'em'; } }); // Mousewheel zoom canvas[i].addEventListener('wheel', function (e) { var fontSize = parseFloat(this.style.fontSize) || 1; if ((e.deltaY < 0 && fontSize < 1000) || (e.deltaY > 0 && fontSize > 1)) { if (e.deltaY < 0) fontSize += fontSize / 4; else fontSize = Math.max(fontSize - fontSize / 4, 1); this.style.fontSize = fontSize + 'px'; e.preventDefault(); } }); } } return true }; function layout() { var padding = 0, borderwidth = 0, margin = 20, maxwidth = (document.getElementById("report").offsetWidth || 900) - padding * 2 - borderwidth * 2, tables = document.getElementsByTagName("table"); for (var i = 0; i < tables.length; i ++) { if (tables[i].offsetWidth > maxwidth) { maxwidth = tables[i].offsetWidth; document.body.style.width = (maxwidth + padding * 2 + borderwidth * 2) + 'px'; } } for (var i = 0; i < tables.length; i ++) tables[i].style.width = maxwidth + 'px'; } function form_element_set_disabled(form_element, disabled) { if (!form_element || form_element.readOnly || form_element.type == "hidden" || form_element.type == "file" || jsapi.dom.attributeHasWord(form_element, "class", "fakefile") || jsapi.dom.attributeHasWord(form_element, "class", "save") || jsapi.dom.attributeHasWord(form_element, "class", "delete")) return; if (form_element.name == "FF_delta_calc_method") disabled = form_element.disabled; disabled = disabled ? "disabled" : ""; form_element.disabled = disabled; if (disabled && !jsapi.dom.attributeHasWord(form_element, "class", "disabled")) jsapi.dom.attributeAddWord(form_element, "class", "disabled"); else if (!disabled && jsapi.dom.attributeHasWord(form_element, "class", "disabled")) jsapi.dom.attributeRemoveWord(form_element, "class", "disabled"); var labels = document.getElementsByTagName("label"); for (var i=0; i= 1% luminance) average ΔC*76", window.CRITERIA_GRAYSCALE, DELTA_C_AVG, 1.0, 0.5, CIE76], ["RGB gray balance (>= 1% luminance) combined Δa*76 and Δb*76 range", window.CRITERIA_GRAYSCALE, DELTA_A_B_RANGE, 2.0, 1.5, CIE76], ["RGB gray balance (>= 1% luminance) maximum ΔC*76", window.CRITERIA_GRAYSCALE, DELTA_C_MAX, null, null, CIE76], ["RGB gray balance (>= 1% luminance) average ΔC*94", window.CRITERIA_GRAYSCALE, DELTA_C_AVG, 1.0, 0.5, CIE94], ["RGB gray balance (>= 1% luminance) combined Δa*94 and Δb*94 range", window.CRITERIA_GRAYSCALE, DELTA_A_B_RANGE, 2.0, 1.5, CIE94], ["RGB gray balance (>= 1% luminance) maximum ΔC*94", window.CRITERIA_GRAYSCALE, DELTA_C_MAX, null, null, CIE94], ["RGB gray balance (>= 1% luminance) average ΔC*00", window.CRITERIA_GRAYSCALE, DELTA_C_AVG, 1.0, 0.5, CIE00], ["RGB gray balance (>= 1% luminance) combined Δa*00 and Δb*00 range", window.CRITERIA_GRAYSCALE, DELTA_A_B_RANGE, 2.0, 1.5, CIE00], ["RGB gray balance (>= 1% luminance) maximum ΔC*00", window.CRITERIA_GRAYSCALE, DELTA_C_MAX, null, null, CIE00] ] ), CRITERIA_RULES_CMYK = CRITERIA_RULES_DEFAULT.clone(), CRITERIA_DEFAULT = { fields_compare: ['LAB_L', 'LAB_A', 'LAB_B'], name: "Default", passtext: "Nominal tolerance passed", failtext: "Nominal tolerance exceeded", passrecommendedtext: "Recommended tolerance passed", failrecommendedtext: null, delta_calc_method: CIE00, // delta calculation method for overview lock_delta_calc_method: false, warn_deviation: 5, // values with greater Delta E will be marked in the overview (informational, not a pass criteria) rules: CRITERIA_RULES_DEFAULT }, CRITERIA_CMYK = { fields_match: ['CMYK_C', 'CMYK_M', 'CMYK_Y', 'CMYK_K'], fields_compare: ['LAB_L', 'LAB_A', 'LAB_B'], id: "CMYK", name: "CMYK", strip_name: "CMYK", passtext: "Nominal tolerance passed", failtext: "Nominal tolerance exceeded", passrecommendedtext: "Recommended tolerance passed", failrecommendedtext: null, delta_calc_method: CIE00, // delta calculation method for overview lock_delta_calc_method: false, warn_deviation: 5, // values with greater Delta E will be marked in the overview (informational, not a pass criteria) rules: CRITERIA_RULES_CMYK }, CRITERIA_IDEALLIANCE = { fields_match: ['CMYK_C', 'CMYK_M', 'CMYK_Y', 'CMYK_K'], fields_compare: ['LAB_L', 'LAB_A', 'LAB_B'], id: "IDEALLIANCE", name: "IDEAlliance Control Strip 2009", passtext: "Nominal tolerance passed", failtext: "Nominal tolerance exceeded", passrecommendedtext: "Recommended tolerance passed", failrecommendedtext: null, delta_calc_method: CIE00, // delta calculation method for overview lock_delta_calc_method: true, warn_deviation: 3, // values with greater Delta E will be marked in the overview (informational, not a pass criteria) rules: CRITERIA_RULES_CMYK.concat([ // description, [[C, M, Y, K],...], DELTA_[E|L|C|H]_[MAX|AVG], max, recommended, [CIE[76|94|00]|CMC11|CMC21] ["Paper white ΔL*00", [[0, 0, 0, 0]], DELTA_L_MAX, 2, 1, CIE00], ["Paper white Δa*00", [[0, 0, 0, 0]], DELTA_A_MAX, 1, .5, CIE00], ["Paper white Δb*00", [[0, 0, 0, 0]], DELTA_B_MAX, 2, 1, CIE00], /* ["Average ΔE*00", [], DELTA_E_AVG, 2, 1, CIE00], ["Maximum ΔE*00", [], DELTA_E_MAX, 6, 3, CIE00], */ ["CMYK solids maximum ΔE*00", [ [100, 0, 0, 0], [0, 100, 0, 0], [0, 0, 100, 0], [0, 0, 0, 100] ], DELTA_E_MAX, 7, 3, CIE00], ["CMY 50% grey ΔE*00", [[50, 40, 40, 0]], DELTA_E_MAX, 1.5, 0.75, CIE00], ["CMY grey maximum ΔL*00", [ [3.1, 2.2, 2.2, 0], [10.2, 7.4, 7.4, 0], [25, 19, 19, 0], [50, 40, 40, 0], [75, 66, 66, 0] ], DELTA_L_MAX, 2, 1, CIE00], ["CMY grey maximum Δa*00", [ [3.1, 2.2, 2.2, 0], [10.2, 7.4, 7.4, 0], [25, 19, 19, 0], [50, 40, 40, 0], [75, 66, 66, 0] ], DELTA_A_MAX, 1, .5, CIE00], ["CMY grey maximum Δb*00", [ [3.1, 2.2, 2.2, 0], [10.2, 7.4, 7.4, 0], [25, 19, 19, 0], [50, 40, 40, 0], [75, 66, 66, 0] ], DELTA_B_MAX, 1, .5, CIE00], ["CMY grey maximum ΔE*00", [ [3.1, 2.2, 2.2, 0], [10.2, 7.4, 7.4, 0], [25, 19, 19, 0], [50, 40, 40, 0], [75, 66, 66, 0] ], DELTA_E_MAX, 2, 1, CIE00] ]) }, CRITERIA_ISO12647_7 = { fields_match: ['CMYK_C', 'CMYK_M', 'CMYK_Y', 'CMYK_K'], fields_compare: ['LAB_L', 'LAB_A', 'LAB_B'], passtext: "Nominal tolerance passed", failtext: "Nominal tolerance exceeded", passrecommendedtext: "Recommended tolerance passed", failrecommendedtext: null, delta_calc_method: CIE76, // delta calculation method for overview lock_delta_calc_method: true, warn_deviation: 5, // values with greater Delta E will be marked in the overview (informational, not a pass criteria) rules: CRITERIA_RULES_CMYK.concat([ // description, [[C, M, Y, K],...], DELTA_[E|L|C|H]_[MAX|AVG], max, recommended, [CIE[76|94|00]|CMC11|CMC21] ["Paper white ΔE*76", [[0, 0, 0, 0]], DELTA_E_MAX, 3, 1, CIE76], /* ["Average ΔE*", [], DELTA_E_AVG, 3, 2, CIE76], ["Maximum ΔE*", [], DELTA_E_MAX, 6, 5, CIE76], */ ["CMYK solids maximum ΔE*76", [ [100, 0, 0, 0], [0, 100, 0, 0], [0, 0, 100, 0], [0, 0, 0, 100] ], DELTA_E_MAX, 5, 3, CIE76], ["CMYK solids maximum ΔH*76", [ [100, 0, 0, 0], [0, 100, 0, 0], [0, 0, 100, 0], [0, 0, 0, 100] ], DELTA_H_MAX, 2.5, 1.5, CIE76], ["CMY grey average ΔH*76", [ [100, 85, 85, 0], [80, 65, 65, 0], [60, 45, 45, 0], [40, 27, 27, 0], [20, 12, 12, 0], [10, 6, 6, 0] ], DELTA_H_AVG, 1.5, 0.5, CIE76] ]) }, CRITERIA_FOGRA_MEDIAWEDGE_3 = CRITERIA_ISO12647_7, comparison_criteria = { // values MUST pass these criteria RGB: CRITERIA_DEFAULT.clone(), CMYK: CRITERIA_CMYK, FOGRA_MW3: CRITERIA_FOGRA_MEDIAWEDGE_3, IDEALLIANCE: CRITERIA_IDEALLIANCE }; comparison_criteria['CMYK_FOGRA_MEDIAWEDGE_V3'] = CRITERIA_FOGRA_MEDIAWEDGE_3; for (var i=27; i<=47; i++) { comparison_criteria['1x_MW2_FOGRA' + i + 'L_SB'] = CRITERIA_FOGRA_MEDIAWEDGE_3; comparison_criteria['2x_MW2_FOGRA' + i + 'L_SB'] = CRITERIA_FOGRA_MEDIAWEDGE_3; comparison_criteria['FOGRA' + i + '_MW2_SUBSET'] = CRITERIA_FOGRA_MEDIAWEDGE_3; comparison_criteria['FOGRA' + i + '_MW3_SUBSET'] = CRITERIA_FOGRA_MEDIAWEDGE_3; }; comparison_criteria['CMYK_IDEALLIANCE_CONTROLSTRIP_2009'] = CRITERIA_IDEALLIANCE; comparison_criteria['GRACOLCOATED1_ISO12647-7_CONTROLSTRIP2009_REF'] = CRITERIA_IDEALLIANCE; comparison_criteria['SWOPCOATED3_ISO12647-7_CONTROLSTRIP2009_REF'] = CRITERIA_IDEALLIANCE; comparison_criteria['SWOPCOATED5_ISO12647-7_CONTROLSTRIP2009_REF'] = CRITERIA_IDEALLIANCE; CRITERIA_FOGRA_MEDIAWEDGE_3.id = 'FOGRA_MW3'; CRITERIA_FOGRA_MEDIAWEDGE_3.name = "Fogra Media Wedge V3"; CRITERIA_FOGRA_MEDIAWEDGE_3.strip_name = "Ugra/Fogra Media Wedge CMYK V3.0"; CRITERIA_IDEALLIANCE.rules[8][3] = 2; // Average ΔE*00 nominal CRITERIA_IDEALLIANCE.rules[11][3] = 6; // Maximum ΔE*00 nominal comparison_criteria.RGB.id = 'RGB'; comparison_criteria.RGB.fields_match = ['RGB_R', 'RGB_G', 'RGB_B']; comparison_criteria.RGB.name = "RGB"; comparison_criteria.RGB.strip_name = "RGB"; comparison_criteria.RGB.rules = CRITERIA_RULES_RGB; if (window.CRITERIA_GRAYSCALE) { comparison_criteria.RGB_GRAY = comparison_criteria.RGB.clone(); comparison_criteria.RGB_GRAY.delta_calc_method = CIE00; comparison_criteria.RGB_GRAY.id = 'RGB_GRAY'; comparison_criteria.RGB_GRAY.name = "RGB + gray balance"; comparison_criteria.RGB_GRAY.rules = CRITERIA_RULES_VERIFY; }; dispcalGUI-1.7.1.6/dispcalGUI/report/jsapi-packages.js000644 000765 000000 00000103762 12224371766 022360 0ustar00svpwheel000000 000000 /* ############################## */ /* ##### jsapi Distribution ##### */ /* ############################## */ /* 2006 Florian Hoech Function.prototype.apply.js adds apply method for functions in browsers without native implementation */ if (!Function.prototype.apply) { Function.prototype.apply = function(o, args) { o = o ? Object(o) : window; o.__apply__ = this; for (var i = 0, sargs = []; i < args.length; i ++) sargs[i] = "args[" + i + "]"; var result = eval("o.__apply__(" + sargs.join(",") + ");"); o.__apply__ = null; return result } }; /* ##### Array.prototype.pop.js ##### */ /* 2006 Ash Searle http://hexmen.com/blog/2006/12/push-and-pop/ */ if (!Array.prototype.pop) Array.prototype.pop = function() { // Removes the last element from an array and returns that element. This method changes the length of the array. var n = this.length >>> 0, value; if (n) { value = this[--n]; delete this[n] }; this.length = n; return value }; if (!Array.pop) Array.pop = function(object) { return Array.prototype.pop.apply(object) }; /* ##### Array.prototype.shift.js ##### */ /* 2006 Florian Hoech Array.prototype.shift.js adds shift method for arrays in browsers without native or incorrect implementation */ if (!Array.prototype.shift) Array.prototype.shift = function() { // Removes the first element from an array and returns that element. This method changes the length of the array. var n = this.length >>> 0, value = this[0]; for (var i = 1; i < n; i ++) this[i - 1] = this[i]; delete this[n]; this.length = n - 1 >>> 0; return value }; if (!Array.shift) Array.shift = function(object) { return Array.prototype.shift.apply(object) }; /* ##### Array.prototype.unshift.js ##### */ /* 2006 Florian Hoech Array.prototype.unshift.js adds unshift method for arrays in browsers without native or incorrect implementation */ if (!Array.prototype.unshift) Array.prototype.unshift = function() { // Adds one or more elements to the beginning of an array and returns the new length of the array. var n = this.length >>> 0; for (var i = (n - 1) >>> 0; i >= 0; i --) this[i + arguments.length] = this[i]; for (var i = arguments.length - 1; i >= 0; i --) { this[i] = arguments[i]; n = n + 1 >>> 0 }; this.length = n; return n }; /* ##### Array.prototype.push.js ##### */ /* 2006 Ash Searle http://hexmen.com/blog/2006/12/push-and-pop/ */ if (!Array.prototype.push || [].push(0) == 0) Array.prototype.push = function() { var n = this.length >>> 0; for (var i = 0; i < arguments.length; i++) { this[n] = arguments[i]; n = n + 1 >>> 0 }; this.length = n; return n }; /* ##### Array.prototype.splice.js ##### */ /* 2006 Florian Hoech Array.prototype.splice.js adds splice method for arrays in browsers without native or incorrect implementation */ if (!Array.prototype.splice || [0].splice(0, 1) === 0) Array.prototype.splice = function(index, howMany) { /* Changes the content of an array, adding new elements while removing old elements. Returns an array containing the removed elements. If only one element is removed, an array of one element is returned. Returns undefined if no arguments are passed. */ if (arguments.length == 0) return index; if (typeof index != "number") index = 0; if (index < 0) index = Math.max(0, this.length + index); if (index > this.length) { if (arguments.length > 2) index = this.length; else return [] }; if (arguments.length < 2) howMany = this.length - index; howMany = (typeof howMany == "number") ? Math.max(0, howMany) : 0; var removedElements = this.slice(index, index + howMany); var elementsToMove = this.slice(index + howMany); this.length = index; for (var i = 2; i < arguments.length; i ++) this[this.length] = arguments[i]; for (var i = 0; i < elementsToMove.length; i ++) this[this.length] = elementsToMove[i]; return removedElements }; /* ##### Number.prototype.toFixed.js ##### */ /* 2006 Florian Hoech Number.prototype.toFixed.js */ if (!Number.prototype.toFixed) { Number.prototype.toFixed = function(ln) { if (!ln) ln = 0; var i, n = Math.pow(10, ln), n = (Math.round(this * n) / n) + ""; if (ln && (i = n.indexOf(".")) < 0) { i = n.length; n += "." }; while (n.substr(i).length < ln + 1) n += "0"; return n } }; /* ##### Array.prototype.indexOf.js ##### */ /* http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Array:indexOf Summary Returns the first index at which a given element can be found in the array, or -1 if it is not present. Method of Array Implemented in: JavaScript 1.6 (Gecko 1.8b2 and later) ECMAScript Edition: none Syntax var index = array.indexOf(searchElement[, fromIndex]); Parameters searchElement Element to locate in the array. fromIndex The index at which to begin the search. Defaults to 0, i.e. the whole array will be searched. If the index is greater than or equal to the length of the array, -1 is returned, i.e. the array will not be searched. If negative, it is taken as the offset from the end of the array. Note that even when the index is negative, the array is still searched from front to back. If the calculated index is less than 0, the whole array will be searched. Description indexOf compares searchElement to elements of the Array using strict equality (the same method used by the ===, or triple-equals, operator). Compatibility indexOf is a JavaScript extension to the ECMA-262 standard; as such it may not be present in other implementations of the standard. You can work around this by inserting the following code at the beginning of your scripts, allowing use of indexOf in ECMA-262 implementations which do not natively support it. This algorithm is exactly the one used in Firefox and SpiderMonkey. Again, note that this implementation aims for absolute compatibility with indexOf in Firefox and the SpiderMonkey JavaScript engine, including in cases where the index passed to indexOf is not an integer value. If you intend to use this in real-world applications, you may not need all of the code to calculate from. Example: Using indexOf The following example uses indexOf to locate values in an array. var array = [2, 5, 9]; var index = array.indexOf(2); // index is 0 index = array.indexOf(7); // index is -1 Example: Finding all the occurrences of an element The following example uses indexOf to find all the indices of an element in a given array, using push to add them to another array as they are found. var indices = []; var idx = array.indexOf(element) while (idx != -1) { indices.push(idx); idx = array.indexOf(element, idx + 1); } */ // NOTE: semicolons added where necessary to make compatible with JavaScript compressors if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length; var from = Number(arguments[1]) || 0; from = (from < 0) ? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (/* from in this && */ /* Not compatible with IE/Mac */ this[from] === elt) return from }; return -1 } }; /* ##### jsapi.js ##### */ /* 2006 Florian Hoech jsapi.js */ jsapi = function() { return new jsapi.jsapi(arguments); }; jsapi.constants = { OBJECTTYPES: { OBJECT: 0, ARRAY: 1, BOOLEAN: 2, DATE: 3, FUNCTION: 4, NUMBER: 5, REGEXP: 6, STRING: 7 } }; jsapi.extend = function(object, _this) { jsapi.jsapi.prototype.extend(object, _this) }; jsapi.jsapi = function() { var objectType; if (!jsapi.initialized) { for (var propertyName in jsapi.dom) if (typeof jsapi.dom[propertyName] == "function" && !jsapi.dom[propertyName]._args) jsapi.dom[propertyName]._args = [jsapi.dom.isNode]; for (var propertyName in jsapi.regexp) if (typeof jsapi.regexp[propertyName] == "function") jsapi.regexp[propertyName]._args = [function(argument) { return argument.constructor == RegExp; }]; for (var propertyName in jsapi.string) if (typeof jsapi.string[propertyName] == "function") jsapi.string[propertyName]._args = [function(argument) { return typeof argument == "string" || argument.constructor == String; }]; for (var propertyName in jsapi) jsapi.extend(jsapi[propertyName], jsapi[propertyName]); var arrayMethodNames = [ "every", "filter", "forEach", "indexOf", "join", "lastIndexOf", "map", "slice", "some", /* Mutator methods */ "pop", "push", "reverse", "shift", "sort", "splice", "unshift" ]; for (var i = 0; i < arrayMethodNames.length; i ++) { (function (arrayMethodName) { jsapi.jsapi.prototype[arrayMethodName] = function () { var result = Array.prototype[arrayMethodName].apply(this, arguments); return typeof result == "object" ? jsapi(result) : (result != null || arrayMethodName == "pop" || arrayMethodName == "shift" ? result : this); } })(arrayMethodNames[i]); }; jsapi.initialized = true; }; if (this.length == null) this.length = 0; for (var i = 0; i < arguments[0].length; i ++) { var object = arguments[0][i]; switch (typeof object) { case "function": objectType = jsapi.constants.OBJECTTYPES.FUNCTION; break; case "number": objectType = jsapi.constants.OBJECTTYPES.NUMBER; break; case "string": objectType = jsapi.constants.OBJECTTYPES.STRING; break; default: if (!object) continue; // null or undefined switch (object.constructor) { case Boolean: objectType = jsapi.constants.OBJECTTYPES.BOOLEAN; break; case Date: objectType = jsapi.constants.OBJECTTYPES.DATE; break; case Number: objectType = jsapi.constants.OBJECTTYPES.NUMBER; break; case RegExp: objectType = jsapi.constants.OBJECTTYPES.REGEXP; break; case String: objectType = jsapi.constants.OBJECTTYPES.STRING; break; default: objectType = jsapi.constants.OBJECTTYPES.OBJECT; } }; switch (objectType) { case jsapi.constants.OBJECTTYPES.STRING: var expression = object.split(":"); if (expression.length > 1) switch (expression[0]) { case "html": case "xhtml": case "xml": object = jsapi.dom.parseString(expression.slice(1).join(":")); break; case "xpath": object = jsapi.dom.getByXpath(expression.slice(1).join(":")); break; } else if (/<[^<]*>/.test(object)) object = jsapi.dom.parseString(object); default: if (object.constructor == Array) Array.prototype.push.apply(this, object); else if (typeof object == "object" && typeof object.length == "number" && object.constructor != String && object.constructor != Function) Array.prototype.push.apply(this, Array.prototype.slice.apply(object)); else this[this.length ++] = object; } }; }; jsapi.jsapi.prototype = { concat: function(object) { var result = jsapi(this); jsapi.jsapi.apply(result, [object]); return result }, extend: function(object, _this) { /* if _this evaluates to false, use the current result as "this"-object. otherwise, use _this as "this"-object and pass the current result as first argument. */ for (var propertyName in object) if (typeof object[propertyName] == "function" && propertyName != "$" && propertyName != "extend" && propertyName != "toString" && propertyName != "valueOf") { if (!this[propertyName]) { this[propertyName] = function() { if (this.length) { var _callbacks = arguments.callee._callbacks; for (var i = 0; i < this.length; i ++) { for (var n = 0; n < _callbacks.length; n ++) { var _this = _callbacks[n]._this || this[i], _arguments = _callbacks[n]._this ? [this[i]].concat(Array.prototype.slice.apply(arguments)) : arguments; if (_callbacks[n].hasValidArguments.apply(_callbacks[n], _arguments)) { this[i] = _callbacks[n].apply(_this, _arguments); } } } }; return this; }; this[propertyName]._callbacks = []; }; if (!object[propertyName].hasValidArguments) { if (object[propertyName]._args) object[propertyName].hasValidArguments = function() { for (var i = 0; i < this._args.length; i ++) { if (!(typeof this._args[i] == "string" ? typeof arguments[i] == this._args[i] : (typeof this._args[i] == "function" ? this._args[i](arguments[i]) : arguments[i] == this._args[i]))) { return false; } }; return true }; else object[propertyName].hasValidArguments = function() { return true }; }; object[propertyName]._this = _this; if (this[propertyName]._callbacks.indexOf(object[propertyName]) < 0) this[propertyName]._callbacks.push(object[propertyName]); } }, toString: function() { return Array.prototype.slice.apply(this).toString(); } }; /* ##### jsapi.array.js ##### */ /* 2006 Florian Hoech jsapi.array.js jsapi.js */ jsapi.array = { $: function(object) { // make array from object with only the numerical indices var array = [], n; if (object.length != null) for (var i = 0; i < object.length; i ++) array[i] = object[i]; else for (var i in object) if (!isNaN(n = parseInt(i)) && n == i) array[n] = object[i]; return array } }; jsapi.array.$._args = [null]; /* ##### jsapi.array.flat.js ##### */ /* 2006 Florian Hoech jsapi.array.search.js jsapi.array.js */ jsapi.array.flat = function(a) { var r = []; for (var i = 0; i < a.length; i ++) { if (a[i].constructor == Array) r = r.concat(jsapi.array.flat(a[i])); else r.push(a[i]) }; return r }; jsapi.array.flat._args = [Array]; /* ##### jsapi.dom.js ##### */ /* 2006 Florian Hoech jsapi.dom.js jsapi.js */ jsapi.dom = {}; /* ##### jsapi.dom.NODETYPES.js ##### */ /* 2006 Florian Hoech jsapi.dom.NODETYPES.js jsapi.dom.js */ jsapi.dom.NODETYPES = { "1": "ELEMENT", "2": "ATTRIBUTE", "3": "TEXT", "4": "CDATA_SECTION", "5": "ENTITY_REFERENCE", "6": "ENTITY", "7": "PROCESSING_INSTRUCTION", "8": "COMMENT", "9": "DOCUMENT", "10": "DOCUMENT_TYPE", "11": "DOCUMENT_FRAGMENT", "12": "NOTATION" }; /* ##### jsapi.dom.isNode.js ##### */ /* Florian Hoech jsapi.dom.isNode.js jsapi.dom.NODETYPES.js */ jsapi.dom.isNode = function(object) { return !!(object && jsapi.dom.NODETYPES[object.nodeType] && object.cloneNode); }; /* ##### jsapi.string.js ##### */ /* 2006 Florian Hoech jsapi.string.js jsapi.js */ jsapi.string = {}; /* ##### jsapi.string.trim.js ##### */ /* 2006 Florian Hoech jsapi.string.trim.js jsapi.string.js */ jsapi.string.trim = function(str) { return str.replace(/(^\s+|\s+$)/g, "") }; jsapi.string.trim._args = [String]; /* ##### jsapi.useragent.js ##### */ /* 2006 Florian Hoech jsapi.useragent.js jsapi.string.trim.js TO-DO: add KHTML */ jsapi.useragent = { $: function (ua) { ua = (ua || navigator.userAgent).toLowerCase(); var i, j, match, _match, replace = [ [/(\d+\.)(\d+)\.(\d+)(\.(\d+))?/g, "$1$2$3$5"], [/linux/g, ";linux;linux"], [/mac/, ";mac;mac"], [/microsoft ((p)ocket )?internet explorer/g, "ms$2ie"], [/win32/g, "windows"], [/windows (\w+)/g, "windows;windows $1"] ]; for (i = 0; i < replace.length; i ++) ua = ua.replace(replace[i][0], replace[i][1]); ua = ua.split(/[\(\)\[\]\{\}\,;]/); for (i in this) { if (typeof this[i] != "object" && typeof this[i] != "function") delete this[i] }; for (i = 0; i < ua.length; i ++) { match = ua[i].match(/[a-z\.\-_]+(\s+[a-z\.\-_]+)*\Wv?\d+(\.\d+)*/g); if (match) { for (j = 0; j < match.length; j ++) { _match = match[j].match(/([a-z\.\-_]+(\s[a-z\.\-_]+)*)\Wv?(\d+(\.\d+)*)/); if (!this[_match[1]] || (parseFloat(_match[3]) == _match[3] && this[_match[1]] < parseFloat(_match[3]))) this[_match[1]] = parseFloat(_match[3]) == _match[3] ? parseFloat(_match[3]) : _match[3] } } else { ua[i] = jsapi.string.trim(ua[i]); if (ua[i]) this[ua[i]] = true } }; if (this.konqueror && !this.khtml) this.khtml = true; if (this.safari === true) delete this.safari; // safari would have a version number here if (!this.gecko && this.mozilla) { this.compatible = this.mozilla; delete this.mozilla }; if (this.opera || this.safari || this.konqueror) { if (this.mozilla) delete this.mozilla; if (this.msie) delete this.msie }; return this } }; jsapi.useragent.toString = function() { var props = []; for (i in this) { if (typeof this[i] != "object" && typeof this[i] != "function") props.push((/\s/.test(i) ? "'" : "") + i + (/\s/.test(i) ? "'" : "") + ":" + (typeof this[i] == "string" ? '"' : "") + this[i] + (typeof this[i] == "string" ? '"' : "")) }; return props.join(", "); }; jsapi.useragent.$._args = [String]; jsapi.useragent.$(); /* ##### jsapi.util.js ##### */ /* 2006 Florian Hoech jsapi.util.js jsapi.js */ jsapi.util = {}; /* ##### jsapi.generic_accessor_mutator.js ##### */ /* Florian Hoech jsapi.generic_accessor_mutator.js jsapi.js jsapi.dom.js jsapi.dom.isNode.js jsapi.useragent.js jsapi.util.js */ jsapi.constants.ATTRIBUTE_ALIASES = { "class": "className", "for": "htmlFor", readonly: "readOnly", maxlength: "maxLength" }; jsapi._attribute = function(object, attributeName, value) { // if arguments.length == 2, get attribute. otherwise, if value == null, remove attribute, else set attribute switch (attributeName) { case "style": case "value": return arguments.length == 2 ? jsapi._property(object, attributeName) : jsapi._property(object, attributeName, value); default: if (jsapi.constants.ATTRIBUTE_ALIASES[attributeName]) return jsapi._property.apply(jsapi, arguments); else { if (arguments.length == 2) return object.getAttribute(attributeName); // get attribute if (value == null) object.removeAttribute(attributeName); // remove attribute else object.setAttribute(attributeName, value); // set attribute } }; return object }; jsapi._property = function(object, propertyName, value) { // if arguments.length == 2, get property. otherwise, if value == null, delete property, else set property switch (propertyName) { case "style": if (arguments.length == 2) return object.style.cssText; // get attribute object.style.cssText = value || ""; // set attribute break; }; if (jsapi.dom.isNode(object)) propertyName = jsapi.constants.ATTRIBUTE_ALIASES[propertyName] || propertyName; if (arguments.length == 2) return object[propertyName]; object[propertyName] = value; // set property if (value == null) try { delete object[propertyName] } catch (e) { }; // delete property return object }; jsapi.dom.attr = jsapi.dom.attribute = function (object, attribute, value) { return arguments.length == 2 && (typeof attribute != "object" || attribute.constructor == Array) ? jsapi._get(object, jsapi._attribute, attribute) : jsapi._set(object, jsapi._attribute, attribute, value); }; jsapi.util.prop = jsapi.util.property = function (object, property, value) { return arguments.length == 2 && (typeof property != "object" || property.constructor == Array) ? jsapi._get(object, jsapi._property, property) : jsapi._set(object, jsapi._property, property, value); }; jsapi._get = function (object, callback, property) { if (typeof property != "object") return callback(object, property); else { var result = []; for (var i = 0; i < property.length; i ++) result.push(callback(object, property[i])); return result; } }; jsapi._set = function (object, callback, property, value) { if (typeof property != "object") callback(object, property, value); else { if (property.constructor == Array) for (var i = 0; i < property.length; i ++) callback(object, property[i], value); else for (var propertyName in property) callback(object, propertyName, property[propertyName] != null ? property[propertyName] : value); }; return object; };; /* ##### jsapi.dom.attribute.js ##### */ /* 2006 Florian Hoech jsapi.dom.attribute.js jsapi.generic_accessor_mutator.js */ /* ##### jsapi.dom.attributeAddWord.js ##### */ /* 2006 Florian Hoech jsapi.dom.attributeAddWord.js jsapi.dom.attribute.js */ jsapi.dom.attributeAddWord = function(element, attr, word) { var value = jsapi.dom.attribute(element, attr); return jsapi.dom.attribute(element, attr, (value != null ? value + " " : "") + word) }; /* ##### jsapi.dom.attributeHasWord.js ##### */ /* 2006 Florian Hoech jsapi.dom.attributeHasWord.js jsapi.dom.attribute.js */ jsapi.dom.attributeHasWord = function(element, attr, word) { return (new RegExp("(^|\\s)" + word + "(\\s|$)")).test(jsapi.dom.attribute(element, attr)) }; /* ##### jsapi.dom.attributeRemoveWord.js ##### */ /* 2006 Florian Hoech jsapi.dom.attributeRemoveWord.js jsapi.dom.attribute.js */ jsapi.dom.attributeRemoveWord = function(element, attr, word) { var value = jsapi.dom.attribute(element, attr); if (value) jsapi.dom.attribute(element, attr, value.replace(new RegExp("(^|\\s+)" + word + "(\\s|$)"), "$2")); return element }; /* ##### jsapi.math.js ##### */ /* 2006 Florian Hoech jsapi.math.js jsapi.array.flat.js */ jsapi.math = { absmax: function(v) { var a = jsapi.array.flat(arguments), r = a[0]; for (var i = 0; i < a.length; i ++) if (Math.abs(r) < Math.abs(a[i])) r = a[i]; return r }, avg: function() { var a = jsapi.array.flat(arguments), r = 0; for (var i = 0; i < a.length; i ++) r += a[i]; return r / a.length }, cbrt: function(x) { return x >= 0 ? Math.pow (x, 1 / 3) : -Math.pow (-x, 1 / 3) }, deg: function(v) { return v * 180 / Math.PI }, longToUnsigned: function(num) { while (num < 0) num += 4294967296; return num }, max: function(v) { var a = jsapi.array.flat(arguments), r = a[0]; for (var i = 0; i < a.length; i ++) r = Math.max(r, a[i]); return r }, min: function(v) { var a = jsapi.array.flat(arguments), r = a[0]; for (var i = 0; i < a.length; i ++) r = Math.min(r, a[i]); return r }, rad: function(v) { return v / 180 * Math.PI } }; jsapi.math.absmax._args = [Number]; jsapi.math.avg._args = [Number]; jsapi.math.cbrt._args = [Number]; jsapi.math.deg._args = [Number]; jsapi.math.longToUnsigned._args = [Number]; jsapi.math.max._args = [Array]; jsapi.math.min._args = [Array]; jsapi.math.rad._args = [Number]; /* ##### jsapi.math.color.js ##### */ /* 2006 Florian Hoech jsapi.math.color.js jsapi.math.js */ jsapi.math.color = {}; /* ##### jsapi.math.color.XYZ2CorColorTemp.js ##### */ /* 2007 Florian Hoech jsapi.math.color.XYZ2CorColorTemp.js jsapi.math.color.js */ jsapi.math.color.XYZ2CorColorTemp = function(x, y, z) { // derived from ANSI C implementation by Bruce Lindbloom www.brucelindbloom.com // LERP(a,b,c) = linear interpolation macro, is 'a' when c == 0.0 and 'b' when c == 1.0 function LERP(a,b,c) { return (b - a) * c + a }; var rt = [ // reciprocal temperature (K) Number.MIN_VALUE, 10.0e-6, 20.0e-6, 30.0e-6, 40.0e-6, 50.0e-6, 60.0e-6, 70.0e-6, 80.0e-6, 90.0e-6, 100.0e-6, 125.0e-6, 150.0e-6, 175.0e-6, 200.0e-6, 225.0e-6, 250.0e-6, 275.0e-6, 300.0e-6, 325.0e-6, 350.0e-6, 375.0e-6, 400.0e-6, 425.0e-6, 450.0e-6, 475.0e-6, 500.0e-6, 525.0e-6, 550.0e-6, 575.0e-6, 600.0e-6 ]; var uvt = [ [0.18006, 0.26352, -0.24341], [0.18066, 0.26589, -0.25479], [0.18133, 0.26846, -0.26876], [0.18208, 0.27119, -0.28539], [0.18293, 0.27407, -0.30470], [0.18388, 0.27709, -0.32675], [0.18494, 0.28021, -0.35156], [0.18611, 0.28342, -0.37915], [0.18740, 0.28668, -0.40955], [0.18880, 0.28997, -0.44278], [0.19032, 0.29326, -0.47888], [0.19462, 0.30141, -0.58204], [0.19962, 0.30921, -0.70471], [0.20525, 0.31647, -0.84901], [0.21142, 0.32312, -1.0182], [0.21807, 0.32909, -1.2168], [0.22511, 0.33439, -1.4512], [0.23247, 0.33904, -1.7298], [0.24010, 0.34308, -2.0637], [0.24792, 0.34655, -2.4681], // Note: 0.24792 is a corrected value for the error found in W&S as 0.24702 [0.25591, 0.34951, -2.9641], [0.26400, 0.35200, -3.5814], [0.27218, 0.35407, -4.3633], [0.28039, 0.35577, -5.3762], [0.28863, 0.35714, -6.7262], [0.29685, 0.35823, -8.5955], [0.30505, 0.35907, -11.324], [0.31320, 0.35968, -15.628], [0.32129, 0.36011, -23.325], [0.32931, 0.36038, -40.770], [0.33724, 0.36051, -116.45] ]; var us, vs, p, di, dm, i; if ((x < 1e-20) && (y < 1e-20) && (z < 1e-20)) return -1; // protect against possible divide-by-zero failure us = (4 * x) / (x + 15 * y + 3 * z); vs = (6 * y) / (x + 15 * y + 3 * z); dm = 0; for (i = 0; i < 31; i++) { di = (vs - uvt[i][1]) - uvt[i][2] * (us - uvt[i][0]); if ((i > 0) && (((di < 0) && (dm >= 0)) || ((di >= 0) && (dm < 0)))) break; // found lines bounding (us, vs) : i-1 and i dm = di }; if (i == 31) return -1; // bad XYZ input, color temp would be less than minimum of 1666.7 degrees, or too far towards blue di = di / Math.sqrt(1 + uvt[i ][2] * uvt[i ][2]); dm = dm / Math.sqrt(1 + uvt[i - 1][2] * uvt[i - 1][2]); p = dm / (dm - di); // p = interpolation parameter, 0.0 : i-1, 1.0 : i return 1 / (LERP(rt[i - 1], rt[i], p)); }; /* ##### jsapi.math.color.delta.js ##### */ /* 2007 Florian Hoech jsapi.math.color.delta.js jsapi.math.color.js */ jsapi.math.color.delta = function (L1, a1, b1, L2, a2, b2, method, p1, p2, p3, debug) { /* CIE 1994 & CMC calculation code derived from formulas on www.brucelindbloom.com CIE 1994 code uses some alterations seen on www.farbmetrik-gall.de/cielab/korrcielab/cie94.html (see notes in code below) CIE 2000 calculation code derived from Excel spreadsheet available at www.ece.rochester.edu/~gsharma/ciede2000 method: either "CIE94", "CMC", "CIE2K" or "CIE76" (default if method is not set) p1, p2, p3 arguments have different meaning for each calculation method: CIE 1994: if p1 is not null, calculation will be adjusted for textiles, otherwise graphics arts (default if p1 is not set) CMC(l:c): p1 equals l (lightness) weighting factor and p2 equals c (chroma) weighting factor. commonly used values are CMC(1:1) for perceptability (default if p1 and p2 are not set) and CMC(2:1) for acceptability CIE 2000: p1 becomes kL (lightness) weighting factor, p2 becomes kC (chroma) weighting factor and p3 becomes kH (hue) weighting factor (all three default to 1 if not set) */ for (var i = 0; i < 6; i ++) if (typeof arguments[i] != "number" || isNaN(arguments[i])) return NaN; if (typeof method == "string") method = method.toLowerCase(); switch (method) { case "94": case "1994": case "cie94": case "cie1994": var textiles = p1, dL = L1 - L2, C1 = Math.sqrt(Math.pow(a1, 2) + Math.pow(b1, 2)), C2 = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2)), dC = C1 - C2, dH2 = Math.pow(a1 - a2, 2) + Math.pow(b1 - b2, 2) - Math.pow(dC, 2), dH = dH2 > 0 ? Math.sqrt(dH2) : 0, SL = 1, K1 = textiles ? 0.048 : 0.045, K2 = textiles ? 0.014 : 0.015, C_ = (Math.sqrt((1 + (K1 * C1)) * (1 + (K1 * C2))) - 1) / K1, // www.farbmetrik-gall.de/cielab/korrcielab/cie94.html SC = 1 + K1 * C_, // brucelindbloom.com formula originally used C1 instead of C_, but the results are different from ProfileMaker/MeasureTool implementation, so use this instead (found on www.farbmetrik-gall.de/cielab/korrcielab/cie94.html) SH = 1 + K2 * C_, // brucelindbloom.com formula originally used C1 instead of C_, but the results are different from ProfileMaker/MeasureTool implementation, so use this instead (found on www.farbmetrik-gall.de/cielab/korrcielab/cie94.html) KL = textiles ? 2 : 1, KC = 1, KH = 1, dE = Math.sqrt(Math.pow(dL / (KL * SL), 2) + Math.pow(dC / (KC * SC), 2) + Math.pow(dH / (KH * SH), 2)); break; case "cmc(2:1)": case "cmc21": p1 = 2; case "cmc(1:1)": case "cmc11": case "cmc": var l = typeof p1 == "number" ? p1 : 1, c = typeof p2 == "number" ? p2 : 1; dL = L1 - L2, C1 = Math.sqrt(Math.pow(a1, 2) + Math.pow(b1, 2)), C2 = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2)), dC = C1 - C2, dH2 = Math.pow(a1 - a2, 2) + Math.pow(b1 - b2, 2) - Math.pow(dC, 2), dH = dH2 > 0 ? Math.sqrt(dH2) : 0, SL = L1 < 16 ? 0.511 : (0.040975 * L1) / (1 + 0.01765 * L1), SC = (0.0638 * C1) / (1 + 0.0131 * C1) + 0.638, F = Math.sqrt(Math.pow(C1, 4) / (Math.pow(C1, 4) + 1900)), H1 = jsapi.math.deg(Math.atan2(b1, a1)) + (b1 >= 0 ? 0 : 360), T = 164 <= H1 && H1 <= 345 ? 0.56 + Math.abs(0.2 * Math.cos(jsapi.math.rad(H1 + 168))) : 0.36 + Math.abs(0.4 * Math.cos(jsapi.math.rad(H1 + 35))), SH = SC * (F * T + 1 - F), dE = Math.sqrt(Math.pow(dL / (l * SL), 2) + Math.pow(dC / (c * SC), 2) + Math.pow(dH / SH, 2)); break; case "00": case "2k": case "2000": case "cie00": case "cie2k": case "cie2000": var pow25_7 = Math.pow(25, 7), k_L = typeof p1 == "number" ? p1 : 1, k_C = typeof p2 == "number" ? p2 : 1, k_H = typeof p3 == "number" ? p3 : 1, C1 = Math.sqrt(Math.pow(a1, 2) + Math.pow(b1, 2)), C2 = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2)) , C_avg = jsapi.math.avg(C1, C2), G = .5 * (1 - Math.sqrt(Math.pow(C_avg, 7) / (Math.pow(C_avg, 7) + pow25_7))), L1_ = L1, a1_ = (1 + G) * a1, b1_ = b1, L2_ = L2, a2_ = (1 + G) * a2, b2_ = b2, C1_ = Math.sqrt(Math.pow(a1_, 2) + Math.pow(b1_, 2)), C2_ = Math.sqrt(Math.pow(a2_, 2) + Math.pow(b2_, 2)), h1_ = a1_ == 0 && b1_ == 0 ? 0 : jsapi.math.deg(Math.atan2(b1_, a1_)) + (b1_ >= 0 ? 0 : 360), h2_ = a2_ == 0 && b2_ == 0 ? 0 : jsapi.math.deg(Math.atan2(b2_, a2_)) + (b2_ >= 0 ? 0 : 360), dh_cond = h2_ - h1_ > 180 ? 1 : (h2_ - h1_ < -180 ? 2 : 0), dh_ = dh_cond == 0 ? h2_ - h1_ : (dh_cond == 1 ? h2_ - h1_ - 360 : h2_ + 360 - h1_), dL_ = L2_ - L1_, dL = dL_, dC_ = C2_ - C1_, dC = dC_, dH_ = 2 * Math.sqrt(C1_ * C2_) * Math.sin(jsapi.math.rad(dh_ / 2)), dH = dH_, L__avg = jsapi.math.avg(L1_, L2_), C__avg = jsapi.math.avg(C1_, C2_), h__avg_cond = C1_ * C2_ == 0 ? 3 : (Math.abs(h2_ - h1_) <= 180 ? 0 : (h2_ + h1_ < 360 ? 1 : 2)), h__avg = h__avg_cond == 3 ? h1_ + h2_ : (h__avg_cond == 0 ? jsapi.math.avg(h1_, h2_) : (h__avg_cond == 1 ? jsapi.math.avg(h1_, h2_) + 180 : jsapi.math.avg(h1_, h2_) - 180)), AB = Math.pow(L__avg - 50, 2), // (L'_ave-50)^2 S_L = 1 + .015 * AB / Math.sqrt(20 + AB), S_C = 1 + .045 * C__avg, T = 1 - .17 * Math.cos(jsapi.math.rad(h__avg - 30)) + .24 * Math.cos(jsapi.math.rad(2 * h__avg)) + .32 * Math.cos(jsapi.math.rad(3 * h__avg + 6)) - .2 * Math.cos(jsapi.math.rad(4 * h__avg - 63)), S_H = 1 + .015 * C__avg * T, dTheta = 30 * Math.exp(-1 * Math.pow((h__avg - 275) / 25, 2)), R_C = 2 * Math.sqrt(Math.pow(C__avg, 7) / (Math.pow(C__avg, 7) + pow25_7)), R_T = -Math.sin(jsapi.math.rad(2 * dTheta)) * R_C, AJ = dL_ / S_L / k_L, // dL' / k_L / S_L AK = dC_ / S_C / k_C, // dC' / k_C / S_C AL = dH_ / S_H / k_H, // dH' / k_H / S_H dE = Math.sqrt(Math.pow(AJ, 2) + Math.pow(AK, 2) + Math.pow(AL, 2) + R_T * AK * AL); if (debug) { r = (C1 + "|" + C2 + "|" + C_avg + "|" + G + "|" + L1_ + "|" + a1_ + "|" + b1_ + "|" + L2_ + "|" + a2_ + "|" + b2_ + "|" + C1_ + "|" + C2_ + "|" + h1_ + "|" + h2_ + "|" + dh_ + "|" + dL_ + "|" + dC_ + "|" + dH_ + "|" + L__avg + "|" + C__avg + "|" + h__avg + "|" + AB + "|" + S_L + "|" + S_C + "|" + T + "|" + S_H + "|" + dTheta + "|" + R_C + "|" + R_T + "|" + AJ + "|" + AK + "|" + AL + "|" + dE + "|" + dh_cond + "|" + h__avg_cond).split("|"); alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; t = []; n = alpha.indexOf("G"); for (i = 0; i < r.length; i ++) { a = i + n < alpha.length ? alpha[i + n] : "A" + alpha[i + n - alpha.length]; t.push(a + ": " + r[i]); } return t.join("\n"); }; break; default: var dL = L1 - L2, C1 = Math.sqrt(Math.pow(a1, 2) + Math.pow(b1, 2)), C2 = Math.sqrt(Math.pow(a2, 2) + Math.pow(b2, 2)), dC = C1 - C2, dH2 = Math.pow(a1 - a2, 2) + Math.pow(b1 - b2, 2) - Math.pow(dC, 2), dH = dH2 > 0 ? Math.sqrt(dH2) : 0, dE = Math.sqrt(Math.pow(dL, 2) + Math.pow(a1 - a2, 2) + Math.pow(b1 - b2, 2)); if (isNaN(dH)) { if (window.location.href.indexOf("?debug")>-1) alert('a1: ' + a1 + '\na2: ' + a2 + '\nMath.pow(a1 - a2, 2): ' + Math.pow(a1 - a2, 2) + '\nb1: ' + b1 + '\nb2: ' + b2 + '\nMath.pow(b1 - b2, 2): ' + Math.pow(b1 - b2, 2) + '\ndC: ' + dC + '\nMath.pow(dC, 2): ' + Math.pow(dC, 2) + '\nMath.pow(a1 - a2, 2) + Math.pow(b1 - b2, 2) - Math.pow(dC, 2): ' + (Math.pow(a1 - a2, 2) + Math.pow(b1 - b2, 2) - Math.pow(dC, 2))); } }; return { E: dE, L: dL, C: dC, H: dH, a: a1 - a2, b: b1 - b2 }; }; dispcalGUI-1.7.1.6/dispcalGUI/report/jsapi-patches.js000644 000765 000000 00000043201 12261120515 022201 0ustar00svpwheel000000 000000 function sortNumber(a, b) { return a - b; }; jsapi.array.flat = function(a) { var r = []; for (var i = 0; i < a.length; i ++) { if (a[i] != null && a[i].constructor == Array) r = r.concat(jsapi.array.flat(a[i])); else r.push(a[i]) }; return r }; jsapi.array.flat._args = [Array]; jsapi.math.median = function () { // http://en.wikipedia.org/wiki/Median var a = jsapi.array.flat(arguments), median, sorted = a.sort(sortNumber); if (sorted.length % 2 == 0) median = (sorted[sorted.length / 2] + sorted[sorted.length / 2 + 1]) / 2; else median = sorted[(sorted.length + 1) / 2]; return median }; jsapi.math.mad = function () { // http://en.wikipedia.org/wiki/Median_absolute_deviation var a = jsapi.array.flat(arguments), median = jsapi.math.median(a), sorted = a.sort(sortNumber); for (var i = 0; i < sorted.length; i++) sorted[i] = Math.abs(sorted[i] - median); return jsapi.math.median(sorted); }; jsapi.math.stddev = function () { // http://en.wikipedia.org/wiki/Standard_deviation // http://jsfromhell.com/array/average return Math.sqrt(jsapi.math.variance(jsapi.array.flat(arguments))); }; jsapi.math.variance = function () { // http://jsfromhell.com/array/average var a = jsapi.array.flat(arguments); for (var m, s = 0, l = a.length; l--; s += a[l]); for (m = s / a.length, l = a.length, s = 0; l--; s += Math.pow(a[l] - m, 2)); return s / a.length; }; jsapi.math.color.adapt = function (XS, YS, ZS, whitepoint_source, whitepoint_destination, MA) { // chromatic adaption // based on formula http://brucelindbloom.com/Eqn_ChromAdapt.html // MA = adaption matrix or predefined choice ('CAT02', 'Bradford', 'HPE D65', 'XYZ scaling'), // defaults to 'Bradford' if (!MA) MA = 'Bradford'; if (typeof MA == 'string') { switch (MA) { case 'XYZ scaling': MA = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]; break; case 'HPE D65': MA = [[ 0.40024, 0.70760, -0.08081], [-0.22630, 1.16532, 0.04570], [ 0.00000, 0.00000, 0.91822]]; break; case 'CAT02': MA = [[ 0.7328, 0.4296, -0.1624], [-0.7036, 1.6975, 0.0061], [ 0.0030, 0.0136, 0.9834]]; break; case 'Bradford': default: MA = [[ 0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [ 0.0389, -0.0685, 1.0296]]; } }; if (MA.constructor != jsapi.math.Matrix3x3) MA = new jsapi.math.Matrix3x3(MA); var XYZWS = jsapi.math.color.get_whitepoint(whitepoint_source), pybs = MA.multiply(XYZWS), XYZWD = jsapi.math.color.get_whitepoint(whitepoint_destination), pybd = MA.multiply(XYZWD); return MA.invert().multiply([[pybd[0]/pybs[0], 0, 0], [0, pybd[1]/pybs[1], 0], [0, 0, pybd[2]/pybs[2]]]).multiply(MA).multiply([XS, YS, ZS]); }; jsapi.math.color.Lab2RGB = function (L, a, b, whitepoint, scale, round_) { var XYZ = jsapi.math.color.Lab2XYZ(L, a, b, whitepoint || "D50"); return jsapi.math.color.XYZ2RGB(XYZ[0], XYZ[1], XYZ[2], whitepoint || "D50", scale, round_) }; jsapi.math.color.Lab2XYZ = function(L, a, b, whitepoint, scale) { // based on http://www.easyrgb.com/math.php?MATH=M8 // whitepoint can be a color temperature in Kelvin or an array containing XYZ values if (!scale) scale = 1.0; var Y = ( L + 16 ) / 116, X = a / 500 + Y, Z = Y - b / 200; // Bruce Lindbloom's fix for the discontinuity of the CIE L* function // (http://brucelindbloom.com/LContinuity.html) var E = 216 / 24389, // Intent of CIE standard, actual CIE standard = 0.008856 K = 24389 / 27; // Intent of CIE standard, actual CIE standard = 903.3 // K / 116 is used instead of 7.787 if ( Math.pow(Y, 3) > E ) Y = Math.pow(Y, 3); else Y = ( Y - 16 / 116 ) / (K / 116); if ( Math.pow(X, 3) > E ) X = Math.pow(X, 3); else X = ( X - 16 / 116 ) / (K / 116); if ( Math.pow(Z, 3) > E ) Z = Math.pow(Z, 3); else Z = ( Z - 16 / 116 ) / (K / 116); var ref_XYZ = jsapi.math.color.get_whitepoint(whitepoint, scale); X *= ref_XYZ[0]; Y *= ref_XYZ[1]; Z *= ref_XYZ[2]; return [X, Y, Z] }; jsapi.math.color.XYZ2RGB = function (X, Y, Z, whitepoint, scale, round_) { if (!scale) scale = 1.0; var RGB = jsapi.math.color.xyz_to_rgb_matrix(0.6400, 0.3300, 0.3000, 0.6000, 0.1500, 0.0600, whitepoint || "D65", 1.0).multiply([X, Y, Z]); // sRGB for (var i = 0; i < 3; i ++) { if (RGB[i] > 0.0031308) { RGB[i] = 1.055 * Math.pow(RGB[i], 1 / 2.4) - 0.055; } else { RGB[i] *= 12.92; } RGB[i] = Math.min(1.0, Math.max(0, RGB[i])) * scale; if (round_) RGB[i] = Math.round(RGB[i]); } return RGB; }; jsapi.math.color.CIEDCorColorTemp2XYZ = function(T, scale) { var xyY = jsapi.math.color.CIEDCorColorTemp2xyY(T, scale); return jsapi.math.color.xyY2XYZ(xyY[0], xyY[1], xyY[2]); }; jsapi.math.color.CIEDCorColorTemp2xyY = function(T, scale) { // Based on formula from http://brucelindbloom.com/Eqn_T_to_xy.html if (!scale) scale = 1.0; if (typeof T == "string") { // Assume standard illuminant, e.g. "D50" var illuminant = jsapi.math.color.get_standard_illuminant(T, null, scale); return jsapi.math.color.XYZ2xyY(illuminant[0], illuminant[1], illuminant[2]); } var xD = 4000 <= T && T <= 7000 ? ((-4.607 * Math.pow(10, 9)) / Math.pow(T, 3)) + ((2.9678 * Math.pow(10, 6)) / Math.pow(T, 2)) + ((0.09911 * Math.pow(10, 3)) / T) + 0.244063 : (7000 < T && T <= 25000 ? ((-2.0064 * Math.pow(10, 9)) / Math.pow(T, 3)) + ((1.9018 * Math.pow(10, 6)) / Math.pow(T, 2)) + ((0.24748 * Math.pow(10, 3)) / T) + 0.237040 : null), yD = xD != null ? -3 * Math.pow(xD, 2) + 2.87 * xD - 0.275 : null; return xD == null ? null : [xD, yD, scale]; }; jsapi.math.color.CMYK2RGB = function(C, M, Y, K, scale, round_) { // http://www.easyrgb.com/math.php?MATH=M14 if (!scale) scale = 1.0; C = ( C * ( 1 - K ) + K ); M = ( M * ( 1 - K ) + K ); Y = ( Y * ( 1 - K ) + K ); // http://www.easyrgb.com/math.php?MATH=M12 var R, G, B; R = ( 1 - C ) * scale; G = ( 1 - M ) * scale; B = ( 1 - Y ) * scale; if (round_) { R = Math.round(R); G = Math.round(G); B = Math.round(B); } return [R, G, B]; }; jsapi.math.color.XYZ2Lab = function(X, Y, Z, whitepoint) { /* Convert from XYZ to Lab. The input Y value needs to be in the nominal range [0.0, 100.0] and other input values scaled accordingly. The output L value is in the nominal range [0.0, 100.0]. whitepoint can be string (e.g. "D50"), list/tuple of XYZ coordinates or color temperature as float or int. Defaults to D50 if not set. Based on formula from http://brucelindbloom.com/Eqn_XYZ_to_Lab.html */ whitepoint = jsapi.math.color.get_whitepoint(whitepoint, 100); var E = 216 / 24389, // Intent of CIE standard, actual CIE standard = 0.008856 K = 24389 / 27, // Intent of CIE standard, actual CIE standard = 903.3 xr = X / whitepoint[0], yr = Y / whitepoint[1], zr = Z / whitepoint[2], fx = xr > E ? jsapi.math.cbrt(xr) : (K * xr + 16) / 116, fy = yr > E ? jsapi.math.cbrt(yr) : (K * yr + 16) / 116, fz = zr > E ? jsapi.math.cbrt(zr) : (K * zr + 16) / 116, L = 116 * fy - 16, a = 500 * (fx - fy), b = 200 * (fy - fz); return [L, a, b]; }; jsapi.math.color.XYZ2Lu_v_ = function(X, Y, Z, whitepoint) { /* Convert from XYZ to CIE Lu'v' */ if (X + Y + Z == 0) { // We can't check for X == Y == Z == 0 because they may actually add up // to 0, thus resulting in ZeroDivisionError later var XYZ = jsapi.math.color.get_whitepoint(whitepoint), Lu_v_ = jsapi.math.color.XYZ2Lu_v_(XYZ[0], XYZ[1], XYZ[2]); return [0, Lu_v_[1], Lu_v_[2]]; } var XYZr = jsapi.math.color.get_whitepoint(whitepoint, 100), yr = Y / XYZr[1], L = yr > 216 / 24389 ? 116 * jsapi.math.cbrt(yr) - 16 : 24389 / 27 * yr, u_ = (4 * X) / (X + 15 * Y + 3 * Z), v_ = (9 * Y) / (X + 15 * Y + 3 * Z); return [L, u_, v_]; }; jsapi.math.color.xyY2XYZ = function(x, y, Y) { /* Convert from xyY to XYZ. Based on formula from http://brucelindbloom.com/Eqn_xyY_to_XYZ.html Implementation Notes: 1. Watch out for the case where y = 0. In that case, X = Y = Z = 0 is returned. 2. The output XYZ values are in the nominal range [0.0, Y[xyY]]. */ if (y == 0) return [0, 0, 0]; if (Y == null) Y = 1.0; var X = (x * Y) / y, Z = (1 - x - y) * Y / y; return [X, Y, Z]; }; jsapi.math.color.XYZ2xyY = function (X, Y, Z, whitepoint) { /* Convert from XYZ to xyY. Based on formula from http://brucelindbloom.com/Eqn_XYZ_to_xyY.html Implementation Notes: 1. Watch out for black, where X = Y = Z = 0. In that case, x and y are set to the chromaticity coordinates of the reference whitepoint. 2. The output Y value is in the nominal range [0.0, Y[XYZ]]. */ if (X == Y && Y == Z && Z == 0) { whitepoint = jsapi.math.color.get_whitepoint(whitepoint); var xyY = jsapi.math.color.XYZ2xyY(whitepoint[0], whitepoint[1], whitepoint[2]); return [xyY[0], xyY[1], 0.0]; } var x = X / (X + Y + Z), y = Y / (X + Y + Z); return [x, y, Y]; }; jsapi.math.color.planckianCT2XYZ = function(T) { var xyY = jsapi.math.color.planckianCT2xyY(T); return jsapi.math.color.xyY2XYZ(xyY[0], xyY[1], xyY[2]); }; jsapi.math.color.planckianCT2xyY = function (T) { /* Convert from planckian temperature to xyY. T = temperature in Kelvin. Formula from http://en.wikipedia.org/wiki/Planckian_locus */ var x, y; if (1667 <= T && T <= 4000) x = ( -0.2661239 * (Math.pow(10, 9) / Math.pow(T, 3)) - 0.2343580 * (Math.pow(10, 6) / Math.pow(T, 2)) + 0.8776956 * (Math.pow(10, 3) / T) + 0.179910); else if (4000 <= T && T <= 25000) x = ( -3.0258469 * (Math.pow(10, 9) / Math.pow(T, 3)) + 2.1070379 * (Math.pow(10, 6) / Math.pow(T, 2)) + 0.2226347 * (Math.pow(10, 3) / T) + 0.24039); else return null; if (1667 <= T && T <= 2222) y = ( -1.1063814 * Math.pow(x, 3) - 1.34811020 * Math.pow(x, 2) + 2.18555832 * x - 0.20219683); else if (2222 <= T && T <= 4000) y = ( -0.9549476 * Math.pow(x, 3) - 1.37418593 * Math.pow(x, 2) + 2.09137015 * x - 0.16748867); else if (4000 <= T && T <= 25000) y = ( 3.0817580 * Math.pow(x, 3) - 5.87338670 * Math.pow(x, 2) + 3.75112997 * x - 0.37001483); return [x, y, 1.0] }; jsapi.math.color.xyz_to_rgb_matrix = function (xr, yr, xg, yg, xb, yb, whitepoint, scale) { // Create and return an XYZ to RGB matrix if (!scale) scale = 1.0; var cachehash = [xr, yr, xg, yg, xb, yb, whitepoint, scale].join(","), cache = jsapi.math.color.xyz_to_rgb_matrix.cache[cachehash]; if (cache) return cache; whitepoint = jsapi.math.color.get_whitepoint(whitepoint, scale); var XYZr = jsapi.math.color.xyY2XYZ(xr, yr, scale), XYZg = jsapi.math.color.xyY2XYZ(xg, yg, scale), XYZb = jsapi.math.color.xyY2XYZ(xb, yb, scale), SrSgSb = new jsapi.math.Matrix3x3([[XYZr[0], XYZg[0], XYZb[0]], [XYZr[1], XYZg[1], XYZb[1]], [XYZr[2], XYZg[2], XYZb[2]]]).invert().multiply(whitepoint); return jsapi.math.color.xyz_to_rgb_matrix.cache[cachehash] = new jsapi.math.Matrix3x3([[SrSgSb[0] * XYZr[0], SrSgSb[1] * XYZg[0], SrSgSb[2] * XYZb[0]], [SrSgSb[0] * XYZr[1], SrSgSb[1] * XYZg[1], SrSgSb[2] * XYZb[1]], [SrSgSb[0] * XYZr[2], SrSgSb[1] * XYZg[2], SrSgSb[2] * XYZb[2]]]).invert(); }; jsapi.math.color.xyz_to_rgb_matrix.cache = {}; jsapi.math.color.standard_illuminants = { // 1st level is the standard name => illuminant definitions // 2nd level is the illuminant name => CIE XYZ coordinates // (Y should always assumed to be 1.0 and is not explicitly defined) "None": {"E": {"X": 1.00000, "Z": 1.00000}}, "ASTM E308-01": {"A": {"X": 1.09850, "Z": 0.35585}, "C": {"X": 0.98074, "Z": 1.18232}, "D50": {"X": 0.96422, "Z": 0.82521}, "D55": {"X": 0.95682, "Z": 0.92149}, "D65": {"X": 0.95047, "Z": 1.08883}, "D75": {"X": 0.94972, "Z": 1.22638}, "F2": {"X": 0.99186, "Z": 0.67393}, "F7": {"X": 0.95041, "Z": 1.08747}, "F11": {"X": 1.00962, "Z": 0.64350}}, "ICC": {"D50": {"X": 0.9642, "Z": 0.8249}, "D65": {"X": 0.9505, "Z": 1.0890}}, "Wyszecki & Stiles": {"A": {"X": 1.09828, "Z": 0.35547}, "B": {"X": 0.99072, "Z": 0.85223}, "C": {"X": 0.98041, "Z": 1.18103}, "D55": {"X": 0.95642, "Z": 0.92085}, "D65": {"X": 0.95017, "Z": 1.08813}, "D75": {"X": 0.94939, "Z": 1.22558}} }; jsapi.math.color.get_standard_illuminant = function (illuminant_name, priority, scale) { if (!priority) priority = ["ICC", "ASTM E308-01", "Wyszecki & Stiles", "None"]; if (!scale) scale = 1.0; var cachehash = [illuminant_name, priority, scale].join(","), cache = jsapi.math.color.get_standard_illuminant.cache[cachehash]; if (cache) return cache; var illuminant = null; for (var i = 0; i < priority.length; i ++) { if (!jsapi.math.color.standard_illuminants[priority[i]]) throw 'Unrecognized standard "' + priority[i] + '"'; illuminant = jsapi.math.color.standard_illuminants[priority[i]][illuminant_name.toUpperCase()]; if (illuminant) return jsapi.math.color.get_standard_illuminant.cache[cachehash] = [illuminant["X"] * scale, 1.0 * scale, illuminant["Z"] * scale]; } throw 'Unrecognized illuminant "' + illuminant_name + '"'; }; jsapi.math.color.get_standard_illuminant.cache = {}; jsapi.math.color.get_whitepoint = function (whitepoint, scale) { // Return a whitepoint as XYZ coordinates if (whitepoint && whitepoint.constructor == Array) return whitepoint; if (!scale) scale = 1.0; if (!whitepoint) whitepoint = "D50"; var cachehash = [whitepoint, scale].join(","), cache = jsapi.math.color.get_whitepoint.cache[cachehash]; if (cache) return cache; if (typeof whitepoint == "string") whitepoint = jsapi.math.color.get_standard_illuminant(whitepoint); else if (typeof whitepoint == "number") whitepoint = jsapi.math.color.CIEDCorColorTemp2XYZ(whitepoint); if (scale > 1.0 && whitepoint[1] == 100) scale = 1.0; if (whitepoint[1] * scale > 100) throw "Y value out of range after scaling: " + (whitepoint[1] * scale); return jsapi.math.color.get_whitepoint.cache[cachehash] = [whitepoint[0] * scale, whitepoint[1] * scale, whitepoint[2] * scale]; }; jsapi.math.color.get_whitepoint.cache = {}; jsapi.math.Matrix3x3 = function (matrix) { if (matrix.length != 3) throw 'Invalid number of rows for 3x3 matrix: ' + matrix.length; for (var i=0; i 0) str += ', '; str += '[' + this[i].join(', ') + ']'; }; return str + ']'; } }; dispcalGUI-1.7.1.6/dispcalGUI/report/print.css000644 000765 000000 00000000772 12261120515 020764 0ustar00svpwheel000000 000000 #F_data, .options, .functions { display: none; } body { background: white; font-size: .75em; padding: 1em; } h1 { background: #333333; border-radius: 1.1em; -moz-border-radius: 1.1em; -webkit-border-radius: 1.1em; color: white; display: block; font-size: 1em; font-weight: normal; margin: 0 auto .5em; padding: .5em .9em; width: 19em; } h2 { font-weight: lighter; font-size: 2em; } p { line-height: 1.5em; } .graph th, .graph tr.x td { background: #fff; } .collapsed { display: none; } dispcalGUI-1.7.1.6/dispcalGUI/report/report.html000644 000765 000000 00000011614 12261120515 021314 0ustar00svpwheel000000 000000 Measurement Report ${REPORT_VERSION} — ${DISPLAY} — ${DATETIME}

Measurement Report ${REPORT_VERSION}

${DISPLAY} — ${DATETIME}





dispcalGUI-1.7.1.6/dispcalGUI/report/uniformity.functions.js000644 000765 000000 00000013677 12112730202 023673 0ustar00svpwheel000000 000000 // Number methods p=Number.prototype; p.accuracy = function(ln) { var n = Math.pow(10, ln || 0); return Math.round(this * n) / n }; p.fill=function(ipart, fpart) { var i, v=(fpart!=null?this.toFixed(fpart):this+""); if ((i = v.indexOf(".")) > -1) ipart+=v.substr(i).length; while (v.length Ymax) Ymax = results[i][j]['XYZ'][1]; } } var scale = 100 / Ymax; for (var i = 0; i < rows * cols; i ++) { for (var j = 0; j < results[i].length; j ++) { var XYZ = results[i][j]['XYZ'], XYZ_scaled = [scale * XYZ[0], scale * XYZ[1], scale * XYZ[2]]; results[i][j]['XYZ_scaled'] = XYZ_scaled; results[i][j]['Lab'] = jsapi.math.color.XYZ2Lab(XYZ[0], XYZ[1], XYZ[2]); results[i][j]['Lab_scaled'] = jsapi.math.color.XYZ2Lab(XYZ_scaled[0], XYZ_scaled[1], XYZ_scaled[2]); results[i][j]['CCT'] = jsapi.math.color.XYZ2CorColorTemp(XYZ[0], XYZ[1], XYZ[2]); } } for (var i = 0; i < rows * cols; i ++) { var cellcontent = [], Y_diff = [], Y_diff_percent = [], rgb, delta_C = [], CCT = [], CCT_diff = [], CCT_diff_percent = [], CT = [], CT_diff = [], CT_diff_percent = []; for (var j = 0; j < results[i].length; j ++) { var line = '' + (100 - j * 25) + '% RGB: Y = ' + results[i][j]['XYZ'][1].accuracy(2) + ' cd/m²', rLab = reference[j]['Lab_scaled'], Lab = results[i][j]['Lab_scaled']; CCT.push(results[i][j]['CCT']); CT.push(results[i][j]['C' + locus.substr(0, 1) + 'T']); if (results[i] == reference) { line += ' (' + (reference[j]['XYZ'][1] / reference[0]['XYZ'][1] * 100).accuracy(2) + '%)' + /*', D50 L*a*b* = ' + results[i][j]['Lab_scaled'][0].accuracy(2) + ' ' + results[i][j]['Lab_scaled'][1].accuracy(2) + ' ' + results[i][j]['Lab_scaled'][2].accuracy(2) +*/ '\n
CCT ' + Math.round(CCT[j]) + 'K, C' + locus.substr(0, 1) + 'T ' + Math.round(CT[j]) + 'K'; } else { var delta = jsapi.math.color.delta(rLab[0], rLab[1], rLab[2], Lab[0], Lab[1], Lab[2], "2k"); delta_C.push(delta["C"]); CCT_diff.push(-(reference[j]['CCT'] - results[i][j]['CCT'])); CCT_diff_percent.push(100.0 / reference[j]['CCT'] * CCT_diff[j]); CT_diff.push(-(reference[j]['C' + locus.substr(0, 1) + 'T'] - CT[j])); CT_diff_percent.push(100.0 / reference[j]['C' + locus.substr(0, 1) + 'T'] * CT_diff[j]); Y_diff.push(-(reference[j]['XYZ'][1] - results[i][j]['XYZ'][1])); Y_diff_percent.push(100.0 / reference[0]['XYZ'][1] * Y_diff[j]); line += ' (' + (Y_diff_percent[j] > 0 ? '+' : '') + Y_diff_percent[j].accuracy(2) + '%), ' + delta_C[j].accuracy(2) + ' ΔC*00
\nCCT ' + Math.round(CCT[j]) + 'K (' + (CCT_diff_percent[j] > 0 ? '+' : '') + CCT_diff_percent[j].accuracy(2) + '%), C' + locus.substr(0, 1) + 'T ' + Math.round(CT[j]) + 'K (' + (CT_diff_percent[j] > 0 ? '+' : '') + CT_diff_percent[j].accuracy(2) + '%)'; } if (j == selected_index) { rgb = jsapi.math.color.Lab2RGB(Lab[0], Lab[1] - rLab[1], Lab[2] - rLab[2], 'D50', 255, true); if (results[i] == reference && rgb[0] < 128 && rgb[1] < 128 && rgb[2] < 128) document.getElementsByTagName('body')[0].style.color = '#fff'; else document.getElementsByTagName('body')[0].style.color = '#000'; } cellcontent.push(line); } cellcontent.push(''); cellcontent.push('Average:'); if (results[i] == reference) { line = 'CCT ' + Math.round(jsapi.math.avg(CCT)) + 'K, C' + locus.substr(0, 1) + 'T ' + Math.round(jsapi.math.avg(CT)) + 'K'; } else { line = jsapi.math.avg(Y_diff).accuracy(2) + ' ΔY (' + (jsapi.math.avg(Y_diff_percent) > 0 ? '+' : '') + jsapi.math.avg(Y_diff_percent).accuracy(2) + '%), ' + jsapi.math.avg(delta_C).accuracy(2) + ' ΔC*00
\nCCT ' + Math.round(jsapi.math.avg(CCT)) + 'K (' + (jsapi.math.avg(CCT_diff_percent) > 0 ? '+' : '') + jsapi.math.avg(CCT_diff_percent).accuracy(2) + '%), C' + locus.substr(0, 1) + 'T ' + Math.round(jsapi.math.avg(CT)) + 'K (' + (jsapi.math.avg(CT_diff_percent) > 0 ? '+' : '') + jsapi.math.avg(CT_diff_percent).accuracy(2) + '%)'; } cellcontent.push(line); cells.push('' + cellcontent.join('
\n') + ''); if ((i + 1) % self.cols == 0 && i + 1 < self.rows * self.cols) { cells[cells.length - 1] += '\n'; } } document.getElementsByTagName('body')[0].innerHTML = '' + cells.join('') + '
'; }; window.onload = generate_report; dispcalGUI-1.7.1.6/dispcalGUI/report/uniformity.html000644 000765 000000 00000002404 12261120515 022203 0ustar00svpwheel000000 000000 Uniformity Check ${REPORT_VERSION} — ${DISPLAY} — ${DATETIME}
dispcalGUI-1.7.1.6/dispcalGUI/ref/ACES.icm000644 000765 000000 00000000744 12142254475 017576 0ustar00svpwheel000000 000000 @mntrRGB XYZ +acsp-^?coG desc_cprtP5wtptrXYZrTRC gXYZgTRC bXYZbTRC descACEStextPublic Domain. No Warranty, Use at own risk.XYZ BXYZ \OcurvXYZ "XYZ edispcalGUI-1.7.1.6/dispcalGUI/ref/ClayRGB1998.gam000644 000765 000000 00000170231 12025152306 020622 0ustar00svpwheel000000 000000 GAMUT DESCRIPTOR "Argyll Gamut surface poligon data" ORIGINATOR "Argyll CMS gamut library" CREATED "Mon Feb 27 17:52:58 2012" KEYWORD "COLOR_REP" COLOR_REP "LAB" KEYWORD "GAMUT_CENTER" GAMUT_CENTER "50.000000 0.000000 0.000000" KEYWORD "CSPACE_WHITE" CSPACE_WHITE "100.000000 0.000000 0.000000" KEYWORD "GAMUT_WHITE" GAMUT_WHITE "100.000000 0.000000 0.000000" KEYWORD "CSPACE_BLACK" CSPACE_BLACK "0.000000 0.000000 0.000000" KEYWORD "GAMUT_BLACK" GAMUT_BLACK "0.000000 0.000000 0.000000" KEYWORD "CUSP_RED" CUSP_RED "62.601347 90.370785 78.149474" KEYWORD "CUSP_YELLOW" CUSP_YELLOW "97.502205 -16.478555 103.676451" KEYWORD "CUSP_GREEN" CUSP_GREEN "83.214105 -129.090229 87.172706" KEYWORD "CUSP_CYAN" CUSP_CYAN "86.448981 -83.408548 -21.777749" KEYWORD "CUSP_BLUE" CUSP_BLUE "30.210038 69.243471 -113.611880" KEYWORD "CUSP_MAGENTA" CUSP_MAGENTA "67.600524 101.303881 -50.815824" # First come the triangle verticy location KEYWORD "VERTEX_NO" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT VERTEX_NO LAB_L LAB_A LAB_B END_DATA_FORMAT NUMBER_OF_SETS 1135 BEGIN_DATA 0 83.214 -129.09 87.173 1 30.210 69.243 -113.61 2 62.601 90.371 78.149 3 67.601 101.30 -50.816 4 97.502 -16.479 103.68 5 84.715 -110.36 88.939 6 84.882 -108.47 89.136 7 86.549 -91.168 91.088 8 86.799 -88.802 91.379 9 87.324 -83.975 91.991 10 87.600 -81.522 92.312 11 94.693 -8.7150 101.43 12 88.177 -76.551 92.984 13 88.478 -74.041 93.334 14 83.490 -124.41 65.629 15 91.010 1.6774 98.504 16 90.102 4.2763 97.789 17 88.304 9.4672 96.382 18 89.767 -63.888 94.827 19 65.877 79.350 80.159 20 90.110 -61.335 95.222 21 91.183 -53.673 96.461 22 84.790 19.784 93.663 23 81.408 29.932 91.091 24 91.557 -51.124 96.891 25 65.873 99.535 -53.672 26 69.302 68.049 82.402 27 78.976 37.361 89.273 28 69.880 66.166 82.792 29 70.477 64.225 83.198 30 71.094 62.228 83.622 31 76.651 44.573 87.565 32 79.776 34.906 89.868 33 72.384 58.077 84.517 34 75.902 46.917 87.021 35 73.055 55.929 84.988 36 93.122 -40.991 98.688 37 93.531 -38.481 99.156 38 93.947 -35.981 99.632 39 96.577 -21.263 102.63 40 94.798 -31.019 100.60 41 95.234 -28.558 101.10 42 60.696 94.321 -62.265 43 83.809 -119.22 48.568 44 59.835 93.468 -63.698 45 62.761 90.733 61.729 46 62.792 90.802 59.321 47 54.702 88.486 -72.264 48 33.728 57.110 -107.68 49 53.854 87.682 -73.682 50 63.147 91.600 38.728 51 62.945 91.146 49.191 52 62.991 91.249 46.589 53 84.199 -113.20 32.843 54 63.205 91.731 36.106 55 38.508 41.226 -99.645 56 84.397 -110.24 26.076 57 50.499 84.563 -79.307 58 63.399 92.166 28.277 59 63.622 92.663 20.545 60 49.671 83.809 -80.697 61 63.470 92.325 25.686 62 43.461 25.511 -91.364 63 63.702 92.843 17.995 64 84.616 -107.08 19.339 65 46.697 15.649 -85.980 66 48.848 83.068 -82.079 67 66.759 99.514 -40.346 68 64.358 94.298 0.59833 69 86.220 -86.128 -17.603 70 65.300 96.364 -18.260 71 48.031 82.340 -83.453 72 65.992 97.864 -29.501 73 64.804 95.278 -8.9677 74 85.023 -101.41 8.2263 75 85.387 -96.543 -0.52662 76 81.804 -73.567 -29.068 77 80.637 -71.036 -30.910 78 50.060 5.7266 -80.405 79 42.531 77.655 -92.722 80 85.786 -91.437 -9.1395 81 75.946 -60.613 -38.350 82 74.768 -57.930 -40.227 83 41.785 77.054 -93.981 84 71.224 -49.689 -45.898 85 70.040 -46.876 -47.799 86 66.483 -38.238 -53.535 87 65.297 -35.292 -55.455 88 37.618 73.878 -101.03 89 64.110 -32.313 -57.379 90 62.924 -29.301 -59.305 91 61.739 -26.256 -61.233 92 52.352 -0.84803 -76.618 93 57.016 -13.767 -68.950 94 14.182 45.227 -74.206 95 7.1930 34.587 -56.902 96 13.509 44.218 -72.551 97 6.5231 33.160 -54.951 98 61.334 -100.62 67.948 99 18.754 52.077 -85.445 100 19.388 53.028 -87.006 101 48.802 -84.316 56.937 102 33.734 -64.711 43.698 103 39.938 -72.782 49.149 104 35.310 -66.761 45.083 105 25.554 -54.067 35.616 106 49.492 75.299 65.116 107 18.563 -44.970 27.146 108 16.735 -42.360 24.726 109 23.849 -51.849 33.673 110 40.933 65.458 56.606 111 3.2382 20.204 -41.088 112 3.7000 22.898 -43.667 113 35.339 59.026 50.687 114 34.194 57.710 49.382 115 25.885 48.157 39.067 116 24.650 46.737 37.416 117 12.962 -35.251 19.490 118 2.0511 12.797 -32.650 119 0.0000 0.0000 0.0000 120 100.00 0.0000 0.0000 121 18.252 39.381 28.427 122 0.035831 0.15948 0.057090 123 0.072059 -0.20491 0.10959 124 16.921 37.850 26.473 125 12.802 33.115 20.264 126 11.382 31.482 18.070 127 11.007 -30.725 16.660 128 8.4560 28.118 13.472 129 75.231 75.757 -38.584 130 75.811 73.859 -37.660 131 92.092 23.018 -12.123 132 93.808 17.930 -9.4750 133 91.244 25.550 -13.434 134 94.676 15.377 -8.1397 135 0.23660 0.52749 0.37176 136 0.36675 -0.78153 0.56035 137 96.430 10.259 -5.4487 138 6.9905 26.183 11.138 139 88.745 33.083 -17.309 140 97.315 7.6951 -4.0942 141 1.7200 10.731 -29.587 142 87.929 35.568 -18.579 143 99.100 2.5649 -1.3693 144 0.33820 -0.89558 0.33658 145 8.9999 -25.531 13.679 146 78.965 63.639 -32.655 147 79.642 61.467 -31.583 148 84.758 45.334 -23.532 149 2.4824 -7.0591 3.7753 150 83.991 47.723 -24.734 151 0.91361 5.7002 -19.542 152 6.9788 -19.845 10.613 153 98.076 -12.523 62.598 154 97.958 -13.329 68.967 155 3.7069 -10.541 5.6375 156 0.52569 3.2799 -12.035 157 98.464 -9.9086 45.189 158 98.892 -7.0785 29.885 159 99.910 -0.56423 2.0897 160 99.649 -2.2049 8.4038 161 99.566 -2.7341 10.523 162 0.37454 2.3368 -8.5744 163 99.249 -4.7595 19.068 164 96.207 -18.131 -6.0585 165 97.831 -10.044 -3.4609 166 98.253 -8.0266 -2.7871 167 5.2028 -14.795 7.9125 168 99.554 -1.9989 -0.71013 169 94.690 -26.201 -8.4902 170 0.47343 1.5816 0.74911 171 94.328 -28.207 -9.0707 172 89.586 -58.199 -16.703 173 4.4962 19.796 7.1639 174 1.8432 8.2043 2.9369 175 2.5871 11.515 4.1221 176 92.312 -40.040 -12.310 177 92.003 -41.964 -12.807 178 3.4701 15.446 5.5291 179 8.1299 -12.656 -11.875 180 8.3927 -10.955 -15.119 181 11.553 -25.639 0.92434 182 9.6336 -20.823 -2.0038 183 8.6794 -9.0301 -18.252 184 3.8011 14.505 6.0324 185 15.290 -33.498 6.4817 186 2.9180 10.574 4.6253 187 7.8924 -14.145 -8.5135 188 7.3801 -18.059 11.253 189 15.551 -29.973 -0.27641 190 3.7885 -10.032 3.7704 191 5.6042 -13.009 8.5520 192 2.5640 -6.5503 1.9082 193 4.1083 -8.7546 6.2770 194 1.6012 -3.8125 0.44400 195 2.8838 -5.2726 4.4148 196 8.9885 -6.8703 -21.281 197 1.9210 -2.5349 2.9506 198 7.2413 26.881 5.3961 199 7.3650 27.207 2.5638 200 15.094 -36.142 13.343 201 6.2798 28.421 -32.567 202 6.9103 28.946 -28.054 203 7.0890 28.037 -17.010 204 6.1943 25.357 -3.0027 205 11.416 -26.942 4.4734 206 6.5822 26.604 -10.298 207 7.2539 -1.9981 -24.122 208 1.7208 3.4048 -18.269 209 5.6480 24.971 -15.652 210 16.935 -39.271 15.851 211 7.5161 27.590 -0.89639 212 2.9401 4.5411 -23.933 213 97.746 3.1509 -3.4686 214 5.7580 2.2559 -26.575 215 4.8707 21.683 -1.4104 216 98.112 4.5683 -0.64120 217 6.8204 27.304 -13.724 218 5.0814 26.462 -37.985 219 96.848 5.7266 -4.8410 220 6.1210 4.5211 -29.477 221 5.1902 24.607 -23.818 222 7.6956 28.024 -4.5915 223 4.6497 20.597 3.6488 224 37.221 -62.978 24.314 225 6.6233 -5.9327 -17.980 226 5.1273 -1.6787 -20.398 227 95.956 8.3017 -6.2083 228 60.184 -95.393 50.707 229 49.186 -77.959 31.986 230 7.6839 -15.446 -5.0263 231 17.219 -35.025 5.7563 232 19.867 -27.019 -10.607 233 48.997 -81.024 41.988 234 13.133 -33.343 13.610 235 49.685 -70.411 13.607 236 4.8906 23.326 -20.647 237 7.9041 28.500 -8.1411 238 39.216 -58.218 9.5680 239 37.621 -56.992 10.162 240 7.6170 0.26714 -27.011 241 1.1065 6.1860 -15.226 242 20.058 -24.936 -13.567 243 11.204 -28.927 10.825 244 35.619 -61.640 25.070 245 8.4690 31.080 -28.890 246 36.009 -55.752 10.774 247 41.608 -72.049 38.043 248 6.3547 -7.6085 -14.718 249 37.014 -66.329 35.100 250 9.3191 -4.4789 -24.211 251 4.6529 24.684 -35.300 252 8.1415 29.013 -11.551 253 4.1753 19.742 -10.276 254 4.3838 20.871 -13.885 255 37.121 32.558 50.637 256 6.1165 -9.0949 -11.324 257 9.4753 -22.034 1.5799 258 59.102 -89.061 34.811 259 30.306 -13.567 41.724 260 37.252 37.239 51.064 261 57.938 -84.069 25.443 262 2.6715 2.8652 -20.613 263 18.814 -40.835 14.974 264 32.194 -3.6787 44.022 265 3.9958 18.705 -6.5055 266 57.692 -87.882 35.477 267 20.749 -40.985 10.877 268 35.116 49.396 49.779 269 27.586 -50.502 17.210 270 24.103 -47.646 18.824 271 3.3960 -1.3589 -15.624 272 18.614 -18.961 -19.109 273 29.828 24.276 42.669 274 31.539 -6.9018 43.233 275 66.454 -88.387 17.080 276 4.0075 20.285 -22.108 277 31.674 -17.114 43.016 278 31.159 -50.553 9.7690 279 31.660 2.9338 43.736 280 17.481 -31.471 -0.83379 281 28.911 27.178 41.755 282 4.6220 22.074 -17.339 283 3.6343 0.12746 -19.073 284 26.120 -45.151 8.7252 285 48.793 -61.026 -1.4178 286 27.514 -51.631 20.246 287 67.820 -89.439 16.559 288 4.8587 -3.3546 -17.113 289 32.397 5.9426 44.620 290 3.1875 -2.6597 -12.022 291 4.4120 -6.1417 -10.119 292 27.002 0.61230 38.519 293 22.672 -40.904 6.9462 294 94.577 14.822 -6.0414 295 39.652 -52.311 -1.3859 296 31.801 18.141 44.545 297 29.925 -43.029 -1.3654 298 33.153 8.8638 45.515 299 28.915 -37.596 39.603 300 29.571 -47.805 7.4356 301 20.583 -43.535 17.363 302 29.733 -16.993 41.011 303 8.8745 31.879 -31.600 304 38.056 -51.072 -0.92781 305 2.6504 5.9089 4.1645 306 19.373 -32.942 -1.3682 307 30.145 -27.431 41.144 308 4.6205 -4.8409 -13.689 309 20.851 -39.502 7.6336 310 28.519 6.8529 40.475 311 18.082 25.480 -62.044 312 36.339 19.714 49.145 313 31.616 -44.345 -1.8418 314 25.679 -51.957 26.925 315 20.138 25.194 -64.187 316 64.433 -76.169 -1.0978 317 3.5632 18.936 -26.523 318 33.818 -43.664 44.267 319 9.1407 -24.518 10.141 320 20.608 26.816 -66.159 321 7.5044 -16.565 -1.4137 322 28.186 13.202 40.334 323 23.723 -16.686 34.140 324 8.8115 28.916 4.8649 325 20.052 -1.5576 29.791 326 27.329 11.853 -60.387 327 28.048 29.939 40.870 328 30.955 15.460 43.517 329 26.950 39.025 39.962 330 37.972 29.856 51.248 331 35.325 13.071 -70.629 332 33.456 13.202 -68.623 333 31.022 34.903 -85.381 334 29.909 18.666 42.510 335 33.709 -40.471 -10.567 336 31.245 9.3348 43.564 337 28.680 -23.965 39.685 338 28.205 -27.471 39.079 339 5.7285 -11.515 -4.1211 340 24.973 10.156 -56.123 341 24.227 14.275 35.608 342 21.806 41.573 -80.297 343 26.053 25.298 38.270 344 3.8447 17.783 -3.0453 345 22.939 10.295 -53.937 346 29.040 15.983 41.419 347 4.2326 -7.2613 -6.3971 348 25.214 -20.375 35.849 349 19.522 5.6774 29.246 350 13.996 18.908 -51.508 351 25.417 -34.475 35.789 352 11.360 -6.6663 -24.276 353 1.0580 -0.73048 -4.5144 354 10.290 32.107 -18.907 355 30.883 -1.3427 -51.804 356 13.549 6.8952 -40.074 357 28.942 -1.3949 -49.554 358 35.357 -30.718 46.054 359 27.003 -37.691 37.526 360 13.148 4.7597 -37.608 361 25.837 37.144 38.497 362 27.365 -34.373 37.997 363 20.768 -9.0493 30.572 364 16.188 8.8053 -44.860 365 21.158 23.877 31.940 366 9.6696 -2.0619 -27.049 367 3.6237 16.404 2.0140 368 22.675 -24.034 32.699 369 24.099 20.285 35.650 370 49.157 -56.445 -8.9729 371 21.809 -31.247 31.493 372 2.0454 -1.0415 -9.7235 373 22.117 20.831 33.113 374 63.606 -67.983 -12.396 375 19.750 4.5341 -44.888 376 18.361 8.6518 -47.192 377 20.389 8.8708 30.487 378 19.767 -31.349 28.885 379 17.973 -12.624 26.786 380 20.637 31.409 31.481 381 13.355 -8.7566 -24.359 382 20.161 -27.784 29.448 383 41.620 -48.700 -9.7058 384 23.177 -20.353 33.392 385 36.539 -1.1992 -58.355 386 40.043 -47.434 -9.3442 387 48.902 -12.813 -60.696 388 7.3533 -17.508 2.0390 389 38.731 7.5264 50.699 390 62.330 -65.377 -14.381 391 21.104 -20.350 30.787 392 32.200 -37.293 -12.932 393 18.621 -8.8219 27.729 394 38.376 -1.1551 -60.479 395 3.0081 -3.7792 -8.2593 396 3.5007 17.215 -15.325 397 24.737 46.934 31.391 398 19.634 41.048 26.667 399 39.166 1.3716 50.804 400 15.598 -31.467 23.271 401 19.078 18.747 28.970 402 11.573 31.913 12.225 403 49.985 76.410 30.512 404 10.589 32.730 -21.905 405 49.924 76.273 33.315 406 49.646 75.648 49.780 407 12.975 33.506 14.388 408 39.072 -7.9956 50.305 409 35.712 59.868 24.517 410 14.639 -20.473 22.043 411 10.595 -16.256 16.187 412 16.839 -20.407 25.117 413 22.924 -1.5696 -42.561 414 14.432 35.248 13.579 415 16.360 -24.272 24.407 416 16.097 10.003 24.595 417 38.010 62.548 24.776 418 35.454 59.286 39.514 419 45.699 -11.366 -58.537 420 34.028 -36.847 -15.906 421 47.327 -40.643 -27.787 422 39.771 -31.898 -29.196 423 20.129 -12.760 29.662 424 61.454 -58.108 -23.221 425 37.238 62.045 11.166 426 37.445 62.506 5.3586 427 41.058 65.740 43.983 428 36.795 63.432 -25.040 429 49.287 -54.866 -11.450 430 12.600 -4.1523 19.298 431 35.648 59.722 27.581 432 27.223 49.823 31.703 433 9.7538 30.972 -12.608 434 35.563 61.935 -24.226 435 39.179 -17.657 50.017 436 49.338 76.099 15.078 437 36.901 61.291 23.128 438 37.144 61.835 14.118 439 13.060 33.696 11.489 440 26.008 48.434 30.081 441 38.224 64.217 -11.244 442 39.692 -4.9339 51.005 443 41.346 -33.338 -29.377 444 16.038 22.404 24.785 445 49.835 77.202 1.6866 446 35.938 61.583 -12.026 447 36.610 63.036 -22.505 448 18.508 39.958 16.034 449 13.786 -27.988 20.749 450 37.559 62.757 2.5051 451 95.357 -26.749 60.884 452 23.143 17.618 34.342 453 16.544 -1.7825 -35.120 454 49.596 77.776 -15.188 455 32.366 -35.442 -15.615 456 37.010 62.741 -10.289 457 29.013 52.515 7.8741 458 43.774 -43.187 -20.103 459 14.317 -1.8660 -32.513 460 19.802 41.426 17.939 461 37.162 63.071 -12.966 462 26.183 48.828 20.302 463 38.094 -2.9628 -58.376 464 20.477 -20.681 -19.312 465 27.733 50.968 9.1727 466 39.848 4.2711 51.568 467 11.780 32.375 5.8266 468 3.2922 15.915 -11.701 469 28.370 52.374 -6.0085 470 27.633 50.745 12.348 471 27.461 50.359 18.807 472 38.648 -20.877 49.410 473 27.961 51.473 2.9561 474 28.651 51.707 20.576 475 38.860 32.097 52.202 476 48.834 -41.975 -27.996 477 35.953 62.768 -29.244 478 15.175 25.205 23.602 479 49.707 -50.001 -18.757 480 21.156 43.047 16.347 481 28.125 53.080 -21.817 482 49.568 78.784 -31.169 483 28.224 52.055 -3.0690 484 95.747 -24.698 63.650 485 19.980 43.185 -16.453 486 26.063 49.873 -9.7391 487 27.220 51.124 -7.8657 488 20.843 -1.6354 -40.137 489 26.807 51.480 -20.957 490 49.966 80.652 -48.454 491 95.506 -24.794 36.134 492 3.2637 17.067 -23.338 493 97.109 -16.611 43.147 494 11.949 -23.969 18.122 495 19.976 41.815 10.980 496 18.559 41.458 -15.502 497 19.883 41.607 14.443 498 96.669 -18.866 42.483 499 13.163 33.925 7.9661 500 10.645 20.833 16.741 501 19.482 29.305 29.831 502 17.180 24.816 26.478 503 18.265 9.4253 27.619 504 95.092 -27.062 35.503 505 93.789 -35.535 54.126 506 25.292 50.682 -32.477 507 20.801 43.634 -8.5207 508 19.773 42.741 -13.512 509 25.907 50.782 -25.473 510 3.1128 14.795 -7.9125 511 94.933 -29.114 60.271 512 27.554 51.852 -13.589 513 61.595 -56.543 -25.471 514 20.945 -16.370 -24.831 515 34.572 62.081 -39.875 516 14.176 -24.384 21.342 517 9.3034 11.876 14.545 518 20.632 43.265 -5.4375 519 21.452 43.708 6.1811 520 7.1323 -18.887 7.0982 521 1.1302 5.7002 -7.3704 522 20.081 42.050 7.5678 523 95.876 -23.752 57.181 524 23.943 49.057 -31.739 525 12.289 20.998 -51.367 526 92.825 -41.773 61.659 527 2.9616 13.852 -4.4523 528 1.6089 7.8311 -6.6076 529 1.0065 4.9283 -4.5380 530 19.398 41.928 -7.4310 531 33.300 -10.685 -45.123 532 2.2178 10.541 -5.6375 533 1.4852 7.0591 -3.7753 534 49.856 -48.344 -21.151 535 40.329 -1.9333 51.724 536 1.3879 6.4522 -1.5484 537 18.784 31.604 28.931 538 2.0941 9.7692 -2.8051 539 2.8379 13.080 -1.6199 540 49.261 80.178 -52.137 541 1.9968 9.1623 -0.57822 542 95.866 -22.975 38.978 543 40.400 -11.847 -52.011 544 1.7601 8.7741 -10.068 545 9.6778 -21.832 14.748 546 20.331 42.604 0.93075 547 29.744 -9.1006 -42.707 548 62.040 -51.786 -32.124 549 93.837 -35.152 51.934 550 2.3689 11.484 -9.0977 551 94.914 -28.418 42.123 552 45.208 -29.004 -39.014 553 38.847 -10.174 -51.964 554 49.461 -21.341 -52.387 555 39.162 16.142 51.540 556 11.175 25.647 17.638 557 13.423 34.503 0.75378 558 40.185 -45.743 -11.943 559 97.547 -13.576 27.807 560 41.234 -18.977 -45.461 561 93.875 -35.688 71.727 562 11.856 33.998 -19.801 563 18.094 41.773 -26.016 564 97.110 -15.760 27.131 565 37.868 -17.627 -43.040 566 12.503 27.710 19.693 567 14.637 35.705 6.4258 568 9.5912 4.4102 14.891 569 94.749 -28.848 32.676 570 75.587 -21.275 83.332 571 92.748 -42.426 65.909 572 75.113 -23.907 82.792 573 18.780 41.932 -18.426 574 13.950 35.656 -9.3445 575 13.757 35.235 -6.0742 576 96.680 -17.952 26.465 577 18.062 15.986 27.494 578 1.9395 9.8936 -13.883 579 2.5484 12.604 -12.901 580 98.059 -10.936 26.315 581 1.4608 7.7628 -14.655 582 31.402 -10.876 -42.761 583 93.398 -36.243 23.674 584 65.304 -25.761 73.708 585 15.247 37.049 -7.2349 586 60.789 -48.938 -34.119 587 64.621 -11.705 73.642 588 97.991 -10.568 14.827 589 64.095 -14.411 73.046 590 73.790 7.7669 82.952 591 98.954 -5.8466 14.075 592 21.901 -26.524 -13.859 593 64.838 -28.551 73.175 594 66.638 -48.330 74.141 595 93.469 -38.126 71.164 596 93.891 -33.896 33.666 597 94.415 -30.603 29.859 598 65.068 12.324 75.154 599 38.594 -12.023 -49.771 600 97.286 -15.375 36.557 601 98.758 -6.3053 6.9940 602 97.990 -11.401 28.491 603 16.644 40.024 -25.212 604 12.644 34.267 -11.479 605 30.892 -14.807 -38.040 606 98.845 -5.7433 4.8813 607 65.074 -48.355 72.708 608 98.352 -8.9751 17.664 609 98.068 -9.2468 1.4009 610 95.983 -21.299 20.802 611 95.649 -22.928 17.991 612 65.874 27.091 76.670 613 13.660 -6.4284 -27.147 614 98.322 -8.3650 6.3023 615 99.287 -3.7018 5.5821 616 2.7568 13.905 -16.538 617 98.498 -7.2071 2.0839 618 93.440 -37.521 51.348 619 67.021 -45.533 74.583 620 14.908 36.307 -0.58313 621 34.814 62.584 -42.216 622 97.638 -12.134 12.004 623 96.327 -19.640 23.627 624 95.427 -24.564 24.522 625 63.454 30.154 74.620 626 98.674 -6.8581 9.1141 627 48.693 -36.891 58.071 628 95.324 -24.523 15.194 629 10.234 -3.8088 15.773 630 97.558 -12.683 14.146 631 14.161 36.112 -12.523 632 98.409 -7.7906 4.1893 633 64.667 -3.4852 74.039 634 98.236 -8.9301 8.4228 635 40.488 -42.286 -17.060 636 98.276 -9.4802 19.818 637 94.022 -32.861 29.254 638 95.091 -25.465 10.261 639 92.401 -44.541 63.247 640 97.212 -14.242 11.332 641 60.274 13.480 70.805 642 97.979 -9.8432 3.5065 643 61.449 -42.426 -42.755 644 61.279 -44.061 -40.620 645 97.131 -14.803 13.474 646 11.066 0.13153 17.073 647 2.6548 14.357 -24.345 648 1.6693 9.0636 -18.311 649 96.876 -15.771 8.5328 650 96.548 -17.268 5.7501 651 93.705 -34.571 26.458 652 24.209 49.608 -34.279 653 92.396 -43.762 45.226 654 16.215 -3.9840 -32.547 655 94.928 -26.687 14.573 656 95.009 -26.082 12.414 657 49.564 -30.776 59.076 658 49.981 -39.911 59.154 659 49.246 -23.094 -50.252 660 96.751 -17.453 24.286 661 49.288 -21.582 59.155 662 48.624 -28.370 -43.729 663 34.187 -18.166 -38.218 664 97.479 -13.221 16.295 665 97.891 -10.430 5.6198 666 9.4735 -7.9320 14.576 667 49.802 -18.581 59.741 668 19.362 -12.364 -27.400 669 99.023 -4.5922 0.67844 670 22.611 -3.6235 -40.165 671 38.151 19.216 50.781 672 98.588 -6.6144 -0.013868 673 40.962 -60.212 50.354 674 33.104 -27.840 -25.996 675 91.208 -51.030 34.191 676 96.792 -16.355 10.669 677 49.355 -36.791 -34.911 678 11.583 33.424 -16.766 679 49.943 -70.267 58.280 680 32.549 -16.504 -38.126 681 17.496 -10.455 -27.303 682 92.451 -43.295 43.010 683 49.345 5.1238 60.343 684 37.099 -46.540 47.182 685 49.722 -9.5417 60.033 686 49.790 -0.72009 60.480 687 96.413 -17.439 -1.2359 688 41.737 -52.183 51.262 689 26.085 -7.4447 -40.243 690 37.198 -30.691 47.742 691 69.549 -74.981 76.016 692 96.016 -19.491 -1.8703 693 92.084 -45.642 42.458 694 94.495 -28.416 4.7633 695 96.231 -18.730 2.9843 696 94.493 -27.682 -4.3025 697 97.645 -11.291 0.72718 698 48.969 10.840 60.278 699 49.915 -31.563 -41.641 700 49.189 24.188 61.192 701 39.020 -30.675 49.411 702 69.513 -61.943 76.351 703 47.501 24.655 59.669 704 95.923 -20.156 0.23596 705 22.015 -7.8039 -35.243 706 96.142 -19.361 5.1061 707 40.470 -20.983 51.078 708 49.566 -57.466 58.260 709 17.783 -8.2314 -29.976 710 94.704 -27.603 9.6490 711 16.928 40.614 -27.955 712 9.3907 18.272 14.772 713 35.632 -43.575 45.924 714 33.733 -22.036 -33.425 715 96.056 -19.982 7.2356 716 49.537 -35.051 -37.175 717 96.507 -16.778 -3.3341 718 11.245 7.0467 -37.593 719 1.8942 -1.9846 -6.2632 720 47.249 11.259 58.717 721 1.7705 -2.7565 -3.4309 722 22.308 -5.7024 -37.727 723 35.312 -46.617 45.550 724 21.196 -14.213 -27.509 725 94.408 -29.083 6.9015 726 36.766 -33.970 47.242 727 2.6360 -6.1011 0.26016 728 2.8570 -4.7223 -4.7991 729 94.130 -29.720 -4.8832 730 39.944 18.726 52.400 731 8.7953 -11.526 13.504 732 24.068 -7.6171 -37.773 733 5.3564 -13.837 4.3974 734 3.9577 -8.9762 -0.10455 735 4.0814 -8.2043 -2.9369 736 5.4537 -13.230 2.1705 737 5.5774 -12.458 -0.66183 738 92.870 -38.251 6.7505 739 92.956 -39.065 25.298 740 36.276 -54.949 46.219 741 49.874 40.877 62.833 742 12.146 34.604 -22.746 743 94.304 -29.122 -0.081520 744 92.439 -41.085 8.3597 745 7.7344 -16.482 11.817 746 25.806 -9.4814 -37.828 747 94.213 -29.827 2.0412 748 76.402 53.670 -36.880 749 33.306 -25.909 -28.506 750 25.535 -11.534 -35.373 751 25.274 -13.599 -32.877 752 86.571 -48.619 -21.387 753 8.4996 21.180 13.431 754 86.320 -50.322 -21.793 755 77.143 51.326 -35.703 756 87.654 -51.273 -19.696 757 74.895 40.638 -39.423 758 73.588 62.671 -41.366 759 21.458 -12.063 -30.136 760 74.089 -40.651 -41.237 761 75.046 -44.692 -39.717 762 74.314 38.950 -40.376 763 81.969 -39.517 -28.622 764 82.242 -37.797 -28.177 765 83.323 -40.533 -26.477 766 82.999 40.162 -26.390 767 62.313 48.945 -59.909 768 83.599 -38.784 -26.027 769 92.618 -40.332 13.237 770 81.619 40.898 -28.592 771 75.714 38.103 -38.119 772 82.423 38.417 -27.326 773 81.162 -35.040 -29.879 774 92.892 -38.820 15.969 775 89.925 -36.649 -16.027 776 90.246 -34.722 -15.508 777 92.278 -41.716 3.5233 778 92.189 -42.466 5.6707 779 49.691 60.400 64.056 780 73.152 -36.517 -42.725 781 96.450 2.4832 17.203 782 73.498 41.486 -41.680 783 93.177 -37.260 18.717 784 91.736 -48.683 57.873 785 72.964 -27.930 -42.984 786 91.079 10.056 39.538 787 78.785 32.143 -33.215 788 72.469 -30.888 -43.799 789 71.598 -26.536 -45.185 790 80.182 31.341 -30.978 791 97.431 0.38812 16.379 792 79.006 -29.467 -33.287 793 86.487 -30.470 -21.400 794 94.279 5.3862 25.498 795 80.378 -30.507 -31.101 796 90.571 -54.628 21.593 797 92.886 12.780 11.909 798 86.163 -32.364 -21.925 799 97.757 2.4067 7.8094 800 92.425 -39.781 -7.6138 801 95.473 4.5897 18.046 802 98.831 0.90116 4.9281 803 64.318 11.174 -56.835 804 79.637 29.550 -31.866 805 87.853 -31.271 -19.249 806 89.164 21.660 13.327 807 86.278 30.143 -21.251 808 86.820 -28.559 -20.861 809 94.209 4.9653 27.707 810 77.770 63.893 -25.244 811 67.850 74.029 -50.636 812 96.528 2.9637 15.040 813 97.673 1.8883 9.9410 814 8.1500 15.518 12.806 815 96.608 3.4535 12.884 816 93.314 7.5464 26.411 817 87.708 21.035 30.063 818 78.559 -23.116 -33.964 819 76.859 -23.820 -36.694 820 82.374 -27.861 -27.905 821 91.611 -26.877 -13.309 822 97.843 2.9339 5.6852 823 90.498 -55.306 23.804 824 6.4372 -9.3009 9.8793 825 65.584 52.415 -54.509 826 77.175 -22.066 -36.176 827 89.866 18.251 19.047 828 71.624 -17.371 -45.094 829 91.272 -50.455 31.968 830 8.2014 8.5881 12.798 831 71.031 -20.573 -46.070 832 72.402 27.724 -43.558 833 92.024 -46.979 62.709 834 89.986 25.946 -6.2692 835 72.934 29.467 -42.682 836 91.613 13.118 21.610 837 91.970 7.4728 40.780 838 87.121 27.600 -19.936 839 97.931 3.4700 3.5686 840 87.598 33.987 -12.239 841 90.810 -53.893 35.905 842 2.7540 1.1728 4.2779 843 92.538 -41.001 15.413 844 93.688 9.7417 15.405 845 78.888 -21.311 -33.426 846 5.5501 -2.3368 8.5744 847 89.376 15.556 34.801 848 77.501 -20.287 -35.642 849 3.3629 3.8829 5.2480 850 89.509 23.476 4.5271 851 90.974 -22.214 -14.273 852 95.397 4.1291 20.226 853 83.290 25.382 -26.053 854 75.053 -16.357 -39.554 855 85.206 26.477 -22.988 856 78.570 25.946 -33.610 857 4.1067 7.1938 6.4332 858 89.348 24.355 -16.437 859 91.540 12.701 23.833 860 94.578 7.1666 16.723 861 89.247 22.100 11.114 862 92.424 10.125 25.119 863 3.7168 -1.5649 5.7420 864 92.134 -42.221 -1.2700 865 89.694 24.438 0.18071 866 62.203 -5.4554 -60.383 867 78.938 21.465 -33.053 868 93.533 8.8348 19.788 869 90.206 21.799 -15.107 870 95.631 5.5392 13.706 871 90.024 19.107 14.605 872 90.317 13.339 33.781 873 86.468 34.967 -7.0624 874 92.804 12.314 14.092 875 80.614 -20.442 -30.662 876 89.083 21.228 15.548 877 89.944 18.674 16.822 878 85.789 -25.832 -22.472 879 96.373 2.0120 19.373 880 62.304 -13.559 -60.254 881 71.362 24.229 -45.269 882 78.440 61.741 -24.191 883 83.381 -22.244 -26.267 884 66.161 57.666 -53.528 885 70.235 -16.059 -47.338 886 94.848 -17.516 -8.1705 887 92.724 11.857 16.284 888 90.190 26.993 -10.522 889 77.531 22.317 -35.308 890 88.526 32.015 -13.093 891 62.775 -11.143 -59.471 892 90.662 15.271 22.553 893 92.095 15.820 8.4201 894 90.736 15.687 20.325 895 95.245 -15.499 -7.5349 896 4.9898 11.124 7.8402 897 89.420 23.009 6.7139 898 5.0695 4.4561 7.8974 899 61.925 -6.7872 -60.846 900 92.029 7.8215 38.534 901 91.348 -20.223 -13.669 902 91.926 14.882 12.786 903 70.985 28.686 -45.851 904 70.003 6.2669 -47.590 905 70.139 -8.1910 -47.450 906 84.680 24.631 -23.843 907 91.112 -52.689 52.458 908 76.790 -15.646 -36.755 909 92.819 14.087 -11.064 910 70.544 -14.444 -46.827 911 84.982 34.255 7.0738 912 62.490 10.947 -59.833 913 7.1770 4.8872 11.167 914 92.009 15.347 10.599 915 75.548 15.012 -38.555 916 71.293 17.940 -45.422 917 77.144 -13.828 -36.176 918 89.045 27.960 -5.4165 919 70.429 8.0257 -46.886 920 89.333 22.550 8.9096 921 77.444 15.943 -35.495 922 88.311 24.203 12.057 923 69.587 4.5201 -48.276 924 76.962 14.096 -36.284 925 70.349 14.408 -46.978 926 92.229 -41.419 -3.3931 927 76.109 -10.982 -37.823 928 86.301 27.613 18.521 929 84.760 -23.092 -24.083 930 64.142 39.767 -56.959 931 84.160 22.777 -24.687 932 88.638 18.841 29.028 933 76.481 -9.1540 -37.213 934 89.886 25.435 -4.1286 935 32.694 62.405 -61.860 936 70.816 16.172 -46.208 937 81.240 17.967 -29.389 938 83.633 46.196 -18.393 939 90.960 12.816 -14.001 940 92.516 -14.223 -11.789 941 97.325 -5.4268 -4.2044 942 5.9526 8.3867 9.3044 943 89.979 -19.528 -15.815 944 89.605 -21.509 -16.419 945 92.333 12.153 -11.846 946 87.285 32.479 -5.8077 947 62.399 3.3283 -60.019 948 90.677 -54.378 28.730 949 97.353 -0.093370 18.539 950 76.023 10.402 -37.821 951 88.229 23.774 14.281 952 91.398 11.895 28.298 953 91.550 -11.558 -13.283 954 92.920 -12.219 -11.140 955 6.9786 12.330 10.939 956 64.171 23.515 -57.007 957 96.691 3.9526 10.735 958 32.372 61.773 -59.758 959 76.488 12.249 -37.060 960 85.072 34.684 4.8466 961 88.571 25.545 5.4354 962 91.497 19.849 0.62123 963 91.314 18.860 4.9415 964 89.191 18.011 -16.744 965 86.366 34.484 -4.8973 966 83.888 28.945 41.440 967 62.769 18.658 -59.334 968 6.0158 15.249 9.4750 969 69.819 -1.8558 -47.935 970 95.110 2.3831 29.008 971 93.177 6.7363 30.854 972 85.890 32.195 6.0791 973 86.994 24.314 24.285 974 91.961 -9.5597 -12.621 975 92.744 19.383 -6.5934 976 81.692 -14.795 -28.905 977 93.330 -10.214 -10.481 978 82.872 48.572 -19.580 979 88.755 26.485 1.0664 980 75.458 -6.3055 -38.841 981 91.853 10.212 -12.618 982 92.182 16.303 6.2494 983 85.467 30.129 17.294 984 88.926 20.394 20.013 985 13.845 38.040 -36.293 986 86.785 36.466 -13.496 987 85.547 30.524 15.033 988 96.844 -0.82668 -4.9108 989 81.183 11.515 -29.529 990 64.989 37.122 -55.585 991 78.658 -6.4031 -33.700 992 81.661 13.404 -28.750 993 75.848 -4.4717 -38.201 994 81.532 42.834 9.0541 995 91.006 -6.8950 -14.099 996 82.147 15.290 -27.960 997 78.390 6.7135 -34.040 998 76.096 3.9034 -37.748 999 81.062 -10.105 -29.878 1000 82.311 46.201 -8.7890 1001 82.070 -12.887 -28.290 1002 75.668 2.0526 -38.450 1003 82.418 46.659 -10.970 1004 93.851 10.686 11.051 1005 63.237 26.351 -58.524 1006 93.055 13.740 7.5643 1007 80.461 -5.4134 -30.806 1008 91.431 -4.9054 -13.414 1009 86.149 26.848 23.058 1010 85.556 36.958 -6.1388 1011 90.912 6.3100 -14.133 1012 82.456 -10.969 -27.661 1013 90.451 4.3505 -14.876 1014 86.922 23.944 26.559 1015 84.894 33.836 9.3107 1016 90.055 -4.2256 -15.573 1017 81.456 -8.1947 -29.236 1018 82.584 10.706 -27.297 1019 85.259 35.568 0.42197 1020 85.389 29.744 19.563 1021 86.720 22.892 33.414 1022 80.319 1.1753 -30.988 1023 85.630 30.928 12.781 1024 84.782 26.710 40.268 1025 87.287 18.779 46.071 1026 96.084 0.22353 28.114 1027 80.761 45.230 7.8993 1028 80.756 3.0809 -30.275 1029 80.872 -3.5046 -30.136 1030 15.314 39.774 -36.972 1031 89.629 -6.2076 -16.260 1032 21.992 48.498 -46.784 1033 81.041 46.419 1.1194 1034 88.322 17.122 40.405 1035 89.071 5.0403 -17.046 1036 92.549 18.322 -2.3478 1037 89.549 0.41845 -16.331 1038 96.948 5.5040 4.3323 1039 92.361 17.295 1.9334 1040 81.445 48.123 -7.7652 1041 90.964 9.3916 44.050 1042 80.189 48.377 2.2246 1043 58.308 48.206 -66.523 1044 80.673 44.851 10.181 1045 83.243 32.336 33.304 1046 86.076 26.479 25.337 1047 81.834 38.244 24.012 1048 91.694 -49.059 60.035 1049 58.788 53.411 -65.699 1050 97.908 -4.9364 30.744 1051 93.771 2.2990 43.277 1052 60.021 -79.909 67.213 1053 50.133 32.594 -80.179 1054 89.747 -57.791 -9.6429 1055 90.113 -57.504 16.236 1056 94.735 0.062214 42.307 1057 81.197 41.361 18.226 1058 77.518 62.996 -20.940 1059 77.045 61.290 -12.181 1060 81.120 41.016 20.543 1061 81.278 41.716 15.919 1062 90.505 6.6884 66.277 1063 89.819 10.497 54.118 1064 89.645 -58.766 -7.5290 1065 91.375 -51.105 57.348 1066 58.715 57.087 -65.798 1067 76.266 63.024 -10.990 1068 75.736 61.127 0.31034 1069 89.702 -58.818 -2.8672 1070 76.037 57.582 10.592 1071 89.984 -58.056 11.397 1072 89.778 -58.716 1.8424 1073 86.320 20.786 49.492 1074 74.662 73.978 -30.144 1075 81.762 37.915 26.340 1076 76.046 62.242 -6.5084 1077 97.485 -7.6924 46.108 1078 91.065 -53.115 54.652 1079 80.971 40.354 25.200 1080 82.365 34.518 34.491 1081 88.888 12.816 55.205 1082 82.429 34.820 32.153 1083 75.269 59.436 11.925 1084 82.949 30.913 44.973 1085 75.871 52.025 40.293 1086 74.978 62.893 1.6090 1087 76.774 50.460 34.046 1088 93.421 0.13630 58.814 1089 20.992 47.603 -48.464 1090 22.344 49.188 -49.076 1091 90.972 -53.181 43.091 1092 76.053 52.738 33.038 1093 90.766 -55.085 51.950 1094 92.427 2.2061 62.026 1095 15.682 40.501 -39.460 1096 50.266 51.696 -79.871 1097 75.184 59.123 14.284 1098 12.752 37.061 -38.130 1099 77.279 47.198 44.672 1100 85.367 22.829 52.940 1101 75.283 54.734 34.472 1102 75.629 56.047 22.420 1103 88.800 12.320 59.674 1104 50.105 37.838 -80.203 1105 80.225 36.983 55.771 1106 78.031 44.845 45.674 1107 87.008 -82.628 16.032 1108 75.554 55.766 24.815 1109 81.662 31.166 68.903 1110 89.485 -63.607 36.212 1111 89.252 -65.227 33.528 1112 88.759 12.087 61.887 1113 79.391 39.234 57.091 1114 80.039 36.124 67.043 1115 89.096 -66.102 28.625 1116 82.489 28.658 69.845 1117 8.9578 17.699 -44.592 1118 90.476 -57.011 49.245 1119 77.886 44.227 52.801 1120 7.9025 13.824 -39.939 1121 86.665 -86.159 20.180 1122 76.438 49.106 48.493 1123 90.042 -59.626 39.378 1124 89.730 -61.923 38.906 1125 73.016 60.354 41.468 1126 27.068 57.213 -68.691 1127 73.575 57.849 47.243 1128 73.526 57.672 49.676 1129 90.198 -58.890 46.539 1130 74.163 55.328 52.955 1131 89.985 -60.180 41.608 1132 87.913 -76.577 40.808 1133 88.674 -71.184 57.907 1134 87.966 -76.674 50.109 END_DATA # And then come the triangles KEYWORD "VERTEX_0" KEYWORD "VERTEX_1" KEYWORD "VERTEX_2" NUMBER_OF_FIELDS 3 BEGIN_DATA_FORMAT VERTEX_0 VERTEX_1 VERTEX_2 END_DATA_FORMAT NUMBER_OF_SETS 2266 BEGIN_DATA 83 1 88 48 1 100 99 48 100 45 2 106 67 3 130 3 129 130 123 136 144 39 4 154 41 39 154 159 120 168 135 122 170 76 69 172 175 178 184 174 175 186 152 167 188 149 155 190 167 155 191 155 149 193 144 136 194 136 149 194 123 144 194 149 192 194 149 136 197 195 149 197 138 173 198 185 189 205 189 181 205 151 156 208 117 108 210 200 117 210 199 204 211 141 151 212 143 140 213 141 212 214 212 207 214 204 199 215 140 143 216 206 209 217 209 203 217 112 97 218 97 201 218 213 140 219 118 141 220 141 214 220 201 202 221 202 203 221 204 206 222 211 204 222 198 173 223 199 198 223 173 178 223 215 199 223 183 196 225 207 212 226 196 207 226 225 196 226 140 137 227 219 140 227 0 14 228 98 0 228 182 187 230 185 200 231 182 181 232 181 189 232 101 98 233 98 228 233 127 117 234 117 200 234 200 185 234 224 229 235 203 209 236 221 203 236 222 206 237 224 235 238 224 238 239 214 207 240 220 214 240 156 151 241 179 187 242 187 182 242 182 232 242 145 127 243 205 145 243 185 205 243 127 234 243 234 185 243 105 102 244 202 201 245 224 239 246 244 224 246 103 101 247 101 233 247 229 224 247 233 229 247 180 183 248 183 225 248 102 104 249 244 102 249 104 103 249 103 247 249 224 244 249 247 224 249 207 196 250 111 112 251 112 218 251 218 201 251 201 221 251 206 217 252 237 206 252 209 206 254 206 253 254 179 180 256 180 248 256 187 179 256 181 182 257 205 181 257 43 53 261 258 43 261 235 229 261 212 151 262 226 212 262 210 108 263 206 204 265 253 206 265 204 215 265 229 233 266 233 228 266 14 43 266 43 258 266 228 14 266 258 261 266 261 229 266 200 210 267 210 263 267 113 110 268 110 260 268 114 113 268 244 246 269 107 109 270 208 156 271 180 179 272 179 242 272 183 180 272 56 64 275 53 56 275 261 53 275 235 261 275 221 236 276 269 246 278 189 185 280 185 231 280 232 189 280 260 255 281 255 273 281 236 209 282 209 254 282 276 236 282 151 208 283 262 151 283 226 262 283 208 271 283 267 270 284 270 269 284 269 278 284 238 235 285 105 244 286 244 269 286 269 270 286 275 64 287 225 226 288 226 283 288 283 271 288 271 156 290 264 274 292 279 264 292 267 284 293 134 137 294 238 285 295 293 284 297 284 278 300 297 284 300 108 107 301 107 270 301 263 108 301 267 263 301 270 267 301 259 277 302 201 97 303 245 201 303 239 238 304 238 295 304 246 239 304 278 246 304 300 278 304 170 174 305 280 231 306 232 280 306 293 297 306 248 225 308 225 288 308 288 271 308 271 290 308 256 248 308 291 256 308 290 291 308 231 200 309 200 267 309 267 293 309 293 306 309 306 231 309 289 279 310 279 292 310 96 95 311 296 273 312 297 300 313 300 304 313 109 105 314 105 286 314 270 109 314 286 270 314 96 311 315 75 80 316 74 75 316 235 275 316 285 235 316 64 74 316 287 64 316 275 287 316 251 221 317 221 276 317 118 111 317 111 251 317 102 105 318 105 299 318 152 145 319 145 205 319 205 257 319 257 152 319 94 96 320 96 315 320 99 94 320 182 230 321 259 302 323 128 138 324 138 198 324 198 199 324 199 211 324 320 315 326 260 281 327 296 312 328 312 298 328 115 114 329 114 268 329 268 260 329 260 327 329 116 115 329 273 255 330 312 273 330 65 62 331 62 55 332 331 62 332 55 48 333 48 99 333 320 326 333 326 332 333 332 55 333 273 296 334 296 328 334 297 313 335 298 289 336 289 310 336 310 322 336 322 328 336 328 298 336 302 277 337 277 307 337 337 307 338 230 187 339 326 315 340 322 310 341 99 320 342 320 333 342 333 99 342 327 281 343 281 273 343 265 215 344 315 311 345 340 315 345 328 322 346 334 328 346 322 341 346 187 256 347 339 187 347 256 291 347 323 302 348 302 337 348 337 338 348 292 325 349 311 95 350 345 311 350 109 107 351 250 196 352 162 119 353 332 326 355 326 340 355 340 345 357 355 340 357 307 277 358 299 307 358 105 109 359 299 105 359 109 351 359 116 329 361 329 327 361 327 343 361 307 299 362 338 307 362 351 338 362 299 359 362 359 351 362 274 259 363 292 274 363 259 323 363 325 292 363 240 207 366 207 250 366 178 175 367 223 178 367 215 223 367 344 215 367 348 338 368 338 351 368 273 334 369 343 273 369 346 341 369 334 346 369 295 285 370 285 316 370 351 107 371 368 351 371 156 162 372 290 156 372 365 343 373 343 369 373 80 69 374 316 80 374 370 316 374 357 345 375 364 356 375 345 350 376 350 364 376 364 375 376 375 345 376 310 292 377 292 349 377 341 310 377 107 108 378 371 107 378 121 116 380 116 361 380 361 343 380 343 365 380 196 183 381 352 196 381 183 272 381 368 371 382 371 378 382 295 370 383 323 348 384 348 368 384 331 332 385 332 355 385 313 304 386 335 313 386 304 295 386 295 383 386 257 182 388 182 321 388 289 298 389 69 76 390 374 69 390 370 374 390 368 382 391 384 368 391 323 384 391 232 306 392 306 297 392 297 335 392 325 363 393 78 65 394 65 331 394 331 385 394 92 78 394 372 162 395 291 290 395 290 372 395 347 291 395 276 282 396 282 254 396 116 121 397 264 279 399 279 289 399 108 117 400 378 108 400 365 373 401 126 128 402 54 50 403 58 54 403 203 202 404 354 203 404 202 245 404 52 51 405 50 52 405 403 50 405 46 45 406 45 106 406 106 110 406 51 46 406 259 274 408 274 264 408 152 188 411 379 410 411 379 391 412 410 379 412 391 382 412 357 375 413 125 126 414 126 407 414 382 378 415 378 400 415 412 382 415 410 412 415 403 405 417 113 114 418 114 115 418 93 92 419 387 93 419 392 335 420 363 323 423 323 391 423 391 379 423 379 393 423 393 363 423 76 77 424 390 76 424 405 51 427 51 406 427 110 113 427 113 418 427 406 110 427 383 370 429 370 390 429 393 379 430 379 411 430 349 325 430 325 393 430 409 417 431 417 405 431 405 427 431 427 418 431 115 116 432 418 115 432 431 418 432 217 203 433 252 217 433 237 252 433 203 354 433 277 259 435 259 408 435 61 58 436 58 403 436 59 61 436 403 417 436 63 59 436 425 426 436 417 409 437 425 436 438 436 417 438 417 437 438 126 402 439 407 126 439 414 407 439 397 121 440 121 398 440 116 397 440 432 116 440 408 264 442 422 420 443 68 63 445 63 436 445 436 426 445 73 68 445 434 428 447 124 125 448 125 414 448 117 127 449 400 117 449 415 400 449 441 445 450 445 426 450 369 341 452 373 369 452 401 373 452 341 377 452 72 70 454 70 73 454 73 445 454 445 441 454 392 420 455 441 450 456 426 425 457 425 438 457 421 443 458 220 240 459 240 366 459 360 220 459 453 360 459 121 124 460 398 121 460 124 448 460 446 447 461 447 454 461 454 441 461 441 456 461 456 446 461 440 398 462 398 460 462 385 355 463 394 385 463 92 394 463 419 92 463 272 242 464 289 389 466 399 289 466 128 324 467 402 128 467 254 253 468 396 254 468 446 456 469 457 438 470 465 457 470 358 277 472 277 435 472 450 426 473 426 457 473 457 465 473 431 432 474 432 440 474 440 462 474 409 431 474 462 471 474 437 409 474 438 437 474 470 438 474 471 470 474 255 260 475 330 255 475 421 458 476 428 434 477 125 124 478 390 424 479 429 390 479 383 429 479 462 460 480 470 471 480 471 462 480 434 447 481 477 434 481 3 67 482 67 72 482 447 428 482 72 454 482 454 447 482 25 3 482 428 477 482 456 450 483 469 456 483 450 473 483 37 38 484 451 37 484 38 40 484 154 153 484 40 41 484 41 154 484 469 483 487 356 360 488 375 356 488 360 453 488 413 375 488 44 42 490 42 25 490 25 482 490 482 477 490 317 276 492 276 396 492 153 157 493 411 410 494 127 145 494 448 414 495 470 480 495 460 448 497 480 460 497 448 495 497 495 480 497 439 402 499 402 467 499 444 416 500 478 444 500 380 365 501 365 401 502 401 444 502 501 365 502 478 124 502 444 478 502 377 349 503 349 416 503 486 507 508 496 485 508 477 481 509 481 489 509 489 485 509 253 265 510 468 253 510 36 37 511 37 451 511 447 446 512 481 447 512 446 469 512 469 487 512 487 486 512 489 481 512 485 489 512 486 508 512 508 485 512 77 81 513 424 77 513 381 272 514 272 464 514 490 477 515 477 509 515 509 506 515 410 415 516 415 449 516 494 410 516 449 127 516 127 494 516 500 416 517 486 487 518 507 486 518 487 483 518 465 470 519 470 495 519 473 465 519 167 152 520 388 167 520 152 257 520 257 388 520 162 156 521 519 495 522 451 484 523 484 153 523 153 493 523 493 498 523 511 451 523 506 509 524 95 97 525 350 95 525 97 112 525 265 344 527 510 265 527 122 119 529 119 162 529 162 521 529 521 528 529 508 507 530 507 518 530 510 527 532 529 528 533 528 532 533 476 458 534 458 479 534 479 424 534 424 513 534 264 399 535 442 264 535 399 466 535 170 122 536 122 529 536 529 533 536 174 170 536 124 121 537 121 380 537 380 501 537 501 502 537 502 124 537 532 527 538 533 532 538 536 533 538 367 175 539 344 367 539 527 344 539 538 527 539 47 44 540 44 490 540 490 515 540 174 536 541 536 538 541 175 174 541 539 175 541 538 539 541 521 156 544 528 521 544 145 152 545 152 411 545 411 494 545 494 145 545 483 473 546 518 483 546 473 519 546 519 522 546 355 357 547 531 355 547 81 82 548 513 81 548 476 534 548 534 513 548 505 511 549 468 510 550 510 532 550 532 528 550 528 544 550 491 504 551 542 491 551 523 498 551 498 542 551 511 523 551 549 511 551 422 443 552 463 355 553 355 531 553 419 463 553 543 419 553 91 93 554 93 387 554 387 419 554 419 543 554 298 312 555 389 298 555 128 126 556 500 128 556 478 500 556 211 222 557 324 211 557 467 324 557 335 386 558 386 383 558 383 479 558 554 543 560 24 36 561 36 511 561 354 404 562 524 509 563 552 560 565 126 125 566 125 478 566 478 556 566 556 126 566 414 439 567 439 499 567 495 414 567 522 495 567 499 467 567 467 557 567 546 522 567 517 416 568 504 491 569 41 40 570 39 41 570 20 21 571 526 20 571 21 24 571 505 526 571 40 38 572 570 40 572 509 485 573 563 509 573 485 496 573 222 237 575 557 222 575 416 444 577 444 401 577 401 452 577 452 377 577 377 503 577 503 416 577 468 550 579 550 544 579 544 578 579 564 559 580 241 151 581 151 578 581 156 241 581 544 156 581 578 544 581 531 547 582 37 36 584 38 37 584 572 38 584 508 530 585 575 574 585 82 84 586 548 82 586 476 548 586 11 4 587 4 39 589 39 570 589 570 572 589 572 584 589 587 4 589 163 161 591 588 163 591 242 232 592 232 392 592 392 455 592 464 242 592 24 21 593 36 24 593 584 36 593 511 505 595 561 511 595 24 561 595 571 24 595 505 571 595 551 504 596 504 569 596 596 569 597 22 17 598 17 590 598 543 553 599 553 531 599 531 565 599 560 543 599 565 560 599 157 158 600 493 157 600 498 493 600 542 498 600 559 564 600 491 542 600 576 491 600 564 576 600 158 580 602 580 559 602 559 600 602 600 158 602 563 573 603 573 562 603 237 433 604 575 237 604 574 575 604 582 547 605 601 160 606 13 12 607 18 13 607 594 18 607 163 588 608 27 32 612 32 23 612 250 352 613 366 250 613 459 366 613 352 381 613 601 606 614 160 159 615 159 606 615 606 160 615 492 396 616 396 468 616 468 579 616 579 578 616 606 159 617 166 609 617 526 505 618 505 549 618 549 551 618 551 596 618 21 20 619 593 21 619 20 18 619 18 594 619 594 607 619 546 567 620 567 557 620 530 518 620 585 530 620 518 546 620 557 575 620 575 585 620 57 49 621 49 47 621 515 506 621 60 57 621 47 540 621 540 515 621 569 491 624 491 576 624 610 611 624 576 623 624 597 569 624 623 610 624 31 27 625 34 31 625 27 612 625 591 161 626 161 160 626 160 601 626 588 591 626 588 622 630 562 573 631 573 496 631 496 508 631 508 585 631 585 574 631 574 604 631 614 606 632 606 617 632 15 11 633 11 587 633 16 15 633 17 16 633 590 17 633 598 590 633 601 614 634 626 601 634 622 588 634 588 626 634 443 420 635 458 443 635 420 335 635 335 558 635 479 458 635 558 479 635 158 163 636 580 158 636 163 608 636 596 597 637 20 526 639 622 634 640 23 22 641 22 598 641 612 23 641 617 609 642 632 617 642 85 86 643 84 85 644 85 643 644 586 84 644 611 610 645 630 622 645 622 640 645 416 349 646 349 430 646 568 416 646 430 629 646 141 118 647 118 317 647 317 492 647 151 141 647 492 616 647 578 151 648 616 578 648 151 647 648 647 616 648 596 637 651 597 624 651 637 597 651 506 524 652 621 506 652 453 459 654 459 613 654 624 611 655 611 628 655 583 651 655 651 624 655 628 638 656 655 628 656 593 619 657 619 607 657 627 657 658 657 607 658 90 91 659 91 554 659 554 560 659 576 564 660 623 576 660 564 580 660 580 636 660 610 623 660 593 657 661 89 90 662 90 659 662 560 552 662 659 560 662 608 588 664 636 608 664 588 630 664 660 636 664 645 610 664 610 660 664 630 645 664 614 632 665 632 642 665 634 614 665 640 634 665 649 640 665 650 649 665 430 411 666 629 430 666 435 408 667 661 435 667 589 584 667 584 593 667 593 661 667 159 168 669 617 159 669 413 488 670 312 330 671 555 312 671 168 166 672 669 168 672 166 617 672 617 669 672 103 104 673 101 103 673 420 422 674 455 420 674 464 592 674 592 455 674 628 611 676 611 645 676 645 640 676 640 649 676 443 421 677 421 476 677 644 643 677 476 586 677 586 644 677 433 354 678 604 433 678 354 562 678 562 631 678 631 604 678 98 101 679 101 673 679 565 531 680 531 582 680 582 605 680 663 565 680 381 514 681 514 668 681 613 381 681 618 596 682 653 618 682 535 466 683 598 633 683 641 598 683 442 535 685 587 589 685 589 667 685 408 442 685 667 408 685 633 587 685 683 633 686 633 685 686 535 683 686 685 535 686 679 673 688 357 413 689 547 357 689 413 670 689 358 472 690 164 169 692 687 164 692 682 596 693 653 682 693 169 171 696 692 169 696 166 165 697 609 166 697 650 665 697 665 642 697 642 609 697 165 687 697 695 650 697 687 695 697 641 683 698 87 89 699 89 662 699 86 87 699 662 552 699 625 612 700 612 641 700 35 34 700 34 625 700 641 698 700 690 472 701 657 627 701 10 9 702 12 10 702 607 12 702 8 7 702 7 691 702 9 8 702 658 607 702 330 475 703 687 692 704 695 687 704 692 696 704 453 654 705 650 695 706 695 704 706 704 694 706 472 435 707 435 661 707 661 657 707 657 701 707 701 472 707 679 688 708 688 658 708 7 6 708 691 7 708 658 702 708 702 691 708 654 613 709 613 681 709 705 654 709 681 668 709 656 638 710 655 656 710 563 603 711 524 563 711 652 524 711 500 517 712 422 552 714 552 565 714 565 663 714 680 605 714 663 680 714 638 628 715 628 676 715 649 650 715 676 649 715 650 706 715 694 638 715 706 694 715 552 443 716 443 677 716 699 552 716 643 86 716 86 699 716 677 643 716 165 164 717 164 687 717 687 165 717 111 118 718 360 356 718 118 220 718 220 360 718 162 353 719 353 119 719 395 162 719 466 389 720 683 466 720 698 683 720 389 555 720 700 698 720 703 700 720 119 123 721 719 119 721 488 453 722 453 705 722 670 488 722 102 318 723 318 713 723 713 684 723 668 514 724 638 694 725 710 638 725 318 299 726 299 358 726 627 658 726 701 627 726 658 688 726 688 684 726 713 318 726 358 690 726 690 701 726 684 713 726 194 192 727 347 395 728 395 719 728 123 194 728 721 123 728 719 721 728 696 171 729 671 330 730 330 703 730 555 671 730 703 720 730 720 555 730 167 191 731 666 411 731 689 670 732 670 722 732 722 705 732 155 167 733 167 388 733 149 190 734 192 149 734 727 192 734 194 727 735 728 194 735 339 347 735 734 339 735 347 728 735 727 734 735 190 155 736 155 733 736 388 321 736 733 388 736 321 230 737 230 339 737 734 190 737 190 736 737 736 321 737 339 734 737 596 651 739 651 583 739 675 693 739 693 596 739 673 104 740 684 688 740 688 673 740 104 102 740 102 723 740 723 684 740 26 28 741 29 30 741 30 33 741 28 29 741 33 35 741 35 700 741 700 703 741 703 475 741 19 26 741 475 260 741 245 303 742 404 245 742 562 404 742 603 562 742 711 603 742 694 704 743 704 696 743 696 729 743 188 167 745 167 731 745 411 188 745 731 411 745 605 547 746 547 689 746 689 732 746 725 694 747 738 725 747 694 743 747 147 146 748 514 464 749 464 674 749 674 422 749 422 714 749 605 746 750 732 705 750 746 732 750 724 514 751 514 749 751 749 714 751 714 605 751 605 750 751 138 128 753 128 500 753 173 138 753 500 712 753 77 76 754 76 172 754 150 147 755 147 748 755 172 177 756 177 752 756 752 754 756 754 172 756 755 748 757 3 25 758 129 3 758 25 42 758 130 129 758 146 130 758 748 146 758 705 709 759 709 668 759 668 724 759 724 751 759 750 705 759 751 750 759 85 84 760 84 82 761 760 84 761 82 81 763 81 77 765 763 81 765 77 754 765 754 752 765 764 763 765 142 148 766 765 752 768 764 765 768 710 725 769 725 738 769 738 744 769 148 150 770 766 148 770 150 755 770 755 757 771 770 755 771 757 762 771 142 766 772 766 770 772 761 82 773 82 763 773 763 764 773 655 710 774 710 769 774 177 176 775 752 177 775 176 171 776 775 176 776 738 747 777 744 738 778 738 777 778 2 19 779 106 2 779 19 741 779 110 106 779 260 110 779 741 260 779 85 760 780 757 748 782 748 758 782 762 757 782 583 655 783 655 774 783 739 583 783 618 653 784 770 771 787 86 85 788 85 780 788 785 86 788 87 86 789 86 785 789 89 87 789 772 770 790 770 787 790 161 163 791 760 761 792 761 773 792 780 760 792 792 773 795 768 752 798 752 775 798 764 768 798 176 177 800 171 176 800 729 171 800 159 160 802 790 787 804 775 776 805 798 775 805 793 798 805 139 142 807 142 772 807 793 805 808 130 146 810 758 42 811 791 781 812 161 791 812 781 801 812 160 161 813 799 160 813 712 517 814 173 753 814 753 712 814 161 812 815 813 161 815 794 809 816 785 788 819 788 780 819 780 792 819 792 818 819 773 764 820 764 798 820 798 793 820 795 773 820 792 795 820 776 171 821 805 776 821 171 169 821 808 805 821 159 802 822 160 799 822 802 160 822 191 155 824 155 193 824 666 731 824 731 191 824 49 57 825 57 767 825 819 818 826 675 739 829 517 568 830 90 89 831 89 789 831 18 20 833 20 639 833 526 618 833 618 784 833 639 526 833 133 131 834 762 782 835 771 762 835 787 771 835 133 139 838 139 807 838 143 120 839 120 159 839 159 822 839 675 829 841 119 122 842 123 119 842 122 135 842 135 170 842 774 769 843 739 783 843 783 774 843 796 823 843 823 739 843 826 818 845 193 149 846 149 195 846 568 646 846 646 629 846 824 193 846 629 666 846 666 824 846 826 845 848 170 305 849 842 170 849 821 169 851 772 790 853 790 804 853 789 785 854 785 819 854 819 826 854 831 789 854 828 831 854 826 848 854 807 772 855 772 853 855 838 807 855 804 787 856 787 835 856 853 804 856 174 186 857 305 174 857 849 305 857 133 838 858 859 836 862 136 123 863 123 842 863 197 136 863 195 197 863 846 195 863 777 747 864 92 93 866 853 856 867 844 860 868 801 852 868 860 801 868 794 816 868 816 862 868 852 794 868 862 836 868 131 133 869 133 858 869 812 801 870 801 860 870 815 812 870 860 844 870 806 861 871 786 847 872 818 792 875 792 820 875 845 818 875 806 871 876 876 871 877 793 808 878 820 793 878 801 781 879 852 801 879 93 91 880 146 147 882 810 146 882 875 820 883 42 44 884 811 42 884 47 49 884 49 825 884 44 47 884 782 758 884 825 782 884 758 811 884 91 90 885 90 831 885 831 828 885 880 91 885 844 868 887 868 836 887 874 844 887 133 834 888 835 832 889 856 835 889 867 856 889 832 881 889 139 133 890 840 139 890 133 888 890 93 880 891 836 859 892 887 836 894 827 877 894 877 887 894 836 892 894 892 827 894 164 165 895 175 184 896 849 857 898 842 849 898 863 842 898 846 863 898 866 93 899 93 891 899 891 866 899 837 786 900 786 872 900 169 164 901 164 886 901 851 169 901 797 874 902 877 871 902 874 887 902 887 877 902 835 782 903 832 835 903 881 832 903 866 891 905 838 855 906 858 838 906 855 853 906 653 693 907 848 845 908 854 848 908 134 132 909 828 854 910 885 828 910 880 885 910 891 880 910 905 891 910 65 78 912 568 846 913 846 898 913 830 568 913 871 861 914 861 893 914 902 871 914 797 902 914 889 881 915 915 881 916 854 908 917 888 834 918 890 888 918 803 904 919 893 861 920 867 889 921 889 915 921 861 806 922 920 861 922 904 803 923 921 915 924 803 919 925 747 743 926 864 747 926 800 177 926 743 729 926 729 800 926 905 910 927 910 854 927 854 917 927 820 878 929 883 820 929 825 767 930 906 853 931 847 817 932 872 847 932 927 917 933 918 834 934 1 83 935 83 79 935 79 71 935 915 916 936 925 915 936 853 867 937 931 853 937 867 921 937 148 142 938 909 132 939 886 164 940 164 895 940 901 886 940 166 168 941 186 175 942 175 896 942 857 186 942 830 913 942 898 857 942 913 898 942 851 901 943 901 940 943 808 821 944 821 851 944 851 943 944 878 808 944 929 878 944 943 929 944 134 909 945 909 939 945 873 840 946 840 890 946 890 918 946 78 92 947 912 78 947 92 866 947 803 912 947 923 803 947 739 823 948 829 739 948 841 829 948 781 791 949 879 781 949 791 163 949 163 879 949 915 925 950 925 919 950 806 876 951 922 806 951 876 928 951 862 816 952 859 862 952 872 932 952 892 859 952 932 892 952 943 940 953 940 895 954 953 940 954 814 517 955 517 830 955 896 184 955 830 942 955 942 896 955 925 936 956 916 881 956 936 916 956 799 813 957 813 815 957 815 870 957 60 621 958 71 66 958 935 71 958 66 60 958 621 652 958 924 915 959 915 950 959 850 897 961 897 920 961 920 922 961 850 865 962 865 934 962 893 920 963 920 897 963 897 850 963 850 962 963 869 858 964 858 906 964 906 931 964 132 131 964 939 132 964 131 869 964 873 946 965 62 65 967 65 912 967 912 803 967 803 925 967 925 956 967 178 173 968 173 814 968 184 178 968 955 184 968 814 955 968 866 905 969 923 947 969 947 866 969 809 794 970 816 809 971 952 816 971 900 872 971 872 952 971 809 970 971 911 960 972 953 954 974 131 132 975 834 131 975 934 834 975 845 875 976 908 845 976 917 908 976 875 883 976 165 166 977 166 941 977 895 165 977 954 895 977 974 954 977 147 150 978 882 147 978 150 148 978 148 938 978 918 934 979 934 865 979 946 918 979 865 850 979 850 961 979 961 972 979 905 927 980 927 933 980 969 905 980 137 134 981 134 945 981 945 939 981 893 963 982 876 877 984 877 827 984 827 892 984 892 932 984 928 876 984 711 742 985 742 303 985 142 139 986 139 840 986 938 142 986 840 873 986 922 951 987 951 928 987 928 983 987 120 143 988 168 120 988 143 213 988 941 168 988 213 219 988 921 924 989 924 959 989 782 825 990 825 930 990 903 782 990 933 917 991 980 933 991 937 921 992 921 989 992 969 980 993 980 991 993 960 911 994 953 974 995 931 937 996 937 992 996 964 931 996 959 950 997 989 959 997 950 919 998 997 950 998 917 976 999 991 917 999 883 929 1001 976 883 1001 999 976 1001 919 904 1002 998 919 1002 904 923 1002 923 969 1002 969 993 1002 938 986 1003 978 938 1003 870 844 1004 844 874 1004 874 797 1004 957 870 1004 881 903 1005 956 881 1005 967 956 1005 903 990 1005 797 914 1006 914 893 1006 1004 797 1006 893 982 1006 974 977 1008 995 974 1008 977 941 1008 941 988 1008 928 984 1009 984 973 1009 873 965 1010 986 873 1010 1003 986 1010 1000 1003 1010 227 137 1011 137 981 1011 219 227 1011 981 939 1011 929 943 1012 1001 929 1012 999 1001 1012 988 219 1013 219 1011 1013 1008 988 1013 932 817 1014 973 984 1014 984 932 1014 911 972 1015 994 911 1015 995 1008 1016 991 999 1017 1007 991 1017 999 1012 1017 964 996 1018 996 992 1018 992 989 1018 972 960 1019 979 972 1019 965 946 1019 946 979 1019 1010 965 1019 983 928 1020 928 1009 1020 817 847 1021 1014 817 1021 993 991 1022 1002 993 1022 997 998 1022 998 1002 1022 961 922 1023 972 961 1023 1015 972 1023 922 987 1023 163 158 1026 879 163 1026 794 852 1026 970 794 1026 852 879 1026 989 997 1028 1018 989 1028 997 1022 1028 991 1007 1029 1022 991 1029 1007 1017 1029 1028 1022 1029 652 711 1030 711 985 1030 943 953 1031 1012 943 1031 953 995 1031 995 1016 1031 1017 1012 1031 1029 1017 1031 958 652 1032 960 994 1033 1019 960 1033 1000 1010 1033 1010 1019 1033 994 1027 1033 847 786 1034 1021 847 1034 1024 1021 1034 1025 1024 1034 939 964 1035 964 1018 1035 1011 939 1035 1013 1011 1035 1018 1028 1035 962 934 1036 934 975 1036 134 294 1036 294 137 1036 132 134 1036 975 132 1036 1008 1013 1037 1016 1008 1037 1029 1031 1037 1031 1016 1037 1013 1035 1037 1028 1029 1037 1035 1028 1037 140 216 1038 216 143 1038 143 839 1038 822 799 1038 799 957 1038 839 822 1038 957 1004 1038 1006 140 1038 1004 1006 1038 963 962 1039 982 963 1039 137 140 1039 140 1006 1039 1006 982 1039 1036 137 1039 962 1036 1039 1003 1000 1040 1000 1033 1040 786 837 1041 1025 1034 1041 1034 786 1041 1033 1027 1042 1040 1033 1042 79 83 1043 930 767 1043 990 930 1043 1005 990 1043 1027 994 1044 1014 1021 1045 1021 1024 1045 1024 966 1045 1009 973 1046 973 1014 1046 1014 1045 1046 983 1020 1047 13 18 1048 18 833 1048 833 784 1048 71 79 1049 79 1043 1049 1043 767 1049 158 157 1050 970 1026 1050 1026 158 1050 837 900 1051 1041 837 1051 5 0 1052 0 98 1052 6 5 1052 708 6 1052 98 679 1052 679 708 1052 55 62 1053 62 967 1053 967 1005 1053 172 69 1054 177 172 1054 926 177 1054 769 744 1055 796 843 1055 843 769 1055 970 1050 1056 1050 157 1056 900 971 1056 1051 900 1056 971 970 1056 987 983 1057 810 882 1058 882 978 1058 978 1003 1058 72 1058 1059 1003 1040 1059 1058 1003 1059 983 1047 1060 1057 983 1060 1015 1023 1061 1023 987 1061 987 1057 1061 994 1015 1061 1044 994 1061 16 17 1062 15 16 1062 69 80 1064 1054 69 1064 926 1054 1064 12 13 1065 784 653 1065 653 907 1065 13 1048 1065 1048 784 1065 60 66 1066 57 60 1066 767 57 1066 66 71 1066 71 1049 1066 1049 767 1066 70 72 1067 72 1059 1067 73 70 1067 80 75 1069 1064 80 1069 864 926 1069 926 1064 1069 1042 1027 1070 1068 1042 1070 1027 1044 1070 744 778 1071 1055 744 1071 778 777 1072 777 864 1072 864 1069 1072 75 74 1072 74 1071 1072 1069 75 1072 1071 778 1072 1024 1025 1073 72 67 1074 67 130 1074 130 810 1074 810 1058 1074 1058 72 1074 1020 1009 1075 1047 1020 1075 1009 1046 1075 1059 1040 1076 1067 1059 1076 73 1067 1076 1040 1042 1076 1042 1068 1076 157 153 1077 153 1056 1077 1056 157 1077 9 10 1078 10 12 1078 12 1065 1078 1065 907 1078 1060 1047 1079 1047 1075 1079 1045 966 1080 1025 1041 1081 1041 1063 1081 1073 1025 1081 1046 1045 1082 1075 1046 1082 1045 1080 1082 59 63 1083 966 1024 1084 1080 966 1084 68 73 1086 73 1076 1086 1076 1068 1086 63 68 1086 1083 63 1086 1068 1070 1086 1070 1083 1086 1079 1075 1087 1075 1082 1087 4 11 1088 154 4 1088 1051 1056 1088 1056 153 1088 153 154 1088 1041 1051 1088 1063 1041 1088 96 94 1089 94 99 1090 1089 94 1090 958 1032 1090 1032 1089 1090 693 675 1091 675 841 1091 1079 1087 1092 7 8 1093 8 9 1093 9 1078 1093 1078 907 1093 907 693 1093 693 1091 1093 11 15 1094 1088 11 1094 15 1062 1094 1062 1063 1094 1063 1088 1094 1030 985 1095 652 1030 1095 1032 652 1095 95 96 1095 96 1089 1095 1089 1032 1095 88 1 1096 83 88 1096 1043 83 1096 1070 1044 1097 58 61 1097 61 59 1097 59 1083 1097 1083 1070 1097 97 95 1098 303 97 1098 985 303 1098 95 1095 1098 1095 985 1098 1082 1080 1099 1085 1087 1099 1087 1082 1099 22 23 1100 1073 1081 1100 1024 1073 1100 1084 1024 1100 51 52 1101 1087 1085 1101 1092 1087 1101 1044 1061 1102 1097 1044 1102 54 58 1102 58 1097 1102 1061 1057 1102 1063 1062 1103 1081 1063 1103 22 1100 1103 1100 1081 1103 1 48 1104 1096 1 1104 48 55 1104 55 1053 1104 1005 1043 1104 1043 1096 1104 1053 1005 1104 31 34 1105 1084 1100 1105 1080 1084 1106 1099 1080 1106 64 56 1107 74 64 1107 1071 74 1107 1055 1071 1107 1060 1079 1108 1079 1092 1108 1057 1060 1108 1102 1057 1108 50 54 1108 54 1102 1108 52 50 1108 1101 52 1108 1092 1101 1108 32 27 1109 1105 1100 1109 841 948 1110 1110 948 1111 17 22 1112 22 1103 1112 1062 17 1112 1103 1062 1112 34 35 1113 1105 34 1113 27 31 1114 31 1105 1114 1105 1109 1114 1109 27 1114 56 53 1115 823 796 1115 796 1055 1115 53 43 1115 43 1111 1115 948 823 1115 1111 948 1115 23 32 1116 1100 23 1116 32 1109 1116 1109 1100 1116 112 111 1117 364 350 1117 356 364 1117 350 525 1117 525 112 1117 7 1093 1118 1093 1091 1118 33 30 1119 29 28 1119 30 29 1119 1084 1105 1119 1106 1084 1119 35 33 1119 1113 35 1119 1105 1113 1119 111 718 1120 718 356 1120 356 1117 1120 1117 111 1120 1055 1107 1121 1115 1055 1121 1107 56 1121 56 1115 1121 1099 1106 1122 28 26 1122 1119 28 1122 1106 1119 1122 1091 841 1123 1110 0 1124 841 1110 1124 1123 841 1124 2 45 1125 45 46 1125 1101 1085 1125 46 51 1125 51 1101 1125 100 1 1126 1 935 1126 99 100 1126 1090 99 1126 935 958 1126 958 1090 1126 2 1125 1127 1125 1085 1127 19 2 1128 2 1127 1128 1085 1099 1128 1127 1085 1128 1099 1122 1128 1118 1091 1129 1091 1123 1129 26 19 1130 1122 26 1130 19 1128 1130 1128 1122 1130 0 5 1131 5 6 1131 6 1129 1131 1123 1124 1131 1129 1123 1131 14 0 1132 0 1110 1132 43 14 1132 1111 43 1132 1110 1111 1132 6 7 1133 7 1118 1133 1118 1129 1133 1129 6 1133 1124 0 1134 0 1131 1134 1131 1124 1134 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/ref/CMYK_FOGRA_MediaWedge_V3.ti1000644 000765 000000 00000005217 12025152306 023102 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 1" ORIGINATOR "Argyll target" CREATED "Sun Feb 01 18:20:41 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "OUTPUT" KEYWORD "COLOR_REP" COLOR_REP "CMYK" KEYWORD "TOTAL_INK_LIMIT" TOTAL_INK_LIMIT "300" NUMBER_OF_FIELDS 9 BEGIN_DATA_FORMAT SAMPLE_ID CMYK_C CMYK_M CMYK_Y CMYK_K END_DATA_FORMAT NUMBER_OF_SETS 72 BEGIN_DATA 1 100.00 0.0000 0.0000 0.0000 2 70.000 0.0000 0.0000 0.0000 3 40.000 0.0000 0.0000 0.0000 4 20.000 0.0000 0.0000 0.0000 5 10.000 0.0000 0.0000 0.0000 6 0.0000 100.00 0.0000 0.0000 7 0.0000 70.000 0.0000 0.0000 8 0.0000 40.000 0.0000 0.0000 9 0.0000 20.000 0.0000 0.0000 10 0.0000 10.000 0.0000 0.0000 11 0.0000 0.0000 100.00 0.0000 12 0.0000 0.0000 70.000 0.0000 13 0.0000 0.0000 40.000 0.0000 14 0.0000 0.0000 20.000 0.0000 15 0.0000 0.0000 10.000 0.0000 16 0.0000 0.0000 0.0000 10.000 17 0.0000 0.0000 0.0000 20.000 18 0.0000 0.0000 0.0000 40.000 19 0.0000 0.0000 0.0000 60.000 20 0.0000 0.0000 0.0000 80.000 21 0.0000 0.0000 0.0000 100.00 22 0.0000 100.00 0.0000 100.00 23 0.0000 70.000 70.000 60.000 24 0.0000 0.0000 70.000 80.000 25 100.00 100.00 0.0000 0.0000 26 70.000 70.000 0.0000 0.0000 27 40.000 40.000 0.0000 0.0000 28 20.000 20.000 0.0000 0.0000 29 10.000 10.000 0.0000 0.0000 30 0.0000 100.00 100.00 0.0000 31 0.0000 70.000 70.000 0.0000 32 0.0000 40.000 40.000 0.0000 33 0.0000 20.000 20.000 0.0000 34 0.0000 10.000 10.000 0.0000 35 100.00 0.0000 100.00 0.0000 36 70.000 0.0000 70.000 0.0000 37 40.000 0.0000 40.000 0.0000 38 20.000 0.0000 20.000 0.0000 39 10.000 0.0000 10.000 0.0000 40 10.000 6.0000 6.0000 0.0000 41 20.000 12.000 12.000 0.0000 42 40.000 27.000 27.000 0.0000 43 60.000 45.000 45.000 0.0000 44 80.000 65.000 65.000 0.0000 45 100.00 85.000 85.000 0.0000 46 100.00 0.0000 0.0000 100.00 47 20.000 100.00 70.000 60.000 48 70.000 0.0000 70.000 80.000 49 100.00 100.00 100.00 0.0000 50 70.000 70.000 70.000 0.0000 51 40.000 40.000 40.000 0.0000 52 20.000 20.000 20.000 0.0000 53 10.000 10.000 10.000 0.0000 54 20.000 70.000 70.000 0.0000 55 40.000 70.000 70.000 20.000 56 40.000 100.00 100.00 20.000 57 40.000 100.00 40.000 20.000 58 40.000 40.000 100.00 20.000 59 100.00 40.000 100.00 20.000 60 100.00 40.000 40.000 20.000 61 100.00 100.00 40.000 20.000 62 10.000 40.000 40.000 0.0000 63 0.0000 40.000 100.00 0.0000 64 0.0000 100.00 40.000 0.0000 65 40.000 100.00 0.0000 0.0000 66 40.000 0.0000 100.00 0.0000 67 100.00 0.0000 40.000 0.0000 68 100.00 40.000 0.0000 0.0000 69 0.0000 0.0000 0.0000 0.0000 70 0.0000 0.0000 100.00 100.00 71 0.0000 70.000 0.0000 60.000 72 70.000 0.0000 0.0000 80.000 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/ref/CMYK_IDEAlliance_ControlStrip_2009.ti1000644 000765 000000 00000004010 12025152306 025035 0ustar00svpwheel000000 000000 CTI3 DESCRIPTOR "Argyll Calibration Target chart information 1" ORIGINATOR "Argyll target" CREATED "Mon Jan 24 02:20:54 2011" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "OUTPUT" KEYWORD "COLOR_REP" COLOR_REP "CMYK" KEYWORD "TOTAL_INK_LIMIT" TOTAL_INK_LIMIT "320" NUMBER_OF_FIELDS 9 BEGIN_DATA_FORMAT SAMPLE_ID CMYK_C CMYK_M CMYK_Y CMYK_K END_DATA_FORMAT NUMBER_OF_SETS 54 BEGIN_DATA 1 100.00 0.0000 0.0000 60.000 2 100.00 100.00 0.0000 60.000 3 100.00 0.0000 0.0000 0.0000 4 100.00 100.00 0.0000 0.0000 5 70.000 0.0000 0.0000 0.0000 6 70.000 70.000 0.0000 0.0000 7 30.000 0.0000 0.0000 0.0000 8 30.000 30.000 0.0000 0.0000 9 0.0000 100.00 0.0000 60.000 10 0.0000 100.00 100.00 60.000 11 0.0000 100.00 0.0000 0.0000 12 0.0000 100.00 100.00 0.0000 13 0.0000 70.000 0.0000 0.0000 14 0.0000 70.000 70.000 0.0000 15 0.0000 30.000 0.0000 0.0000 16 0.0000 30.000 30.000 0.0000 17 0.0000 0.0000 100.00 60.000 18 100.00 0.0000 100.00 60.000 19 0.0000 0.0000 100.00 0.0000 20 100.00 0.0000 100.00 0.0000 21 0.0000 0.0000 70.000 0.0000 22 70.000 0.0000 70.000 0.0000 23 0.0000 0.0000 30.000 0.0000 24 30.000 0.0000 30.000 0.0000 25 100.00 0.0000 40.000 0.0000 26 100.00 40.000 0.0000 0.0000 27 40.000 100.00 0.0000 0.0000 28 0.0000 100.00 40.000 0.0000 29 0.0000 40.000 100.00 0.0000 30 40.000 0.0000 100.00 0.0000 31 0.0000 40.000 70.000 40.000 32 10.000 40.000 40.000 0.0000 33 0.0000 70.000 40.000 40.000 34 20.000 70.000 70.000 0.0000 35 40.000 70.000 0.0000 40.000 36 0.0000 70.000 70.000 40.000 37 40.000 0.0000 70.000 40.000 38 70.000 0.0000 40.000 40.000 39 70.000 40.000 0.0000 40.000 40 0.0000 0.0000 0.0000 0.0000 41 0.0000 0.0000 0.0000 3.0000 42 3.1000 2.2000 2.2000 0.0000 43 0.0000 0.0000 0.0000 10.000 44 10.200 7.4000 7.4000 0.0000 45 0.0000 0.0000 0.0000 25.000 46 25.000 19.000 19.000 0.0000 47 0.0000 0.0000 0.0000 50.000 48 50.000 40.000 40.000 0.0000 49 0.0000 0.0000 0.0000 75.000 50 75.000 66.000 66.000 0.0000 51 0.0000 0.0000 0.0000 90.000 52 100.00 100.00 100.00 0.0000 53 0.0000 0.0000 0.0000 100.00 54 80.000 70.000 70.000 100.00 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/ref/DCI_P3.icm000644 000765 000000 00000001074 12112730202 020001 0ustar00svpwheel000000 000000 6v6677T777848l8899O999:3:m::;;T;;<<<>O>>????{??@0@l@@A#A`AABBUBBCCMCCDDFDDEEBEEFF?FFFG?GGHH@HHIICIIJJIJJKKPKKLLZLLM"MeMMN/NrNNO>OOP PNPPQQaQQR1RvRSSGSSTT`TTU3UzUVVOVVW%WmWWXEXXYYfYYZAZZ[[f[[\C\\]!]l]^^K^^_,_x_``Z``a>aab"bobccUccd=dde%eseff]ffgHggh5hhi#irijjajkkRkklCllm6mmn)n{noopoppgpq q_qrrWrrsRsstMttuIuuvGvvwEwwxExxyFyyzIzz{L{{|Q||}V}~~]~ foȁ yӂ,߃8FU evш-@T jnj$ލ;Tn̐+GdÓ#BbÖ#Fi˙,Ryۜ>gʞ-X M{Euڥ@ rا? sکAw߫GO!\Ű.kղ?T*l׷C`̺9ZȽ5\9dBò"ĒrS5ǥȈjN2ˤ̉nT:ϭ!Е|eM7Ԭ!Ֆ ցlXDٻ1ڨۖ ܄scSC5& ymbWMC:2*# ~{yxwwwxy{~chrmGW O\Q'dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec601_525_60_Gamma22.icm000644 000765 000000 00000001134 12112730202 022143 0ustar00svpwheel000000 000000 \argl mntrRGB XYZ  -acspMSFT-Zi(kܒ J?q desccprt5wtptbkptrXYZgXYZbXYZrTRC(gTRC(bTRC(chrm8$desc'Rec. ITU-R BT.601-7, 525/60, Gamma 2.2textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ j8~XYZ d aXYZ '5Kcurv3chrmGW O\Q'dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec601_525_60_Gamma235.icm000644 000765 000000 00000001134 12112730202 022231 0ustar00svpwheel000000 000000 \argl mntrRGB XYZ  -acspMSFT-ʳ)sϒ~ $~< desccprt5wtptbkptrXYZgXYZbXYZrTRC(gTRC(bTRC(chrm8$desc(Rec. ITU-R BT.601-7, 525/60, Gamma 2.35textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ j8~XYZ d aXYZ '5KcurvYchrmGW O\Q'dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec601_525_60_Gamma24.icm000644 000765 000000 00000001134 12112730202 022145 0ustar00svpwheel000000 000000 \argl mntrRGB XYZ  -acspMSFT-|!5we` desccprt5wtptbkptrXYZgXYZbXYZrTRC(gTRC(bTRC(chrm8$desc'Rec. ITU-R BT.601-7, 525/60, Gamma 2.4textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ j8~XYZ d aXYZ '5KcurvfchrmGW O\Q'dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec601_625_50.icm000644 000765 000000 00000005114 12112730202 020677 0ustar00svpwheel000000 000000 Largl mntrRGB XYZ  -acspMSFT-`b! descvcprt5wtptbkptrXYZgXYZbXYZrTRC gTRC bTRC chrm ($descRec. ITU-R BT.601-7, 625/50textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ t;wXYZ ^3XYZ $/Ucurv+9GUdr+9GVdr+9HVdr+:HVds,:HVes-<K[jz +<M^o 1CUhz%9L`t   + ? T i ~  + A W m # : Q h  ' ? X p   8 Q k !;Up-Id (Da}+If7Vt-Ll *Jj -No8Z|'Jl?c:^:_@f%Kr 5\"Jr<e 3 \ !!-!X!!!"","W"""##/#Z###$ $6$b$$$%%A%n%%%&#&P&~&&''6'd'''((M(|(() )9)h)))*'*W***++I+z++, ,?,p,,--7-i---.2.d.../0/c///010e001151i1122<2q2233F3{3344S4445,5c5566>6v6677T777848l8899O999:3:m::;;T;;<<<>O>>????{??@0@l@@A#A`AABBUBBCCMCCDDFDDEEBEEFF?FFFG?GGHH@HHIICIIJJIJJKKPKKLLZLLM"MeMMN/NrNNO>OOP PNPPQQaQQR1RvRSSGSSTT`TTU3UzUVVOVVW%WmWWXEXXYYfYYZAZZ[[f[[\C\\]!]l]^^K^^_,_x_``Z``a>aab"bobccUccd=dde%eseff]ffgHggh5hhi#irijjajkkRkklCllm6mmn)n{noopoppgpq q_qrrWrrsRsstMttuIuuvGvvwEwwxExxyFyyzIzz{L{{|Q||}V}~~]~ foȁ yӂ,߃8FU evш-@T jnj$ލ;Tn̐+GdÓ#BbÖ#Fi˙,Ryۜ>gʞ-X M{Euڥ@ rا? sکAw߫GO!\Ű.kղ?T*l׷C`̺9ZȽ5\9dBò"ĒrS5ǥȈjN2ˤ̉nT:ϭ!Е|eM7Ԭ!Ֆ ցlXDٻ1ڨۖ ܄scSC5& ymbWMC:2*# ~{yxwwwxy{~chrmTzJ=&f\dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec601_625_50_Gamma22.icm000644 000765 000000 00000001134 12112730202 022143 0ustar00svpwheel000000 000000 \argl mntrRGB XYZ  -acspMSFT-g&A։{ `NJ desccprt5wtptbkptrXYZgXYZbXYZrTRC(gTRC(bTRC(chrm8$desc'Rec. ITU-R BT.601-7, 625/50, Gamma 2.2textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ t;wXYZ ^3XYZ $/Ucurv3chrmTzJ=&f\dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec601_625_50_Gamma235.icm000644 000765 000000 00000001134 12112730202 022231 0ustar00svpwheel000000 000000 \argl mntrRGB XYZ  -acspMSFT-H/5VA|% desccprt5wtptbkptrXYZgXYZbXYZrTRC(gTRC(bTRC(chrm8$desc(Rec. ITU-R BT.601-7, 625/50, Gamma 2.35textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ t;wXYZ ^3XYZ $/UcurvYchrmTzJ=&f\dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec601_625_50_Gamma24.icm000644 000765 000000 00000001134 12112730202 022145 0ustar00svpwheel000000 000000 \argl mntrRGB XYZ  -acspMSFT-ȕ>t smƒ desccprt5wtptbkptrXYZgXYZbXYZrTRC(gTRC(bTRC(chrm8$desc'Rec. ITU-R BT.601-7, 625/50, Gamma 2.4textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ t;wXYZ ^3XYZ $/UcurvfchrmTzJ=&f\dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec709_Gamma22.icm000644 000765 000000 00000001120 12112730202 021247 0ustar00svpwheel000000 000000 Pargl mntrRGB XYZ  -acspMSFT-ԡZ6Po descucprt5wtptbkptrXYZgXYZbXYZrTRCgTRCbTRCchrm,$descRec. 709 (HDTV), Gamma 2.2textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ o8XYZ bXYZ $curv3chrmTzL&f\dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec709_Gamma235.icm000644 000765 000000 00000001120 12112730202 021335 0ustar00svpwheel000000 000000 Pargl mntrRGB XYZ  -acspMSFT-Vh\N\J4 descvcprt5wtptbkptrXYZgXYZbXYZrTRCgTRCbTRCchrm,$descRec. 709 (HDTV), Gamma 2.35textPublic Domain. No Warranty, Use at own risk.XYZ QXYZ XYZ o8XYZ bXYZ $curvYchrmTzL&f\dispcalGUI-1.7.1.6/dispcalGUI/ref/Rec709_Gamma24.icm000644 000765 000000 00000001120 12112730202 021251 0ustar00svpwheel000000 000000 Pargl mntrRGB XYZ  -acspMSFT-.2sL?"N R g |  & < R h ~   2 I ` w   4 L d }  ) B \ u )C]w3Ni+Gc+He4Rp'Fe!@`!Bb(Jk7Y{)Lo DhAfDj'Ms 3ZFm 5^ ) R { ! !J!t!!!""F"q"""##G#r###$$K$w$$$%'%T%%%&&3&`&&&''C'q'''()(W((())@)o)))*,*\***++K+|++, ,>,o,,--3-e---.+.].../&/Y///0$0X0001%1Y1112)2]222303e3344:4o4455F5|5566V666717h7788F8~889&9^99::@:y::;$;];;< >P>>??=?x??@+@g@@AAXAABBKBBCC?C}CCD6DtDDE.EmEEF)FhFFG%GdGGH#HcHHI$IdIIJ&JgJJK*KkKKL0LrLLM8MzMMNBNNO ONOOPP\PPQ(QlQQR9R~RSSLSSTTaTTU3UyUVVKVVWWfWWX;XXYYZYYZ2ZzZ[ [S[[\.\w\] ]S]]^0^z^__Y__`8``aadaabGbbc*cvcdd[ddeBeef)fvfgg_gghIhhi4iij jojk k]kklKllm;mmn-n}noopoppdpqqXqqrNrrsFsst>ttu7uuv2vvw.wwx+xxy)y~yz(z}z{({~{|*||}-}}~0~~5;CKU_kņx҇->??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv  *5AO^o+Jj%O{ >sY]3lk  { :  h ;  n^VV_p?nD-~*: !_""#$Y%%&'v(C))*+,f-A../0123{4h5W6H7<829+:%;"<"=$>(?.@7ABBOC_DqEFGHIKL3MXNOPRS5TiUVXYOZ[]^\_`b?cdf8ghjGkmnloq>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv(<Pcw 9To2W}%SM2o/sG*z  r y 2 U ^<!%Af,fLD !P""#p$*$%&d'&'(){*F++,-.a/:0012345i6U7B839%:;< =>?@ ABC#D0E?FQGeH|IJKLNO9PaQRSUVPWXY[=\~]_ `Rabd>efh@ijl[mo$pqsftvJwy9z|2}7Fх_P5ܕ2⚔Iy9¨V%ʱ{W7±ĥƜȕʒ̑ΔЙҡԭֻ.NqM3ttextCTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "97" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "9" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "9" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "33" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" KEYWORD "USE_BLACK_POINT_COMPENSATION" USE_BLACK_POINT_COMPENSATION "NO" BEGIN_ARGYLL_COLPROF_ARGS -qh -bl -ax END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 1399 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 0.00000 50.0000 25.0000 9.48738 16.5179 8.31499 3 0.00000 62.5000 37.5000 15.4124 26.5039 16.0335 4 37.5000 62.5000 37.5000 20.1494 28.9463 16.2555 5 68.7500 56.2500 6.25000 28.4553 29.6752 5.57215 6 87.5000 75.0000 12.5000 49.9236 53.6516 9.93103 7 73.9583 73.9583 73.9583 48.6594 51.1377 55.6166 8 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 9 10.4167 10.4167 10.4167 2.00521 2.05749 2.15195 10 0.00000 0.00000 9.37500 1.16227 1.06490 1.85470 11 6.25000 0.00000 0.00000 1.21051 1.10854 1.00986 12 12.5000 0.00000 0.00000 1.58591 1.30210 1.02745 13 15.6250 0.00000 0.00000 1.86037 1.44361 1.04032 14 18.7500 0.00000 0.00000 2.19807 1.61773 1.05614 15 21.8750 0.00000 0.00000 2.60260 1.82631 1.07510 16 25.0000 0.00000 0.00000 3.07728 2.07105 1.09734 17 28.1250 0.00000 0.00000 3.62521 2.35357 1.12301 18 31.2500 0.00000 0.00000 4.24932 2.67536 1.15226 19 34.3750 0.00000 0.00000 4.95236 3.03785 1.18520 20 37.5000 0.00000 0.00000 5.73696 3.44239 1.22197 21 40.6250 0.00000 0.00000 6.60561 3.89027 1.26267 22 43.7500 0.00000 0.00000 7.56070 4.38272 1.30742 23 46.8750 0.00000 0.00000 8.60454 4.92093 1.35634 24 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 25 53.1250 0.00000 0.00000 10.9672 6.13913 1.46705 26 56.2500 0.00000 0.00000 12.2903 6.82130 1.52904 27 59.3750 0.00000 0.00000 13.7105 7.55355 1.59559 28 62.5000 0.00000 0.00000 15.2297 8.33690 1.66678 29 65.6250 0.00000 0.00000 16.8500 9.17230 1.74270 30 68.7500 0.00000 0.00000 18.5730 10.0607 1.82344 31 71.8750 0.00000 0.00000 20.4007 11.0031 1.90908 32 75.0000 0.00000 0.00000 22.3346 12.0002 1.99970 33 78.1250 0.00000 0.00000 24.3766 13.0531 2.09539 34 81.2500 0.00000 0.00000 26.5283 14.1625 2.19621 35 84.3750 0.00000 0.00000 28.7913 15.3293 2.30225 36 87.5000 0.00000 0.00000 31.1672 16.5543 2.41358 37 90.6250 0.00000 0.00000 33.6575 17.8383 2.53027 38 93.7500 0.00000 0.00000 36.2638 19.1821 2.65240 39 96.8750 0.00000 0.00000 38.9875 20.5865 2.78003 40 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 41 9.37500 0.00000 0.00000 1.37074 1.19116 1.01737 42 0.00000 0.00000 3.12500 1.04323 1.01729 1.22767 43 0.00000 6.25000 0.00000 1.18254 1.36502 1.06085 44 0.00000 12.5000 0.00000 1.50806 2.01598 1.16935 45 0.00000 15.6250 0.00000 1.74606 2.49191 1.24869 46 0.00000 18.7500 0.00000 2.03889 3.07749 1.34630 47 0.00000 21.8750 0.00000 2.38967 3.77895 1.46323 48 0.00000 25.0000 0.00000 2.80128 4.60205 1.60043 49 0.00000 28.1250 0.00000 3.27641 5.55219 1.75881 50 0.00000 31.2500 0.00000 3.81760 6.63441 1.93921 51 0.00000 34.3750 0.00000 4.42723 7.85350 2.14242 52 0.00000 37.5000 0.00000 5.10758 9.21400 2.36920 53 0.00000 40.6250 0.00000 5.86081 10.7203 2.62028 54 0.00000 43.7500 0.00000 6.68900 12.3764 2.89635 55 0.00000 46.8750 0.00000 7.59415 14.1865 3.19807 56 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 57 0.00000 53.1250 0.00000 9.64291 18.2834 3.88099 58 0.00000 56.2500 0.00000 10.7902 20.5776 4.26342 59 0.00000 59.3750 0.00000 12.0217 23.0402 4.67392 60 0.00000 62.5000 0.00000 13.3391 25.6747 5.11306 61 0.00000 65.6250 0.00000 14.7441 28.4843 5.58139 62 0.00000 68.7500 0.00000 16.2382 31.4721 6.07943 63 0.00000 71.8750 0.00000 17.8230 34.6412 6.60771 64 0.00000 75.0000 0.00000 19.5000 37.9948 7.16671 65 0.00000 78.1250 0.00000 21.2707 41.5357 7.75694 66 0.00000 81.2500 0.00000 23.1365 45.2667 8.37888 67 0.00000 84.3750 0.00000 25.0988 49.1908 9.03299 68 0.00000 87.5000 0.00000 27.1590 53.3106 9.71972 69 0.00000 90.6250 0.00000 29.3184 57.6289 10.4395 70 0.00000 93.7500 0.00000 31.5784 62.1482 11.1929 71 0.00000 96.8750 0.00000 33.9402 66.8713 11.9802 72 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 73 0.00000 9.37500 0.00000 1.32148 1.64288 1.10716 74 1.04167 1.04167 1.04167 1.07587 1.07982 1.08695 75 0.00000 0.00000 6.25000 1.09214 1.03685 1.48530 76 11.4583 11.4583 11.4583 2.17040 2.23126 2.34125 77 0.00000 0.00000 15.6250 1.37658 1.15061 2.98349 78 0.00000 0.00000 18.7500 1.52439 1.20972 3.76201 79 0.00000 0.00000 21.8750 1.70145 1.28053 4.69460 80 0.00000 0.00000 25.0000 1.90921 1.36363 5.78891 81 0.00000 0.00000 28.1250 2.14904 1.45954 7.05211 82 0.00000 0.00000 31.2500 2.42221 1.56879 8.49092 83 0.00000 0.00000 34.3750 2.72992 1.69186 10.1117 84 0.00000 0.00000 37.5000 3.07334 1.82920 11.9205 85 0.00000 0.00000 40.6250 3.45354 1.98126 13.9230 86 0.00000 0.00000 43.7500 3.87158 2.14845 16.1249 87 0.00000 0.00000 46.8750 4.32846 2.33117 18.5313 88 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 89 0.00000 0.00000 53.1250 5.36259 2.74476 23.9782 90 0.00000 0.00000 56.2500 5.94168 2.97636 27.0283 91 0.00000 0.00000 59.3750 6.56328 3.22496 30.3024 92 0.00000 0.00000 62.5000 7.22826 3.49091 33.8049 93 0.00000 0.00000 65.6250 7.93744 3.77454 37.5402 94 0.00000 0.00000 68.7500 8.69161 4.07616 41.5125 95 0.00000 0.00000 71.8750 9.49155 4.39609 45.7259 96 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 97 0.00000 0.00000 78.1250 11.2318 5.09208 54.8920 98 0.00000 0.00000 81.2500 12.1736 5.46873 59.8524 99 0.00000 0.00000 84.3750 13.1641 5.86486 65.0694 100 0.00000 0.00000 87.5000 14.2040 6.28076 70.5467 101 0.00000 0.00000 90.6250 15.2940 6.71668 76.2878 102 0.00000 0.00000 93.7500 16.4347 7.17291 82.2963 103 0.00000 0.00000 96.8750 17.6269 7.64970 88.5755 104 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 105 0.00000 0.00000 75.0000 10.3380 4.73463 50.1844 106 0.00000 0.00000 12.5000 1.25645 1.10256 2.35074 107 3.12500 3.12500 3.12500 1.22762 1.23945 1.26085 108 2.08333 2.08333 2.08333 1.15175 1.15964 1.17390 109 4.16667 4.16667 4.16667 1.30372 1.31952 1.34806 110 5.20833 5.20833 5.20833 1.38828 1.40847 1.44496 111 6.25000 6.25000 6.25000 1.48518 1.51041 1.55601 112 0.00000 12.5000 12.5000 1.76451 2.11854 2.52009 113 8.33333 8.33333 8.33333 1.71786 1.75519 1.82265 114 0.00000 3.12500 0.00000 1.08564 1.17125 1.02855 115 9.37500 9.37500 9.37500 1.85450 1.89893 1.97923 116 7.29167 7.29167 7.29167 1.59489 1.62583 1.68173 117 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 118 13.5417 13.5417 13.5417 2.54563 2.62600 2.77126 119 14.5833 14.5833 14.5833 2.75638 2.84772 3.01278 120 15.6250 15.6250 15.6250 2.98301 3.08613 3.27249 121 17.7083 17.7083 17.7083 3.48519 3.61442 3.84797 122 18.7500 18.7500 18.7500 3.76135 3.90494 4.16445 123 19.7917 19.7917 19.7917 4.05464 4.21348 4.50055 124 20.8333 20.8333 20.8333 4.36533 4.54033 4.85660 125 21.8750 21.8750 21.8750 4.69372 4.88579 5.23292 126 22.9167 22.9167 22.9167 5.04007 5.25016 5.62984 127 23.9583 23.9583 23.9583 5.40467 5.63371 6.04766 128 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 129 26.0417 26.0417 26.0417 6.18963 6.45949 6.94721 130 27.0833 27.0833 27.0833 6.61052 6.90226 7.42953 131 28.1250 28.1250 28.1250 7.05067 7.36530 7.93393 132 29.1667 29.1667 29.1667 7.51032 7.84886 8.46069 133 30.2083 30.2083 30.2083 7.98973 8.35320 9.01009 134 31.2500 31.2500 31.2500 8.48913 8.87856 9.58238 135 32.2917 32.2917 32.2917 9.00874 9.42519 10.1778 136 33.3333 33.3333 33.3333 9.54879 9.99333 10.7967 137 34.3750 34.3750 34.3750 10.1095 10.5832 11.4393 138 35.4167 35.4167 35.4167 10.6911 11.1951 12.1058 139 36.4583 36.4583 36.4583 11.2938 11.8291 12.7965 140 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 141 38.5417 38.5417 38.5417 12.5634 13.1647 14.2514 142 39.5833 39.5833 39.5833 13.2307 13.8667 15.0161 143 40.6250 40.6250 40.6250 13.9200 14.5918 15.8060 144 41.6667 41.6667 41.6667 14.6313 15.3402 16.6212 145 42.7083 42.7083 42.7083 15.3650 16.1120 17.4620 146 43.7500 43.7500 43.7500 16.1213 16.9076 18.3287 147 44.7917 44.7917 44.7917 16.9003 17.7271 19.2214 148 45.8333 45.8333 45.8333 17.7021 18.5707 20.1403 149 46.8750 46.8750 46.8750 18.5272 19.4386 21.0857 150 47.9167 47.9167 47.9167 19.3754 20.3310 22.0579 151 48.9583 48.9583 48.9583 20.2472 21.2481 23.0569 152 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 153 51.0417 51.0417 51.0417 22.0619 23.1572 25.1365 154 52.0833 52.0833 52.0833 23.0052 24.1495 26.2175 155 53.1250 53.1250 53.1250 23.9727 25.1673 27.3263 156 54.1667 54.1667 54.1667 24.9646 26.2107 28.4629 157 55.2083 55.2083 55.2083 25.9810 27.2800 29.6277 158 56.2500 56.2500 56.2500 27.0221 28.3752 30.8208 159 57.2917 57.2917 57.2917 28.0881 29.4967 32.0424 160 58.3333 58.3333 58.3333 29.1791 30.6444 33.2927 161 59.3750 59.3750 59.3750 30.2954 31.8187 34.5719 162 60.4167 60.4167 60.4167 31.4370 33.0197 35.8802 163 61.4583 61.4583 61.4583 32.6042 34.2476 37.2177 164 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 165 63.5417 63.5417 63.5417 35.0158 36.7846 39.9814 166 64.5833 64.5833 64.5833 36.2605 38.0941 41.4078 167 65.6250 65.6250 65.6250 37.5315 39.4311 42.8643 168 66.6667 66.6667 66.6667 38.8287 40.7958 44.3509 169 67.7083 67.7083 67.7083 40.1524 42.1884 45.8679 170 68.7500 68.7500 68.7500 41.5028 43.6089 47.4154 171 69.7917 69.7917 69.7917 42.8800 45.0577 48.9935 172 70.8333 70.8333 70.8333 44.2840 46.5348 50.6026 173 71.8750 71.8750 71.8750 45.7152 48.0404 52.2427 174 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 175 12.5000 37.5000 37.5000 7.76682 10.3453 13.3171 176 72.9167 72.9167 72.9167 47.1736 49.5746 53.9140 177 76.0417 76.0417 76.0417 51.7136 54.3507 59.1167 178 77.0833 77.0833 77.0833 53.2824 56.0011 60.9145 179 78.1250 78.1250 78.1250 54.8791 57.6808 62.7443 180 79.1667 79.1667 79.1667 56.5039 59.3901 64.6063 181 80.2083 80.2083 80.2083 58.1569 61.1291 66.5006 182 81.2500 81.2500 81.2500 59.8383 62.8979 68.4275 183 82.2917 82.2917 82.2917 61.5482 64.6967 70.3870 184 83.3333 83.3333 83.3333 63.2868 66.5257 72.3793 185 84.3750 84.3750 84.3750 65.0541 68.3849 74.4046 186 85.4167 85.4167 85.4167 66.8503 70.2745 76.4631 187 86.4583 86.4583 86.4583 68.6756 72.1947 78.5548 188 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 189 88.5417 88.5417 88.5417 72.4138 76.1273 82.8387 190 89.5833 89.5833 89.5833 74.3270 78.1400 85.0312 191 90.6250 90.6250 90.6250 76.2698 80.1838 87.2576 192 91.6667 91.6667 91.6667 78.2423 82.2589 89.5180 193 92.7083 92.7083 92.7083 80.2446 84.3653 91.8126 194 93.7500 93.7500 93.7500 82.2769 86.5032 94.1415 195 94.7917 94.7917 94.7917 84.3392 88.6728 96.5049 196 95.8333 95.8333 95.8333 86.4317 90.8742 98.9029 197 96.8750 96.8750 96.8750 88.5546 93.1074 101.336 198 97.9167 97.9167 97.9167 90.7080 95.3727 103.803 199 98.9583 98.9583 98.9583 92.8919 97.6702 106.306 200 12.5000 12.5000 0.00000 2.09397 2.31807 1.19681 201 25.0000 12.5000 0.00000 3.58534 3.08703 1.26669 202 37.5000 12.5000 0.00000 6.24502 4.45837 1.39132 203 50.0000 12.5000 0.00000 10.2474 6.52201 1.57886 204 62.5000 12.5000 0.00000 15.7378 9.35287 1.83614 205 75.0000 12.5000 0.00000 22.8427 13.0162 2.16906 206 87.5000 12.5000 0.00000 31.6752 17.5703 2.58294 207 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 208 87.5000 87.5000 25.0000 58.2353 69.2285 15.9222 209 25.0000 25.0000 0.00000 4.87856 5.67311 1.69777 210 37.5000 25.0000 0.00000 7.53824 7.04444 1.82240 211 50.0000 25.0000 0.00000 11.5406 9.10808 2.00994 212 62.5000 25.0000 0.00000 17.0310 11.9389 2.26721 213 75.0000 25.0000 0.00000 24.1359 15.6023 2.60014 214 87.5000 25.0000 0.00000 32.9684 20.1563 3.01401 215 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 216 100.000 75.0000 25.0000 61.2394 59.4106 13.8689 217 25.0000 37.5000 0.00000 7.18485 10.2851 2.46654 218 37.5000 37.5000 0.00000 9.84453 11.6564 2.59117 219 50.0000 37.5000 0.00000 13.8469 13.7200 2.77871 220 62.5000 37.5000 0.00000 19.3373 16.5509 3.03598 221 75.0000 37.5000 0.00000 26.4422 20.2142 3.36891 222 87.5000 37.5000 0.00000 35.2747 24.7683 3.78278 223 100.000 37.5000 0.00000 45.9377 30.2662 4.28243 224 100.000 75.0000 12.5000 60.5866 59.1495 10.4307 225 100.000 87.5000 12.5000 68.2456 74.4653 12.9837 226 100.000 87.5000 25.0000 68.8983 74.7264 16.4219 227 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 228 62.5000 50.0000 0.00000 22.8079 23.4911 4.19286 229 75.0000 50.0000 0.00000 29.9128 27.1544 4.52578 230 87.5000 50.0000 0.00000 38.7453 31.7085 4.93966 231 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 232 100.000 62.5000 0.00000 54.1692 46.7269 7.02629 233 37.5000 50.0000 0.00000 13.3151 18.5966 3.74804 234 37.5000 62.5000 0.00000 18.0760 28.1171 5.33503 235 50.0000 62.5000 0.00000 22.0784 30.1807 5.52257 236 62.5000 62.5000 0.00000 27.5688 33.0116 5.77984 237 75.0000 62.5000 0.00000 34.6737 36.6749 6.11276 238 87.5000 62.5000 0.00000 43.5062 41.2290 6.52664 239 87.5000 75.0000 0.00000 49.6671 53.5491 8.58029 240 25.0000 62.5000 0.00000 15.4164 26.7458 5.21040 241 25.0000 75.0000 0.00000 21.5773 39.0658 7.26405 242 37.5000 75.0000 0.00000 24.2369 40.4372 7.38868 243 50.0000 75.0000 0.00000 28.2393 42.5008 7.57622 244 62.5000 75.0000 0.00000 33.7297 45.3317 7.83349 245 75.0000 75.0000 0.00000 40.8346 48.9950 8.16642 246 100.000 75.0000 0.00000 60.3302 59.0470 9.07994 247 100.000 87.5000 0.00000 67.9891 74.3628 11.6330 248 25.0000 50.0000 0.00000 10.6555 17.2253 3.62342 249 25.0000 87.5000 0.00000 29.2362 54.3816 9.81706 250 37.5000 87.5000 0.00000 31.8959 55.7530 9.94169 251 50.0000 87.5000 0.00000 35.8983 57.8166 10.1292 252 62.5000 87.5000 0.00000 41.3887 60.6475 10.3865 253 75.0000 87.5000 0.00000 48.4936 64.3108 10.7194 254 87.5000 87.5000 0.00000 57.3261 68.8649 11.1333 255 12.5000 87.5000 0.00000 27.7449 53.6127 9.74718 256 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 257 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 258 37.5000 100.000 0.00000 41.1422 74.2429 13.0238 259 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 260 62.5000 100.000 0.00000 50.6349 79.1374 13.4686 261 75.0000 100.000 0.00000 57.7399 82.8007 13.8015 262 87.5000 100.000 0.00000 66.5724 87.3548 14.2154 263 100.000 100.000 0.00000 77.2354 92.8527 14.7151 264 12.5000 0.00000 12.5000 1.84236 1.40466 2.37819 265 25.0000 0.00000 12.5000 3.33373 2.17362 2.44808 266 37.5000 0.00000 12.5000 5.99341 3.54495 2.57270 267 50.0000 0.00000 12.5000 9.99578 5.60859 2.76025 268 62.5000 0.00000 12.5000 15.4862 8.43946 3.01752 269 75.0000 0.00000 12.5000 22.5911 12.1028 3.35044 270 87.5000 0.00000 12.5000 31.4236 16.6568 3.76432 271 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 272 100.000 12.5000 37.5000 44.4116 23.8974 14.0031 273 25.0000 12.5000 12.5000 3.84179 3.18959 2.61743 274 37.5000 12.5000 12.5000 6.50147 4.56093 2.74206 275 50.0000 12.5000 12.5000 10.5038 6.62457 2.92960 276 62.5000 12.5000 12.5000 15.9942 9.45544 3.18687 277 75.0000 12.5000 12.5000 23.0992 13.1188 3.51980 278 87.5000 12.5000 12.5000 31.9317 17.6728 3.93367 279 100.000 12.5000 12.5000 42.5947 23.1707 4.43332 280 100.000 37.5000 25.0000 46.8470 30.6298 9.07135 281 100.000 62.5000 25.0000 55.0785 47.0905 11.8152 282 25.0000 25.0000 12.5000 5.13501 5.77567 3.04851 283 37.5000 25.0000 12.5000 7.79469 7.14701 3.17314 284 50.0000 25.0000 12.5000 11.7971 9.21065 3.36068 285 62.5000 25.0000 12.5000 17.2875 12.0415 3.61795 286 75.0000 25.0000 12.5000 24.3924 15.7048 3.95087 287 87.5000 25.0000 12.5000 33.2249 20.2589 4.36475 288 100.000 25.0000 12.5000 43.8879 25.7568 4.86440 289 100.000 37.5000 37.5000 48.0111 31.0954 15.2029 290 100.000 50.0000 37.5000 51.4817 38.0356 16.3598 291 25.0000 37.5000 12.5000 7.44130 10.3876 3.81728 292 37.5000 37.5000 12.5000 10.1010 11.7590 3.94191 293 50.0000 37.5000 12.5000 14.1034 13.8226 4.12945 294 62.5000 37.5000 12.5000 19.5938 16.6535 4.38672 295 75.0000 37.5000 12.5000 26.6987 20.3168 4.71965 296 87.5000 37.5000 12.5000 35.5312 24.8708 5.13352 297 100.000 37.5000 12.5000 46.1942 30.3687 5.63317 298 100.000 62.5000 12.5000 54.4257 46.8294 8.37703 299 12.5000 50.0000 0.00000 9.16408 16.4563 3.55353 300 25.0000 50.0000 12.5000 10.9119 17.3278 4.97415 301 37.5000 50.0000 12.5000 13.5716 18.6992 5.09878 302 50.0000 50.0000 12.5000 17.5740 20.7628 5.28633 303 62.5000 50.0000 12.5000 23.0643 23.5937 5.54360 304 75.0000 50.0000 12.5000 30.1693 27.2570 5.87652 305 87.5000 50.0000 12.5000 39.0018 31.8111 6.29040 306 100.000 50.0000 12.5000 49.6648 37.3090 6.79005 307 12.5000 25.0000 12.5000 3.64363 5.00671 2.97862 308 12.5000 37.5000 12.5000 5.94993 9.61866 3.74740 309 25.0000 62.5000 12.5000 15.6728 26.8483 6.56114 310 37.5000 62.5000 12.5000 18.3325 28.2197 6.68576 311 50.0000 62.5000 12.5000 22.3349 30.2833 6.87331 312 62.5000 62.5000 12.5000 27.8253 33.1142 7.13058 313 75.0000 62.5000 12.5000 34.9302 36.7775 7.46350 314 87.5000 62.5000 12.5000 43.7627 41.3315 7.87738 315 12.5000 50.0000 12.5000 9.42053 16.5589 4.90427 316 12.5000 62.5000 12.5000 14.1814 26.0794 6.49125 317 12.5000 75.0000 12.5000 20.3423 38.3995 8.54491 318 25.0000 75.0000 12.5000 21.8337 39.1684 8.61479 319 37.5000 75.0000 12.5000 24.4934 40.5398 8.73942 320 50.0000 75.0000 12.5000 28.4958 42.6034 8.92696 321 62.5000 75.0000 12.5000 33.9862 45.4343 9.18423 322 75.0000 75.0000 12.5000 41.0911 49.0976 9.51716 323 87.5000 87.5000 12.5000 57.5826 68.9674 12.4840 324 0.00000 62.5000 12.5000 13.5955 25.7773 6.46380 325 0.00000 75.0000 12.5000 19.7564 38.0974 8.51745 326 12.5000 87.5000 12.5000 28.0013 53.7152 11.0979 327 25.0000 87.5000 12.5000 29.4927 54.4842 11.1678 328 37.5000 87.5000 12.5000 32.1524 55.8555 11.2924 329 50.0000 87.5000 12.5000 36.1547 57.9192 11.4800 330 62.5000 87.5000 12.5000 41.6451 60.7500 11.7372 331 75.0000 87.5000 12.5000 48.7500 64.4134 12.0702 332 81.2500 93.7500 18.7500 57.6311 75.5204 15.1511 333 0.00000 87.5000 12.5000 27.4154 53.4132 11.0705 334 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 335 12.5000 100.000 12.5000 37.2476 72.2052 14.1800 336 25.0000 100.000 12.5000 38.7389 72.9741 14.2499 337 37.5000 100.000 12.5000 41.3986 74.3455 14.3745 338 50.0000 100.000 12.5000 45.4010 76.4091 14.5621 339 62.5000 100.000 12.5000 50.8914 79.2400 14.8194 340 75.0000 100.000 12.5000 57.9963 82.9033 15.1523 341 87.5000 100.000 12.5000 66.8288 87.4574 15.5662 342 100.000 100.000 12.5000 77.4918 92.9552 16.0658 343 12.5000 0.00000 25.0000 2.49512 1.66572 5.81637 344 25.0000 0.00000 25.0000 3.98649 2.43468 5.88625 345 37.5000 0.00000 25.0000 6.64617 3.80602 6.01088 346 50.0000 0.00000 25.0000 10.6485 5.86966 6.19842 347 62.5000 0.00000 25.0000 16.1389 8.70052 6.45569 348 75.0000 0.00000 25.0000 23.2439 12.3638 6.78862 349 87.5000 0.00000 25.0000 32.0764 16.9179 7.20249 350 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 351 16.6667 16.6667 16.6667 3.22584 3.34159 3.55077 352 12.5000 12.5000 25.0000 3.00318 2.68170 5.98572 353 25.0000 12.5000 25.0000 4.49455 3.45066 6.05561 354 37.5000 12.5000 25.0000 7.15423 4.82200 6.18023 355 50.0000 12.5000 25.0000 11.1566 6.88564 6.36778 356 62.5000 12.5000 25.0000 16.6470 9.71650 6.62505 357 75.0000 12.5000 25.0000 23.7519 13.3798 6.95797 358 87.5000 12.5000 25.0000 32.5844 17.9339 7.37185 359 100.000 12.5000 25.0000 43.2474 23.4318 7.87150 360 0.00000 25.0000 12.5000 3.05773 4.70462 2.95117 361 0.00000 25.0000 25.0000 3.71049 4.96568 6.38934 362 37.5000 25.0000 25.0000 8.44745 7.40807 6.61131 363 50.0000 25.0000 25.0000 12.4498 9.47171 6.79885 364 62.5000 25.0000 25.0000 17.9402 12.3026 7.05612 365 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 366 87.5000 25.0000 25.0000 33.8776 20.5200 7.80292 367 100.000 25.0000 25.0000 44.5407 26.0178 8.30257 368 100.000 25.0000 37.5000 45.7048 26.4834 14.4341 369 3.12500 0.00000 0.00000 1.09876 1.05092 1.00463 370 31.2500 18.7500 18.7500 5.81260 4.96257 4.26057 371 37.5000 37.5000 25.0000 10.7537 12.0200 7.38008 372 50.0000 37.5000 25.0000 14.7561 14.0837 7.56763 373 62.5000 37.5000 25.0000 20.2465 16.9145 7.82490 374 75.0000 37.5000 25.0000 27.3514 20.5778 8.15782 375 87.5000 37.5000 25.0000 36.1839 25.1319 8.57170 376 68.7500 31.2500 43.7500 24.2622 16.8436 17.8875 377 12.5000 25.0000 25.0000 4.29640 5.26778 6.41680 378 12.5000 37.5000 25.0000 6.60270 9.87973 7.18557 379 25.0000 50.0000 25.0000 11.5647 17.5889 8.41233 380 37.5000 50.0000 25.0000 14.2243 18.9602 8.53696 381 50.0000 50.0000 25.0000 18.2267 21.0239 8.72450 382 62.5000 50.0000 25.0000 23.7171 23.8547 8.98177 383 75.0000 50.0000 25.0000 30.8220 27.5181 9.31470 384 87.5000 50.0000 25.0000 39.6545 32.0721 9.72857 385 100.000 50.0000 25.0000 50.3176 37.5700 10.2282 386 12.5000 50.0000 25.0000 10.0733 16.8199 8.34245 387 12.5000 62.5000 25.0000 14.8342 26.3404 9.92943 388 25.0000 62.5000 25.0000 16.3256 27.1094 9.99931 389 37.5000 62.5000 25.0000 18.9852 28.4807 10.1239 390 50.0000 62.5000 25.0000 22.9876 30.5444 10.3115 391 62.5000 62.5000 25.0000 28.4780 33.3752 10.5688 392 75.0000 62.5000 25.0000 35.5829 37.0385 10.9017 393 87.5000 62.5000 25.0000 44.4154 41.5926 11.3156 394 0.00000 62.5000 25.0000 14.2483 26.0383 9.90197 395 0.00000 75.0000 25.0000 20.4092 38.3584 11.9556 396 12.5000 75.0000 25.0000 20.9951 38.6605 11.9831 397 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 398 37.5000 75.0000 25.0000 25.1462 40.8008 12.1776 399 50.0000 75.0000 25.0000 29.1485 42.8645 12.3651 400 62.5000 75.0000 25.0000 34.6389 45.6953 12.6224 401 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 402 87.5000 75.0000 25.0000 50.5764 53.9127 13.3692 403 12.5000 62.5000 0.00000 13.9250 25.9768 5.14051 404 12.5000 75.0000 0.00000 20.0859 38.2969 7.19417 405 12.5000 87.5000 25.0000 28.6541 53.9763 14.5361 406 25.0000 87.5000 25.0000 30.1454 54.7453 14.6060 407 37.5000 87.5000 25.0000 32.8051 56.1166 14.7306 408 50.0000 87.5000 25.0000 36.8075 58.1802 14.9181 409 62.5000 87.5000 25.0000 42.2979 61.0111 15.1754 410 75.0000 87.5000 25.0000 49.4028 64.6744 15.5083 411 0.00000 50.0000 12.5000 8.83462 16.2568 4.87682 412 0.00000 87.5000 25.0000 28.0682 53.6742 14.5086 413 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 414 12.5000 100.000 25.0000 37.9003 72.4662 17.6182 415 25.0000 100.000 25.0000 39.3917 73.2352 17.6881 416 37.5000 100.000 25.0000 42.0514 74.6065 17.8127 417 50.0000 100.000 25.0000 46.0538 76.6702 18.0003 418 62.5000 100.000 25.0000 51.5442 79.5010 18.2575 419 75.0000 100.000 25.0000 58.6491 83.1644 18.5905 420 87.5000 100.000 25.0000 67.4816 87.7184 19.0043 421 100.000 100.000 25.0000 78.1446 93.2163 19.5040 422 12.5000 0.00000 37.5000 3.65924 2.13130 11.9479 423 25.0000 0.00000 37.5000 5.15062 2.90026 12.0178 424 37.5000 0.00000 37.5000 7.81030 4.27159 12.1424 425 50.0000 0.00000 37.5000 11.8127 6.33523 12.3300 426 62.5000 0.00000 37.5000 17.3031 9.16610 12.5873 427 75.0000 0.00000 37.5000 24.4080 12.8294 12.9202 428 87.5000 0.00000 37.5000 33.2405 17.3835 13.3341 429 100.000 0.00000 37.5000 43.9035 22.8814 13.8337 430 0.00000 12.5000 37.5000 3.58140 2.84518 12.0898 431 12.5000 12.5000 37.5000 4.16730 3.14728 12.1173 432 25.0000 12.5000 37.5000 5.65868 3.91623 12.1872 433 37.5000 12.5000 37.5000 8.31836 5.28757 12.3118 434 50.0000 12.5000 37.5000 12.3207 7.35121 12.4993 435 62.5000 12.5000 37.5000 17.8111 10.1821 12.7566 436 75.0000 12.5000 37.5000 24.9160 13.8454 13.0895 437 87.5000 12.5000 37.5000 33.7486 18.3995 13.5034 438 0.00000 12.5000 25.0000 2.41727 2.37961 5.95827 439 0.00000 25.0000 37.5000 4.87462 5.43126 12.5209 440 12.5000 25.0000 37.5000 5.46052 5.73335 12.5484 441 25.0000 25.0000 37.5000 6.95189 6.50231 12.6182 442 37.5000 25.0000 37.5000 9.61157 7.87365 12.7429 443 50.0000 25.0000 37.5000 13.6140 9.93729 12.9304 444 62.5000 25.0000 37.5000 19.1043 12.7682 13.1877 445 75.0000 25.0000 37.5000 26.2093 16.4315 13.5206 446 87.5000 25.0000 37.5000 35.0418 20.9855 13.9345 447 87.5000 37.5000 37.5000 37.3481 25.5975 14.7033 448 0.00000 37.5000 12.5000 5.36402 9.31657 3.71994 449 25.0000 37.5000 25.0000 8.09407 10.6487 7.25545 450 25.0000 37.5000 37.5000 9.25819 11.1143 13.3870 451 50.0000 37.5000 37.5000 15.9202 14.5492 13.6992 452 62.5000 37.5000 37.5000 21.4106 17.3801 13.9565 453 75.0000 37.5000 37.5000 28.5156 21.0434 14.2894 454 0.00000 37.5000 25.0000 6.01679 9.57763 7.15812 455 0.00000 37.5000 37.5000 7.18091 10.0432 13.2897 456 0.00000 50.0000 37.5000 10.6515 16.9834 14.4466 457 12.5000 50.0000 37.5000 11.2374 17.2855 14.4740 458 25.0000 50.0000 37.5000 12.7288 18.0545 14.5439 459 37.5000 50.0000 37.5000 15.3885 19.4258 14.6685 460 50.0000 50.0000 37.5000 19.3908 21.4895 14.8561 461 62.5000 50.0000 37.5000 24.8812 24.3203 15.1133 462 75.0000 50.0000 37.5000 31.9862 27.9836 15.4463 463 87.5000 50.0000 37.5000 40.8187 32.5377 15.8601 464 12.5000 25.0000 0.00000 3.38719 4.90415 1.62789 465 12.5000 37.5000 0.00000 5.69348 9.51610 2.39666 466 12.5000 62.5000 37.5000 15.9983 26.8060 16.0610 467 25.0000 62.5000 37.5000 17.4897 27.5750 16.1309 468 37.5000 100.000 50.0000 44.9673 75.7727 33.1713 469 50.0000 62.5000 37.5000 24.1517 31.0099 16.4430 470 62.5000 62.5000 37.5000 29.6421 33.8408 16.7003 471 75.0000 62.5000 37.5000 36.7471 37.5041 17.0332 472 87.5000 62.5000 37.5000 45.5796 42.0582 17.4471 473 87.5000 75.0000 62.5000 55.8954 56.0400 41.3852 474 87.5000 75.0000 75.0000 59.0052 57.2837 57.7647 475 87.5000 87.5000 75.0000 66.6641 72.5995 60.3177 476 87.5000 100.000 75.0000 75.9104 91.0894 63.3998 477 37.5000 75.0000 37.5000 26.3103 41.2664 18.3092 478 50.0000 75.0000 37.5000 30.3127 43.3300 18.4967 479 62.5000 75.0000 37.5000 35.8031 46.1609 18.7540 480 75.0000 75.0000 37.5000 42.9080 49.8242 19.0869 481 87.5000 75.0000 37.5000 51.7405 54.3783 19.5008 482 87.5000 87.5000 37.5000 59.3994 69.6941 22.0538 483 12.5000 75.0000 37.5000 22.1592 39.1261 18.1146 484 12.5000 87.5000 37.5000 29.8182 54.4419 20.6677 485 25.0000 87.5000 37.5000 31.3096 55.2108 20.7375 486 37.5000 87.5000 37.5000 33.9692 56.5822 20.8622 487 50.0000 87.5000 37.5000 37.9716 58.6458 21.0497 488 62.5000 87.5000 37.5000 43.4620 61.4767 21.3070 489 75.0000 87.5000 37.5000 50.5669 65.1400 21.6399 490 6.25000 43.7500 6.25000 6.99165 12.5218 3.39151 491 0.00000 87.5000 37.5000 29.2323 54.1398 20.6402 492 0.00000 100.000 37.5000 38.4785 72.6297 23.7223 493 12.5000 100.000 37.5000 39.0645 72.9318 23.7498 494 25.0000 100.000 37.5000 40.5558 73.7008 23.8197 495 37.5000 100.000 37.5000 43.2155 75.0721 23.9443 496 50.0000 100.000 37.5000 47.2179 77.1358 24.1318 497 62.5000 100.000 37.5000 52.7083 79.9666 24.3891 498 75.0000 100.000 37.5000 59.8132 83.6299 24.7220 499 87.5000 100.000 37.5000 68.6457 88.1840 25.1359 500 100.000 100.000 37.5000 79.3087 93.6819 25.6355 501 100.000 100.000 50.0000 81.0605 94.3825 34.8625 502 25.0000 0.00000 50.0000 6.90243 3.60087 21.2448 503 37.5000 0.00000 50.0000 9.56211 4.97221 21.3694 504 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 505 62.5000 0.00000 50.0000 19.0549 9.86671 21.8143 506 75.0000 0.00000 50.0000 26.1598 13.5300 22.1472 507 87.5000 0.00000 50.0000 34.9923 18.0841 22.5611 508 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 509 100.000 37.5000 87.5000 59.1417 35.5469 73.8291 510 100.000 37.5000 100.000 63.8089 37.4135 98.4114 511 25.0000 12.5000 50.0000 7.41049 4.61685 21.4142 512 37.5000 12.5000 50.0000 10.0702 5.98819 21.5388 513 50.0000 12.5000 50.0000 14.0725 8.05183 21.7263 514 62.5000 12.5000 50.0000 19.5629 10.8827 21.9836 515 75.0000 12.5000 50.0000 26.6679 14.5460 22.3165 516 87.5000 12.5000 50.0000 35.5004 19.1001 22.7304 517 87.5000 62.5000 100.000 61.3773 48.3763 100.656 518 87.5000 75.0000 100.000 67.5382 60.6964 102.709 519 87.5000 87.5000 100.000 75.1972 76.0122 105.262 520 100.000 87.5000 100.000 85.8602 81.5101 105.762 521 37.5000 25.0000 50.0000 11.3634 8.57426 21.9699 522 50.0000 25.0000 50.0000 15.3658 10.6379 22.1574 523 62.5000 25.0000 50.0000 20.8562 13.4688 22.4147 524 75.0000 25.0000 50.0000 27.9611 17.1321 22.7476 525 87.5000 25.0000 50.0000 36.7936 21.6862 23.1615 526 100.000 25.0000 50.0000 47.4566 27.1840 23.6611 527 100.000 50.0000 87.5000 62.6123 42.4871 74.9860 528 100.000 50.0000 100.000 67.2794 44.3537 99.5683 529 100.000 62.5000 100.000 72.0404 53.8742 101.155 530 100.000 75.0000 100.000 78.2013 66.1943 103.209 531 50.0000 37.5000 50.0000 17.6721 15.2499 22.9262 532 62.5000 37.5000 50.0000 23.1625 18.0807 23.1835 533 75.0000 37.5000 50.0000 30.2674 21.7440 23.5164 534 87.5000 37.5000 50.0000 39.0999 26.2981 23.9303 535 100.000 37.5000 50.0000 49.7629 31.7960 24.4299 536 100.000 62.5000 87.5000 67.3732 52.0076 76.5730 537 100.000 75.0000 87.5000 73.5341 64.3277 78.6266 538 37.5000 37.5000 50.0000 13.6697 13.1862 22.7386 539 37.5000 50.0000 50.0000 17.1403 20.1264 23.8955 540 62.5000 50.0000 50.0000 26.6331 25.0209 24.3403 541 75.0000 50.0000 50.0000 33.7380 28.6843 24.6733 542 87.5000 50.0000 50.0000 42.5705 33.2383 25.0871 543 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 544 12.5000 50.0000 50.0000 12.9892 17.9861 23.7010 545 12.5000 62.5000 50.0000 17.7501 27.5066 25.2880 546 25.0000 62.5000 50.0000 19.2415 28.2756 25.3579 547 37.5000 62.5000 50.0000 21.9012 29.6469 25.4825 548 50.0000 62.5000 50.0000 25.9036 31.7106 25.6700 549 62.5000 62.5000 50.0000 31.3940 34.5414 25.9273 550 75.0000 62.5000 50.0000 38.4989 38.2047 26.2602 551 87.5000 62.5000 50.0000 47.3314 42.7588 26.6741 552 100.000 62.5000 50.0000 57.9944 48.2567 27.1738 553 100.000 62.5000 62.5000 60.3975 49.2178 39.8312 554 6.25000 56.2500 6.25000 11.0928 20.7230 4.75858 555 0.00000 62.5000 50.0000 17.1642 27.2045 25.2605 556 25.0000 75.0000 50.0000 25.4024 40.5957 27.4115 557 50.0000 75.0000 50.0000 32.0645 44.0306 27.7237 558 62.5000 75.0000 50.0000 37.5549 46.8615 27.9810 559 75.0000 75.0000 50.0000 44.6598 50.5248 28.3139 560 87.5000 75.0000 50.0000 53.4923 55.0789 28.7278 561 100.000 75.0000 50.0000 64.1553 60.5768 29.2274 562 100.000 75.0000 62.5000 66.5584 61.5379 41.8848 563 100.000 87.5000 87.5000 81.1931 79.6435 81.1796 564 37.5000 75.0000 50.0000 28.0621 41.9670 27.5361 565 37.5000 87.5000 50.0000 35.7211 57.2828 30.0892 566 50.0000 87.5000 50.0000 39.7234 59.3464 30.2767 567 62.5000 87.5000 50.0000 45.2138 62.1773 30.5340 568 75.0000 87.5000 50.0000 52.3187 65.8406 30.8669 569 87.5000 87.5000 50.0000 61.1513 70.3947 31.2808 570 100.000 87.5000 50.0000 71.8143 75.8926 31.7804 571 12.5000 87.5000 50.0000 31.5700 55.1425 29.8946 572 12.5000 100.000 50.0000 40.8163 73.6324 32.9768 573 12.5000 100.000 62.5000 43.2194 74.5935 45.6342 574 100.000 100.000 100.000 95.1065 100.000 108.844 575 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 576 62.5000 100.000 50.0000 54.4601 80.6672 33.6161 577 75.0000 100.000 50.0000 61.5650 84.3305 33.9490 578 87.5000 100.000 50.0000 70.3975 88.8846 34.3629 579 12.5000 0.00000 50.0000 5.41106 2.83192 21.1749 580 12.5000 0.00000 62.5000 7.81417 3.79301 33.8324 581 25.0000 0.00000 62.5000 9.30554 4.56196 33.9022 582 37.5000 0.00000 62.5000 11.9652 5.93330 34.0269 583 50.0000 0.00000 62.5000 15.9676 7.99694 34.2144 584 62.5000 0.00000 62.5000 21.4580 10.8278 34.4717 585 75.0000 0.00000 62.5000 28.5629 14.4911 34.8046 586 87.5000 0.00000 62.5000 37.3954 19.0452 35.2185 587 100.000 0.00000 62.5000 48.0584 24.5431 35.7181 588 12.5000 12.5000 50.0000 5.91912 3.84789 21.3443 589 12.5000 12.5000 62.5000 8.32223 4.80899 34.0017 590 25.0000 12.5000 62.5000 9.81360 5.57794 34.0716 591 37.5000 12.5000 62.5000 12.4733 6.94928 34.1962 592 50.0000 12.5000 62.5000 16.4757 9.01292 34.3838 593 62.5000 12.5000 62.5000 21.9661 11.8438 34.6410 594 75.0000 12.5000 62.5000 29.0710 15.5071 34.9740 595 87.5000 12.5000 62.5000 37.9035 20.0612 35.3878 596 100.000 12.5000 62.5000 48.5665 25.5591 35.8875 597 0.00000 25.0000 50.0000 6.62643 6.13187 21.7479 598 0.00000 25.0000 62.5000 9.02954 7.09297 34.4053 599 25.0000 25.0000 62.5000 11.1068 8.16402 34.5027 600 37.5000 25.0000 62.5000 13.7665 9.53536 34.6273 601 50.0000 25.0000 62.5000 17.7689 11.5990 34.8148 602 62.5000 25.0000 62.5000 23.2593 14.4299 35.0721 603 75.0000 25.0000 62.5000 30.3642 18.0932 35.4050 604 87.5000 25.0000 62.5000 39.1967 22.6472 35.8189 605 100.000 25.0000 62.5000 49.8597 28.1451 36.3186 606 100.000 25.0000 75.0000 52.9695 29.3888 52.6981 607 25.0000 37.5000 50.0000 11.0100 11.8149 22.6140 608 25.0000 37.5000 62.5000 13.4131 12.7760 35.2714 609 37.5000 37.5000 62.5000 16.0728 14.1473 35.3961 610 50.0000 37.5000 62.5000 20.0752 16.2109 35.5836 611 62.5000 37.5000 62.5000 25.5656 19.0418 35.8409 612 75.0000 37.5000 62.5000 32.6705 22.7051 36.1738 613 87.5000 37.5000 62.5000 41.5030 27.2592 36.5877 614 100.000 37.5000 62.5000 52.1660 32.7571 37.0873 615 100.000 37.5000 75.0000 55.2758 34.0008 53.4668 616 87.5000 75.0000 87.5000 62.8711 58.8298 78.1270 617 25.0000 50.0000 62.5000 16.8837 19.7162 36.4283 618 37.5000 50.0000 62.5000 19.5434 21.0875 36.5529 619 50.0000 50.0000 62.5000 23.5458 23.1512 36.7405 620 62.5000 50.0000 62.5000 29.0362 25.9820 36.9978 621 75.0000 50.0000 62.5000 36.1411 29.6453 37.3307 622 87.5000 50.0000 62.5000 44.9736 34.1994 37.7446 623 100.000 50.0000 62.5000 55.6366 39.6973 38.2442 624 100.000 50.0000 75.0000 58.7464 40.9410 54.6237 625 25.0000 50.0000 50.0000 14.4806 18.7551 23.7709 626 25.0000 62.5000 62.5000 21.6446 29.2367 38.0153 627 37.5000 62.5000 62.5000 24.3043 30.6080 38.1399 628 50.0000 62.5000 62.5000 28.3067 32.6716 38.3275 629 75.0000 62.5000 62.5000 40.9020 39.1658 38.9177 630 87.5000 62.5000 62.5000 49.7345 43.7199 39.3315 631 100.000 62.5000 75.0000 63.5073 50.4615 56.2107 632 100.000 75.0000 75.0000 69.6682 62.7816 58.2644 633 100.000 87.5000 75.0000 77.3272 78.0974 60.8174 634 25.0000 75.0000 62.5000 27.8055 41.5568 40.0690 635 37.5000 75.0000 62.5000 30.4652 42.9281 40.1936 636 50.0000 75.0000 62.5000 34.4676 44.9917 40.3811 637 62.5000 75.0000 62.5000 39.9580 47.8226 40.6384 638 75.0000 75.0000 62.5000 47.0629 51.4859 40.9713 639 6.25000 18.7500 6.25000 2.34153 3.22288 1.84146 640 6.25000 31.2500 6.25000 4.12024 6.77979 2.43437 641 0.00000 75.0000 50.0000 23.3251 39.5246 27.3142 642 0.00000 87.5000 50.0000 30.9841 54.8404 29.8672 643 0.00000 87.5000 62.5000 33.3872 55.8015 42.5246 644 37.5000 87.5000 62.5000 38.1242 58.2439 42.7466 645 50.0000 87.5000 62.5000 42.1266 60.3075 42.9341 646 62.5000 87.5000 62.5000 47.6169 63.1384 43.1914 647 75.0000 87.5000 62.5000 54.7219 66.8017 43.5243 648 87.5000 87.5000 62.5000 63.5544 71.3558 43.9382 649 100.000 87.5000 62.5000 74.2174 76.8537 44.4379 650 25.0000 75.0000 37.5000 23.6506 39.8951 18.1845 651 25.0000 100.000 50.0000 42.3076 74.4014 33.0466 652 25.0000 100.000 62.5000 44.7108 75.3625 45.7041 653 37.5000 100.000 62.5000 47.3704 76.7338 45.8287 654 50.0000 100.000 62.5000 51.3728 78.7975 46.0162 655 62.5000 100.000 62.5000 56.8632 81.6283 46.2735 656 75.0000 100.000 62.5000 63.9681 85.2916 46.6064 657 87.5000 100.000 62.5000 72.8006 89.8457 47.0203 658 100.000 100.000 62.5000 83.4636 95.3436 47.5200 659 100.000 100.000 75.0000 86.5734 96.5873 63.8995 660 25.0000 0.00000 75.0000 12.4153 5.80568 50.2817 661 37.5000 0.00000 75.0000 15.0750 7.17702 50.4064 662 50.0000 0.00000 75.0000 19.0774 9.24066 50.5939 663 62.5000 0.00000 75.0000 24.5678 12.0715 50.8512 664 75.0000 0.00000 75.0000 31.6727 15.7348 51.1841 665 87.5000 0.00000 75.0000 40.5052 20.2889 51.5980 666 100.000 0.00000 75.0000 51.1682 25.7868 52.0976 667 0.00000 12.5000 75.0000 10.8461 5.75060 50.3538 668 12.5000 12.5000 75.0000 11.4320 6.05270 50.3812 669 25.0000 12.5000 75.0000 12.9234 6.82166 50.4511 670 37.5000 12.5000 75.0000 15.5831 8.19300 50.5757 671 50.0000 12.5000 75.0000 19.5854 10.2566 50.7633 672 62.5000 12.5000 75.0000 25.0758 13.0875 51.0205 673 75.0000 12.5000 75.0000 32.1807 16.7508 51.3535 674 87.5000 12.5000 75.0000 41.0133 21.3049 51.7673 675 100.000 12.5000 75.0000 51.6763 26.8028 52.2670 676 12.5000 25.0000 62.5000 9.61545 7.39506 34.4328 677 12.5000 25.0000 75.0000 12.7252 8.63878 50.8123 678 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 679 37.5000 25.0000 75.0000 16.8763 10.7791 51.0068 680 50.0000 25.0000 75.0000 20.8787 12.8427 51.1944 681 62.5000 25.0000 75.0000 26.3690 15.6736 51.4516 682 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 683 87.5000 25.0000 75.0000 42.3065 23.8910 52.1984 684 100.000 25.0000 87.5000 56.8354 30.9350 73.0603 685 100.000 25.0000 100.000 61.5026 32.8015 97.6426 686 25.0000 25.0000 50.0000 8.70371 7.20292 21.8452 687 25.0000 37.5000 75.0000 16.5229 14.0197 51.6510 688 37.5000 37.5000 75.0000 19.1826 15.3910 51.7756 689 50.0000 37.5000 75.0000 23.1850 17.4547 51.9631 690 62.5000 37.5000 75.0000 28.6753 20.2855 52.2204 691 75.0000 37.5000 75.0000 35.7803 23.9488 52.5533 692 87.5000 37.5000 75.0000 44.6128 28.5029 52.9672 693 12.5000 37.5000 50.0000 9.51864 11.0459 22.5441 694 12.5000 37.5000 62.5000 11.9217 12.0070 35.2016 695 12.5000 50.0000 75.0000 18.5021 20.1909 52.7379 696 25.0000 50.0000 75.0000 19.9935 20.9599 52.8078 697 37.5000 50.0000 75.0000 22.6532 22.3312 52.9325 698 50.0000 50.0000 75.0000 26.6555 24.3949 53.1200 699 62.5000 50.0000 75.0000 32.1459 27.2257 53.3773 700 75.0000 50.0000 75.0000 39.2509 30.8891 53.7102 701 87.5000 50.0000 75.0000 48.0834 35.4431 54.1241 702 87.5000 50.0000 87.5000 51.9493 36.9893 74.4863 703 0.00000 12.5000 62.5000 7.73632 4.50689 33.9743 704 12.5000 62.5000 75.0000 23.2630 29.7114 54.3249 705 25.0000 62.5000 75.0000 24.7544 30.4804 54.3948 706 37.5000 62.5000 75.0000 27.4141 31.8517 54.5194 707 50.0000 62.5000 75.0000 31.4165 33.9154 54.7070 708 62.5000 62.5000 75.0000 36.9068 36.7462 54.9643 709 75.0000 62.5000 75.0000 44.0118 40.4095 55.2972 710 87.5000 62.5000 75.0000 52.8443 44.9636 55.7111 711 87.5000 62.5000 87.5000 56.7102 46.5097 76.0733 712 12.5000 75.0000 50.0000 23.9110 39.8267 27.3416 713 12.5000 75.0000 62.5000 26.3142 40.7878 39.9991 714 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 715 37.5000 75.0000 75.0000 33.5750 44.1718 56.5731 716 50.0000 75.0000 75.0000 37.5774 46.2355 56.7606 717 62.5000 75.0000 75.0000 43.0678 49.0663 57.0179 718 62.5000 87.5000 87.5000 54.5927 65.9282 79.9332 719 62.5000 87.5000 100.000 59.2598 67.7948 104.515 720 25.0000 87.5000 50.0000 33.0614 55.9115 29.9645 721 25.0000 87.5000 62.5000 35.4645 56.8726 42.6220 722 25.0000 87.5000 75.0000 38.5743 58.1163 59.0015 723 37.5000 87.5000 75.0000 41.2339 59.4876 59.1261 724 50.0000 87.5000 75.0000 45.2363 61.5512 59.3136 725 62.5000 87.5000 75.0000 50.7267 64.3821 59.5709 726 0.00000 75.0000 37.5000 21.5733 38.8240 18.0872 727 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 728 0.00000 100.000 62.5000 42.6335 74.2914 45.6067 729 0.00000 100.000 75.0000 45.7432 75.5351 61.9862 730 12.5000 100.000 75.0000 46.3292 75.8372 62.0137 731 25.0000 100.000 75.0000 47.8205 76.6062 62.0836 732 37.5000 100.000 75.0000 50.4802 77.9775 62.2082 733 50.0000 100.000 75.0000 54.4826 80.0412 62.3958 734 62.5000 100.000 75.0000 59.9730 82.8720 62.6530 735 75.0000 100.000 75.0000 67.0779 86.5354 62.9859 736 75.0000 87.5000 75.0000 57.8316 68.0454 59.9038 737 12.5000 0.00000 75.0000 10.9239 5.03672 50.2119 738 12.5000 0.00000 87.5000 14.7899 6.58285 70.5741 739 25.0000 0.00000 87.5000 16.2813 7.35181 70.6440 740 37.5000 0.00000 87.5000 18.9409 8.72315 70.7687 741 50.0000 0.00000 87.5000 22.9433 10.7868 70.9562 742 62.5000 0.00000 87.5000 28.4337 13.6177 71.2135 743 75.0000 0.00000 87.5000 35.5386 17.2810 71.5464 744 87.5000 0.00000 87.5000 44.3711 21.8350 71.9603 745 100.000 0.00000 87.5000 55.0341 27.3329 72.4599 746 100.000 0.00000 100.000 59.7013 29.1995 97.0422 747 100.000 12.5000 100.000 60.2093 30.2155 97.2115 748 25.0000 12.5000 87.5000 16.7893 8.36779 70.8134 749 37.5000 12.5000 87.5000 19.4490 9.73913 70.9380 750 50.0000 12.5000 87.5000 23.4514 11.8028 71.1255 751 62.5000 12.5000 87.5000 28.9418 14.6336 71.3828 752 75.0000 12.5000 87.5000 36.0467 18.2969 71.7157 753 87.5000 12.5000 87.5000 44.8792 22.8510 72.1296 754 100.000 12.5000 87.5000 55.5422 28.3489 72.6293 755 12.5000 12.5000 87.5000 15.2979 7.59883 70.7435 756 12.5000 25.0000 87.5000 16.5912 10.1849 71.1746 757 25.0000 25.0000 87.5000 18.0825 10.9539 71.2445 758 37.5000 25.0000 87.5000 20.7422 12.3252 71.3691 759 50.0000 25.0000 87.5000 24.7446 14.3888 71.5566 760 62.5000 25.0000 87.5000 30.2350 17.2197 71.8139 761 75.0000 25.0000 87.5000 37.3399 20.8830 72.1468 762 87.5000 25.0000 87.5000 46.1724 25.4371 72.5607 763 87.5000 25.0000 100.000 50.8395 27.3037 97.1430 764 12.5000 37.5000 75.0000 15.0315 13.2507 51.5811 765 12.5000 37.5000 87.5000 18.8975 14.7969 71.9433 766 25.0000 37.5000 87.5000 20.3888 15.5658 72.0132 767 37.5000 37.5000 87.5000 23.0485 16.9371 72.1379 768 50.0000 37.5000 87.5000 27.0509 19.0008 72.3254 769 62.5000 37.5000 87.5000 32.5413 21.8317 72.5827 770 75.0000 37.5000 87.5000 39.6462 25.4950 72.9156 771 87.5000 37.5000 87.5000 48.4787 30.0490 73.3295 772 87.5000 37.5000 100.000 53.1458 31.9156 97.9117 773 87.5000 50.0000 100.000 56.6164 38.8558 99.0686 774 12.5000 25.0000 50.0000 7.21234 6.43397 21.7754 775 25.0000 50.0000 87.5000 23.8594 22.5060 73.1701 776 37.5000 50.0000 87.5000 26.5191 23.8774 73.2947 777 50.0000 50.0000 87.5000 30.5215 25.9410 73.4823 778 62.5000 50.0000 87.5000 36.0119 28.7719 73.7395 779 75.0000 50.0000 87.5000 43.1168 32.4352 74.0725 780 75.0000 62.5000 87.5000 47.8777 41.9557 75.6594 781 75.0000 62.5000 100.000 52.5448 43.8222 100.242 782 12.5000 50.0000 87.5000 22.3681 21.7371 73.1002 783 12.5000 62.5000 87.5000 27.1290 31.2576 74.6872 784 25.0000 62.5000 87.5000 28.6203 32.0265 74.7571 785 37.5000 62.5000 87.5000 31.2800 33.3978 74.8817 786 50.0000 62.5000 87.5000 35.2824 35.4615 75.0693 787 62.5000 62.5000 87.5000 40.7728 38.2924 75.3265 788 62.5000 62.5000 100.000 45.4399 40.1589 99.9088 789 12.5000 50.0000 62.5000 15.3923 18.9472 36.3584 790 12.5000 62.5000 62.5000 20.1532 28.4677 37.9454 791 12.5000 75.0000 75.0000 29.4239 42.0315 56.3786 792 12.5000 75.0000 87.5000 33.2899 43.5776 76.7409 793 25.0000 75.0000 87.5000 34.7812 44.3466 76.8107 794 37.5000 75.0000 87.5000 37.4409 45.7179 76.9354 795 50.0000 75.0000 87.5000 41.4433 47.7816 77.1229 796 62.5000 75.0000 87.5000 46.9337 50.6124 77.3802 797 75.0000 75.0000 87.5000 54.0386 54.2758 77.7131 798 75.0000 87.5000 87.5000 61.6976 69.5916 80.2661 799 12.5000 87.5000 62.5000 33.9731 56.1036 42.5521 800 12.5000 87.5000 75.0000 37.0829 57.3473 58.9316 801 12.5000 87.5000 87.5000 40.9488 58.8934 79.2939 802 25.0000 87.5000 87.5000 42.4402 59.6624 79.3637 803 37.5000 87.5000 87.5000 45.0999 61.0337 79.4884 804 50.0000 87.5000 87.5000 49.1023 63.0974 79.6759 805 0.00000 75.0000 62.5000 25.7282 40.4857 39.9716 806 0.00000 87.5000 75.0000 36.4970 57.0452 58.9041 807 0.00000 87.5000 87.5000 40.3629 58.5913 79.2664 808 0.00000 100.000 87.5000 49.6092 77.0813 82.3485 809 12.5000 100.000 87.5000 50.1951 77.3834 82.3760 810 25.0000 100.000 87.5000 51.6865 78.1523 82.4459 811 37.5000 100.000 87.5000 54.3461 79.5237 82.5705 812 50.0000 100.000 87.5000 58.3485 81.5873 82.7580 813 62.5000 100.000 87.5000 63.8389 84.4182 83.0153 814 75.0000 100.000 87.5000 70.9438 88.0815 83.3482 815 87.5000 100.000 87.5000 79.7763 92.6356 83.7621 816 100.000 100.000 87.5000 90.4394 98.1334 84.2618 817 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 818 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 819 37.5000 0.00000 100.000 23.6081 10.5897 95.3509 820 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 821 62.5000 0.00000 100.000 33.1008 15.4842 95.7957 822 75.0000 0.00000 100.000 40.2058 19.1475 96.1287 823 87.5000 0.00000 100.000 49.0383 23.7016 96.5425 824 0.00000 12.5000 87.5000 14.7120 7.29673 70.7160 825 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 826 12.5000 12.5000 100.000 19.9651 9.46539 95.3258 827 25.0000 12.5000 100.000 21.4564 10.2343 95.3957 828 37.5000 12.5000 100.000 24.1161 11.6057 95.5203 829 50.0000 12.5000 100.000 28.1185 13.6693 95.7078 830 62.5000 12.5000 100.000 33.6089 16.5002 95.9651 831 75.0000 12.5000 100.000 40.7138 20.1635 96.2980 832 87.5000 12.5000 100.000 49.5463 24.7176 96.7119 833 0.00000 12.5000 50.0000 5.33321 3.54580 21.3168 834 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 835 12.5000 25.0000 100.000 21.2583 12.0515 95.7568 836 25.0000 25.0000 100.000 22.7497 12.8204 95.8267 837 37.5000 25.0000 100.000 25.4093 14.1918 95.9514 838 50.0000 25.0000 100.000 29.4117 16.2554 96.1389 839 62.5000 25.0000 100.000 34.9021 19.0863 96.3962 840 75.0000 25.0000 100.000 42.0070 22.7496 96.7291 841 0.00000 37.5000 75.0000 14.4456 12.9486 51.5536 842 0.00000 37.5000 87.5000 18.3115 14.4948 71.9159 843 0.00000 37.5000 100.000 22.9787 16.3613 96.4982 844 12.5000 37.5000 100.000 23.5646 16.6634 96.5256 845 25.0000 37.5000 100.000 25.0560 17.4324 96.5955 846 37.5000 37.5000 100.000 27.7156 18.8037 96.7201 847 50.0000 37.5000 100.000 31.7180 20.8673 96.9077 848 62.5000 37.5000 100.000 37.2084 23.6982 97.1649 849 75.0000 37.5000 100.000 44.3133 27.3615 97.4979 850 0.00000 25.0000 75.0000 12.1393 8.33668 50.7848 851 0.00000 25.0000 87.5000 16.0053 9.88281 71.1471 852 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 853 12.5000 50.0000 100.000 27.0352 23.6036 97.6825 854 25.0000 50.0000 100.000 28.5266 24.3726 97.7524 855 37.5000 50.0000 100.000 31.1862 25.7439 97.8770 856 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 857 62.5000 50.0000 100.000 40.6790 30.6384 98.3218 858 75.0000 50.0000 100.000 47.7839 34.3017 98.6547 859 0.00000 37.5000 62.5000 11.3358 11.7049 35.1741 860 0.00000 50.0000 87.5000 21.7821 21.4350 73.0728 861 0.00000 62.5000 100.000 31.2102 32.8220 99.2420 862 12.5000 62.5000 100.000 31.7961 33.1241 99.2695 863 25.0000 62.5000 100.000 33.2875 33.8931 99.3394 864 37.5000 62.5000 100.000 35.9471 35.2644 99.4640 865 50.0000 62.5000 100.000 39.9495 37.3280 99.6515 866 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 867 0.00000 62.5000 62.5000 19.5673 28.1656 37.9180 868 0.00000 75.0000 75.0000 28.8380 41.7294 56.3511 869 0.00000 75.0000 87.5000 32.7040 43.2756 76.7134 870 0.00000 75.0000 100.000 37.3711 45.1421 101.296 871 12.5000 75.0000 100.000 37.9570 45.4442 101.323 872 25.0000 75.0000 100.000 39.4484 46.2132 101.393 873 37.5000 75.0000 100.000 42.1081 47.5845 101.518 874 50.0000 75.0000 100.000 46.1104 49.6481 101.705 875 62.5000 75.0000 100.000 51.6008 52.4790 101.962 876 75.0000 75.0000 100.000 58.7057 56.1423 102.295 877 75.0000 87.5000 100.000 66.3647 71.4581 104.848 878 0.00000 62.5000 75.0000 22.6771 29.4093 54.2975 879 0.00000 62.5000 87.5000 26.5430 30.9555 74.6597 880 12.5000 87.5000 100.000 45.6160 60.7600 103.876 881 25.0000 87.5000 100.000 47.1073 61.5290 103.946 882 37.5000 87.5000 100.000 49.7670 62.9003 104.071 883 50.0000 87.5000 100.000 53.7694 64.9639 104.258 884 0.00000 37.5000 50.0000 8.93273 10.7438 22.5167 885 0.00000 50.0000 62.5000 14.8064 18.6451 36.3310 886 0.00000 50.0000 75.0000 17.9162 19.8888 52.7105 887 0.00000 87.5000 100.000 45.0301 60.4579 103.849 888 0.00000 100.000 100.000 54.2763 78.9478 106.931 889 12.5000 100.000 100.000 54.8622 79.2499 106.958 890 25.0000 100.000 100.000 56.3536 80.0189 107.028 891 37.5000 100.000 100.000 59.0133 81.3902 107.153 892 50.0000 100.000 100.000 63.0157 83.4539 107.340 893 62.5000 100.000 100.000 68.5060 86.2847 107.598 894 75.0000 100.000 100.000 75.6110 89.9480 107.930 895 87.5000 100.000 100.000 84.4435 94.5021 108.344 896 18.7500 6.25000 6.25000 2.47275 2.01960 1.60228 897 31.2500 6.25000 6.25000 4.52400 3.07723 1.69840 898 43.7500 6.25000 6.25000 7.83538 4.78459 1.85357 899 56.2500 6.25000 6.25000 12.5649 7.22317 2.07519 900 68.7500 6.25000 6.25000 18.8477 10.4626 2.36959 901 81.2500 6.25000 6.25000 26.8030 14.5644 2.74236 902 93.7500 6.25000 6.25000 36.5384 19.5840 3.19854 903 100.000 12.5000 50.0000 46.1634 24.5980 23.2301 904 18.7500 18.7500 6.25000 3.32910 3.73207 1.88774 905 31.2500 18.7500 6.25000 5.38035 4.78970 1.98385 906 43.7500 18.7500 6.25000 8.69173 6.49706 2.13902 907 56.2500 18.7500 6.25000 13.4213 8.93563 2.36064 908 68.7500 18.7500 6.25000 19.7041 12.1751 2.65504 909 81.2500 18.7500 6.25000 27.6593 16.2768 3.02781 910 93.7500 18.7500 6.25000 37.3948 21.2964 3.48400 911 100.000 87.5000 37.5000 70.0625 75.1920 22.5534 912 18.7500 31.2500 6.25000 5.10781 7.28899 2.48064 913 31.2500 31.2500 6.25000 7.15906 8.34662 2.57676 914 43.7500 31.2500 6.25000 10.4704 10.0540 2.73193 915 56.2500 31.2500 6.25000 15.2000 12.4926 2.95355 916 68.7500 31.2500 6.25000 21.4828 15.7320 3.24795 917 81.2500 31.2500 6.25000 29.4380 19.8337 3.62072 918 93.7500 31.2500 6.25000 39.1735 24.8534 4.07690 919 100.000 75.0000 37.5000 62.4035 59.8762 20.0004 920 18.7500 43.7500 6.25000 7.97921 13.0310 3.43779 921 31.2500 43.7500 6.25000 10.0305 14.0886 3.53391 922 43.7500 43.7500 6.25000 13.3418 15.7960 3.68907 923 56.2500 43.7500 6.25000 18.0714 18.2346 3.91069 924 68.7500 43.7500 6.25000 24.3542 21.4740 4.20509 925 81.2500 43.7500 6.25000 32.3095 25.5757 4.57786 926 93.7500 43.7500 6.25000 42.0449 30.5954 5.03405 927 93.7500 56.2500 6.25000 46.1461 38.7965 6.40111 928 18.7500 56.2500 6.25000 12.0804 21.2322 4.80485 929 31.2500 56.2500 6.25000 14.1316 22.2898 4.90097 930 43.7500 56.2500 6.25000 17.4430 23.9972 5.05614 931 56.2500 56.2500 6.25000 22.1726 26.4357 5.27775 932 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 933 81.2500 56.2500 6.25000 36.4106 33.7769 5.94493 934 81.2500 68.7500 81.2500 52.9401 49.1033 66.1280 935 81.2500 81.2500 93.7500 64.0995 64.6021 90.8714 936 93.7500 81.2500 93.7500 73.8349 69.6217 91.3275 937 18.7500 68.7500 6.25000 17.5284 32.1267 6.62087 938 43.7500 68.7500 6.25000 22.8910 34.8916 6.87215 939 56.2500 68.7500 6.25000 27.6206 37.3302 7.09377 940 68.7500 68.7500 6.25000 33.9033 40.5696 7.38817 941 81.2500 68.7500 6.25000 41.8586 44.6714 7.76094 942 93.7500 68.7500 6.25000 51.5941 49.6910 8.21713 943 6.25000 68.7500 6.25000 16.5408 31.6175 6.57459 944 6.25000 81.2500 6.25000 23.4391 45.4121 8.87404 945 31.2500 81.2500 6.25000 26.4779 46.9789 9.01643 946 43.7500 81.2500 6.25000 29.7893 48.6863 9.17160 947 56.2500 81.2500 6.25000 34.5189 51.1249 9.39322 948 68.7500 81.2500 6.25000 40.8016 54.3643 9.68762 949 81.2500 81.2500 6.25000 48.7569 58.4660 10.0604 950 93.7500 81.2500 6.25000 58.4923 63.4857 10.5166 951 18.7500 81.2500 6.25000 24.4267 45.9213 8.92032 952 18.7500 93.7500 6.25000 32.8686 62.8028 11.7343 953 31.2500 93.7500 6.25000 34.9198 63.8604 11.8304 954 43.7500 93.7500 6.25000 38.2312 65.5678 11.9856 955 56.2500 93.7500 6.25000 42.9608 68.0064 12.2072 956 68.7500 93.7500 6.25000 49.2436 71.2458 12.5016 957 81.2500 93.7500 6.25000 57.1988 75.3475 12.8744 958 93.7500 93.7500 6.25000 66.9343 80.3672 13.3306 959 93.7500 93.7500 18.7500 67.3665 80.5400 15.6073 960 18.7500 6.25000 18.7500 2.90500 2.19248 3.87900 961 31.2500 6.25000 18.7500 4.95625 3.25011 3.97512 962 43.7500 6.25000 18.7500 8.26763 4.95747 4.13028 963 56.2500 6.25000 18.7500 12.9972 7.39604 4.35190 964 68.7500 6.25000 18.7500 19.2800 10.6355 4.64630 965 81.2500 6.25000 18.7500 27.2352 14.7372 5.01907 966 93.7500 6.25000 18.7500 36.9707 19.7569 5.47526 967 93.7500 81.2500 81.2500 69.5738 67.9175 68.8837 968 100.000 100.000 100.000 95.1065 100.000 108.844 969 43.7500 18.7500 18.7500 9.12398 6.66993 4.41573 970 56.2500 18.7500 18.7500 13.8535 9.10851 4.63735 971 68.7500 18.7500 18.7500 20.1363 12.3479 4.93175 972 81.2500 18.7500 18.7500 28.0916 16.4497 5.30452 973 93.7500 18.7500 18.7500 37.8270 21.4693 5.76071 974 93.7500 56.2500 81.2500 57.2275 43.2284 64.7682 975 93.7500 56.2500 93.7500 61.4886 44.9326 87.2121 976 18.7500 31.2500 18.7500 5.54006 7.46186 4.75736 977 43.7500 31.2500 18.7500 10.9027 10.2268 5.00864 978 56.2500 31.2500 18.7500 15.6322 12.6654 5.23026 979 68.7500 31.2500 18.7500 21.9150 15.9048 5.52466 980 81.2500 31.2500 18.7500 29.8703 20.0066 5.89743 981 93.7500 31.2500 18.7500 39.6057 25.0262 6.35362 982 93.7500 56.2500 68.7500 53.7455 41.8359 46.4283 983 93.7500 68.7500 68.7500 59.1935 52.7303 48.2443 984 93.7500 81.2500 68.7500 66.0918 66.5250 50.5438 985 43.7500 43.7500 18.7500 13.7741 15.9689 5.96579 986 56.2500 43.7500 18.7500 18.5037 18.4074 6.18740 987 68.7500 43.7500 18.7500 24.7864 21.6469 6.48180 988 81.2500 43.7500 18.7500 32.7417 25.7486 6.85457 989 93.7500 43.7500 18.7500 42.4771 30.7682 7.31076 990 31.2500 31.2500 18.7500 7.59131 8.51949 4.85348 991 31.2500 43.7500 18.7500 10.4627 14.2615 5.81062 992 31.2500 56.2500 18.7500 14.5639 22.4627 7.17768 993 43.7500 56.2500 18.7500 17.8753 24.1700 7.33285 994 56.2500 56.2500 18.7500 22.6048 26.6086 7.55447 995 68.7500 56.2500 18.7500 28.8876 29.8480 7.84887 996 81.2500 56.2500 18.7500 36.8429 33.9498 8.22164 997 93.7500 56.2500 18.7500 46.5783 38.9694 8.67783 998 93.7500 68.7500 18.7500 52.0263 49.8639 10.4938 999 31.2500 68.7500 6.25000 19.5796 33.1843 6.71699 1000 31.2500 68.7500 18.7500 20.0119 33.3572 8.99370 1001 43.7500 68.7500 18.7500 23.3233 35.0645 9.14887 1002 56.2500 68.7500 18.7500 28.0528 37.5031 9.37049 1003 68.7500 68.7500 18.7500 34.3356 40.7425 9.66489 1004 81.2500 68.7500 18.7500 42.2909 44.8443 10.0377 1005 93.7500 81.2500 18.7500 58.9246 63.6585 12.7933 1006 18.7500 43.7500 18.7500 8.41147 13.2039 5.71450 1007 18.7500 56.2500 18.7500 12.5126 21.4050 7.08157 1008 31.2500 81.2500 18.7500 26.9102 47.1518 11.2931 1009 43.7500 81.2500 18.7500 30.2215 48.8592 11.4483 1010 56.2500 81.2500 18.7500 34.9511 51.2977 11.6699 1011 68.7500 81.2500 18.7500 41.2339 54.5372 11.9643 1012 81.2500 81.2500 18.7500 49.1892 58.6389 12.3371 1013 18.7500 68.7500 18.7500 17.9606 32.2995 8.89758 1014 18.7500 81.2500 18.7500 24.8589 46.0942 11.1970 1015 18.7500 93.7500 18.7500 33.3008 62.9757 14.0110 1016 31.2500 93.7500 18.7500 35.3521 64.0333 14.1071 1017 43.7500 93.7500 18.7500 38.6635 65.7407 14.2623 1018 56.2500 93.7500 18.7500 43.3930 68.1792 14.4839 1019 68.7500 93.7500 18.7500 49.6758 71.4186 14.7783 1020 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 1021 6.25000 6.25000 18.7500 1.91743 1.68328 3.83272 1022 6.25000 6.25000 31.2500 2.81525 2.04236 8.56163 1023 18.7500 6.25000 31.2500 3.80282 2.55155 8.60790 1024 31.2500 6.25000 31.2500 5.85407 3.60918 8.70402 1025 43.7500 6.25000 31.2500 9.16545 5.31654 8.85919 1026 56.2500 6.25000 31.2500 13.8950 7.75511 9.08081 1027 68.7500 6.25000 31.2500 20.1778 10.9945 9.37521 1028 81.2500 6.25000 31.2500 28.1331 15.0963 9.74798 1029 93.7500 6.25000 31.2500 37.8685 20.1159 10.2042 1030 93.7500 31.2500 81.2500 50.2549 29.2852 62.4440 1031 93.7500 43.7500 93.7500 57.3875 36.7314 85.8450 1032 31.2500 18.7500 31.2500 6.71042 5.32164 8.98947 1033 43.7500 18.7500 31.2500 10.0218 7.02900 9.14464 1034 56.2500 18.7500 31.2500 14.7514 9.46758 9.36626 1035 68.7500 18.7500 31.2500 21.0341 12.7070 9.66066 1036 81.2500 18.7500 31.2500 28.9894 16.8088 10.0334 1037 93.7500 18.7500 31.2500 38.7249 21.8284 10.4896 1038 93.7500 31.2500 43.7500 41.9529 25.9650 18.7165 1039 93.7500 31.2500 56.2500 44.0230 26.7929 29.6199 1040 93.7500 43.7500 56.2500 46.8944 32.5349 30.5771 1041 56.2500 31.2500 31.2500 16.5301 13.0245 9.95917 1042 68.7500 31.2500 31.2500 22.8128 16.2639 10.2536 1043 81.2500 31.2500 31.2500 30.7681 20.3657 10.6263 1044 93.7500 31.2500 31.2500 40.5036 25.3853 11.0825 1045 93.7500 43.7500 43.7500 44.8243 31.7070 19.6736 1046 18.7500 31.2500 31.2500 6.43788 7.82093 9.48626 1047 18.7500 43.7500 31.2500 9.30929 13.5629 10.4434 1048 43.7500 43.7500 31.2500 14.6719 16.3279 10.6947 1049 56.2500 43.7500 31.2500 19.4015 18.7665 10.9163 1050 68.7500 43.7500 31.2500 25.6842 22.0059 11.2107 1051 81.2500 43.7500 31.2500 33.6395 26.1077 11.5835 1052 93.7500 43.7500 31.2500 43.3750 31.1273 12.0397 1053 93.7500 56.2500 43.7500 48.9255 39.9081 21.0407 1054 31.2500 43.7500 31.2500 11.3605 14.6206 10.5395 1055 31.2500 56.2500 31.2500 15.4617 22.8217 11.9066 1056 43.7500 56.2500 31.2500 18.7731 24.5291 12.0618 1057 56.2500 56.2500 31.2500 23.5026 26.9677 12.2834 1058 68.7500 56.2500 31.2500 29.7854 30.2071 12.5778 1059 81.2500 56.2500 31.2500 37.7407 34.3089 12.9505 1060 93.7500 56.2500 31.2500 47.4761 39.3285 13.4067 1061 100.000 62.5000 37.5000 56.2426 47.5561 17.9468 1062 18.7500 68.7500 31.2500 18.8584 32.6586 13.6265 1063 31.2500 68.7500 31.2500 20.9097 33.7162 13.7226 1064 43.7500 68.7500 31.2500 24.2211 35.4236 13.8778 1065 56.2500 68.7500 31.2500 28.9506 37.8622 14.0994 1066 68.7500 68.7500 31.2500 35.2334 41.1016 14.3938 1067 81.2500 68.7500 31.2500 43.1887 45.2033 14.7666 1068 93.7500 68.7500 31.2500 52.9241 50.2230 15.2227 1069 93.7500 81.2500 31.2500 59.8224 64.0176 17.5222 1070 6.25000 68.7500 18.7500 16.9731 31.7903 8.85131 1071 6.25000 81.2500 31.2500 24.7692 45.9440 15.8797 1072 43.7500 81.2500 31.2500 31.1194 49.2182 16.1772 1073 56.2500 81.2500 31.2500 35.8489 51.6568 16.3988 1074 68.7500 81.2500 31.2500 42.1317 54.8962 16.6932 1075 81.2500 81.2500 31.2500 50.0870 58.9980 17.0660 1076 6.25000 81.2500 18.7500 23.8713 45.5850 11.1508 1077 6.25000 93.7500 18.7500 32.3133 62.4665 13.9648 1078 6.25000 93.7500 31.2500 33.2111 62.8255 18.6937 1079 31.2500 93.7500 31.2500 36.2499 64.3924 18.8361 1080 43.7500 93.7500 31.2500 39.5613 66.0997 18.9912 1081 56.2500 93.7500 31.2500 44.2909 68.5383 19.2128 1082 68.7500 93.7500 31.2500 50.5736 71.7777 19.5072 1083 81.2500 93.7500 31.2500 58.5289 75.8795 19.8800 1084 93.7500 93.7500 31.2500 68.2643 80.8991 20.3362 1085 93.7500 93.7500 43.7500 69.7137 81.4788 27.9702 1086 18.7500 6.25000 43.7500 5.25219 3.13120 16.2419 1087 31.2500 6.25000 43.7500 7.30344 4.18884 16.3380 1088 43.7500 6.25000 43.7500 10.6148 5.89619 16.4932 1089 56.2500 6.25000 43.7500 15.3444 8.33477 16.7148 1090 68.7500 6.25000 43.7500 21.6272 11.5742 17.0092 1091 81.2500 6.25000 43.7500 29.5824 15.6760 17.3820 1092 93.7500 6.25000 43.7500 39.3179 20.6956 17.8381 1093 93.7500 18.7500 81.2500 48.4762 25.7283 61.8511 1094 93.7500 18.7500 93.7500 52.7374 27.4325 84.2950 1095 93.7500 31.2500 93.7500 54.5161 30.9894 84.8879 1096 43.7500 18.7500 43.7500 11.4712 7.60866 16.7786 1097 56.2500 18.7500 43.7500 16.2007 10.0472 17.0002 1098 68.7500 18.7500 43.7500 22.4835 13.2867 17.2946 1099 81.2500 18.7500 43.7500 30.4388 17.3884 17.6674 1100 93.7500 18.7500 43.7500 40.1742 22.4080 18.1236 1101 93.7500 18.7500 56.2500 42.2443 23.2360 29.0270 1102 31.2500 18.7500 43.7500 8.15979 5.90130 16.6235 1103 31.2500 31.2500 43.7500 9.93850 9.45822 17.2164 1104 43.7500 31.2500 43.7500 13.2499 11.1656 17.3715 1105 81.2500 31.2500 43.7500 32.2175 20.9453 18.2603 1106 100.000 100.000 100.000 95.1065 100.000 108.844 1107 6.25000 18.7500 18.7500 2.77379 3.39575 4.11818 1108 6.25000 31.2500 18.7500 4.55249 6.95267 4.71108 1109 6.25000 43.7500 18.7500 7.42390 12.6947 5.66823 1110 6.25000 43.7500 31.2500 8.32172 13.0537 10.3971 1111 31.2500 43.7500 43.7500 12.8099 15.2002 18.1735 1112 56.2500 43.7500 43.7500 20.8508 19.3462 18.5503 1113 68.7500 43.7500 43.7500 27.1336 22.5856 18.8447 1114 81.2500 43.7500 43.7500 35.0889 26.6873 19.2175 1115 81.2500 68.7500 68.7500 49.4581 47.7107 47.7881 1116 6.25000 56.2500 18.7500 11.5251 20.8959 7.03529 1117 18.7500 56.2500 31.2500 13.4104 21.7641 11.8105 1118 31.2500 56.2500 43.7500 16.9111 23.4014 19.5406 1119 43.7500 56.2500 43.7500 20.2224 25.1088 19.6957 1120 56.2500 56.2500 43.7500 24.9520 27.5473 19.9174 1121 68.7500 56.2500 43.7500 31.2348 30.7868 20.2118 1122 81.2500 56.2500 43.7500 39.1901 34.8885 20.5845 1123 93.7500 56.2500 56.2500 50.9956 40.7361 31.9441 1124 93.7500 68.7500 56.2500 56.4436 51.6305 33.7601 1125 93.7500 81.2500 56.2500 63.3419 65.4252 36.0596 1126 31.2500 68.7500 43.7500 22.3591 34.2959 21.3566 1127 43.7500 68.7500 43.7500 25.6704 36.0032 21.5117 1128 56.2500 68.7500 43.7500 30.4000 38.4418 21.7334 1129 68.7500 68.7500 43.7500 36.6828 41.6812 22.0278 1130 81.2500 68.7500 43.7500 44.6381 45.7830 22.4005 1131 93.7500 68.7500 43.7500 54.3735 50.8026 22.8567 1132 93.7500 81.2500 43.7500 61.2718 64.5973 25.1562 1133 31.2500 81.2500 31.2500 27.8080 47.5109 16.0221 1134 31.2500 81.2500 43.7500 29.2574 48.0905 23.6560 1135 43.7500 81.2500 43.7500 32.5687 49.7979 23.8112 1136 56.2500 81.2500 43.7500 37.2983 52.2365 24.0328 1137 68.7500 81.2500 43.7500 43.5811 55.4759 24.3272 1138 81.2500 81.2500 43.7500 51.5363 59.5776 24.7000 1139 18.7500 81.2500 31.2500 25.7567 46.4532 15.9259 1140 18.7500 93.7500 31.2500 34.1987 63.3347 18.7399 1141 18.7500 93.7500 43.7500 35.6480 63.9144 26.3739 1142 31.2500 93.7500 43.7500 37.6993 64.9720 26.4700 1143 43.7500 93.7500 43.7500 41.0107 66.6794 26.6252 1144 56.2500 93.7500 43.7500 45.7402 69.1180 26.8468 1145 68.7500 93.7500 43.7500 52.0230 72.3574 27.1412 1146 81.2500 93.7500 43.7500 59.9783 76.4591 27.5140 1147 6.25000 6.25000 43.7500 4.26462 2.62201 16.1956 1148 6.25000 6.25000 56.2500 6.33472 3.44992 27.0990 1149 18.7500 6.25000 56.2500 7.32229 3.95911 27.1453 1150 31.2500 6.25000 56.2500 9.37354 5.01674 27.2414 1151 43.7500 6.25000 56.2500 12.6849 6.72410 27.3966 1152 56.2500 6.25000 56.2500 17.4145 9.16268 27.6182 1153 68.7500 6.25000 56.2500 23.6972 12.4021 27.9126 1154 81.2500 6.25000 56.2500 31.6525 16.5039 28.2854 1155 93.7500 6.25000 56.2500 41.3880 21.5235 28.7416 1156 6.25000 18.7500 43.7500 5.12097 4.33448 16.4811 1157 6.25000 18.7500 56.2500 7.19107 5.16239 27.3845 1158 31.2500 18.7500 56.2500 10.2299 6.72921 27.5269 1159 43.7500 18.7500 56.2500 13.5413 8.43657 27.6820 1160 56.2500 18.7500 56.2500 18.2708 10.8751 27.9037 1161 68.7500 18.7500 56.2500 24.5536 14.1146 28.1981 1162 81.2500 18.7500 56.2500 32.5089 18.2163 28.5708 1163 93.7500 18.7500 68.7500 44.9942 24.3358 43.5112 1164 93.7500 31.2500 68.7500 46.7730 27.8927 44.1041 1165 18.7500 18.7500 31.2500 4.65917 4.26401 8.89336 1166 18.7500 31.2500 43.7500 7.88725 8.40059 17.1202 1167 43.7500 31.2500 56.2500 15.3200 11.9935 28.2749 1168 56.2500 31.2500 56.2500 20.0495 14.4321 28.4966 1169 68.7500 31.2500 56.2500 26.3323 17.6715 28.7910 1170 81.2500 31.2500 56.2500 34.2876 21.7732 29.1637 1171 93.7500 43.7500 68.7500 49.6444 33.6347 45.0612 1172 93.7500 43.7500 81.2500 53.1263 35.0272 63.4011 1173 93.7500 68.7500 81.2500 62.6755 54.1229 66.5842 1174 93.7500 68.7500 93.7500 66.9366 55.8271 89.0281 1175 56.2500 31.2500 43.7500 17.9794 13.6042 17.5931 1176 56.2500 43.7500 56.2500 22.9209 20.1741 29.4537 1177 68.7500 43.7500 56.2500 29.2037 23.4135 29.7481 1178 81.2500 43.7500 56.2500 37.1590 27.5153 30.1209 1179 43.7500 31.2500 31.2500 11.8005 10.5859 9.73755 1180 43.7500 43.7500 56.2500 18.1914 17.7355 29.2321 1181 31.2500 43.7500 56.2500 14.8800 16.0281 29.0769 1182 31.2500 56.2500 56.2500 18.9812 24.2293 30.4440 1183 43.7500 56.2500 56.2500 22.2925 25.9367 30.5992 1184 68.7500 56.2500 56.2500 33.3049 31.6147 31.1152 1185 81.2500 56.2500 56.2500 41.2601 35.7164 31.4879 1186 81.2500 56.2500 68.7500 44.0101 36.8162 45.9721 1187 81.2500 56.2500 81.2500 47.4921 38.2088 64.3120 1188 18.7500 68.7500 56.2500 22.3779 34.0662 32.1639 1189 31.2500 68.7500 56.2500 24.4292 35.1238 32.2600 1190 43.7500 68.7500 56.2500 27.7405 36.8312 32.4152 1191 56.2500 68.7500 56.2500 32.4701 39.2697 32.6368 1192 68.7500 68.7500 56.2500 38.7529 42.5091 32.9312 1193 81.2500 68.7500 56.2500 46.7082 46.6109 33.3040 1194 18.7500 68.7500 43.7500 20.3078 33.2383 21.2605 1195 18.7500 81.2500 43.7500 27.2061 47.0329 23.5599 1196 18.7500 81.2500 56.2500 29.2762 47.8608 34.4633 1197 31.2500 81.2500 56.2500 31.3275 48.9184 34.5595 1198 43.7500 81.2500 56.2500 34.6388 50.6258 34.7146 1199 56.2500 81.2500 56.2500 39.3684 53.0644 34.9362 1200 68.7500 81.2500 56.2500 45.6512 56.3038 35.2306 1201 81.2500 81.2500 56.2500 53.6064 60.4056 35.6034 1202 81.2500 81.2500 68.7500 56.3564 61.5054 50.0876 1203 6.25000 93.7500 6.25000 31.8810 62.2936 11.6880 1204 18.7500 93.7500 56.2500 37.7181 64.7423 37.2773 1205 31.2500 93.7500 56.2500 39.7694 65.7999 37.3735 1206 43.7500 93.7500 56.2500 43.0808 67.5073 37.5286 1207 56.2500 93.7500 56.2500 47.8103 69.9459 37.7502 1208 68.7500 93.7500 56.2500 54.0931 73.1853 38.0446 1209 81.2500 93.7500 56.2500 62.0484 77.2870 38.4174 1210 93.7500 93.7500 56.2500 71.7838 82.3067 38.8736 1211 93.7500 93.7500 68.7500 74.5337 83.4065 53.3578 1212 18.7500 6.25000 68.7500 10.0722 5.05891 41.6295 1213 31.2500 6.25000 68.7500 12.1235 6.11654 41.7256 1214 43.7500 6.25000 68.7500 15.4348 7.82390 41.8808 1215 56.2500 6.25000 68.7500 20.1644 10.2625 42.1024 1216 68.7500 6.25000 68.7500 26.4472 13.5019 42.3968 1217 81.2500 6.25000 68.7500 34.4025 17.6037 42.7695 1218 93.7500 6.25000 68.7500 44.1379 22.6233 43.2257 1219 18.7500 18.7500 56.2500 8.17864 5.67158 27.4308 1220 18.7500 18.7500 68.7500 10.9286 6.77138 41.9149 1221 31.2500 18.7500 68.7500 12.9798 7.82901 42.0110 1222 43.7500 18.7500 68.7500 16.2912 9.53636 42.1662 1223 56.2500 18.7500 68.7500 21.0208 11.9749 42.3878 1224 68.7500 18.7500 68.7500 27.3035 15.2144 42.6822 1225 81.2500 18.7500 68.7500 35.2588 19.3161 43.0550 1226 81.2500 31.2500 93.7500 44.7806 25.9698 84.4317 1227 81.2500 56.2500 93.7500 51.7532 39.9130 86.7559 1228 31.2500 31.2500 56.2500 12.0086 10.2861 28.1198 1229 31.2500 31.2500 68.7500 14.7585 11.3859 42.6039 1230 43.7500 31.2500 68.7500 18.0699 13.0933 42.7591 1231 56.2500 31.2500 68.7500 22.7995 15.5319 42.9807 1232 68.7500 31.2500 68.7500 29.0822 18.7713 43.2751 1233 81.2500 31.2500 68.7500 37.0375 22.8730 43.6479 1234 81.2500 68.7500 93.7500 57.2012 50.8075 88.5719 1235 6.25000 31.2500 56.2500 8.96978 8.71930 27.9774 1236 6.25000 43.7500 68.7500 14.5911 15.5611 43.4187 1237 31.2500 43.7500 68.7500 17.6299 17.1279 43.5611 1238 43.7500 43.7500 68.7500 20.9413 18.8353 43.7163 1239 56.2500 43.7500 68.7500 25.6709 21.2739 43.9379 1240 68.7500 43.7500 68.7500 31.9536 24.5133 44.2323 1241 81.2500 43.7500 68.7500 39.9089 28.6151 44.6050 1242 18.7500 31.2500 56.2500 9.95735 9.22850 28.0237 1243 18.7500 31.2500 68.7500 12.7073 10.3283 42.5078 1244 18.7500 56.2500 68.7500 19.6798 24.2715 44.8320 1245 31.2500 56.2500 68.7500 21.7311 25.3291 44.9282 1246 43.7500 56.2500 68.7500 25.0425 27.0365 45.0833 1247 56.2500 56.2500 68.7500 29.7720 29.4750 45.3049 1248 68.7500 56.2500 68.7500 36.0548 32.7145 45.5993 1249 18.7500 43.7500 43.7500 10.7587 14.1426 18.0774 1250 18.7500 56.2500 43.7500 14.8598 22.3438 19.4444 1251 18.7500 56.2500 56.2500 16.9299 23.1717 30.3479 1252 18.7500 68.7500 68.7500 25.1278 35.1660 46.6481 1253 31.2500 68.7500 68.7500 27.1791 36.2236 46.7442 1254 43.7500 68.7500 68.7500 30.4905 37.9310 46.8993 1255 56.2500 68.7500 68.7500 35.2200 40.3695 47.1210 1256 56.2500 81.2500 81.2500 45.6003 55.5567 67.7603 1257 6.25000 56.2500 31.2500 12.4229 21.2549 11.7642 1258 6.25000 68.7500 31.2500 17.8709 32.1494 13.5802 1259 6.25000 68.7500 56.2500 21.3904 33.5570 32.1176 1260 31.2500 81.2500 68.7500 34.0774 50.0182 49.0436 1261 43.7500 81.2500 68.7500 37.3888 51.7256 49.1988 1262 56.2500 81.2500 68.7500 42.1183 54.1642 49.4204 1263 68.7500 81.2500 68.7500 48.4011 57.4036 49.7148 1264 6.25000 81.2500 56.2500 28.2886 47.3516 34.4171 1265 6.25000 93.7500 56.2500 36.7306 64.2331 37.2311 1266 6.25000 93.7500 68.7500 39.4805 65.3329 51.7152 1267 18.7500 93.7500 68.7500 40.4681 65.8421 51.7615 1268 31.2500 93.7500 68.7500 42.5193 66.8997 51.8576 1269 43.7500 93.7500 68.7500 45.8307 68.6071 52.0128 1270 56.2500 93.7500 68.7500 50.5602 71.0457 52.2344 1271 68.7500 93.7500 68.7500 56.8430 74.2851 52.5288 1272 81.2500 93.7500 68.7500 64.7983 78.3868 52.9016 1273 6.25000 6.25000 68.7500 9.08465 4.54972 41.5832 1274 6.25000 6.25000 81.2500 12.5666 5.94229 59.9231 1275 18.7500 6.25000 81.2500 13.5542 6.45148 59.9694 1276 31.2500 6.25000 81.2500 15.6054 7.50911 60.0655 1277 43.7500 6.25000 81.2500 18.9168 9.21647 60.2207 1278 56.2500 6.25000 81.2500 23.6464 11.6550 60.4423 1279 68.7500 6.25000 81.2500 29.9292 14.8945 60.7367 1280 81.2500 6.25000 81.2500 37.8844 18.9962 61.1094 1281 93.7500 6.25000 81.2500 47.6199 24.0159 61.5656 1282 93.7500 6.25000 93.7500 51.8810 25.7200 84.0095 1283 18.7500 18.7500 43.7500 6.10854 4.84367 16.5273 1284 31.2500 18.7500 81.2500 16.4618 9.22158 60.3509 1285 43.7500 18.7500 81.2500 19.7732 10.9289 60.5061 1286 56.2500 18.7500 81.2500 24.5027 13.3675 60.7277 1287 68.7500 18.7500 81.2500 30.7855 16.6069 61.0221 1288 81.2500 18.7500 81.2500 38.7408 20.7087 61.3949 1289 81.2500 18.7500 93.7500 43.0019 22.4129 83.8388 1290 18.7500 18.7500 81.2500 14.4105 8.16395 60.2548 1291 18.7500 31.2500 81.2500 16.1892 11.7209 60.8477 1292 31.2500 31.2500 81.2500 18.2405 12.7785 60.9439 1293 43.7500 31.2500 81.2500 21.5519 14.4859 61.0990 1294 56.2500 31.2500 81.2500 26.2814 16.9244 61.3206 1295 68.7500 31.2500 81.2500 32.5642 20.1638 61.6150 1296 81.2500 31.2500 81.2500 40.5195 24.2656 61.9878 1297 18.7500 43.7500 56.2500 12.8288 14.9705 28.9808 1298 18.7500 43.7500 68.7500 15.5787 16.0703 43.4650 1299 18.7500 43.7500 81.2500 19.0607 17.4629 61.8049 1300 31.2500 43.7500 81.2500 21.1119 18.5205 61.9010 1301 43.7500 43.7500 81.2500 24.4233 20.2279 62.0562 1302 56.2500 43.7500 81.2500 29.1528 22.6664 62.2778 1303 68.7500 43.7500 81.2500 35.4356 25.9059 62.5722 1304 81.2500 43.7500 81.2500 43.3909 30.0076 62.9450 1305 81.2500 43.7500 93.7500 47.6520 31.7118 85.3888 1306 6.25000 18.7500 68.7500 9.94100 6.26218 41.8686 1307 18.7500 56.2500 81.2500 23.1618 25.6640 63.1719 1308 31.2500 56.2500 81.2500 25.2131 26.7217 63.2681 1309 43.7500 56.2500 81.2500 28.5244 28.4290 63.4232 1310 56.2500 56.2500 81.2500 33.2540 30.8676 63.6448 1311 68.7500 56.2500 81.2500 39.5368 34.1070 63.9392 1312 68.7500 68.7500 81.2500 44.9848 45.0015 65.7553 1313 6.25000 56.2500 43.7500 13.8722 21.8346 19.3982 1314 6.25000 56.2500 56.2500 15.9423 22.6625 30.3016 1315 18.7500 68.7500 81.2500 28.6098 36.5585 64.9880 1316 31.2500 68.7500 81.2500 30.6611 37.6162 65.0841 1317 43.7500 68.7500 81.2500 33.9724 39.3235 65.2392 1318 56.2500 68.7500 81.2500 38.7020 41.7621 65.4609 1319 68.7500 81.2500 81.2500 51.8831 58.7962 68.0547 1320 68.7500 81.2500 93.7500 56.1442 60.5003 90.4986 1321 6.25000 81.2500 68.7500 31.0386 48.4514 48.9012 1322 6.25000 81.2500 81.2500 34.5205 49.8440 67.2411 1323 18.7500 81.2500 81.2500 35.5081 50.3532 67.2874 1324 31.2500 81.2500 81.2500 37.5594 51.4108 67.3835 1325 43.7500 81.2500 81.2500 40.8707 53.1182 67.5387 1326 6.25000 68.7500 43.7500 19.3203 32.7291 21.2142 1327 6.25000 81.2500 43.7500 26.2185 46.5237 23.5136 1328 6.25000 93.7500 43.7500 34.6605 63.4052 26.3276 1329 6.25000 93.7500 81.2500 42.9625 66.7255 70.0551 1330 18.7500 93.7500 81.2500 43.9500 67.2347 70.1014 1331 31.2500 93.7500 81.2500 46.0013 68.2923 70.1975 1332 43.7500 93.7500 81.2500 49.3127 69.9997 70.3527 1333 56.2500 93.7500 81.2500 54.0422 72.4382 70.5743 1334 68.7500 93.7500 81.2500 60.3250 75.6777 70.8687 1335 81.2500 93.7500 81.2500 68.2803 79.7794 71.2415 1336 93.7500 93.7500 81.2500 78.0157 84.7990 71.6977 1337 6.25000 6.25000 93.7500 16.8278 7.64648 82.3670 1338 18.7500 6.25000 93.7500 17.8153 8.15567 82.4133 1339 31.2500 6.25000 93.7500 19.8666 9.21330 82.5094 1340 43.7500 6.25000 93.7500 23.1780 10.9207 82.6645 1341 56.2500 6.25000 93.7500 27.9075 13.3592 82.8862 1342 68.7500 6.25000 93.7500 34.1903 16.5987 83.1806 1343 81.2500 6.25000 93.7500 42.1456 20.7004 83.5533 1344 6.25000 18.7500 81.2500 13.4230 7.65475 60.2086 1345 6.25000 18.7500 93.7500 17.6841 9.35894 82.6524 1346 18.7500 18.7500 93.7500 18.6717 9.86813 82.6987 1347 31.2500 18.7500 93.7500 20.7229 10.9258 82.7948 1348 43.7500 18.7500 93.7500 24.0343 12.6331 82.9500 1349 56.2500 18.7500 93.7500 28.7639 15.0717 83.1716 1350 68.7500 18.7500 93.7500 35.0466 18.3111 83.4660 1351 6.25000 31.2500 68.7500 11.7197 9.81910 42.4616 1352 6.25000 31.2500 81.2500 15.2017 11.2117 60.8015 1353 6.25000 31.2500 93.7500 19.4628 12.9159 83.2453 1354 18.7500 31.2500 93.7500 20.4504 13.4251 83.2916 1355 31.2500 31.2500 93.7500 22.5016 14.4827 83.3877 1356 43.7500 31.2500 93.7500 25.8130 16.1900 83.5429 1357 56.2500 31.2500 93.7500 30.5426 18.6286 83.7645 1358 68.7500 31.2500 93.7500 36.8254 21.8680 84.0589 1359 68.7500 43.7500 93.7500 39.6968 27.6100 85.0161 1360 6.25000 43.7500 81.2500 18.0731 16.9537 61.7586 1361 6.25000 43.7500 93.7500 22.3342 18.6579 84.2025 1362 18.7500 43.7500 93.7500 23.3218 19.1671 84.2488 1363 31.2500 43.7500 93.7500 25.3730 20.2247 84.3449 1364 43.7500 43.7500 93.7500 28.6844 21.9320 84.5000 1365 56.2500 43.7500 93.7500 33.4140 24.3706 84.7217 1366 6.25000 43.7500 56.2500 11.8412 14.4613 28.9345 1367 6.25000 56.2500 68.7500 18.6923 23.7623 44.7858 1368 6.25000 56.2500 81.2500 22.1743 25.1549 63.1257 1369 6.25000 56.2500 93.7500 26.4354 26.8590 85.5695 1370 18.7500 56.2500 93.7500 27.4230 27.3682 85.6158 1371 31.2500 56.2500 93.7500 29.4742 28.4259 85.7119 1372 43.7500 56.2500 93.7500 32.7856 30.1332 85.8671 1373 56.2500 56.2500 93.7500 37.5151 32.5718 86.0887 1374 68.7500 56.2500 93.7500 43.7979 35.8112 86.3831 1375 68.7500 68.7500 93.7500 49.2459 46.7057 88.1991 1376 6.25000 68.7500 81.2500 27.6223 36.0493 64.9417 1377 6.25000 68.7500 93.7500 31.8834 37.7535 87.3856 1378 18.7500 68.7500 93.7500 32.8710 38.2627 87.4318 1379 31.2500 68.7500 93.7500 34.9222 39.3204 87.5280 1380 43.7500 68.7500 93.7500 38.2336 41.0277 87.6831 1381 56.2500 68.7500 93.7500 42.9632 43.4663 87.9047 1382 56.2500 81.2500 93.7500 49.8614 57.2609 90.2042 1383 6.25000 18.7500 31.2500 3.67160 3.75482 8.84708 1384 6.25000 31.2500 43.7500 6.89968 7.89139 17.0740 1385 18.7500 81.2500 68.7500 32.0261 48.9606 48.9475 1386 18.7500 81.2500 93.7500 39.7692 52.0574 89.7313 1387 31.2500 81.2500 93.7500 41.8205 53.1150 89.8274 1388 43.7500 81.2500 93.7500 45.1319 54.8223 89.9826 1389 6.25000 31.2500 31.2500 5.45031 7.31174 9.43999 1390 6.25000 43.7500 43.7500 9.77109 13.6334 18.0311 1391 6.25000 68.7500 68.7500 24.1403 34.6568 46.6018 1392 6.25000 81.2500 93.7500 38.7817 51.5482 89.6850 1393 6.25000 93.7500 93.7500 47.2236 68.4297 92.4990 1394 18.7500 93.7500 93.7500 48.2112 68.9389 92.5453 1395 31.2500 93.7500 93.7500 50.2624 69.9965 92.6414 1396 43.7500 93.7500 93.7500 53.5738 71.7038 92.7966 1397 56.2500 93.7500 93.7500 58.3034 74.1424 93.0182 1398 68.7500 93.7500 93.7500 64.5861 77.3818 93.3126 1399 81.2500 93.7500 93.7500 72.5414 81.4836 93.6854 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -dmadvr -qh -w0.3127,0.3290 -gs -f1 -m END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/presets/office_web.icc000644 000765 000000 00000035724 12237536421 022057 0ustar00svpwheel000000 000000 ;argl mntrRGB XYZ  0&acspMSFT-argl_<%pXYZ vcgt  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv  *5AO^o+Jj%O{ >sY]3lk  { :  h ;  n^VV_p?nD-~*: !_""#$Y%%&'v(C))*+,f-A../0123{4h5W6H7<829+:%;"<"=$>(?.@7ABBOC_DqEFGHIKL3MXNOPRS5TiUVXYOZ[]^\_`b?cdf8ghjGkmnloq>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv  *5AO^o+Jj%O{ >sY]3lk  { :  h ;  n^VV_p?nD-~*: !_""#$Y%%&'v(C))*+,f-A../0123{4h5W6H7<829+:%;"<"=$>(?.@7ABBOC_DqEFGHIKL3MXNOPRS5TiUVXYOZ[]^\_`b?cdf8ghjGkmnloq>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv9Ur9Ur9Vs9]$O{8j?x*h*m A ! o  b d  t 2\+pQ:*""*:Rs4iJ !@!"#I#$%h&"&'(]) )*+x,E--./0l1I2(3 3456789~:u;ol?q@yABCDEFGIJ?KdLMNPQIRSTV7WzXZ [W\]_P`bcgdf1gijykmdnp]qsdtvxxy{1|~h VdՍU㔰U- ̡xsqt{ؽ@kƛAπ YةWߵ|U@>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv9Ur9Ur9Vs9]$O{8j?x*h*m A ! o  b d  t 2\+pQ:*""*:Rs4iJ !@!"#I#$%h&"&'(]) )*+x,E--./0l1I2(3 3456789~:u;ol?q@yABCDEFGIJ?KdLMNPQIRSTV7WzXZ [W\]_P`bcgdf1gijykmdnp]qsdtvxxy{1|~h VdՍU㔰U- ̡xsqt{ؽ@kƛAπ YةWߵ|U@>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv(<Pcw 9To2W}%SM2o/sG*z  r y 2 U ^<!%Af,fLD !P""#p$*$%&d'&'(){*F++,-.a/:0012345i6U7B839%:;< =>?@ ABC#D0E?FQGeH|IJKLNO9PaQRSUVPWXY[=\~]_ `Rabd>efh@ijl[mo$pqsftvJwy9z|2}7Fх_P5ܕ2⚔Iy9¨V%ʱ{W7±ĥƜȕʒ̑ΔЙҡԭֻ.NqM3ttextCTI3 DESCRIPTOR "Argyll Calibration Target chart information 3" ORIGINATOR "Argyll dispread" CREATED "Sat Mar 14 19:00:55 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "APPROX_WHITE_POINT" APPROX_WHITE_POINT "95.106486 100.000000 108.844025" KEYWORD "COLOR_REP" COLOR_REP "RGB_XYZ" KEYWORD "BLACK_COLOR_PATCHES" BLACK_COLOR_PATCHES "4" KEYWORD "COMP_GREY_STEPS" COMP_GREY_STEPS "9" KEYWORD "MULTI_DIM_BCC_STEPS" MULTI_DIM_BCC_STEPS "3" KEYWORD "MULTI_DIM_STEPS" MULTI_DIM_STEPS "3" KEYWORD "SINGLE_DIM_STEPS" SINGLE_DIM_STEPS "3" KEYWORD "WHITE_COLOR_PATCHES" WHITE_COLOR_PATCHES "4" BEGIN_ARGYLL_COLPROF_ARGS -qh -as END_ARGYLL_COLPROF_ARGS NUMBER_OF_FIELDS 7 BEGIN_DATA_FORMAT SAMPLE_ID RGB_R RGB_G RGB_B XYZ_X XYZ_Y XYZ_Z END_DATA_FORMAT NUMBER_OF_SETS 57 BEGIN_DATA 1 100.000 100.000 100.000 95.1065 100.000 108.844 2 100.000 100.000 100.000 95.1065 100.000 108.844 3 100.000 100.000 100.000 95.1065 100.000 108.844 4 100.000 100.000 100.000 95.1065 100.000 108.844 5 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 6 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 7 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 8 0.00000 0.00000 0.00000 1.00000 1.00000 1.00000 9 12.5000 12.5000 12.5000 2.35042 2.42064 2.54755 10 25.0000 25.0000 25.0000 5.78777 6.03673 6.48668 11 37.5000 37.5000 37.5000 11.9179 12.4856 13.5116 12 50.0000 50.0000 50.0000 21.1427 22.1901 24.0831 13 62.5000 62.5000 62.5000 33.7971 35.5025 38.5847 14 75.0000 75.0000 75.0000 50.1727 52.7296 57.3508 15 87.5000 87.5000 87.5000 70.5301 74.1456 80.6800 16 0.00000 0.00000 50.0000 4.82515 2.52982 21.1475 17 0.00000 0.00000 100.000 18.8711 8.14731 95.1290 18 0.00000 50.0000 0.00000 8.57817 16.1542 3.52608 19 0.00000 50.0000 50.0000 12.4033 17.6840 23.6735 20 0.00000 50.0000 100.000 26.4493 23.3015 97.6550 21 0.00000 100.000 0.00000 36.4052 71.8005 12.8018 22 0.00000 100.000 50.0000 40.2304 73.3303 32.9493 23 0.00000 100.000 100.000 54.2763 78.9478 106.931 24 25.0000 25.0000 75.0000 14.2166 9.40773 50.8822 25 25.0000 75.0000 25.0000 22.4865 39.4295 12.0530 26 25.0000 75.0000 75.0000 30.9153 42.8005 56.4485 27 50.0000 0.00000 0.00000 9.73934 5.50603 1.40951 28 50.0000 0.00000 50.0000 13.5645 7.03585 21.5570 29 50.0000 0.00000 100.000 27.6104 12.6533 95.5385 30 50.0000 50.0000 0.00000 17.3175 20.6603 3.93559 31 50.0000 50.0000 100.000 35.1886 27.8076 98.0645 32 50.0000 100.000 0.00000 45.1445 76.3065 13.2113 33 50.0000 100.000 50.0000 48.9697 77.8364 33.3588 34 50.0000 100.000 100.000 63.0157 83.4539 107.340 35 75.0000 25.0000 25.0000 25.0451 15.9659 7.38905 36 75.0000 25.0000 75.0000 33.4740 19.3369 51.7845 37 75.0000 75.0000 25.0000 41.7438 49.3586 12.9553 38 100.000 0.00000 0.00000 41.8302 22.0522 2.91323 39 100.000 0.00000 50.0000 45.6553 23.5820 23.0607 40 100.000 0.00000 100.000 59.7013 29.1995 97.0422 41 100.000 50.0000 0.00000 49.4083 37.2064 5.43931 42 100.000 50.0000 50.0000 53.2335 38.7362 25.5868 43 100.000 50.0000 100.000 67.2794 44.3537 99.5683 44 100.000 100.000 0.00000 77.2354 92.8527 14.7151 45 100.000 100.000 50.0000 81.0605 94.3825 34.8625 46 0.00000 12.5000 100.000 19.3792 9.16329 95.2983 47 12.5000 0.00000 100.000 19.4570 8.44941 95.1564 48 0.00000 100.000 12.5000 36.6617 71.9031 14.1526 49 12.5000 100.000 0.00000 36.9911 72.1026 12.8293 50 100.000 0.00000 12.5000 42.0866 22.1547 4.26397 51 100.000 12.5000 0.00000 42.3382 23.0681 3.08259 52 0.00000 25.0000 100.000 20.6724 11.7494 95.7294 53 25.0000 0.00000 100.000 20.9484 9.21837 95.2263 54 0.00000 100.000 25.0000 37.3144 72.1641 17.5907 55 25.0000 100.000 0.00000 38.4825 72.8716 12.8992 56 100.000 0.00000 25.0000 42.7394 22.4158 7.70214 57 100.000 25.0000 0.00000 43.6314 25.6542 3.51366 END_DATA CAL DESCRIPTOR "Argyll Device Calibration State" ORIGINATOR "Argyll dispcal" CREATED "Sat Mar 14 19:07:36 2009" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "DISPLAY" KEYWORD "COLOR_REP" COLOR_REP "RGB" BEGIN_ARGYLL_DISPCAL_ARGS -qm -w0.3127,0.3290 -gs -f1 END_ARGYLL_DISPCAL_ARGS KEYWORD "RGB_I" NUMBER_OF_FIELDS 4 BEGIN_DATA_FORMAT RGB_I RGB_R RGB_G RGB_B END_DATA_FORMAT NUMBER_OF_SETS 256 BEGIN_DATA 0.00000 0.00000 0.00000 0.00000 0.00392 0.00392 0.00392 0.00392 0.00784 0.00784 0.00784 0.00784 0.01176 0.01176 0.01176 0.01176 0.01569 0.01569 0.01569 0.01569 0.01961 0.01961 0.01961 0.01961 0.02353 0.02353 0.02353 0.02353 0.02745 0.02745 0.02745 0.02745 0.03137 0.03137 0.03137 0.03137 0.03529 0.03529 0.03529 0.03529 0.03922 0.03922 0.03922 0.03922 0.04314 0.04314 0.04314 0.04314 0.04706 0.04706 0.04706 0.04706 0.05098 0.05098 0.05098 0.05098 0.05490 0.05490 0.05490 0.05490 0.05882 0.05882 0.05882 0.05882 0.06275 0.06275 0.06275 0.06275 0.06667 0.06667 0.06667 0.06667 0.07059 0.07059 0.07059 0.07059 0.07451 0.07451 0.07451 0.07451 0.07843 0.07843 0.07843 0.07843 0.08235 0.08235 0.08235 0.08235 0.08627 0.08627 0.08627 0.08627 0.09020 0.09020 0.09020 0.09020 0.09412 0.09412 0.09412 0.09412 0.09804 0.09804 0.09804 0.09804 0.10196 0.10196 0.10196 0.10196 0.10588 0.10588 0.10588 0.10588 0.10980 0.10980 0.10980 0.10980 0.11373 0.11373 0.11373 0.11373 0.11765 0.11765 0.11765 0.11765 0.12157 0.12157 0.12157 0.12157 0.12549 0.12549 0.12549 0.12549 0.12941 0.12941 0.12941 0.12941 0.13333 0.13333 0.13333 0.13333 0.13725 0.13725 0.13725 0.13725 0.14118 0.14118 0.14118 0.14118 0.14510 0.14510 0.14510 0.14510 0.14902 0.14902 0.14902 0.14902 0.15294 0.15294 0.15294 0.15294 0.15686 0.15686 0.15686 0.15686 0.16078 0.16078 0.16078 0.16078 0.16471 0.16471 0.16471 0.16471 0.16863 0.16863 0.16863 0.16863 0.17255 0.17255 0.17255 0.17255 0.17647 0.17647 0.17647 0.17647 0.18039 0.18039 0.18039 0.18039 0.18431 0.18431 0.18431 0.18431 0.18824 0.18824 0.18824 0.18824 0.19216 0.19216 0.19216 0.19216 0.19608 0.19608 0.19608 0.19608 0.20000 0.20000 0.20000 0.20000 0.20392 0.20392 0.20392 0.20392 0.20784 0.20784 0.20784 0.20784 0.21176 0.21176 0.21176 0.21176 0.21569 0.21569 0.21569 0.21569 0.21961 0.21961 0.21961 0.21961 0.22353 0.22353 0.22353 0.22353 0.22745 0.22745 0.22745 0.22745 0.23137 0.23137 0.23137 0.23137 0.23529 0.23529 0.23529 0.23529 0.23922 0.23922 0.23922 0.23922 0.24314 0.24314 0.24314 0.24314 0.24706 0.24706 0.24706 0.24706 0.25098 0.25098 0.25098 0.25098 0.25490 0.25490 0.25490 0.25490 0.25882 0.25882 0.25882 0.25882 0.26275 0.26275 0.26275 0.26275 0.26667 0.26667 0.26667 0.26667 0.27059 0.27059 0.27059 0.27059 0.27451 0.27451 0.27451 0.27451 0.27843 0.27843 0.27843 0.27843 0.28235 0.28235 0.28235 0.28235 0.28627 0.28627 0.28627 0.28627 0.29020 0.29020 0.29020 0.29020 0.29412 0.29412 0.29412 0.29412 0.29804 0.29804 0.29804 0.29804 0.30196 0.30196 0.30196 0.30196 0.30588 0.30588 0.30588 0.30588 0.30980 0.30980 0.30980 0.30980 0.31373 0.31373 0.31373 0.31373 0.31765 0.31765 0.31765 0.31765 0.32157 0.32157 0.32157 0.32157 0.32549 0.32549 0.32549 0.32549 0.32941 0.32941 0.32941 0.32941 0.33333 0.33333 0.33333 0.33333 0.33725 0.33725 0.33725 0.33725 0.34118 0.34118 0.34118 0.34118 0.34510 0.34510 0.34510 0.34510 0.34902 0.34902 0.34902 0.34902 0.35294 0.35294 0.35294 0.35294 0.35686 0.35686 0.35686 0.35686 0.36078 0.36078 0.36078 0.36078 0.36471 0.36471 0.36471 0.36471 0.36863 0.36863 0.36863 0.36863 0.37255 0.37255 0.37255 0.37255 0.37647 0.37647 0.37647 0.37647 0.38039 0.38039 0.38039 0.38039 0.38431 0.38431 0.38431 0.38431 0.38824 0.38824 0.38824 0.38824 0.39216 0.39216 0.39216 0.39216 0.39608 0.39608 0.39608 0.39608 0.40000 0.40000 0.40000 0.40000 0.40392 0.40392 0.40392 0.40392 0.40784 0.40784 0.40784 0.40784 0.41176 0.41176 0.41176 0.41176 0.41569 0.41569 0.41569 0.41569 0.41961 0.41961 0.41961 0.41961 0.42353 0.42353 0.42353 0.42353 0.42745 0.42745 0.42745 0.42745 0.43137 0.43137 0.43137 0.43137 0.43529 0.43529 0.43529 0.43529 0.43922 0.43922 0.43922 0.43922 0.44314 0.44314 0.44314 0.44314 0.44706 0.44706 0.44706 0.44706 0.45098 0.45098 0.45098 0.45098 0.45490 0.45490 0.45490 0.45490 0.45882 0.45882 0.45882 0.45882 0.46275 0.46275 0.46275 0.46275 0.46667 0.46667 0.46667 0.46667 0.47059 0.47059 0.47059 0.47059 0.47451 0.47451 0.47451 0.47451 0.47843 0.47843 0.47843 0.47843 0.48235 0.48235 0.48235 0.48235 0.48627 0.48627 0.48627 0.48627 0.49020 0.49020 0.49020 0.49020 0.49412 0.49412 0.49412 0.49412 0.49804 0.49804 0.49804 0.49804 0.50196 0.50196 0.50196 0.50196 0.50588 0.50588 0.50588 0.50588 0.50980 0.50980 0.50980 0.50980 0.51373 0.51373 0.51373 0.51373 0.51765 0.51765 0.51765 0.51765 0.52157 0.52157 0.52157 0.52157 0.52549 0.52549 0.52549 0.52549 0.52941 0.52941 0.52941 0.52941 0.53333 0.53333 0.53333 0.53333 0.53725 0.53725 0.53725 0.53725 0.54118 0.54118 0.54118 0.54118 0.54510 0.54510 0.54510 0.54510 0.54902 0.54902 0.54902 0.54902 0.55294 0.55294 0.55294 0.55294 0.55686 0.55686 0.55686 0.55686 0.56078 0.56078 0.56078 0.56078 0.56471 0.56471 0.56471 0.56471 0.56863 0.56863 0.56863 0.56863 0.57255 0.57255 0.57255 0.57255 0.57647 0.57647 0.57647 0.57647 0.58039 0.58039 0.58039 0.58039 0.58431 0.58431 0.58431 0.58431 0.58824 0.58824 0.58824 0.58824 0.59216 0.59216 0.59216 0.59216 0.59608 0.59608 0.59608 0.59608 0.60000 0.60000 0.60000 0.60000 0.60392 0.60392 0.60392 0.60392 0.60784 0.60784 0.60784 0.60784 0.61176 0.61176 0.61176 0.61176 0.61569 0.61569 0.61569 0.61569 0.61961 0.61961 0.61961 0.61961 0.62353 0.62353 0.62353 0.62353 0.62745 0.62745 0.62745 0.62745 0.63137 0.63137 0.63137 0.63137 0.63529 0.63529 0.63529 0.63529 0.63922 0.63922 0.63922 0.63922 0.64314 0.64314 0.64314 0.64314 0.64706 0.64706 0.64706 0.64706 0.65098 0.65098 0.65098 0.65098 0.65490 0.65490 0.65490 0.65490 0.65882 0.65882 0.65882 0.65882 0.66275 0.66275 0.66275 0.66275 0.66667 0.66667 0.66667 0.66667 0.67059 0.67059 0.67059 0.67059 0.67451 0.67451 0.67451 0.67451 0.67843 0.67843 0.67843 0.67843 0.68235 0.68235 0.68235 0.68235 0.68627 0.68627 0.68627 0.68627 0.69020 0.69020 0.69020 0.69020 0.69412 0.69412 0.69412 0.69412 0.69804 0.69804 0.69804 0.69804 0.70196 0.70196 0.70196 0.70196 0.70588 0.70588 0.70588 0.70588 0.70980 0.70980 0.70980 0.70980 0.71373 0.71373 0.71373 0.71373 0.71765 0.71765 0.71765 0.71765 0.72157 0.72157 0.72157 0.72157 0.72549 0.72549 0.72549 0.72549 0.72941 0.72941 0.72941 0.72941 0.73333 0.73333 0.73333 0.73333 0.73725 0.73725 0.73725 0.73725 0.74118 0.74118 0.74118 0.74118 0.74510 0.74510 0.74510 0.74510 0.74902 0.74902 0.74902 0.74902 0.75294 0.75294 0.75294 0.75294 0.75686 0.75686 0.75686 0.75686 0.76078 0.76078 0.76078 0.76078 0.76471 0.76471 0.76471 0.76471 0.76863 0.76863 0.76863 0.76863 0.77255 0.77255 0.77255 0.77255 0.77647 0.77647 0.77647 0.77647 0.78039 0.78039 0.78039 0.78039 0.78431 0.78431 0.78431 0.78431 0.78824 0.78824 0.78824 0.78824 0.79216 0.79216 0.79216 0.79216 0.79608 0.79608 0.79608 0.79608 0.80000 0.80000 0.80000 0.80000 0.80392 0.80392 0.80392 0.80392 0.80784 0.80784 0.80784 0.80784 0.81176 0.81176 0.81176 0.81176 0.81569 0.81569 0.81569 0.81569 0.81961 0.81961 0.81961 0.81961 0.82353 0.82353 0.82353 0.82353 0.82745 0.82745 0.82745 0.82745 0.83137 0.83137 0.83137 0.83137 0.83529 0.83529 0.83529 0.83529 0.83922 0.83922 0.83922 0.83922 0.84314 0.84314 0.84314 0.84314 0.84706 0.84706 0.84706 0.84706 0.85098 0.85098 0.85098 0.85098 0.85490 0.85490 0.85490 0.85490 0.85882 0.85882 0.85882 0.85882 0.86275 0.86275 0.86275 0.86275 0.86667 0.86667 0.86667 0.86667 0.87059 0.87059 0.87059 0.87059 0.87451 0.87451 0.87451 0.87451 0.87843 0.87843 0.87843 0.87843 0.88235 0.88235 0.88235 0.88235 0.88627 0.88627 0.88627 0.88627 0.89020 0.89020 0.89020 0.89020 0.89412 0.89412 0.89412 0.89412 0.89804 0.89804 0.89804 0.89804 0.90196 0.90196 0.90196 0.90196 0.90588 0.90588 0.90588 0.90588 0.90980 0.90980 0.90980 0.90980 0.91373 0.91373 0.91373 0.91373 0.91765 0.91765 0.91765 0.91765 0.92157 0.92157 0.92157 0.92157 0.92549 0.92549 0.92549 0.92549 0.92941 0.92941 0.92941 0.92941 0.93333 0.93333 0.93333 0.93333 0.93725 0.93725 0.93725 0.93725 0.94118 0.94118 0.94118 0.94118 0.94510 0.94510 0.94510 0.94510 0.94902 0.94902 0.94902 0.94902 0.95294 0.95294 0.95294 0.95294 0.95686 0.95686 0.95686 0.95686 0.96078 0.96078 0.96078 0.96078 0.96471 0.96471 0.96471 0.96471 0.96863 0.96863 0.96863 0.96863 0.97255 0.97255 0.97255 0.97255 0.97647 0.97647 0.97647 0.97647 0.98039 0.98039 0.98039 0.98039 0.98431 0.98431 0.98431 0.98431 0.98824 0.98824 0.98824 0.98824 0.99216 0.99216 0.99216 0.99216 0.99608 0.99608 0.99608 0.99608 1.00000 1.00000 1.00000 1.00000 END_DATA dispcalGUI-1.7.1.6/dispcalGUI/presets/video.icc000644 000765 000000 00000035730 12237536421 021072 0ustar00svpwheel000000 000000 ;argl mntrRGB XYZ  03acspMSFT-argl.#؃R8# desccprt/wtptbkptvcgtrXYZgXYZbXYZ(rTRC< gTRC< bTRC< targ H1desc%dispcalGUI calibration preset: VideotextCreated with dispcalGUI and Argyll CMSXYZ QXYZ vcgt  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~XYZ o8XYZ bXYZ $curv  *5AO^o+Jj%O{ >sY]3lk  { :  h ;  n^VV_p?nD-~*: !_""#$Y%%&'v(C))*+,f-A../0123{4h5W6H7<829+:%;"<"=$>(?.@7ABBOC_DqEFGHIKL3MXNOPRS5TiUVXYOZ[]^\_`b?cdf8ghjGkmnloqP@@@8@%"$($( -- -  -- - Ptd&&&DDQtdRtd-- - 88c4('&#1"%+ $-03 , *2!/). (@ @9b$()*+,./0123wxqXI%;w|)^j6|ۧCE칍爢 ,Ib + y*<"Ls2AYk "+ h%1 l @ `u 1 R1 1   1  ? 0__gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesnull_error_handlerg_error_handler_triggeredinitRealDisplaySizeMMPy_InitModule4_64free_disppathsfreeget_displaysgetenvstrncpystrrchrstrchrXOpenDisplayXSetErrorHandlerXineramaQueryExtensioncallocXCloseDisplay__strcat_chkXRRQueryExtensionXRRQueryVersionXRRGetScreenResourcesXRRGetOutputInfoXineramaIsActiveXineramaQueryScreensXRRFreeScreenResourcesXF86VidModeQueryExtensionXF86VidModeGetMonitor__sprintf_chk__strdupstrcpy__stack_chk_failXRRGetCrtcGammaXRRFreeGammaXFreeXRRGetCrtcInforeallocXRRFreeCrtcInfoXRRFreeOutputInfoget_a_displaymallocPyArg_ParseTuplePy_BuildValuecallback_ddebuglibXinerama.so.1libXrandr.so.2libXxf86vm.so.1libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5ii ti ui '/ 0 1  1 @1 x%H1 $X1 (&`1 %h1 #x1 &/ /  / ./ 0 0 0 0  0 (0 00  80  @0  H0  P0 X0 `0 h0 p0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0  0 !0 "0 #1 $1 %1 &1 'Hg=H5 % @% h% h% h% h% h% h% h% hp% h`% h P% h @% h 0% h % h % h%z h%r h%j h%b h%Z h%R h%J h%B h%: hp%2 h`%* hP%" h@% h0% h %  h% h% h% h % h!% h"% h#HHm HtHÐU=( HATSubH=X t H= HC L%4 H L)HHXH9s DHBH AH H9r [A\fUH= Ht"H HtH= IAÐH 1H5 H=*A11ATHIUStdHHtGH1H8HtkH;HGHt HWH;LHcIHHu[]LA\1f[]A\ff.H=H\$Hl$Ld$Ll$Lt$L|$HdH%(H$1DŽ$DŽ$>H L$PcHL}Ƅ$:LHt(.HHEx@0@LHIHDŽ$H=HH- H'HNH$H$LvA$ AHDŽ$$$ HcHH$HD$pZ$ 1ۅ$ 9f@/HL$pHcHHuHLNHDŽ$f.H$dH3%(H$H$H$L$L$L$L$HfH5\ dLTL$PDŽ$P:0.0Ƅ$T-H$H$LBH$H$L"$$H- H-H A$ X H$H$HDŽ$DŽ$DŽ$HT$@HL$8Hc$ILHHtHH$TDŽ$x 4fHpH8H$A $9$H$Lc$LHC(HJHfx0uH$B L H$ LHH$t$ DŽ$@LHDŽ$H$$$9$ 1H$ABH$H$HHHHHH LG f.H5 dL6H$H$H$H$DŽ$H\$hH$HD$`HT$XHL$PH\$HII$HTm@ I$Dh$I$Dh(H$HI $BABI $ABI $AB I $AHT$hHt$`Lnt:HDŽ$I$LHT$Pp$:tH$Ht >D$H|$XH d1I$LD$XH H|$HBDJD$BD$B$1H|$HI$HHC7$$;$ D$DŽ$:DŽ$L{AHt2.HHt H HEH1HD$pIcLL$I$HHH$%I$Dh I$Dh$I$Dh(I$@I$@I $IHcA HDAI $IHcA HDAfDH|$XvH|$pfDsLHD$(HLT$(t0HjH$eH$$ [ $HDŽ$$j1Hc$H\$pHHHHH H$XH$LUIRH$LLT$(THH$LT$(H$($H$LT$(HcHLHH$LT$(9Hc$H$HDH$@LT$(HHD$xH\$xHHLT$($P HL$xHP$HP(H$HCBHC BHCBHCBIBHHB0HH$HA(H JHB8$dH|$@1$MJALT$(HD$xLD$@H H|$8HBDJD$BD$B$1$LT$(HL$xL$AHfIAD9$~kIEHS0EH9P0uH|$@H 3Ed1LT$(Dd$0KHt$@H|$8HL$xLT$(DL$0HHT$xHH|$8LT$(HHCLT$(LT$(:L(HLT$(tAHǾ.AHHLT$(t'D$H H1LT$(HD$xLHLT$(xHHLT$(H$LT$($LT$($LHmLEH$HDŽ$HH$LT$(t)Hc$H$H$H$H$L~1tL1HDŽ$Kff.AU1E1ATAUSH9HHt?H8t.1Eu@:fDA9Dt.HcH\H;uHE1rHL[]A\A]HÐ@^HItkHHIEHBIEHBIEHBIEHB IE HB(IE(HB0IE0HB8IE8HH8HIEt%HHxtHIEt&HaI}bLZ@LE1JH3DHHH5HT$1uD$|$1Htp8H=1H@ATHH51USHHT$ uD$ |$ MHIH8HH:HHt4.HHt"ED$ H ?HH1OHHHtgH7IcD$ HHHD` X$(H L HډH H=1H[]A\f11f.H11UHSHH HtH{ HHHuH[ÐHHRealDisplaySizeMMDISPLAY.0ARGYLL_IGNORE_XRANDR1_2Screen %d, Output %s[ Clone of %d ].%dScreen %di(i,i)GetXRandROutputXID%s at %d, %d, width %d, height %dRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display.;DP``x0zRx 4LuBGA $lH l$+BGD A(D0LD $BMA D0  h%o  3 / ``   o oo o0- .>N^n~.>N^n~.> 1 x%$(&%#&GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3LP h%,y0<%q%ye%enull_error_handlerinitRealDisplaySizeMMfree_disppaths get_displays"get_a_display8%callback_ddebugN%g_error_handler_triggeredu/build/buildd/glibc-2.9/build-tree/amd64-libc/csu/crti.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1a%0.% 8   intEPi#i i P1L-z nb# # # # # #( J#0 6#8 #@ N#H #P % #X "#` $#h &b#p *b#t ,p#x 0F# 1T# :2# 6# ?{# Z H# a I# DJ# K# L-# Nb# -P# _ # # b#  z  @ ne q 4  jP Y k#  k^# k^ Y C#  C^# C# v D# E# E#( I#0  J5#8  Kg#@  L#H  M#P N#X C R#`  S#h  T#p  X#x ! Y# X Z#  [# D \#  _# bi# h d#  h #  k# i o #  r# 7 v8#  wD# x z%# { {1#  |# }^# ~# V P# ^ \# #  h# M # t t# G  # # #  #  #  #  #  # c M#P l'  zdK ?  b )V 4:bOOO `f{ f ba b b, CIc, C+ y 2jP l buf #obj #len # #  b#  b#$  #( P #0 j #8  #@  #H'   b  bl     E  b \  b  ! ' bA  8 َ  #  #  #  #  # Y #( a #0 N o#8  o#@  o#H A #P o#X { #`  #h #p #x  # . )# o# o# o#  o# o#  # ( # * #  #  # r # # u # 0 # # # #  # # A #  # o#~ A P : #  #  U#  U#  {# #(  #0  #8 & #@  U#H   } P # m !# B "# #F 0 %  &8# Y 'c# V (n# > )#  *w #  + #(, ,  / f 0#)5& 1AGbaab5 2sy 3 4b 5 0 6 9 7z 8i , 98bM :z ;z < =  >  ?^ @^ : }   z% ? &# U '# l (b# *#b +( | B #get #set #doc # # 7/ !  ,  bXID G8 Q8 R8 ek mu l  b# # # 76#Ab AGC8E XE#  # & b# o  8# 8 8# O  8#(  b#0  b#4 b# b# #K W! X"E# / ## ~$ # P %b# F%b# f&b# &b#$  'b#( (#0 )b#8 *#@ +#H p,+#P V -8#X .8#` 9/b#h /b#l m0b#p V1b#t 2i#x}$ 38: X9E# :b# 6 ;b#  <b#=(  XE# #fdb# ] b# b#  b# # f #( o #0 x #8 b#@ b(#H  b#P -!b#T u"b#X #b#\ $b#` %.#h &b#p 'b#t (#x P(# x)b# *8# +8# Z,6# d-6# n.6# x/6# )0M#db1:# 2P# (5# 6b# 7b# 8F# 98# :8# ;b# <b# =6# >6# ?b# @#S  (:4bP@L( b# / V# # 8# ?# ?#! ?#"\hi#lo#8 0z # # q# Z?# [z# z?# {z#(V " #b# $[# %[# P &[# F'[# :( F<"Fz #Fw'( )K8Pid# P M# FM# 8# EM# kM# OM# XM#$ #M#( #M#, M#0 B #8 M#@ '#H2@ c # # b# # b# #( b#0 #8 ` c # # B # b# M 8# C8#( #0 q#2 b#4 #8 b#@ #H b#P ub#T #X@D\ c E#xFb#yFb# P GM# FGM# H# ]I# Jb#$ K#( cL#0 -Mb#4 .N#8O e fb#redg#  h# i#Fjh@?c B @# BA#sxBb#syBb#swCb#shCb# Lb# 8Mb#$ 1 Nb#( R#0 S#8 V` 8ab# ab# bnyn w wtw-n  ; !b)__s 8  !b_"ixb#xidb$1 _c%C b0@w&1 VU'evT(@]w)$`*?$`+P,i&b_-_">".?w,ib,jb#kb/b./b/)02"~1evbb|1erbb|/br/ b/V />bY ,xai" 0"}0"|2 #pp30Pq 445C[6442!/" #jjb+0/ " /'"@ 7.!/ ." +#ppM34![!S!443 ~z!448!448 x!449pw442h"0 {,evbbA ,erbb #pp35"448PP"44944+/ _3 " c " \:) 7_"#i #;ix7b/8:,rv8_,i9b<# $a#** 1ixbt,xidb6)##4;=##>F?R! d3$"ixdb$ e$1 f_#ppn$n$oV$pb@44<$.%8$** 1ixb\$ 9#4#+0>#?#>#?$N?$>$6$$44 % 0r $ @1 AAB_b 1 B b 1 uF/build/buildd/glibc-2.9/build-tree/amd64-libc/csu/crtn.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1U%% : ; I$ > $ > $ >   I : ;  : ;I8 : ; : ; I8 I !I/ &I : ; ' II : ; I8 '  : ; : ;I : ; : ;< : ; I : ; : ;I8  : ; .? : ; ' I : ; I: ; I !.: ;' I ": ;I#4: ;I$4: ;I%.? : ; ' I@ &: ; I ': ; I (.? : ;' @ ).? : ;' @*: ;I+ U,4: ;I-.? : ; I@.4: ; I/4: ;I04: ;I 14: ;I 2 U31X Y4151X Y61X Y7 81UX Y91UX Y:.? : ;' I@;: ;I<.: ;' I@= >41?41@ A4: ; I? < B4: ; I?  U%O /build/buildd/glibc-2.9/build-tree/amd64-libc/csucrti.S P Ku=/0K K h%$ dispcalGUI/usr/include/bits/usr/lib/gcc/x86_64-linux-gnu/4.3.3/include/usr/include/usr/include/sys/usr/include/python2.6/usr/include/X11/usr/include/X11/extensionsRealDisplaySizeMM.cstring3.hstdio2.hstddef.htypes.hstdio.hlibio.htypes.hpyport.hobject.hmethodobject.hdescrobject.hX.hXlib.hxf86vmode.hXinerama.hrandr.hXrandr.h 0<~/;Y1?YyDyX ,>,{}t%. X}t![KQ -r0"z` \{w+w|f|"1 ~N,<:~yxfg;==Bzf%zW%zXzXXzXMUug [z.%zJ:ILTzPYz $ 䃃 %"hX~tʃs=-utz;u=?~/ 9 ;{tX=g{t{t{{XX{<$|5{*( {' &%ȃ..H~.#2Tj= dQ%BCPu=;Y J@b֒v<j\jX:>f=!y ";=3[9>[b r{O /build/buildd/glibc-2.9/build-tree/amd64-libc/csucrtn.S K q%Kx 0@$`uBGA $ l,"+BGD A(D0#LD ,$BMA D0_XGCtp_clear_objectGetXRandROutputXIDmax_request_size_shortbuf__pad3binaryfunccoercion_IO_lock_tstridesnb_inplace_powerdispcalGUI/RealDisplaySizeMM.cprivate1_IO_buf_endPyGetSetDefsetattrofunclast_request_readnoutputselftp_deallocnb_inplace_xormonitorreadonlytp_as_mappingnb_inplace_subtractSubpixelOrder_IO_write_endext_datassizessizeobjargproctp_namerooty_orgbits_per_rgbtp_as_bufferbitmap_bit_order_XRRModeInfotp_initRRCrtc_old_offset_markerstp_traverselenfuncWindowresourceidnb_subtractndimtp_weaklistdisplay_namegetattrfuncnb_nonzero_IO_FILEml_methrotationdestructorEMPTYRROutputtp_weaklistoffsetvTotalgetbufferprocVisualnmodesq_itemtp_getattr_postp_cachemyscreenmap_entriesnb_inplace_addsq_ass_slicedescrsetfuncroot_depthstrcat_IO_save_enddnbufwidth_mmnb_inplace_floor_dividebf_getwritebufferhSyncEnd__lennvsyncnb_orlong long unsigned intnb_inplace_remainderconfigTimestampblack_pixelnb_multiplystrncpyscrnresinitprocbf_releasebufferhashfunctp_iternexttp_printvSyncEndPyBufferProcsXineramaScreenInfotp_allocsave_undersresource_allocsubpixel_order_IO_backup_basecharbufferprocnb_positivednameinquiryreleasebufferprocnclonemotion_bufferscreen_number_filenoreadbufferprocmin_keycode__pad4tp_hash__pad5crtcinpossibleprivate_datatp_setattroshapeXF86VidModeMonitortp_richcompareqlen_XDisplay_IO_read_basetp_getattrodefsixbf_getbufferssizessizeargfuncserialdcountstdinmax_keycodegettertp_mroroot_visualnscreenstp_subclasses_IO_markervSyncStartnb_coerce__fmtbf_getcharbufferhTotalbf_getsegcountPy_ssize_tcmapnpreferredXErrorEventget_xrandr_output_xidtp_getsetmodes_XRRCrtcInfo_XRRCrtcGammatp_compare_modesq_slicevendorinternalGNU C 4.3.3mydisplaynb_octmheightprivate17sq_inplace_concatuscreenlong long intnb_negativenhsyncnb_powerbufferinfonb_inplace_rshiftdotClockwritebufferproc_typeobjectnb_inplace_divideheight_mmtp_as_sequenceRotationsq_concatsetattrfuncoutputs_IO_write_baseconnectionvisualidPyCFunctionbitmap_unitmax_mapsdescription_IO_save_basevisitprocmwidthbacking_storetp_memberscallback_ddebugnb_remainderPyObjectdesc1desc2nb_rshiftPyMappingMethodsnb_dividedescrgetfuncpixmap_format_XrmHashBucketRectp_baseallocfunctdisppnb_inplace_ordispbits_per_pixelobjobjprocmp_length__pad1__pad2tp_docred_masktp_methodsnb_andtp_itemsizeobjobjargprocsetterproto_major_version_vtable_offsetrequestbyte_ordernb_true_dividex_orgtp_basicsizeargsgreennb_floor_dividebf_getreadbufferlong doublesprintfnull_error_handlertp_descr_gettimestampmp_subscriptConnectioniternextfuncRRModedisppathnb_longtp_flagsncrtcob_sizesq_lengthg_error_handler_triggered_IO_read_endDepthdefault_gcproto_minor_versionshort inttp_callget_a_displaytp_iterml_nametp_freeblue_maskob_refcnttp_version_tagRealDisplaySizeMM_methodscrtcgamtp_basestp_dict_XExtDataml_docclosurebluePyMethodDefminor_codetp_reproutinameLensq_containssq_ass_itemminvfreefunc__ssize_tndepthsPy_bufferrscreenreprfuncmp_ass_subscript_XPrivateprivate2private3private4private5nb_floatprivate8private9nb_intnb_invert_lockVisualIDrequest_codenb_xornb_hexPySequenceMethodsfree_privatenformatsget_real_screen_size_mmscanline_padScreensegcountprocXF86VidModeSyncRangemm_widthwhite_pixelPyMemberDef__destXPointerPyNumberMethodsunsigned charnb_inplace_lshifttp_is_gcnb_index_sbufmin_mapsnvisualscrtcs__srctraverseproc_IO_write_ptrtp_dictoffsetmodeFlags_XRROutputInfoprintfuncnb_inplace_andternaryfuncXRRModeFlagstp_strget_displaysml_flagsbitmap_padclonesnameLengthxdefaultserror_code_XRRScreenResourcesstdoutScreenFormatsuboffsetsgetattrofunc/media/DATA/User Files/Id/Softwareentwicklung/dispcalGUI/trunkclassrichcmpfuncgreen_masktp_as_number__off_thSkewtp_descr_setColormaptp_newnb_lshiftprivate6nb_absoluteshort unsigned intreleasedefault_screensq_inplace_repeatroot_input_maskob_typemajvTimenb_addtp_del_IO_read_ptrnb_inplace_true_dividenb_inplace_multiplyndispshSyncStartprivate10private11private12private13private14private15private16_chainprivate18private19tp_setattrmodelsq_repeatfree_disppaths_flags2initRealDisplaySizeMMnewfunc_cur_columnunaryfunc_nextbname__off64_t_unused2_IO_buf_basemm_heightgetiterfuncnb_divmodrotations02w29w9:w:w 0<U<D\DIUISU\\UIVPwU w${$w{@{w{wwww}{}w{K wK {  w { w { " w" U {8{8ASARQRqSqQ{{&PNh{h}w}!{!6w6{SM]MjPjw]w}{}]{w SK " {{N{Nh\hpPp{\P{{\wPK {K " \ " \Pw{!{a}Pwwww}{}w w  P/w/|wPJwJ|w|w}w}|wK |K 5 w +PmuP@P||U |{{U {x{P@^U ^{{ {  w v {v w " {{w!w{w{w}w}{K {{1{1NwN}{}w!{!JwJ{ { w " {NhPPPO _ Zf Zy ~ Z Pw{wwww}{} w v {v " wPPK d P{!{{{K {{!{{{K {R > R` b wb i wi m wm n w n r w(r w0` w Uw \ \z } P P S V P Sg ] ] Q P Q P Qww UTUTPwwww w0UTUP\\*-PSSPVPgh%l%<m K " !.K " }Ph " z v 0 8 }   |  " !}wjU+  g " Ry@E-3'*q%v%.symtab.strtab.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_rangesdo% - 35o hBo @Q` ` [` e`PkPPqh%h%w2x%x%h&&D('('- -- -- -- -/ /(/ /8 1 1 1 11`2 33W&"Z]c'0dm2 v=K $:    `    P h% x%&('- - - - / /  1 1  !  P'- 5- C- P pf1 u1  -  (-  0%@1 ` #L  $/ 5 1 B- O- Xms 0  1   h%1 #7N @dv" : "+H]s1    `u31 8M\w1  initfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6997dtor_idx.6999frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxRealDisplaySizeMM.cRealDisplaySizeMM_methodsGetXRandROutputXIDRealDisplaySizeMM_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END___DYNAMICXineramaQueryScreensXFreeXRRFreeScreenResourcesXRRFreeCrtcInfoPy_InitModule4_64XRRGetOutputInfonull_error_handler__gmon_start___Jv_RegisterClassesg_error_handler_triggered_finicallback_ddebugmalloc@@GLIBC_2.2.5XineramaQueryExtensioninitRealDisplaySizeMMXRRQueryExtensionXRRGetCrtcGammaXRRQueryVersionXOpenDisplay__strcat_chk@@GLIBC_2.3.4PyArg_ParseTuple__strdup@@GLIBC_2.2.5free@@GLIBC_2.2.5XCloseDisplay__cxa_finalize@@GLIBC_2.2.5XF86VidModeQueryExtensionget_a_displaystrrchr@@GLIBC_2.2.5XRRGetScreenResourcesXRRFreeGammastrchr@@GLIBC_2.2.5getenv@@GLIBC_2.2.5Py_BuildValue__bss_startget_displays__stack_chk_fail@@GLIBC_2.4strcpy@@GLIBC_2.2.5free_disppathsXineramaIsActivecalloc@@GLIBC_2.2.5_endstrncpy@@GLIBC_2.2.5XRRGetCrtcInfo__sprintf_chk@@GLIBC_2.3.4XSetErrorHandlerXF86VidModeGetMonitorrealloc@@GLIBC_2.2.5_edataXRRFreeOutputInfo_initdispcalGUI-1.7.1.6/dispcalGUI/lib64/python26/__init__.py000644 000765 000000 00000000001 12031640062 022305 0ustar00svpwheel000000 000000 #dispcalGUI-1.7.1.6/dispcalGUI/lib64/python26/RealDisplaySizeMM.so000755 000765 000000 00000123562 12025152304 024062 0ustar00svpwheel000000 000000 ELF>P@@@8@%"$($( -- -  -- - Ptd&&&DDQtdRtd-- - 88c4('&#1"%+ $-03 , *2!/). (@ @9b$()*+,./0123wxqXI%;w|)^j6|ۧCE칍爢 ,Ib + y*<"Ls2AYk "+ h%1 l @ `u 1 R1 1   1  ? 0__gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesnull_error_handlerg_error_handler_triggeredinitRealDisplaySizeMMPy_InitModule4_64free_disppathsfreeget_displaysgetenvstrncpystrrchrstrchrXOpenDisplayXSetErrorHandlerXineramaQueryExtensioncallocXCloseDisplay__strcat_chkXRRQueryExtensionXRRQueryVersionXRRGetScreenResourcesXRRGetOutputInfoXineramaIsActiveXineramaQueryScreensXRRFreeScreenResourcesXF86VidModeQueryExtensionXF86VidModeGetMonitor__sprintf_chk__strdupstrcpy__stack_chk_failXRRGetCrtcGammaXRRFreeGammaXFreeXRRGetCrtcInforeallocXRRFreeCrtcInfoXRRFreeOutputInfoget_a_displaymallocPyArg_ParseTuplePy_BuildValuecallback_ddebuglibXinerama.so.1libXrandr.so.2libXxf86vm.so.1libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5ii ti ui '/ 0 1  1 @1 x%H1 $X1 (&`1 %h1 #x1 &/ /  / ./ 0 0 0 0  0 (0 00  80  @0  H0  P0 X0 `0 h0 p0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0  0 !0 "0 #1 $1 %1 &1 'Hg=H5 % @% h% h% h% h% h% h% h% hp% h`% h P% h @% h 0% h % h % h%z h%r h%j h%b h%Z h%R h%J h%B h%: hp%2 h`%* hP%" h@% h0% h %  h% h% h% h % h!% h"% h#HHm HtHÐU=( HATSubH=X t H= HC L%4 H L)HHXH9s DHBH AH H9r [A\fUH= Ht"H HtH= IAÐH 1H5 H=*A11ATHIUStdHHtGH1H8HtkH;HGHt HWH;LHcIHHu[]LA\1f[]A\ff.H=H\$Hl$Ld$Ll$Lt$L|$HdH%(H$1DŽ$DŽ$>H L$PcHL}Ƅ$:LHt(.HHEx@0@LHIHDŽ$H=HH- H'HNH$H$LvA$ AHDŽ$$$ HcHH$HD$pZ$ 1ۅ$ 9f@/HL$pHcHHuHLNHDŽ$f.H$dH3%(H$H$H$L$L$L$L$HfH5\ dLTL$PDŽ$P:0.0Ƅ$T-H$H$LBH$H$L"$$H- H-H A$ X H$H$HDŽ$DŽ$DŽ$HT$@HL$8Hc$ILHHtHH$TDŽ$x 4fHpH8H$A $9$H$Lc$LHC(HJHfx0uH$B L H$ LHH$t$ DŽ$@LHDŽ$H$$$9$ 1H$ABH$H$HHHHHH LG f.H5 dL6H$H$H$H$DŽ$H\$hH$HD$`HT$XHL$PH\$HII$HTm@ I$Dh$I$Dh(H$HI $BABI $ABI $AB I $AHT$hHt$`Lnt:HDŽ$I$LHT$Pp$:tH$Ht >D$H|$XH d1I$LD$XH H|$HBDJD$BD$B$1H|$HI$HHC7$$;$ D$DŽ$:DŽ$L{AHt2.HHt H HEH1HD$pIcLL$I$HHH$%I$Dh I$Dh$I$Dh(I$@I$@I $IHcA HDAI $IHcA HDAfDH|$XvH|$pfDsLHD$(HLT$(t0HjH$eH$$ [ $HDŽ$$j1Hc$H\$pHHHHH H$XH$LUIRH$LLT$(THH$LT$(H$($H$LT$(HcHLHH$LT$(9Hc$H$HDH$@LT$(HHD$xH\$xHHLT$($P HL$xHP$HP(H$HCBHC BHCBHCBIBHHB0HH$HA(H JHB8$dH|$@1$MJALT$(HD$xLD$@H H|$8HBDJD$BD$B$1$LT$(HL$xL$AHfIAD9$~kIEHS0EH9P0uH|$@H 3Ed1LT$(Dd$0KHt$@H|$8HL$xLT$(DL$0HHT$xHH|$8LT$(HHCLT$(LT$(:L(HLT$(tAHǾ.AHHLT$(t'D$H H1LT$(HD$xLHLT$(xHHLT$(H$LT$($LT$($LHmLEH$HDŽ$HH$LT$(t)Hc$H$H$H$H$L~1tL1HDŽ$Kff.AU1E1ATAUSH9HHt?H8t.1Eu@:fDA9Dt.HcH\H;uHE1rHL[]A\A]HÐ@^HItkHHIEHBIEHBIEHBIEHB IE HB(IE(HB0IE0HB8IE8HH8HIEt%HHxtHIEt&HaI}bLZ@LE1JH3DHHH5HT$1uD$|$1Htp8H=1H@ATHH51USHHT$ uD$ |$ MHIH8HH:HHt4.HHt"ED$ H ?HH1OHHHtgH7IcD$ HHHD` X$(H L HډH H=1H[]A\f11f.H11UHSHH HtH{ HHHuH[ÐHHRealDisplaySizeMMDISPLAY.0ARGYLL_IGNORE_XRANDR1_2Screen %d, Output %s[ Clone of %d ].%dScreen %di(i,i)GetXRandROutputXID%s at %d, %d, width %d, height %dRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display.;DP``x0zRx 4LuBGA $lH l$+BGD A(D0LD $BMA D0  h%o  3 / ``   o oo o0- .>N^n~.>N^n~.> 1 x%$(&%#&GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3LP h%,y0<%q%ye%enull_error_handlerinitRealDisplaySizeMMfree_disppaths get_displays"get_a_display8%callback_ddebugN%g_error_handler_triggeredu/build/buildd/glibc-2.9/build-tree/amd64-libc/csu/crti.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1a%0.% 8   intEPi#i i P1L-z nb# # # # # #( J#0 6#8 #@ N#H #P % #X "#` $#h &b#p *b#t ,p#x 0F# 1T# :2# 6# ?{# Z H# a I# DJ# K# L-# Nb# -P# _ # # b#  z  @ ne q 4  jP Y k#  k^# k^ Y C#  C^# C# v D# E# E#( I#0  J5#8  Kg#@  L#H  M#P N#X C R#`  S#h  T#p  X#x ! Y# X Z#  [# D \#  _# bi# h d#  h #  k# i o #  r# 7 v8#  wD# x z%# { {1#  |# }^# ~# V P# ^ \# #  h# M # t t# G  # # #  #  #  #  #  # c M#P l'  zdK ?  b )V 4:bOOO `f{ f ba b b, CIc, C+ y 2jP l buf #obj #len # #  b#  b#$  #( P #0 j #8  #@  #H'   b  bl     E  b \  b  ! ' bA  8 َ  #  #  #  #  # Y #( a #0 N o#8  o#@  o#H A #P o#X { #`  #h #p #x  # . )# o# o# o#  o# o#  # ( # * #  #  # r # # u # 0 # # # #  # # A #  # o#~ A P : #  #  U#  U#  {# #(  #0  #8 & #@  U#H   } P # m !# B "# #F 0 %  &8# Y 'c# V (n# > )#  *w #  + #(, ,  / f 0#)5& 1AGbaab5 2sy 3 4b 5 0 6 9 7z 8i , 98bM :z ;z < =  >  ?^ @^ : }   z% ? &# U '# l (b# *#b +( | B #get #set #doc # # 7/ !  ,  bXID G8 Q8 R8 ek mu l  b# # # 76#Ab AGC8E XE#  # & b# o  8# 8 8# O  8#(  b#0  b#4 b# b# #K W! X"E# / ## ~$ # P %b# F%b# f&b# &b#$  'b#( (#0 )b#8 *#@ +#H p,+#P V -8#X .8#` 9/b#h /b#l m0b#p V1b#t 2i#x}$ 38: X9E# :b# 6 ;b#  <b#=(  XE# #fdb# ] b# b#  b# # f #( o #0 x #8 b#@ b(#H  b#P -!b#T u"b#X #b#\ $b#` %.#h &b#p 'b#t (#x P(# x)b# *8# +8# Z,6# d-6# n.6# x/6# )0M#db1:# 2P# (5# 6b# 7b# 8F# 98# :8# ;b# <b# =6# >6# ?b# @#S  (:4bP@L( b# / V# # 8# ?# ?#! ?#"\hi#lo#8 0z # # q# Z?# [z# z?# {z#(V " #b# $[# %[# P &[# F'[# :( F<"Fz #Fw'( )K8Pid# P M# FM# 8# EM# kM# OM# XM#$ #M#( #M#, M#0 B #8 M#@ '#H2@ c # # b# # b# #( b#0 #8 ` c # # B # b# M 8# C8#( #0 q#2 b#4 #8 b#@ #H b#P ub#T #X@D\ c E#xFb#yFb# P GM# FGM# H# ]I# Jb#$ K#( cL#0 -Mb#4 .N#8O e fb#redg#  h# i#Fjh@?c B @# BA#sxBb#syBb#swCb#shCb# Lb# 8Mb#$ 1 Nb#( R#0 S#8 V` 8ab# ab# bnyn w wtw-n  ; !b)__s 8  !b_"ixb#xidb$1 _c%C b0@w&1 VU'evT(@]w)$`*?$`+P,i&b_-_">".?w,ib,jb#kb/b./b/)02"~1evbb|1erbb|/br/ b/V />bY ,xai" 0"}0"|2 #pp30Pq 445C[6442!/" #jjb+0/ " /'"@ 7.!/ ." +#ppM34![!S!443 ~z!448!448 x!449pw442h"0 {,evbbA ,erbb #pp35"448PP"44944+/ _3 " c " \:) 7_"#i #;ix7b/8:,rv8_,i9b<# $a#** 1ixbt,xidb6)##4;=##>F?R! d3$"ixdb$ e$1 f_#ppn$n$oV$pb@44<$.%8$** 1ixb\$ 9#4#+0>#?#>#?$N?$>$6$$44 % 0r $ @1 AAB_b 1 B b 1 uF/build/buildd/glibc-2.9/build-tree/amd64-libc/csu/crtn.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1U%% : ; I$ > $ > $ >   I : ;  : ;I8 : ; : ; I8 I !I/ &I : ; ' II : ; I8 '  : ; : ;I : ; : ;< : ; I : ; : ;I8  : ; .? : ; ' I : ; I: ; I !.: ;' I ": ;I#4: ;I$4: ;I%.? : ; ' I@ &: ; I ': ; I (.? : ;' @ ).? : ;' @*: ;I+ U,4: ;I-.? : ; I@.4: ; I/4: ;I04: ;I 14: ;I 2 U31X Y4151X Y61X Y7 81UX Y91UX Y:.? : ;' I@;: ;I<.: ;' I@= >41?41@ A4: ; I? < B4: ; I?  U%O /build/buildd/glibc-2.9/build-tree/amd64-libc/csucrti.S P Ku=/0K K h%$ dispcalGUI/usr/include/bits/usr/lib/gcc/x86_64-linux-gnu/4.3.3/include/usr/include/usr/include/sys/usr/include/python2.6/usr/include/X11/usr/include/X11/extensionsRealDisplaySizeMM.cstring3.hstdio2.hstddef.htypes.hstdio.hlibio.htypes.hpyport.hobject.hmethodobject.hdescrobject.hX.hXlib.hxf86vmode.hXinerama.hrandr.hXrandr.h 0<~/;Y1?YyDyX ,>,{}t%. X}t![KQ -r0"z` \{w+w|f|"1 ~N,<:~yxfg;==Bzf%zW%zXzXXzXMUug [z.%zJ:ILTzPYz $ 䃃 %"hX~tʃs=-utz;u=?~/ 9 ;{tX=g{t{t{{XX{<$|5{*( {' &%ȃ..H~.#2Tj= dQ%BCPu=;Y J@b֒v<j\jX:>f=!y ";=3[9>[b r{O /build/buildd/glibc-2.9/build-tree/amd64-libc/csucrtn.S K q%Kx 0@$`uBGA $ l,"+BGD A(D0#LD ,$BMA D0_XGCtp_clear_objectGetXRandROutputXIDmax_request_size_shortbuf__pad3binaryfunccoercion_IO_lock_tstridesnb_inplace_powerdispcalGUI/RealDisplaySizeMM.cprivate1_IO_buf_endPyGetSetDefsetattrofunclast_request_readnoutputselftp_deallocnb_inplace_xormonitorreadonlytp_as_mappingnb_inplace_subtractSubpixelOrder_IO_write_endext_datassizessizeobjargproctp_namerooty_orgbits_per_rgbtp_as_bufferbitmap_bit_order_XRRModeInfotp_initRRCrtc_old_offset_markerstp_traverselenfuncWindowresourceidnb_subtractndimtp_weaklistdisplay_namegetattrfuncnb_nonzero_IO_FILEml_methrotationdestructorEMPTYRROutputtp_weaklistoffsetvTotalgetbufferprocVisualnmodesq_itemtp_getattr_postp_cachemyscreenmap_entriesnb_inplace_addsq_ass_slicedescrsetfuncroot_depthstrcat_IO_save_enddnbufwidth_mmnb_inplace_floor_dividebf_getwritebufferhSyncEnd__lennvsyncnb_orlong long unsigned intnb_inplace_remainderconfigTimestampblack_pixelnb_multiplystrncpyscrnresinitprocbf_releasebufferhashfunctp_iternexttp_printvSyncEndPyBufferProcsXineramaScreenInfotp_allocsave_undersresource_allocsubpixel_order_IO_backup_basecharbufferprocnb_positivednameinquiryreleasebufferprocnclonemotion_bufferscreen_number_filenoreadbufferprocmin_keycode__pad4tp_hash__pad5crtcinpossibleprivate_datatp_setattroshapeXF86VidModeMonitortp_richcompareqlen_XDisplay_IO_read_basetp_getattrodefsixbf_getbufferssizessizeargfuncserialdcountstdinmax_keycodegettertp_mroroot_visualnscreenstp_subclasses_IO_markervSyncStartnb_coerce__fmtbf_getcharbufferhTotalbf_getsegcountPy_ssize_tcmapnpreferredXErrorEventget_xrandr_output_xidtp_getsetmodes_XRRCrtcInfo_XRRCrtcGammatp_compare_modesq_slicevendorinternalGNU C 4.3.3mydisplaynb_octmheightprivate17sq_inplace_concatuscreenlong long intnb_negativenhsyncnb_powerbufferinfonb_inplace_rshiftdotClockwritebufferproc_typeobjectnb_inplace_divideheight_mmtp_as_sequenceRotationsq_concatsetattrfuncoutputs_IO_write_baseconnectionvisualidPyCFunctionbitmap_unitmax_mapsdescription_IO_save_basevisitprocmwidthbacking_storetp_memberscallback_ddebugnb_remainderPyObjectdesc1desc2nb_rshiftPyMappingMethodsnb_dividedescrgetfuncpixmap_format_XrmHashBucketRectp_baseallocfunctdisppnb_inplace_ordispbits_per_pixelobjobjprocmp_length__pad1__pad2tp_docred_masktp_methodsnb_andtp_itemsizeobjobjargprocsetterproto_major_version_vtable_offsetrequestbyte_ordernb_true_dividex_orgtp_basicsizeargsgreennb_floor_dividebf_getreadbufferlong doublesprintfnull_error_handlertp_descr_gettimestampmp_subscriptConnectioniternextfuncRRModedisppathnb_longtp_flagsncrtcob_sizesq_lengthg_error_handler_triggered_IO_read_endDepthdefault_gcproto_minor_versionshort inttp_callget_a_displaytp_iterml_nametp_freeblue_maskob_refcnttp_version_tagRealDisplaySizeMM_methodscrtcgamtp_basestp_dict_XExtDataml_docclosurebluePyMethodDefminor_codetp_reproutinameLensq_containssq_ass_itemminvfreefunc__ssize_tndepthsPy_bufferrscreenreprfuncmp_ass_subscript_XPrivateprivate2private3private4private5nb_floatprivate8private9nb_intnb_invert_lockVisualIDrequest_codenb_xornb_hexPySequenceMethodsfree_privatenformatsget_real_screen_size_mmscanline_padScreensegcountprocXF86VidModeSyncRangemm_widthwhite_pixelPyMemberDef__destXPointerPyNumberMethodsunsigned charnb_inplace_lshifttp_is_gcnb_index_sbufmin_mapsnvisualscrtcs__srctraverseproc_IO_write_ptrtp_dictoffsetmodeFlags_XRROutputInfoprintfuncnb_inplace_andternaryfuncXRRModeFlagstp_strget_displaysml_flagsbitmap_padclonesnameLengthxdefaultserror_code_XRRScreenResourcesstdoutScreenFormatsuboffsetsgetattrofunc/media/DATA/User Files/Id/Softwareentwicklung/dispcalGUI/trunkclassrichcmpfuncgreen_masktp_as_number__off_thSkewtp_descr_setColormaptp_newnb_lshiftprivate6nb_absoluteshort unsigned intreleasedefault_screensq_inplace_repeatroot_input_maskob_typemajvTimenb_addtp_del_IO_read_ptrnb_inplace_true_dividenb_inplace_multiplyndispshSyncStartprivate10private11private12private13private14private15private16_chainprivate18private19tp_setattrmodelsq_repeatfree_disppaths_flags2initRealDisplaySizeMMnewfunc_cur_columnunaryfunc_nextbname__off64_t_unused2_IO_buf_basemm_heightgetiterfuncnb_divmodrotations02w29w9:w:w 0<U<D\DIUISU\\UIVPwU w${$w{@{w{wwww}{}w{K wK {  w { w { " w" U {8{8ASARQRqSqQ{{&PNh{h}w}!{!6w6{SM]MjPjw]w}{}]{w SK " {{N{Nh\hpPp{\P{{\wPK {K " \ " \Pw{!{a}Pwwww}{}w w  P/w/|wPJwJ|w|w}w}|wK |K 5 w +PmuP@P||U |{{U {x{P@^U ^{{ {  w v {v w " {{w!w{w{w}w}{K {{1{1NwN}{}w!{!JwJ{ { w " {NhPPPO _ Zf Zy ~ Z Pw{wwww}{} w v {v " wPPK d P{!{{{K {{!{{{K {R > R` b wb i wi m wm n w n r w(r w0` w Uw \ \z } P P S V P Sg ] ] Q P Q P Qww UTUTPwwww w0UTUP\\*-PSSPVPgh%l%<m K " !.K " }Ph " z v 0 8 }   |  " !}wjU+  g " Ry@E-3'*q%v%.symtab.strtab.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_rangesdo% - 35o hBo @Q` ` [` e`PkPPqh%h%w2x%x%h&&D('('- -- -- -- -/ /(/ /8 1 1 1 11`2 33W&"Z]c'0dm2 v=K $:    `    P h% x%&('- - - - / /  1 1  !  P'- 5- C- P pf1 u1  -  (-  0%@1 ` #L  $/ 5 1 B- O- Xms 0  1   h%1 #7N @dv" : "+H]s1    `u31 8M\w1  initfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6997dtor_idx.6999frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxRealDisplaySizeMM.cRealDisplaySizeMM_methodsGetXRandROutputXIDRealDisplaySizeMM_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END___DYNAMICXineramaQueryScreensXFreeXRRFreeScreenResourcesXRRFreeCrtcInfoPy_InitModule4_64XRRGetOutputInfonull_error_handler__gmon_start___Jv_RegisterClassesg_error_handler_triggered_finicallback_ddebugmalloc@@GLIBC_2.2.5XineramaQueryExtensioninitRealDisplaySizeMMXRRQueryExtensionXRRGetCrtcGammaXRRQueryVersionXOpenDisplay__strcat_chk@@GLIBC_2.3.4PyArg_ParseTuple__strdup@@GLIBC_2.2.5free@@GLIBC_2.2.5XCloseDisplay__cxa_finalize@@GLIBC_2.2.5XF86VidModeQueryExtensionget_a_displaystrrchr@@GLIBC_2.2.5XRRGetScreenResourcesXRRFreeGammastrchr@@GLIBC_2.2.5getenv@@GLIBC_2.2.5Py_BuildValue__bss_startget_displays__stack_chk_fail@@GLIBC_2.4strcpy@@GLIBC_2.2.5free_disppathsXineramaIsActivecalloc@@GLIBC_2.2.5_endstrncpy@@GLIBC_2.2.5XRRGetCrtcInfo__sprintf_chk@@GLIBC_2.3.4XSetErrorHandlerXF86VidModeGetMonitorrealloc@@GLIBC_2.2.5_edataXRRFreeOutputInfo_initdispcalGUI-1.7.1.6/dispcalGUI/lib64/python25/__init__.py000644 000765 000000 00000000001 12031640062 022304 0ustar00svpwheel000000 000000 #dispcalGUI-1.7.1.6/dispcalGUI/lib64/python25/RealDisplaySizeMM.so000755 000765 000000 00000122602 12025152304 024053 0ustar00svpwheel000000 000000 ELF>P@P@8@%"$($( -- -  -- - Ptd&&&DDQtdRtd-- - 88c4('&#1"%+ $-03 , *2!/). (@ @9b$()*+,./0123wxqXI%;w|)^j6|ۧCE칍爢 ,Ib + y*<"Ls2AYk "+ h%1 l @ `u 1 R1 1   1  ? 0__gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesnull_error_handlerg_error_handler_triggeredinitRealDisplaySizeMMPy_InitModule4_64free_disppathsfreeget_displaysgetenvstrncpystrrchrstrchrXOpenDisplayXSetErrorHandlerXineramaQueryExtensioncallocXCloseDisplay__strcat_chkXRRQueryExtensionXRRQueryVersionXRRGetScreenResourcesXRRGetOutputInfoXineramaIsActiveXineramaQueryScreensXRRFreeScreenResourcesXF86VidModeQueryExtensionXF86VidModeGetMonitor__sprintf_chk__strdupstrcpy__stack_chk_failXRRGetCrtcGammaXRRFreeGammaXFreeXRRGetCrtcInforeallocXRRFreeCrtcInfoXRRFreeOutputInfoget_a_displaymallocPyArg_ParseTuplePy_BuildValuecallback_ddebuglibXinerama.so.1libXrandr.so.2libXxf86vm.so.1libpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5ii ti ui '/ 0 1  1 @1 x%H1 $X1 (&`1 %h1 #x1 &/ /  / ./ 0 0 0 0  0 (0 00  80  @0  H0  P0 X0 `0 h0 p0 x0 0 0 0 0 0 0 0 0 0 0 0 0 0  0 !0 "0 #1 $1 %1 &1 'Hg=H5 % @% h% h% h% h% h% h% h% hp% h`% h P% h @% h 0% h % h % h%z h%r h%j h%b h%Z h%R h%J h%B h%: hp%2 h`%* hP%" h@% h0% h %  h% h% h% h % h!% h"% h#HHm HtHÐU=( HATSubH=X t H= HC L%4 H L)HHXH9s DHBH AH H9r [A\fUH= Ht"H HtH= IAÐH 1H5 H=*A11ATHIUStdHHtGH1H8HtkH;HGHt HWH;LHcIHHu[]LA\1f[]A\ff.H=H\$Hl$Ld$Ll$Lt$L|$HdH%(H$1DŽ$DŽ$>H L$PcHL}Ƅ$:LHt(.HHEx@0@LHIHDŽ$H=HH- H'HNH$H$LvA$ AHDŽ$$$ HcHH$HD$pZ$ 1ۅ$ 9f@/HL$pHcHHuHLNHDŽ$f.H$dH3%(H$H$H$L$L$L$L$HfH5\ dLTL$PDŽ$P:0.0Ƅ$T-H$H$LBH$H$L"$$H- H-H A$ X H$H$HDŽ$DŽ$DŽ$HT$@HL$8Hc$ILHHtHH$TDŽ$x 4fHpH8H$A $9$H$Lc$LHC(HJHfx0uH$B L H$ LHH$t$ DŽ$@LHDŽ$H$$$9$ 1H$ABH$H$HHHHHH LG f.H5 dL6H$H$H$H$DŽ$H\$hH$HD$`HT$XHL$PH\$HII$HTm@ I$Dh$I$Dh(H$HI $BABI $ABI $AB I $AHT$hHt$`Lnt:HDŽ$I$LHT$Pp$:tH$Ht >D$H|$XH d1I$LD$XH H|$HBDJD$BD$B$1H|$HI$HHC7$$;$ D$DŽ$:DŽ$L{AHt2.HHt H HEH1HD$pIcLL$I$HHH$%I$Dh I$Dh$I$Dh(I$@I$@I $IHcA HDAI $IHcA HDAfDH|$XvH|$pfDsLHD$(HLT$(t0HjH$eH$$ [ $HDŽ$$j1Hc$H\$pHHHHH H$XH$LUIRH$LLT$(THH$LT$(H$($H$LT$(HcHLHH$LT$(9Hc$H$HDH$@LT$(HHD$xH\$xHHLT$($P HL$xHP$HP(H$HCBHC BHCBHCBIBHHB0HH$HA(H JHB8$dH|$@1$MJALT$(HD$xLD$@H H|$8HBDJD$BD$B$1$LT$(HL$xL$AHfIAD9$~kIEHS0EH9P0uH|$@H 3Ed1LT$(Dd$0KHt$@H|$8HL$xLT$(DL$0HHT$xHH|$8LT$(HHCLT$(LT$(:L(HLT$(tAHǾ.AHHLT$(t'D$H H1LT$(HD$xLHLT$(xHHLT$(H$LT$($LT$($LHmLEH$HDŽ$HH$LT$(t)Hc$H$H$H$H$L~1tL1HDŽ$Kff.AU1E1ATAUSH9HHt?H8t.1Eu@:fDA9Dt.HcH\H;uHE1rHL[]A\A]HÐ@^HItkHHIEHBIEHBIEHBIEHB IE HB(IE(HB0IE0HB8IE8HH8HIEt%HHxtHIEt&HaI}bLZ@LE1JH3DHHH5HT$1uD$|$1Htp8H=1H@ATHH51USHHT$ uD$ |$ MHIH8HH:HHt4.HHt"ED$ H ?HH1OHHHtgH7IcD$ HHHD` X$(H L HډH H=1H[]A\f11f.H11UHSHH HtH{ HHHuH[ÐHHRealDisplaySizeMMDISPLAY.0ARGYLL_IGNORE_XRANDR1_2Screen %d, Output %s[ Clone of %d ].%dScreen %di(i,i)GetXRandROutputXID%s at %d, %d, width %d, height %dRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display.;DP``x0zRx 4LuBGA $lH l$+BGD A(D0LD $BMA D0  h%o  3 / ``   o oo o0- .>N^n~.>N^n~.> 1 x%$(&%#&GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3LP h%,y0<{$q%y$null_error_handler@initRealDisplaySizeMM]free_disppathsget_displaysZ!get_a_display#callback_ddebug#g_error_handler_triggeredu/build/buildd/glibc-2.9/build-tree/amd64-libc/csu/crti.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1#{U0.% 8h m  intii i :16-z b# t# w # A# # j #( 9#0 #8 #@ #H R#P  #X "#` $#h &b#p I*b#t ,p#x o0F# Q 1T# :2# & 6# ?{# H# I# DJ# K# L-# Nb# P# _ # 9 # b#  z   nc q   gP h# T hN#2 hN # T N# K # e # #  #(  #0   #8   #@  @ #H z v #P ]  #X  d#` Z j#h  p#p   #x #  # O 5 #  k #  "v# < %i#  '#  + #  .# # 2 # j 5# 9 #  : # =#  ># O ?(#  @N# A# B #  C # x D#  E#  F=#  G# H # ' I#  J#  K#  L#  M#  N# m O #P5 i'{ jpTK   b  V $*b???g PVkb v|U bP b( b 39S" 3 iob " b b ]  b, 8 o f #  #  # e # ( #  #(  #0  _#8 q _#@  _#H + #P  _#X  #` J #h  #p B #x ] #  #  _# 4 _# _#  _# I _#  #  #  # > †# z Æ# j Ĭ#  ņ#  Ɔ# dž# Ȇ#  Ɇ# ͆# s Ά#  φ#  І# 0 _# , P  S # r ؆# 0 E#  E#  k# ~ ܖ#(  #0 r ޵#8  #@ 2 E#HP z  M  # # #T   (# 5 S#  ^#  # X    P     b  b   5 H | K Q bk    j  i    b j jo   g #=N IOdNo  M  F = &# ? '5# (b# 2 *#| ( ?( #get K#set q#doc # 9 #   F ,| V\q6 |bXID G8, Q8a R8 e m l( # b# ## b 9# #b9#)) GCTZ8 G# #  b#   8#  8#  8#( x b#0  b#4?`+ b# H b# I +# !s G"# #y# m$# %b# %b# &b# &b#$ 'b#( (#0 )b#8 *+#@ +J#H ,#P -8#X .8#` /b#h ? /b#l 0b#p (1b#t D2i#x7s1 3=8 G9# :b# ;b# <b#;=9s( G# #fdb# b# = b# b# # #( #0 #8 b#@ 4#H h  b#P !b#T "b#X #b#\ o $b#` |%#h  &b#p 'b#t (#x (# 2)b# *8# ` +8# ,# -# .# /# )0M#db1# 2# 5# #6b# 7b# 8# 98# :8# ;b# <b# =# ># ?b# @# yby(l Wb# # # t8# ?# 5 ?#! R ?#"-lhi#lo# ~0 # *# [# ?# # V?# W#( "w #b# $[# r%[# &[# '[#  ((i F+"F #Fa'($ ) 8Pԟidչ# M# M# 8# M# GM# M# M#$ M#( M#, |M#0 #8 M#@ #H @' # # E b# Q '# b# -#( b#0 Y3#8! `) # F # # j b# 8# 8#( #0 C#2 E b#4 Q '#8 b#@ -#H b#P "b#T Y)#X D_@D E#xFb#yFb# GM# GM# H# GI# Jb#$ K-#( L#0 Mb#4 N-#8`O;l eO N fb#redgO# hO# A iO#Fmj@? @# A#sxBb#syBb#swCb#shCb# +Lb# Mb#$ Nb#( F R#0 S#8+ Va`3 ab# Pab# b ys wW wPw- W  !b__s   !9b"ixb#xidb$% b0@w@&U'evxT(Q@]w):$`*$`+P,i&b- ">!.w,ib,jb#kb/[b./{b/})0!~1evbb|1erbb|/\br/ b/ /bY ,xai,! 0>!}0D2!|2J#pp3s0P445?C[6s442g /B! #jjb+0/e H! /N!@ 7./ .T! +#ppM34![!443 ~ 448s2 448 xM 449pw442!0{,evbbA ,erbb #pp3 448P 44944+/3 ,! cw B! 9/U: 7"#i!;ix7b/C8:,rv8,i9b<# $a_"** 1ixbt,xidb6##4=##>?!x d3""ixdb$N e3$f#ppn$n$o$pb@44|"?">"?"N?">"6$$44 @# 0 # @1 AA4B_b 1 B] b 1 uF/build/buildd/glibc-2.9/build-tree/amd64-libc/csu/crtn.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1U%% : ; I$ > $ > $ >   I : ;  : ;I8 : ; : ; I8 I !I/ &I : ; ' II : ;  : ; ' : ;I : ;<  : ; I8 : ; I : ; : ; : ;I8 .? : ; ' I : ; I: ; I !.: ;' I ": ;I#4: ;I$4: ;I%.? : ; ' I@ &: ; I ': ; I (.? : ;' @ ).? : ;' @*: ;I+ U,4: ;I-.? : ; I@.4: ; I/4: ;I04: ;I 14: ;I 2 U31X Y4151X Y61X Y7 81UX Y91UX Y:.? : ;' I@;: ;I<.: ;' I@= >41?41@ A4: ; I? < B4: ; I?  U%O /build/buildd/glibc-2.9/build-tree/amd64-libc/csucrti.S P Ku=/0K K h%$ dispcalGUI/usr/include/bits/usr/lib/gcc/x86_64-linux-gnu/4.3.3/include/usr/include/usr/include/sys/usr/include/python2.5/usr/include/X11/usr/include/X11/extensionsRealDisplaySizeMM.cstring3.hstdio2.hstddef.htypes.hstdio.hlibio.htypes.hpyport.hobject.hmethodobject.hdescrobject.hX.hXlib.hxf86vmode.hXinerama.hrandr.hXrandr.h 0<~/;Y1?YyDyX ,>,{}t%. X}t![KQ -r0"z` \{w+w|f|"1 ~N,<:~yxfg;==Bzf%zW%zXzXXzXMUug [z.%zJ:ILTzPYz $ 䃃 %"hX~tʃs=-utz;u=?~/ 9 ;{tX=g{t{t{{XX{<$|5{*( {' &%ȃ..H~.#2Tj= dQ%BCPu=;Y J@b֒v<j\jX:>f=!y ";=3[9>[b r{O /build/buildd/glibc-2.9/build-tree/amd64-libc/csucrtn.S K q%Kx 0@$`uBGA $ l,"+BGD A(D0#LD ,$BMA D0_XGCtp_clear_objectGetXRandROutputXIDmax_request_size_shortbuf__pad3binaryfunccoercion_IO_lock_tnb_inplace_powerdispcalGUI/RealDisplaySizeMM.cprivate1_IO_buf_endPyGetSetDefsetattrofunclast_request_readnoutputselftp_deallocnb_inplace_xormonitortp_as_mappingnb_inplace_subtractSubpixelOrder_IO_write_endext_datassizessizeobjargproctp_namerooty_orgbits_per_rgbtp_as_bufferbitmap_bit_order_XRRModeInfotp_initRRCrtc_old_offset_markerstp_traverselenfuncWindowresourceidnb_subtracttp_weaklistdisplay_namegetattrfuncnb_nonzero_IO_FILEml_methrotationdestructorEMPTYRROutputtp_weaklistoffsetvTotalVisualnmodesq_itemtp_getattr_postp_cachemyscreenmap_entriesnb_inplace_addsq_ass_slicedescrsetfuncroot_depthstrcat_IO_save_enddnbufwidth_mmnb_inplace_floor_dividebf_getwritebufferhSyncEnd__lennvsyncnb_orlong long unsigned intnb_inplace_remainderconfigTimestampblack_pixelnb_multiplystrncpyscrnresinitprocvendorhashfunctp_iternexttp_printvSyncEndPyBufferProcsXineramaScreenInfotp_allocsave_undersresource_allocsubpixel_order_IO_backup_basecharbufferprocnb_positivednameinquirynclonemotion_bufferscreen_number_filenoreadbufferprocmin_keycode__pad4tp_hash__pad5crtcinpossibleprivate_datatp_setattroXF86VidModeMonitortp_richcompareqlen_XDisplay_IO_read_basetp_getattrodefsixssizessizeargfuncserialdcountstdinmax_keycodegettertp_mroroot_visualnscreenstp_subclasses_IO_markervSyncStartnb_coerce__fmtbf_getcharbufferhTotalbf_getsegcountPy_ssize_tcmapnpreferredXErrorEventget_xrandr_output_xidtp_getsetmodes_XRRCrtcInfo_XRRCrtcGammatp_compare_modesq_sliceGNU C 4.3.3mydisplaynb_octmheightprivate17sq_inplace_concatuscreenlong long intnb_negativenhsyncnb_powernb_inplace_rshiftdotClockwritebufferproc_typeobjectnb_inplace_divideheight_mmtp_as_sequenceRotationsq_concatsetattrfuncoutputs_IO_write_baseconnectionvisualidPyCFunctionbitmap_unitmax_mapsdescription_IO_save_basevisitprocmwidthbacking_storetp_memberscallback_ddebugnb_remainderPyObjectdesc1desc2nb_rshiftPyMappingMethodsnb_dividedescrgetfuncpixmap_format_XrmHashBucketRectp_baseallocfunctdisppnb_inplace_ordispbits_per_pixelobjobjprocmp_length__pad1__pad2tp_docred_masktp_methodsnb_andtp_itemsizeobjobjargprocsetterproto_major_version_vtable_offsetrequestbyte_ordernb_true_dividex_orgtp_basicsizeargsgreennb_floor_dividebf_getreadbufferlong doublesprintfnull_error_handlertp_descr_gettimestampmp_subscriptConnectioniternextfuncRRModedisppathnb_longtp_flagsncrtcob_sizesq_lengthg_error_handler_triggered_IO_read_endDepthdefault_gcproto_minor_versionshort inttp_callget_a_displaytp_iterml_nametp_freeblue_maskob_refcntRealDisplaySizeMM_methodscrtcgamtp_basestp_dict_XExtDataml_docclosurebluePyMethodDefminor_codetp_reproutinameLensq_containssq_ass_itemminvfreefunc__ssize_tndepthsrscreenreprfuncmp_ass_subscript_XPrivateprivate2private3private4private5nb_floatprivate8private9nb_intnb_invert_lockVisualIDrequest_codenb_xornb_hexPySequenceMethodsfree_privatenformatsget_real_screen_size_mmscanline_padScreensegcountprocXF86VidModeSyncRangemm_widthwhite_pixelPyMemberDef__destXPointerPyNumberMethodsunsigned charnb_inplace_lshifttp_is_gcnb_index_sbufmin_mapsnvisualscrtcs__srctraverseproc_IO_write_ptrtp_dictoffsetmodeFlags_XRROutputInfoprintfuncnb_inplace_andternaryfuncXRRModeFlagstp_strget_displaysml_flagsbitmap_padclonesnameLengthxdefaultserror_code_XRRScreenResourcesstdoutScreenFormatgetattrofunc/media/DATA/User Files/Id/Softwareentwicklung/dispcalGUI/trunkclassrichcmpfuncgreen_masktp_as_number__off_thSkewtp_descr_setColormaptp_newnb_lshiftprivate6nb_absoluteshort unsigned intreleasedefault_screensq_inplace_repeatroot_input_maskob_typemajvTimenb_addtp_del_IO_read_ptrnb_inplace_true_dividenb_inplace_multiplyndispshSyncStartprivate10private11private12private13private14private15private16_chainprivate18private19tp_setattrmodelsq_repeatfree_disppaths_flags2initRealDisplaySizeMMnewfunc_cur_columnunaryfunc_nextbname__off64_t_unused2_IO_buf_basemm_heightgetiterfuncnb_divmodrotations02w29w9:w:w 0<U<D\DIUISU\\UIVPwU w${$w{@{w{wwww}{}w{K wK {  w { w { " w" U {8{8ASARQRqSqQ{{&PNh{h}w}!{!6w6{SM]MjPjw]w}{}]{w SK " {{N{Nh\hpPp{\P{{\wPK {K " \ " \Pw{!{a}Pwwww}{}w w  P/w/|wPJwJ|w|w}w}|wK |K 5 w +PmuP@P||U |{{U {x{P@^U ^{{ {  w v {v w " {{w!w{w{w}w}{K {{1{1NwN}{}w!{!JwJ{ { w " {NhPPPO _ Zf Zy ~ Z Pw{wwww}{} w v {v " wPPK d P{!{{{K {{!{{{K {R > R` b wb i wi m wm n w n r w(r w0` w Uw \ \z } P P S V P Sg ] ] Q P Q P Qww UTUTPwwww w0UTUP\\*-PSSPVPgh%l%<m K " !.K " }Ph " z v 0 8 }   |  " !}wjU+  g " Ry@E-3'*q%v%.symtab.strtab.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_rangesdo% - 35o hBo @Q` ` [` e`PkPPqh%h%w2x%x%h&&D('('- -- -- -- -/ /(/ /8 1 1 1 11`2 33$X`\(b'0@c2t=K $:    `    P h% x%&('- - - - / /  1 1  !  P'- 5- C- P pf1 u1  -  (-  0%@1 ` #L  $/ 5 1 B- O- Xms 0  1   h%1 #7N @dv" : "+H]s1    `u31 8M\w1  initfini.ccall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6997dtor_idx.6999frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxRealDisplaySizeMM.cRealDisplaySizeMM_methodsGetXRandROutputXIDRealDisplaySizeMM_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END___DYNAMICXineramaQueryScreensXFreeXRRFreeScreenResourcesXRRFreeCrtcInfoPy_InitModule4_64XRRGetOutputInfonull_error_handler__gmon_start___Jv_RegisterClassesg_error_handler_triggered_finicallback_ddebugmalloc@@GLIBC_2.2.5XineramaQueryExtensioninitRealDisplaySizeMMXRRQueryExtensionXRRGetCrtcGammaXRRQueryVersionXOpenDisplay__strcat_chk@@GLIBC_2.3.4PyArg_ParseTuple__strdup@@GLIBC_2.2.5free@@GLIBC_2.2.5XCloseDisplay__cxa_finalize@@GLIBC_2.2.5XF86VidModeQueryExtensionget_a_displaystrrchr@@GLIBC_2.2.5XRRGetScreenResourcesXRRFreeGammastrchr@@GLIBC_2.2.5getenv@@GLIBC_2.2.5Py_BuildValue__bss_startget_displays__stack_chk_fail@@GLIBC_2.4strcpy@@GLIBC_2.2.5free_disppathsXineramaIsActivecalloc@@GLIBC_2.2.5_endstrncpy@@GLIBC_2.2.5XRRGetCrtcInfo__sprintf_chk@@GLIBC_2.3.4XSetErrorHandlerXF86VidModeGetMonitorrealloc@@GLIBC_2.2.5_edataXRRFreeOutputInfo_initdispcalGUI-1.7.1.6/dispcalGUI/lib32/__init__.py000644 000765 000000 00000000001 12031640062 020607 0ustar00svpwheel000000 000000 #dispcalGUI-1.7.1.6/dispcalGUI/lib32/python25/000755 000765 000000 00000000000 12266723170 020213 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/lib32/python26/000755 000765 000000 00000000000 12266723170 020214 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/lib32/python27/000755 000765 000000 00000000000 12266723170 020215 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/lib32/python27/__init__.py000644 000765 000000 00000000001 12031640062 022301 0ustar00svpwheel000000 000000 #dispcalGUI-1.7.1.6/dispcalGUI/lib32/python27/RealDisplaySizeMM.so000755 000765 000000 00000110464 12025152305 024054 0ustar00svpwheel000000 000000 ELF44 ($!##.>> .>>QtdRtd.>>c3' &.!0 #*",$/2% +)1 (- '@9`$'()*+-./012wxqXI%;w|)^j6|ۧCE칍爢Z@ + '9l }eIo".W1 " @lH @w AR@@ @  ? __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesnull_error_handlerg_error_handler_triggeredinitRealDisplaySizeMMPy_InitModule4free_disppathsfreeget_displaysgetenvstrncpystrrchrstrchrXOpenDisplayXSetErrorHandlerXineramaQueryExtensioncallocXCloseDisplay__strcat_chkXRRQueryExtensionXRRQueryVersionXineramaIsActiveXineramaQueryScreensXF86VidModeGetMonitor__sprintf_chk__strdupXF86VidModeQueryExtensionstrcpyXFreeXRRGetScreenResourcesXRRGetOutputInfoXRRGetCrtcGammaXRRFreeGammaXRRGetCrtcInforeallocXRRFreeCrtcInfoXRRFreeOutputInfoXRRFreeScreenResourcesget_a_displaymallocPyArg_ParseTuplePy_BuildValuecallback_ddebuglibXinerama.so.1libXrandr.so.2libXxf86vm.so.1libpthread.so.0libc.so.6__stack_chk_fail_edata__bss_start_endGLIBC_2.1.3GLIBC_2.4GLIBC_2.3.4GLIBC_2.0si ii ti $ii 0?@@@@@@@???-?$@@@ @@@@@ @ $@ (@ ,@ 0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@ |@!@"@#@$@%@&US[h3tn4X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh UVS0u]t$)p9s A9rƃ[^]US.[0tt $҃[]Ë$Ð0U勁1]fUS/D$D$ D$D$@$^[]Ð&UWVS Evã/tTUt@։׃t&t$rPt $a$UűE$A [^_]É'UWVS)/leE1DžXDžTR$<U$D$cD$7ED$: $mt*D$.$xw@0@ $ADž!]${ $(TD$XD$$\Dž\$D$ \1\9D$$,uΉ$ $XDžMe3 l[^_]Í&[D$D$d$lvUE:0.0EP&TD$XD$$6uZLD$PD$ $$P5$<\D$ $t\Dž*4$Džt&ZD$dD$4$4v DDž t&(Dž,D$@ $D$t,t 8V t$D$ (D$dD$4$BD$ BD$B D$Bt$D$D$D$t$ `4$R4$ B9   9\ DžHDžDD$:$t@D$.$At,D$D$L$t$ $7$t@pp BAB ABABD$HD$$e T$L$ *t&ppp @@ AD AADAW(D$4$l $t&[t$6$X $z,Lv $\uDžDžDžD $D$DžH.IBusA9 AL$D$ $HfyuF떉D$$VtuB$$\IDž8BL$D$$D$ $:oDD$$,PPP ABAB A BABAB$A0B(Bt$(L$ D$dD$D$4$`BD$ BD$B D$B $D$t$T$ D$D$Ot&9D@$;A$u͋|$D$dD$ D$4$D$t$$ t6$AD$:4$Yt@D$.$t,D$D$T$L$ $0$? $'$B $9\D${Ft&4$z$$Dž'D$$U$/ $4$#4$$$ $ Dž4$v $4$4$$a$s&$"f4$M$DžfUWV1S! Et>Et(}t81&9Ut(0DžuE1$ [^_]Ë}v$,thBFBFB F BFBFBFBFB F B$F$B(F($Pt)@$=Ft-E${ [^_]ËF$4$<4$1E$D/ UVS ED$E t$$uEE${1҅tP(4$T$ [^] UWVSE빋 $ÐUS+UVS t&Ћu[^]US[Y[RealDisplaySizeMMDISPLAY.0ARGYLL_IGNORE_XRANDR1_2Screen %d, Output %s[ Clone of %d ].%dScreen %di(i,i)GetXRandROutputXID%s at %d, %d, width %d, height %dRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display. "o4 : ?(X  `o ooB o>   & 6 F V f v &6FVfv@4" "" 0#GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3$ ""x$&% 0"x$.null_error_handlerginitRealDisplaySizeMM}free_disppathsget_displaysE"get_a_display$callback_ddebug$g_error_handler_triggeredt/build/buildd/glibc-2.9/build-tree/i386-libc/csu/crti.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1$!! 0   int@ 8aYE,o Z P1L- wZ# # # # # # J# ?# # N#$ #( % #, "#0 $#4 &Z#8 *Z#< ,z#@ 0>#D 1L#F :2#G 6#H ?#L c H#T j I#X DJ#\ K#` L%#d NZ#h 6P#l _  # # Z#    ' ne q 8 =  jG b k#  kD# kD b C#  CD# C# v D# E# E# I #  J #  K<#  Lo#$  M#( N#, L R#0  S#4  T#8  X#< * Y#@ a Z#D  [c#H D \#L  _#P b#T q d#X  h #\  k#` i o#d  r#h @ v #l  w#p z#t { {#x  |`#| }D# ~v# _ %# g 1#  #  =# M u# } I# P  # # v#  v#  v#  v#  v#   # l 0#G l `fvvvJK vvvH vvvv Zv vV  Z555v FLvav lrvvf Zvva Zvv Zvvv )/Iv )4 _ezvz vj, R buf #obj v#len # #  Z#  Z#  # P z# j z#  z#$  #(0  h n Z v ZR    v N ջ  Z vv\  Z v   Z' v  c  |#  |#  |#  |#  |# b |# a # N U#  U#  U#$ A #( U#,  |#0  |#4 |#8 |#<  |#@ . #D U#H U#L U#P  U#T U#X  |#\ ( |#` 3 |#d  |#h  |#l r #p |#t u |#x 9 |#| |# , |#  |# |# A |#  |# U# ' (  #  |#  ;#  ;#  a#  #  #  # & |#  ;#$ o  R Y # v !|# K "# #  % ' &# Y 'I# V (T# > )#  *] #  + #, ,^  /   f 0   v/ 1Z6v6Z5 2HNvcv 3 4{Zvv 59 6 B 7` 8v5 9v vvZV :` ;` < = > ?U[vuDvv @vDc  R    z H &# U 'f# u (Z# *# k  |` K #get |#set #doc # # !  , vv ZvvXID GE QE RE et m~ l T Z# !T# j# 7# ZjTZ GC  X# # / Z# x  E# A E# X  E#  Z#  Z#p \ Z# Z# \# %P! X"# 8 ## ~$# Y %Z# O%Z# f&Z# &Z# ( 'Z# ) (# )Z#$ *\#(  +{#, p,#0 _ -E#4 .E#8 9/Z#< /Z#@ m0Z#D V1Z#H 2#L}b- 3n8 X9# :Z# ? ;Z# <Z# = X# #fdZ# f Z# Z# Z# # o # x # #$ Z#( b#,  Z#0 -!Z#4 ~"Z#8 #Z#< $Z#@ %#D &Z#H 'Z#L (#P Y(#T x)Z#X *E#\ +E#` c,#d m-#h w.#l /#p )00#tdb1#x 2#| (5# 6Z# 7Z# 8# 9E# :E# ;Z# <Z# =# ># ?Z# @#\ Z Z# 8 # # E# 7# 7# 7#hi#lo# A C # # q# Z7# [C# z7# {C#V " #Z# $S# %S# Y &S# O'S# :(T ><"> #>w'( )TE8id# Y 0# O0# E# N0# k0# O0# a0# #0# #0#$ 0#( K #, 0#0 #4 S l # # Z# S# Z# Y# Z# _# 8U l # # K # Z# V E# LE# # q# Z# S# Z#$ Y#( Z#, uZ#0 U#4!p0D% l E#xFZ#yFZ# Y G0# OG0# H# ]I# JZ# KY# lL#$ -MZ#( .NY#,Oge{ fZ#redg{#  h{# i{# >j1,?, K @# BA#sxBZ#syBZ# swCZ#shCZ# LZ# 8MZ# : NZ# R#$ S#( V`_ 8aZ# aZ# b7yw w wtw%w  D !Z__s 8 Z(ixZ xidZ!: (,"L Zg#: $ev۝%8,&$@X'H$([ i&Z()h"*H+iZ+jZ kZ,Z[,Z,-2".evbZu|.erbZu|,Z, ZY,,GZ+xai"'-"~-"|/ B pp0 112k )3@11/@ - I|+evbZc+erbZ pp0 114 114 11511/ !,% (6,-" jjZ60, 3"&,'9"b/h! ppM4w!114x!114!114~!115011((, .?" " c -" e[%72 7( "8ix7Z,8++rv8(x+i9Z9v q )#:v' v.ixZut+xidZ!3J ^ 1(U ^ ;<4 d_#ixdZ! e_!: f( ppn!&n!o!pZ=119v !GM$:v' vs.ixZup! _5)#H1;#6`;F#>R#u\;^# $ > $ >   I : ;  : ;I8 : ; : ; I8 I !I/ &I' II : ; I8 '  : ; : ;I : ; : ;< : ; I : ;I8 .? : ; ' I : ; I: ; I.: ;' I : ;I 4: ;I!4: ;I".? : ; ' I@#: ; I $: ; I %.? : ;' @&.? : ;' @': ;I( ).? : ; I@*4: ; I+4: ;I,4: ;I-4: ;I .4: ;I / U01X Y1121X Y31X Y41UX Y51UX Y6 U7.? : ;' I@8: ;I9.: ;' I@:: ;I ;41<41= >41 ?4: ; I? < @4: ; I?  U%o /build/buildd/glibc-2.9/build-tree/i386-libc/csu../sysdeps/genericcrti.Sinitfini.c !/!=Z!gg//"!/!=Z! dispcalGUI/usr/include/bits/usr/lib/gcc/i486-linux-gnu/4.3.3/include/usr/include/usr/include/sys/usr/include/python2.6/usr/include/X11/usr/include/X11/extensionsRealDisplaySizeMM.cstring3.hstdio2.hstddef.htypes.hstdio.hlibio.htypes.hpyport.hobject.hmethodobject.hdescrobject.hX.hXlib.hxf86vmode.hXinerama.hrandr.hXrandr.h׼f!0~֑;MMgy {f <}XeK=wKQ&"^ *!\-d0?z(( [v,h{(zf[fzffz.zfJz,2z.HIf&b:=z<,בYב z*YY #"fmXeYK1E.(}.+i|ft|t6 tX2? tge=gt3 -? 9Y==h{f{-{ff{.H|-<{f{f- {<, ~֑-//~."/>N.H..~.\*辔H>T-YJ dm%B'Bs=-Y2b'h<jX@',>f==yX,-/3u> _uP& /tmpccxq91nO.s !!!0"-!!!| LB HAB A@wAB FAB C1AB BC aAB B ;AB C_XGCtp_clear_objectGetXRandROutputXIDmax_request_size_shortbuf__pad3binaryfunccoercion_IO_lock_tstridesnb_inplace_powerdispcalGUI/RealDisplaySizeMM.cprivate1_IO_buf_endPyGetSetDefsetattrofunclast_request_readnoutputselftp_deallocnb_inplace_xormonitorreadonlytp_as_mappingnb_inplace_subtractSubpixelOrder_IO_write_endext_datassizessizeobjargproctp_namerooty_orgbits_per_rgbtp_as_bufferbitmap_bit_order_XRRModeInfotp_initRRCrtc_old_offset_markerstp_traverselenfuncWindowresourceidnb_subtractndimtp_weaklistdisplay_namegetattrfuncnb_nonzero_IO_FILEml_methrotationdestructorEMPTYRROutputtp_weaklistoffsetvTotalgetbufferprocVisualnmodesq_itemtp_getattr_postp_cachemyscreenmap_entriesnb_inplace_addsq_ass_slicedescrsetfuncroot_depthstrcat_IO_save_enddnbufwidth_mmnb_inplace_floor_dividebf_getwritebufferhSyncEnd__lennvsyncnb_orlong long unsigned intnb_inplace_remainderconfigTimestampblack_pixelnb_multiplystrncpyscrnresinitprocbf_releasebufferhashfunctp_iternexttp_printvSyncEndPyBufferProcsXineramaScreenInfotp_allocsave_undersresource_allocsubpixel_order_IO_backup_basecharbufferprocnb_positivednameinquiryreleasebufferprocnclonemotion_bufferscreen_number_filenoreadbufferprocmin_keycode__pad4tp_hash__pad5crtcinpossibleprivate_datatp_setattroshapeXF86VidModeMonitortp_richcompareqlen_XDisplay_IO_read_basetp_getattrodefsixbf_getbufferssizessizeargfuncserialdcountstdinmax_keycodegettertp_mroroot_visualnscreenstp_subclasses_IO_markervSyncStartnb_coerce__fmtbf_getcharbufferhTotalbf_getsegcountPy_ssize_tcmapnpreferredXErrorEventget_xrandr_output_xidtp_getsetmodes_XRRCrtcInfo_XRRCrtcGammatp_compare_modesq_slicevendorinternalGNU C 4.3.3mydisplaynb_octmheightprivate17sq_inplace_concatuscreenlong long intnb_negativenhsyncnb_powerbufferinfonb_inplace_rshiftdotClockwritebufferproc_typeobjectnb_inplace_divideheight_mmtp_as_sequenceRotationsq_concatsetattrfuncoutputs_IO_write_baseconnectionvisualidPyCFunctionbitmap_unitmax_mapsdescription_IO_save_basevisitprocmwidthbacking_storetp_memberscallback_ddebugnb_remainderPyObjectdesc1desc2nb_rshiftPyMappingMethodsnb_dividedescrgetfuncpixmap_format_XrmHashBucketRectp_base__quad_tallocfunctdisppnb_inplace_ordispbits_per_pixelobjobjprocmp_length__pad1__pad2tp_docred_masktp_methodsnb_andtp_itemsizeobjobjargprocsetterproto_major_version_vtable_offsetrequestbyte_ordernb_true_dividex_orgtp_basicsizeargsgreennb_floor_dividebf_getreadbufferlong doublesprintfnull_error_handlertp_descr_gettimestampmp_subscriptConnectioniternextfuncRRModedisppathnb_longtp_flagsncrtcob_sizesq_lengthg_error_handler_triggered_IO_read_endDepthdefault_gcproto_minor_versionshort inttp_callget_a_displaytp_iterml_nametp_freeblue_maskob_refcnttp_version_tagRealDisplaySizeMM_methodscrtcgamtp_basestp_dict_XExtDataml_docclosurebluePyMethodDefminor_codetp_reproutinameLensq_containssq_ass_itemminvfreefunc__ssize_tndepthsPy_bufferrscreenreprfuncmp_ass_subscript_XPrivateprivate2private3private4private5nb_floatprivate8private9nb_intnb_invert_lockVisualIDrequest_codenb_xornb_hexPySequenceMethodsfree_privatenformatsget_real_screen_size_mmscanline_padScreensegcountprocXF86VidModeSyncRangemm_widthwhite_pixelPyMemberDef__destXPointerPyNumberMethodsunsigned charnb_inplace_lshifttp_is_gcnb_index_sbufmin_mapsnvisualscrtcs__srctraverseproc_IO_write_ptrtp_dictoffsetmodeFlags_XRROutputInfoprintfuncnb_inplace_andternaryfuncXRRModeFlagstp_strget_displaysml_flagsbitmap_padclonesnameLengthxdefaultserror_code_XRRScreenResourcesstdoutScreenFormatsuboffsetsgetattrofunc/media/DATA/User Files/Id/Softwareentwicklung/dispcalGUI/trunkclassrichcmpfuncgreen_masktp_as_number__off_thSkewtp_descr_setColormaptp_newnb_lshiftprivate6nb_absoluteshort unsigned intreleasedefault_screensq_inplace_repeatroot_input_maskob_typemajvTimenb_addtp_del_IO_read_ptrnb_inplace_true_dividenb_inplace_multiplyndispshSyncStartprivate10private11private12private13private14private15private16_chainprivate18private19tp_setattrmodelsq_repeatfree_disppaths_flags2initRealDisplaySizeMMnewfunc_cur_columnunaryfunc_nextbname__off64_t_unused2_IO_buf_basemm_heightgetiterfuncnb_divmodrotations t tu !t!#t#hupqtqstsupuWuttu u{QDu{mu{u|V u|Du|m~Vu|Pu|u|Vu|u|ju| u{Du{mu{u{PV u{V X PX u{ P  u{ ! P! u{PQ u{Du{mu{` w P_ru{ u|Du|mu|0>P>u|6YPP5QP u|~u|Du|mu| u|~u|Du|mu|u| u{QDu{mu{ u{Du{mu{t u{ u| u{K u{ Du{mu{_ru{ u|'Du|u| u|'Du|u|QQ{ Q u{Du{mu{u{ u{Du{mu{u{ u|Du|mu|u|l | P| P Ptt1u22SuSjj1u 9up9SWSmupmWup1W9VHJVSgVjV1V7`Rm|R@AtACtCu@ssu RPttuu PVVuwPW "+"<Hp8~'HF~#O&Dn >Vr _t/ >Vr _ ! t>Vr _  t>D ;  tzDJI A G zJP PV    D wsu=k9;%)   0"4".symtab.strtab.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges`o44% 0-:5oB B fBo PQ  `Z X X ( c 0^ `io""u24"4"X}##>.>.>.>.?/?/@0P @001p822v%YX[ a0pbv"s-{~;t#; D4B   X     " 4" #>>>>??@@  >%>3>@ V@e@s >#>! @0 a ; ?%@2>?! V! m >   )@CUg" m@}H !;L\j1 @ @w +<KAP_z@"  initfini.ccrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6635dtor_idx.6637frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxRealDisplaySizeMM.cRealDisplaySizeMM_methodsGetXRandROutputXIDRealDisplaySizeMM_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END____i686.get_pc_thunk.cx__stack_chk_fail_local__i686.get_pc_thunk.bx_DYNAMICXineramaQueryScreensXFreeXRRFreeScreenResourcesXRRFreeCrtcInfoXRRGetOutputInfonull_error_handler__gmon_start___Jv_RegisterClassesrealloc@@GLIBC_2.0g_error_handler_triggeredstrchr@@GLIBC_2.0getenv@@GLIBC_2.0_finicallback_ddebugcalloc@@GLIBC_2.0strncpy@@GLIBC_2.0XineramaQueryExtensioninitRealDisplaySizeMMXRRQueryExtensionXRRGetCrtcGammaXRRQueryVersionstrrchr@@GLIBC_2.0XOpenDisplay__strcat_chk@@GLIBC_2.3.4PyArg_ParseTuplefree@@GLIBC_2.0XCloseDisplayXF86VidModeQueryExtensionget_a_displayXRRGetScreenResourcesstrcpy@@GLIBC_2.0XRRFreeGammaPy_BuildValue__bss_startmalloc@@GLIBC_2.0get_displays__stack_chk_fail@@GLIBC_2.4free_disppathsXineramaIsActivePy_InitModule4_endXRRGetCrtcInfo__sprintf_chk@@GLIBC_2.3.4XSetErrorHandlerXF86VidModeGetMonitor_edata__cxa_finalize@@GLIBC_2.1.3__strdup@@GLIBC_2.0XRRFreeOutputInfo_initdispcalGUI-1.7.1.6/dispcalGUI/lib32/python26/__init__.py000644 000765 000000 00000000001 12031640062 022300 0ustar00svpwheel000000 000000 #dispcalGUI-1.7.1.6/dispcalGUI/lib32/python26/RealDisplaySizeMM.so000755 000765 000000 00000110464 12025152305 024053 0ustar00svpwheel000000 000000 ELF44 ($!##.>> .>>QtdRtd.>>c3' &.!0 #*",$/2% +)1 (- '@9`$'()*+-./012wxqXI%;w|)^j6|ۧCE칍爢Z@ + '9l }eIo".W1 " @lH @w AR@@ @  ? __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesnull_error_handlerg_error_handler_triggeredinitRealDisplaySizeMMPy_InitModule4free_disppathsfreeget_displaysgetenvstrncpystrrchrstrchrXOpenDisplayXSetErrorHandlerXineramaQueryExtensioncallocXCloseDisplay__strcat_chkXRRQueryExtensionXRRQueryVersionXineramaIsActiveXineramaQueryScreensXF86VidModeGetMonitor__sprintf_chk__strdupXF86VidModeQueryExtensionstrcpyXFreeXRRGetScreenResourcesXRRGetOutputInfoXRRGetCrtcGammaXRRFreeGammaXRRGetCrtcInforeallocXRRFreeCrtcInfoXRRFreeOutputInfoXRRFreeScreenResourcesget_a_displaymallocPyArg_ParseTuplePy_BuildValuecallback_ddebuglibXinerama.so.1libXrandr.so.2libXxf86vm.so.1libpthread.so.0libc.so.6__stack_chk_fail_edata__bss_start_endGLIBC_2.1.3GLIBC_2.4GLIBC_2.3.4GLIBC_2.0si ii ti $ii 0?@@@@@@@???-?$@@@ @@@@@ @ $@ (@ ,@ 0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@ |@!@"@#@$@%@&US[h3tn4X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh UVS0u]t$)p9s A9rƃ[^]US.[0tt $҃[]Ë$Ð0U勁1]fUS/D$D$ D$D$@$^[]Ð&UWVS Evã/tTUt@։׃t&t$rPt $a$UűE$A [^_]É'UWVS)/leE1DžXDžTR$<U$D$cD$7ED$: $mt*D$.$xw@0@ $ADž!]${ $(TD$XD$$\Dž\$D$ \1\9D$$,uΉ$ $XDžMe3 l[^_]Í&[D$D$d$lvUE:0.0EP&TD$XD$$6uZLD$PD$ $$P5$<\D$ $t\Dž*4$Džt&ZD$dD$4$4v DDž t&(Dž,D$@ $D$t,t 8V t$D$ (D$dD$4$BD$ BD$B D$Bt$D$D$D$t$ `4$R4$ B9   9\ DžHDžDD$:$t@D$.$At,D$D$L$t$ $7$t@pp BAB ABABD$HD$$e T$L$ *t&ppp @@ AD AADAW(D$4$l $t&[t$6$X $z,Lv $\uDžDžDžD $D$DžH.IBusA9 AL$D$ $HfyuF떉D$$VtuB$$\IDž8BL$D$$D$ $:oDD$$,PPP ABAB A BABAB$A0B(Bt$(L$ D$dD$D$4$`BD$ BD$B D$B $D$t$T$ D$D$Ot&9D@$;A$u͋|$D$dD$ D$4$D$t$$ t6$AD$:4$Yt@D$.$t,D$D$T$L$ $0$? $'$B $9\D${Ft&4$z$$Dž'D$$U$/ $4$#4$$$ $ Dž4$v $4$4$$a$s&$"f4$M$DžfUWV1S! Et>Et(}t81&9Ut(0DžuE1$ [^_]Ë}v$,thBFBFB F BFBFBFBFB F B$F$B(F($Pt)@$=Ft-E${ [^_]ËF$4$<4$1E$D/ UVS ED$E t$$uEE${1҅tP(4$T$ [^] UWVSE빋 $ÐUS+UVS t&Ћu[^]US[Y[RealDisplaySizeMMDISPLAY.0ARGYLL_IGNORE_XRANDR1_2Screen %d, Output %s[ Clone of %d ].%dScreen %di(i,i)GetXRandROutputXID%s at %d, %d, width %d, height %dRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display. "o4 : ?(X  `o ooB o>   & 6 F V f v &6FVfv@4" "" 0#GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3$ ""x$&% 0"x$.null_error_handlerginitRealDisplaySizeMM}free_disppathsget_displaysE"get_a_display$callback_ddebug$g_error_handler_triggeredt/build/buildd/glibc-2.9/build-tree/i386-libc/csu/crti.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1$!! 0   int@ 8aYE,o Z P1L- wZ# # # # # # J# ?# # N#$ #( % #, "#0 $#4 &Z#8 *Z#< ,z#@ 0>#D 1L#F :2#G 6#H ?#L c H#T j I#X DJ#\ K#` L%#d NZ#h 6P#l _  # # Z#    ' ne q 8 =  jG b k#  kD# kD b C#  CD# C# v D# E# E# I #  J #  K<#  Lo#$  M#( N#, L R#0  S#4  T#8  X#< * Y#@ a Z#D  [c#H D \#L  _#P b#T q d#X  h #\  k#` i o#d  r#h @ v #l  w#p z#t { {#x  |`#| }D# ~v# _ %# g 1#  #  =# M u# } I# P  # # v#  v#  v#  v#  v#   # l 0#G l `fvvvJK vvvH vvvv Zv vV  Z555v FLvav lrvvf Zvva Zvv Zvvv )/Iv )4 _ezvz vj, R buf #obj v#len # #  Z#  Z#  # P z# j z#  z#$  #(0  h n Z v ZR    v N ջ  Z vv\  Z v   Z' v  c  |#  |#  |#  |#  |# b |# a # N U#  U#  U#$ A #( U#,  |#0  |#4 |#8 |#<  |#@ . #D U#H U#L U#P  U#T U#X  |#\ ( |#` 3 |#d  |#h  |#l r #p |#t u |#x 9 |#| |# , |#  |# |# A |#  |# U# ' (  #  |#  ;#  ;#  a#  #  #  # & |#  ;#$ o  R Y # v !|# K "# #  % ' &# Y 'I# V (T# > )#  *] #  + #, ,^  /   f 0   v/ 1Z6v6Z5 2HNvcv 3 4{Zvv 59 6 B 7` 8v5 9v vvZV :` ;` < = > ?U[vuDvv @vDc  R    z H &# U 'f# u (Z# *# k  |` K #get |#set #doc # # !  , vv ZvvXID GE QE RE et m~ l T Z# !T# j# 7# ZjTZ GC  X# # / Z# x  E# A E# X  E#  Z#  Z#p \ Z# Z# \# %P! X"# 8 ## ~$# Y %Z# O%Z# f&Z# &Z# ( 'Z# ) (# )Z#$ *\#(  +{#, p,#0 _ -E#4 .E#8 9/Z#< /Z#@ m0Z#D V1Z#H 2#L}b- 3n8 X9# :Z# ? ;Z# <Z# = X# #fdZ# f Z# Z# Z# # o # x # #$ Z#( b#,  Z#0 -!Z#4 ~"Z#8 #Z#< $Z#@ %#D &Z#H 'Z#L (#P Y(#T x)Z#X *E#\ +E#` c,#d m-#h w.#l /#p )00#tdb1#x 2#| (5# 6Z# 7Z# 8# 9E# :E# ;Z# <Z# =# ># ?Z# @#\ Z Z# 8 # # E# 7# 7# 7#hi#lo# A C # # q# Z7# [C# z7# {C#V " #Z# $S# %S# Y &S# O'S# :(T ><"> #>w'( )TE8id# Y 0# O0# E# N0# k0# O0# a0# #0# #0#$ 0#( K #, 0#0 #4 S l # # Z# S# Z# Y# Z# _# 8U l # # K # Z# V E# LE# # q# Z# S# Z#$ Y#( Z#, uZ#0 U#4!p0D% l E#xFZ#yFZ# Y G0# OG0# H# ]I# JZ# KY# lL#$ -MZ#( .NY#,Oge{ fZ#redg{#  h{# i{# >j1,?, K @# BA#sxBZ#syBZ# swCZ#shCZ# LZ# 8MZ# : NZ# R#$ S#( V`_ 8aZ# aZ# b7yw w wtw%w  D !Z__s 8 Z(ixZ xidZ!: (,"L Zg#: $ev۝%8,&$@X'H$([ i&Z()h"*H+iZ+jZ kZ,Z[,Z,-2".evbZu|.erbZu|,Z, ZY,,GZ+xai"'-"~-"|/ B pp0 112k )3@11/@ - I|+evbZc+erbZ pp0 114 114 11511/ !,% (6,-" jjZ60, 3"&,'9"b/h! ppM4w!114x!114!114~!115011((, .?" " c -" e[%72 7( "8ix7Z,8++rv8(x+i9Z9v q )#:v' v.ixZut+xidZ!3J ^ 1(U ^ ;<4 d_#ixdZ! e_!: f( ppn!&n!o!pZ=119v !GM$:v' vs.ixZup! _5)#H1;#6`;F#>R#u\;^# $ > $ >   I : ;  : ;I8 : ; : ; I8 I !I/ &I' II : ; I8 '  : ; : ;I : ; : ;< : ; I : ;I8 .? : ; ' I : ; I: ; I.: ;' I : ;I 4: ;I!4: ;I".? : ; ' I@#: ; I $: ; I %.? : ;' @&.? : ;' @': ;I( ).? : ; I@*4: ; I+4: ;I,4: ;I-4: ;I .4: ;I / U01X Y1121X Y31X Y41UX Y51UX Y6 U7.? : ;' I@8: ;I9.: ;' I@:: ;I ;41<41= >41 ?4: ; I? < @4: ; I?  U%o /build/buildd/glibc-2.9/build-tree/i386-libc/csu../sysdeps/genericcrti.Sinitfini.c !/!=Z!gg//"!/!=Z! dispcalGUI/usr/include/bits/usr/lib/gcc/i486-linux-gnu/4.3.3/include/usr/include/usr/include/sys/usr/include/python2.6/usr/include/X11/usr/include/X11/extensionsRealDisplaySizeMM.cstring3.hstdio2.hstddef.htypes.hstdio.hlibio.htypes.hpyport.hobject.hmethodobject.hdescrobject.hX.hXlib.hxf86vmode.hXinerama.hrandr.hXrandr.h׼f!0~֑;MMgy {f <}XeK=wKQ&"^ *!\-d0?z(( [v,h{(zf[fzffz.zfJz,2z.HIf&b:=z<,בYב z*YY #"fmXeYK1E.(}.+i|ft|t6 tX2? tge=gt3 -? 9Y==h{f{-{ff{.H|-<{f{f- {<, ~֑-//~."/>N.H..~.\*辔H>T-YJ dm%B'Bs=-Y2b'h<jX@',>f==yX,-/3u> _uP& /tmpccxq91nO.s !!!0"-!!!| LB HAB A@wAB FAB C1AB BC aAB B ;AB C_XGCtp_clear_objectGetXRandROutputXIDmax_request_size_shortbuf__pad3binaryfunccoercion_IO_lock_tstridesnb_inplace_powerdispcalGUI/RealDisplaySizeMM.cprivate1_IO_buf_endPyGetSetDefsetattrofunclast_request_readnoutputselftp_deallocnb_inplace_xormonitorreadonlytp_as_mappingnb_inplace_subtractSubpixelOrder_IO_write_endext_datassizessizeobjargproctp_namerooty_orgbits_per_rgbtp_as_bufferbitmap_bit_order_XRRModeInfotp_initRRCrtc_old_offset_markerstp_traverselenfuncWindowresourceidnb_subtractndimtp_weaklistdisplay_namegetattrfuncnb_nonzero_IO_FILEml_methrotationdestructorEMPTYRROutputtp_weaklistoffsetvTotalgetbufferprocVisualnmodesq_itemtp_getattr_postp_cachemyscreenmap_entriesnb_inplace_addsq_ass_slicedescrsetfuncroot_depthstrcat_IO_save_enddnbufwidth_mmnb_inplace_floor_dividebf_getwritebufferhSyncEnd__lennvsyncnb_orlong long unsigned intnb_inplace_remainderconfigTimestampblack_pixelnb_multiplystrncpyscrnresinitprocbf_releasebufferhashfunctp_iternexttp_printvSyncEndPyBufferProcsXineramaScreenInfotp_allocsave_undersresource_allocsubpixel_order_IO_backup_basecharbufferprocnb_positivednameinquiryreleasebufferprocnclonemotion_bufferscreen_number_filenoreadbufferprocmin_keycode__pad4tp_hash__pad5crtcinpossibleprivate_datatp_setattroshapeXF86VidModeMonitortp_richcompareqlen_XDisplay_IO_read_basetp_getattrodefsixbf_getbufferssizessizeargfuncserialdcountstdinmax_keycodegettertp_mroroot_visualnscreenstp_subclasses_IO_markervSyncStartnb_coerce__fmtbf_getcharbufferhTotalbf_getsegcountPy_ssize_tcmapnpreferredXErrorEventget_xrandr_output_xidtp_getsetmodes_XRRCrtcInfo_XRRCrtcGammatp_compare_modesq_slicevendorinternalGNU C 4.3.3mydisplaynb_octmheightprivate17sq_inplace_concatuscreenlong long intnb_negativenhsyncnb_powerbufferinfonb_inplace_rshiftdotClockwritebufferproc_typeobjectnb_inplace_divideheight_mmtp_as_sequenceRotationsq_concatsetattrfuncoutputs_IO_write_baseconnectionvisualidPyCFunctionbitmap_unitmax_mapsdescription_IO_save_basevisitprocmwidthbacking_storetp_memberscallback_ddebugnb_remainderPyObjectdesc1desc2nb_rshiftPyMappingMethodsnb_dividedescrgetfuncpixmap_format_XrmHashBucketRectp_base__quad_tallocfunctdisppnb_inplace_ordispbits_per_pixelobjobjprocmp_length__pad1__pad2tp_docred_masktp_methodsnb_andtp_itemsizeobjobjargprocsetterproto_major_version_vtable_offsetrequestbyte_ordernb_true_dividex_orgtp_basicsizeargsgreennb_floor_dividebf_getreadbufferlong doublesprintfnull_error_handlertp_descr_gettimestampmp_subscriptConnectioniternextfuncRRModedisppathnb_longtp_flagsncrtcob_sizesq_lengthg_error_handler_triggered_IO_read_endDepthdefault_gcproto_minor_versionshort inttp_callget_a_displaytp_iterml_nametp_freeblue_maskob_refcnttp_version_tagRealDisplaySizeMM_methodscrtcgamtp_basestp_dict_XExtDataml_docclosurebluePyMethodDefminor_codetp_reproutinameLensq_containssq_ass_itemminvfreefunc__ssize_tndepthsPy_bufferrscreenreprfuncmp_ass_subscript_XPrivateprivate2private3private4private5nb_floatprivate8private9nb_intnb_invert_lockVisualIDrequest_codenb_xornb_hexPySequenceMethodsfree_privatenformatsget_real_screen_size_mmscanline_padScreensegcountprocXF86VidModeSyncRangemm_widthwhite_pixelPyMemberDef__destXPointerPyNumberMethodsunsigned charnb_inplace_lshifttp_is_gcnb_index_sbufmin_mapsnvisualscrtcs__srctraverseproc_IO_write_ptrtp_dictoffsetmodeFlags_XRROutputInfoprintfuncnb_inplace_andternaryfuncXRRModeFlagstp_strget_displaysml_flagsbitmap_padclonesnameLengthxdefaultserror_code_XRRScreenResourcesstdoutScreenFormatsuboffsetsgetattrofunc/media/DATA/User Files/Id/Softwareentwicklung/dispcalGUI/trunkclassrichcmpfuncgreen_masktp_as_number__off_thSkewtp_descr_setColormaptp_newnb_lshiftprivate6nb_absoluteshort unsigned intreleasedefault_screensq_inplace_repeatroot_input_maskob_typemajvTimenb_addtp_del_IO_read_ptrnb_inplace_true_dividenb_inplace_multiplyndispshSyncStartprivate10private11private12private13private14private15private16_chainprivate18private19tp_setattrmodelsq_repeatfree_disppaths_flags2initRealDisplaySizeMMnewfunc_cur_columnunaryfunc_nextbname__off64_t_unused2_IO_buf_basemm_heightgetiterfuncnb_divmodrotations t tu !t!#t#hupqtqstsupuWuttu u{QDu{mu{u|V u|Du|m~Vu|Pu|u|Vu|u|ju| u{Du{mu{u{PV u{V X PX u{ P  u{ ! P! u{PQ u{Du{mu{` w P_ru{ u|Du|mu|0>P>u|6YPP5QP u|~u|Du|mu| u|~u|Du|mu|u| u{QDu{mu{ u{Du{mu{t u{ u| u{K u{ Du{mu{_ru{ u|'Du|u| u|'Du|u|QQ{ Q u{Du{mu{u{ u{Du{mu{u{ u|Du|mu|u|l | P| P Ptt1u22SuSjj1u 9up9SWSmupmWup1W9VHJVSgVjV1V7`Rm|R@AtACtCu@ssu RPttuu PVVuwPW "+"<Hp8~'HF~#O&Dn >Vr _t/ >Vr _ ! t>Vr _  t>D ;  tzDJI A G zJP PV    D wsu=k9;%)   0"4".symtab.strtab.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges`o44% 0-:5oB B fBo PQ  `Z X X ( c 0^ `io""u24"4"X}##>.>.>.>.?/?/@0P @001p822v%YX[ a0pbv"s-{~;t#; D4B   X     " 4" #>>>>??@@  >%>3>@ V@e@s >#>! @0 a ; ?%@2>?! V! m >   )@CUg" m@}H !;L\j1 @ @w +<KAP_z@"  initfini.ccrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6635dtor_idx.6637frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxRealDisplaySizeMM.cRealDisplaySizeMM_methodsGetXRandROutputXIDRealDisplaySizeMM_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END____i686.get_pc_thunk.cx__stack_chk_fail_local__i686.get_pc_thunk.bx_DYNAMICXineramaQueryScreensXFreeXRRFreeScreenResourcesXRRFreeCrtcInfoXRRGetOutputInfonull_error_handler__gmon_start___Jv_RegisterClassesrealloc@@GLIBC_2.0g_error_handler_triggeredstrchr@@GLIBC_2.0getenv@@GLIBC_2.0_finicallback_ddebugcalloc@@GLIBC_2.0strncpy@@GLIBC_2.0XineramaQueryExtensioninitRealDisplaySizeMMXRRQueryExtensionXRRGetCrtcGammaXRRQueryVersionstrrchr@@GLIBC_2.0XOpenDisplay__strcat_chk@@GLIBC_2.3.4PyArg_ParseTuplefree@@GLIBC_2.0XCloseDisplayXF86VidModeQueryExtensionget_a_displayXRRGetScreenResourcesstrcpy@@GLIBC_2.0XRRFreeGammaPy_BuildValue__bss_startmalloc@@GLIBC_2.0get_displays__stack_chk_fail@@GLIBC_2.4free_disppathsXineramaIsActivePy_InitModule4_endXRRGetCrtcInfo__sprintf_chk@@GLIBC_2.3.4XSetErrorHandlerXF86VidModeGetMonitor_edata__cxa_finalize@@GLIBC_2.1.3__strdup@@GLIBC_2.0XRRFreeOutputInfo_initdispcalGUI-1.7.1.6/dispcalGUI/lib32/python25/__init__.py000644 000765 000000 00000000001 12031640062 022277 0ustar00svpwheel000000 000000 #dispcalGUI-1.7.1.6/dispcalGUI/lib32/python25/RealDisplaySizeMM.so000755 000765 000000 00000107504 12025152305 024053 0ustar00svpwheel000000 000000 ELF4}4 ($!##.>> .>>QtdRtd.>>c3' &.!0 #*",$/2% +)1 (- '@9`$'()*+-./012wxqXI%;w|)^j6|ۧCE칍爢Z@ + '9l }eIo".W1 " @lH @w AR@@ @  ? __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesnull_error_handlerg_error_handler_triggeredinitRealDisplaySizeMMPy_InitModule4free_disppathsfreeget_displaysgetenvstrncpystrrchrstrchrXOpenDisplayXSetErrorHandlerXineramaQueryExtensioncallocXCloseDisplay__strcat_chkXRRQueryExtensionXRRQueryVersionXineramaIsActiveXineramaQueryScreensXF86VidModeGetMonitor__sprintf_chk__strdupXF86VidModeQueryExtensionstrcpyXFreeXRRGetScreenResourcesXRRGetOutputInfoXRRGetCrtcGammaXRRFreeGammaXRRGetCrtcInforeallocXRRFreeCrtcInfoXRRFreeOutputInfoXRRFreeScreenResourcesget_a_displaymallocPyArg_ParseTuplePy_BuildValuecallback_ddebuglibXinerama.so.1libXrandr.so.2libXxf86vm.so.1libpthread.so.0libc.so.6__stack_chk_fail_edata__bss_start_endGLIBC_2.1.3GLIBC_2.4GLIBC_2.3.4GLIBC_2.0si ii ti $ii 0?@@@@@@@???-?$@@@ @@@@@ @ $@ (@ ,@ 0@4@8@<@@@D@H@L@P@T@X@\@`@d@h@l@p@t@x@ |@!@"@#@$@%@&US[h3tn4X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh UVS0u]t$)p9s A9rƃ[^]US.[0tt $҃[]Ë$Ð0U勁1]fUS/D$D$ D$D$@$^[]Ð&UWVS Evã/tTUt@։׃t&t$rPt $a$UűE$A [^_]É'UWVS)/leE1DžXDžTR$<U$D$cD$7ED$: $mt*D$.$xw@0@ $ADž!]${ $(TD$XD$$\Dž\$D$ \1\9D$$,uΉ$ $XDžMe3 l[^_]Í&[D$D$d$lvUE:0.0EP&TD$XD$$6uZLD$PD$ $$P5$<\D$ $t\Dž*4$Džt&ZD$dD$4$4v DDž t&(Dž,D$@ $D$t,t 8V t$D$ (D$dD$4$BD$ BD$B D$Bt$D$D$D$t$ `4$R4$ B9   9\ DžHDžDD$:$t@D$.$At,D$D$L$t$ $7$t@pp BAB ABABD$HD$$e T$L$ *t&ppp @@ AD AADAW(D$4$l $t&[t$6$X $z,Lv $\uDžDžDžD $D$DžH.IBusA9 AL$D$ $HfyuF떉D$$VtuB$$\IDž8BL$D$$D$ $:oDD$$,PPP ABAB A BABAB$A0B(Bt$(L$ D$dD$D$4$`BD$ BD$B D$B $D$t$T$ D$D$Ot&9D@$;A$u͋|$D$dD$ D$4$D$t$$ t6$AD$:4$Yt@D$.$t,D$D$T$L$ $0$? $'$B $9\D${Ft&4$z$$Dž'D$$U$/ $4$#4$$$ $ Dž4$v $4$4$$a$s&$"f4$M$DžfUWV1S! Et>Et(}t81&9Ut(0DžuE1$ [^_]Ë}v$,thBFBFB F BFBFBFBFB F B$F$B(F($Pt)@$=Ft-E${ [^_]ËF$4$<4$1E$D/ UVS ED$E t$$uEE${1҅tP(4$T$ [^] UWVSE빋 $ÐUS+UVS t&Ћu[^]US[Y[RealDisplaySizeMMDISPLAY.0ARGYLL_IGNORE_XRANDR1_2Screen %d, Output %s[ Clone of %d ].%dScreen %di(i,i)GetXRandROutputXID%s at %d, %d, width %d, height %dRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display. "o4 : ?(X  `o ooB o>   & 6 F V f v &6FVfv@4" "" 0#GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3$ ""x$# 0"xK#null_error_handlerinitRealDisplaySizeMMfree_disppaths_get_displays get_a_display&#callback_ddebug8#g_error_handler_triggeredt/build/buildd/glibc-2.9/build-tree/i386-libc/csu/crti.S/build/buildd/glibc-2.9/csuGNU AS 2.19.1G#{^! 0m h  intc8ao Z :16- Z# }# # A# # s # 9# # # #$ R#(  #, "#0 $#4 &Z#8 R*Z#< ,z#@ x0>#D Z 1L#F :2#G / 6#H ?#L H#T I#X DJ#\ K#` L%#d NZ#h P#l _  # B # Z#    ' n q    gG h# ] h4#2 h4 # ] 4# T # e # # % #  #   #   # (  #$ z K #( f V #,  9#0 Z ?#4  E#8  a #< #@ V #D O  #H  @ #L  "K#P E %#T  '#X  +#\  .#` # 2 #d j 5#h 9 #l  : #p  =#t  >#x O ?#|  @4# ) Af# B #  C # D#  E #  F#  G # Hy # 0 I# Jf#  Kf#  Lf#  Mf#  Nf# v O #G5 i PVfff:K w}fff ffff Zf fV Z%%%fg 6<fQfb \bf|fU ZffP Zff1 Zfff 9f"  OUjfjb {f Zff Zff Z f D o l#  l#  l# e l# ( l#  l#  #  E# q E#  E#$ + #( % E#,  l#0 J l#4  l#8 K l#< ] l#@  #D  E#H = E#L  E#P  E#T R E#X  l#\  l#`  l#d > l#h z l#l j Ē#p  l#t  l#x l#| l#  l# l# | l#  l#  l# 9 E#  ( \ # r l# 9 +#  +#  Q# |#  ݧ# { ޛ#  l# ; +#$Y O  "  #  l# #T  n # 5 9#  D#  p#  -    P   f  Z f Z  f fQ w| & Z@ ff   P l r  f  f ffZ P Po   p   f4ff $f94D  " n O  = &# ? '# (Z# ; *# Q  ? #get #set ?#doc # B # wO ,Q $*f?f? JPZjffXID GE5 QEj RE ej mj l1  Z# # k # # Z2 GC"(  G# u#  Z#  E#  E#  E# x Z#  Z# .  Z# Q Z# R # P!A G"# #G# m$# %Z# %Z# &Z# &Z# 'Z# (M# )Z#$ *#( +#, ,#0 -E#4 .E#8 /Z#< H /Z#@ 0Z#D (1Z#H M2#L7A 3 8 G9# :Z# ;Z# <Z# D=_S9Ak G# q#fdZ# Z# F Z# Z# # j# j# j#$ Z#( 4#, q  Z#0 !Z#4 "Z#8 #Z#< x $Z#@ |%#D &Z#H $'Z#L  (q#P (q#T 2)Z#X *E#\ i +E#` ,#d -#h .#l /#p )00#tdb1#x 2#| 5# ,6Z# 7Z# 8# 9E# :E# ;Z# <Z# =# ># ?Z# @# kjGwZG. `Z# # j# tE# 7# > 7# [ 7#-.chic#loc#  @ # 3# [c# 7# # V7# W#ju "@ #Z# $S# r%S# &S# 'S#  (i >+"> #>a'j(j- )j E8hidՂ# 0# 0# E# 0# G0# 0# 0# 0# 0#$ |0#( #, 0#0 #4)  # # N Z# Z # Z# # Z# Y#wlh*s 8 # O w# # s Z# E# E# a# CV# N Z# Z # Z#$ #( Z#, "Z#0 Y#4  _0D E#xFZ#yFZ# G0# G0# H# GIK# JZ# K# LK#$ MZ#( N#,`Ole W fZ#redg# h# J i# >mj,? @# A#sxBZ#syBZ# swCZ#shCZ# 4LZ# MZ# NZ# O Rw#$ Sl#(4 V*` aZ# PaZ# by< w` wPw%e `  !Z__s  9ZixZ xidZ!" Z#۵$ev:%Z8,&C$@XY'$Y([ i&Z) Y *Y+iZ+jZ kZ,[Z[,{Z,}- .evbZu|.erbZu|,eZ, ZY,,Z+xai '-> ~-D |/  pp0<1Y1N2 )3<@1Y1N/@-|+evbZc+erbZ pp0eB11w4e]11w4ex11w5e11w/,6,  jjZ60,n  &, b/h ppM4ew 11w4ex9 11w4eT 11w4e~o 11w5<01Y1N((, .  c@ 7 7 =!8ix7Z,L8Y++rv8x+i9Z9f q !:f' f.ixZut+xidZ!3J ^ 1(U ^ ;<4 d7"ixdZ!W e!f ppn!n!o!pZ=11w9^f !G":f' fs.ixZup!W 5!H1!6`;!>!u\;!<"<";"3e!;!11w " - "@??=@_Z@@f Z@LsT/tmp/ccxq91nO.s/build/buildd/glibc-2.9/csuGNU AS 2.19.1U%% : ; I$ > $ > $ >   I : ;  : ;I8 : ; : ; I8 I !I/ &I' II : ; ' : ;I : ;<  : ; I8 : ; I : ; : ;I8 .? : ; ' I : ; I: ; I.: ;' I : ;I 4: ;I!4: ;I".? : ; ' I@#: ; I $: ; I %.? : ;' @&.? : ;' @': ;I( ).? : ; I@*4: ; I+4: ;I,4: ;I-4: ;I .4: ;I / U01X Y1121X Y31X Y41UX Y51UX Y6 U7.? : ;' I@8: ;I9.: ;' I@:: ;I ;41<41= >41 ?4: ; I? < @4: ; I?  U%o /build/buildd/glibc-2.9/build-tree/i386-libc/csu../sysdeps/genericcrti.Sinitfini.c !/!=Z!gg//"!/!=Z! dispcalGUI/usr/include/bits/usr/lib/gcc/i486-linux-gnu/4.3.3/include/usr/include/usr/include/sys/usr/include/python2.5/usr/include/X11/usr/include/X11/extensionsRealDisplaySizeMM.cstring3.hstdio2.hstddef.htypes.hstdio.hlibio.htypes.hpyport.hobject.hmethodobject.hdescrobject.hX.hXlib.hxf86vmode.hXinerama.hrandr.hXrandr.h׼f!0~֑;MMgy {f <}XeK=wKQ&"^ *!\-d0?z(( [v,h{(zf[fzffz.zfJz,2z.HIf&b:=z<,בYב z*YY #"fmXeYK1E.(}.+i|ft|t6 tX2? tge=gt3 -? 9Y==h{f{-{ff{.H|-<{f{f- {<, ~֑-//~."/>N.H..~.\*辔H>T-YJ dm%B'Bs=-Y2b'h<jX@',>f==yX,-/3u> _uP& /tmpccxq91nO.s !!!0"-!!!| LB HAB A@wAB FAB C1AB BC aAB B ;AB C_XGCtp_clear_objectGetXRandROutputXIDmax_request_size_shortbuf__pad3binaryfunccoercion_IO_lock_tnb_inplace_powerdispcalGUI/RealDisplaySizeMM.cprivate1_IO_buf_endPyGetSetDefsetattrofunclast_request_readnoutputselftp_deallocnb_inplace_xormonitortp_as_mappingnb_inplace_subtractSubpixelOrder_IO_write_endext_datassizessizeobjargproctp_namerooty_orgbits_per_rgbtp_as_bufferbitmap_bit_order_XRRModeInfotp_initRRCrtc_old_offset_markerstp_traverselenfuncWindowresourceidnb_subtracttp_weaklistdisplay_namegetattrfuncnb_nonzero_IO_FILEml_methrotationdestructorEMPTYRROutputtp_weaklistoffsetvTotalVisualnmodesq_itemtp_getattr_postp_cachemyscreenmap_entriesnb_inplace_addsq_ass_slicedescrsetfuncroot_depthstrcat_IO_save_enddnbufwidth_mmnb_inplace_floor_dividebf_getwritebufferhSyncEnd__lennvsyncnb_orlong long unsigned intnb_inplace_remainderconfigTimestampblack_pixelnb_multiplystrncpyscrnresinitprocvendorhashfunctp_iternexttp_printvSyncEndPyBufferProcsXineramaScreenInfotp_allocsave_undersresource_allocsubpixel_order_IO_backup_basecharbufferprocnb_positivednameinquirynclonemotion_bufferscreen_number_filenoreadbufferprocmin_keycode__pad4tp_hash__pad5crtcinpossibleprivate_datatp_setattroXF86VidModeMonitortp_richcompareqlen_XDisplay_IO_read_basetp_getattrodefsixssizessizeargfuncserialdcountstdinmax_keycodegettertp_mroroot_visualnscreenstp_subclasses_IO_markervSyncStartnb_coerce__fmtbf_getcharbufferhTotalbf_getsegcountPy_ssize_tcmapnpreferredXErrorEventget_xrandr_output_xidtp_getsetmodes_XRRCrtcInfo_XRRCrtcGammatp_compare_modesq_sliceGNU C 4.3.3mydisplaynb_octmheightprivate17sq_inplace_concatuscreenlong long intnb_negativenhsyncnb_powernb_inplace_rshiftdotClockwritebufferproc_typeobjectnb_inplace_divideheight_mmtp_as_sequenceRotationsq_concatsetattrfuncoutputs_IO_write_baseconnectionvisualidPyCFunctionbitmap_unitmax_mapsdescription_IO_save_basevisitprocmwidthbacking_storetp_memberscallback_ddebugnb_remainderPyObjectdesc1desc2nb_rshiftPyMappingMethodsnb_dividedescrgetfuncpixmap_format_XrmHashBucketRectp_base__quad_tallocfunctdisppnb_inplace_ordispbits_per_pixelobjobjprocmp_length__pad1__pad2tp_docred_masktp_methodsnb_andtp_itemsizeobjobjargprocsetterproto_major_version_vtable_offsetrequestbyte_ordernb_true_dividex_orgtp_basicsizeargsgreennb_floor_dividebf_getreadbufferlong doublesprintfnull_error_handlertp_descr_gettimestampmp_subscriptConnectioniternextfuncRRModedisppathnb_longtp_flagsncrtcob_sizesq_lengthg_error_handler_triggered_IO_read_endDepthdefault_gcproto_minor_versionshort inttp_callget_a_displaytp_iterml_nametp_freeblue_maskob_refcntRealDisplaySizeMM_methodscrtcgamtp_basestp_dict_XExtDataml_docclosurebluePyMethodDefminor_codetp_reproutinameLensq_containssq_ass_itemminvfreefunc__ssize_tndepthsrscreenreprfuncmp_ass_subscript_XPrivateprivate2private3private4private5nb_floatprivate8private9nb_intnb_invert_lockVisualIDrequest_codenb_xornb_hexPySequenceMethodsfree_privatenformatsget_real_screen_size_mmscanline_padScreensegcountprocXF86VidModeSyncRangemm_widthwhite_pixelPyMemberDef__destXPointerPyNumberMethodsunsigned charnb_inplace_lshifttp_is_gcnb_index_sbufmin_mapsnvisualscrtcs__srctraverseproc_IO_write_ptrtp_dictoffsetmodeFlags_XRROutputInfoprintfuncnb_inplace_andternaryfuncXRRModeFlagstp_strget_displaysml_flagsbitmap_padclonesnameLengthxdefaultserror_code_XRRScreenResourcesstdoutScreenFormatgetattrofunc/media/DATA/User Files/Id/Softwareentwicklung/dispcalGUI/trunkclassrichcmpfuncgreen_masktp_as_number__off_thSkewtp_descr_setColormaptp_newnb_lshiftprivate6nb_absoluteshort unsigned intreleasedefault_screensq_inplace_repeatroot_input_maskob_typemajvTimenb_addtp_del_IO_read_ptrnb_inplace_true_dividenb_inplace_multiplyndispshSyncStartprivate10private11private12private13private14private15private16_chainprivate18private19tp_setattrmodelsq_repeatfree_disppaths_flags2initRealDisplaySizeMMnewfunc_cur_columnunaryfunc_nextbname__off64_t_unused2_IO_buf_basemm_heightgetiterfuncnb_divmodrotations t tu !t!#t#hupqtqstsupuWuttu u{QDu{mu{u|V u|Du|m~Vu|Pu|u|Vu|u|ju| u{Du{mu{u{PV u{V X PX u{ P  u{ ! P! u{PQ u{Du{mu{` w P_ru{ u|Du|mu|0>P>u|6YPP5QP u|~u|Du|mu| u|~u|Du|mu|u| u{QDu{mu{ u{Du{mu{t u{ u| u{K u{ Du{mu{_ru{ u|'Du|u| u|'Du|u|QQ{ Q u{Du{mu{u{ u{Du{mu{u{ u|Du|mu|u|l | P| P Ptt1u22SuSjj1u 9up9SWSmupmWup1W9VHJVSgVjV1V7`Rm|R@AtACtCu@ssu RPttuu PVVuwPW "+"<Hp8~'HF~#O&Dn >Vr _t/ >Vr _ ! t>Vr _  t>D ;  tzDJI A G zJP PV    D wsu=k9;%)   0"4".symtab.strtab.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges`o44% 0-:5oB B fBo PQ  `Z X X ( c 0^ `io""u24"4"X}##>.>.>.>.?/?/@0P @001p822$V{Z $`0 a"q-y|;#; T4B   X     " 4" #>>>>??@@  >%>3>@ V@e@s >#>! @0 a ; ?%@2>?! V! m >   )@CUg" m@}H !;L\j1 @ @w +<KAP_z@"  initfini.ccrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST____do_global_dtors_auxcompleted.6635dtor_idx.6637frame_dummy__CTOR_END____FRAME_END____JCR_END____do_global_ctors_auxRealDisplaySizeMM.cRealDisplaySizeMM_methodsGetXRandROutputXIDRealDisplaySizeMM_GLOBAL_OFFSET_TABLE___dso_handle__DTOR_END____i686.get_pc_thunk.cx__stack_chk_fail_local__i686.get_pc_thunk.bx_DYNAMICXineramaQueryScreensXFreeXRRFreeScreenResourcesXRRFreeCrtcInfoXRRGetOutputInfonull_error_handler__gmon_start___Jv_RegisterClassesrealloc@@GLIBC_2.0g_error_handler_triggeredstrchr@@GLIBC_2.0getenv@@GLIBC_2.0_finicallback_ddebugcalloc@@GLIBC_2.0strncpy@@GLIBC_2.0XineramaQueryExtensioninitRealDisplaySizeMMXRRQueryExtensionXRRGetCrtcGammaXRRQueryVersionstrrchr@@GLIBC_2.0XOpenDisplay__strcat_chk@@GLIBC_2.3.4PyArg_ParseTuplefree@@GLIBC_2.0XCloseDisplayXF86VidModeQueryExtensionget_a_displayXRRGetScreenResourcesstrcpy@@GLIBC_2.0XRRFreeGammaPy_BuildValue__bss_startmalloc@@GLIBC_2.0get_displays__stack_chk_fail@@GLIBC_2.4free_disppathsXineramaIsActivePy_InitModule4_endXRRGetCrtcInfo__sprintf_chk@@GLIBC_2.3.4XSetErrorHandlerXF86VidModeGetMonitor_edata__cxa_finalize@@GLIBC_2.1.3__strdup@@GLIBC_2.0XRRFreeOutputInfo_initdispcalGUI-1.7.1.6/dispcalGUI/lib/__init__.py000644 000765 000000 00000000001 12031640062 020442 0ustar00svpwheel000000 000000 #dispcalGUI-1.7.1.6/dispcalGUI/lib/agw/000755 000765 000000 00000000000 12266723170 017134 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/dispcalGUI/lib/RealDisplaySizeMM.so000755 000765 000000 00000103510 12025163047 022214 0ustar00svpwheel000000 000000 9 P7H __TEXT __text__TEXT __picsymbolstub1__TEXTP@P __cstring__TEXTk__DATA  __dyld__DATA  __la_symbol_ptr__DATA h __cfstring__DATA p p__data__DATA 8 __bss__DATA 8__LINKEDIT00 qvBSc1H5H8 P((-4x44p0" 0//usr/lib/libmx.A.dylib 4X /usr/lib/libSystem.B.dylib|B}|}cx=X}| x=N |B}h|=kk,}iN |||y!@lH`c/AH ~/A|xH }~xH q;~/@8!Px|H H`|/A;xK8!P|N `|8`B8!88H /@a8/ATc:H |uyAȀa8~x88H /A~x;H H88`8H q|~y@H8`8H YW:/|~.AA8;|.x@A/A8:@;98~=9L8W:}{x|.~~~HaAĐ.١ЀԐ @|^.١``ܐ D}>.١`` H|^.١``|u.H/A8HQ|tyAp<8 H|}yATH: |vy@@~ijx8`H~ijx|wx8`H/|xxA/@$~xHH/AHH`x~xx;@: ;`Hy|w.8H|yy&@,|w.828H/A!,&|x.8H||y@$|x.828Hq/A A8/A0#x8 Hi|}y@x}kx81}kxH͛};Z;{@D~xHxH~xH/@(<_:!L9" ԀB Ԡ iALTaPSpB bH9/A<_9B H <_9B <axGxhx8 x~%xH~#xH/}AhaH/}AP8;x@AH\```;H\8/A<;;Kd~xHx;K~xHH$x;K~xH```8!Px|N ``||}x;!KY|~y@ H,x;KH``B@ 9)U :|^./@K`8`H=||yAW:|^."bB <|\ "b<||^.bHI/|@,|Hx;HxKHl``|^.bH /|@x;Hq```xKH(/A/A$9 K`8!Px|N ``||#xB!<8 88Hi,@a8H `a8KM,@88HL`8aPHiPAT x|_xlptx|>^~h<_8bHM|lx<_8B~h^>|xtpl!|}N ||dxB8_!p8a98H=8a8|}xHq<_}]|~x9"(B( i|].<_x j;4xH,@|}xxHH8!|N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k||}N |B}h=k|h}N |B}h=k|L}N |B}h=k|D}N |B}h=k| }N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|0}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|D}N |B}h=k|}N |B}h=k|}N |B}h=k|}N |B}h=k|}N RealDisplaySizeMMRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXIDGetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display.DisplayProductNameen_US(unknown) (Primary Display)%s, at %d, %d, width %d, height %d%si(i,i)sprintf$LDBL128libSystem.hp @ @ @ @ @ @ @ $@ (@ ,@ 0@ 4@ 8@ <@ @@ D@ H@ L@ P@ T@ X@ \@ `@ d@ h@ l@ x@ @ @ @ @ @ @ @d"dAfPT&.$$N.$$N.0$0$pNp.$$N.p$p$`N`.$$0N0 & $ d.ATphz    0/Mcn2Qp p?P-./0123456789:;<=>@ABCDEFG9;:FD>=6<E50GC12.-/843@B7A __mh_bundle_headerdyld_stub_binding_helper__dyld_func_lookup_RealDisplaySizeMM_GetXRandROutputXID_sprintf$LDBLStub___stub_getrealaddrdyld__mach_header_RealDisplaySizeMM_methods_funcptr_callback_ddebug_free_disppaths_get_a_display_get_displays_initRealDisplaySizeMM_CFDictionaryGetCount_CFDictionaryGetKeysAndValues_CFDictionaryGetValue_CFRelease_CFStringGetCString_CFStringGetCStringPtr_CGDisplayBounds_CGDisplayIOServicePort_CGDisplayIsMain_CGDisplayScreenSize_CGGetActiveDisplayList_IODisplayCreateInfoDictionary_NSAddressOfSymbol_NSIsSymbolNameDefinedWithHint_NSLookupAndBindSymbolWithHint_PyArg_ParseTuple_Py_BuildValue_Py_InitModule4___CFConstantStringClassReference_calloc_free_malloc_strcmp_strcpy_strdup_strlen_strncpy/Users/Shared/dispcalGUI/trunk/dispcalGUI/RealDisplaySizeMM.c/Users/Shared/dispcalGUI/trunk/build/temp.macosx-10.3-fat-2.6/dispcalGUI/RealDisplaySizeMM.o_free_disppaths_get_displays_get_a_display_RealDisplaySizeMM_GetXRandROutputXID_initRealDisplaySizeMM_RealDisplaySizeMM_methods_callback_ddebugp__TEXT__text__TEXTs __cstring__TEXTt1t__unwind_info__TEXTH__DATA__dyld__DATA__cfstring__DATA__data__DATA  |__IMPORT  __jump_table__IMPORT n 8__LINKEDIT00H4mVxe@0@3 P%%*H3@30 4 X/usr/lib/libSystem.B.dylibX X UWV EEtc‹tM׉փt$Pt $$űUU ^_ ^_@U][uu}t$D$$OtDž88]u}ËEt$F(tɉD$Et$$E$@D$8E11u( $xD$$8…ҍ(GB;}rMtX1 Uvp>DžT 4( 0 $D$X8Eԋ\,E؋`E܋dE,EԉB,,E؋B ,E܉B,EB0$vD$$r<3G D$ $#$DžD@D$$/$$@D$$…44$4$D$T$DžHDžDH@9HH$D$$QL4D$$)PLP…qLt FO)ȅDPD$1D$$ED$$4 $<$gD0$b DЋ,T$DAD$AD$A D$AT$D$ $D$>,D0$-.,1$ F TT;ED$ D$2L$$tDLL D$ D$2T$$6 DPP<$ 8 $($3Dž8$t$$ 4t4 $<$8$( $WUE(unkEnownfE)D8$p($Dž8($jUWV }E1t T@9u$ Et[<BABAB A BABABA$UtJ@$UBt4$yE ^_É$4$_EE ^_ËB$hM $]4$0EUH]E[u}D$|D$E $1҅EUU$tH@$EЍ~U,u,}ԉt$|$$]u}fDfD~11|$t$$]u}DfDU(]E[D$E u$t$C1҉4$D$EUU-]uUS[$D$D$ D$D$;$$[RealDisplaySizeMMRealDisplaySizeMM(int displayNum = 0) Return the size (in mm) of a given display.GetXRandROutputXIDGetXRandROutputXID(int displayNum = 0) Return the XRandR output X11 ID of a given display.DisplayProductNameen_US (Primary Display)%s, at %d, %d, width %d, height %d%si(i,i)444 Kt   @DLPT\sddf&TP.0$0$N.$$@N@. -$ $ N . <$ $N. O$ $`N`.0c$0$CNCz&@ d.A T h z@0 04?Sj{!CKQYbj9 *+,-./012345@678:;<=>? __mh_bundle_headerdyld_stub_binding_helper__dyld_func_lookup_RealDisplaySizeMM_GetXRandROutputXIDdyld__mach_header_RealDisplaySizeMM_methods_callback_ddebug_free_disppaths_get_a_display_get_displays_initRealDisplaySizeMM_CFDictionaryGetCount_CFDictionaryGetKeysAndValues_CFDictionaryGetValue_CFRelease_CFStringGetCString_CFStringGetCStringPtr_CGDisplayBounds_CGDisplayIOServicePort_CGDisplayIsMain_CGDisplayScreenSize_CGGetActiveDisplayList_IODisplayCreateInfoDictionary_PyArg_ParseTuple_Py_BuildValue_Py_InitModule4___CFConstantStringClassReference_calloc_free_malloc_sprintf_strdup_strncpy/Users/Shared/dispcalGUI/trunk/dispcalGUI/RealDisplaySizeMM.c/Users/Shared/dispcalGUI/trunk/build/temp.macosx-10.3-fat-2.6/dispcalGUI/RealDisplaySizeMM.o_free_disppaths_get_displays_get_a_display_RealDisplaySizeMM_GetXRandROutputXID_initRealDisplaySizeMM_RealDisplaySizeMM_methods_callback_ddebugdispcalGUI-1.7.1.6/dispcalGUI/lib/agw/__init__.py000644 000765 000000 00000013663 12025152305 021243 0ustar00svpwheel000000 000000 """ This is the Advanced Generic Widgets package (AGW). It provides many custom-drawn wxPython controls: some of them can be used as a replacement of the platform native controls, others are simply an addition to the already rich wxPython widgets set. Description: AGW contains many different modules, listed below. Items labelled with an asterisk were already present in `wx.lib` before: - AdvancedSplash: reproduces the behaviour of `wx.SplashScreen`, with more advanced features like custom shapes and text animations; - AquaButton: this is another custom-drawn button class which *approximatively* mimics the behaviour of Aqua buttons on the Mac; - AUI: a pure-Python implementation of `wx.aui`, with many bug fixes and new features like HUD docking and L{AuiNotebook} tab arts; - BalloonTip: allows you to display tooltips in a balloon style window (actually a frame), similarly to the Windows XP balloon help; - ButtonPanel (*): a panel with gradient background shading with the possibility to add buttons and controls still respecting the gradient background; - CubeColourDialog: an alternative implementation of `wx.ColourDialog`, it offers different functionalities like colour wheel and RGB cube; - CustomTreeCtrl (*): mimics the behaviour of `wx.TreeCtrl`, with almost the same base functionalities plus a bunch of enhancements and goodies; - FlatMenu: as the name implies, it is a generic menu implementation, offering the same `wx.MenuBar`/`wx.Menu`/`wx.ToolBar` capabilities and much more; - FlatNotebook (*): a full implementation of the `wx.Notebook`, and designed to be a drop-in replacement for `wx.Notebook` with enhanced capabilities; - FloatSpin: this class implements a floating point spinctrl, cabable (in theory) of handling infinite-precision floating point numbers; - FoldPanelBar (*): a control that contains multiple panels that can be expanded or collapsed a la Windows Explorer/Outlook command bars; - FourWaySplitter: this is a layout manager which manages four children like four panes in a window, similar to many CAD software interfaces; - GenericMessageDialog: it is a possible replacement for the standard `wx.MessageDialog`, with a fancier look and extended functionalities; - GradientButton: another custom-drawn button class which mimics Windows CE mobile gradient buttons, using a tri-vertex blended gradient background; - HyperLinkCtrl (*): this widget acts line an hyper link in a typical browser; - HyperTreeList: a class that mimics the behaviour of `wx.gizmos.TreeListCtrl`, with almost the same base functionalities plus some more enhancements; - KnobCtrl: a widget which lets the user select a numerical value by rotating it, like a slider with a wheel shape; - LabelBook and FlatImageBook: these are a quasi-full implementations of `wx.ListBook`, with additional features; - MultiDirDialog: it represents a possible replacement for `wx.DirDialog`, with the additional ability of selecting multiple folders at once and a fancier look; - PeakMeter: this widget mimics the behaviour of LED equalizers that are usually found in stereos and MP3 players; - PersistentControls: widgets which automatically save their state when they are destroyed and restore it when they are recreated, even during another program invocation; - PieCtrl and ProgressPie: these are simple classes that reproduce the behavior of a pie chart, in a static or progress-gauge-like way; - PyBusyInfo: constructs a busy info window and displays a message in it: it is similar to `wx.BusyInfo`; - PyCollapsiblePane: a pure Python implementation of the original wxWidgets C++ code of `wx.CollapsiblePane`, with customizable buttons; - PyGauge: a generic `wx.Gauge` implementation, it supports the determinate mode functions as `wx.Gauge`; - PyProgress: it is similar to `wx.ProgressDialog` in indeterminated mode, but with a different gauge appearance and a different spinning behavior; - RibbonBar: the RibbonBar library is a set of classes for writing a ribbon user interface, similar to the user interface present in recent versions of Microsoft Office; - RulerCtrl: it implements a ruler window that can be placed on top, bottom, left or right to any wxPython widget. It is somewhat similar to the rulers you can find in text editors software; - ShapedButton: this class tries to fill the lack of "custom shaped" controls in wxPython. It can be used to build round buttons or elliptic buttons; - SpeedMeter: this widget tries to reproduce the behavior of some car controls (but not only), by creating an "angular" control; - SuperToolTip: a class that mimics the behaviour of `wx.TipWindow` and generic tooltips, with many features and highly customizable; - ThumbnailCtrl: a widget that can be used to display a series of images in a "thumbnail" format; it mimics, for example, the Windows Explorer behavior when you select the "view thumbnails" option; - ToasterBox: a cross-platform widget to make the creation of MSN-style "toaster" popups easier; - UltimateListCtrl: mimics the behaviour of `wx.ListCtrl`, with almost the same base functionalities plus some more enhancements; - ZoomBar: a class that *appoximatively* mimics the behaviour of the Mac Dock, inside a `wx.Panel`. Bugs and Limitations: many, patches and fixes welcome :-D See the demos for an example of what AGW can do, and on how to use it. Copyright: Andrea Gavana License: Same as the version of wxPython you are using it with. SVN for latest code: http://svn.wxwidgets.org/viewvc/wx/wxPython/3rdParty/AGW/ Mailing List: wxpython-users@lists.wxwidgets.org My personal web page: http://xoomer.alice.it/infinity77 Please let me know if you are using AGW! You can contact me at: andrea.gavana@gmail.com gavana@kpo.kz AGW version: 0.9.1 Last updated: 21 Jun 2011, 22.00 GMT """ __version__ = "0.9.1" __author__ = "Andrea Gavana " dispcalGUI-1.7.1.6/dispcalGUI/lib/agw/artmanager.py000644 000765 000000 00000212535 12025152305 021624 0ustar00svpwheel000000 000000 """ This module contains drawing routines and customizations for the AGW widgets L{LabelBook} and L{FlatMenu}. """ import wx import cStringIO import random from fmresources import * # ---------------------------------------------------------------------------- # # Class DCSaver # ---------------------------------------------------------------------------- # _ = wx.GetTranslation _libimported = None if wx.Platform == "__WXMSW__": osVersion = wx.GetOsVersion() # Shadows behind menus are supported only in XP if osVersion[1] == 5 and osVersion[2] == 1: try: import win32api import win32con import winxpgui _libimported = "MH" except: try: import ctypes _libimported = "ctypes" except: pass else: _libimported = None class DCSaver(object): """ Construct a DC saver. The dc is copied as-is. """ def __init__(self, pdc): """ Default class constructor. :param `pdc`: an instance of `wx.DC`. """ self._pdc = pdc self._pen = pdc.GetPen() self._brush = pdc.GetBrush() def __del__(self): """ While destructing, restores the dc pen and brush. """ if self._pdc: self._pdc.SetPen(self._pen) self._pdc.SetBrush(self._brush) # ---------------------------------------------------------------------------- # # Class RendererBase # ---------------------------------------------------------------------------- # class RendererBase(object): """ Base class for all theme renderers. """ def __init__(self): """ Default class constructor. Intentionally empty. """ pass def DrawButtonBorders(self, dc, rect, penColour, brushColour): """ Draws borders for buttons. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `penColour`: a valid `wx.Colour` for the pen border; :param `brushColour`: a valid `wx.Colour` for the brush. """ # Keep old pen and brush dcsaver = DCSaver(dc) dc.SetPen(wx.Pen(penColour)) dc.SetBrush(wx.Brush(brushColour)) dc.DrawRectangleRect(rect) def DrawBitmapArea(self, dc, xpm_name, rect, baseColour, flipSide): """ Draws the area below a bitmap and the bitmap itself using a gradient shading. :param `dc`: an instance of `wx.DC`; :param `xpm_name`: a name of a XPM bitmap; :param `rect`: the bitmap client rectangle; :param `baseColour`: a valid `wx.Colour` for the bitmap background; :param `flipSide`: ``True`` to flip the gradient direction, ``False`` otherwise. """ # draw the gradient area if not flipSide: ArtManager.Get().PaintDiagonalGradientBox(dc, rect, wx.WHITE, ArtManager.Get().LightColour(baseColour, 20), True, False) else: ArtManager.Get().PaintDiagonalGradientBox(dc, rect, ArtManager.Get().LightColour(baseColour, 20), wx.WHITE, True, False) # draw arrow arrowDown = wx.BitmapFromXPMData(xpm_name) arrowDown.SetMask(wx.Mask(arrowDown, wx.WHITE)) dc.DrawBitmap(arrowDown, rect.x + 1 , rect.y + 1, True) def DrawBitmapBorders(self, dc, rect, penColour, bitmapBorderUpperLeftPen): """ Draws borders for a bitmap. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `penColour`: a valid `wx.Colour` for the pen border; :param `bitmapBorderUpperLeftPen`: a valid `wx.Colour` for the pen upper left border. """ # Keep old pen and brush dcsaver = DCSaver(dc) # lower right size dc.SetPen(wx.Pen(penColour)) dc.DrawLine(rect.x, rect.y + rect.height - 1, rect.x + rect.width, rect.y + rect.height - 1) dc.DrawLine(rect.x + rect.width - 1, rect.y, rect.x + rect.width - 1, rect.y + rect.height) # upper left side dc.SetPen(wx.Pen(bitmapBorderUpperLeftPen)) dc.DrawLine(rect.x, rect.y, rect.x + rect.width, rect.y) dc.DrawLine(rect.x, rect.y, rect.x, rect.y + rect.height) def GetMenuFaceColour(self): """ Returns the foreground colour for the menu. """ return ArtManager.Get().LightColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE), 80) def GetTextColourEnable(self): """ Returns the colour used for text colour when enabled. """ return wx.BLACK def GetTextColourDisable(self): """ Returns the colour used for text colour when disabled. """ return ArtManager.Get().LightColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT), 30) def GetFont(self): """ Returns the font used for text. """ return wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) # ---------------------------------------------------------------------------- # # Class RendererXP # ---------------------------------------------------------------------------- # class RendererXP(RendererBase): """ Xp-Style renderer. """ def __init__(self): """ Default class constructor. """ RendererBase.__init__(self) def DrawButton(self, dc, rect, state, input=None): """ Draws a button using the XP theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `state`: the button state; :param `input`: a flag used to call the right method. """ if input is None or type(input) == type(False): self.DrawButtonTheme(dc, rect, state, input) else: self.DrawButtonColour(dc, rect, state, input) def DrawButtonTheme(self, dc, rect, state, useLightColours=None): """ Draws a button using the XP theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `state`: the button state; :param `useLightColours`: ``True`` to use light colours, ``False`` otherwise. """ # switch according to the status if state == ControlFocus: penColour = ArtManager.Get().FrameColour() brushColour = ArtManager.Get().BackgroundColour() elif state == ControlPressed: penColour = ArtManager.Get().FrameColour() brushColour = ArtManager.Get().HighlightBackgroundColour() else: penColour = ArtManager.Get().FrameColour() brushColour = ArtManager.Get().BackgroundColour() # Draw the button borders self.DrawButtonBorders(dc, rect, penColour, brushColour) def DrawButtonColour(self, dc, rect, state, colour): """ Draws a button using the XP theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `state`: the button state; :param `colour`: a valid `wx.Colour` instance. """ # switch according to the status if statet == ControlFocus: penColour = colour brushColour = ArtManager.Get().LightColour(colour, 75) elif state == ControlPressed: penColour = colour brushColour = ArtManager.Get().LightColour(colour, 60) else: penColour = colour brushColour = ArtManager.Get().LightColour(colour, 75) # Draw the button borders self.DrawButtonBorders(dc, rect, penColour, brushColour) def DrawMenuBarBg(self, dc, rect): """ Draws the menu bar background according to the active theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the menu bar's client rectangle. """ # For office style, we simple draw a rectangle with a gradient colouring artMgr = ArtManager.Get() vertical = artMgr.GetMBVerticalGradient() dcsaver = DCSaver(dc) # fill with gradient startColour = artMgr.GetMenuBarFaceColour() if artMgr.IsDark(startColour): startColour = artMgr.LightColour(startColour, 50) endColour = artMgr.LightColour(startColour, 90) artMgr.PaintStraightGradientBox(dc, rect, startColour, endColour, vertical) # Draw the border if artMgr.GetMenuBarBorder(): dc.SetPen(wx.Pen(startColour)) dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.DrawRectangleRect(rect) def DrawToolBarBg(self, dc, rect): """ Draws the toolbar background according to the active theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the toolbar's client rectangle. """ artMgr = ArtManager.Get() if not artMgr.GetRaiseToolbar(): return # For office style, we simple draw a rectangle with a gradient colouring vertical = artMgr.GetMBVerticalGradient() dcsaver = DCSaver(dc) # fill with gradient startColour = artMgr.GetMenuBarFaceColour() if artMgr.IsDark(startColour): startColour = artMgr.LightColour(startColour, 50) startColour = artMgr.LightColour(startColour, 20) endColour = artMgr.LightColour(startColour, 90) artMgr.PaintStraightGradientBox(dc, rect, startColour, endColour, vertical) artMgr.DrawBitmapShadow(dc, rect) def GetTextColourEnable(self): """ Returns the colour used for text colour when enabled. """ return wx.BLACK # ---------------------------------------------------------------------------- # # Class RendererMSOffice2007 # ---------------------------------------------------------------------------- # class RendererMSOffice2007(RendererBase): """ Windows MS Office 2007 style. """ def __init__(self): """ Default class constructor. """ RendererBase.__init__(self) def GetColoursAccordingToState(self, state): """ Returns a `wx.Colour` according to the menu item state. :param `state`: one of the following bits: ==================== ======= ========================== Item State Value Description ==================== ======= ========================== ``ControlPressed`` 0 The item is pressed ``ControlFocus`` 1 The item is focused ``ControlDisabled`` 2 The item is disabled ``ControlNormal`` 3 Normal state ==================== ======= ========================== """ # switch according to the status if state == ControlFocus: upperBoxTopPercent = 95 upperBoxBottomPercent = 50 lowerBoxTopPercent = 40 lowerBoxBottomPercent = 90 concaveUpperBox = True concaveLowerBox = True elif state == ControlPressed: upperBoxTopPercent = 75 upperBoxBottomPercent = 90 lowerBoxTopPercent = 90 lowerBoxBottomPercent = 40 concaveUpperBox = True concaveLowerBox = True elif state == ControlDisabled: upperBoxTopPercent = 100 upperBoxBottomPercent = 100 lowerBoxTopPercent = 70 lowerBoxBottomPercent = 70 concaveUpperBox = True concaveLowerBox = True else: upperBoxTopPercent = 90 upperBoxBottomPercent = 50 lowerBoxTopPercent = 30 lowerBoxBottomPercent = 75 concaveUpperBox = True concaveLowerBox = True return upperBoxTopPercent, upperBoxBottomPercent, lowerBoxTopPercent, lowerBoxBottomPercent, \ concaveUpperBox, concaveLowerBox def DrawButton(self, dc, rect, state, useLightColours): """ Draws a button using the MS Office 2007 theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `state`: the button state; :param `useLightColours`: ``True`` to use light colours, ``False`` otherwise. """ self.DrawButtonColour(dc, rect, state, ArtManager.Get().GetThemeBaseColour(useLightColours)) def DrawButtonColour(self, dc, rect, state, colour): """ Draws a button using the MS Office 2007 theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `state`: the button state; :param `colour`: a valid `wx.Colour` instance. """ artMgr = ArtManager.Get() # Keep old pen and brush dcsaver = DCSaver(dc) # Define the rounded rectangle base on the given rect # we need an array of 9 points for it baseColour = colour # Define the middle points leftPt = wx.Point(rect.x, rect.y + (rect.height / 2)) rightPt = wx.Point(rect.x + rect.width-1, rect.y + (rect.height / 2)) # Define the top region top = wx.RectPP((rect.GetLeft(), rect.GetTop()), rightPt) bottom = wx.RectPP(leftPt, (rect.GetRight(), rect.GetBottom())) upperBoxTopPercent, upperBoxBottomPercent, lowerBoxTopPercent, lowerBoxBottomPercent, \ concaveUpperBox, concaveLowerBox = self.GetColoursAccordingToState(state) topStartColour = artMgr.LightColour(baseColour, upperBoxTopPercent) topEndColour = artMgr.LightColour(baseColour, upperBoxBottomPercent) bottomStartColour = artMgr.LightColour(baseColour, lowerBoxTopPercent) bottomEndColour = artMgr.LightColour(baseColour, lowerBoxBottomPercent) artMgr.PaintStraightGradientBox(dc, top, topStartColour, topEndColour) artMgr.PaintStraightGradientBox(dc, bottom, bottomStartColour, bottomEndColour) rr = wx.Rect(rect.x, rect.y, rect.width, rect.height) dc.SetBrush(wx.TRANSPARENT_BRUSH) frameColour = artMgr.LightColour(baseColour, 60) dc.SetPen(wx.Pen(frameColour)) dc.DrawRectangleRect(rr) wc = artMgr.LightColour(baseColour, 80) dc.SetPen(wx.Pen(wc)) rr.Deflate(1, 1) dc.DrawRectangleRect(rr) def DrawMenuBarBg(self, dc, rect): """ Draws the menu bar background according to the active theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the menu bar's client rectangle. """ # Keep old pen and brush dcsaver = DCSaver(dc) artMgr = ArtManager.Get() baseColour = artMgr.GetMenuBarFaceColour() dc.SetBrush(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))) dc.SetPen(wx.Pen(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))) dc.DrawRectangleRect(rect) # Define the rounded rectangle base on the given rect # we need an array of 9 points for it regPts = [wx.Point() for ii in xrange(9)] radius = 2 regPts[0] = wx.Point(rect.x, rect.y + radius) regPts[1] = wx.Point(rect.x+radius, rect.y) regPts[2] = wx.Point(rect.x+rect.width-radius-1, rect.y) regPts[3] = wx.Point(rect.x+rect.width-1, rect.y + radius) regPts[4] = wx.Point(rect.x+rect.width-1, rect.y + rect.height - radius - 1) regPts[5] = wx.Point(rect.x+rect.width-radius-1, rect.y + rect.height-1) regPts[6] = wx.Point(rect.x+radius, rect.y + rect.height-1) regPts[7] = wx.Point(rect.x, rect.y + rect.height - radius - 1) regPts[8] = regPts[0] # Define the middle points factor = artMgr.GetMenuBgFactor() leftPt1 = wx.Point(rect.x, rect.y + (rect.height / factor)) leftPt2 = wx.Point(rect.x, rect.y + (rect.height / factor)*(factor-1)) rightPt1 = wx.Point(rect.x + rect.width, rect.y + (rect.height / factor)) rightPt2 = wx.Point(rect.x + rect.width, rect.y + (rect.height / factor)*(factor-1)) # Define the top region topReg = [wx.Point() for ii in xrange(7)] topReg[0] = regPts[0] topReg[1] = regPts[1] topReg[2] = wx.Point(regPts[2].x+1, regPts[2].y) topReg[3] = wx.Point(regPts[3].x + 1, regPts[3].y) topReg[4] = wx.Point(rightPt1.x, rightPt1.y+1) topReg[5] = wx.Point(leftPt1.x, leftPt1.y+1) topReg[6] = topReg[0] # Define the middle region middle = wx.RectPP(leftPt1, wx.Point(rightPt2.x - 2, rightPt2.y)) # Define the bottom region bottom = wx.RectPP(leftPt2, wx.Point(rect.GetRight() - 1, rect.GetBottom())) topStartColour = artMgr.LightColour(baseColour, 90) topEndColour = artMgr.LightColour(baseColour, 60) bottomStartColour = artMgr.LightColour(baseColour, 40) bottomEndColour = artMgr.LightColour(baseColour, 20) topRegion = wx.RegionFromPoints(topReg) artMgr.PaintGradientRegion(dc, topRegion, topStartColour, topEndColour) artMgr.PaintStraightGradientBox(dc, bottom, bottomStartColour, bottomEndColour) artMgr.PaintStraightGradientBox(dc, middle, topEndColour, bottomStartColour) def DrawToolBarBg(self, dc, rect): """ Draws the toolbar background according to the active theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the toolbar's client rectangle. """ artMgr = ArtManager.Get() if not artMgr.GetRaiseToolbar(): return # Keep old pen and brush dcsaver = DCSaver(dc) baseColour = artMgr.GetMenuBarFaceColour() baseColour = artMgr.LightColour(baseColour, 20) dc.SetBrush(wx.Brush(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))) dc.SetPen(wx.Pen(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))) dc.DrawRectangleRect(rect) radius = 2 # Define the rounded rectangle base on the given rect # we need an array of 9 points for it regPts = [None]*9 regPts[0] = wx.Point(rect.x, rect.y + radius) regPts[1] = wx.Point(rect.x+radius, rect.y) regPts[2] = wx.Point(rect.x+rect.width-radius-1, rect.y) regPts[3] = wx.Point(rect.x+rect.width-1, rect.y + radius) regPts[4] = wx.Point(rect.x+rect.width-1, rect.y + rect.height - radius - 1) regPts[5] = wx.Point(rect.x+rect.width-radius-1, rect.y + rect.height-1) regPts[6] = wx.Point(rect.x+radius, rect.y + rect.height-1) regPts[7] = wx.Point(rect.x, rect.y + rect.height - radius - 1) regPts[8] = regPts[0] # Define the middle points factor = artMgr.GetMenuBgFactor() leftPt1 = wx.Point(rect.x, rect.y + (rect.height / factor)) rightPt1 = wx.Point(rect.x + rect.width, rect.y + (rect.height / factor)) leftPt2 = wx.Point(rect.x, rect.y + (rect.height / factor)*(factor-1)) rightPt2 = wx.Point(rect.x + rect.width, rect.y + (rect.height / factor)*(factor-1)) # Define the top region topReg = [None]*7 topReg[0] = regPts[0] topReg[1] = regPts[1] topReg[2] = wx.Point(regPts[2].x+1, regPts[2].y) topReg[3] = wx.Point(regPts[3].x + 1, regPts[3].y) topReg[4] = wx.Point(rightPt1.x, rightPt1.y+1) topReg[5] = wx.Point(leftPt1.x, leftPt1.y+1) topReg[6] = topReg[0] # Define the middle region middle = wx.RectPP(leftPt1, wx.Point(rightPt2.x - 2, rightPt2.y)) # Define the bottom region bottom = wx.RectPP(leftPt2, wx.Point(rect.GetRight() - 1, rect.GetBottom())) topStartColour = artMgr.LightColour(baseColour, 90) topEndColour = artMgr.LightColour(baseColour, 60) bottomStartColour = artMgr.LightColour(baseColour, 40) bottomEndColour = artMgr.LightColour(baseColour, 20) topRegion = wx.RegionFromPoints(topReg) artMgr.PaintGradientRegion(dc, topRegion, topStartColour, topEndColour) artMgr.PaintStraightGradientBox(dc, bottom, bottomStartColour, bottomEndColour) artMgr.PaintStraightGradientBox(dc, middle, topEndColour, bottomStartColour) artMgr.DrawBitmapShadow(dc, rect) def GetTextColourEnable(self): """ Returns the colour used for text colour when enabled. """ return wx.NamedColour("MIDNIGHT BLUE") # ---------------------------------------------------------------------------- # # Class ArtManager # ---------------------------------------------------------------------------- # class ArtManager(wx.EvtHandler): """ This class provides various art utilities, such as creating shadow, providing lighter / darker colours for a given colour, etc... """ _alignmentBuffer = 7 _menuTheme = StyleXP _verticalGradient = False _renderers = {StyleXP: None, Style2007: None} _bmpShadowEnabled = False _ms2007sunken = False _drowMBBorder = True _menuBgFactor = 5 _menuBarColourScheme = _("Default") _raiseTB = True _bitmaps = {} _transparency = 255 def __init__(self): """ Default class constructor. """ wx.EvtHandler.__init__(self) self._menuBarBgColour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE) # connect an event handler to the system colour change event self.Bind(wx.EVT_SYS_COLOUR_CHANGED, self.OnSysColourChange) def SetTransparency(self, amount): """ Sets the alpha channel value for transparent windows. :param `amount`: the actual transparency value (between 0 and 255). """ if self._transparency == amount: return if amount < 0 or amount > 255: raise Exception("Invalid transparency value") self._transparency = amount def GetTransparency(self): """ Returns the alpha channel value for transparent windows. """ return self._transparency def ConvertToBitmap(self, xpm, alpha=None): """ Convert the given image to a bitmap, optionally overlaying an alpha channel to it. :param `xpm`: a list of strings formatted as XPM; :param `alpha`: a list of alpha values, the same size as the xpm bitmap. """ if alpha is not None: img = wx.BitmapFromXPMData(xpm) img = img.ConvertToImage() x, y = img.GetWidth(), img.GetHeight() img.InitAlpha() for jj in xrange(y): for ii in xrange(x): img.SetAlpha(ii, jj, alpha[jj*x+ii]) else: stream = cStringIO.StringIO(xpm) img = wx.ImageFromStream(stream) return wx.BitmapFromImage(img) def Initialize(self): """ Initializes the bitmaps and colours. """ # create wxBitmaps from the xpm's self._rightBottomCorner = self.ConvertToBitmap(shadow_center_xpm, shadow_center_alpha) self._bottom = self.ConvertToBitmap(shadow_bottom_xpm, shadow_bottom_alpha) self._bottomLeft = self.ConvertToBitmap(shadow_bottom_left_xpm, shadow_bottom_left_alpha) self._rightTop = self.ConvertToBitmap(shadow_right_top_xpm, shadow_right_top_alpha) self._right = self.ConvertToBitmap(shadow_right_xpm, shadow_right_alpha) # initialise the colour map self.InitColours() self.SetMenuBarColour(self._menuBarColourScheme) # Create common bitmaps self.FillStockBitmaps() def FillStockBitmaps(self): """ Initializes few standard bitmaps. """ bmp = self.ConvertToBitmap(arrow_down, alpha=None) bmp.SetMask(wx.Mask(bmp, wx.Colour(0, 128, 128))) self._bitmaps.update({"arrow_down": bmp}) bmp = self.ConvertToBitmap(arrow_up, alpha=None) bmp.SetMask(wx.Mask(bmp, wx.Colour(0, 128, 128))) self._bitmaps.update({"arrow_up": bmp}) def GetStockBitmap(self, name): """ Returns a bitmap from a stock. :param `name`: the bitmap name. :return: The stock bitmap, if `name` was found in the stock bitmap dictionary. Othewise, `wx.NullBitmap` is returned. """ if self._bitmaps.has_key(name): return self._bitmaps[name] return wx.NullBitmap def Get(self): """ Accessor to the unique art manager object. """ if not hasattr(self, "_instance"): self._instance = ArtManager() self._instance.Initialize() # Initialize the renderers map self._renderers[StyleXP] = RendererXP() self._renderers[Style2007] = RendererMSOffice2007() return self._instance Get = classmethod(Get) def Free(self): """ Destructor for the unique art manager object. """ if hasattr(self, "_instance"): del self._instance Free = classmethod(Free) def OnSysColourChange(self, event): """ Handles the ``wx.EVT_SYS_COLOUR_CHANGED`` event for L{ArtManager}. :param `event`: a `wx.SysColourChangedEvent` event to be processed. """ # reinitialise the colour map self.InitColours() def LightColour(self, colour, percent): """ Return light contrast of `colour`. The colour returned is from the scale of `colour` ==> white. :param `colour`: the input colour to be brightened; :param `percent`: determines how light the colour will be. `percent` = 100 returns white, `percent` = 0 returns `colour`. """ end_colour = wx.WHITE rd = end_colour.Red() - colour.Red() gd = end_colour.Green() - colour.Green() bd = end_colour.Blue() - colour.Blue() high = 100 # We take the percent way of the colour from colour -. white i = percent r = colour.Red() + ((i*rd*100)/high)/100 g = colour.Green() + ((i*gd*100)/high)/100 b = colour.Blue() + ((i*bd*100)/high)/100 return wx.Colour(r, g, b) def DarkColour(self, colour, percent): """ Like the L{LightColour} function, but create the colour darker by `percent`. :param `colour`: the input colour to be darkened; :param `percent`: determines how dark the colour will be. `percent` = 100 returns black, `percent` = 0 returns `colour`. """ end_colour = wx.BLACK rd = end_colour.Red() - colour.Red() gd = end_colour.Green() - colour.Green() bd = end_colour.Blue() - colour.Blue() high = 100 # We take the percent way of the colour from colour -. white i = percent r = colour.Red() + ((i*rd*100)/high)/100 g = colour.Green() + ((i*gd*100)/high)/100 b = colour.Blue() + ((i*bd*100)/high)/100 return wx.Colour(r, g, b) def PaintStraightGradientBox(self, dc, rect, startColour, endColour, vertical=True): """ Paint the rectangle with gradient colouring; the gradient lines are either horizontal or vertical. :param `dc`: an instance of `wx.DC`; :param `rect`: the rectangle to be filled with gradient shading; :param `startColour`: the first colour of the gradient shading; :param `endColour`: the second colour of the gradient shading; :param `vertical`: ``True`` for gradient colouring in the vertical direction, ``False`` for horizontal shading. """ dcsaver = DCSaver(dc) if vertical: high = rect.GetHeight()-1 direction = wx.SOUTH else: high = rect.GetWidth()-1 direction = wx.EAST if high < 1: return dc.GradientFillLinear(rect, startColour, endColour, direction) def PaintGradientRegion(self, dc, region, startColour, endColour, vertical=True): """ Paint a region with gradient colouring. :param `dc`: an instance of `wx.DC`; :param `region`: a region to be filled with gradient shading (an instance of `wx.Region`); :param `startColour`: the first colour of the gradient shading; :param `endColour`: the second colour of the gradient shading; :param `vertical`: ``True`` for gradient colouring in the vertical direction, ``False`` for horizontal shading. """ # The way to achieve non-rectangle memDC = wx.MemoryDC() rect = region.GetBox() bitmap = wx.EmptyBitmap(rect.width, rect.height) memDC.SelectObject(bitmap) # Colour the whole rectangle with gradient rr = wx.Rect(0, 0, rect.width, rect.height) self.PaintStraightGradientBox(memDC, rr, startColour, endColour, vertical) # Convert the region to a black and white bitmap with the white pixels being inside the region # we draw the bitmap over the gradient coloured rectangle, with mask set to white, # this will cause our region to be coloured with the gradient, while area outside the # region will be painted with black. then we simply draw the bitmap to the dc with mask set to # black tmpRegion = wx.Region(rect.x, rect.y, rect.width, rect.height) tmpRegion.Offset(-rect.x, -rect.y) regionBmp = tmpRegion.ConvertToBitmap() regionBmp.SetMask(wx.Mask(regionBmp, wx.WHITE)) # The function ConvertToBitmap() return a rectangle bitmap # which is shorter by 1 pixl on the height and width (this is correct behavior, since # DrawLine does not include the second point as part of the line) # we fix this issue by drawing our own line at the bottom and left side of the rectangle memDC.SetPen(wx.BLACK_PEN) memDC.DrawBitmap(regionBmp, 0, 0, True) memDC.DrawLine(0, rr.height - 1, rr.width, rr.height - 1) memDC.DrawLine(rr.width - 1, 0, rr.width - 1, rr.height) memDC.SelectObject(wx.NullBitmap) bitmap.SetMask(wx.Mask(bitmap, wx.BLACK)) dc.DrawBitmap(bitmap, rect.x, rect.y, True) def PaintDiagonalGradientBox(self, dc, rect, startColour, endColour, startAtUpperLeft=True, trimToSquare=True): """ Paint rectangle with gradient colouring; the gradient lines are diagonal and may start from the upper left corner or from the upper right corner. :param `dc`: an instance of `wx.DC`; :param `rect`: the rectangle to be filled with gradient shading; :param `startColour`: the first colour of the gradient shading; :param `endColour`: the second colour of the gradient shading; :param `startAtUpperLeft`: ``True`` to start the gradient lines at the upper left corner of the rectangle, ``False`` to start at the upper right corner; :param `trimToSquare`: ``True`` to trim the gradient lines in a square. """ # Save the current pen and brush savedPen = dc.GetPen() savedBrush = dc.GetBrush() # gradient fill from colour 1 to colour 2 with top to bottom if rect.height < 1 or rect.width < 1: return # calculate some basic numbers size = rect.width sizeX = sizeY = 0 proportion = 1 if rect.width > rect.height: if trimToSquare: size = rect.height sizeX = sizeY = rect.height - 1 else: proportion = float(rect.height)/float(rect.width) size = rect.width sizeX = rect.width - 1 sizeY = rect.height -1 else: if trimToSquare: size = rect.width sizeX = sizeY = rect.width - 1 else: sizeX = rect.width - 1 size = rect.height sizeY = rect.height - 1 proportion = float(rect.width)/float(rect.height) # calculate gradient coefficients col2 = endColour col1 = startColour rf, gf, bf = 0, 0, 0 rstep = float(col2.Red() - col1.Red())/float(size) gstep = float(col2.Green() - col1.Green())/float(size) bstep = float(col2.Blue() - col1.Blue())/float(size) # draw the upper triangle for i in xrange(size): currCol = wx.Colour(col1.Red() + rf, col1.Green() + gf, col1.Blue() + bf) dc.SetBrush(wx.Brush(currCol, wx.SOLID)) dc.SetPen(wx.Pen(currCol)) if startAtUpperLeft: if rect.width > rect.height: dc.DrawLine(rect.x + i, rect.y, rect.x, int(rect.y + proportion*i)) dc.DrawPoint(rect.x, int(rect.y + proportion*i)) else: dc.DrawLine(int(rect.x + proportion*i), rect.y, rect.x, rect.y + i) dc.DrawPoint(rect.x, rect.y + i) else: if rect.width > rect.height: dc.DrawLine(rect.x + sizeX - i, rect.y, rect.x + sizeX, int(rect.y + proportion*i)) dc.DrawPoint(rect.x + sizeX, int(rect.y + proportion*i)) else: xTo = (int(rect.x + sizeX - proportion * i) > rect.x and [int(rect.x + sizeX - proportion*i)] or [rect.x])[0] dc.DrawLine(xTo, rect.y, rect.x + sizeX, rect.y + i) dc.DrawPoint(rect.x + sizeX, rect.y + i) rf += rstep/2 gf += gstep/2 bf += bstep/2 # draw the lower triangle for i in xrange(size): currCol = wx.Colour(col1.Red() + rf, col1.Green() + gf, col1.Blue() + bf) dc.SetBrush(wx.Brush(currCol, wx.SOLID)) dc.SetPen(wx.Pen(currCol)) if startAtUpperLeft: if rect.width > rect.height: dc.DrawLine(rect.x + i, rect.y + sizeY, rect.x + sizeX, int(rect.y + proportion * i)) dc.DrawPoint(rect.x + sizeX, int(rect.y + proportion * i)) else: dc.DrawLine(int(rect.x + proportion * i), rect.y + sizeY, rect.x + sizeX, rect.y + i) dc.DrawPoint(rect.x + sizeX, rect.y + i) else: if rect.width > rect.height: dc.DrawLine(rect.x, (int)(rect.y + proportion * i), rect.x + sizeX - i, rect.y + sizeY) dc.DrawPoint(rect.x + sizeX - i, rect.y + sizeY) else: xTo = (int(rect.x + sizeX - proportion*i) > rect.x and [int(rect.x + sizeX - proportion*i)] or [rect.x])[0] dc.DrawLine(rect.x, rect.y + i, xTo, rect.y + sizeY) dc.DrawPoint(xTo, rect.y + sizeY) rf += rstep/2 gf += gstep/2 bf += bstep/2 # Restore the pen and brush dc.SetPen( savedPen ) dc.SetBrush( savedBrush ) def PaintCrescentGradientBox(self, dc, rect, startColour, endColour, concave=True): """ Paint a region with gradient colouring. The gradient is in crescent shape which fits the 2007 style. :param `dc`: an instance of `wx.DC`; :param `rect`: the rectangle to be filled with gradient shading; :param `startColour`: the first colour of the gradient shading; :param `endColour`: the second colour of the gradient shading; :param `concave`: ``True`` for a concave effect, ``False`` for a convex one. """ diagonalRectWidth = rect.GetWidth()/4 spare = rect.width - 4*diagonalRectWidth leftRect = wx.Rect(rect.x, rect.y, diagonalRectWidth, rect.GetHeight()) rightRect = wx.Rect(rect.x + 3 * diagonalRectWidth + spare, rect.y, diagonalRectWidth, rect.GetHeight()) if concave: self.PaintStraightGradientBox(dc, rect, self.MixColours(startColour, endColour, 50), endColour) self.PaintDiagonalGradientBox(dc, leftRect, startColour, endColour, True, False) self.PaintDiagonalGradientBox(dc, rightRect, startColour, endColour, False, False) else: self.PaintStraightGradientBox(dc, rect, endColour, self.MixColours(endColour, startColour, 50)) self.PaintDiagonalGradientBox(dc, leftRect, endColour, startColour, False, False) self.PaintDiagonalGradientBox(dc, rightRect, endColour, startColour, True, False) def FrameColour(self): """ Return the surrounding colour for a control. """ return wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION) def BackgroundColour(self): """ Returns the background colour of a control when not in focus. """ return self.LightColour(self.FrameColour(), 75) def HighlightBackgroundColour(self): """ Returns the background colour of a control when it is in focus. """ return self.LightColour(self.FrameColour(), 60) def MixColours(self, firstColour, secondColour, percent): """ Return mix of input colours. :param `firstColour`: the first colour to be mixed, an instance of `wx.Colour`; :param `secondColour`: the second colour to be mixed, an instance of `wx.Colour`; :param `percent`: the relative percentage of `firstColour` with respect to `secondColour`. """ # calculate gradient coefficients redOffset = float((secondColour.Red() * (100 - percent) / 100) - (firstColour.Red() * percent / 100)) greenOffset = float((secondColour.Green() * (100 - percent) / 100) - (firstColour.Green() * percent / 100)) blueOffset = float((secondColour.Blue() * (100 - percent) / 100) - (firstColour.Blue() * percent / 100)) return wx.Colour(firstColour.Red() + redOffset, firstColour.Green() + greenOffset, firstColour.Blue() + blueOffset) def RandomColour(): """ Creates a random colour. """ r = random.randint(0, 255) # Random value betweem 0-255 g = random.randint(0, 255) # Random value betweem 0-255 b = random.randint(0, 255) # Random value betweem 0-255 return wx.Colour(r, g, b) def IsDark(self, colour): """ Returns whether a colour is dark or light. :param `colour`: an instance of `wx.Colour`. """ evg = (colour.Red() + colour.Green() + colour.Blue())/3 if evg < 127: return True return False def TruncateText(self, dc, text, maxWidth): """ Truncates a given string to fit given width size. if the text does not fit into the given width it is truncated to fit. the format of the fixed text is . :param `dc`: an instance of `wx.DC`; :param `text`: the text to be (eventually) truncated; :param `maxWidth`: the maximum width allowed for the text. """ textLen = len(text) tempText = text rectSize = maxWidth fixedText = "" textW, textH = dc.GetTextExtent(text) if rectSize >= textW: return text # The text does not fit in the designated area, # so we need to truncate it a bit suffix = ".." w, h = dc.GetTextExtent(suffix) rectSize -= w for i in xrange(textLen, -1, -1): textW, textH = dc.GetTextExtent(tempText) if rectSize >= textW: fixedText = tempText fixedText += ".." return fixedText tempText = tempText[:-1] def DrawButton(self, dc, rect, theme, state, input=None): """ Colour rectangle according to the theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the rectangle to be filled with gradient shading; :param `theme`: the theme to use to draw the button; :param `state`: the button state; :param `input`: a flag used to call the right method. """ if input is None or type(input) == type(False): self.DrawButtonTheme(dc, rect, theme, state, input) else: self.DrawButtonColour(dc, rect, theme, state, input) def DrawButtonTheme(self, dc, rect, theme, state, useLightColours=True): """ Draws a button using the appropriate theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `theme`: the theme to use to draw the button; :param `state`: the button state; :param `useLightColours`: ``True`` to use light colours, ``False`` otherwise. """ renderer = self._renderers[theme] # Set background colour if non given by caller renderer.DrawButton(dc, rect, state, useLightColours) def DrawButtonColour(self, dc, rect, theme, state, colour): """ Draws a button using the appropriate theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the button's client rectangle; :param `theme`: the theme to use to draw the button; :param `state`: the button state; :param `colour`: a valid `wx.Colour` instance. """ renderer = self._renderers[theme] renderer.DrawButton(dc, rect, state, colour) def CanMakeWindowsTransparent(self): """ Used internally. :return: ``True`` if the system supports transparency of toplevel windows, otherwise returns ``False``. """ if wx.Platform == "__WXMSW__": version = wx.GetOsDescription() found = version.find("XP") >= 0 or version.find("2000") >= 0 or version.find("NT") >= 0 return found elif wx.Platform == "__WXMAC__": return True else: return False # on supported windows systems (Win2000 and greater), this function # will make a frame window transparent by a certain amount def MakeWindowTransparent(self, wnd, amount): """ Used internally. Makes a toplevel window transparent if the system supports it. :param `wnd`: the toplevel window to make transparent; :param `amount`: the window transparency to apply. """ if wnd.GetSize() == (0, 0): return # this API call is not in all SDKs, only the newer ones, so # we will runtime bind this if wx.Platform == "__WXMSW__": hwnd = wnd.GetHandle() if not hasattr(self, "_winlib"): if _libimported == "MH": self._winlib = win32api.LoadLibrary("user32") elif _libimported == "ctypes": self._winlib = ctypes.windll.user32 if _libimported == "MH": pSetLayeredWindowAttributes = win32api.GetProcAddress(self._winlib, "SetLayeredWindowAttributes") if pSetLayeredWindowAttributes == None: return exstyle = win32api.GetWindowLong(hwnd, win32con.GWL_EXSTYLE) if 0 == (exstyle & 0x80000): win32api.SetWindowLong(hwnd, win32con.GWL_EXSTYLE, exstyle | 0x80000) winxpgui.SetLayeredWindowAttributes(hwnd, 0, amount, 2) elif _libimported == "ctypes": style = self._winlib.GetWindowLongA(hwnd, 0xffffffecL) style |= 0x00080000 self._winlib.SetWindowLongA(hwnd, 0xffffffecL, style) self._winlib.SetLayeredWindowAttributes(hwnd, 0, amount, 2) else: if not wnd.CanSetTransparent(): return wnd.SetTransparent(amount) return # assumption: the background was already drawn on the dc def DrawBitmapShadow(self, dc, rect, where=BottomShadow|RightShadow): """ Draws a shadow using background bitmap. :param `dc`: an instance of `wx.DC`; :param `rect`: the bitmap's client rectangle; :param `where`: where to draw the shadow. This can be any combination of the following bits: ========================== ======= ================================ Shadow Settings Value Description ========================== ======= ================================ ``RightShadow`` 1 Right side shadow ``BottomShadow`` 2 Not full bottom shadow ``BottomShadowFull`` 4 Full bottom shadow ========================== ======= ================================ """ shadowSize = 5 # the rect must be at least 5x5 pixles if rect.height < 2*shadowSize or rect.width < 2*shadowSize: return # Start by drawing the right bottom corner if where & BottomShadow or where & BottomShadowFull: dc.DrawBitmap(self._rightBottomCorner, rect.x+rect.width, rect.y+rect.height, True) # Draw right side shadow xx = rect.x + rect.width yy = rect.y + rect.height - shadowSize if where & RightShadow: while yy - rect.y > 2*shadowSize: dc.DrawBitmap(self._right, xx, yy, True) yy -= shadowSize dc.DrawBitmap(self._rightTop, xx, yy - shadowSize, True) if where & BottomShadow: xx = rect.x + rect.width - shadowSize yy = rect.height + rect.y while xx - rect.x > 2*shadowSize: dc.DrawBitmap(self._bottom, xx, yy, True) xx -= shadowSize dc.DrawBitmap(self._bottomLeft, xx - shadowSize, yy, True) if where & BottomShadowFull: xx = rect.x + rect.width - shadowSize yy = rect.height + rect.y while xx - rect.x >= 0: dc.DrawBitmap(self._bottom, xx, yy, True) xx -= shadowSize dc.DrawBitmap(self._bottom, xx, yy, True) def DropShadow(self, wnd, drop=True): """ Adds a shadow under the window (Windows Only). :param `wnd`: the window for which we are dropping a shadow; :param `drop`: ``True`` to drop a shadow, ``False`` to remove it. """ if not self.CanMakeWindowsTransparent() or not _libimported: return if "__WXMSW__" in wx.Platform: hwnd = wnd.GetHandle() if not hasattr(self, "_winlib"): if _libimported == "MH": self._winlib = win32api.LoadLibrary("user32") elif _libimported == "ctypes": self._winlib = ctypes.windll.user32 if _libimported == "MH": csstyle = win32api.GetWindowLong(hwnd, win32con.GCL_STYLE) else: csstyle = self._winlib.GetWindowLongA(hwnd, win32con.GCL_STYLE) if drop: if csstyle & CS_DROPSHADOW: return else: csstyle |= CS_DROPSHADOW #Nothing to be done else: if csstyle & CS_DROPSHADOW: csstyle &= ~(CS_DROPSHADOW) else: return #Nothing to be done win32api.SetWindowLong(hwnd, win32con.GCL_STYLE, csstyle) def GetBitmapStartLocation(self, dc, rect, bitmap, text="", style=0): """ Returns the top left `x` and `y` cordinates of the bitmap drawing. :param `dc`: an instance of `wx.DC`; :param `rect`: the bitmap's client rectangle; :param `bitmap`: the bitmap associated with the button; :param `text`: the button label; :param `style`: the button style. This can be one of the following bits: ============================== ======= ================================ Button style Value Description ============================== ======= ================================ ``BU_EXT_XP_STYLE`` 1 A button with a XP style ``BU_EXT_2007_STYLE`` 2 A button with a MS Office 2007 style ``BU_EXT_LEFT_ALIGN_STYLE`` 4 A left-aligned button ``BU_EXT_CENTER_ALIGN_STYLE`` 8 A center-aligned button ``BU_EXT_RIGHT_ALIGN_STYLE`` 16 A right-aligned button ``BU_EXT_RIGHT_TO_LEFT_STYLE`` 32 A button suitable for right-to-left languages ============================== ======= ================================ """ alignmentBuffer = self.GetAlignBuffer() # get the startLocationY fixedTextWidth = fixedTextHeight = 0 if not text: fixedTextHeight = bitmap.GetHeight() else: fixedTextWidth, fixedTextHeight = dc.GetTextExtent(text) startLocationY = rect.y + (rect.height - fixedTextHeight)/2 # get the startLocationX if style & BU_EXT_RIGHT_TO_LEFT_STYLE: startLocationX = rect.x + rect.width - alignmentBuffer - bitmap.GetWidth() else: if style & BU_EXT_RIGHT_ALIGN_STYLE: maxWidth = rect.x + rect.width - (2 * alignmentBuffer) - bitmap.GetWidth() # the alignment is for both sides # get the truncaed text. The text may stay as is, it is not a must that is will be trancated fixedText = self.TruncateText(dc, text, maxWidth) # get the fixed text dimentions fixedTextWidth, fixedTextHeight = dc.GetTextExtent(fixedText) # calculate the start location startLocationX = maxWidth - fixedTextWidth elif style & BU_EXT_LEFT_ALIGN_STYLE: # calculate the start location startLocationX = alignmentBuffer else: # meaning BU_EXT_CENTER_ALIGN_STYLE maxWidth = rect.x + rect.width - (2 * alignmentBuffer) - bitmap.GetWidth() # the alignment is for both sides # get the truncaed text. The text may stay as is, it is not a must that is will be trancated fixedText = self.TruncateText(dc, text, maxWidth) # get the fixed text dimentions fixedTextWidth, fixedTextHeight = dc.GetTextExtent(fixedText) if maxWidth > fixedTextWidth: # calculate the start location startLocationX = (maxWidth - fixedTextWidth) / 2 else: # calculate the start location startLocationX = maxWidth - fixedTextWidth # it is very important to validate that the start location is not less than the alignment buffer if startLocationX < alignmentBuffer: startLocationX = alignmentBuffer return startLocationX, startLocationY def GetTextStartLocation(self, dc, rect, bitmap, text, style=0): """ Returns the top left `x` and `y` cordinates of the text drawing. In case the text is too long, the text is being fixed (the text is cut and a '...' mark is added in the end). :param `dc`: an instance of `wx.DC`; :param `rect`: the text's client rectangle; :param `bitmap`: the bitmap associated with the button; :param `text`: the button label; :param `style`: the button style. :see: L{GetBitmapStartLocation} for a list of valid button styles. """ alignmentBuffer = self.GetAlignBuffer() # get the bitmap offset bitmapOffset = 0 if bitmap != wx.NullBitmap: bitmapOffset = bitmap.GetWidth() # get the truncated text. The text may stay as is, it is not a must that is will be trancated maxWidth = rect.x + rect.width - (2 * alignmentBuffer) - bitmapOffset # the alignment is for both sides fixedText = self.TruncateText(dc, text, maxWidth) # get the fixed text dimentions fixedTextWidth, fixedTextHeight = dc.GetTextExtent(fixedText) startLocationY = (rect.height - fixedTextHeight) / 2 + rect.y # get the startLocationX if style & BU_EXT_RIGHT_TO_LEFT_STYLE: startLocationX = maxWidth - fixedTextWidth + alignmentBuffer else: if style & BU_EXT_LEFT_ALIGN_STYLE: # calculate the start location startLocationX = bitmapOffset + alignmentBuffer elif style & BU_EXT_RIGHT_ALIGN_STYLE: # calculate the start location startLocationX = maxWidth - fixedTextWidth + bitmapOffset + alignmentBuffer else: # meaning wxBU_EXT_CENTER_ALIGN_STYLE # calculate the start location startLocationX = (maxWidth - fixedTextWidth) / 2 + bitmapOffset + alignmentBuffer # it is very important to validate that the start location is not less than the alignment buffer if startLocationX < alignmentBuffer: startLocationX = alignmentBuffer return startLocationX, startLocationY, fixedText def DrawTextAndBitmap(self, dc, rect, text, enable=True, font=wx.NullFont, fontColour=wx.BLACK, bitmap=wx.NullBitmap, grayBitmap=wx.NullBitmap, style=0): """ Draws the text & bitmap on the input dc. :param `dc`: an instance of `wx.DC`; :param `rect`: the text and bitmap client rectangle; :param `text`: the button label; :param `enable`: ``True`` if the button is enabled, ``False`` otherwise; :param `font`: the font to use to draw the text, an instance of `wx.Font`; :param `fontColour`: the colour to use to draw the text, an instance of `wx.Colour`; :param `bitmap`: the bitmap associated with the button; :param `grayBitmap`: a greyed-out version of the input `bitmap` representing a disabled bitmap; :param `style`: the button style. :see: L{GetBitmapStartLocation} for a list of valid button styles. """ # enable colours if enable: dc.SetTextForeground(fontColour) else: dc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT)) # set the font if font == wx.NullFont: font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) dc.SetFont(font) startLocationX = startLocationY = 0 if bitmap != wx.NullBitmap: # calculate the bitmap start location startLocationX, startLocationY = self.GetBitmapStartLocation(dc, rect, bitmap, text, style) # draw the bitmap if enable: dc.DrawBitmap(bitmap, startLocationX, startLocationY, True) else: dc.DrawBitmap(grayBitmap, startLocationX, startLocationY, True) # calculate the text start location location, labelOnly = self.GetAccelIndex(text) startLocationX, startLocationY, fixedText = self.GetTextStartLocation(dc, rect, bitmap, labelOnly, style) # after all the caculations are finished, it is time to draw the text # underline the first letter that is marked with a '&' if location == -1 or font.GetUnderlined() or location >= len(fixedText): # draw the text dc.DrawText(fixedText, startLocationX, startLocationY) else: # underline the first '&' before = fixedText[0:location] underlineLetter = fixedText[location] after = fixedText[location+1:] # before dc.DrawText(before, startLocationX, startLocationY) # underlineLetter if "__WXGTK__" not in wx.Platform: w1, h = dc.GetTextExtent(before) font.SetUnderlined(True) dc.SetFont(font) dc.DrawText(underlineLetter, startLocationX + w1, startLocationY) else: w1, h = dc.GetTextExtent(before) dc.DrawText(underlineLetter, startLocationX + w1, startLocationY) # Draw the underline ourselves since using the Underline in GTK, # causes the line to be too close to the letter uderlineLetterW, uderlineLetterH = dc.GetTextExtent(underlineLetter) curPen = dc.GetPen() dc.SetPen(wx.BLACK_PEN) dc.DrawLine(startLocationX + w1, startLocationY + uderlineLetterH - 2, startLocationX + w1 + uderlineLetterW, startLocationY + uderlineLetterH - 2) dc.SetPen(curPen) # after w2, h = dc.GetTextExtent(underlineLetter) font.SetUnderlined(False) dc.SetFont(font) dc.DrawText(after, startLocationX + w1 + w2, startLocationY) def CalcButtonBestSize(self, label, bmp): """ Returns the best fit size for the supplied label & bitmap. :param `label`: the button label; :param `bmp`: the bitmap associated with the button. """ if "__WXMSW__" in wx.Platform: HEIGHT = 22 else: HEIGHT = 26 dc = wx.MemoryDC() dc.SelectBitmap(wx.EmptyBitmap(1, 1)) dc.SetFont(wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT)) width, height, dummy = dc.GetMultiLineTextExtent(label) width += 2*self.GetAlignBuffer() if bmp.Ok(): # allocate extra space for the bitmap heightBmp = bmp.GetHeight() + 2 if height < heightBmp: height = heightBmp width += bmp.GetWidth() + 2 if height < HEIGHT: height = HEIGHT dc.SelectBitmap(wx.NullBitmap) return wx.Size(width, height) def GetMenuFaceColour(self): """ Returns the colour used for the menu foreground. """ renderer = self._renderers[self.GetMenuTheme()] return renderer.GetMenuFaceColour() def GetTextColourEnable(self): """ Returns the colour used for enabled menu items. """ renderer = self._renderers[self.GetMenuTheme()] return renderer.GetTextColourEnable() def GetTextColourDisable(self): """ Returns the colour used for disabled menu items. """ renderer = self._renderers[self.GetMenuTheme()] return renderer.GetTextColourDisable() def GetFont(self): """ Returns the font used by this theme. """ renderer = self._renderers[self.GetMenuTheme()] return renderer.GetFont() def GetAccelIndex(self, label): """ Returns the mnemonic index of the label and the label stripped of the ampersand mnemonic (e.g. 'lab&el' ==> will result in 3 and labelOnly = label). :param `label`: a string containining an ampersand. """ indexAccel = 0 while True: indexAccel = label.find("&", indexAccel) if indexAccel == -1: return indexAccel, label if label[indexAccel:indexAccel+2] == "&&": label = label[0:indexAccel] + label[indexAccel+1:] indexAccel += 1 else: break labelOnly = label[0:indexAccel] + label[indexAccel+1:] return indexAccel, labelOnly def GetThemeBaseColour(self, useLightColours=True): """ Returns the theme (Blue, Silver, Green etc.) base colour, if no theme is active it return the active caption colour, lighter in 30%. :param `useLightColours`: ``True`` to use light colours, ``False`` otherwise. """ if not useLightColours and not self.IsDark(self.FrameColour()): return wx.NamedColour("GOLD") else: return self.LightColour(self.FrameColour(), 30) def GetAlignBuffer(self): """ Return the padding buffer for a text or bitmap. """ return self._alignmentBuffer def SetMenuTheme(self, theme): """ Set the menu theme, possible values (Style2007, StyleXP, StyleVista). :param `theme`: a rendering theme class, either `StyleXP`, `Style2007` or `StyleVista`. """ self._menuTheme = theme def GetMenuTheme(self): """ Returns the currently used menu theme. """ return self._menuTheme def AddMenuTheme(self, render): """ Adds a new theme to the stock. :param `render`: a rendering theme class, which must be derived from L{RendererBase}. """ # Add new theme lastRenderer = len(self._renderers) self._renderers[lastRenderer] = render return lastRenderer def SetMS2007ButtonSunken(self, sunken): """ Sets MS 2007 button style sunken or not. :param `sunken`: ``True`` to have a sunken border effect, ``False`` otherwise. """ self._ms2007sunken = sunken def GetMS2007ButtonSunken(self): """ Returns the sunken flag for MS 2007 buttons. """ return self._ms2007sunken def GetMBVerticalGradient(self): """ Returns ``True`` if the menu bar should be painted with vertical gradient. """ return self._verticalGradient def SetMBVerticalGradient(self, v): """ Sets the menu bar gradient style. :param `v`: ``True`` for a vertical shaded gradient, ``False`` otherwise. """ self._verticalGradient = v def DrawMenuBarBorder(self, border): """ Enables menu border drawing (XP style only). :param `border`: ``True`` to draw the menubar border, ``False`` otherwise. """ self._drowMBBorder = border def GetMenuBarBorder(self): """ Returns menu bar border drawing flag. """ return self._drowMBBorder def GetMenuBgFactor(self): """ Gets the visibility depth of the menu in Metallic style. The higher the value, the menu bar will look more raised """ return self._menuBgFactor def DrawDragSash(self, rect): """ Draws resize sash. :param `rect`: the sash client rectangle. """ dc = wx.ScreenDC() mem_dc = wx.MemoryDC() bmp = wx.EmptyBitmap(rect.width, rect.height) mem_dc.SelectObject(bmp) mem_dc.SetBrush(wx.WHITE_BRUSH) mem_dc.SetPen(wx.Pen(wx.WHITE, 1)) mem_dc.DrawRectangle(0, 0, rect.width, rect.height) dc.Blit(rect.x, rect.y, rect.width, rect.height, mem_dc, 0, 0, wx.XOR) def TakeScreenShot(self, rect, bmp): """ Takes a screenshot of the screen at given position & size (rect). :param `rect`: the screen rectangle we wish to capture; :param `bmp`: currently unused. """ # Create a DC for the whole screen area dcScreen = wx.ScreenDC() # Create a Bitmap that will later on hold the screenshot image # Note that the Bitmap must have a size big enough to hold the screenshot # -1 means using the current default colour depth bmp = wx.EmptyBitmap(rect.width, rect.height) # Create a memory DC that will be used for actually taking the screenshot memDC = wx.MemoryDC() # Tell the memory DC to use our Bitmap # all drawing action on the memory DC will go to the Bitmap now memDC.SelectObject(bmp) # Blit (in this case copy) the actual screen on the memory DC # and thus the Bitmap memDC.Blit( 0, # Copy to this X coordinate 0, # Copy to this Y coordinate rect.width, # Copy this width rect.height, # Copy this height dcScreen, # From where do we copy? rect.x, # What's the X offset in the original DC? rect.y # What's the Y offset in the original DC? ) # Select the Bitmap out of the memory DC by selecting a new # uninitialized Bitmap memDC.SelectObject(wx.NullBitmap) def DrawToolBarBg(self, dc, rect): """ Draws the toolbar background according to the active theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the toolbar's client rectangle. """ renderer = self._renderers[self.GetMenuTheme()] # Set background colour if non given by caller renderer.DrawToolBarBg(dc, rect) def DrawMenuBarBg(self, dc, rect): """ Draws the menu bar background according to the active theme. :param `dc`: an instance of `wx.DC`; :param `rect`: the menubar's client rectangle. """ renderer = self._renderers[self.GetMenuTheme()] # Set background colour if non given by caller renderer.DrawMenuBarBg(dc, rect) def SetMenuBarColour(self, scheme): """ Sets the menu bar colour scheme to use. :param `scheme`: a string representing a colour scheme (i.e., 'Default', 'Dark', 'Dark Olive Green', 'Generic'). """ self._menuBarColourScheme = scheme # set default colour if scheme in self._colourSchemeMap.keys(): self._menuBarBgColour = self._colourSchemeMap[scheme] def GetMenuBarColourScheme(self): """ Returns the current colour scheme. """ return self._menuBarColourScheme def GetMenuBarFaceColour(self): """ Returns the menu bar face colour. """ return self._menuBarBgColour def GetMenuBarSelectionColour(self): """ Returns the menu bar selection colour. """ return self._menuBarSelColour def InitColours(self): """ Initialise the colour map. """ self._colourSchemeMap = {_("Default"): wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE), _("Dark"): wx.BLACK, _("Dark Olive Green"): wx.NamedColour("DARK OLIVE GREEN"), _("Generic"): wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION)} def GetColourSchemes(self): """ Returns the available colour schemes. """ return self._colourSchemeMap.keys() def CreateGreyBitmap(self, bmp): """ Creates a grey bitmap image from the input bitmap. :param `bmp`: a valid `wx.Bitmap` object to be greyed out. """ img = bmp.ConvertToImage() return wx.BitmapFromImage(img.ConvertToGreyscale()) def GetRaiseToolbar(self): """ Returns ``True`` if we are dropping a shadow under a toolbar. """ return self._raiseTB def SetRaiseToolbar(self, rais): """ Enables/disables toobar shadow drop. :param `rais`: ``True`` to drop a shadow below a toolbar, ``False`` otherwise. """ self._raiseTB = rais dispcalGUI-1.7.1.6/dispcalGUI/lib/agw/fmresources.py000644 000765 000000 00000032372 12025152305 022037 0ustar00svpwheel000000 000000 import wx # Overall menu styles StyleDefault = 0 StyleXP = 1 Style2007 = 2 StyleVista = 3 # Menu shadows RightShadow = 1 # Right side shadow BottomShadow = 2 # Not full bottom shadow BottomShadowFull = 4 # Full bottom shadow # Button styles BU_EXT_XP_STYLE = 1 BU_EXT_2007_STYLE = 2 BU_EXT_LEFT_ALIGN_STYLE = 4 BU_EXT_CENTER_ALIGN_STYLE = 8 BU_EXT_RIGHT_ALIGN_STYLE = 16 BU_EXT_RIGHT_TO_LEFT_STYLE = 32 # Control state ControlPressed = 0 ControlFocus = 1 ControlDisabled = 2 ControlNormal = 3 # FlatMenu styles FM_OPT_IS_LCD = 1 """ Use this style if your computer uses a LCD screen. """ FM_OPT_MINIBAR = 2 """ Use this if you plan to use the toolbar only. """ FM_OPT_SHOW_CUSTOMIZE = 4 """ Show "customize link" in the `More` menu, you will need to write your own handler. See demo. """ FM_OPT_SHOW_TOOLBAR = 8 """ Set this option is you are planning to use the toolbar. """ # Control status ControlStatusNoFocus = 0 ControlStatusFocus = 1 ControlStatusPressed = 2 # HitTest constants NoWhere = 0 MenuItem = 1 ToolbarItem = 2 DropDownArrowButton = 3 FTB_ITEM_TOOL = 0 FTB_ITEM_SEPARATOR = 1 FTB_ITEM_CHECK = 2 FTB_ITEM_RADIO = 3 FTB_ITEM_RADIO_MENU = 4 FTB_ITEM_CUSTOM = 5 LargeIcons = 32 SmallIcons = 16 MENU_HT_NONE = 0 MENU_HT_ITEM = 1 MENU_HT_SCROLL_UP = 2 MENU_HT_SCROLL_DOWN = 3 MENU_DEC_TOP = 0 MENU_DEC_BOTTOM = 1 MENU_DEC_LEFT = 2 MENU_DEC_RIGHT = 3 DROP_DOWN_ARROW_WIDTH = 16 SPACER = 12 MARGIN = 3 TOOLBAR_SPACER = 4 TOOLBAR_MARGIN = 4 SEPARATOR_WIDTH = 12 SCROLL_BTN_HEIGHT = 20 CS_DROPSHADOW = 0x00020000 INB_BOTTOM = 1 INB_LEFT = 2 INB_RIGHT = 4 INB_TOP = 8 INB_BORDER = 16 INB_SHOW_ONLY_TEXT = 32 INB_SHOW_ONLY_IMAGES = 64 INB_FIT_BUTTON = 128 INB_DRAW_SHADOW = 256 INB_USE_PIN_BUTTON = 512 INB_GRADIENT_BACKGROUND = 1024 INB_WEB_HILITE = 2048 INB_NO_RESIZE = 4096 INB_FIT_LABELTEXT = 8192 INB_DEFAULT_STYLE = INB_BORDER | INB_TOP | INB_USE_PIN_BUTTON INB_TAB_AREA_BACKGROUND_COLOUR = 100 INB_ACTIVE_TAB_COLOUR = 101 INB_TABS_BORDER_COLOUR = 102 INB_TEXT_COLOUR = 103 INB_ACTIVE_TEXT_COLOUR = 104 INB_HILITE_TAB_COLOUR = 105 INB_LABEL_BOOK_DEFAULT = INB_DRAW_SHADOW | INB_BORDER | INB_USE_PIN_BUTTON | INB_LEFT # HitTest results IMG_OVER_IMG = 0 IMG_OVER_PIN = 1 IMG_OVER_EW_BORDER = 2 IMG_NONE = 3 # Pin button states INB_PIN_NONE = 0 INB_PIN_HOVER = 200 INB_PIN_PRESSED = 201 # Windows Vista Colours rgbSelectOuter = wx.Colour(170, 200, 245) rgbSelectInner = wx.Colour(230, 250, 250) rgbSelectTop = wx.Colour(210, 240, 250) rgbSelectBottom = wx.Colour(185, 215, 250) check_mark_xpm = [" 16 16 16 1", "` c #000000", ". c #800000", "# c #008000", "a c #808000", "b c #000080", "c c #800080", "d c #008080", "e c #808080", "f c #c0c0c0", "g c #ff0000", "h c #00ff00", "i c #ffff00", "j c #0000ff", "k c #ff00ff", "l c #00ffff", "m c #ffffff", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmm`mmmmm", "mmmmmmmmm``mmmmm", "mmmm`mmm```mmmmm", "mmmm``m```mmmmmm", "mmmm`````mmmmmmm", "mmmmm```mmmmmmmm", "mmmmmm`mmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm" ] radio_item_xpm = [" 16 16 16 1", "` c #000000", ". c #800000", "# c #008000", "a c #808000", "b c #000080", "c c #800080", "d c #008080", "e c #808080", "f c #c0c0c0", "g c #ff0000", "h c #00ff00", "i c #ffff00", "j c #0000ff", "k c #ff00ff", "l c #00ffff", "m c #ffffff", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmm```mmmmmmm", "mmmmm`````mmmmmm", "mmmmm`````mmmmmm", "mmmmmm```mmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm", "mmmmmmmmmmmmmmmm"] menu_right_arrow_xpm = [ " 16 16 8 1", "` c #ffffff", ". c #000000", "# c #000000", "a c #000000", "b c #000000", "c c #000000", "d c #000000", "e c #000000", "````````````````", "````````````````", "````````````````", "````````````````", "````````````````", "``````.`````````", "``````..````````", "``````...```````", "``````....``````", "``````...```````", "``````..````````", "``````.`````````", "````````````````", "````````````````", "````````````````", "````````````````" ] #---------------------------------- # Shadow images #---------------------------------- shadow_right_xpm = ["5 5 1 1"," c Black"," "," "," "," "," "] # shadow_right.xpm 5x5 shadow_right_alpha = [168, 145, 115, 76, 46, 168, 145, 115, 76, 46, 168, 145, 115, 76, 46, 168, 145, 115, 76, 46, 168, 145, 115, 76, 46] shadow_right_top_xpm = ["5 10 1 1"," c Black"," "," "," "," ", " "," "," "," "," "," "] shadow_right_top_alpha = [40, 35, 28, 18, 11, 67, 58, 46, 31, 18, 101, 87, 69, 46, 28, 128, 110, 87, 58, 35, 148, 128, 101, 67, 40, 161, 139, 110, 73, 44, 168, 145, 115, 76, 46, 168, 145, 115, 76, 46, 168, 145, 115, 76, 46, 168, 145, 115, 76, 46] # shadow_buttom.xpm 5x5 shadow_bottom_alpha = [184, 184, 184, 184, 184, 168, 168, 168, 168, 168, 145, 145, 145, 145, 145, 115, 115, 115, 115, 115, 76, 76, 76, 76, 76] shadow_bottom_left_xpm = ["10 5 1 1"," c Black"," "," ", " "," "," "] shadow_bottom_left_alpha = [22, 44, 73, 110, 139, 161, 176, 184, 184, 184, 20, 40, 67, 101, 128, 148, 161, 168, 168, 168, 17, 35, 58, 87, 110, 128, 139, 145, 145, 145, 13, 28, 46, 69, 87, 101, 110, 115, 115, 115, 9, 18, 31, 46, 58, 67, 73, 76, 76, 76] shadow_center_xpm = ["5 5 1 1"," c Black"," "," "," "," "," "] shadow_center_alpha = [161, 139, 110, 73, 44, 148, 128, 101, 67, 40, 128, 110, 87, 58, 35, 101, 87, 69, 46, 28, 67, 58, 46, 31, 18] shadow_bottom_xpm = ["5 5 1 1"," c Black"," "," "," "," "," "] arrow_down_xpm = ["16 16 3 1", ". c Black", "X c #FFFFFF", " c #008080", " ", " ", " ", " ", " ....... ", " XXXXXXX ", " ", " ....... ", " X.....X ", " X...X ", " X.X ", " X ", " ", " ", " ", " "] #--------------------------------------------- # Pin images #--------------------------------------------- pin_left_xpm = [" 16 16 8 1", "` c #ffffff", ". c #000000", "# c #808080", "a c #000000", "b c #000000", "c c #000000", "d c #000000", "e c #000000", "````````````````", "````````````````", "```````.````````", "```````.````````", "```````.......``", "```````.`````.``", "`````...`````.``", "``......#####.``", "`````...#####.``", "```````.......``", "```````.......``", "```````.````````", "```````.````````", "````````````````", "````````````````", "````````````````"] pin_down_xpm = [" 16 16 8 1", "` c #ffffff", ". c #000000", "# c #808080", "a c #000000", "b c #000000", "c c #000000", "d c #000000", "e c #000000", "````````````````", "````````````````", "````.......`````", "````.``##..`````", "````.``##..`````", "````.``##..`````", "````.``##..`````", "````.``##..`````", "``...........```", "``````...```````", "``````...```````", "```````.````````", "```````.````````", "```````.````````", "````````````````", "````````````````"] arrow_up = 'BM\xf6\x00\x00\x00\x00\x00\x00\x00v\x00\x00\x00(\x00\x00\x00\x10\x00\x00\ \x00\x10\x00\x00\x00\x01\x00\x04\x00\x00\x00\x00\x00\x80\x00\x00\x00\x12\x0b\x00\x00\x12\ \x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00\x80\x80\x00\ \x00w\xfcM\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00""""""""""""""""""""""""""""""""""\x00\x00\x00\x02""""\x11\x11\ \x11\x12""""""""""""\x00\x00\x00\x02""""\x10\x00\x00\x12""""!\x00\x01""""""\x10\x12""""""!\ """"""""""""""""""""""""""""""""""""' arrow_down = 'BM\xf6\x00\x00\x00\x00\x00\x00\x00v\x00\x00\x00(\x00\x00\x00\x10\x00\x00\x00\ \x10\x00\x00\x00\x01\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x0b\x00\x00\x12\x0b\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00\x80\x80\x00\x00w\ \xfcM\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00"""""""""""""""""""""""""""""""""""!"""""""\x10\x12"""""!\x00\x01\ """""\x10\x00\x00\x12""""\x00\x00\x00\x02""""""""""""\x11\x11\x11\x12""""\x00\x00\x00\x02\ """"""""""""""""""""""""""""""""""' menu_up_arrow_xpm = ["16 16 2 1", ". c Black", " c White", " ", " ", " ", " ", " ", " ", " . ", " ... ", " ..... ", " ", " ", " ", " ", " ", " ", " "] menu_down_arrow_xpm = ["16 16 2 1", ". c Black", " c White", " ", " ", " ", " ", " ", " ", " ..... ", " ... ", " . ", " ", " ", " ", " ", " ", " ", " "] def getMenuUpArrowBitmap(): bmp = wx.BitmapFromXPMData(menu_up_arrow_xpm) bmp.SetMask(wx.Mask(bmp, wx.WHITE)) return bmp def getMenuDownArrowBitmap(): bmp = wx.BitmapFromXPMData(menu_down_arrow_xpm) bmp.SetMask(wx.Mask(bmp, wx.WHITE)) return bmp dispcalGUI-1.7.1.6/dispcalGUI/lib/agw/fourwaysplitter.py000644 000765 000000 00000103673 12025152305 022770 0ustar00svpwheel000000 000000 # --------------------------------------------------------------------------------- # # FOURWAYSPLITTER wxPython IMPLEMENTATION # # Andrea Gavana, @ 03 Nov 2006 # Latest Revision: 14 Apr 2010, 12.00 GMT # # # TODO List # # 1. Any idea? # # For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please # Write To Me At: # # gavana@kpo.kz # andrea.gavana@gmail.com # # Or, Obviously, To The wxPython Mailing List!!! # # # End Of Comments # --------------------------------------------------------------------------------- # """ FourWaySplitter is a layout manager which manages 4 children like 4 panes in a window. Description =========== The FourWaySplitter is a layout manager which manages four children like four panes in a window. You can use a four-way splitter for example in a CAD program where you may want to maintain three orthographic views, and one oblique view of a model. The FourWaySplitter allows interactive repartitioning of the panes by means of moving the central splitter bars. When the FourWaySplitter is itself resized, each child is proportionally resized, maintaining the same split-percentage. The main characteristics of FourWaySplitter are: - Handles horizontal, vertical or four way sizing via the sashes; - Delayed or live update when resizing; - Possibility to swap windows; - Setting the vertical and horizontal split fractions; - Possibility to expand a window by hiding the onther 3. And a lot more. See the demo for a complete review of the functionalities. Supported Platforms =================== FourWaySplitter has been tested on the following platforms: * Windows (Windows XP); * Linux Ubuntu (Dapper 6.06) Window Styles ============= This class supports the following window styles: ================== =========== ================================================== Window Styles Hex Value Description ================== =========== ================================================== ``SP_NOSASH`` 0x10 No sash will be drawn on `FourWaySplitter`. ``SP_LIVE_UPDATE`` 0x80 Don't draw XOR line but resize the child windows immediately. ``SP_3DBORDER`` 0x200 Draws a 3D effect border. ================== =========== ================================================== Events Processing ================= This class processes the following events: ================================== ================================================== Event Name Description ================================== ================================================== ``EVT_SPLITTER_SASH_POS_CHANGED`` The sash position was changed. This event is generated after the user releases the mouse after dragging the splitter. Processes a `wx.wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED` event. ``EVT_SPLITTER_SASH_POS_CHANGING`` The sash position is in the process of being changed. You may prevent this change from happening by calling `Veto` or you may also modify the position of the tracking bar to properly reflect the position that would be set if the drag were to be completed at this point. Processes a `wx.wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING` event. ================================== ================================================== License And Version =================== FourWaySplitter is distributed under the wxPython license. Latest Revision: Andrea Gavana @ 14 Apr 2010, 12.00 GMT Version 0.4 """ __docformat__ = "epytext" import wx _RENDER_VER = (2,6,1,1) # Tolerance for mouse shape and sizing _TOLERANCE = 5 # Modes NOWHERE = 0 FLAG_CHANGED = 1 FLAG_PRESSED = 2 # FourWaySplitter styles SP_NOSASH = wx.SP_NOSASH """ No sash will be drawn on `FourWaySplitter`. """ SP_LIVE_UPDATE = wx.SP_LIVE_UPDATE """ Don't draw XOR line but resize the child windows immediately. """ SP_3DBORDER = wx.SP_3DBORDER """ Draws a 3D effect border. """ # FourWaySplitter events EVT_SPLITTER_SASH_POS_CHANGING = wx.EVT_SPLITTER_SASH_POS_CHANGING """ The sash position is in the process of being changed. You may prevent this change""" \ """ from happening by calling `Veto` or you may also modify the position of the tracking""" \ """ bar to properly reflect the position that would be set if the drag were to be""" \ """ completed at this point. Processes a `wx.wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING` event.""" EVT_SPLITTER_SASH_POS_CHANGED = wx.EVT_SPLITTER_SASH_POS_CHANGED """ The sash position was changed. This event is generated after the user releases the""" \ """ mouse after dragging the splitter. Processes a `wx.wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED` event. """ # ---------------------------------------------------------------------------- # # Class FourWaySplitterEvent # ---------------------------------------------------------------------------- # class FourWaySplitterEvent(wx.PyCommandEvent): """ This event class is almost the same as `wx.SplitterEvent` except it adds an accessor for the sash index that is being changed. The same event type IDs and event binders are used as with `wx.SplitterEvent`. """ def __init__(self, evtType=wx.wxEVT_NULL, splitter=None): """ Default class constructor. :param `evtType`: the event type; :param `splitter`: the associated L{FourWaySplitter} window. """ wx.PyCommandEvent.__init__(self, evtType) if splitter: self.SetEventObject(splitter) self.SetId(splitter.GetId()) self.sashIdx = -1 self.sashPos = -1 self.isAllowed = True def SetSashIdx(self, idx): """ Sets the index of the sash currently involved in the event. :param `idx`: an integer between 0 and 3, representing the index of the sash involved in the event. """ self.sashIdx = idx def SetSashPosition(self, pos): """ In the case of ``EVT_SPLITTER_SASH_POS_CHANGED`` events, sets the new sash position. In the case of ``EVT_SPLITTER_SASH_POS_CHANGING`` events, sets the new tracking bar position so visual feedback during dragging will represent that change that will actually take place. Set to -1 from the event handler code to prevent repositioning. :param `pos`: the new sash position. :note: May only be called while processing ``EVT_SPLITTER_SASH_POS_CHANGING`` and ``EVT_SPLITTER_SASH_POS_CHANGED`` events. """ self.sashPos = pos def GetSashIdx(self): """ Returns the index of the sash currently involved in the event. """ return self.sashIdx def GetSashPosition(self): """ Returns the new sash position. :note: May only be called while processing ``EVT_SPLITTER_SASH_POS_CHANGING`` and ``EVT_SPLITTER_SASH_POS_CHANGED`` events. """ return self.sashPos # methods from wx.NotifyEvent def Veto(self): """ Prevents the change announced by this event from happening. :note: It is in general a good idea to notify the user about the reasons for vetoing the change because otherwise the applications behaviour (which just refuses to do what the user wants) might be quite surprising. """ self.isAllowed = False def Allow(self): """ This is the opposite of L{Veto}: it explicitly allows the event to be processed. For most events it is not necessary to call this method as the events are allowed anyhow but some are forbidden by default (this will be mentioned in the corresponding event description). """ self.isAllowed = True def IsAllowed(self): """ Returns ``True`` if the change is allowed (L{Veto} hasn't been called) or ``False`` otherwise (if it was). """ return self.isAllowed # ---------------------------------------------------------------------------- # # Class FourWaySplitter # ---------------------------------------------------------------------------- # class FourWaySplitter(wx.PyPanel): """ This class is very similar to `wx.SplitterWindow` except that it allows for four windows and two sashes. Many of the same styles, constants, and methods behave the same as in `wx.SplitterWindow`. However, in addition of the ability to drag the vertical and the horizontal sash, by dragging at the intersection between the two sashes, it is possible to resize the four windows at the same time. :note: These things are not yet supported: * Minimum pane size (minimum of what? Width? Height?); * Using negative sash positions to indicate a position offset from the end; * User controlled unsplitting with double clicks on the sash (but supported via the L{FourWaySplitter.SetExpanded} method); * Sash gravity. """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="FourWaySplitter"): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.PyPanel` window style; :param `agwStyle`: the AGW-specific window style. It can be a combination of the following bits: ================== =========== ================================================== Window Styles Hex Value Description ================== =========== ================================================== ``SP_NOSASH`` 0x10 No sash will be drawn on L{FourWaySplitter}. ``SP_LIVE_UPDATE`` 0x80 Don't draw XOR line but resize the child windows immediately. ``SP_3DBORDER`` 0x200 Draws a 3D effect border. ================== =========== ================================================== :param `name`: the window name. """ # always turn on tab traversal style |= wx.TAB_TRAVERSAL # and turn off any border styles style &= ~wx.BORDER_MASK style |= wx.BORDER_NONE self._agwStyle = agwStyle # initialize the base class wx.PyPanel.__init__(self, parent, id, pos, size, style, name) self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) self._windows = [] self._splitx = 0 self._splity = 0 self._expanded = -1 self._fhor = 5000 self._fver = 5000 self._offx = 0 self._offy = 0 self._mode = NOWHERE self._flags = 0 self._isHot = False self._sashTrackerPen = wx.Pen(wx.BLACK, 2, wx.SOLID) self._sashCursorWE = wx.StockCursor(wx.CURSOR_SIZEWE) self._sashCursorNS = wx.StockCursor(wx.CURSOR_SIZENS) self._sashCursorSIZING = wx.StockCursor(wx.CURSOR_SIZING) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_MOTION, self.OnMotion) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) self.Bind(wx.EVT_ENTER_WINDOW, self.OnEnterWindow) def SetAGWWindowStyleFlag(self, agwStyle): """ Sets the L{FourWaySplitter} window style flags. :param `agwStyle`: the AGW-specific window style. This can be a combination of the following bits: ================== =========== ================================================== Window Styles Hex Value Description ================== =========== ================================================== ``SP_NOSASH`` 0x10 No sash will be drawn on L{FourWaySplitter}. ``SP_LIVE_UPDATE`` 0x80 Don't draw XOR line but resize the child windows immediately. ``SP_3DBORDER`` 0x200 Draws a 3D effect border. ================== =========== ================================================== """ self._agwStyle = agwStyle self.Refresh() def GetAGWWindowStyleFlag(self): """ Returns the L{FourWaySplitter} window style. :see: L{SetAGWWindowStyleFlag} for a list of possible window styles. """ return self._agwStyle def AppendWindow(self, window): """ Add a new window to the splitter at the right side or bottom of the window stack. :param `window`: an instance of `wx.Window`. """ self.InsertWindow(len(self._windows), window) def InsertWindow(self, idx, window, sashPos=-1): """ Insert a new window into the splitter at the position given in `idx`. :param `idx`: the index at which the window will be inserted; :param `window`: an instance of `wx.Window`; :param `sashPos`: the sash position after the window insertion. """ assert window not in self._windows, "A window can only be in the splitter once!" self._windows.insert(idx, window) self._SizeWindows() def DetachWindow(self, window): """ Removes the window from the stack of windows managed by the splitter. The window will still exist so you should `Hide` or `Destroy` it as needed. :param `window`: an instance of `wx.Window`. """ assert window in self._windows, "Unknown window!" idx = self._windows.index(window) del self._windows[idx] self._SizeWindows() def ReplaceWindow(self, oldWindow, newWindow): """ Replaces `oldWindow` (which is currently being managed by the splitter) with `newWindow`. The `oldWindow` window will still exist so you should `Hide` or `Destroy` it as needed. :param `oldWindow`: an instance of `wx.Window`; :param `newWindow`: another instance of `wx.Window`. """ assert oldWindow in self._windows, "Unknown window!" idx = self._windows.index(oldWindow) self._windows[idx] = newWindow self._SizeWindows() def ExchangeWindows(self, window1, window2): """ Trade the positions in the splitter of the two windows. :param `window1`: an instance of `wx.Window`; :param `window2`: another instance of `wx.Window`. """ assert window1 in self._windows, "Unknown window!" assert window2 in self._windows, "Unknown window!" idx1 = self._windows.index(window1) idx2 = self._windows.index(window2) self._windows[idx1] = window2 self._windows[idx2] = window1 if "__WXMSW__" in wx.Platform: self.Freeze() self._SizeWindows() if "__WXMSW__" in wx.Platform: self.Thaw() def GetWindow(self, idx): """ Returns the window at the index `idx`. :param `idx`: the index at which the window is located. """ if len(self._windows) > idx: return self._windows[idx] return None # Get top left child def GetTopLeft(self): """ Returns the top left window (window index: 0). """ return self.GetWindow(0) # Get top right child def GetTopRight(self): """ Returns the top right window (window index: 1). """ return self.GetWindow(1) # Get bottom left child def GetBottomLeft(self): """ Returns the bottom left window (window index: 2). """ return self.GetWindow(2) # Get bottom right child def GetBottomRight(self): """ Returns the bottom right window (window index: 3). """ return self.GetWindow(3) def DoGetBestSize(self): """ Gets the size which best suits the window: for a control, it would be the minimal size which doesn't truncate the control, for a panel - the same size as it would have after a call to `Fit()`. :note: Overridden from `wx.PyPanel`. """ if not self._windows: # something is better than nothing... return wx.Size(10, 10) width = height = 0 border = self._GetBorderSize() tl = self.GetTopLeft() tr = self.GetTopRight() bl = self.GetBottomLeft() br = self.GetBottomRight() for win in self._windows: w, h = win.GetEffectiveMinSize() width += w height += h if tl and tr: width += self._GetSashSize() if bl and br: height += self._GetSashSize() return wx.Size(width+2*border, height+2*border) # Recompute layout def _SizeWindows(self): """ Recalculate the layout based on split positions and split fractions. :see: L{SetHSplit} and L{SetVSplit} for more information about split fractions. """ win0 = self.GetTopLeft() win1 = self.GetTopRight() win2 = self.GetBottomLeft() win3 = self.GetBottomRight() width, height = self.GetSize() barSize = self._GetSashSize() border = self._GetBorderSize() if self._expanded < 0: totw = width - barSize - 2*border toth = height - barSize - 2*border self._splitx = (self._fhor*totw)/10000 self._splity = (self._fver*toth)/10000 rightw = totw - self._splitx bottomh = toth - self._splity if win0: win0.SetDimensions(0, 0, self._splitx, self._splity) win0.Show() if win1: win1.SetDimensions(self._splitx + barSize, 0, rightw, self._splity) win1.Show() if win2: win2.SetDimensions(0, self._splity + barSize, self._splitx, bottomh) win2.Show() if win3: win3.SetDimensions(self._splitx + barSize, self._splity + barSize, rightw, bottomh) win3.Show() else: if self._expanded < len(self._windows): for ii, win in enumerate(self._windows): if ii == self._expanded: win.SetDimensions(0, 0, width-2*border, height-2*border) win.Show() else: win.Hide() # Determine split mode def GetMode(self, pt): """ Determines the split mode for L{FourWaySplitter}. :param `pt`: the point at which the mouse has been clicked, an instance of `wx.Point`. :return: One of the following 3 split modes: ================= ============================== Split Mode Description ================= ============================== ``wx.HORIZONTAL`` the user has clicked on the horizontal sash ``wx.VERTICAL`` The user has clicked on the vertical sash ``wx.BOTH`` The user has clicked at the intersection between the 2 sashes ================= ============================== """ barSize = self._GetSashSize() flag = wx.BOTH if pt.x < self._splitx - _TOLERANCE: flag &= ~wx.VERTICAL if pt.y < self._splity - _TOLERANCE: flag &= ~wx.HORIZONTAL if pt.x >= self._splitx + barSize + _TOLERANCE: flag &= ~wx.VERTICAL if pt.y >= self._splity + barSize + _TOLERANCE: flag &= ~wx.HORIZONTAL return flag # Move the split intelligently def MoveSplit(self, x, y): """ Moves the split accordingly to user action. :param `x`: the new splitter `x` coordinate; :param `y`: the new splitter `y` coordinate. """ width, height = self.GetSize() barSize = self._GetSashSize() if x < 0: x = 0 if y < 0: y = 0 if x > width - barSize: x = width - barSize if y > height - barSize: y = height - barSize self._splitx = x self._splity = y # Adjust layout def AdjustLayout(self): """ Adjust layout of L{FourWaySplitter}. Mainly used to recalculate the correct values for split fractions. """ width, height = self.GetSize() barSize = self._GetSashSize() border = self._GetBorderSize() self._fhor = (width > barSize and \ [(10000*self._splitx+(width-barSize-1))/(width-barSize)] \ or [0])[0] self._fver = (height > barSize and \ [(10000*self._splity+(height-barSize-1))/(height-barSize)] \ or [0])[0] self._SizeWindows() # Button being pressed def OnLeftDown(self, event): """ Handles the ``wx.EVT_LEFT_DOWN`` event for L{FourWaySplitter}. :param `event`: a `wx.MouseEvent` event to be processed. """ if not self.IsEnabled(): return pt = event.GetPosition() self.CaptureMouse() self._mode = self.GetMode(pt) if self._mode: self._offx = pt.x - self._splitx self._offy = pt.y - self._splity if not self.GetAGWWindowStyleFlag() & wx.SP_LIVE_UPDATE: self.DrawSplitter(wx.ClientDC(self)) self.DrawTrackSplitter(self._splitx, self._splity) self._flags |= FLAG_PRESSED # Button being released def OnLeftUp(self, event): """ Handles the ``wx.EVT_LEFT_UP`` event for L{FourWaySplitter}. :param `event`: a `wx.MouseEvent` event to be processed. """ if not self.IsEnabled(): return if self.HasCapture(): self.ReleaseMouse() flgs = self._flags self._flags &= ~FLAG_CHANGED self._flags &= ~FLAG_PRESSED if flgs & FLAG_PRESSED: if not self.GetAGWWindowStyleFlag() & wx.SP_LIVE_UPDATE: self.DrawTrackSplitter(self._splitx, self._splity) self.DrawSplitter(wx.ClientDC(self)) self.AdjustLayout() if flgs & FLAG_CHANGED: event = FourWaySplitterEvent(wx.wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, self) event.SetSashIdx(self._mode) event.SetSashPosition(wx.Point(self._splitx, self._splity)) self.GetEventHandler().ProcessEvent(event) self._mode = NOWHERE def OnLeaveWindow(self, event): """ Handles the ``wx.EVT_LEAVE_WINDOW`` event for L{FourWaySplitter}. :param `event`: a `wx.MouseEvent` event to be processed. """ self.SetCursor(wx.STANDARD_CURSOR) self._RedrawIfHotSensitive(False) def OnEnterWindow(self, event): """ Handles the ``wx.EVT_ENTER_WINDOW`` event for L{FourWaySplitter}. :param `event`: a `wx.MouseEvent` event to be processed. """ self._RedrawIfHotSensitive(True) def _RedrawIfHotSensitive(self, isHot): """ Used internally. Redraw the splitter if we are using a hot-sensitive splitter. :param `isHot`: ``True`` if the splitter is in a hot state, ``False`` otherwise. """ if not wx.VERSION >= _RENDER_VER: return if wx.RendererNative.Get().GetSplitterParams(self).isHotSensitive: self._isHot = isHot dc = wx.ClientDC(self) self.DrawSplitter(dc) def OnMotion(self, event): """ Handles the ``wx.EVT_MOTION`` event for L{FourWaySplitter}. :param `event`: a `wx.MouseEvent` event to be processed. """ if self.HasFlag(wx.SP_NOSASH): return pt = event.GetPosition() # Moving split if self._flags & FLAG_PRESSED: oldsplitx = self._splitx oldsplity = self._splity if self._mode == wx.BOTH: self.MoveSplit(pt.x - self._offx, pt.y - self._offy) elif self._mode == wx.VERTICAL: self.MoveSplit(pt.x - self._offx, self._splity) elif self._mode == wx.HORIZONTAL: self.MoveSplit(self._splitx, pt.y - self._offy) # Send a changing event if not self.DoSendChangingEvent(wx.Point(self._splitx, self._splity)): self._splitx = oldsplitx self._splity = oldsplity return if oldsplitx != self._splitx or oldsplity != self._splity: if not self.GetAGWWindowStyleFlag() & wx.SP_LIVE_UPDATE: self.DrawTrackSplitter(oldsplitx, oldsplity) self.DrawTrackSplitter(self._splitx, self._splity) else: self.AdjustLayout() self._flags |= FLAG_CHANGED # Change cursor based on position ff = self.GetMode(pt) if ff == wx.BOTH: self.SetCursor(self._sashCursorSIZING) elif ff == wx.VERTICAL: self.SetCursor(self._sashCursorWE) elif ff == wx.HORIZONTAL: self.SetCursor(self._sashCursorNS) else: self.SetCursor(wx.STANDARD_CURSOR) event.Skip() def OnPaint(self, event): """ Handles the ``wx.EVT_PAINT`` event for L{FourWaySplitter}. :param `event`: a `wx.PaintEvent` event to be processed. """ dc = wx.PaintDC(self) self.DrawSplitter(dc) def OnSize(self, event): """ Handles the ``wx.EVT_SIZE`` event for L{FourWaySplitter}. :param `event`: a `wx.SizeEvent` event to be processed. """ parent = wx.GetTopLevelParent(self) if parent.IsIconized(): event.Skip() return self._SizeWindows() def DoSendChangingEvent(self, pt): """ Sends a ``EVT_SPLITTER_SASH_POS_CHANGING`` event. :param `pt`: the point at which the splitter is being positioned. """ # send the event event = FourWaySplitterEvent(wx.wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, self) event.SetSashIdx(self._mode) event.SetSashPosition(pt) if self.GetEventHandler().ProcessEvent(event) and not event.IsAllowed(): # the event handler vetoed the change or missing event.Skip() return False else: # or it might have changed the value return True def _GetSashSize(self): """ Used internally. """ if self.HasFlag(wx.SP_NOSASH): return 0 if wx.VERSION >= _RENDER_VER: return wx.RendererNative.Get().GetSplitterParams(self).widthSash else: return 5 def _GetBorderSize(self): """ Used internally. """ if wx.VERSION >= _RENDER_VER: return wx.RendererNative.Get().GetSplitterParams(self).border else: return 0 # Draw the horizontal split def DrawSplitter(self, dc): """ Actually draws the sashes. :param `dc`: an instance of `wx.DC`. """ backColour = self.GetBackgroundColour() dc.SetBrush(wx.Brush(backColour, wx.SOLID)) dc.SetPen(wx.Pen(backColour)) dc.Clear() if wx.VERSION >= _RENDER_VER: if self.HasFlag(wx.SP_3DBORDER): wx.RendererNative.Get().DrawSplitterBorder( self, dc, self.GetClientRect()) else: barSize = self._GetSashSize() # if we are not supposed to use a sash then we're done. if self.HasFlag(wx.SP_NOSASH): return flag = 0 if self._isHot: flag = wx.CONTROL_CURRENT width, height = self.GetSize() if self._mode & wx.VERTICAL: if wx.VERSION >= _RENDER_VER: wx.RendererNative.Get().DrawSplitterSash(self, dc, self.GetClientSize(), self._splitx, wx.VERTICAL, flag) else: dc.DrawRectangle(self._splitx, 0, barSize, height) if self._mode & wx.HORIZONTAL: if wx.VERSION >= _RENDER_VER: wx.RendererNative.Get().DrawSplitterSash(self, dc, self.GetClientSize(), self._splity, wx.VERTICAL, flag) else: dc.DrawRectangle(0, self._splity, width, barSize) def DrawTrackSplitter(self, x, y): """ Draws a fake sash in case we don't have ``wx.SP_LIVE_UPDATE`` style. :param `x`: the `x` position of the sash; :param `y`: the `y` position of the sash. :note: This method relies on `wx.ScreenDC` which is currently unavailable on wxMac. """ # Draw a line to represent the dragging sash, for when not # doing live updates w, h = self.GetClientSize() dc = wx.ScreenDC() dc.SetLogicalFunction(wx.INVERT) dc.SetPen(self._sashTrackerPen) dc.SetBrush(wx.TRANSPARENT_BRUSH) if self._mode == wx.VERTICAL: x1 = x y1 = 2 x2 = x y2 = h-2 if x1 > w: x1 = w x2 = w elif x1 < 0: x1 = 0 x2 = 0 x1, y1 = self.ClientToScreenXY(x1, y1) x2, y2 = self.ClientToScreenXY(x2, y2) dc.DrawLine(x1, y1, x2, y2) dc.SetLogicalFunction(wx.COPY) elif self._mode == wx.HORIZONTAL: x1 = 2 y1 = y x2 = w-2 y2 = y if y1 > h: y1 = h y2 = h elif y1 < 0: y1 = 0 y2 = 0 x1, y1 = self.ClientToScreenXY(x1, y1) x2, y2 = self.ClientToScreenXY(x2, y2) dc.DrawLine(x1, y1, x2, y2) dc.SetLogicalFunction(wx.COPY) elif self._mode == wx.BOTH: x1 = 2 x2 = w-2 y1 = y y2 = y x1, y1 = self.ClientToScreenXY(x1, y1) x2, y2 = self.ClientToScreenXY(x2, y2) dc.DrawLine(x1, y1, x2, y2) x1 = x x2 = x y1 = 2 y2 = h-2 x1, y1 = self.ClientToScreenXY(x1, y1) x2, y2 = self.ClientToScreenXY(x2, y2) dc.DrawLine(x1, y1, x2, y2) dc.SetLogicalFunction(wx.COPY) # Change horizontal split [fraction*10000] def SetHSplit(self, s): """ Change horizontal split fraction. :param `s`: the split fraction, which is an integer value between 0 and 10000 (inclusive), indicating how much space to allocate to the leftmost panes. For example, to split the panes at 35 percent, use:: fourSplitter.SetHSplit(3500) """ if s < 0: s = 0 if s > 10000: s =10000 if s != self._fhor: self._fhor = s self._SizeWindows() # Change vertical split [fraction*10000] def SetVSplit(self, s): """ Change vertical split fraction. :param `s`: the split fraction, which is an integer value between 0 and 10000 (inclusive), indicating how much space to allocate to the topmost panes. For example, to split the panes at 35 percent, use:: fourSplitter.SetVSplit(3500) """ if s < 0: s = 0 if s > 10000: s =10000 if s != self._fver: self._fver = s self._SizeWindows() # Expand one or all of the four panes def SetExpanded(self, expanded): """ This method is used to expand one of the four window to fill the whole client size (when `expanded` >= 0) or to return to the four-window view (when `expanded` < 0). :param `expanded`: an integer >= 0 to expand a window to fill the whole client size, or an integer < 0 to return to the four-window view. """ if expanded >= 4: raise Exception("ERROR: SetExpanded: index out of range: %d"%expanded) if self._expanded != expanded: self._expanded = expanded self._SizeWindows() dispcalGUI-1.7.1.6/dispcalGUI/lib/agw/gradientbutton.py000644 000765 000000 00000046740 12025152305 022537 0ustar00svpwheel000000 000000 # --------------------------------------------------------------------------------- # # GRADIENTBUTTON wxPython IMPLEMENTATION # # Andrea Gavana, @ 07 October 2008 # Latest Revision: 27 Nov 2009, 17.00 GMT # # # TODO List # # 1) Anything to do? # # # For all kind of problems, requests of enhancements and bug reports, please # write to me at: # # andrea.gavana@gmail.com # gavana@kpo.kz # # Or, obviously, to the wxPython mailing list!!! # # # End Of Comments # --------------------------------------------------------------------------------- # """ GradientButton is another custom-drawn button class which mimics Windows CE mobile gradient buttons. Description =========== GradientButton is another custom-drawn button class which mimics Windows CE mobile gradient buttons, using a tri-vertex blended gradient plus some ClearType bold font (best effect with Tahoma Bold). GradientButton supports: * Triple blended gradient background, with customizable colours; * Custom colours for the "pressed" state; * Rounded-corners buttons; * Text-only or image+text buttons. And a lot more. Check the demo for an almost complete review of the functionalities. Supported Platforms =================== GradientButton has been tested on the following platforms: * Windows (Windows XP). Window Styles ============= `No particular window styles are available for this class.` Events Processing ================= This class processes the following events: ================= ================================================== Event Name Description ================= ================================================== ``wx.EVT_BUTTON`` Process a `wx.wxEVT_COMMAND_BUTTON_CLICKED` event, when the button is clicked. ================= ================================================== License And Version =================== GradientButton is distributed under the wxPython license. Latest Revision: Andrea Gavana @ 27 Nov 2009, 17.00 GMT Version 0.3 """ import wx HOVER = 1 CLICK = 2 class GradientButtonEvent(wx.PyCommandEvent): """ Event sent from L{GradientButton} when the button is activated. """ def __init__(self, eventType, eventId): """ Default class constructor. :param `eventType`: the event type; :param `eventId`: the event identifier. """ wx.PyCommandEvent.__init__(self, eventType, eventId) self.isDown = False self.theButton = None def SetButtonObj(self, btn): """ Sets the event object for the event. :param `btn`: the button object, an instance of L{GradientButton}. """ self.theButton = btn def GetButtonObj(self): """ Returns the object associated with this event. """ return self.theButton class GradientButton(wx.PyControl): """ This is the main class implementation of L{GradientButton}. """ def __init__(self, parent, id=wx.ID_ANY, bitmap=None, label="", pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER, validator=wx.DefaultValidator, name="gradientbutton"): """ Default class constructor. :param `parent`: the L{GradientButton} parent; :param `id`: window identifier. A value of -1 indicates a default value; :param `bitmap`: the button bitmap (if any); :param `label`: the button text label; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the button style (unused); :param `validator`: the validator associated to the button; :param `name`: the button name. """ wx.PyControl.__init__(self, parent, id, pos, size, style, validator, name) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave) self.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter) self.Bind(wx.EVT_SET_FOCUS, self.OnGainFocus) self.Bind(wx.EVT_KILL_FOCUS, self.OnLoseFocus) self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) self.Bind(wx.EVT_KEY_UP, self.OnKeyUp) self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown) self._mouseAction = None self._bitmap = bitmap self._hasFocus = False self.SetLabel(label) self.InheritAttributes() self.SetInitialSize(size) # The following defaults are better suited to draw the text outline self._bottomStartColour = wx.BLACK rgba = self._bottomStartColour.Red(), self._bottomStartColour.Green(), \ self._bottomStartColour.Blue(), self._bottomStartColour.Alpha() self._bottomEndColour = self.LightColour(self._bottomStartColour, 20) self._topStartColour = self.LightColour(self._bottomStartColour, 40) self._topEndColour = self.LightColour(self._bottomStartColour, 25) self._pressedTopColour = self.LightColour(self._bottomStartColour, 20) self._pressedBottomColour = wx.Colour(*rgba) self.SetForegroundColour(wx.WHITE) for method in dir(self): if method.endswith("Colour"): newMethod = method[0:-6] + "Colour" if not hasattr(self, newMethod): setattr(self, newMethod, method) def LightColour(self, colour, percent): """ Return light contrast of `colour`. The colour returned is from the scale of `colour` ==> white. :param `colour`: the input colour to be brightened; :param `percent`: determines how light the colour will be. `percent` = 100 returns white, `percent` = 0 returns `colour`. """ end_colour = wx.WHITE rd = end_colour.Red() - colour.Red() gd = end_colour.Green() - colour.Green() bd = end_colour.Blue() - colour.Blue() high = 100 # We take the percent way of the colour from colour -. white i = percent r = colour.Red() + ((i*rd*100)/high)/100 g = colour.Green() + ((i*gd*100)/high)/100 b = colour.Blue() + ((i*bd*100)/high)/100 return wx.Colour(r, g, b) def OnSize(self, event): """ Handles the ``wx.EVT_SIZE`` event for L{GradientButton}. :param `event`: a `wx.SizeEvent` event to be processed. """ event.Skip() self.Refresh() def OnLeftDown(self, event): """ Handles the ``wx.EVT_LEFT_DOWN`` event for L{GradientButton}. :param `event`: a `wx.MouseEvent` event to be processed. """ if not self.IsEnabled(): return self._mouseAction = CLICK self.CaptureMouse() self.Refresh() event.Skip() def OnLeftUp(self, event): """ Handles the ``wx.EVT_LEFT_UP`` event for L{GradientButton}. :param `event`: a `wx.MouseEvent` event to be processed. """ if not self.IsEnabled() or not self.HasCapture(): return pos = event.GetPosition() rect = self.GetClientRect() if self.HasCapture(): self.ReleaseMouse() if rect.Contains(pos): self._mouseAction = HOVER self.Notify() else: self._mouseAction = None self.Refresh() event.Skip() def OnMouseEnter(self, event): """ Handles the ``wx.EVT_ENTER_WINDOW`` event for L{GradientButton}. :param `event`: a `wx.MouseEvent` event to be processed. """ if not self.IsEnabled(): return self._mouseAction = HOVER self.Refresh() event.Skip() def OnMouseLeave(self, event): """ Handles the ``wx.EVT_LEAVE_WINDOW`` event for L{GradientButton}. :param `event`: a `wx.MouseEvent` event to be processed. """ self._mouseAction = None self.Refresh() event.Skip() def OnGainFocus(self, event): """ Handles the ``wx.EVT_SET_FOCUS`` event for L{GradientButton}. :param `event`: a `wx.FocusEvent` event to be processed. """ self._hasFocus = True self.Refresh() self.Update() def OnLoseFocus(self, event): """ Handles the ``wx.EVT_KILL_FOCUS`` event for L{GradientButton}. :param `event`: a `wx.FocusEvent` event to be processed. """ self._hasFocus = False self.Refresh() self.Update() def OnKeyDown(self, event): """ Handles the ``wx.EVT_KEY_DOWN`` event for L{GradientButton}. :param `event`: a `wx.KeyEvent` event to be processed. """ if self._hasFocus and event.GetKeyCode() == ord(" "): self._mouseAction = HOVER self.Refresh() event.Skip() def OnKeyUp(self, event): """ Handles the ``wx.EVT_KEY_UP`` event for L{GradientButton}. :param `event`: a `wx.KeyEvent` event to be processed. """ if self._hasFocus and event.GetKeyCode() == ord(" "): self._mouseAction = HOVER self.Notify() self.Refresh() event.Skip() def OnPaint(self, event): """ Handles the ``wx.EVT_PAINT`` event for L{GradientButton}. :param `event`: a `wx.PaintEvent` event to be processed. """ dc = wx.BufferedPaintDC(self) gc = wx.GraphicsContext.Create(dc) dc.SetBackground(wx.Brush(self.GetParent().GetBackgroundColour())) dc.Clear() clientRect = self.GetClientRect() gradientRect = wx.Rect(*clientRect) capture = wx.Window.GetCapture() x, y, width, height = clientRect gradientRect.SetHeight(gradientRect.GetHeight()/2 + ((capture==self and [1] or [0])[0])) if capture != self: if self._mouseAction == HOVER: topStart, topEnd = self.LightColour(self._topStartColour, 10), self.LightColour(self._topEndColour, 10) else: topStart, topEnd = self._topStartColour, self._topEndColour rc1 = wx.Rect(x, y, width, height/2) path1 = self.GetPath(gc, rc1, 8) br1 = gc.CreateLinearGradientBrush(x, y, x, y+height/2, topStart, topEnd) gc.SetBrush(br1) gc.FillPath(path1) #draw main path4 = gc.CreatePath() path4.AddRectangle(x, y+height/2-8, width, 8) path4.CloseSubpath() gc.SetBrush(br1) gc.FillPath(path4) else: rc1 = wx.Rect(x, y, width, height) path1 = self.GetPath(gc, rc1, 8) gc.SetPen(wx.Pen(self._pressedTopColour)) gc.SetBrush(wx.Brush(self._pressedTopColour)) gc.FillPath(path1) gradientRect.Offset((0, gradientRect.GetHeight())) if capture != self: if self._mouseAction == HOVER: bottomStart, bottomEnd = self.LightColour(self._bottomStartColour, 10), self.LightColour(self._bottomEndColour, 10) else: bottomStart, bottomEnd = self._bottomStartColour, self._bottomEndColour rc3 = wx.Rect(x, y+height/2, width, height/2) path3 = self.GetPath(gc, rc3, 8) br3 = gc.CreateLinearGradientBrush(x, y+height/2, x, y+height, bottomStart, bottomEnd) gc.SetBrush(br3) gc.FillPath(path3) #draw main path4 = gc.CreatePath() path4.AddRectangle(x, y+height/2, width, 8) path4.CloseSubpath() gc.SetBrush(br3) gc.FillPath(path4) shadowOffset = 0 else: rc2 = wx.Rect(x+1, gradientRect.height/2, gradientRect.width, gradientRect.height) path2 = self.GetPath(gc, rc2, 8) gc.SetPen(wx.Pen(self._pressedBottomColour)) gc.SetBrush(wx.Brush(self._pressedBottomColour)) gc.FillPath(path2) shadowOffset = 1 font = gc.CreateFont(self.GetFont(), self.GetForegroundColour()) gc.SetFont(font) label = self.GetLabel() tw, th = gc.GetTextExtent(label) if self._bitmap: bw, bh = self._bitmap.GetWidth(), self._bitmap.GetHeight() else: bw = bh = 0 pos_x = (width-bw-tw)/2+shadowOffset # adjust for bitmap and text to centre if self._bitmap: pos_y = (height-bh)/2+shadowOffset gc.DrawBitmap(self._bitmap, pos_x, pos_y, bw, bh) # draw bitmap if available pos_x = pos_x + 2 # extra spacing from bitmap gc.DrawText(label, pos_x + bw + shadowOffset, (height-th)/2+shadowOffset) def GetPath(self, gc, rc, r): """ Returns a rounded `wx.GraphicsPath` rectangle. :param `gc`: an instance of `wx.GraphicsContext`; :param `rc`: a client rectangle; :param `r`: the radious of the rounded part of the rectangle. """ x, y, w, h = rc path = gc.CreatePath() path.AddRoundedRectangle(x, y, w, h, r) path.CloseSubpath() return path def SetInitialSize(self, size=None): """ Given the current font and bezel width settings, calculate and set a good size. :param `size`: an instance of `wx.Size`. """ if size is None: size = wx.DefaultSize wx.PyControl.SetInitialSize(self, size) SetBestSize = SetInitialSize def AcceptsFocus(self): """ Can this window be given focus by mouse click? :note: Overridden from `wx.PyControl`. """ return self.IsShown() and self.IsEnabled() def GetDefaultAttributes(self): """ Overridden base class virtual. By default we should use the same font/colour attributes as the native `wx.Button`. """ return wx.Button.GetClassDefaultAttributes() def ShouldInheritColours(self): """ Overridden base class virtual. Buttons usually don't inherit the parent's colours. :note: Overridden from `wx.PyControl`. """ return False def Enable(self, enable=True): """ Enables/disables the button. :param `enable`: ``True`` to enable the button, ``False`` to disable it. :note: Overridden from `wx.PyControl`. """ wx.PyControl.Enable(self, enable) self.Refresh() def SetTopStartColour(self, colour): """ Sets the top start colour for the gradient shading. :param `colour`: a valid `wx.Colour` object. """ self._topStartColour = colour self.Refresh() def GetTopStartColour(self): """ Returns the top start colour for the gradient shading. """ return self._topStartColour def SetTopEndColour(self, colour): """ Sets the top end colour for the gradient shading. :param `colour`: a valid `wx.Colour` object. """ self._topEndColour = colour self.Refresh() def GetTopEndColour(self): """ Returns the top end colour for the gradient shading. """ return self._topEndColour def SetBottomStartColour(self, colour): """ Sets the top bottom colour for the gradient shading. :param `colour`: a valid `wx.Colour` object. """ self._bottomStartColour = colour self.Refresh() def GetBottomStartColour(self): """ Returns the bottom start colour for the gradient shading. """ return self._bottomStartColour def SetBottomEndColour(self, colour): """ Sets the bottom end colour for the gradient shading. :param `colour`: a valid `wx.Colour` object. """ self._bottomEndColour = colour self.Refresh() def GetBottomEndColour(self): """ Returns the bottom end colour for the gradient shading. """ return self._bottomEndColour def SetPressedTopColour(self, colour): """ Sets the pressed top start colour for the gradient shading. :param `colour`: a valid `wx.Colour` object. """ self._pressedTopColour = colour self.Refresh() def GetPressedTopColour(self): """ Returns the pressed top start colour for the gradient shading. """ return self._pressedTopColour def SetPressedBottomColour(self, colour): """ Sets the pressed bottom start colour for the gradient shading. :param `colour`: a valid `wx.Colour` object. """ self._pressedBottomColour = colour self.Refresh() def GetPressedBottomColour(self): """ Returns the pressed bottom start colour for the gradient shading. """ return self._pressedBottomColour def SetForegroundColour(self, colour): """ Sets the L{GradientButton} foreground (text) colour. :param `colour`: a valid `wx.Colour` object. :note: Overridden from `wx.PyControl`. """ wx.PyControl.SetForegroundColour(self, colour) self.Refresh() def DoGetBestSize(self): """ Overridden base class virtual. Determines the best size of the button based on the label and bezel size. """ label = self.GetLabel() if not label: return wx.Size(112, 48) dc = wx.ClientDC(self) dc.SetFont(self.GetFont()) retWidth, retHeight = dc.GetTextExtent(label) bmpWidth = bmpHeight = 0 constant = 15 if self._bitmap: bmpWidth, bmpHeight = self._bitmap.GetWidth()+10, self._bitmap.GetHeight() retWidth += bmpWidth retHeight = max(bmpHeight, retHeight) constant = 15 return wx.Size(retWidth+constant, retHeight+constant) def SetDefault(self): """ Sets the default button. """ tlw = wx.GetTopLevelParent(self) if hasattr(tlw, 'SetDefaultItem'): tlw.SetDefaultItem(self) def Notify(self): """ Actually sends a ``wx.EVT_BUTTON`` event to the listener (if any). """ evt = GradientButtonEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, self.GetId()) evt.SetButtonObj(self) evt.SetEventObject(self) self.GetEventHandler().ProcessEvent(evt) dispcalGUI-1.7.1.6/dispcalGUI/lib/agw/labelbook.py000644 000765 000000 00000324774 12025152305 021446 0ustar00svpwheel000000 000000 # --------------------------------------------------------------------------- # # LABELBOOK And FLATIMAGEBOOK Widgets wxPython IMPLEMENTATION # # Original C++ Code From Eran, embedded in the FlatMenu source code # # # License: wxWidgets license # # # Python Code By: # # Andrea Gavana, @ 03 Nov 2006 # Latest Revision: 17 Jan 2011, 15.00 GMT # # # For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please # Write To Me At: # # andrea.gavana@gmail.com # gavana@kpo.kz # # Or, Obviously, To The wxPython Mailing List!!! # # TODO: # LabelBook - Support IMB_SHOW_ONLY_IMAGES # LabelBook - An option for the draw border to only draw the border # between the controls and the pages so the background # colour can flow into the window background # # # # End Of Comments # --------------------------------------------------------------------------- # """ LabelBook and FlatImageBook are a quasi-full generic and owner-drawn implementations of `wx.Notebook`. Description =========== LabelBook and FlatImageBook are a quasi-full implementations of the `wx.Notebook`, and designed to be a drop-in replacement for `wx.Notebook`. The API functions are similar so one can expect the function to behave in the same way. LabelBook anf FlatImageBook share their appearance with `wx.Toolbook` and `wx.Listbook`, while having more options for custom drawings, label positioning, mouse pointing and so on. Moreover, they retain also some visual characteristics of the Outlook address book. Some features: - They are generic controls; - Supports for left, right, top (FlatImageBook only), bottom (FlatImageBook only) book styles; - Possibility to draw images only, text only or both (FlatImageBook only); - Support for a "pin-button", that allows the user to shrink/expand the book tab area; - Shadows behind tabs (LabelBook only); - Gradient shading of the tab area (LabelBook only); - Web-like mouse pointing on tabs style (LabelBook only); - Many customizable colours (tab area, active tab text, tab borders, active tab, highlight) - LabelBook only. And much more. See the demo for a quasi-complete review of all the functionalities of LabelBook and FlatImageBook. Supported Platforms =================== LabelBook and FlatImageBook have been tested on the following platforms: * Windows (Windows XP); * Linux Ubuntu (Dapper 6.06) Window Styles ============= This class supports the following window styles: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for `FlatImageBook`. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for `FlatImageBook`. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around `LabelBook` or `FlatImageBook`. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for `LabelBook`. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for `LabelBook`. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for `LabelBook`. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for `LabelBook`. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for `LabelBook`. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== Events Processing ================= This class processes the following events: =================================== ================================================== Event Name Description =================================== ================================================== ``EVT_IMAGENOTEBOOK_PAGE_CHANGED`` Notify client objects when the active page in `ImageNotebook` has changed. ``EVT_IMAGENOTEBOOK_PAGE_CHANGING`` Notify client objects when the active page in `ImageNotebook` is about to change. ``EVT_IMAGENOTEBOOK_PAGE_CLOSED`` Notify client objects when a page in `ImageNotebook` has been closed. ``EVT_IMAGENOTEBOOK_PAGE_CLOSING`` Notify client objects when a page in `ImageNotebook` is closing. =================================== ================================================== License And Version =================== LabelBook and FlatImageBook are distributed under the wxPython license. Latest Revision: Andrea Gavana @ 17 Jan 2011, 15.00 GMT Version 0.5. """ __docformat__ = "epytext" #---------------------------------------------------------------------- # Beginning Of IMAGENOTEBOOK wxPython Code #---------------------------------------------------------------------- import wx from artmanager import ArtManager, DCSaver from fmresources import * # Check for the new method in 2.7 (not present in 2.6.3.3) if wx.VERSION_STRING < "2.7": wx.Rect.Contains = lambda self, point: wx.Rect.Inside(self, point) # FlatImageBook and LabelBook styles INB_BOTTOM = 1 """ Place labels below the page area. Available only for `FlatImageBook`.""" INB_LEFT = 2 """ Place labels on the left side. Available only for `FlatImageBook`.""" INB_RIGHT = 4 """ Place labels on the right side. """ INB_TOP = 8 """ Place labels above the page area. """ INB_BORDER = 16 """ Draws a border around `LabelBook` or `FlatImageBook`. """ INB_SHOW_ONLY_TEXT = 32 """ Shows only text labels and no images. Available only for `LabelBook`.""" INB_SHOW_ONLY_IMAGES = 64 """ Shows only tab images and no label texts. Available only for `LabelBook`.""" INB_FIT_BUTTON = 128 """ Displays a pin button to show/hide the book control. """ INB_DRAW_SHADOW = 256 """ Draw shadows below the book tabs. Available only for `LabelBook`.""" INB_USE_PIN_BUTTON = 512 """ Displays a pin button to show/hide the book control. """ INB_GRADIENT_BACKGROUND = 1024 """ Draws a gradient shading on the tabs background. Available only for `LabelBook`.""" INB_WEB_HILITE = 2048 """ On mouse hovering, tabs behave like html hyperlinks. Available only for `LabelBook`.""" INB_NO_RESIZE = 4096 """ Don't allow resizing of the tab area. """ INB_FIT_LABELTEXT = 8192 """ Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. """ wxEVT_IMAGENOTEBOOK_PAGE_CHANGED = wx.wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED wxEVT_IMAGENOTEBOOK_PAGE_CHANGING = wx.wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING wxEVT_IMAGENOTEBOOK_PAGE_CLOSING = wx.NewEventType() wxEVT_IMAGENOTEBOOK_PAGE_CLOSED = wx.NewEventType() #-----------------------------------# # ImageNotebookEvent #-----------------------------------# EVT_IMAGENOTEBOOK_PAGE_CHANGED = wx.EVT_NOTEBOOK_PAGE_CHANGED """ Notify client objects when the active page in `ImageNotebook` has changed. """ EVT_IMAGENOTEBOOK_PAGE_CHANGING = wx.EVT_NOTEBOOK_PAGE_CHANGING """ Notify client objects when the active page in `ImageNotebook` is about to change. """ EVT_IMAGENOTEBOOK_PAGE_CLOSING = wx.PyEventBinder(wxEVT_IMAGENOTEBOOK_PAGE_CLOSING, 1) """ Notify client objects when a page in `ImageNotebook` is closing. """ EVT_IMAGENOTEBOOK_PAGE_CLOSED = wx.PyEventBinder(wxEVT_IMAGENOTEBOOK_PAGE_CLOSED, 1) """ Notify client objects when a page in `ImageNotebook` has been closed. """ # ---------------------------------------------------------------------------- # # Class ImageNotebookEvent # ---------------------------------------------------------------------------- # class ImageNotebookEvent(wx.PyCommandEvent): """ This events will be sent when a ``EVT_IMAGENOTEBOOK_PAGE_CHANGED``, ``EVT_IMAGENOTEBOOK_PAGE_CHANGING``, ``EVT_IMAGENOTEBOOK_PAGE_CLOSING``, ``EVT_IMAGENOTEBOOK_PAGE_CLOSED`` is mapped in the parent. """ def __init__(self, eventType, eventId=1, sel=-1, oldsel=-1): """ Default class constructor. :param `eventType`: the event type; :param `eventId`: the event identifier; :param `sel`: the current selection; :param `oldsel`: the old selection. """ wx.PyCommandEvent.__init__(self, eventType, eventId) self._eventType = eventType self._sel = sel self._oldsel = oldsel self._allowed = True def SetSelection(self, s): """ Sets the event selection. :param `s`: an integer specifying the new selection. """ self._sel = s def SetOldSelection(self, s): """ Sets the event old selection. :param `s`: an integer specifying the old selection. """ self._oldsel = s def GetSelection(self): """ Returns the event selection. """ return self._sel def GetOldSelection(self): """ Returns the old event selection. """ return self._oldsel def Veto(self): """ Prevents the change announced by this event from happening. :note: It is in general a good idea to notify the user about the reasons for vetoing the change because otherwise the applications behaviour (which just refuses to do what the user wants) might be quite surprising. """ self._allowed = False def Allow(self): """ This is the opposite of L{Veto}: it explicitly allows the event to be processed. For most events it is not necessary to call this method as the events are allowed anyhow but some are forbidden by default (this will be mentioned in the corresponding event description). """ self._allowed = True def IsAllowed(self): """ Returns ``True`` if the change is allowed (L{Veto} hasn't been called) or ``False`` otherwise (if it was). """ return self._allowed # ---------------------------------------------------------------------------- # # Class ImageInfo # ---------------------------------------------------------------------------- # class ImageInfo(object): """ This class holds all the information (caption, image, etc...) belonging to a single tab in L{LabelBook}. """ def __init__(self, strCaption="", imageIndex=-1): """ Default class constructor. :param `strCaption`: the tab caption; :param `imageIndex`: the tab image index based on the assigned (set) `wx.ImageList` (if any). """ self._pos = wx.Point() self._size = wx.Size() self._strCaption = strCaption self._ImageIndex = imageIndex self._captionRect = wx.Rect() def SetCaption(self, value): """ Sets the tab caption. :param `value`: the new tab caption. """ self._strCaption = value def GetCaption(self): """ Returns the tab caption. """ return self._strCaption def SetPosition(self, value): """ Sets the tab position. :param `value`: the new tab position, an instance of `wx.Point`. """ self._pos = value def GetPosition(self): """ Returns the tab position. """ return self._pos def SetSize(self, value): """ Sets the tab size. :param `value`: the new tab size, an instance of `wx.Size`. """ self._size = value def GetSize(self): """ Returns the tab size. """ return self._size def SetImageIndex(self, value): """ Sets the tab image index. :param `value`: an index into the image list.. """ self._ImageIndex = value def GetImageIndex(self): """ Returns the tab image index. """ return self._ImageIndex def SetTextRect(self, rect): """ Sets the client rectangle available for the tab text. :param `rect`: the tab text client rectangle, an instance of `wx.Rect`. """ self._captionRect = rect def GetTextRect(self): """ Returns the client rectangle available for the tab text. """ return self._captionRect # ---------------------------------------------------------------------------- # # Class ImageContainerBase # ---------------------------------------------------------------------------- # class ImageContainerBase(wx.Panel): """ Base class for L{FlatImageBook} image container. """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="ImageContainerBase"): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.Panel` window style; :param `agwStyle`: the AGW-specific window style. This can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== :param `name`: the window name. """ self._nIndex = -1 self._nImgSize = 16 self._ImageList = None self._nHoeveredImgIdx = -1 self._bCollapsed = False self._tabAreaSize = (-1, -1) self._nPinButtonStatus = INB_PIN_NONE self._pagesInfoVec = [] self._pinBtnRect = wx.Rect() wx.Panel.__init__(self, parent, id, pos, size, style | wx.NO_BORDER | wx.NO_FULL_REPAINT_ON_RESIZE, name) def HasAGWFlag(self, flag): """ Tests for existance of flag in the style. :param `flag`: a window style. This can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== """ style = self.GetParent().GetAGWWindowStyleFlag() res = (style & flag and [True] or [False])[0] return res def ClearFlag(self, flag): """ Removes flag from the style. :param `flag`: a window style flag. :see: L{HasAGWFlag} for a list of possible window style flags. """ parent = self.GetParent() agwStyle = parent.GetAGWWindowStyleFlag() agwStyle &= ~(flag) parent.SetAGWWindowStyleFlag(agwStyle) def AssignImageList(self, imglist): """ Assigns an image list to the L{ImageContainerBase}. :param `imglist`: an instance of `wx.ImageList`. """ if imglist and imglist.GetImageCount() != 0: self._nImgSize = imglist.GetBitmap(0).GetHeight() self._ImageList = imglist parent = self.GetParent() agwStyle = parent.GetAGWWindowStyleFlag() parent.SetAGWWindowStyleFlag(agwStyle) def GetImageList(self): """ Return the image list for L{ImageContainerBase}. """ return self._ImageList def GetImageSize(self): """ Returns the image size inside the L{ImageContainerBase} image list. """ return self._nImgSize def FixTextSize(self, dc, text, maxWidth): """ Fixes the text, to fit `maxWidth` value. If the text length exceeds `maxWidth` value this function truncates it and appends two dots at the end. ("Long Long Long Text" might become "Long Long..."). :param `dc`: an instance of `wx.DC`; :param `text`: the text to fix/truncate; :param `maxWidth`: the maximum allowed width for the text, in pixels. """ return ArtManager.Get().TruncateText(dc, text, maxWidth) def CanDoBottomStyle(self): """ Allows the parent to examine the children type. Some implementation (such as L{LabelBook}), does not support top/bottom images, only left/right. """ return False def AddPage(self, caption, selected=False, imgIdx=-1): """ Adds a page to the container. :param `caption`: specifies the text for the new tab; :param `selected`: specifies whether the page should be selected; :param `imgIdx`: specifies the optional image index for the new tab. """ self._pagesInfoVec.append(ImageInfo(caption, imgIdx)) if selected or len(self._pagesInfoVec) == 1: self._nIndex = len(self._pagesInfoVec)-1 self.Refresh() def InsertPage(self, page_idx, caption, selected=False, imgIdx=-1): """ Inserts a page into the container at the specified position. :param `page_idx`: specifies the position for the new tab; :param `caption`: specifies the text for the new tab; :param `selected`: specifies whether the page should be selected; :param `imgIdx`: specifies the optional image index for the new tab. """ self._pagesInfoVec.insert(page_idx, ImageInfo(caption, imgIdx)) if selected or len(self._pagesInfoVec) == 1: self._nIndex = len(self._pagesInfoVec)-1 self.Refresh() def SetPageImage(self, page, imgIdx): """ Sets the image for the given page. :param `page`: the index of the tab; :param `imgIdx`: specifies the optional image index for the tab. """ imgInfo = self._pagesInfoVec[page] imgInfo.SetImageIndex(imgIdx) def SetPageText(self, page, text): """ Sets the tab caption for the given page. :param `page`: the index of the tab; :param `text`: the new tab caption. """ imgInfo = self._pagesInfoVec[page] imgInfo.SetCaption(text) def GetPageImage(self, page): """ Returns the image index for the given page. :param `page`: the index of the tab. """ imgInfo = self._pagesInfoVec[page] return imgInfo.GetImageIndex() def GetPageText(self, page): """ Returns the tab caption for the given page. :param `page`: the index of the tab. """ imgInfo = self._pagesInfoVec[page] return imgInfo.GetCaption() def ClearAll(self): """ Deletes all the pages in the container. """ self._pagesInfoVec = [] self._nIndex = wx.NOT_FOUND def DoDeletePage(self, page): """ Does the actual page deletion. :param `page`: the index of the tab. """ # Remove the page from the vector book = self.GetParent() self._pagesInfoVec.pop(page) if self._nIndex >= page: self._nIndex = self._nIndex - 1 # The delete page was the last first on the array, # but the book still has more pages, so we set the # active page to be the first one (0) if self._nIndex < 0 and len(self._pagesInfoVec) > 0: self._nIndex = 0 # Refresh the tabs if self._nIndex >= 0: book._bForceSelection = True book.SetSelection(self._nIndex) book._bForceSelection = False if not self._pagesInfoVec: # Erase the page container drawings dc = wx.ClientDC(self) dc.Clear() def OnSize(self, event): """ Handles the ``wx.EVT_SIZE`` event for L{ImageContainerBase}. :param `event`: a `wx.SizeEvent` event to be processed. """ self.Refresh() # Call on paint event.Skip() def OnEraseBackground(self, event): """ Handles the ``wx.EVT_ERASE_BACKGROUND`` event for L{ImageContainerBase}. :param `event`: a `wx.EraseEvent` event to be processed. :note: This method is intentionally empty to reduce flicker. """ pass def HitTest(self, pt): """ Returns the index of the tab at the specified position or ``wx.NOT_FOUND`` if ``None``, plus the flag style of L{HitTest}. :param `pt`: an instance of `wx.Point`, to test for hits. :return: The index of the tab at the specified position plus the hit test flag, which can be one of the following bits: ====================== ======= ================================ HitTest Flags Value Description ====================== ======= ================================ ``IMG_OVER_IMG`` 0 The mouse is over the tab icon ``IMG_OVER_PIN`` 1 The mouse is over the pin button ``IMG_OVER_EW_BORDER`` 2 The mouse is over the east-west book border ``IMG_NONE`` 3 Nowhere ====================== ======= ================================ """ style = self.GetParent().GetAGWWindowStyleFlag() if style & INB_USE_PIN_BUTTON: if self._pinBtnRect.Contains(pt): return -1, IMG_OVER_PIN for i in xrange(len(self._pagesInfoVec)): if self._pagesInfoVec[i].GetPosition() == wx.Point(-1, -1): break # For Web Hover style, we test the TextRect if not self.HasAGWFlag(INB_WEB_HILITE): buttonRect = wx.RectPS(self._pagesInfoVec[i].GetPosition(), self._pagesInfoVec[i].GetSize()) else: buttonRect = self._pagesInfoVec[i].GetTextRect() if buttonRect.Contains(pt): return i, IMG_OVER_IMG if self.PointOnSash(pt): return -1, IMG_OVER_EW_BORDER else: return -1, IMG_NONE def PointOnSash(self, pt): """ Tests whether pt is located on the sash. :param `pt`: an instance of `wx.Point`, to test for hits. """ # Check if we are on a the sash border cltRect = self.GetClientRect() if self.HasAGWFlag(INB_LEFT) or self.HasAGWFlag(INB_TOP): if pt.x > cltRect.x + cltRect.width - 4: return True else: if pt.x < 4: return True return False def OnMouseLeftDown(self, event): """ Handles the ``wx.EVT_LEFT_DOWN`` event for L{ImageContainerBase}. :param `event`: a `wx.MouseEvent` event to be processed. """ newSelection = -1 event.Skip() # Support for collapse/expand style = self.GetParent().GetAGWWindowStyleFlag() if style & INB_USE_PIN_BUTTON: if self._pinBtnRect.Contains(event.GetPosition()): self._nPinButtonStatus = INB_PIN_PRESSED dc = wx.ClientDC(self) self.DrawPin(dc, self._pinBtnRect, not self._bCollapsed) return # Incase panel is collapsed, there is nothing # to check if self._bCollapsed: return tabIdx, where = self.HitTest(event.GetPosition()) if where == IMG_OVER_IMG: self._nHoeveredImgIdx = -1 if tabIdx == -1: return self.GetParent().SetSelection(tabIdx) def OnMouseLeaveWindow(self, event): """ Handles the ``wx.EVT_LEAVE_WINDOW`` event for L{ImageContainerBase}. :param `event`: a `wx.MouseEvent` event to be processed. """ bRepaint = self._nHoeveredImgIdx != -1 self._nHoeveredImgIdx = -1 # Make sure the pin button status is NONE # incase we were in pin button style style = self.GetParent().GetAGWWindowStyleFlag() if style & INB_USE_PIN_BUTTON: self._nPinButtonStatus = INB_PIN_NONE dc = wx.ClientDC(self) self.DrawPin(dc, self._pinBtnRect, not self._bCollapsed) # Restore cursor wx.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) if bRepaint: self.Refresh() def OnMouseLeftUp(self, event): """ Handles the ``wx.EVT_LEFT_UP`` event for L{ImageContainerBase}. :param `event`: a `wx.MouseEvent` event to be processed. """ style = self.GetParent().GetAGWWindowStyleFlag() if style & INB_USE_PIN_BUTTON: bIsLabelContainer = not self.CanDoBottomStyle() if self._pinBtnRect.Contains(event.GetPosition()): self._nPinButtonStatus = INB_PIN_NONE self._bCollapsed = not self._bCollapsed if self._bCollapsed: # Save the current tab area width self._tabAreaSize = self.GetSize() if bIsLabelContainer: self.SetSizeHints(20, self._tabAreaSize.y) else: if style & INB_BOTTOM or style & INB_TOP: self.SetSizeHints(self._tabAreaSize.x, 20) else: self.SetSizeHints(20, self._tabAreaSize.y) else: if bIsLabelContainer: self.SetSizeHints(self._tabAreaSize.x, -1) else: # Restore the tab area size if style & INB_BOTTOM or style & INB_TOP: self.SetSizeHints(-1, self._tabAreaSize.y) else: self.SetSizeHints(self._tabAreaSize.x, -1) self.GetParent().GetSizer().Layout() self.Refresh() return def OnMouseMove(self, event): """ Handles the ``wx.EVT_MOTION`` event for L{ImageContainerBase}. :param `event`: a `wx.MouseEvent` event to be processed. """ style = self.GetParent().GetAGWWindowStyleFlag() if style & INB_USE_PIN_BUTTON: # Check to see if we are in the pin button rect if not self._pinBtnRect.Contains(event.GetPosition()) and self._nPinButtonStatus == INB_PIN_PRESSED: self._nPinButtonStatus = INB_PIN_NONE dc = wx.ClientDC(self) self.DrawPin(dc, self._pinBtnRect, not self._bCollapsed) imgIdx, where = self.HitTest(event.GetPosition()) self._nHoeveredImgIdx = imgIdx if not self._bCollapsed: if self._nHoeveredImgIdx >= 0 and self._nHoeveredImgIdx < len(self._pagesInfoVec): # Change the cursor to be Hand if self.HasAGWFlag(INB_WEB_HILITE) and self._nHoeveredImgIdx != self._nIndex: wx.SetCursor(wx.StockCursor(wx.CURSOR_HAND)) else: # Restore the cursor only if we have the Web hover style set, # and we are not currently hovering the sash if self.HasAGWFlag(INB_WEB_HILITE) and not self.PointOnSash(event.GetPosition()): wx.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) # Dont display hover effect when hoevering the # selected label if self._nHoeveredImgIdx == self._nIndex: self._nHoeveredImgIdx = -1 self.Refresh() def DrawPin(self, dc, rect, downPin): """ Draw a pin button, that allows collapsing of the image panel. :param `dc`: an instance of `wx.DC`; :param `rect`: the pin button client rectangle; :param `downPin`: ``True`` if the pin button is facing downwards, ``False`` if it is facing leftwards. """ # Set the bitmap according to the button status if downPin: pinBmp = wx.BitmapFromXPMData(pin_down_xpm) else: pinBmp = wx.BitmapFromXPMData(pin_left_xpm) xx = rect.x + 2 if self._nPinButtonStatus in [INB_PIN_HOVER, INB_PIN_NONE]: dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetPen(wx.BLACK_PEN) dc.DrawRectangle(xx, rect.y, 16, 16) # Draw upper and left border with grey colour dc.SetPen(wx.WHITE_PEN) dc.DrawLine(xx, rect.y, xx + 16, rect.y) dc.DrawLine(xx, rect.y, xx, rect.y + 16) elif self._nPinButtonStatus == INB_PIN_PRESSED: dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetPen(wx.Pen(wx.NamedColour("LIGHT GREY"))) dc.DrawRectangle(xx, rect.y, 16, 16) # Draw upper and left border with grey colour dc.SetPen(wx.BLACK_PEN) dc.DrawLine(xx, rect.y, xx + 16, rect.y) dc.DrawLine(xx, rect.y, xx, rect.y + 16) # Set the masking pinBmp.SetMask(wx.Mask(pinBmp, wx.WHITE)) # Draw the new bitmap dc.DrawBitmap(pinBmp, xx, rect.y, True) # Save the pin rect self._pinBtnRect = rect # ---------------------------------------------------------------------------- # # Class ImageContainer # ---------------------------------------------------------------------------- # class ImageContainer(ImageContainerBase): """ Base class for L{FlatImageBook} image container. """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="ImageContainer"): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.Panel` window style; :param `agwStyle`: the AGW-specific window style. This can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== :param `name`: the window name. """ ImageContainerBase.__init__(self, parent, id, pos, size, style, agwStyle, name) self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) self.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_MOTION, self.OnMouseMove) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeaveWindow) def OnSize(self, event): """ Handles the ``wx.EVT_SIZE`` event for L{ImageContainer}. :param `event`: a `wx.SizeEvent` event to be processed. """ ImageContainerBase.OnSize(self, event) event.Skip() def OnMouseLeftDown(self, event): """ Handles the ``wx.EVT_LEFT_DOWN`` event for L{ImageContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ ImageContainerBase.OnMouseLeftDown(self, event) event.Skip() def OnMouseLeftUp(self, event): """ Handles the ``wx.EVT_LEFT_UP`` event for L{ImageContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ ImageContainerBase.OnMouseLeftUp(self, event) event.Skip() def OnEraseBackground(self, event): """ Handles the ``wx.EVT_ERASE_BACKGROUND`` event for L{ImageContainer}. :param `event`: a `wx.EraseEvent` event to be processed. """ ImageContainerBase.OnEraseBackground(self, event) def OnMouseMove(self, event): """ Handles the ``wx.EVT_MOTION`` event for L{ImageContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ ImageContainerBase.OnMouseMove(self, event) event.Skip() def OnMouseLeaveWindow(self, event): """ Handles the ``wx.EVT_LEAVE_WINDOW`` event for L{ImageContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ ImageContainerBase.OnMouseLeaveWindow(self, event) event.Skip() def CanDoBottomStyle(self): """ Allows the parent to examine the children type. Some implementation (such as L{LabelBook}), does not support top/bottom images, only left/right. """ return True def OnPaint(self, event): """ Handles the ``wx.EVT_PAINT`` event for L{ImageContainer}. :param `event`: a `wx.PaintEvent` event to be processed. """ dc = wx.BufferedPaintDC(self) style = self.GetParent().GetAGWWindowStyleFlag() backBrush = wx.WHITE_BRUSH if style & INB_BORDER: borderPen = wx.Pen(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DSHADOW)) else: borderPen = wx.TRANSPARENT_PEN size = self.GetSize() # Background dc.SetBrush(backBrush) borderPen.SetWidth(1) dc.SetPen(borderPen) dc.DrawRectangle(0, 0, size.x, size.y) bUsePin = (style & INB_USE_PIN_BUTTON and [True] or [False])[0] if bUsePin: # Draw the pin button clientRect = self.GetClientRect() pinRect = wx.Rect(clientRect.GetX() + clientRect.GetWidth() - 20, 2, 20, 20) self.DrawPin(dc, pinRect, not self._bCollapsed) if self._bCollapsed: return borderPen = wx.BLACK_PEN borderPen.SetWidth(1) dc.SetPen(borderPen) dc.DrawLine(0, size.y, size.x, size.y) dc.DrawPoint(0, size.y) clientSize = 0 bUseYcoord = (style & INB_RIGHT or style & INB_LEFT) if bUseYcoord: clientSize = size.GetHeight() else: clientSize = size.GetWidth() # We reserver 20 pixels for the 'pin' button # The drawing of the images start position. This is # depenedent of the style, especially when Pin button # style is requested if bUsePin: if style & INB_TOP or style & INB_BOTTOM: pos = (style & INB_BORDER and [0] or [1])[0] else: pos = (style & INB_BORDER and [20] or [21])[0] else: pos = (style & INB_BORDER and [0] or [1])[0] nPadding = 4 # Pad text with 2 pixels on the left and right nTextPaddingLeft = 2 count = 0 for i in xrange(len(self._pagesInfoVec)): count = count + 1 # incase the 'fit button' style is applied, we set the rectangle width to the # text width plus padding # Incase the style IS applied, but the style is either LEFT or RIGHT # we ignore it normalFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) dc.SetFont(normalFont) textWidth, textHeight = dc.GetTextExtent(self._pagesInfoVec[i].GetCaption()) # Restore font to be normal normalFont.SetWeight(wx.FONTWEIGHT_NORMAL) dc.SetFont(normalFont) # Default values for the surronounding rectangle # around a button rectWidth = self._nImgSize * 2 # To avoid the recangle to 'touch' the borders rectHeight = self._nImgSize * 2 # Incase the style requires non-fixed button (fit to text) # recalc the rectangle width if style & INB_FIT_BUTTON and \ not ((style & INB_LEFT) or (style & INB_RIGHT)) and \ not self._pagesInfoVec[i].GetCaption() == "" and \ not (style & INB_SHOW_ONLY_IMAGES): rectWidth = ((textWidth + nPadding * 2) > rectWidth and [nPadding * 2 + textWidth] or [rectWidth])[0] # Make the width an even number if rectWidth % 2 != 0: rectWidth += 1 # Check that we have enough space to draw the button # If Pin button is used, consider its space as well (applicable for top/botton style) # since in the left/right, its size is already considered in 'pos' pinBtnSize = (bUsePin and [20] or [0])[0] if pos + rectWidth + pinBtnSize > clientSize: break # Calculate the button rectangle modRectWidth = ((style & INB_LEFT or style & INB_RIGHT) and [rectWidth - 2] or [rectWidth])[0] modRectHeight = ((style & INB_LEFT or style & INB_RIGHT) and [rectHeight] or [rectHeight - 2])[0] if bUseYcoord: buttonRect = wx.Rect(1, pos, modRectWidth, modRectHeight) else: buttonRect = wx.Rect(pos , 1, modRectWidth, modRectHeight) # Check if we need to draw a rectangle around the button if self._nIndex == i: # Set the colours penColour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION) brushColour = ArtManager.Get().LightColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION), 75) dc.SetPen(wx.Pen(penColour)) dc.SetBrush(wx.Brush(brushColour)) # Fix the surrounding of the rect if border is set if style & INB_BORDER: if style & INB_TOP or style & INB_BOTTOM: buttonRect = wx.Rect(buttonRect.x + 1, buttonRect.y, buttonRect.width - 1, buttonRect.height) else: buttonRect = wx.Rect(buttonRect.x, buttonRect.y + 1, buttonRect.width, buttonRect.height - 1) dc.DrawRectangleRect(buttonRect) if self._nHoeveredImgIdx == i: # Set the colours penColour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION) brushColour = ArtManager.Get().LightColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION), 90) dc.SetPen(wx.Pen(penColour)) dc.SetBrush(wx.Brush(brushColour)) # Fix the surrounding of the rect if border is set if style & INB_BORDER: if style & INB_TOP or style & INB_BOTTOM: buttonRect = wx.Rect(buttonRect.x + 1, buttonRect.y, buttonRect.width - 1, buttonRect.height) else: buttonRect = wx.Rect(buttonRect.x, buttonRect.y + 1, buttonRect.width, buttonRect.height - 1) dc.DrawRectangleRect(buttonRect) if bUseYcoord: rect = wx.Rect(0, pos, rectWidth, rectWidth) else: rect = wx.Rect(pos, 0, rectWidth, rectWidth) # Incase user set both flags: # INB_SHOW_ONLY_TEXT and INB_SHOW_ONLY_IMAGES # We override them to display both if style & INB_SHOW_ONLY_TEXT and style & INB_SHOW_ONLY_IMAGES: style ^= INB_SHOW_ONLY_TEXT style ^= INB_SHOW_ONLY_IMAGES self.GetParent().SetAGWWindowStyleFlag(style) # Draw the caption and text imgTopPadding = 10 if not style & INB_SHOW_ONLY_TEXT and self._pagesInfoVec[i].GetImageIndex() != -1: if bUseYcoord: imgXcoord = self._nImgSize / 2 imgYcoord = (style & INB_SHOW_ONLY_IMAGES and [pos + self._nImgSize / 2] or [pos + imgTopPadding])[0] else: imgXcoord = pos + (rectWidth / 2) - (self._nImgSize / 2) imgYcoord = (style & INB_SHOW_ONLY_IMAGES and [self._nImgSize / 2] or [imgTopPadding])[0] self._ImageList.Draw(self._pagesInfoVec[i].GetImageIndex(), dc, imgXcoord, imgYcoord, wx.IMAGELIST_DRAW_TRANSPARENT, True) # Draw the text if not style & INB_SHOW_ONLY_IMAGES and not self._pagesInfoVec[i].GetCaption() == "": dc.SetFont(normalFont) # Check if the text can fit the size of the rectangle, # if not truncate it fixedText = self._pagesInfoVec[i].GetCaption() if not style & INB_FIT_BUTTON or (style & INB_LEFT or (style & INB_RIGHT)): fixedText = self.FixTextSize(dc, self._pagesInfoVec[i].GetCaption(), self._nImgSize *2 - 4) # Update the length of the text textWidth, textHeight = dc.GetTextExtent(fixedText) if bUseYcoord: textOffsetX = ((rectWidth - textWidth) / 2 ) textOffsetY = (not style & INB_SHOW_ONLY_TEXT and [pos + self._nImgSize + imgTopPadding + 3] or \ [pos + ((self._nImgSize * 2 - textHeight) / 2 )])[0] else: textOffsetX = (rectWidth - textWidth) / 2 + pos + nTextPaddingLeft textOffsetY = (not style & INB_SHOW_ONLY_TEXT and [self._nImgSize + imgTopPadding + 3] or \ [((self._nImgSize * 2 - textHeight) / 2 )])[0] dc.SetTextForeground(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWTEXT)) dc.DrawText(fixedText, textOffsetX, textOffsetY) # Update the page info self._pagesInfoVec[i].SetPosition(buttonRect.GetPosition()) self._pagesInfoVec[i].SetSize(buttonRect.GetSize()) pos += rectWidth # Update all buttons that can not fit into the screen as non-visible for ii in xrange(count, len(self._pagesInfoVec)): self._pagesInfoVec[ii].SetPosition(wx.Point(-1, -1)) # Draw the pin button if bUsePin: clientRect = self.GetClientRect() pinRect = wx.Rect(clientRect.GetX() + clientRect.GetWidth() - 20, 2, 20, 20) self.DrawPin(dc, pinRect, not self._bCollapsed) # ---------------------------------------------------------------------------- # # Class LabelContainer # ---------------------------------------------------------------------------- # class LabelContainer(ImageContainerBase): """ Base class for L{LabelBook}. """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="LabelContainer"): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.Panel` window style; :param `agwStyle`: the AGW-specific window style. This can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== :param `name`: the window name. """ ImageContainerBase.__init__(self, parent, id, pos, size, style, agwStyle, name) self._nTabAreaWidth = 100 self._oldCursor = wx.NullCursor self._coloursMap = {} self._skin = wx.NullBitmap self._sashRect = wx.Rect() self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseLeftDown) self.Bind(wx.EVT_LEFT_UP, self.OnMouseLeftUp) self.Bind(wx.EVT_MOTION, self.OnMouseMove) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeaveWindow) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) def OnSize(self, event): """ Handles the ``wx.EVT_SIZE`` event for L{LabelContainer}. :param `event`: a `wx.SizeEvent` event to be processed. """ ImageContainerBase.OnSize(self, event) event.Skip() def OnEraseBackground(self, event): """ Handles the ``wx.EVT_ERASE_BACKGROUND`` event for L{LabelContainer}. :param `event`: a `wx.EraseEvent` event to be processed. """ ImageContainerBase.OnEraseBackground(self, event) def GetTabAreaWidth(self): """ Returns the width of the tab area. """ return self._nTabAreaWidth def SetTabAreaWidth(self, width): """ Sets the width of the tab area. :param `width`: the width of the tab area, in pixels. """ self._nTabAreaWidth = width def CanDoBottomStyle(self): """ Allows the parent to examine the children type. Some implementation (such as L{LabelBook}), does not support top/bottom images, only left/right. """ return False def SetBackgroundBitmap(self, bmp): """ Sets the background bitmap for the control. :param `bmp`: a valid `wx.Bitmap` object. """ self._skin = bmp def OnPaint(self, event): """ Handles the ``wx.EVT_PAINT`` event for L{LabelContainer}. :param `event`: a `wx.PaintEvent` event to be processed. """ style = self.GetParent().GetAGWWindowStyleFlag() dc = wx.BufferedPaintDC(self) backBrush = wx.Brush(self._coloursMap[INB_TAB_AREA_BACKGROUND_COLOUR]) if self.HasAGWFlag(INB_BORDER): borderPen = wx.Pen(self._coloursMap[INB_TABS_BORDER_COLOUR]) else: borderPen = wx.TRANSPARENT_PEN size = self.GetSize() # Set the pen & brush dc.SetBrush(backBrush) dc.SetPen(borderPen) # Incase user set both flags, we override them to display both # INB_SHOW_ONLY_TEXT and INB_SHOW_ONLY_IMAGES if style & INB_SHOW_ONLY_TEXT and style & INB_SHOW_ONLY_IMAGES: style ^= INB_SHOW_ONLY_TEXT style ^= INB_SHOW_ONLY_IMAGES self.GetParent().SetAGWWindowStyleFlag(style) if self.HasAGWFlag(INB_GRADIENT_BACKGROUND) and not self._skin.Ok(): # Draw graident in the background area startColour = self._coloursMap[INB_TAB_AREA_BACKGROUND_COLOUR] endColour = ArtManager.Get().LightColour(self._coloursMap[INB_TAB_AREA_BACKGROUND_COLOUR], 50) ArtManager.Get().PaintStraightGradientBox(dc, wx.Rect(0, 0, size.x / 2, size.y), startColour, endColour, False) ArtManager.Get().PaintStraightGradientBox(dc, wx.Rect(size.x / 2, 0, size.x / 2, size.y), endColour, startColour, False) else: # Draw the border and background if self._skin.Ok(): dc.SetBrush(wx.TRANSPARENT_BRUSH) self.DrawBackgroundBitmap(dc) dc.DrawRectangleRect(wx.Rect(0, 0, size.x, size.y)) # Draw border if self.HasAGWFlag(INB_BORDER) and self.HasAGWFlag(INB_GRADIENT_BACKGROUND): # Just draw the border with transparent brush dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.DrawRectangleRect(wx.Rect(0, 0, size.x, size.y)) bUsePin = (self.HasAGWFlag(INB_USE_PIN_BUTTON) and [True] or [False])[0] if bUsePin: # Draw the pin button clientRect = self.GetClientRect() pinRect = wx.Rect(clientRect.GetX() + clientRect.GetWidth() - 20, 2, 20, 20) self.DrawPin(dc, pinRect, not self._bCollapsed) if self._bCollapsed: return dc.SetPen(wx.BLACK_PEN) self.SetSizeHints(self._nTabAreaWidth, -1) # We reserve 20 pixels for the pin button posy = 20 count = 0 for i in xrange(len(self._pagesInfoVec)): count = count+1 # Default values for the surronounding rectangle # around a button rectWidth = self._nTabAreaWidth if self.HasAGWFlag(INB_SHOW_ONLY_TEXT): font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) font.SetPointSize(font.GetPointSize() * self.GetParent().GetFontSizeMultiple()) if self.GetParent().GetFontBold(): font.SetWeight(wx.FONTWEIGHT_BOLD) dc.SetFont(font) w, h = dc.GetTextExtent(self._pagesInfoVec[i].GetCaption()) rectHeight = h * 2 else: rectHeight = self._nImgSize * 2 # Check that we have enough space to draw the button if posy + rectHeight > size.GetHeight(): break # Calculate the button rectangle posx = 0 buttonRect = wx.Rect(posx, posy, rectWidth, rectHeight) indx = self._pagesInfoVec[i].GetImageIndex() if indx == -1: bmp = wx.NullBitmap else: bmp = self._ImageList.GetBitmap(indx) self.DrawLabel(dc, buttonRect, self._pagesInfoVec[i].GetCaption(), bmp, self._pagesInfoVec[i], self.HasAGWFlag(INB_LEFT) or self.HasAGWFlag(INB_TOP), i, self._nIndex == i, self._nHoeveredImgIdx == i) posy += rectHeight # Update all buttons that can not fit into the screen as non-visible for ii in xrange(count, len(self._pagesInfoVec)): self._pagesInfoVec[i].SetPosition(wx.Point(-1, -1)) if bUsePin: clientRect = self.GetClientRect() pinRect = wx.Rect(clientRect.GetX() + clientRect.GetWidth() - 20, 2, 20, 20) self.DrawPin(dc, pinRect, not self._bCollapsed) def DrawBackgroundBitmap(self, dc): """ Draws a bitmap as the background of the control. :param `dc`: an instance of `wx.DC`. """ clientRect = self.GetClientRect() width = clientRect.GetWidth() height = clientRect.GetHeight() coveredY = coveredX = 0 xstep = self._skin.GetWidth() ystep = self._skin.GetHeight() bmpRect = wx.Rect(0, 0, xstep, ystep) if bmpRect != clientRect: mem_dc = wx.MemoryDC() bmp = wx.EmptyBitmap(width, height) mem_dc.SelectObject(bmp) while coveredY < height: while coveredX < width: mem_dc.DrawBitmap(self._skin, coveredX, coveredY, True) coveredX += xstep coveredX = 0 coveredY += ystep mem_dc.SelectObject(wx.NullBitmap) #self._skin = bmp dc.DrawBitmap(bmp, 0, 0) else: dc.DrawBitmap(self._skin, 0, 0) def OnMouseLeftUp(self, event): """ Handles the ``wx.EVT_LEFT_UP`` event for L{LabelContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ if self.HasAGWFlag(INB_NO_RESIZE): ImageContainerBase.OnMouseLeftUp(self, event) return if self.HasCapture(): self.ReleaseMouse() # Sash was being dragged? if not self._sashRect.IsEmpty(): # Remove sash ArtManager.Get().DrawDragSash(self._sashRect) self.Resize(event) self._sashRect = wx.Rect() return self._sashRect = wx.Rect() # Restore cursor if self._oldCursor.Ok(): wx.SetCursor(self._oldCursor) self._oldCursor = wx.NullCursor ImageContainerBase.OnMouseLeftUp(self, event) def Resize(self, event): """ Actually resizes the tab area. :param `event`: an instance of `wx.SizeEvent`. """ # Resize our size self._tabAreaSize = self.GetSize() newWidth = self._tabAreaSize.x x = event.GetX() if self.HasAGWFlag(INB_BOTTOM) or self.HasAGWFlag(INB_RIGHT): newWidth -= event.GetX() else: newWidth = x if newWidth < 100: # Dont allow width to be lower than that newWidth = 100 self.SetSizeHints(newWidth, self._tabAreaSize.y) # Update the tab new area width self._nTabAreaWidth = newWidth self.GetParent().Freeze() self.GetParent().GetSizer().Layout() self.GetParent().Thaw() def OnMouseMove(self, event): """ Handles the ``wx.EVT_MOTION`` event for L{LabelContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ if self.HasAGWFlag(INB_NO_RESIZE): ImageContainerBase.OnMouseMove(self, event) return # Remove old sash if not self._sashRect.IsEmpty(): ArtManager.Get().DrawDragSash(self._sashRect) if event.LeftIsDown(): if not self._sashRect.IsEmpty(): # Progress sash, and redraw it clientRect = self.GetClientRect() pt = self.ClientToScreen(wx.Point(event.GetX(), 0)) self._sashRect = wx.RectPS(pt, wx.Size(4, clientRect.height)) ArtManager.Get().DrawDragSash(self._sashRect) else: # Sash is not being dragged if self._oldCursor.Ok(): wx.SetCursor(self._oldCursor) self._oldCursor = wx.NullCursor else: if self.HasCapture(): self.ReleaseMouse() if self.PointOnSash(event.GetPosition()): # Change cursor to EW cursor self._oldCursor = self.GetCursor() wx.SetCursor(wx.StockCursor(wx.CURSOR_SIZEWE)) elif self._oldCursor.Ok(): wx.SetCursor(self._oldCursor) self._oldCursor = wx.NullCursor self._sashRect = wx.Rect() ImageContainerBase.OnMouseMove(self, event) def OnMouseLeftDown(self, event): """ Handles the ``wx.EVT_LEFT_DOWN`` event for L{LabelContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ if self.HasAGWFlag(INB_NO_RESIZE): ImageContainerBase.OnMouseLeftDown(self, event) return imgIdx, where = self.HitTest(event.GetPosition()) if IMG_OVER_EW_BORDER == where and not self._bCollapsed: # We are over the sash if not self._sashRect.IsEmpty(): ArtManager.Get().DrawDragSash(self._sashRect) else: # first time, begin drawing sash self.CaptureMouse() # Change mouse cursor self._oldCursor = self.GetCursor() wx.SetCursor(wx.StockCursor(wx.CURSOR_SIZEWE)) clientRect = self.GetClientRect() pt = self.ClientToScreen(wx.Point(event.GetX(), 0)) self._sashRect = wx.RectPS(pt, wx.Size(4, clientRect.height)) ArtManager.Get().DrawDragSash(self._sashRect) else: ImageContainerBase.OnMouseLeftDown(self, event) def OnMouseLeaveWindow(self, event): """ Handles the ``wx.EVT_LEAVE_WINDOW`` event for L{LabelContainer}. :param `event`: a `wx.MouseEvent` event to be processed. """ if self.HasAGWFlag(INB_NO_RESIZE): ImageContainerBase.OnMouseLeaveWindow(self, event) return # If Sash is being dragged, ignore this event if not self.HasCapture(): ImageContainerBase.OnMouseLeaveWindow(self, event) def DrawRegularHover(self, dc, rect): """ Draws a rounded rectangle around the current tab. :param `dc`: an instance of `wx.DC`; :param `rect`: the current tab client rectangle. """ # The hovered tab with default border dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetPen(wx.Pen(wx.WHITE)) # We draw CCW if self.HasAGWFlag(INB_RIGHT) or self.HasAGWFlag(INB_TOP): # Right images # Upper line dc.DrawLine(rect.x + 1, rect.y, rect.x + rect.width, rect.y) # Right line (white) dc.DrawLine(rect.x + rect.width, rect.y, rect.x + rect.width, rect.y + rect.height) # Bottom diagnol - we change pen dc.SetPen(wx.Pen(self._coloursMap[INB_TABS_BORDER_COLOUR])) # Bottom line dc.DrawLine(rect.x + rect.width, rect.y + rect.height, rect.x, rect.y + rect.height) else: # Left images # Upper line white dc.DrawLine(rect.x, rect.y, rect.x + rect.width - 1, rect.y) # Left line dc.DrawLine(rect.x, rect.y, rect.x, rect.y + rect.height) # Bottom diagnol, we change the pen dc.SetPen(wx.Pen(self._coloursMap[INB_TABS_BORDER_COLOUR])) # Bottom line dc.DrawLine(rect.x, rect.y + rect.height, rect.x + rect.width, rect.y + rect.height) def DrawWebHover(self, dc, caption, xCoord, yCoord): """ Draws a web style hover effect (cursor set to hand & text is underlined). :param `dc`: an instance of `wx.DC`; :param `caption`: the tab caption text; :param `xCoord`: the x position of the tab caption; :param `yCoord`: the y position of the tab caption. """ # Redraw the text with underlined font underLinedFont = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) underLinedFont.SetPointSize(underLinedFont.GetPointSize() * self.GetParent().GetFontSizeMultiple()) if self.GetParent().GetFontBold(): underLinedFont.SetWeight(wx.FONTWEIGHT_BOLD) underLinedFont.SetUnderlined(True) dc.SetFont(underLinedFont) dc.DrawText(caption, xCoord, yCoord) def SetColour(self, which, colour): """ Sets a colour for a parameter. :param `which`: can be one of the following parameters: ================================== ======= ================================== Colour Key Value Description ================================== ======= ================================== ``INB_TAB_AREA_BACKGROUND_COLOUR`` 100 The tab area background colour ``INB_ACTIVE_TAB_COLOUR`` 101 The active tab background colour ``INB_TABS_BORDER_COLOUR`` 102 The tabs border colour ``INB_TEXT_COLOUR`` 103 The tab caption text colour ``INB_ACTIVE_TEXT_COLOUR`` 104 The active tab caption text colour ``INB_HILITE_TAB_COLOUR`` 105 The tab caption highlight text colour ================================== ======= ================================== :param `colour`: a valid `wx.Colour` object. """ self._coloursMap[which] = colour def GetColour(self, which): """ Returns a colour for a parameter. :param `which`: the colour key. :see: L{SetColour} for a list of valid colour keys. """ if not self._coloursMap.has_key(which): return wx.Colour() return self._coloursMap[which] def InitializeColours(self): """ Initializes the colours map to be used for this control. """ # Initialize map colours self._coloursMap.update({INB_TAB_AREA_BACKGROUND_COLOUR: ArtManager.Get().LightColour(ArtManager.Get().FrameColour(), 50)}) self._coloursMap.update({INB_ACTIVE_TAB_COLOUR: ArtManager.Get().GetMenuFaceColour()}) self._coloursMap.update({INB_TABS_BORDER_COLOUR: wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DSHADOW)}) self._coloursMap.update({INB_HILITE_TAB_COLOUR: wx.NamedColour("LIGHT BLUE")}) self._coloursMap.update({INB_TEXT_COLOUR: wx.WHITE}) self._coloursMap.update({INB_ACTIVE_TEXT_COLOUR: wx.BLACK}) # dont allow bright colour one on the other if not ArtManager.Get().IsDark(self._coloursMap[INB_TAB_AREA_BACKGROUND_COLOUR]) and \ not ArtManager.Get().IsDark(self._coloursMap[INB_TEXT_COLOUR]): self._coloursMap[INB_TEXT_COLOUR] = ArtManager.Get().DarkColour(self._coloursMap[INB_TEXT_COLOUR], 100) def DrawLabel(self, dc, rect, text, bmp, imgInfo, orientationLeft, imgIdx, selected, hover): """ Draws a label using the specified dc. :param `dc`: an instance of `wx.DC`; :param `rect`: the text client rectangle; :param `text`: the actual text string; :param `bmp`: a bitmap to be drawn next to the text; :param `imgInfo`: an instance of L{ImageInfo}; :param `orientationLeft`: ``True`` if the book has the ``INB_RIGHT`` or ``INB_LEFT`` style set; :param `imgIdx`: the tab image index; :param `selected`: ``True`` if the tab is selected, ``False`` otherwise; :param `hover`: ``True`` if the tab is being hovered with the mouse, ``False`` otherwise. """ dcsaver = DCSaver(dc) nPadding = 6 if orientationLeft: rect.x += nPadding rect.width -= nPadding else: rect.width -= nPadding textRect = wx.Rect(*rect) imgRect = wx.Rect(*rect) font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) font.SetPointSize(font.GetPointSize() * self.GetParent().GetFontSizeMultiple()) if self.GetParent().GetFontBold(): font.SetWeight(wx.FONTWEIGHT_BOLD) dc.SetFont(font) # First we define the rectangle for the text w, h = dc.GetTextExtent(text) #------------------------------------------------------------------------- # Label layout: # [ nPadding | Image | nPadding | Text | nPadding ] #------------------------------------------------------------------------- # Text bounding rectangle textRect.x += nPadding textRect.y = rect.y + (rect.height - h)/2 textRect.width = rect.width - 2 * nPadding if bmp.Ok() and not self.HasAGWFlag(INB_SHOW_ONLY_TEXT): textRect.x += (bmp.GetWidth() + nPadding) textRect.width -= (bmp.GetWidth() + nPadding) textRect.height = h # Truncate text if needed caption = ArtManager.Get().TruncateText(dc, text, textRect.width) # Image bounding rectangle if bmp.Ok() and not self.HasAGWFlag(INB_SHOW_ONLY_TEXT): imgRect.x += nPadding imgRect.width = bmp.GetWidth() imgRect.y = rect.y + (rect.height - bmp.GetHeight())/2 imgRect.height = bmp.GetHeight() # Draw bounding rectangle if selected: # First we colour the tab dc.SetBrush(wx.Brush(self._coloursMap[INB_ACTIVE_TAB_COLOUR])) if self.HasAGWFlag(INB_BORDER): dc.SetPen(wx.Pen(self._coloursMap[INB_TABS_BORDER_COLOUR])) else: dc.SetPen(wx.Pen(self._coloursMap[INB_ACTIVE_TAB_COLOUR])) labelRect = wx.Rect(*rect) if orientationLeft: labelRect.width += 3 else: labelRect.width += 3 labelRect.x -= 3 dc.DrawRoundedRectangleRect(labelRect, 3) if not orientationLeft and self.HasAGWFlag(INB_DRAW_SHADOW): dc.SetPen(wx.BLACK_PEN) dc.DrawPoint(labelRect.x + labelRect.width - 1, labelRect.y + labelRect.height - 1) # Draw the text & bitmap if caption != "": if selected: dc.SetTextForeground(self._coloursMap[INB_ACTIVE_TEXT_COLOUR]) else: dc.SetTextForeground(self._coloursMap[INB_TEXT_COLOUR]) dc.DrawText(caption, textRect.x, textRect.y) imgInfo.SetTextRect(textRect) else: imgInfo.SetTextRect(wx.Rect()) if bmp.Ok() and not self.HasAGWFlag(INB_SHOW_ONLY_TEXT): dc.DrawBitmap(bmp, imgRect.x, imgRect.y, True) # Drop shadow if self.HasAGWFlag(INB_DRAW_SHADOW) and selected: sstyle = 0 if orientationLeft: sstyle = BottomShadow else: sstyle = BottomShadowFull | RightShadow if self.HasAGWFlag(INB_WEB_HILITE): # Always drop shadow for this style ArtManager.Get().DrawBitmapShadow(dc, rect, sstyle) else: if imgIdx+1 != self._nHoeveredImgIdx: ArtManager.Get().DrawBitmapShadow(dc, rect, sstyle) # Draw hover effect if hover: if self.HasAGWFlag(INB_WEB_HILITE) and caption != "": self.DrawWebHover(dc, caption, textRect.x, textRect.y) else: self.DrawRegularHover(dc, rect) # Update the page information bout position and size imgInfo.SetPosition(rect.GetPosition()) imgInfo.SetSize(rect.GetSize()) # ---------------------------------------------------------------------------- # # Class FlatBookBase # ---------------------------------------------------------------------------- # class FlatBookBase(wx.Panel): """ Base class for the containing window for L{LabelBook} and L{FlatImageBook}. """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="FlatBookBase"): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.Panel` window style; :param `agwStyle`: the AGW-specific window style. This can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== :param `name`: the window name. """ self._pages = None self._bInitializing = True self._pages = None self._bForceSelection = False self._windows = [] self._fontSizeMultiple = 1.0 self._fontBold = False style |= wx.TAB_TRAVERSAL self._agwStyle = agwStyle wx.Panel.__init__(self, parent, id, pos, size, style, name) self._bInitializing = False def SetAGWWindowStyleFlag(self, agwStyle): """ Sets the window style. :param `agwStyle`: can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== """ self._agwStyle = agwStyle # Check that we are not in initialization process if self._bInitializing: return if not self._pages: return # Detach the windows attached to the sizer if self.GetSelection() >= 0: self._mainSizer.Detach(self._windows[self.GetSelection()]) self._mainSizer.Detach(self._pages) # Create new sizer with the requested orientaion className = self.GetName() if className == "LabelBook": self._mainSizer = wx.BoxSizer(wx.HORIZONTAL) else: if agwStyle & INB_LEFT or agwStyle & INB_RIGHT: self._mainSizer = wx.BoxSizer(wx.HORIZONTAL) else: self._mainSizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self._mainSizer) # Add the tab container and the separator self._mainSizer.Add(self._pages, 0, wx.EXPAND) if className == "FlatImageBook": if agwStyle & INB_LEFT or agwStyle & INB_RIGHT: self._pages.SetSizeHints(self._pages._nImgSize * 2, -1) else: self._pages.SetSizeHints(-1, self._pages._nImgSize * 2) # Attach the windows back to the sizer to the sizer if self.GetSelection() >= 0: self.DoSetSelection(self._windows[self.GetSelection()]) if agwStyle & INB_FIT_LABELTEXT: self.ResizeTabArea() self._mainSizer.Layout() dummy = wx.SizeEvent() wx.PostEvent(self, dummy) self._pages.Refresh() def GetAGWWindowStyleFlag(self): """ Returns the L{FlatBookBase} window style. :see: L{SetAGWWindowStyleFlag} for a list of possible window style flags. """ return self._agwStyle def HasAGWFlag(self, flag): """ Returns whether a flag is present in the L{FlatBookBase} style. :param `flag`: one of the possible L{FlatBookBase} window styles. :see: L{SetAGWWindowStyleFlag} for a list of possible window style flags. """ agwStyle = self.GetAGWWindowStyleFlag() res = (agwStyle & flag and [True] or [False])[0] return res def AddPage(self, page, text, select=False, imageId=-1): """ Adds a page to the book. :param `page`: specifies the new page; :param `text`: specifies the text for the new page; :param `select`: specifies whether the page should be selected; :param `imageId`: specifies the optional image index for the new page. :note: The call to this function generates the page changing events. """ if not page: return page.Reparent(self) self._windows.append(page) if select or len(self._windows) == 1: self.DoSetSelection(page) else: page.Hide() self._pages.AddPage(text, select, imageId) self.ResizeTabArea() self.Refresh() def InsertPage(self, page_idx, page, text, select=False, imageId=-1): """ Inserts a page into the book at the specified position. :param `page_idx`: specifies the position for the new page; :param `page`: specifies the new page; :param `text`: specifies the text for the new page; :param `select`: specifies whether the page should be selected; :param `imageId`: specifies the optional image index for the new page. :note: The call to this function generates the page changing events. """ if not page: return page.Reparent(self) self._windows.insert(page_idx, page) if select or len(self._windows) == 1: self.DoSetSelection(page) else: page.Hide() self._pages.InsertPage(page_idx, text, select, imageId) self.ResizeTabArea() self.Refresh() def DeletePage(self, page): """ Deletes the specified page, and the associated window. :param `page`: an integer specifying the page to be deleted. :note: The call to this function generates the page changing events. """ if page >= len(self._windows) or page < 0: return # Fire a closing event event = ImageNotebookEvent(wxEVT_IMAGENOTEBOOK_PAGE_CLOSING, self.GetId()) event.SetSelection(page) event.SetEventObject(self) self.GetEventHandler().ProcessEvent(event) # The event handler allows it? if not event.IsAllowed(): return False self.Freeze() # Delete the requested page pageRemoved = self._windows[page] # If the page is the current window, remove it from the sizer # as well if page == self.GetSelection(): self._mainSizer.Detach(pageRemoved) # Remove it from the array as well self._windows.pop(page) # Now we can destroy it in wxWidgets use Destroy instead of delete pageRemoved.Destroy() self._mainSizer.Layout() self._pages.DoDeletePage(page) self.ResizeTabArea() self.Thaw() # Fire a closed event closedEvent = ImageNotebookEvent(wxEVT_IMAGENOTEBOOK_PAGE_CLOSED, self.GetId()) closedEvent.SetSelection(page) closedEvent.SetEventObject(self) self.GetEventHandler().ProcessEvent(closedEvent) def RemovePage(self, page): """ Deletes the specified page, without deleting the associated window. :param `page`: an integer specifying the page to be removed. :note: The call to this function generates the page changing events. """ if page >= len(self._windows): return False # Fire a closing event event = ImageNotebookEvent(wxEVT_IMAGENOTEBOOK_PAGE_CLOSING, self.GetId()) event.SetSelection(page) event.SetEventObject(self) self.GetEventHandler().ProcessEvent(event) # The event handler allows it? if not event.IsAllowed(): return False self.Freeze() # Remove the requested page pageRemoved = self._windows[page] # If the page is the current window, remove it from the sizer # as well if page == self.GetSelection(): self._mainSizer.Detach(pageRemoved) # Remove it from the array as well self._windows.pop(page) self._mainSizer.Layout() self.ResizeTabArea() self.Thaw() self._pages.DoDeletePage(page) # Fire a closed event closedEvent = ImageNotebookEvent(wxEVT_IMAGENOTEBOOK_PAGE_CLOSED, self.GetId()) closedEvent.SetSelection(page) closedEvent.SetEventObject(self) self.GetEventHandler().ProcessEvent(closedEvent) return True def ResizeTabArea(self): """ Resizes the tab area if the control has the ``INB_FIT_LABELTEXT`` style set. """ agwStyle = self.GetAGWWindowStyleFlag() if agwStyle & INB_FIT_LABELTEXT == 0: return if agwStyle & INB_LEFT or agwStyle & INB_RIGHT: dc = wx.MemoryDC() dc.SelectObject(wx.EmptyBitmap(1, 1)) font = wx.SystemSettings_GetFont(wx.SYS_DEFAULT_GUI_FONT) font.SetPointSize(font.GetPointSize()*self._fontSizeMultiple) if self.GetFontBold(): font.SetWeight(wx.FONTWEIGHT_BOLD) dc.SetFont(font) maxW = 0 for page in xrange(self.GetPageCount()): caption = self._pages.GetPageText(page) w, h = dc.GetTextExtent(caption) maxW = max(maxW, w) maxW += 24 #TODO this is 6*4 6 is nPadding from drawlabel if not agwStyle & INB_SHOW_ONLY_TEXT: maxW += self._pages._nImgSize * 2 maxW = max(maxW, 100) self._pages.SetSizeHints(maxW, -1) self._pages._nTabAreaWidth = maxW def DeleteAllPages(self): """ Deletes all the pages in the book. """ if not self._windows: return self.Freeze() for win in self._windows: win.Destroy() self._windows = [] self.Thaw() # remove old selection self._pages.ClearAll() self._pages.Refresh() def SetSelection(self, page): """ Changes the selection from currently visible/selected page to the page given by page. :param `page`: an integer specifying the page to be selected. :note: The call to this function generates the page changing events. """ if page >= len(self._windows): return if page == self.GetSelection() and not self._bForceSelection: return oldSelection = self.GetSelection() # Generate an event that indicates that an image is about to be selected event = ImageNotebookEvent(wxEVT_IMAGENOTEBOOK_PAGE_CHANGING, self.GetId()) event.SetSelection(page) event.SetOldSelection(oldSelection) event.SetEventObject(self) self.GetEventHandler().ProcessEvent(event) # The event handler allows it? if not event.IsAllowed() and not self._bForceSelection: return self.DoSetSelection(self._windows[page]) # Now we can update the new selection self._pages._nIndex = page # Refresh calls the OnPaint of this class self._pages.Refresh() # Generate an event that indicates that an image was selected eventChanged = ImageNotebookEvent(wxEVT_IMAGENOTEBOOK_PAGE_CHANGED, self.GetId()) eventChanged.SetEventObject(self) eventChanged.SetOldSelection(oldSelection) eventChanged.SetSelection(page) self.GetEventHandler().ProcessEvent(eventChanged) def AssignImageList(self, imglist): """ Assigns an image list to the control. :param `imglist`: an instance of `wx.ImageList`. """ self._pages.AssignImageList(imglist) # Force change self.SetAGWWindowStyleFlag(self.GetAGWWindowStyleFlag()) def GetSelection(self): """ Returns the current selection. """ if self._pages: return self._pages._nIndex else: return -1 def DoSetSelection(self, window): """ Select the window by the provided pointer. :param `window`: an instance of `wx.Window`. """ curSel = self.GetSelection() agwStyle = self.GetAGWWindowStyleFlag() # Replace the window in the sizer self.Freeze() # Check if a new selection was made bInsertFirst = (agwStyle & INB_BOTTOM or agwStyle & INB_RIGHT) if curSel >= 0: # Remove the window from the main sizer self._mainSizer.Detach(self._windows[curSel]) self._windows[curSel].Hide() if bInsertFirst: self._mainSizer.Insert(0, window, 1, wx.EXPAND) else: self._mainSizer.Add(window, 1, wx.EXPAND) window.Show() self._mainSizer.Layout() self.Thaw() def GetImageList(self): """ Returns the associated image list. """ return self._pages.GetImageList() def GetPageCount(self): """ Returns the number of pages in the book. """ return len(self._windows) def GetFontBold(self): """ Gets the font bold status. """ return self._fontBold def SetFontBold(self, bold): """ Sets whether the page captions are bold or not. :param `bold`: ``True`` or ``False``. """ self._fontBold = bold def GetFontSizeMultiple(self): """ Gets the font size multiple for the page captions. """ return self._fontSizeMultiple def SetFontSizeMultiple(self, multiple): """ Sets the font size multiple for the page captions. :param `multiple`: The multiple to be applied to the system font to get the our font size. """ self._fontSizeMultiple = multiple def SetPageImage(self, page, imageId): """ Sets the image index for the given page. :param `page`: an integer specifying the page index; :param `image`: an index into the image list. """ self._pages.SetPageImage(page, imageId) self._pages.Refresh() def SetPageText(self, page, text): """ Sets the text for the given page. :param `page`: an integer specifying the page index; :param `text`: the new tab label. """ self._pages.SetPageText(page, text) self._pages.Refresh() def GetPageText(self, page): """ Returns the text for the given page. :param `page`: an integer specifying the page index. """ return self._pages.GetPageText(page) def GetPageImage(self, page): """ Returns the image index for the given page. :param `page`: an integer specifying the page index. """ return self._pages.GetPageImage(page) def GetPage(self, page): """ Returns the window at the given page position. :param `page`: an integer specifying the page to be returned. """ if page >= len(self._windows): return return self._windows[page] def GetCurrentPage(self): """ Returns the currently selected notebook page or ``None``. """ if self.GetSelection() < 0: return return self.GetPage(self.GetSelection()) def AdvanceSelection(self, forward=True): """ Cycles through the tabs. :param `forward`: if ``True``, the selection is advanced in ascending order (to the right), otherwise the selection is advanced in descending order. :note: The call to this function generates the page changing events. """ nSel = self.GetSelection() if nSel < 0: return nMax = self.GetPageCount() - 1 if forward: newSelection = (nSel == nMax and [0] or [nSel + 1])[0] else: newSelection = (nSel == 0 and [nMax] or [nSel - 1])[0] self.SetSelection(newSelection) def ChangeSelection(self, page): """ Changes the selection for the given page, returning the previous selection. :param `page`: an integer specifying the page to be selected. :note: The call to this function does not generate the page changing events. """ if page < 0 or page >= self.GetPageCount(): return oldPage = self.GetSelection() self.DoSetSelection(page) return oldPage CurrentPage = property(GetCurrentPage, doc="See `GetCurrentPage`") Page = property(GetPage, doc="See `GetPage`") PageCount = property(GetPageCount, doc="See `GetPageCount`") PageImage = property(GetPageImage, SetPageImage, doc="See `GetPageImage, SetPageImage`") PageText = property(GetPageText, SetPageText, doc="See `GetPageText, SetPageText`") Selection = property(GetSelection, SetSelection, doc="See `GetSelection, SetSelection`") # ---------------------------------------------------------------------------- # # Class FlatImageBook # ---------------------------------------------------------------------------- # class FlatImageBook(FlatBookBase): """ Default implementation of the image book, it is like a `wx.Notebook`, except that images are used to control the different pages. This container is usually used for configuration dialogs etc. :note: Currently, this control works properly for images of size 32x32 and bigger. """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="FlatImageBook"): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.Panel` window style; :param `agwStyle`: the AGW-specific window style. This can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== :param `name`: the window name. """ FlatBookBase.__init__(self, parent, id, pos, size, style, agwStyle, name) self._pages = self.CreateImageContainer() if agwStyle & INB_LEFT or agwStyle & INB_RIGHT: self._mainSizer = wx.BoxSizer(wx.HORIZONTAL) else: self._mainSizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self._mainSizer) # Add the tab container to the sizer self._mainSizer.Add(self._pages, 0, wx.EXPAND) if agwStyle & INB_LEFT or agwStyle & INB_RIGHT: self._pages.SetSizeHints(self._pages.GetImageSize() * 2, -1) else: self._pages.SetSizeHints(-1, self._pages.GetImageSize() * 2) self._mainSizer.Layout() def CreateImageContainer(self): """ Creates the image container class for L{FlatImageBook}. """ return ImageContainer(self, wx.ID_ANY, agwStyle=self.GetAGWWindowStyleFlag()) # ---------------------------------------------------------------------------- # # Class LabelBook # ---------------------------------------------------------------------------- # class LabelBook(FlatBookBase): """ An implementation of a notebook control - except that instead of having tabs to show labels, it labels to the right or left (arranged horizontally). """ def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, agwStyle=0, name="LabelBook"): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.Panel` window style; :param `agwStyle`: the AGW-specific window style. This can be a combination of the following bits: =========================== =========== ================================================== Window Styles Hex Value Description =========================== =========== ================================================== ``INB_BOTTOM`` 0x1 Place labels below the page area. Available only for L{FlatImageBook}. ``INB_LEFT`` 0x2 Place labels on the left side. Available only for L{FlatImageBook}. ``INB_RIGHT`` 0x4 Place labels on the right side. ``INB_TOP`` 0x8 Place labels above the page area. ``INB_BORDER`` 0x10 Draws a border around L{LabelBook} or L{FlatImageBook}. ``INB_SHOW_ONLY_TEXT`` 0x20 Shows only text labels and no images. Available only for L{LabelBook}. ``INB_SHOW_ONLY_IMAGES`` 0x40 Shows only tab images and no label texts. Available only for L{LabelBook}. ``INB_FIT_BUTTON`` 0x80 Displays a pin button to show/hide the book control. ``INB_DRAW_SHADOW`` 0x100 Draw shadows below the book tabs. Available only for L{LabelBook}. ``INB_USE_PIN_BUTTON`` 0x200 Displays a pin button to show/hide the book control. ``INB_GRADIENT_BACKGROUND`` 0x400 Draws a gradient shading on the tabs background. Available only for L{LabelBook}. ``INB_WEB_HILITE`` 0x800 On mouse hovering, tabs behave like html hyperlinks. Available only for L{LabelBook}. ``INB_NO_RESIZE`` 0x1000 Don't allow resizing of the tab area. ``INB_FIT_LABELTEXT`` 0x2000 Will fit the tab area to the longest text (or text+image if you have images) in all the tabs. =========================== =========== ================================================== :param `name`: the window name. """ FlatBookBase.__init__(self, parent, id, pos, size, style, agwStyle, name) self._pages = self.CreateImageContainer() # Label book specific initialization self._mainSizer = wx.BoxSizer(wx.HORIZONTAL) self.SetSizer(self._mainSizer) # Add the tab container to the sizer self._mainSizer.Add(self._pages, 0, wx.EXPAND) self._pages.SetSizeHints(self._pages.GetTabAreaWidth(), -1) # Initialize the colours maps self._pages.InitializeColours() self.Bind(wx.EVT_SIZE, self.OnSize) def CreateImageContainer(self): """ Creates the image container (LabelContainer) class for L{FlatImageBook}. """ return LabelContainer(self, wx.ID_ANY, agwStyle=self.GetAGWWindowStyleFlag()) def SetColour(self, which, colour): """ Sets the colour for the specified parameter. :param `which`: the colour key; :param `colour`: a valid `wx.Colour` instance. :see: L{LabelContainer.SetColour} for a list of valid colour keys. """ self._pages.SetColour(which, colour) def GetColour(self, which): """ Returns the colour for the specified parameter. :param `which`: the colour key. :see: L{LabelContainer.SetColour} for a list of valid colour keys. """ return self._pages.GetColour(which) def OnSize(self, event): """ Handles the ``wx.EVT_SIZE`` event for L{LabelBook}. :param `event`: a `wx.SizeEvent` event to be processed. """ self._pages.Refresh() event.Skip() dispcalGUI-1.7.1.6/dispcalGUI/lib/agw/pygauge.py000644 000765 000000 00000026240 12025152305 021140 0ustar00svpwheel000000 000000 # --------------------------------------------------------------------------------- # # PYGAUGE wxPython IMPLEMENTATION # # Mark Reed, @ 28 Jul 2010 # Latest Revision: 02 Aug 2010, 09.00 GMT # # TODO List # # 1. Indeterminate mode (see wx.Gauge) # 2. Vertical bar # 3. Bitmap support (bar, background) # 4. UpdateFunction - Pass a function to PyGauge which will be called every X # milliseconds and the value will be updated to the returned value. # 5. Currently the full gradient is drawn from 0 to value. Perhaps the gradient # should be drawn from 0 to range and clipped at 0 to value. # 6. Add a label? # # For All Kind Of Problems, Requests Of Enhancements And Bug Reports, Please # Write To The: # # wxPython Mailing List!!! # # End Of Comments # --------------------------------------------------------------------------------- # """ PyGauge is a generic `wx.Gauge` implementation. Description =========== PyGauge supports the determinate mode functions as `wx.Gauge` and adds an L{Update} function which takes a value and a time parameter. The `value` is added to the current value over a period of `time` milliseconds. Supported Platforms =================== PyGauge has been tested on the following platforms: * Windows (Windows XP); License And Version =================== PyGauge is distributed under the wxPython license. PyGauge has been kindly contributed to the AGW library by Mark Reed. Latest Revision: Andrea Gavana @ 02 Aug 2010, 09.00 GMT Version 0.1 """ import wx import copy class PyGauge(wx.PyWindow): """ This class provides a visual alternative for `wx.Gauge`. It currently only support determinate mode (see L{PyGauge.SetValue} and L{PyGauge.SetRange}) """ def __init__(self, parent, id=wx.ID_ANY, range=100, pos=wx.DefaultPosition, size=(-1,30), style=0): """ Default class constructor. :param `parent`: parent window. Must not be ``None``; :param `id`: window identifier. A value of -1 indicates a default value; :param `pos`: the control position. A value of (-1, -1) indicates a default position, chosen by either the windowing system or wxPython, depending on platform; :param `size`: the control size. A value of (-1, -1) indicates a default size, chosen by either the windowing system or wxPython, depending on platform; :param `style`: the underlying `wx.PyWindow` window style. """ wx.PyWindow.__init__(self, parent, id, pos, size, style) self._size = size self._border_colour = None self._barColour = self._barColourSorted = [wx.Colour(212,228,255)] self._barGradient = self._barGradientSorted = None self._border_padding = 0 self._range = range self._value = [0] self._valueSorted = [0] self._timerId = wx.NewId() self._timer = None self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) self.Bind(wx.EVT_TIMER, self.OnTimer) def DoGetBestSize(self): """ Overridden base class virtual. Determines the best size of the button based on the label and bezel size. """ return wx.Size(self._size[0], self._size[1]) def GetBorderColour(self): """ Returns the L{PyGauge} border colour. """ return self._border_colour def SetBorderColour(self, colour): """ Sets the L{PyGauge} border colour. :param `colour`: an instance of `wx.Colour`. """ self._border_colour = colour SetBorderColor = SetBorderColour GetBorderColor = GetBorderColour def GetBarColour(self): """ Returns the L{PyGauge} main bar colour. """ return self._barColour[0] def SetBarColour(self, colour): """ Sets the L{PyGauge} main bar colour. :param `colour`: an instance of `wx.Colour`. """ if type(colour) != type([]): self._barColour = [colour] else: self._barColour = list(colour) self.SortForDisplay() SetBarColor = SetBarColour GetBarColor = GetBarColour def GetBarGradient(self): """ Returns a tuple containing the gradient start and end colours. """ if self._barGradient == None: return None return self._barGradient[0] def SetBarGradient(self, gradient): """ Sets the bar gradient. :param `gradient`: a tuple containing the gradient start and end colours. :note: This overrides the bar colour previously set with L{SetBarColour}. """ if type(gradient) != type([]): self._barGradient = [gradient] else: self._barGradient = list(gradient) self.SortForDisplay() def GetBorderPadding(self): """ Gets the border padding. """ return self._border_padding def SetBorderPadding(self, padding): """ Sets the border padding. :param `padding`: pixels between the border and the progress bar. """ self._border_padding = padding def GetRange(self): """ Returns the maximum value of the gauge. """ return self._range def SetRange(self, range): """ Sets the range of the gauge. The gauge length is its value as a proportion of the range. :param `range`: The maximum value of the gauge. """ if range <= 0: raise Exception("ERROR:\n Gauge range must be greater than 0.") self._range = range def GetValue(self): """ Returns the current position of the gauge. """ return self._value[0] def SetValue(self, value): """ Sets the current position of the gauge. :param `value`: an integer specifying the current position of the gauge. """ if type(value) != type([]): self._value = [value] else: self._value = list(value) self.SortForDisplay() for v in self._value: if v < 0 or v > self._range: raise Exception("ERROR:\n Gauge value must be between 0 and its range.") def OnEraseBackground(self, event): """ Handles the ``wx.EVT_ERASE_BACKGROUND`` event for L{PyGauge}. :param `event`: a `wx.EraseEvent` event to be processed. :note: This method is intentionally empty to reduce flicker. """ pass def OnPaint(self, event): """ Handles the ``wx.EVT_PAINT`` event for L{PyGauge}. :param `event`: a `wx.PaintEvent` event to be processed. """ dc = wx.BufferedPaintDC(self) rect = self.GetClientRect() dc.SetBackground(wx.Brush(self.GetBackgroundColour())) dc.Clear() colour = self.GetBackgroundColour() dc.SetBrush(wx.Brush(colour)) dc.SetPen(wx.Pen(colour)) dc.DrawRectangleRect(rect) if self._border_colour: dc.SetPen(wx.Pen(self.GetBorderColour())) dc.DrawRectangleRect(rect) pad = 1 + self.GetBorderPadding() rect.Deflate(pad,pad) if self.GetBarGradient(): for i, gradient in enumerate(self._barGradientSorted): c1,c2 = gradient w = rect.width * (float(self._valueSorted[i]) / self._range) r = copy.copy(rect) r.width = w dc.GradientFillLinear(r, c1, c2, wx.EAST) else: for i, colour in enumerate(self._barColourSorted): dc.SetBrush(wx.Brush(colour)) dc.SetPen(wx.Pen(colour)) w = rect.width * (float(self._valueSorted[i]) / self._range) r = copy.copy(rect) r.width = w dc.DrawRectangleRect(r) def OnTimer(self,event): """ Handles the ``wx.EVT_TIMER`` event for L{PyGauge}. :param `event`: a `wx.TimerEvent` event to be processed. """ if self._timerId == event.GetId(): stop_timer = True for i, v in enumerate(self._value): self._value[i] += self._update_step[i] if self._update_step[i] > 0: if self._value[i] > self._update_value[i]: self._value[i] = self._update_value[i] else: stop_timer = False else: if self._value[i] < self._update_value[i]: self._value[i] = self._update_value[i] else: stop_timer = False if stop_timer: self._timer.Stop() self.SortForDisplay() self.Refresh() def Update(self, value, time=0): """ Update the gauge by adding `value` to it over `time` milliseconds. The `time` parameter **must** be a multiple of 50 milliseconds. :param `value`: The value to be added to the gauge; :param `time`: The length of time in milliseconds that it will take to move the gauge. """ if type(value) != type([]): value = [value] if len(value) != len(self._value): raise Exception("ERROR:\n len(value) != len(self.GetValue())") self._update_value = [] self._update_step = [] for i, v in enumerate(self._value): if value[i]+v <= 0 or value[i]+v > self._range: raise Exception("ERROR:\n Gauge value must be between 0 and its range. ") self._update_value.append(value[i] + v) self._update_step.append(float(value[i])/(time/50)) #print self._update_ if not self._timer: self._timer = wx.Timer(self, self._timerId) self._timer.Start(100) def SortForDisplay(self): """ Internal method which sorts things so we draw the longest bar first. """ if self.GetBarGradient(): tmp = sorted(zip(self._value,self._barGradient)); tmp.reverse() a,b = zip(*tmp) self._valueSorted = list(a) self._barGradientSorted = list(b) else: tmp = sorted(zip(self._value,self._barColour)); tmp.reverse() a,b = zip(*tmp) self._valueSorted = list(a) self._barColourSorted = list(b) dispcalGUI-1.7.1.6/dispcalGUI/lang/de.json000644 000765 000000 00000167671 12266603364 020040 0ustar00svpwheel000000 000000 { "*": "Note to translators: Keys which are not yet translated are marked with a leading asterisk (*) and are indented with two tabs instead of one. Please remove the asterisk when translated.", "!author": "Florian Höch", "!language": "Deutsch", "!language_name": "GERMAN", "apply": "Anwenden", "apply_bt1886_gamma_mapping": "BT.1886 Gamma-Mapping anwenden", "3dlut.bitdepth.input": "3D LUT Eingabe-Bittiefe", "3dlut.bitdepth.output": "3D LUT Ausgabe-Bittiefe", "3dlut.create": "3D LUT erstellen...", "3dlut.encoding.input": "Eingabe-Kodierung", "3dlut.encoding.output": "Ausgabe-Kodierung", "3dlut.encoding.output.warning.madvr": "Warnung: Diese Ausgabe-Kodierung ist nicht empfohlen und wird „Clipping“ verursachen, falls madVR nicht ausgabeseitig auf „TV-Pegel (16-235)“ unter „Geräte“ → „%s“ → „Eigenschaften“ eingestellt ist. Benutzung auf eigene Gefahr!", "3dlut.encoding.type_n": "Voller Bereich RGB 0-255", "3dlut.encoding.type_t": "TV RGB 16-235", "3dlut.encoding.type_6": "TV Rec. 601 YCbCr SD", "3dlut.encoding.type_7": "TV Rec. 709 1125/60Hz YCbCr HD", "3dlut.encoding.type_5": "TV Rec. 709 1250/50Hz YCbCr HD", "3dlut.encoding.type_2": "TV Rec. 2020 YCbCr UHD", "3dlut.encoding.type_C": "TV Rec. 2020 konstante Luminanz YCbCr UHD", "3dlut.encoding.type_x": "TV xvYCC Rec. 601 YCbCr (Rec. 709 Primärfarben) SD", "3dlut.encoding.type_X": "TV xvYCC Rec. 709 YCbCr HD", "3dlut.format": "3D LUT Dateiformat", "3dlut.frame.title": "3D LUT erstellen", "3dlut.input.profile": "Quellprofil", "3dlut.madVR.enable": "madVR 3D LUT verwenden", "output.profile": "Zielprofil", "apply_cal": "Kalibrierung (vcgt) anwenden", "apply_cal.error": "Kalibrierung konnte nicht angewendet werden.", "3dlut.size": "3D LUT Größe", "3dlut.use_abstract_profile": "Abstraktes (“Look”) Profil", "[rgb]TRC": "Farbtonwiedergabekurven", "aborted": "...abgebrochen.", "aborting": "Breche ab, bitte warten (dies kann einige Sekunden dauern)...", "adaptive_mode_unavailable": "Der adaptive Modus ist erst mit Argyll CMS 1.1.0 RC3 oder neuer verfügbar.", "allow_skip_sensor_cal": "Überspringen der Spectrometer-Kalibrierung erlauben", "ambient.measure": "Umgebungslicht messen", "ambient.set": "Möchten sie auch die Umgebungshelligkeit auf den gemessenen Wert setzen?", "app.confirm_restore_defaults": "Wollen Sie wirklich Ihre Einstellungen verwerfen und die Standardeinstellungen wiederherstellen?", "app.restart_request": "Bitte starten Sie die Anwendung neu.", "argyll.debug.warning1": "Bitte benutzen Sie diese Option nur, wenn Sie Debugging-Informationen wirklich benötigen (z.B. zur tiefgreifenden Fehlersuche in Argyll CMS)! In der Regel ist diese Option nur für Software-Entwickler zum Auffinden und Beheben von Problemen nützlich. Möchten Sie die Debugging-Ausgabe wirklich aktivieren?", "argyll.debug.warning2": "Bitte vergessen Sie nicht, die Debugging-Ausgabe für den normalen Betrieb der Software wieder zu deaktivieren.", "argyll.dir": "Argyll-CMS-Programmverzeichnis:", "argyll.dir.invalid": "Argyll-CMS-Programmdateien nicht gefunden!\nBitte legen Sie das Verzeichnis fest, in dem sich die ausführbaren Dateien mit den folgenden möglichen Namen und eventuellem „argyll-“-Präfix oder „-argyll“-Suffix befinden: %s", "argyll.error.detail": "Detaillierte Argyll-CMS-Fehlermeldung:", "argyll.instrument.driver.missing": "Eventuell ist der Argyll-CMS-Treiber für Ihr Messgarät nicht oder nicht korrekt installiert. Bitte überprüfen Sie, ob Ihr Messgerät im Windows-Gerätemanager unter „Argyll LibUSB-1.0A devices“ angezeigt wird und installieren Sie ggf. den Argyll-CMS-Treiber. Folgen Sie dazu der Anleitung in der Dokumentation.", "argyll.util.not_found": "Argyll CMS „%s“ Hilfsprogramm nicht gefunden!", "as_measured": "Wie gemessen", "auth.failed": "Authentifizierung fehlgeschlagen.", "auto": "Automatisch", "autostart_remove_old": "Entferne alten Autostart-Eintrag", "backlight": "Hintergrundbeleuchtung", "black": "Schwarz", "black_point": "Schwarzpunkt", "black_point_compensation": "Tiefenkompensierung", "black_point_compensation.info": "Tiefenkompensierung verhindert effektiv den Verlust von Tiefenzeichnung, wirkt sich aber negativ auf die Genauigkeit der Farbkonvertierung aus.", "blacklevel": "Schwarzwert", "blue": "Blau", "brightness": "Helligkeit", "browse": "Wählen...", "bug_report": "Fehler melden...", "button.calibrate": "Nur Kalibrieren", "button.calibrate_and_profile": "Kalibrieren && profilieren", "button.profile": "Nur profilieren", "cal_extraction_failed": "Konnte die Kalibrierungsdaten nicht aus dem Profil extrahieren.", "calibration": "Kalibrierung", "calibration.ambient_viewcond_adjust": "Umgebungshelligkeits-Anpassung", "calibration.ambient_viewcond_adjust.info": "Um eine Anpassung der Betrachtungsbedingungen während der Berechnung der Kalibrierungskurven durchzuführen, aktivieren Sie das Kontrollkästchen und tragen die Umgebungshelligkeit ein. Sie können die Umgebungshelligkeit auch messen, falls von Ihrem Messgerät unterstützt.", "calibration.black_luminance": "Schwarzluminanz", "calibration.black_output_offset": "Schwarzausgabeoffset", "calibration.black_point_correction": "Schwarztonkorrektur", "calibration.black_point_correction_choice": "Sie können die Schwarztonkorrektur ausschalten, um den Schwarzwert gering zu halten und den Kontrast zu verbessern (empfohlen für LCD), oder einschalten, um Schwarz auf den Farbton des gewählten Weißpunkts zu optimieren (empfohlen für CRT). Bitte wählen Sie Ihre bevorzugte Schwarztonkorrektur-Einstellung:", "calibration.black_point_correction_choice_dialogtitle": "Schwarztonkorrektur", "calibration.black_point_rate": "Rate", "calibration.check_all": "Einstellungen überprüfen", "calibration.complete": "Kalibrierung abgeschlossen!", "calibration.create_fast_matrix_shaper": "Matrix-Profil erstellen", "calibration.create_fast_matrix_shaper_choice": "Möchten Sie aus den Messwerten der Kalibrierung ein einfaches Matrix-Profil erstellen oder nur kalibrieren?", "calibration.do_not_use_video_lut": "Zum Anwenden der Kalibrierung nicht die Grafikkarten-Gammatabelle verwenden", "calibration.do_not_use_video_lut.warning": "Wollen Sie die empfohlene Einstellung wirklich ändern?", "calibration.embed": "Kalibrierungskurven in Profil einbetten", "calibration.file": "Einstellungen", "calibration.file.invalid": "Die gewählte Einstellungsdatei ist ungültig.", "calibration.file.none": "", "calibration.incomplete": "Die Kalibrierung wurde nicht abgeschlossen.", "calibration.interactive_display_adjustment": "Interaktive Anzeigegeräte-Einstellung", "calibration.interactive_display_adjustment.black_level.crt": "Wählen Sie „Messung starten“ und benutzen Sie den Helligkeits- und/oder die RGB-Versatz-Regler Ihres Anzeigegerätes, um den gewünschten Schwarzpegel einzustellen.", "calibration.interactive_display_adjustment.black_point.crt": "Wählen Sie „Messung starten“ und benutzen Sie die RGB-Versatz-Regler Ihres Anzeigegerätes, um den gewünschten Schwarzpunkt einzustellen.", "calibration.interactive_display_adjustment.check_all": "Wählen Sie „Messung starten“, um alle Einstellungen zu überprüfen.", "calibration.interactive_display_adjustment.generic_hint.plural": "Eine gute Übereinstimmung ist erreicht, wenn die Balken in die markierte mittige Position gebracht werden können.", "calibration.interactive_display_adjustment.generic_hint.singular": "Eine gute Übereinstimmung ist erreicht, wenn der Balken in die markierte mittige Position gebracht werden kann.", "calibration.interactive_display_adjustment.start": "Messung starten", "calibration.interactive_display_adjustment.stop": "Messung stoppen", "calibration.interactive_display_adjustment.white_level.crt": "Wählen Sie „Messung starten“ und benutzen Sie den Kontrast- und/oder die RGB-Zuwachs-Regler Ihres Anzeigegerätes, um den gewünschten Weißpegel einzustellen.", "calibration.interactive_display_adjustment.white_level.lcd": "Wählen Sie „Messung starten“ und benutzen Sie den Hintegrundbeleuchtungs- bzw. Helligkeitsregler Ihres Anzeigegerätes, um den gewünschten Weißpegel einzustellen.", "calibration.interactive_display_adjustment.white_point": "Wählen Sie „Messung starten“ und benutzen Sie die Farbtemperatur- und/oder RGB-Zuwachs-Regler Ihres Anzeigegerätes, um den gewünschten Weißpunkt einzustellen.", "calibration.keep_black_point_correction": "Aktuelle Einstellung beibehalten", "calibration.load": "Einstellungen laden...", "calibration.load_error": "Kalibrierungskurven konnten nicht geladen werden.", "calibration.load_from_cal": "Kalibrierungskurven aus Kalibrierungsdatei laden...", "calibration.load_from_cal_or_profile": "Kalibrierungskurven aus Kalibrierungsdatei oder Profil laden...", "calibration.load_from_display_profile": "Kalibrierungskurven von aktuellem Anzeigegeräteprofil laden", "calibration.load_from_profile": "Kalibrierungskurven aus Profil laden...", "calibration.load_success": "Kalibrierungskurven geladen.", "calibration.loading": "Lade Kalibrierungskurven aus Datei...", "calibration.loading_from_display_profile": "Lade Kalibrierungskurven des aktuellen Anzeigegeräteprofils...", "calibration.luminance": "Weißluminanz", "calibration.lut_viewer.title": "Kurven", "calibration.preview": "Kalibrierungsvorschau", "calibration.quality": "Kalibrierungsqualität", "calibration.quality.high": "Hoch", "calibration.quality.low": "Niedrig", "calibration.quality.medium": "Mittel", "calibration.quality.ultra": "Ultra", "calibration.quality.verylow": "Sehr niedrig", "calibration.speed": "Kalibrierungsgeschwindigkeit", "calibration.speed.high": "Hoch", "calibration.speed.low": "Niedrig", "calibration.speed.medium": "Mittel", "calibration.speed.veryhigh": "Sehr hoch", "calibration.speed.verylow": "Sehr niedrig", "calibration.reset": "Grafikkarten-Gammatabelle zurücksetzen", "calibration.reset_error": "Grafikkarten-Gammatabelle konnte nicht zurückgesetzt werden.", "calibration.reset_success": "Grafikkarten-Gammatabelle zurückgesetzt.", "calibration.resetting": "Setze Grafikkarten-Gammatabelle zurück...", "calibration.settings": "Kalibrierungseinstellungen", "calibration.show_actual_lut": "Tatsächliche Kalibrierungskurven aus der Grafikkarten-Gammatabelle zeigen", "calibration.show_lut": "Kurven zeigen", "calibration.start": "Weiter zur Kalibrierung", "calibration.turn_off_black_point_correction": "Ausschalten", "calibration.turn_on_black_point_correction": "Einschalten", "calibration.update": "Kalibrierung aktualisieren", "calibration.update_profile_choice": "Möchten Sie auch die Kalibrierungskurven im bestehenden Profil aktualisieren oder nur kalibrieren?", "calibration.use_linear_instead": "Lineare Kalibrierung stattdessen verwenden", "calibration.verify": "Kalibrierung überprüfen", "calibration_profiling.complete": "Kalibrierung und Profilierung abgeschlossen!", "calibrationloader.description": "Setzt ICC-Profile und lädt Kalibrierungskurven für alle konfigurierten Anzeigegeräte", "cancel": "Abbrechen", "ccxx.ti1": "Testform für Colorimeter-Korrektur", "checking_lut_access": "Überprüfe Grafikkarten-Gammatabellen-Zugriff auf Anzeigegerät %s...", "centered": "Zentriert", "clear": "Löschen", "color.custom": "Benutzerdefinierte Farbe", "colorconfig_remove_old": "Entferne alte Anzeigegeräte-Konfigurationsdatei", "colorimeter_correction.create": "Colorimeter-Korrektur erstellen...", "colorimeter_correction.create.details": "Bitte überprüfen Sie die angezeigten Informationen und ändern diese wenn nötig. Die Beschreibung sollte auch wichtige Zusatzinformationen enthalten (z.B. spezielle Anzeigeräte-Einstellungen, Abweichung vom CIE-Normbeobachter o.ä.).", "colorimeter_correction.create.failure": "Erstellen der Korrektur fehlgeschlagen.", "colorimeter_correction.create.info": "Um eine Colorimeter-Korrekturmatrix (CCMX) oder eine Spektralkalibrierung (CCSS) zu erstellen, müssen Sie zuerst die „Testform für Colorimeter-Korrektur“ mit einem Spektrometer messen, und falls Sie eine CCMX-Datei erstellen möchten, auch mit dem zu korrigierenden Colorimeter.\nWählen Sie dazu „Testform messen“. Danach wählen Sie die so erzeugten Messwertdatei(en) per „Colorimeter-Korrektur erstellen....“.", "colorimeter_correction.create.success": "Korrektur erfolgreich erstellt.", "colorimeter_correction.file.none": "Keine", "colorimeter_correction.import": "Colorimeter-Korrekturen von anderer Anzeigegeräteprofilierungs-Software importieren...", "colorimeter_correction.import.auto_manual": "Wenn Sie Colorimeter-Korrekturen automatisch installieren lassen möchten, müssen Sie entweder die Herstellersoftware Ihres Colorimeters bereits installiert haben, oder das Installationsmedium einlegen. Wählen Sie dann “Auto”. Falls Sie ein Installationprogramm haben, dieses aber noch nicht installiert ist, oder Sie eine Datei selbst auswählen möchten, benutzen Sie “Datei auswählen”.", "colorimeter_correction.import.choose": "Bitte wählen Sie eine Datei mit Colorimeter-Korrekturen aus:", "colorimeter_correction.import.failure": "Es konnte keine Colorimeter-Korrektur importiert werden.", "colorimeter_correction.import.success": "Colorimeter-Korrekturen wurden erfolgreich von folgenden Softwares importiert:\n\n%s", "colorimeter_correction.instrument_mismatch": "Die gewählte Colorimeter-Korrektur ist nicht für das gewählte Messgerät geeignet.", "colorimeter_correction.upload": "Colorimeter-Korrektur hochladen...", "colorimeter_correction.upload.confirm": "Möchten Sie die Colorimeter-Korrekturdatei in die Online-Datenbank hochladen (empfohlen)? Hochgeladene Dateien werden als lizenzfrei („Public Domain“) behandelt, damit sie uneingeschränkt genutzt werden können.", "colorimeter_correction.upload.deny": "Diese Korrekturdatei darf nicht hochgeladen werden.", "colorimeter_correction.upload.exists": "Die Colorimeter-Korrekturdatei existiert bereits in der Datenbank.", "colorimeter_correction.upload.failure": "Die Korrekturdatei konnte nicht in die Online-Datenbank eingetragen werden.", "colorimeter_correction.upload.success": "Die Korrekturdatei wurde in die Online-Datenbank eingetragen.", "colorimeter_correction.web_check": "Online nach Colorimeter-Korrektur suchen...", "colorimeter_correction.web_check.choose": "Für das gewählte Anzeige- und Messgerät wurden folgende Colorimeter-Korrekturen gefunden:", "colorimeter_correction.web_check.failure": "Für das gewählte Anzeige- und Messgerät wurden keine Colorimeter-Korrekturen gefunden.", "colorimeter_correction_matrix_file": "Korrektur", "colorimeter_correction_matrix_file.choose": "Colorimeter-Korrektur auswählen", "colorspace": "Farbraum", "colorspace.show_outline": "Umriss zeigen", "commandline": "Befehlszeile:", "comparison_profile": "Vergleichsprofil", "comport_detected": "Eine Änderung in der Messgeräte-/Port-Konfiguration wurde erkannt.", "compression.gzip": "GZIP-Komprimierung", "computer.name": "Computername", "connection.fail": "Verbindungs-Fehler (%s)", "connection.fail.http": "HTTP-Fehler %s", "continue": "Fortfahren", "contrast": "Kontrast", "create_and_preview": "Erstellen && Vorschau", "create_ccss_or_ccmx": "Möchten Sie eine Korrekturmatrix für herkömmliche Colorimeter erstellen (CCMX) oder eine Spektralkalibration für das i1 Display Pro und ColorMunki Display (CCSS)?", "create_profile": "Profil aus Messwertdatei erstellen...", "create_profile_from_edid": "Profil aus EDID erstellen...", "created": "Erstellt", "current": "Aktuell", "custom": "Benutzerdefiniert", "cyan": "Cyan", "d3-e4-s0-g9-m3-b3-f0-crossover.ti1": "Standard-Testform für Matrix-Profile", "d3-e4-s0-g25-m3-b3-f0-crossover.ti1": "Erweiterte Testform für Matrix-Profile", "d3-e4-s0-g49-m3-b3-f0-crossover.ti1": "Große Testform für Matrix-Profile", "d3-e4-s0-g97-m3-b3-f0-crossover.ti1": "Sehr große Testform für Matrix-Profile", "d3-e4-s3-g3-m0-f0.ti1": "Standard-Testform für „Gamma + Matrix“-Profile", "d3-e4-s13-g37-m4-b4-f0.ti1": "Kleine Testform für LUT-Profile", "d3-e4-s17-g49-m5-b5-f0.ti1": "Standard-Testform für LUT-Profile", "d3-e4-s21-g61-m6-b6-f0.ti1": "Erweiterte Testform für LUT-Profile", "d3-e4-s25-g73-m7-b7-f0.ti1": "Große Testform für LUT-Profile", "d3-e4-s29-g85-m8-b8-f0.ti1": "Sehr große Testform für LUT-Profile", "d3-e4-s29-g85-m0-f994-caRGB.ti1": "Sehr große Testform für LUT-Profile, optimiert für Gamma 2.2 mit AdobeRGB-Primärfarben (D65)", "d3-e4-s29-g85-m0-f994-ceRGBv2.ti1": "Sehr große Testform für LUT-Profile, optimiert für L* mit NTSC-Primärfarben (D50)", "d3-e4-s29-g85-m0-f994-cRec709_Gamma22.ti1": "Sehr große Testform für LUT-Profile, optimiert für Gamma 2.2 mit Rec.-709-Primärfarben (D65)", "d3-e4-s29-g85-m0-f994-csRGB.ti1": "Sehr große Testform für LUT-Profile, optimiert für sRGB (D65)", "d3-e4-s33-g97-m9-b9-f0.ti1": "XXL Testform für LUT-Profile", "d3-e4-s33-g97-m0-f1399-caRGB.ti1": "XXL Testform für LUT-Profile, optimiert für Gamma 2.2 mit AdobeRGB-Primärfarben (D65)", "d3-e4-s33-g97-m0-f1399-ceRGBv2.ti1": "XXL Testform für LUT-Profile, optimiert für L* mit NTSC-Primärfarben (D50)", "d3-e4-s33-g97-m0-f1399-cRec709_Gamma22.ti1": "XXL Testform für LUT-Profile, optimiert für Gamma 2.2 mit Rec.-709-Primärfarben (D65)", "d3-e4-s33-g97-m0-f1399-csRGB.ti1": "XXL Testform für LUT-Profile, optimiert für sRGB (D65)", "d3-e4-s37-g109-m10-b10-f0.ti1": "XXXL Testform für LUT-Profile", "d3-e4-s37-g109-m0-f1906-caRGB.ti1": "XXXL Testform für LUT-Profile, optimiert für Gamma 2.2 mit AdobeRGB-Primärfarben (D65)", "d3-e4-s37-g109-m0-f1906-ceRGBv2.ti1": "XXXL Testform für LUT-Profile, optimiert für L* mit NTSC-Primärfarben (D50)", "d3-e4-s37-g109-m0-f1906-cRec709_Gamma22.ti1": "XXXL Testform für LUT-Profile, optimiert für Gamma 2.2 mit Rec.-709-Primärfarben (D65)", "d3-e4-s37-g109-m0-f1906-csRGB.ti1": "XXXL Testform für LUT-Profile, optimiert für sRGB (D65)", "d3-e4-s41-g121-m11-b11-f0.ti1": "Gigantische Testform für LUT-Profile", "d3-e4-s41-g121-m0-f2527-caRGB.ti1": "Gigantische Testform für LUT-Profile, optimiert für Gamma 2.2 mit AdobeRGB-Primärfarben (D65)", "d3-e4-s41-g121-m0-f2527-ceRGBv2.ti1": "Gigantische Testform für LUT-Profile, optimiert für L* mit NTSC-Primärfarben (D50)", "d3-e4-s41-g121-m0-f2527-cRec709_Gamma22.ti1": "Gigantische Testform für LUT-Profile, optimiert für Gamma 2.2 mit Rec.-709-Primärfarben (D65)", "d3-e4-s41-g121-m0-f2527-csRGB.ti1": "Gigantische Testform für LUT-Profile, optimiert für sRGB (D65)", "default": "Standard", "delete": "Löschen", "delta_e_to_locus": "ΔE*00 zu %s-Farbort", "description": "Beschreibung", "deselect_all": "Alles abwählen", "detect_displays_and_ports": "Anzeigegeräte- und Messgeräte-Erkennung", "device.name.placeholder": "", "devlink_profile": "DeviceLink-Profil", "dialog.cal_info": "Die Kalibrierungsdatei “%s” wird verwendet. Wollen Sie fortfahren?", "dialog.confirm_cancel": "Möchten Sie wirklich abbrechen?", "dialog.confirm_delete": "Möchten Sie die gewählte(n) Datei(en) wirklich löschen?", "dialog.confirm_overwrite": "Die Datei “%s” existiert bereits. Möchten Sie die Datei überschreiben?", "dialog.current_cal_warning": "Die gerade geladenen Kalibrierungskurven werden verwendet. Wollen Sie fortfahren?", "dialog.do_not_show_again": "Diese Meldung nicht erneut anzeigen", "dialog.enter_password": "Bitte geben Sie Ihr Kennwort ein.", "dialog.install_profile": "Möchten Sie das Profil „%s“ installieren und als Standard für Anzeigegerät „%s“ setzen?", "dialog.linear_cal_info": "Lineare Kalibrierungskurven werden verwendet. Wollen Sie fortfahren?", "dialog.load_cal": "Einstellungen laden", "dialog.set_argyll_bin": "Bitte wählen Sie das Argyll-CMS-Programmverzeichnis aus.", "dialog.set_profile_save_path": "Profilordner „%s“ erzeugen in:", "dialog.set_testchart": "Testform auswählen", "dialog.ti3_no_cal_info": "Die Messwerte enthalten keine Kalibrierungskurven. Wollen Sie wirklich fortfahren?", "display": "Anzeigegerät", "display.connection.type": "Anschlusstyp", "display.manufacturer": "Anzeigegerätehersteller", "display.primary": "(Primär)", "display.properties": "Anzeigegeräteeingenschaften", "display.settings": "Anzeigegeräteeinstellungen", "display.tech": "Anzeigegerätetechnologie", "display_detected": "Eine Änderung in der Anzeigegerätekonfiguration wurde erkannt.", "display_lut.link": "Anzeigegerät und Grafikkarten-Gammatabellen-Zugriff getrennt oder gemeinsam ändern", "display_short": "Anzeigegerät (Kurzname)", "*displayport": "DisplayPort", "drift_compensation.blacklevel": "Schwarzabgleich-Drift-Kompensierung", "drift_compensation.blacklevel.info": "Schwarzabgleich-Drift-Kompensierung versucht, Messwertabweichungen verursacht durch ein sich erwärmendes Messgerät auszugleichen. Dazu wird in gewissen Zeitabständen ein schwarzes Farbfeld gemessen, was die Messzeit insgesamt verlängert. Viele Colorimeter haben eine eingebaute Temperaturkompensierung, was eine Schwarzabgleich-Drift-Kompensierung überflüssig macht, allerdings fehlt diese bei den meisten Spektrometern.", "drift_compensation.whitelevel": "Weißluminanz-Drift-Kompensierung", "drift_compensation.whitelevel.info": "Weißluminanz-Drift-Kompensierung versucht, Messwertabweichungen verursacht durch Helligkeitsänderungen eines sich erwärmenden Anzeigegerätes ausgleichen. Dazu wird in gewissen Zeitabständen ein weißes Farbfeld gemessen, was die Messzeit insgesamt verlängert.", "dry_run": "Trockenlauf", "dry_run.end": "Trockenlauf beendet.", "dry_run.info": "Trockenlauf. Schauen Sie im Protokoll nach, um die Befehlszeile zu sehen.", "*dvi": "DVI", "edid.crc32": "EDID-CRC32-Prüfsumme", "edid.serial": "EDID-Seriennummer", "elapsed_time": "Verstrichene Zeit", "enable_argyll_debug": "Argyll CMS Debugging-Ausgabe aktivieren", "enable_spyder2": "Spyder 2 Colorimeter freischalten...", "enable_spyder2_failure": "Spyder 2 konnte nicht freigeschaltet werden. Bitte installieren Sie die Spyder 2 Software manuell (falls noch nicht geschehen) und führen dann diese Funktion erneut aus.", "enable_spyder2_success": "Spyder 2 wurde erfolgreich freigeschaltet.", "enumerate_ports.auto": "Automatische Messgeräte-Erkennung", "enumerating_displays_and_comports": "Anzeigegeräte- und Messgeräte-Erkennung...", "error": "Fehler", "error.access_denied.write": "Sie haben keinen Schreibzugriff auf %s", "error.already_exists": "Der Name „%s“ kann nicht verwendet werden, da bereits ein anderes Objekt mit diesem Namen existiert. Bitte wählen Sie einen anderen Namen oder ein anderes Verzeichnis.", "error.autostart_creation": "Der Autostart-Eintrag für %s, um die Kalibrierungskurven bei der Anmeldung zu laden, konnte nicht angelegt werden.", "error.autostart_remove_old": "Der alte Autostart-Eintrag, welcher Kalibrierungskurven bei der Anmeldung lädt, konnte nicht entfernt werden: %s", "error.autostart_system": "Der systemweite Autostart-Eintrag, um die Kalibrierungskurven bei der Anmeldung zu laden, konnte nicht angelegt werden, weil das systemweite Autostart-Verzeichnis nicht ermittelt werden konnte.", "error.autostart_user": "Der benutzerspezifische Autostart-Eintrag, um die Kalibrierungskurven bei der Anmeldung zu laden, konnte nicht angelegt werden, weil das benutzerspezifische Autostart-Verzeichnis nicht ermittelt werden konnte.", "error.cal_extraction": "Die Kalibrierung konnte nicht aus dem Profil “%s” extrahiert werden.", "error.calibration.file_missing": "Die Kalibrierungsdatei „%s“ fehlt.", "error.calibration.file_not_created": "Es wurde keine Kalibrierungsdatei erstellt.", "error.calibration.file_notfile": "„%s“ ist keine Datei.", "error.colorconfig_remove_old": "Die alte Konfigurationsdatei, die Anzeigegeräten Profile zuordnet, konnte nicht entfernt werden: %s", "error.copy_failed": "Die Datei „%s“ konnte nicht nach „%s“ kopiert werden.", "error.deletion": "Beim Bewegen von Dateien in den %s ist ein Fehler aufgetreten. Einige Dateien wurden eventuell nicht entfernt.", "error.dir_creation": "Das Verzeichnis „%s“ konnte nicht erstellt werden. Eventuell bestehen keine Zugriffsrechte. Bitte erlauben Sie den Schreibzugriff oder wählen Sie ein anderes Verzeichnis.", "error.dir_notdir": "Das Verzeichnis „%s“ konnte nicht erstellt werden, da bereits ein anderes Objekt mit diesem Namen existiert. Bitte wählen Sie ein anderes Verzeichnis.", "error.file.create": "Die Datei „%s“ konnte nicht erstellt werden.", "error.file.open": "Die Datei „%s“ konnte nicht geöffnet werden.", "error.file_type_unsupported": "Nicht unterstützter Dateityp.", "error.generic": "Es ist ein interner Fehler aufgetreten.\n\nFehlernummer: %s\nFehlermeldung: %s", "error.measurement.file_invalid": "Die Messwertedatei „%s“ ist ungültig.", "error.measurement.file_missing": "Die Messwertedatei „%s“ fehlt.", "error.measurement.file_not_created": "Es wurde keine Messwertedatei erstellt.", "error.measurement.file_notfile": "„%s“ ist keine Datei.", "error.measurement.missing_spectral": "Die Messwertdatei enthält keine Spektralwerte.", "error.measurement.one_colorimeter": "Es wird genau eine Colorimeter-Messwertdatei benötigt.", "error.measurement.one_reference": "Es wird genau eine Referenzmesswertdatei benötigt.", "error.no_displays_detected": "Achtung: Es wurden kein Anzeigegerät erkannt.", "error.profile.file_missing": "Die Profildatei „%s“ fehlt.", "error.profile.file_not_created": "Es wurde keine Profildatei erstellt.", "error.profile.file_notfile": "„%s“ ist keine Datei.", "error.source_dest_same": "Quell- und Zieldatei sind identisch.", "error.testchart.creation_failed": "Die Testform „%s“ konnte nicht erstellt werden. Eventuell bestehen keine Zugriffsrechte, oder die Quelldatei ist nicht vorhanden.", "error.testchart.invalid": "Die Testform „%s“ ist ungültig.", "error.testchart.missing": "Die Testform „%s“ existiert nicht.", "error.testchart.missing_fields": "Der Testform „%s“ fehlen folgende Felder: %s", "error.testchart.read": "Die Testform „%s“ konnte nicht gelesen werden.", "error.tmp_creation": "Konnte das temporäre Arbeitsverzeichnis nicht erstellen.", "error.trashcan_unavailable": "Der %s ist nicht verfügbar. Es wurden keine Dateien entfernt.", "errors.none_found": "Keine Fehler gefunden.", "export": "Exportieren...", "extra_args": "Zusätzliche Befehlszeilen-Parameter setzen...", "failure": "...fehlgeschlagen!", "file.invalid": "Datei ungültig.", "file.missing": "Die Datei „%s“ existiert nicht.", "file.notfile": "„%s“ ist keine Datei.", "file.select": "Datei auswählen", "filetype.any": "Alle Dateitypen", "filetype.cal": "Kalibrierungsdateien (*.cal)", "filetype.cal_icc": "Kalibrierungsdateien und Profile (*.cal;*.icc;*.icm)", "filetype.ccmx": "Korrekturmatrizen/Spektralkalibrierungen (*.ccmx;*.ccss)", "filetype.html": "HTML-Dateien (*.html;*.htm)", "filetype.icc": "Profile (*.icc;*.icm)", "filetype.icc_mpp": "Profile (*.icc;*.icm;*.mpp)", "filetype.icc_ti1_ti3": "Testformdateien (*.icc;*.icm;*.ti1;*.ti3)", "filetype.icc_ti3": "Messwertdateien (*.icc;*.icm;*.ti3)", "filetype.log": "Protokolldateien (*.log)", "filetype.png": "Portable Network Graphics (*.png)", "filetype.tif": "Tagged Image File (*.tif)", "filetype.ti1": "Testformdateien (*.ti1)", "filetype.ti1_ti3_txt": "Testformdateien (*.ti1), Messwertdateien (*.ti3;*.txt)", "filetype.ti3": "Messwertdateien (*.ti3)", "filetype.txt": "DeviceCorrections.txt", "filetype.vrml": "VRML-Dateien (*.wrl)", "finish": "Fertigstellen", "gamap.default_intent": "Standard-Intent für Anzeigegeräteprofil", "gamap.intents.a": "Absolut farbmetrisch", "gamap.intents.aa": "Absolutes Erscheinungsbild", "gamap.intents.aw": "Absolut farbmetrisch mit Weißpunkt-Skalierung", "gamap.intents.la": "Luminanz angleichen", "gamap.intents.ms": "Sättigung erhalten", "gamap.intents.p": "Wahrnehmung", "gamap.intents.pa": "Wahrnehmungs-Erscheinungsbild", "gamap.intents.r": "Relativ farbmetrisch", "gamap.intents.s": "Sättigung", "gamap.out_viewcond": "Betrachtungsbedingungen (Ziel)", "gamap.perceptual": "Gamut-Mapping für Wahrnehmungs-Intent", "gamap.profile": "Quellprofil", "gamap.saturation": "Gamut-Mapping für Sättigungs-Intent", "gamap.src_viewcond": "Betrachtungsbedingungen (Quelle)", "gamap.viewconds.cx": "Dias auf Leuchtkasten", "gamap.viewconds.jd": "Projektor in lichtloser Umgebung", "gamap.viewconds.jm": "Projektor in abgedunkelter Umgebung", "gamap.viewconds.mb": "Monitor in heller Arbeitsumgebung", "gamap.viewconds.md": "Monitor in abgedunkelter Arbeitsumgebung", "gamap.viewconds.mt": "Monitor in typischer Arbeitsumgebung", "gamap.viewconds.ob": "Außenaufnahme in hellem Licht", "gamap.viewconds.pcd": "Photo CD - Außenaufnahme", "gamap.viewconds.pe": "Druck unter Normlicht", "gamap.viewconds.pp": "Druck", "gamapframe.title": "Erweiterte Gamut-Mapping-Einstellungen", "gamut": "Farbumfang", "gamut.coverage": "Farbraumabdeckung", "gamut.view.create": "Generiere Gamut-Ansichten...", "gamut.volume": "Farbraumvolumen", "gamut_plot.tooltip": "Klicken und ziehen Sie die Maus im Diagramm, um den Ausschnitt zu verschieben,\noder zoomen Sie mit dem Mausrad und den +/- Tasten. Doppelklick setzt die Ansicht zurück.", "glossy": "Glossy", "go_to_website": "Gehe zur Website", "grayscale": "Graustufen", "green": "Grün", "*hdmi": "HDMI", "help_support": "Hilfe und Unterstützung...", "hue": "Farbton", "if_available": "falls verfügbar", "illumination": "Beleuchtung", "in": "Eingang", "infoframe.default_text": "", "infoframe.title": "Protokoll", "infoframe.toggle": "Protokollfenster zeigen", "initial": "Start", "initializing_gui": "Initialisiere GUI...", "install_display_profile": "Anzeigegeräteprofil installieren...", "instrument": "Messgerät", "instrument.calibrate": "Setzen Sie das Messgerät auf einen dunklen, nichtreflektierenden Untergrund oder auf eine eventuell zum Messgerät-Zubehör gehörende Kalibrierplatte und drücken Sie dann OK, um das Messgerät zu eichen.", "instrument.calibrate.colormunki": "Drehen Sie den ColorMunki-Sensor in die Kalibrierposition und drücken Sie dann OK, um das Messgerät zu eichen.", "instrument.calibrating": "Messgerätekalibrierung...", "instrument.initializing": "Initialisiere Messgerät, bitte warten...", "instrument.measure_ambient": "Falls Ihr Messgerät einen speziellen Aufsatz zur Umgebungslichtmessung benötigt, bringen Sie diesen bitte an. Platzieren Sie das Messgerät zur Umgebungslichtmessung mit der nach oben gerichteten Messöffnung neben Ihrem Anzeigegerät, oder legen Sie zur Messung eines Normlichtkastens eine Metamerie-freie Graukarte hinein und richten Sie das Messgerät darauf. Weitere Infos zum Messen von Umgebungslicht entnehmen Sie bitte der Dokumentation Ihres Messgeräts. Klicken Sie zum Durchführen der Messung auf OK.", "instrument.place_on_screen": "Setzen Sie das Messgerät auf die Messfläche und klicken Sie OK, um fortzufahren.", "instrument.reposition_sensor": "Die Messung konnte nicht durchgeführt werden, weil sich der Messgerätesensor in der falschen Position befindet. Bitte korrigieren Sie die Sensorposition und klicken Sie OK, um fortzufahren.", "internal": "Intern", "invert_selection": "Auswahl umkehren", "laptop.icc": "Laptop", "license": "Lizenz", "license_info": "Lizensiert unter der GPL", "linear": "linear", "locale.set": "Setze Lokalisierung: %s", "locate_spyder2_setup": "Bitte wählen Sie im folgenden Auswahldialog die Datei “Spyder2express_2.3.6_Setup.exe” oder “Spyder2PRO_2.3.5_Setup.exe”, welche Sie unter http://support.datacolor.com/index.php?/Knowledgebase/List/Index/88/windows herunterladen können.", "locate_spyder2_setup_mac": "Bitte wählen Sie im folgenden Auswahldialog die Datei “Spyder2express_2.3.6_Setup.exe” bzw. “Spyder2PRO_2.3.5_Setup.exe”, oder falls Sie die Software bereits installiert haben, suchen Sie die Datei Spyder.lib (eventuell müssen Sie dazu in den Finder wechseln und einen Ctrl-Klick auf das Spyder2-Programm ausführen, das sich normalerweise unter „Programme/Spyder2express 2.3“ bzw. „Programme/Spyder2PRO 2.2“ befindet, und dann „Paketinhalt zeigen“ aus dem Popup-Menü wählen – anschließend kopieren Sie die Datei aus „Contents/Mac OS Classic“, um Sie auswählen zu können).", "locate_spyder2_setup_win": "Bitte wählen Sie im folgenden Auswahldialog die Datei “Spyder2express_2.3.6_Setup.exe” bzw. “Spyder2PRO_2.3.5_Setup.exe”, oder falls Sie die Software bereits installiert haben, suchen Sie die Datei CVSpyder.dll (die sich normalerweise unter “C:\\Programme\\ColorVision\\Spyder2express” bzw. “C:\\Programme\\ColorVision\\Spyder2PRO” befindet).", "log.autoshow": "Protokollfenster automatisch zeigen", "lut_access": "Grafikkarten-Gammatabellen-Zugriff", "magenta": "Magenta", "matrix": "Matrix", "matte": "Matt", "max": "Max", "maximal": "Maximal", "measure": "Messen", "measure.darken_background": "Schwarzer Hintergrund", "measure.darken_background.warning": "Achtung: Wenn „Schwarzer Hintergrund“ gewählt ist, verdeckt er den gesamten Bildschirm und Sie werden das Einstellungsfenster nicht sehen können! Falls Sie eine Mehrschirmkonfiguration verwenden, verschieben Sie das Einstellungsfenster vor der Messung auf einen anderen Bildschirm, oder benutzen Sie die Tastatur (um die Messung abzubrechen, drücken Sie Q. Falls die Messung bereits läuft, drücken Sie nach einer kurzen Pause nochmals Q).", "measure.testchart": "Testform messen", "measureframe.center": "Zentrieren", "measureframe.info": "Platzieren Sie das Messfenster an der gewünschten Stelle und passen Sie gegebenenfalls die Größe an. In etwa die gesamte Fensterfläche wird zur Anzeige der Messfelder genutzt, der Kreis dient nur als Positionierhilfe für ihr Messgerät.\nPlatzieren Sie das Messgerät auf dem Messfenster und klicken Sie dann auf „Messung starten“. Um abzubrechen und zum Hauptfenster zurückzukehren, schließen Sie das Messfenster.", "measureframe.infobutton": "Info", "measureframe.measurebutton": "Messung starten", "measureframe.title": "Messfenster", "measureframe.zoomin": "Vergrößern", "measureframe.zoommax": "Maximieren/Wiederherstellen", "measureframe.zoomnormal": "Normale Größe", "measureframe.zoomout": "Verkleinern", "measurement.play_sound": "Akustische Rückmeldung bei fortlaufender Messung", "measurement.set_save_path": "Messwertdatei in folgendem Ordner speichern:", "measurement.untethered": "Nicht verbundene Messung", "measurement_file.check_sanity": "Messwertdatei überprüfen...", "measurement_file.check_sanity.auto": "Messwertdateien automatisch überprüfen", "measurement_file.check_sanity.auto.warning": "Bitte beachten Sie, dass es sich bei der automatischen Messwertüberprüfung um ein experimentelles Feature handelt. Verwendung auf eigene Gefahr.", "measurement_file.choose": "Bitte eine Messwertdatei auswählen", "measurement_file.choose.colorimeter": "Bitte eine Colorimeter-Messwertdatei auswählen", "measurement_file.choose.reference": "Bitte eine Referenz-Messwertdatei auswählen", "measurement_mode": "Modus", "measurement_mode.adaptive": "Adaptiv", "measurement_mode.factory": "Werkskalibrierung", "measurement_mode.generic": "Generisch", "measurement_mode.highres": "HiRes", "measurement_mode.lcd": "LCD (generisch)", "measurement_mode.lcd.ccfl": "LCD (CCFL)", "measurement_mode.lcd.ccfl.2": "LCD (CCFL Typ 2)", "measurement_mode.lcd.white_led": "LCD (Weisse LED)", "measurement_mode.lcd.wide_gamut.ccfl": "Wide Gamut LCD (CCFL)", "measurement_mode.lcd.wide_gamut.rgb_led": "Wide Gamut LCD (RGB LED)", "measurement_mode.raw": "Raw", "measurement_mode.refresh": "Refresh (generisch)", "measurements.complete": "Messung abgeschlossen! Möchten Sie den Ordner mit den Messwertdateien öffnen?", "measuring.characterization": "Messe Farbfelder für Charakterisierung...", "menu.about": "Über...", "menu.file": "Datei", "menu.help": "?", "menu.language": "Sprache", "menu.options": "Optionen", "menu.tools": "Werkzeuge", "menuitem.quit": "Beenden", "menuitem.set_argyll_bin": "Argyll-CMS-Programmverzeichnis festlegen...", "min": "Min", "minimal": "Minimal", "native": "Nativ", "no": "Nein", "no_settings": "Die Datei enthält keine Einstellungen.", "office_web.icc": "Büro & Web", "offset": "Versatz", "ok": "OK", "or": "oder", "*osd": "OSD", "other": "Andere", "out": "Ausgang", "overwrite": "Überschreiben", "panel.surface": "Paneloberfläche", "panel.type": "Panel-Typ", "patches": "Felder", "pause": "Pause", "photo.icc": "Photo", "please_wait": "Bitte warten...", "prepress.icc": "Druckvorstufe", "preset": "Voreinstellung", "preview": "Vorschau", "profile": "Profil", "profile.advanced_gamap": "Erweitert...", "profile.choose": "Bitte wählen Sie ein Profil:", "profile.confirm_regeneration": "Möchten Sie das Profil neu erstellen?", "profile.created": "Das Profil wurde erstellt.", "profile.current": "Aktuelles Profil", "profile.do_not_install": "Profil nicht installieren", "profile.info": "Profilinformationen", "profile.info.show": "Profilinformationen zeigen", "profile.install": "Profil installieren", "profile.install.error": "Das Profil konnte nicht installiert/aktiviert werden.", "profile.install.osx_manual_select": "Das Profil wurde installiert. Bitte aktivieren Sie es in der Systemeinstellung „Monitore“.", "profile.install.success": "Das Profil wurde installiert und aktiviert.", "profile.install.virtual.unsupported": "Profile können nicht für virtuelle Anzeigegeräte installiert werden.", "profile.install_local_system": "Profil systemweit installieren", "profile.install_network": "Profil im Netzwerk installieren", "profile.install_user": "Profil nur für aktuellen Benutzer installieren", "profile.invalid": "Ungültiges Profil.", "profile.load_error": "Anzeigegeräteprofil konnte nicht geladen werden.", "profile.load_on_login": "Kalibrierung beim Anmelden laden", "profile.load_on_login.handled_by_os": "Kalibrierung vom Betriebssystem laden lassen (niedrige Qualität)", "profile.name": "Profilname", "profile.name.create": "Profilname erzeugen", "profile.name.placeholders": "Sie können folgende Platzhalter im Profilnamen verwenden:\n\n%a Abgekürzter Wochentagsname\n%A Voller Wochentagsname\n%b Abgekürzter Monatsname\n%B Voller Monatsname\n%d Tag des Monats\n%H Stunde (24-Stunden-Format)\n%I Stunde (12-Stunden-Format)\n%j Tag des Jahres\n%m Monat\n%M Minute\n%p AM/PM\n%S Sekunde\n%U Woche (Sonntag als erster Wochentag)\n%w Wochentag (Sonntag ist 0)\n%W Woche (Montag als erster Wochentag)\n%y Jahr ohne Jahrhundert\n%Y Jahr inklusive Jahrhundert", "profile.no_embedded_ti3": "Das Profil enthält keine Argyll-kompatiblen Messwerte.", "profile.no_vcgt": "Das Profil enthält keine Kalibrierungskurven.", "profile.quality": "Profilqualität", "profile.quality.b2a.low": "Niedrige Qualität der B2A-Tabelle", "profile.quality.b2a.low.info": "Wählen Sie diese Option, wenn das Profil ausschliesslich mit inversem A2B-Gamut-Mapping zum Erstellen eines DeviceLinks oder einer 3D LUT verwendet werden soll", "profile.required_tags_missing": "Es fehlen benötigte Tags im Profil: %s", "profile.self_check": "Profil-Selbsttest ΔE*76", "profile.self_check.avg" : "Durchschnitt", "profile.self_check.max" : "Maximum", "profile.self_check.rms" : "RMS", "profile.set_save_path": "Ablagepfad auswählen...", "profile.settings": "Profilierungseinstellungen", "profile.share": "Profil hochladen...", "profile.share.avg_dE_too_high": "Das Profil weist ein zu hohes Delta E auf (ist = %s, Schwellenwert = %s).", "profile.share.enter_info": "Sie können Ihr Profil mit anderen Nutzern über den OpenSUSE „ICC Profile Taxi“-Service teilen.\n\nBitte geben Sie dazu eine aussagekräftige Beschreibung und die zutreffenden Anzeigegeräteeigenschaften an. Lesen Sie die Anzeigegeräteeinstellungen vom On-Screen-Menü ihres Anzeigegerätes ab und tragen nur die für ihr Anzeigerät zutreffenden Einstellungen ein, die von Standardeinstellungen abweichen.\nEin Beispiel: Für die meisten Anzeigeräte sind das der Name der gewählten Voreinstellung, Helligkeit, Kontrast, Farbtemperatur und/oder Weißpunkt-RGB-Werte, sowie Gamma. Bei Laptops und Notebooks in der Regel nur die Helligkeit. Falls Sie bei der Kalibrierung ihres Anzeigegerätes weitere Einstellungen gemacht haben, tragen Sie auch diese ein falls möglich.", "profile.share.meta_missing": "Das Profil enthält nicht die notwendigen Meta-Informationen.", "profile.share.success": "Profil erfolgreich hochgeladen.", "profile.testchart_recommendation": "Um ein hochwertiges Profil zu erzeugen, wird eine Testform mit einer höheren Anzahl Testfelder empfohlen, die dann allerdings auch mehr Zeit zum Messen benötigt. Möchten Sie die empfohlene Testform verwenden?", "profile.type": "Profiltyp", "profile.type.gamma_matrix": "Gamma + Matrix", "profile.type.lut.lab": "L*a*b* LUT", "profile.type.lut.xyz": "XYZ LUT", "profile.type.lut_matrix.xyz": "XYZ LUT + Matrix", "profile.type.lut_rg_swapped_matrix.xyz": "XYZ LUT + vertauschte Matrix", "profile.type.shaper_matrix": "Kurven + Matrix", "profile.type.single_gamma_matrix": "Einzelnes Gamma + Matrix", "profile.type.single_shaper_matrix": "Einzelne Kurve + Matrix", "profile.unsupported": "Nicht unterstützter Profil-Typ (%s) und/oder -Farbraum (%s).", "profile.update": "Profil aktualisieren", "measurement_report.update": "Messwertreport aktualisieren...", "measurement_report": "Messwertreport...", "measurement_report_choose_chart": "Bitte wählen Sie die zu messende Testform:", "measurement_report_choose_chart_or_reference": "Bitte wählen Sie eine Testform oder Referenzdatei:", "measurement_report_choose_profile": "Bitte wählen Sie das zu überprüfende Profil:", "profiling.complete": "Profilierung abgeschlossen!", "profiling.incomplete": "Die Profilierung wurde nicht abgeschlossen.", "projector": "Projektor", "projector_mode_unavailable": "Der Projektor-Modus ist erst mit Argyll CMS 1.1.0 Beta oder neuer verfügbar.", "quality.ultra.warning": "Ultra-Qualität sollte so gut wie nie benutzt werden, ausser um damit zu belegen, dass sie so gut wie nie benutzt werden sollte (sehr lange Verarbeitungszeit!). Verwenden Sie stattdessen hohe oder mittlere Qualität.", "readme": "LiesMich", "ready": "Bereit.", "red": "Rot", "reference": "Referenz", "rendering_intent": "Rendering-Intent", "report.calibrated": "Kalibriertes Anzeigegerät messen (Kurzreport)", "report.uncalibrated": "Unkalibriertes Anzeigegerät messen (Kurzreport)", "report.uniformity": "Anzeigegeräteausleuchtung messen...", "resources.notfound.error": "Kritischer Fehler: Eine benötigte Datei wurde nicht gefunden:", "resources.notfound.warning": "Warnung: Einige benötigte Dateien wurden nicht gefunden:", "restore_defaults": "Standardeinstellungen wiederherstellen", "rgb.trc": "RGB Übertragungsfunktion", "rgb.trc.averaged": "gemittelte RGB Übertragungsfunktion", "saturation": "Sättigung", "save": "Sichern", "save_as": "Sichern unter...", "select_all": "Alles auswählen", "settings.additional": "Weitere Einstellungen", "settings.basic": "Grundlegende Einstellungen", "settings.new": "", "settings_loaded": "Kalibrierungskurven und die folgenden Einstellungen wurden geladen: %s. Andere Kalibrierungseinstellungen wurden auf Standardwerte zurückgesetzt und die Profilierungseinstellungen nicht verändert.", "settings_loaded.all": "Einstellungen und Kalibrierungskurven wurden geladen.", "settings_loaded.cal": "Das Profil enthielt nur Kalibrierungseinstellungen. Andere Einstellungen wurden nicht verändert. Keine Kalibrierungskurven gefunden.", "settings_loaded.cal_and_lut": "Das Profil enthielt nur Kalibrierungseinstellungen. Andere Einstellungen wurden nicht verändert und die Kalibrierungskurven geladen.", "settings_loaded.cal_and_profile": "Einstellungen wurden geladen. Keine Kalibrierungskurven gefunden.", "settings_loaded.profile": "Das Profil enthielt nur Profilierungseinstellungen. Andere Einstellungen wurden nicht verändert. Keine Kalibrierungskurven gefunden.", "settings_loaded.profile_and_lut": "Das Profil enthielt nur Profilierungseinstellungen. Andere Einstellungen wurden nicht verändert und die Kalibrierungskurven geladen.", "show_advanced_calibration_options": "Erweiterte Kalibrierungsoptionen zeigen", "simulation_profile": "Simulationsprofil", "softproof.icc": "Softproof", "spectral": "Spektral", "sRGB.icc": "sRGB", "startup": "Starte...", "success": "...ok.", "synthicc.create": "Synthethisches ICC Profil erzeugen...", "target": "Ziel", "tc.I": "Kubisches Raster (wahrnehmungsorientiert)", "tc.Q": "Wahrnehmungsorientiert füllend (quasi-zufällig)", "tc.R": "Wahrnehmungsorientiert (zufällig)", "tc.adaption": "Anpassung", "tc.algo": "Verteilung", "tc.angle": "Winkel", "tc.black": "Schwarze Felder", "tc.dark_emphasis": "Betonung dunkler Bereiche", "tc.fullspread": "Iterative Felder", "tc.gray": "Neutrale Felder", "tc.i": "Kubisches Raster (Geräte-Farbraum)", "tc.limit.sphere": "Felder auf Kugel begrenzen", "tc.limit.sphere_radius": "Radius", "tc.multidim": "Multidimensional", "tc.multidim.patches": "Schritte = %s Felder (%s neutrale)", "tc.neutral_axis_emphasis": "Grauachsengewichtung", "tc.ofp": "Optimierte Fernste-Punkte-Abtastung", "tc.patch": "Feld", "tc.patches.gray": "grau", "tc.patches.selected": "ausgewählt", "tc.patches.total": "Felder gesamt", "tc.precond": "Profil zur Vorkonditionierung", "tc.preview.create": "Erstelle Vorschau, bitte warten...", "tc.q": "Geräte-Farbraum füllend (quasi-zufällig)", "tc.r": "Geräte-Farbraum (zufällig)", "tc.single": "Einzelkanal-Felder", "tc.single.perchannel": "pro Kanal", "tc.t": "Inkrementelle Ferne-Punkte-Abtastung", "tc.vrml": "VRML-Datei zur Diagnose erstellen", "tc.vrml.black_offset": "RGB Schwarz-Offset (L*)", "tc.vrml.device": "Geräte-Farborte", "tc.vrml.lab": "Lab-Farborte", "tc.vrml.save_as": "VRML-Datei(en) sichern unter...", "tc.vrml.use_D50": "Neutrales RGB-Weiß", "tc.white": "Weiße Felder", "tempdir_should_still_contain_files": "Erzeugte Dateien sollten sich noch im temporären Verzeichnis „%s“ befinden.", "testchart.add_saturation_sweeps": "Sättigungsfelder hinzufügen", "testchart.add_ti3_patches": "Referenzfelder hinzufügen...", "testchart.change_patch_order": "Feldreihenfolge ändern", "testchart.confirm_select": "Datei gespeichert. Möchten Sie diese Testform auswählen?", "testchart.create": "Testform erstellen", "testchart.discard": "Verwerfen", "testchart.dont_select": "Nicht auswählen", "testchart.edit": "Testform bearbeiten...", "testchart.export.repeat_patch": "Jedes Feld wiederholen:", "testchart.file": "Testform", "testchart.info": "Anzahl Felder in gewählter Testform", "testchart.invalid": "Testform ungültig!", "testchart.read": "Lese Testform...", "testchart.save": "Sichern", "testchart.save_as": "Sichern unter...", "testchart.save_or_discard": "Die Testform wurde nicht gesichert.", "testchart.select": "Auswählen", "testchart.set": "Testform auswählen...", "testchart.sort_by_HSV": "Nach HSV sortieren", "testchart.sort_by_L": "Nach L* sortieren", "testchart.sort_by_RGB": "Nach RGB sortieren", "testchart.sort_by_RGB_sum": "Nach Summe von RGB sortieren", "testchart.sort_RGB_gray_to_top": "RGB-Grau nach oben", "testchart.sort_RGB_white_to_top": "RGB-Weiß nach oben", "testchart.optimize_for_untethered_auto_mode": "Für nicht verbundenen Messmodus optimieren", "testchart_or_reference": "Testchart oder Referenz", "tone_values": "Tonwertstufen", "translations": "Übersetzungen", "trashcan.linux": "Mülleimer", "trashcan.mac": "Papierkorb", "trashcan.windows": "Papierkorb", "trc": "Tonwertkurve", "trc.gamma": "Gamma", "trc.lstar": "L*", "trc.rec709": "Rec. 709", "trc.rec1886": "Rec. 1886", "trc.should_use_viewcond_adjust": "Wenn Sie die Rec.-709-, SMPTE-240M- oder sRGB-Kurven verwenden, sollten Sie auch eine Anpassung der Betrachtungsbedingungen an Ihr Umgebungslicht durchführen, um ein korrektes Ergebnis zu erhalten. Aktivieren Sie hierzu das Kontrollkästchen „Umgebungshelligkeit“ und geben Sie einen Wert in Lux ein, oder messen Sie das Umgebungslicht während der Kalibrierung (falls von Ihrem Messgerät unterstützt).", "trc.smpte240m": "SMPTE 240M", "trc.srgb": "sRGB", "trc.type.absolute": "Absolut", "trc.type.relative": "Relativ", "type": "Typ", "uninstall_display_profile": "Anzeigegeräteprofil deinstallieren...", "unknown": "unbekannt", "unnamed": "Unbenannt", "Untethered": "Nicht verbunden", "update_check": "Auf Programmaktualisierung überprüfen...", "update_check.fail": "Programmaktualisierungsüberprüfung fehlgeschlagen:", "update_check.fail.version": "Versionsdatei vom Server %s konnte nicht korrekt interpretiert werden.", "update_check.new_version": "Es ist eine Programmaktualisierung verfügbar: %s", "update_check.onstartup": "Beim Start auf Programmaktualisierung überprüfen", "update_check.uptodate": "%s ist auf dem neuesten Stand.", "upload": "Hochladen", "use_separate_lut_access": "Gesonderten Grafikkarten-Gammatabellen-Zugriff verwenden", "use_simulation_profile_as_output": "Simulationsprofil als Zielprofil verwenden", "vcgt": "Kalibrierungskurven", "verify.ti1": "Profilüberprüfungs-Testform", "verify_extended.ti1": "Erweiterte Profilüberprüfungs-Testform", "*vga": "VGA", "video.icc": "Video", "warning": "Warnung", "warning.already_exists": "Die Datei „%s“ existiert bereits am gewählten Ort und wird überschrieben. Wollen Sie wirklich fortfahren?", "warning.autostart_system": "Das systemweite Autostart-Verzeichnis konnte nicht ermittelt werden.", "warning.autostart_user": "Das benutzerspezifische Autostart-Verzeichnis konnte nicht ermittelt werden.", "warning.copy_failed_continue": "Die Datei „%s“ konnte nicht nach „%s“ kopiert werden. Fahre fort...", "warning.discard_changes": "Möchten Sie die Änderungen an den aktuellen Einstellungen wirklich verwerfen?", "warning.no_comports_detected": "Es wurde kein Messgerät erkannt.", "warning.suspicious_delta_e": "Warnung: Verdächtige Messwerte wurden gefunden. Bitte beachten Sie, dass die Prüfung ein in gewissem Unfang sRGB-ähnliches Anzeigegerät annimmt. Weicht Ihr Anzeigerät über eine bestimmte Toleranzschwelle hinaus davon ab (z.B. Bildschirme mit sehr breitem Gamut oder Tonwertkurve stark abweichend von sRGB), so sind gefundene Fehler eventuell nicht aussagekräftig.\n\nEines oder alle der folgenden Kriterien trafen zu:\n\n• Aufeinanderfolgende Farbfelder mit unterschiedlichen RGB-Werten, aber verdächtig niedrigem ΔE*00 der Messwerte gegeneinander.\n• RGB-Grau mit aufsteigenden RGB-Werten gegenüber dem vorherigenn Farbfeld, aber fallender Helligkeit (L*).\n• RGB-Grau mit absteigenden RGB-Werten gegenüber dem vorherigenn Farbfeld, aber steigender Helligkeit (L*).\n• Ungewöhnlich hohes ΔE*00 und ΔL*00 oder ΔH*00 oder ΔC*00 der gemessenen Werte zum sRGB-Äquivalent der RGB-Werte.\n\nDies könnte auf Messfehler hindeuten. Werte, die als problematisch erachtet werden (was nicht stimmen muss!), werden rot hervorgehaben. Überprüfen Sie die Messwerte sorgfältig und wählen Sie Felder, die Sie übernehmen möchten. Sie können die RGB- und XYZ-Werte auch bearbeiten.", "warning.suspicious_delta_e.info": "Erklärung der Δ-Spalten:\n\nΔE*00 XYZ A/B: ΔE*00 der Messwerte des Farbfelds zu den Messwerten des vorherigen Farbfelds. Fehlt dieser Wert, so war er für die Prüfung nicht ausschlaggebend. Ist er angegeben, so wurde er als zu niedrig vermutet.\n\n0.5 ΔE*00 RGB A/B: ΔE*00 des sRGB-Äquivalents der RGB-Werte des Farbfelds zum sRGB-Äquivalent der RGB-Werte des vorherigen Farbfelds (Faktor 0.5). Ist dieser Wert angegeben, so gibt er den Vergleichswert (Mindestwert) an, der bei der Prüfung auf vermutet zu niedriges ΔE*00 XYZ A/B Verwendung fand. Er dient als sehr grobe Orientierung.\n\nΔE*00 RGB-XYZ: ΔE*00 der Messwerte zum sRGB-Äquivalent der RGB-Werte.\nΔL*00 RGB-XYZ: ΔL*00 der Messwerte zum sRGB-Äquivalent der RGB-Werte.\nΔC*00 RGB-XYZ: ΔC*00 der Messwerte zum sRGB-Äquivalent der RGB-Werte.\nΔH*00 RGB-XYZ: ΔH*00 der Messwerte zum sRGB-Äquivalent der RGB-Werte.", "webserver.waiting": "Webserver wartet unter", "white": "Weiß", "whitepoint": "Weißpunkt", "whitepoint.colortemp": "Farbtemperatur", "whitepoint.colortemp.locus.blackbody": "Schwarzkörper", "whitepoint.colortemp.locus.curve": "Farbtemperatur-Kurve", "whitepoint.colortemp.locus.daylight": "Tageslicht", "whitepoint.set": "Möchten sie auch den Weißpunkt auf den gemessenen Wert setzen?", "whitepoint.simulate": "Weißpunkt simulieren", "whitepoint.simulate.relative": "Relativ zum Zielprofil-Weißpunkt", "whitepoint.xy": "Farbort", "window.title": "dispcalGUI", "windows.version.unsupported": "Diese Version von Windows wird nicht unterstützt.", "windows_only": "Nur Windows", "working_dir": "Arbeitsverzeichnis:", "yellow": "Gelb", "yes": "Ja", "ORPHANED KEY-VALUE PAIRS": "Note to translators: Key-value pairs below this point may no longer be used (but there are exceptions, all keys from ICCProfile.ICCProfile.get_info will be listed as orphaned). You may consider removing them.", "Abstract profile": "Abstraktes Profil", "Active matrix display": "Aktiv-Matrix Anzeigegerät", "Attributes": "Attribute", "Backing XYZ": "Messunterlage XYZ", "Bitdepth": "Bittiefe", "Black & white": "Schwarzweiss", "Black Lab": "Schwarz Lab", "Black XYZ": "Schwarz XYZ", "Blue Lab": "Blau Lab", "Blue XYZ": "Blau XYZ", "Blue gamma": "Blau Gamma", "Blue matrix column": "Blauer Matrix-Farbwert", "Blue maximum": "Blau Maximum", "Blue minimum": "Blau Minimum", "Blue tone response curve": "Blaue Farbtonwiedergabekurve", "Calculated checksum": "Errechnete Prüfsumme", "Can be used independently": "Kann unabhängig verwendet werden", "Cathode ray tube display": "Kathodenstrahlröhrenmonitor", "Channel 1 (C) xy": "Kanal 1 (C) xy", "Channel 1 (R) xy": "Kanal 1 (R) xy", "Channel 1 gamma at 50% input": "Kanal 1 Gamma bei 50% Stimulus", "Channel 1 is linear": "Kanal 1 ist linear", "Channel 1 maximum": "Kanal 1 Maximum", "Channel 1 minimum": "Kanal 1 Minimum", "Channel 1 unique values": "Kanal 1 eindeutige Tonwerte", "Channel 2 (G) xy": "Kanal 2 (G) xy", "Channel 2 (M) xy": "Kanal 2 (M) xy", "Channel 2 gamma at 50% input": "Kanal 2 Gamma bei 50% Stimulus", "Channel 2 is linear": "Kanal 2 ist linear", "Channel 2 maximum": "Kanal 2 Maximum", "Channel 2 minimum": "Kanal 2 Minimum", "Channel 2 unique values": "Kanal 2 eindeutige Tonwerte", "Channel 3 (B) xy": "Kanal 3 (B) xy", "Channel 3 (Y) xy": "Kanal 3 (Y) xy", "Channel 3 gamma at 50% input": "Kanal 3 Gamma bei 50% Stimulus", "Channel 3 is linear": "Kanal 3 ist linear", "Channel 3 maximum": "Kanal 3 Maximum", "Channel 3 minimum": "Kanal 3 Minimum", "Channel 3 unique values": "Kanal 3 eindeutige Tonwerte", "Channel 4 (K) xy": "Kanal 4 (K) xy", "Channels": "Kanäle", "Characterization device values": "Gerätefarbwerte", "Characterization measurement values": "Farbmesswerte", "Characterization target": "Charakterisierungsdaten", "Checksum": "Prüfsumme", "Checksum OK": "Prüfsumme OK", "Chromatic adaptation matrix": "Matrix zur chromatischen Anpassung", "Chromatic adaptation transform": "Methode zur chromatischen Anpassung", "Chromaticity (illuminant-relative)": "Chromatizität (Leuchtmittel-Bezug)", "Color": "Farbig", "Color model": "Farbmodell", "Color space Conversion profile": "Farbraum-Konvertierungsprofil", "Colorant order": "Farbmittel-Druckreihenfolge", "Colorants (PCS-relative)": "Farbmittel (PCS-Bezug)", "Copyright": "Urheberrecht", "Created": "Erstellt", "Creator": "Ersteller", "Default rendering intent": "Standard-Rendering-Intent", "Description": "Beschreibung", "Description (ASCII)": "Beschreibung (ASCII)", "Description (Macintosh)": "Beschreibung (Macintosh)", "Description (Unicode)": "Beschreibung (Unicode)", "Device": "Gerät", "Device manufacturer name": "Gerätehersteller", "Device manufacturer name (ASCII)": "Gerätehersteller (ASCII)", "Device manufacturer name (Macintosh)": "Gerätehersteller (Macintosh)", "Device manufacturer name (Unicode)": "Gerätehersteller (Unicode)", "Device model name": "Gerätemodell", "Device model name (ASCII)": "Gerätemodell (ASCII)", "Device model name (Macintosh)": "Gerätemodell (Macintosh)", "Device model name (Unicode)": "Gerätemodell (Unicode)", "Device to PCS: Intent 0": "Gerät zu PCS: Anpassungsart 0", "Device to PCS: Intent 1": "Gerät zu PCS: Anpassungsart 1", "Device to PCS: Intent 2": "Gerät zu PCS: Anpassungsart 2", "DeviceLink profile": "DeviceLink-Profil", "Digital camera": "Digitale Kamera", "Display device profile": "Anzeigegeräteprofil", "Dye sublimation printer": "Sublimationsdrucker", "Electrophotographic printer": "Elektrophotographischer Drucker", "Electrostatic printer": "Elektrostatischer Drucker", "Film scanner": "Filmscanner", "Film writer": "Filmbelichter", "Flare": "Streulicht", "Flexography": "Flexodruck", "Generic name-value data": "Generische Wertetabelle", "Geometry": "Messgeometrie", "Glossy": "Glänzend", "Gravure": "Tiefdruck", "Gray tone response curve": "Graue Farbtonwiedergabekurve", "Green Lab": "Grün Lab", "Green XYZ": "Grün XYZ", "Green gamma": "Grün Gamma", "Green matrix column": "Grüner Matrix-Farbwert", "Green maximum": "Grün Maximum", "Green minimum": "Grün Minimum", "Green tone response curve": "Grüne Farbtonwiedergabekurve", "ICC version": "ICC-Version", "ICC-absolute colorimetric": "ICC-absolut farbmetrisch", "Illuminant": "Leuchtmittel", "Illuminant XYZ": "Leuchtmittel XYZ", "Illuminant-relative CCT": "Leuchtmittel-Bezug CCT", "Illuminant-relative Lab": "Leuchtmittel-Bezug Lab", "Illuminant-relative XYZ": "Leuchtmittel-Bezug XYZ", "Ink jet printer": "Tintenstrahldrucker", "Input device profile": "Eingabegeräteprofil", "Is embedded": "Ist eingebettet", "Is illuminant": "Ist Leuchtmittel", "Is linear": "Ist linear", "Luminance": "Helligkeit", "Make and model": "Gerätehersteller und Modell", "Manufacturer": "Hersteller", "Matte": "Matt", "Measurement type": "Messungsart", "Media black point": "Medien-Schwarzpunkt", "Media white point": "Medien-Weißpunkt", "Media-relative colorimetric": "Medien-relativ farbmetrisch", "Metadata": "Metadaten", "Model": "Modell", "Named colour profile": "Farbwerte-Profil", "Negative": "Negativ", "No": "Nein", "None": "Keine", "Number of entries": "Anzahl Werte", "Number of entries per channel": "Anzahl Werte pro Kanal", "Observer": "Beobachter", "Offset lithography": "Offsetdruck", "Out of gamut tag": "Gamut-Prüftabelle", "Output device profile": "Ausgabegeräteprofil", "Output offset": "Ausgabe-Offset", "PCS illuminant XYZ": "PCS-Leuchtmittel XYZ", "PCS to device: Intent 0": "PCS zu Gerät: Anpassungsart 0", "PCS to device: Intent 1": "PCS zu Gerät: Anpassungsart 1", "PCS to device: Intent 2": "PCS zu Gerät: Anpassungsart 2", "PCS-relative CCT": "PCS-Bezug CCT", "PCS-relative Lab": "PCS-Bezug Lab", "PCS-relative XYZ": "PCS-Bezug XYZ", "Passive matrix display": "Passiv-Matrix Anzeigegerät", "Perceptual": "Wahrnehmung", "Photo imagesetter": "Photo-Filmbelichter", "Photographic paper printer": "Fotopapier-Drucker", "Platform": "Plattform", "Positive": "Positiv", "Preferred CMM": "Bevorzugtes CMM", "Profile class": "Profilklasse", "Profile connection space (PCS)": "Bezugsfarbraum (PCS)", "Projection television": "Rückprojektions-Fernseher", "Red Lab": "Rot Lab", "Red XYZ": "Rot XYZ", "Red gamma": "Rot Gamma", "Red matrix column": "Roter Matrix-Farbwert", "Red maximum": "Rot Maximum", "Red minimum": "Rot Minimum", "Red tone response curve": "Rote Farbtonwiedergabekurve", "Reflective": "Aufsicht", "Reflective scanner": "Auflicht-Scanner", "Saturation": "Sättigung", "Silkscreen": "Siebdruck", "Size": "Größe", "Surround XYZ": "Umgebungslicht XYZ", "Technology": "Technologie", "Thermal wax printer": "Thermosublimationsdrucker", "Transfer function": "Übertragungsfunktion", "Transparency": "Durchsicht", "Unknown": "Unbekannt", "Video camera": "Video-Kamera", "Video card gamma table": "Grafikkarten-Gammatabelle", "Video monitor": "Video-Monitor", "Viewing conditions": "Betrachtungbedingungen", "Viewing conditions description": "Beschreibung der Betrachtungbedingungen", "Yellow Lab": "Gelb Lab", "Yellow XYZ": "Gelb XYZ", "Yes": "Ja", "tc.patches.colour": "farbig", "ΔE 2000 to blackbody locus": "ΔE 2000 zu Schwarzkörper-Farbort", "ΔE 2000 to daylight locus": "ΔE 2000 zu Tageslicht-Farbort", } dispcalGUI-1.7.1.6/dispcalGUI/lang/en.json000644 000765 000000 00000141336 12266603364 020040 0ustar00svpwheel000000 000000 { "*": "Note to translators: Keys which are not yet translated are marked with a leading asterisk (*) and are indented with two tabs instead of one. Please remove the asterisk when translated.", "!author": "Florian Höch", "!language": "English", "!language_name": "ENGLISH", "apply": "Apply", "apply_bt1886_gamma_mapping": "Apply BT.1886 gamma mapping", "3dlut.bitdepth.input": "3D LUT input bitdepth", "3dlut.bitdepth.output": "3D LUT output bitdepth", "3dlut.create": "Create 3D LUT...", "3dlut.encoding.input": "Input encoding", "3dlut.encoding.output": "Output encoding", "3dlut.encoding.output.warning.madvr": "Warning: This output encoding is not recommended and will cause clipping if madVR is not set up to output “TV levels (16-235)” under “Devices” → “%s” → “Properties”. Use at own risk!", "3dlut.encoding.type_n": "Full range RGB 0-255", "3dlut.encoding.type_t": "TV RGB 16-235", "3dlut.encoding.type_6": "TV Rec. 601 YCbCr SD", "3dlut.encoding.type_7": "TV Rec. 709 1125/60Hz YCbCr HD", "3dlut.encoding.type_5": "TV Rec. 709 1250/50Hz YCbCr HD", "3dlut.encoding.type_2": "TV Rec. 2020 YCbCr UHD", "3dlut.encoding.type_C": "TV Rec. 2020 Constant Luminance YCbCr UHD", "3dlut.encoding.type_x": "TV xvYCC Rec. 601 YCbCr (Rec. 709 Primaries) SD", "3dlut.encoding.type_X": "TV xvYCC Rec. 709 YCbCr HD", "3dlut.format": "3D LUT file format", "3dlut.format.3dl": "Autodesk Lustre / Kodak Look Manager System (.3dl)", "3dlut.format.cube": "IRIDAS (.cube)", "3dlut.format.eeColor": "eeColor Box (.txt)", "3dlut.format.mga": "Pandora (.mga)", "3dlut.format.madVR": "madVR (.3dlut)", "3dlut.format.spi3d": "Sony Imageworks (.spi3d)", "3dlut.frame.title": "Create 3D LUT", "3dlut.input.profile": "Source profile", "3dlut.madVR.enable": "Enable madVR 3D LUT", "output.profile": "Target profile", "apply_cal": "Apply calibration (vcgt)", "apply_cal.error": "Calibration could not be applied.", "3dlut.size": "3D LUT size", "3dlut.use_abstract_profile": "Abstract (“Look”) profile", "[rgb]TRC": "Tone response curves", "aborted": "...aborted.", "aborting": "Aborting, please wait (this may take a few seconds)...", "adaptive_mode_unavailable": "Adaptive mode is only available with Argyll CMS 1.1.0 RC3 or newer.", "allow_skip_sensor_cal": "Allow skipping of spectrometer self-calibration", "ambient.measure": "Measure ambient", "ambient.set": "Do you also want to set the ambient light level to the measured value?", "app.confirm_restore_defaults": "Do you really want to discard your changes and restore defaults?", "app.restart_request": "Please restart the application.", "argyll.debug.warning1": "Please only use this option if you actually need debugging information (e.g. for troubleshooting Argyll CMS functionality)! It is normally only useful for software developers to aid in problem diagnosis and resolution. Are you sure you want to enable debugging output?", "argyll.debug.warning2": "Please remember to disable debugging output for normal operation of the software.", "argyll.dir": "Argyll CMS executable directory:", "argyll.dir.invalid": "Argyll CMS executables not found!\nPlease select the directory which contains the executable files (maybe prefixed or suffixed “argyll-” / “-argyll”): %s", "argyll.error.detail": "Detailed Argyll CMS error message:", "argyll.instrument.driver.missing": "The Argyll CMS driver for your measurement device seems not to be installed or installed incorrectly. Please check if your measurement device is shown in Windows' device manager under „Argyll LibUSB-1.0A devices“ and (re-)install the driver if necessary. Please read the documentation for installation instructions.", "argyll.util.not_found": "Argyll CMS “%s” executable not found!", "as_measured": "As measured", "auth.failed": "Authentification failed.", "auto": "Auto", "autostart_remove_old": "Removing old autostart entry", "backlight": "Backlight", "black": "Black", "black_point": "Black point", "black_point_compensation": "Black point compensation", "black_point_compensation.info": "Black point compensation effectively prevents black crush, but reduces the accuracy of color conversion.", "blacklevel": "Black level", "blue": "Blue", "brightness": "Brightness", "browse": "Browse...", "bug_report": "Report a bug...", "button.calibrate": "Calibrate only", "button.calibrate_and_profile": "Calibrate && profile", "button.profile": "Profile only", "cal_extraction_failed": "Could not extract calibration data from the profile.", "calibration": "Calibration", "calibration.ambient_viewcond_adjust": "Ambient light level adjustment", "calibration.ambient_viewcond_adjust.info": "To perform a viewing condition adjustment when computing calibration curves, tick the checkbox and enter your ambient light level. You can also optionally measure ambient light, if supported by your instrument.", "calibration.black_luminance": "Black level", "calibration.black_output_offset": "Black output offset", "calibration.black_point_correction": "Black point correction", "calibration.black_point_correction_choice": "You may turn off black point correction, to optimize black level and contrast ratio (recommended for most LCD monitors), or you can turn it on to make black the same hue as the whitepoint (recommended for most CRT monitors). Please select your black point correction preference:", "calibration.black_point_correction_choice_dialogtitle": "Black point correction", "calibration.black_point_rate": "Rate", "calibration.check_all": "Check settings", "calibration.complete": "Calibration complete!", "calibration.create_fast_matrix_shaper": "Create matrix profile", "calibration.create_fast_matrix_shaper_choice": "Do you want to create a fast matrix shaper profile from calibration measurements or just calibrate?", "calibration.do_not_use_video_lut": "Do not use video card gamma table to apply calibration", "calibration.do_not_use_video_lut.warning": "Do you really want to change the recommended setting?", "calibration.embed": "Embed calibration curves in profile", "calibration.file": "Settings", "calibration.file.invalid": "The chosen settings file is invalid.", "calibration.file.none": "", "calibration.incomplete": "Calibration has not been finished.", "calibration.interactive_display_adjustment": "Interactive display adjustment", "calibration.interactive_display_adjustment.black_level.crt": "Select “Start measurement” and adjust your display's brightness and/or RGB offset controls to match the desired level.", "calibration.interactive_display_adjustment.black_point.crt": "Select “Start measurement” and adjust your display's RGB offset controls to match the desired black point.", "calibration.interactive_display_adjustment.check_all": "Select “Start measurement” to check on the overall settings.", "calibration.interactive_display_adjustment.generic_hint.plural": "A good match is obtained if all bars can be brought to the marked position in the center.", "calibration.interactive_display_adjustment.generic_hint.singular": "A good match is obtained if the bar can be brought to the marked position in the center.", "calibration.interactive_display_adjustment.start": "Start measurement", "calibration.interactive_display_adjustment.stop": "Stop measurement", "calibration.interactive_display_adjustment.white_level.crt": "Select “Start measurement” and adjust your display's contrast and/or RGB gain controls to match the desired level.", "calibration.interactive_display_adjustment.white_level.lcd": "Select “Start measurement” and adjust your display's backlight/brightness control to match the desired level.", "calibration.interactive_display_adjustment.white_point": "Select “Start measurement” and adjust your display's color temperature and/or RGB gain controls to match the desired white point.", "calibration.keep_black_point_correction": "Keep current setting", "calibration.load": "Load settings...", "calibration.load_error": "Calibration curves could not be loaded.", "calibration.load_from_cal": "Load calibration curves from calibration file...", "calibration.load_from_cal_or_profile": "Load calibration curves from calibration file or profile...", "calibration.load_from_display_profile": "Load calibration curves from current display device profile", "calibration.load_from_profile": "Load calibration curves from profile...", "calibration.load_success": "Calibration curves successfully loaded.", "calibration.loading": "Loading calibration curves from file...", "calibration.loading_from_display_profile": "Loading calibration curves of current display device profile...", "calibration.luminance": "White level", "calibration.lut_viewer.title": "Curves", "calibration.preview": "Preview calibration", "calibration.quality": "Calibration quality", "calibration.quality.high": "High", "calibration.quality.low": "Low", "calibration.quality.medium": "Medium", "calibration.quality.ultra": "Ultra", "calibration.quality.verylow": "Very low", "calibration.speed": "Calibration speed", "calibration.speed.high": "High", "calibration.speed.low": "Low", "calibration.speed.medium": "Medium", "calibration.speed.veryhigh": "Very high", "calibration.speed.verylow": "Very low", "calibration.reset": "Reset video card gamma table", "calibration.reset_error": "Video card gamma table could not be reset.", "calibration.reset_success": "Video card gamma table successfully reset.", "calibration.resetting": "Resetting video card gamma table to linear...", "calibration.settings": "Calibration settings", "calibration.show_actual_lut": "Show actual calibration curves from video card gamma table", "calibration.show_lut": "Show curves", "calibration.start": "Continue on to calibration", "calibration.turn_off_black_point_correction": "Turn off", "calibration.turn_on_black_point_correction": "Turn on", "calibration.update": "Update calibration", "calibration.update_profile_choice": "Do you want to also update the calibration curves in the existing profile or just calibrate?", "calibration.use_linear_instead": "Use linear calibration instead", "calibration.verify": "Verify calibration", "calibration_profiling.complete": "Calibration and profiling complete!", "calibrationloader.description": "Sets ICC profiles and loads calibration curves for all configured display devices", "cancel": "Cancel", "ccxx.ti1": "Testchart for colorimeter correction", "checking_lut_access": "Checking video card gamma table access for display %s...", "centered": "Centered", "clear": "Clear", "color.custom": "Custom color", "colorconfig_remove_old": "Removing old display configuration file", "colorimeter_correction.create": "Create colorimeter correction...", "colorimeter_correction.create.details": "Please check the fields below and change them when necessary. The description should also contain important details (e.g. specific display settings, non-default CIE observer or the like).", "colorimeter_correction.create.failure": "Correction creation failed.", "colorimeter_correction.create.info": "To create a colorimeter correction matrix (CCMX) or Calibration Spectral Sample (CCSS) file, you first need to measure the “Testchart for colorimeter correction” with a spectrometer, and in case you want to create a CCMX, also with the colorimeter.\nTo do this, choose “Measure testchart”. Afterwards, choose “Create colorimeter correction...” and select the measured file(s).", "colorimeter_correction.create.success": "Correction successfully created.", "colorimeter_correction.file.none": "None", "colorimeter_correction.import": "Import colorimeter corrections from other display profiling software...", "colorimeter_correction.import.auto_manual": "If you want to automatically import colorimeter corrections, you need to either already have installed the vendor software of your instrument, or insert its installation media, and then choose “Auto”. If you have a software installer which you haven't run yet, or want to select a file yourself, choose “Select file”.", "colorimeter_correction.import.choose": "Please choose the colorimeter correction file to import:", "colorimeter_correction.import.failure": "No colorimeter corrections could be imported.", "colorimeter_correction.import.success": "Colorimeter corrections have been successfully imported from the following softwares:\n\n%s", "colorimeter_correction.instrument_mismatch": "The selected colorimeter correction is not suitable for the selected instrument.", "colorimeter_correction.upload": "Upload colorimeter correction...", "colorimeter_correction.upload.confirm": "Do you want to upload the colorimeter correction to the online database (recommended)? Any uploaded files will be assumed to have been placed in the public domain, so that they can be used freely.", "colorimeter_correction.upload.deny": "This colorimeter correction may not be uploaded.", "colorimeter_correction.upload.exists": "The colorimeter correction already exists in the database.", "colorimeter_correction.upload.failure": "The correction couldn't be entered into the online database.", "colorimeter_correction.upload.success": "The correction was successfully uploaded to the online database.", "colorimeter_correction.web_check": "Check online for colorimeter correction...", "colorimeter_correction.web_check.choose": "The folowing colorimeter corrections for the selected display and instrument have been found:", "colorimeter_correction.web_check.failure": "No colorimeter corrections for the selected display and instrument have been found.", "colorimeter_correction_matrix_file": "Correction", "colorimeter_correction_matrix_file.choose": "Choose colorimeter correction", "colorspace": "Colorspace", "colorspace.show_outline": "Show outline", "commandline": "Command line:", "comparison_profile": "Comparison profile", "comport_detected": "A change in the instrument/port configuration has been detected.", "compression.gzip": "GZIP compression", "computer.name": "Computername", "connection.fail": "Connection error (%s)", "connection.fail.http": "HTTP error %s", "continue": "Continue", "contrast": "Contrast", "create_and_preview": "Create && Preview", "create_ccss_or_ccmx": "Do you want to create a correction matrix for ordinary colorimeters (CCMX) or a calibration spectral sample for the i1 Display Pro and ColorMunki Display (CCSS)?", "create_profile": "Create profile from measurement data...", "create_profile_from_edid": "Create profile from extended display identification data...", "created": "Created", "current": "Current", "custom": "Custom", "cyan": "Cyan", "d3-e4-s0-g9-m3-b3-f0-crossover.ti1": "Default testchart for matrix profiles", "d3-e4-s0-g25-m3-b3-f0-crossover.ti1": "Extended testchart for matrix profiles", "d3-e4-s0-g49-m3-b3-f0-crossover.ti1": "Large testchart for matrix profiles", "d3-e4-s0-g97-m3-b3-f0-crossover.ti1": "Very large testchart for matrix profiles", "d3-e4-s3-g3-m0-f0.ti1": "Default testchart for “gamma + matrix” profiles", "d3-e4-s13-g37-m4-b4-f0.ti1": "Small testchart for LUT profiles", "d3-e4-s17-g49-m5-b5-f0.ti1": "Default testchart for LUT profiles", "d3-e4-s21-g61-m6-b6-f0.ti1": "Extended testchart for LUT profiles", "d3-e4-s25-g73-m7-b7-f0.ti1": "Large testchart for LUT profiles", "d3-e4-s29-g85-m8-b8-f0.ti1": "Very large testchart for LUT profiles", "d3-e4-s29-g85-m0-f994-caRGB.ti1": "Very large testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "d3-e4-s29-g85-m0-f994-ceRGBv2.ti1": "Very large testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "d3-e4-s29-g85-m0-f994-cRec709_Gamma22.ti1": "Very large testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "d3-e4-s29-g85-m0-f994-csRGB.ti1": "Very large testchart for LUT profiles, optimized for sRGB (D65)", "d3-e4-s33-g97-m9-b9-f0.ti1": "XXL testchart for LUT profiles", "d3-e4-s33-g97-m0-f1399-caRGB.ti1": "XXL testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "d3-e4-s33-g97-m0-f1399-ceRGBv2.ti1": "XXL testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "d3-e4-s33-g97-m0-f1399-cRec709_Gamma22.ti1": "XXL testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "d3-e4-s33-g97-m0-f1399-csRGB.ti1": "XXL testchart for LUT profiles, optimized for sRGB (D65)", "d3-e4-s37-g109-m10-b10-f0.ti1": "XXXL testchart for LUT profiles", "d3-e4-s37-g109-m0-f1906-caRGB.ti1": "XXXL testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "d3-e4-s37-g109-m0-f1906-ceRGBv2.ti1": "XXXL testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "d3-e4-s37-g109-m0-f1906-cRec709_Gamma22.ti1": "XXXL testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "d3-e4-s37-g109-m0-f1906-csRGB.ti1": "XXXL testchart for LUT profiles, optimized for sRGB (D65)", "d3-e4-s41-g121-m11-b11-f0.ti1": "Massive testchart for LUT profiles", "d3-e4-s41-g121-m0-f2527-caRGB.ti1": "Massive testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "d3-e4-s41-g121-m0-f2527-ceRGBv2.ti1": "Massive testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "d3-e4-s41-g121-m0-f2527-cRec709_Gamma22.ti1": "Massive testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "d3-e4-s41-g121-m0-f2527-csRGB.ti1": "Massive testchart for LUT profiles, optimized for sRGB (D65)", "default": "Default", "delete": "Delete", "delta_e_to_locus": "ΔE*00 to %s locus", "description": "Description", "deselect_all": "Deselect all", "detect_displays_and_ports": "Detect display devices and instruments", "device.name.placeholder": "", "devlink_profile": "DeviceLink profile", "dialog.cal_info": "The calibration file “%s” will be used. Do you want to continue?", "dialog.confirm_cancel": "Do you really want to cancel?", "dialog.confirm_delete": "Do you really want to delete the selected file(s)?", "dialog.confirm_overwrite": "The file “%s” already exists. Do you want to overwrite it?", "dialog.current_cal_warning": "The current calibration curves will be used. Do you want to continue?", "dialog.do_not_show_again": "Do not show this message again", "dialog.enter_password": "Please enter your password.", "dialog.install_profile": "Do you want to install the profile “%s” and make it the default for display “%s”?", "dialog.linear_cal_info": "Linear calibration curves will be used. Do you want to continue?", "dialog.load_cal": "Load settings", "dialog.set_argyll_bin": "Please locate the directory where the Argyll CMS executables reside.", "dialog.set_profile_save_path": "Create profile directory “%s” here:", "dialog.set_testchart": "Choose testchart file", "dialog.ti3_no_cal_info": "The measurement data does not contain calibration curves. Do you really want to continue?", "display": "Display device", "display.connection.type": "Connection", "display.manufacturer": "Display device manufacturer", "display.primary": "(Primary)", "display.properties": "Display device properties", "display.settings": "Display device settings", "display.tech": "Display technology", "display_detected": "A change in the display device configuration has been detected.", "display_lut.link": "Link/unlink display and video card gamma table access", "display_short": "Display device (abbreviated)", "displayport": "DisplayPort", "drift_compensation.blacklevel": "Black level drift compensation", "drift_compensation.blacklevel.info": "Black level drift compensation tries to counter measurement deviations caused by black calibration drift of a warming up measurement device. For this purpose, a black test patch is measured periodically, which increases the overall time needed for measurements. Many colorimeters have built-in temperature compensation, in which case black level drift compensation should not be needed, but most spectrometers are not temperature compensated.", "drift_compensation.whitelevel": "White level drift compensation", "drift_compensation.whitelevel.info": "White level drift compensation tries to counter measurement deviations caused by luminance changes of a warming up display device. For this purpose, a white test patch is measured periodically, which increases the overall time needed for measurements.", "dry_run": "Dry run", "dry_run.end": "Dry run ended.", "dry_run.info": "Dry run. Check the log to see the command line.", "dvi": "DVI", "edid.crc32": "EDID CRC32 checksum", "edid.serial": "EDID serial", "elapsed_time": "Elapsed time", "enable_argyll_debug": "Enable Argyll CMS debugging output", "enable_spyder2": "Enable Spyder 2 Colorimeter...", "enable_spyder2_failure": "Spyder 2 could not be enabled. Please install the Spyder 2 software manually if it hasn't been installed yet, then run this command again.", "enable_spyder2_success": "Spyder 2 successfully enabled.", "enumerate_ports.auto": "Automatically detect instruments", "enumerating_displays_and_comports": "Enumerating display devices and communication ports...", "error": "Error", "error.access_denied.write": "You do not have write access to %s", "error.already_exists": "The name “%s” can not be used, because another object of the same name already exists. Please choose another name or another directory.", "error.autostart_creation": "Creation of the autostart entry for %s to load the calibration curves on login has failed.", "error.autostart_remove_old": "The old autostart entry which loads calibration curves on login could not be removed: %s", "error.autostart_system": "The system-wide autostart entry to load the calibration curves on login could not be created, because the system-wide autostart directory could not be determined.", "error.autostart_user": "The user-specific autostart entry to load the calibration curves on login could not be created, because the user-specific autostart directory could not be determined.", "error.cal_extraction": "The calibration could not be extracted from “%s”.", "error.calibration.file_missing": "The calibration file “%s” is missing.", "error.calibration.file_not_created": "No calibration file has been created.", "error.calibration.file_notfile": "“%s” is not a file.", "error.colorconfig_remove_old": "The old configuration file mapping profiles to displays could not be removed: %s", "error.copy_failed": "The file “%s” could not be copied to “%s”.", "error.deletion": "An error occured while moving files to the %s. Some files might not have been removed.", "error.dir_creation": "The directory “%s” could not be created. Maybe there are access restrictions. Please allow writing access or choose another directory.", "error.dir_notdir": "The directory “%s” could not be created, because another object of the same name already exists. Please choose another directory.", "error.file.create": "The file “%s” could not be created.", "error.file.open": "The file “%s” could not be opened.", "error.file_type_unsupported": "Unsupported filetype.", "error.generic": "An internal error occured.\n\nError code: %s\nError message: %s", "error.measurement.file_invalid": "The measurement file „%s“ is invalid.", "error.measurement.file_missing": "The measurement file “%s” is missing.", "error.measurement.file_not_created": "No measurement file has been created.", "error.measurement.file_notfile": "“%s” is not a file.", "error.measurement.missing_spectral": "The measurement file does not contain spectral values.", "error.measurement.one_colorimeter": "Exactly one colorimeter measurement is needed.", "error.measurement.one_reference": "Exactly one reference measurement is needed.", "error.no_displays_detected": "No display devices could be detected.", "error.profile.file_missing": "The profile “%s” is missing.", "error.profile.file_not_created": "No profile has been created.", "error.profile.file_notfile": "“%s” is not a file.", "error.source_dest_same": "Source and target file are the same.", "error.testchart.creation_failed": "The testchart file “%s” could not be created. Maybe there are access restrictions, or the source file does not exist.", "error.testchart.invalid": "The testchart file “%s” is invalid.", "error.testchart.missing": "The testchart file “%s” is missing.", "error.testchart.missing_fields": "The testchart file „%s“ does not contain required fields: %s", "error.testchart.read": "The testchart file “%s” could not be read.", "error.tmp_creation": "Could not create temporary working directory.", "error.trashcan_unavailable": "The %s is not available. No files were removed.", "errors.none_found": "No errors found.", "export": "Export...", "extra_args": "Set additional commandline arguments...", "failure": "...failed!", "file.invalid": "File invalid.", "file.missing": "The file “%s” does not exist.", "file.notfile": "“%s” is not a file.", "file.select": "Select file", "filetype.any": "Any Filetype", "filetype.cal": "Calibration files (*.cal)", "filetype.cal_icc": "Calibration and profile files (*.cal;*.icc;*.icm)", "filetype.ccmx": "Correction matrices/Calibration spectral samples (*.ccmx;*.ccss)", "filetype.html": "HTML files (*.html;*.htm)", "filetype.icc": "Profile files (*.icc;*.icm)", "filetype.icc_mpp": "Profile files (*.icc;*.icm;*.mpp)", "filetype.icc_ti1_ti3": "Testchart files (*.icc;*.icm;*.ti1;*.ti3)", "filetype.icc_ti3": "Measurement files (*.icc;*.icm;*.ti3)", "filetype.log": "Log files (*.log)", "filetype.png": "Portable Network Graphics (*.png)", "filetype.tif": "Tagged Image File (*.tif)", "filetype.ti1": "Testchart files (*.ti1)", "filetype.ti1_ti3_txt": "Testchart files (*.ti1), Measurement files (*.ti3;*.txt)", "filetype.ti3": "Measurement files (*.ti3)", "filetype.txt": "DeviceCorrections.txt", "filetype.vrml": "VRML files (*.wrl)", "finish": "Finish", "gamap.default_intent": "Default rendering intent for display device profile", "gamap.intents.a": "Absolute colorimetric", "gamap.intents.aa": "Absolute appearance", "gamap.intents.aw": "Absolute colorimetric with white point scaling", "gamap.intents.la": "Luminance matched appearance", "gamap.intents.ms": "Preserve saturation", "gamap.intents.p": "Perceptual", "gamap.intents.pa": "Perceptual appearance", "gamap.intents.r": "Relative colorimetric", "gamap.intents.s": "Saturation", "gamap.out_viewcond": "Target viewing conditions", "gamap.perceptual": "Gamut mapping for perceptual intent", "gamap.profile": "Source profile", "gamap.saturation": "Gamut mapping for saturation intent", "gamap.src_viewcond": "Source viewing conditions", "gamap.viewconds.cx": "Cut Sheet Transparencies on a viewing box", "gamap.viewconds.jd": "Projector in dark environment", "gamap.viewconds.jm": "Projector in dim environment", "gamap.viewconds.mb": "Monitor in bright work environment", "gamap.viewconds.md": "Monitor in darkened work environment", "gamap.viewconds.mt": "Monitor in typical work environment", "gamap.viewconds.ob": "Original scene - Bright Outdoors", "gamap.viewconds.pcd": "Photo CD - original scene outdoors", "gamap.viewconds.pe": "Print evaluation environment", "gamap.viewconds.pp": "Practical Reflection Print", "gamapframe.title": "Advanced gamut mapping options", "gamut": "Gamut", "gamut.coverage": "Gamut coverage", "gamut.view.create": "Generating gamut views...", "gamut.volume": "Gamut volume", "gamut_plot.tooltip": "Click and drag the mouse inside the plot to move the viewport,\nor zoom with the mouse wheel and +/- keys. Double-click resets the viewport.", "glossy": "Glossy", "go_to_website": "Go to Website", "grayscale": "grayscale", "green": "Green", "hdmi": "HDMI", "help_support": "Help and support...", "hue": "Hue", "if_available": "if available", "illumination": "Illumination", "in": "In", "infoframe.default_text": "", "infoframe.title": "Log", "infoframe.toggle": "Show log window", "initial": "Initial", "initializing_gui": "Initializing GUI...", "install_display_profile": "Install display device profile...", "instrument": "Instrument", "instrument.calibrate": "Place the instrument on a dark, matte surface or onto its calibration plate and press OK to calibrate the instrument.", "instrument.calibrate.colormunki": "Set the ColorMunki sensor to calibration position and press OK to calibrate the instrument.", "instrument.calibrating": "Calibrating instrument...", "instrument.initializing": "Setting up the instrument, please wait...", "instrument.measure_ambient": "If your instrument requires a special cap to measure ambient, please attach it. To measure ambient light, place the instrument upwards, beside the display. Or if you want to measure a viewing booth, put a metamerism-free gray card inside the booth and point the instrument towards it. Further instructions how to measure ambient may be available in your instrument's documentation. Press OK to commence measurement.", "instrument.place_on_screen": "Place the instrument on the test window and click OK to continue.", "instrument.reposition_sensor": "The measurement failed because the instrument sensor is in the wrong position. Please correct the sensor position, then click OK to continue.", "internal": "Internal", "invert_selection": "Invert selection", "laptop.icc": "Laptop", "license": "License", "license_info": "Licensed under the GPL", "linear": "linear", "locale.set": "Setting locale: %s", "locate_spyder2_setup": "In the following file dialog, please select the file Spyder2express_2.3.6_Setup.exe or Spyder2PRO_2.3.5_Setup.exe which can be downloaded from http://support.datacolor.com/index.php?/Knowledgebase/List/Index/88/windows", "locate_spyder2_setup_mac": "In the following file dialog, please select the Spyder 2 software installer, or if the software has already been installed, locate the file Spyder.lib (you may have to switch to the Finder and Ctrl-click the Spyder2 application, which is usually located under “Applications/Spyder2 ”, and select “Show package Contents” from the popup menu, then copy the file out of the folder “Contents/Mac OS Classic” to be able to select it).", "locate_spyder2_setup_win": "In the following file dialog, please select the Spyder 2 software installer, or if the software has already been installed, locate the file CVSpyder.dll (which is usually located under “Program Files\\ColorVision\\Spyder2”).", "log.autoshow": "Show log window automatically", "lut_access": "Video card gamma table access", "madVR.icc": "madVR", "magenta": "Magenta", "matrix": "Matrix", "matte": "Matte", "max": "Max", "maximal": "Maximal", "measure": "Measure", "measure.darken_background": "Black background", "measure.darken_background.warning": "Attention: If „black background“ is chosen, it will cover the whole screen and you will not be able to see the display adjustment window! If you have a multi-screen setup, move the display adjustment window to another screen before starting the measurement, or use the keyboard (to abort the measurement, press Q. If the measurement is already running, wait briefly, then press Q again).", "measure.testchart": "Measure testchart", "measureframe.center": "Center", "measureframe.info": "Move the measurement window to the desired screen position and resize if needed. Approximately the whole window area will be used to display measurement patches, the circle is just there as a guide to help you place your measurement device.\nPlace the measurement device on the window and click on „Start measurement“. To cancel and return to the main window, close the measurement window.", "measureframe.infobutton": "Info", "measureframe.measurebutton": "Start measurement", "measureframe.title": "Measurement area", "measureframe.zoomin": "Enlarge", "measureframe.zoommax": "Maximize/Restore", "measureframe.zoomnormal": "Normal size", "measureframe.zoomout": "Shrink", "measurement.play_sound": "Acoustic feedback on continuous measurements", "measurement.set_save_path": "Save the measurement file in the following folder:", "measurement.untethered": "Untethered measurement", "measurement_file.check_sanity": "Check measurement file...", "measurement_file.check_sanity.auto": "Automatically check measurements", "measurement_file.check_sanity.auto.warning": "Please note automatic checking of measurements is an experimental feature. Use at own risk.", "measurement_file.choose": "Please choose a measurement file", "measurement_file.choose.colorimeter": "Please choose a colorimeter measurement file", "measurement_file.choose.reference": "Please choose a reference measurement file", "measurement_mode": "Mode", "measurement_mode.adaptive": "Adaptive", "measurement_mode.factory": "Factory calibration", "measurement_mode.generic": "Generic", "measurement_mode.highres": "HiRes", "measurement_mode.lcd": "LCD (generic)", "measurement_mode.lcd.ccfl": "LCD (CCFL)", "measurement_mode.lcd.ccfl.2": "LCD (CCFL Type 2)", "measurement_mode.lcd.white_led": "LCD (White LED)", "measurement_mode.lcd.wide_gamut.ccfl": "Wide Gamut LCD (CCFL)", "measurement_mode.lcd.wide_gamut.rgb_led": "Wide Gamut LCD (RGB LED)", "measurement_mode.raw": "Raw", "measurement_mode.refresh": "Refresh (generic)", "measurements.complete": "Measurements complete! Do you want to open the folder containing the measurement files?", "measuring.characterization": "Measuring color swatches for characterization...", "menu.about": "About...", "menu.file": "File", "menu.help": "?", "menu.language": "Language", "menu.options": "Options", "menu.tools": "Tools", "menuitem.quit": "Quit", "menuitem.set_argyll_bin": "Locate Argyll CMS executables...", "min": "Min", "minimal": "Minimal", "native": "Native", "no": "No", "no_settings": "The file does not contain settings.", "office_web.icc": "Office & Web", "offset": "Offset", "ok": "OK", "or": "or", "osd": "OSD", "other": "Other", "out": "Out", "overwrite": "Overwrite", "panel.surface": "Panel surface", "panel.type": "Panel type", "patches": "Patches", "pause": "Pause", "photo.icc": "Photo", "please_wait": "Please wait...", "prepress.icc": "Prepress", "preset": "Preset", "preview": "Preview", "profile": "Profile", "profile.advanced_gamap": "Advanced...", "profile.choose": "Please choose a profile:", "profile.confirm_regeneration": "Do you want to regenerate the profile?", "profile.created": "The profile has been successfully created.", "profile.current": "Current profile", "profile.do_not_install": "Don't install profile", "profile.info": "Profile information", "profile.info.show": "Show profile information", "profile.install": "Install profile", "profile.install.error": "The profile could not be installed/activated.", "profile.install.osx_manual_select": "The profile has been installed. Please activate it in the “Displays” system preferences pane.", "profile.install.success": "The profile has been installed and activated.", "profile.install.virtual.unsupported": "Profiles cannot be installed for virtual display devices.", "profile.install_local_system": "Install profile system-wide", "profile.install_network": "Install profile network-wide", "profile.install_user": "Install profile for current user only", "profile.invalid": "Invalid profile.", "profile.load_error": "Display profile couldn't be loaded.", "profile.load_on_login": "Load calibration on login", "profile.load_on_login.handled_by_os": "Let the operating system handle calibration loading (low quality)", "profile.name": "Profile name", "profile.name.create": "Generate profile name", "profile.name.placeholders": "You may use the following placeholders in the profile name:\n\n%a Abbreviated weekday name\n%A Full weekday name\n%b Abbreviated month name\n%B Full month name\n%d Day of the month\n%H Hour (24-hour clock)\n%I Hour (12-hour clock)\n%j Day of the year\n%m Month\n%M Minute\n%p AM/PM\n%S Second\n%U Week (Sunday as first day of the week)\n%w Weekday (sunday is 0)\n%W Week (Monday as first day of the week)\n%y Year without century\n%Y Year with century", "profile.no_embedded_ti3": "The profile does not contain Argyll compatible measurement data.", "profile.no_vcgt": "The profile does not contain calibration curves.", "profile.quality": "Profile quality", "profile.quality.b2a.low": "Low quality B2A table", "profile.quality.b2a.low.info": "Choose this option if the profile is only going to be used with inverse A2B gamut mapping to create a DeviceLink or 3D LUT", "profile.required_tags_missing": "The profile is missing required tags: %s", "profile.self_check": "Profile self check ΔE*76", "profile.self_check.avg" : "average", "profile.self_check.max" : "maximum", "profile.self_check.rms" : "RMS", "profile.set_save_path": "Choose save path...", "profile.settings": "Profiling settings", "profile.share": "Upload profile...", "profile.share.avg_dE_too_high": "The profile yields a too high delta E (actual = %s, threshold = %s).", "profile.share.enter_info": "You may share your profile with other users via the OpenSUSE “ICC Profile Taxi” service.\n\nPlease provide a meaningful description and enter display device properties below. Read display device settings from your display device's OSD and only enter settings applicable to your display device which have changed from defaults.\nExample: For most display devices, these are the name of the chosen preset, brightness, contrast, color temperature and/or whitepoint RGB gains, as well as gamma. On laptops and notebooks, usually only the brightness. If you have changed additional settings while calibrating your display device, enter them too if possible.", "profile.share.meta_missing": "The profile does not contain the necessary meta information.", "profile.share.success": "Profile uploaded successfully.", "profile.testchart_recommendation": "For a higher quality profile, a testchart with more samples is recommended, but it will take more time to measure. Do you want to use the recommended testchart?", "profile.type": "Profile type", "profile.type.gamma_matrix": "Gamma + matrix", "profile.type.lut.lab": "L*a*b* LUT", "profile.type.lut.xyz": "XYZ LUT", "profile.type.lut_matrix.xyz": "XYZ LUT + matrix", "profile.type.lut_rg_swapped_matrix.xyz": "XYZ LUT + swapped matrix", "profile.type.shaper_matrix": "Curves + matrix", "profile.type.single_gamma_matrix": "Single gamma + matrix", "profile.type.single_shaper_matrix": "Single curve + matrix", "profile.unsupported": "Unsupported profile type (%s) and/or colorspace (%s).", "profile.update": "Update profile", "measurement_report.update": "Update measurement report...", "measurement_report": "Measurement report...", "measurement_report_choose_chart": "Please choose the testchart to measure:", "measurement_report_choose_chart_or_reference": "Please choose a testchart or reference:", "measurement_report_choose_profile": "Please choose the profile to validate:", "profiling.complete": "Profiling complete!", "profiling.incomplete": "Profiling has not been finished.", "projector": "Projector", "projector_mode_unavailable": "Projector mode is only available with Argyll CMS 1.1.0 Beta or newer.", "quality.ultra.warning": "Ultra quality should almost never be used, except to prove that it should almost never be used (long processing time!). Maybe choose high or medium quality instead.", "readme": "ReadMe", "ready": "Ready.", "red": "Red", "reference": "Reference", "rendering_intent": "Rendering intent", "report.calibrated": "Report on calibrated display device", "report.uncalibrated": "Report on uncalibrated display device", "report.uniformity": "Measure display device uniformity...", "resources.notfound.error": "Fatal error: A required file has not been found:", "resources.notfound.warning": "Warning: Some required files have not been found:", "restore_defaults": "Restore defaults", "rgb.trc": "RGB transfer function", "rgb.trc.averaged": "averaged RGB transfer function", "saturation": "Saturation", "save": "Save", "save_as": "Save as...", "select_all": "Select all", "settings.additional": "Additional settings", "settings.basic": "Basic settings", "settings.new": "", "settings_loaded": "Calibration curves and the following calibration settings have been loaded: %s. Other calibration options have been restored to default and profiling options have not been changed.", "settings_loaded.all": "Settings and calibration curves have been loaded.", "settings_loaded.cal": "The profile contained just calibration settings. Other options have not been changed. No calibration curves have been found.", "settings_loaded.cal_and_lut": "The profile contained just calibration settings. Other options have not been changed and calibration curves have been loaded.", "settings_loaded.cal_and_profile": "Settings have been loaded. No calibration curves have been found.", "settings_loaded.profile": "The profile contained just profiling settings. Other options have not been changed. No calibration curves have been found.", "settings_loaded.profile_and_lut": "The profile contained just profiling settings. Other options have not been changed and calibration curves have been loaded.", "show_advanced_calibration_options": "Show advanced calibration options", "simulation_profile": "Simulation profile", "softproof.icc": "Softproof", "spectral": "Spectral", "sRGB.icc": "sRGB", "startup": "Starting up...", "success": "...ok.", "synthicc.create": "Create synthetic ICC profile...", "target": "Target", "tc.I": "Perceptual space body centered cubic grid", "tc.Q": "Perceptual space filling quasi-random", "tc.R": "Perceptual space random", "tc.adaption": "Adaption", "tc.algo": "Distribution", "tc.angle": "Angle", "tc.black": "Black patches", "tc.dark_emphasis": "Dark region emphasis", "tc.fullspread": "Iterative patches", "tc.gray": "Neutral patches", "tc.i": "Device space body centered cubic grid", "tc.limit.sphere": "Limit samples to sphere", "tc.limit.sphere_radius": "Radius", "tc.multidim": "Multidimensional", "tc.multidim.patches": "steps = %s patches (%s neutral)", "tc.neutral_axis_emphasis": "Neutral axis emphasis", "tc.ofp": "Optimized farthest point sampling", "tc.patch": "Patch", "tc.patches.gray": "neutral", "tc.patches.selected": "selected", "tc.patches.total": "Total patches", "tc.precond": "Preconditioning profile", "tc.preview.create": "Creating preview, please wait...", "tc.q": "Device space filling quasi-random", "tc.r": "Device space random", "tc.single": "Single channel patches", "tc.single.perchannel": "per channel", "tc.t": "Incremental far point sampling", "tc.vrml": "Create diagnostic VRML file", "tc.vrml.black_offset": "RGB black offset (L*)", "tc.vrml.device": "Device locations", "tc.vrml.lab": "Lab locations", "tc.vrml.save_as": "Save VRML file(s) as...", "tc.vrml.use_D50": "Neutral RGB white", "tc.white": "White patches", "tempdir_should_still_contain_files": "Created files should still be in the temporary directory “%s”.", "testchart.add_saturation_sweeps": "Add saturation sweeps", "testchart.add_ti3_patches": "Add reference patches...", "testchart.change_patch_order": "Change patch order", "testchart.confirm_select": "File saved. Do you want to select this testchart?", "testchart.create": "Create testchart", "testchart.discard": "Discard", "testchart.dont_select": "Don't select", "testchart.edit": "Edit testchart...", "testchart.export.repeat_patch": "Repeat each patch:", "testchart.file": "Testchart file", "testchart.info": "Number of patches in selected testchart", "testchart.invalid": "The testchart file is invalid!", "testchart.read": "Reading testchart...", "testchart.save": "Save", "testchart.save_as": "Save as...", "testchart.save_or_discard": "The testchart has not been saved.", "testchart.select": "Select", "testchart.set": "Choose testchart file...", "testchart.sort_by_HSV": "Sort by HSV", "testchart.sort_by_L": "Sort by L*", "testchart.sort_by_RGB": "Sort by RGB", "testchart.sort_by_RGB_sum": "Sort by sum of RGB", "testchart.sort_RGB_gray_to_top": "Sort RGB gray to top", "testchart.sort_RGB_white_to_top": "Sort RGB white to top", "testchart.optimize_for_untethered_auto_mode": "Optimize for untethered in auto mode", "testchart_or_reference": "Testchart or reference", "tone_values": "tone values", "translations": "Translations", "trashcan.linux": "trash", "trashcan.mac": "trash", "trashcan.windows": "recycle bin", "trc": "Tone curve", "trc.gamma": "Gamma", "trc.lstar": "L*", "trc.rec709": "Rec. 709", "trc.rec1886": "Rec. 1886", "trc.should_use_viewcond_adjust": "When using the SMPTE 240M, Rec. 709 or sRGB curves, you should use an adjustment for your ambient light levels as well to get correct results. To do that, tick the checkbox near “Ambient light level” and enter a value in Lux. You can also optionally measure ambient light while calibrating, if supported by your instrument.", "trc.smpte240m": "SMPTE 240M", "trc.srgb": "sRGB", "trc.type.absolute": "Absolute", "trc.type.relative": "Relative", "type": "Type", "uninstall_display_profile": "Uninstall display device profile...", "unknown": "unknown", "unnamed": "Unnamed", "Untethered": "Untethered", "update_check": "Check for application update...", "update_check.fail": "Check for application update failed:", "update_check.fail.version": "Remote version file from server %s couldn't be parsed.", "update_check.new_version": "An update is available: %s", "update_check.onstartup": "Check for application update on startup", "update_check.uptodate": "%s is up-to-date.", "upload": "Upload", "use_separate_lut_access": "Use separate video card gamma table access", "use_simulation_profile_as_output": "Use simulation profile as target profile", "vcgt": "Calibration curves", "verify.ti1": "Profile verification testchart", "verify_extended.ti1": "Extended profile verification testchart", "vga": "VGA", "video.icc": "Video", "warning": "Warning", "warning.already_exists": "The file “%s” already exists at the chosen location and will be overwritten. Do you want to continue?", "warning.autostart_system": "The system-wide autostart directory could not be determined.", "warning.autostart_user": "The user-specific autostart directory could not be determined.", "warning.copy_failed_continue": "The file “%s” could not be copied to “%s”. Continuing...", "warning.discard_changes": "Do you really want to discard the changes to the current settings?", "warning.no_comports_detected": "No instrument could be detected.", "warning.suspicious_delta_e": "Warning: Suspicious measurements have been found. Please note this check assumes an sRGB-like display device. If your display device differs from this assumption (e.g. if it has a very wide gamut or a tone response too far from sRGB), then errors found are probably not meaningful.\n\nOne or all of the following criteria matched:\n\n• Consecutive patches with different RGB numbers, but suspiciously low ΔE*00 of the measurements against each other.\n• RGB gray with increasing RGB numbers towards the previous patch, but declining lightness (L*).\n• RGB gray with decreasing RGB numbers towards the previous patch, but rising lightness (L*).\n• Unusually high ΔE*00 and ΔL*00 or ΔH*00 or ΔC*00 of measurements to the sRGB equivalent of the RGB numbers.\n\nThis could hint at measurement errors. Values that are considered problematic (which does not have to be true!) are highlighted in red. Check the measurements carefully and mark the ones you want to accept. You can also edit the RGB and XYZ values.", "warning.suspicious_delta_e.info": "Explanation of the Δ columns:\n\nΔE*00 XYZ A/B: ΔE*00 of measured values towards measured values of the previous patch. If this value is missing, it wasn't a factor while checking. If it is present, then it is assumed to be too low.\n\n0.5 ΔE*00 RGB A/B: ΔE*00 of the sRGB equivalent of the RGB numbers towards the sRGB equivalent of the RGB numbers of the previous patch (with a factor of 0.5). If this value is present, it represents the comparison (minimal) value during checking for assumed too low ΔE*00 XYZ A/B. It serves as a very rough orientation.\n\nΔE*00 RGB-XYZ: ΔE*00 of measured values towards the sRGB equivalent of the RGB numbers.\nΔL*00 RGB-XYZ: ΔL*00 of measured values towards the sRGB equivalent of the RGB numbers.\nΔC*00 RGB-XYZ: ΔC*00 of measured values towards the sRGB equivalent of the RGB numbers.\nΔH*00 RGB-XYZ: ΔH*00 of measured values towards the sRGB equivalent of the RGB numbers.", "webserver.waiting": "Webserver waiting at", "white": "White", "whitepoint": "Whitepoint", "whitepoint.colortemp": "Color temperature", "whitepoint.colortemp.locus.blackbody": "Blackbody", "whitepoint.colortemp.locus.curve": "Color temperature curve", "whitepoint.colortemp.locus.daylight": "Daylight", "whitepoint.set": "Do you also want to set the whitepoint to the measured value?", "whitepoint.simulate": "Simulate whitepoint", "whitepoint.simulate.relative": "Relative to target profile whitepoint", "whitepoint.xy": "Chromaticity coordinates", "window.title": "dispcalGUI", "windows.version.unsupported": "This version of Windows is not supported.", "windows_only": "Windows only", "working_dir": "Working directory:", "yellow": "Yellow", "yes": "Yes", } dispcalGUI-1.7.1.6/dispcalGUI/lang/es.json000644 000765 000000 00000137553 12266603364 020053 0ustar00svpwheel000000 000000 { "*": "Note to translators: Keys which are not yet translated are marked with a leading asterisk (*) and are indented with two tabs instead of one. Please remove the asterisk when translated.", "!author": "Roberto Quintero", "!language": "Español", "!language_name": "SPANISH", "apply": "Aplicar", "3dlut.bitdepth.input": "Profundidad de bits de entrada 3D LUT", "3dlut.bitdepth.output": "Profundidad de bits de salida 3D LUT", "3dlut.create": "Crear 3D LUT...", "*3dlut.encoding.output.warning.madvr": "Warning: This output encoding is not recommended and will cause clipping if madVR is not set up to output “TV levels (16-235)” under “Devices” → “%s” → “Properties”. Use at own risk!", "3dlut.format": "Formato de archivo 3D LUT", "3dlut.frame.title": "Crear 3D LUT", "3dlut.input.profile": "Perfil de origen", "*3dlut.madVR.enable": "Enable madVR 3D LUT", "output.profile": "Perfil de destino", "apply_cal": "Aplicar calibracion (vcgt)", "apply_cal.error": "La calibracion no puede ser aplicada.", "3dlut.size": "Tamaño 3D LUT", "[rgb]TRC": "Curva de respuesta tonal", "aborted": "...abortada.", "aborting": "Abortando, por favor espere (esto llevará unos segundos)...", "adaptive_mode_unavailable": "El modo adaptivo esta solo disponible con Argyll CMS 1.1.0 RC3 o reciente.", "allow_skip_sensor_cal": "Permitir saltarse la autocalibración del espectrofotometro", "ambient.measure": "Medicion ambiente", "ambient.set": "¿Desea tambien ajustar la luz ambiente a los niveles medidos?", "app.confirm_restore_defaults": "¿Desea descartar sus cambios y restaurar los valores por defecto?", "app.restart_request": "Por favor reinicie la aplicación.", "argyll.debug.warning1": "Por favor utilize solo esta opcion si necesita informacion de depuracion (p.e. para solucionar problemas en la funcionalidad de Argyll CMS)! Normalmente solo es util para desarrolladoes de software para ayudar en el diagnostico de problemas y su resolucion. ¿Está seguro de querer activar la salida de depuración?", "argyll.debug.warning2": "Por favor recuerde desactivar la salida de depuración para un funcionamiento normal del programa.", "argyll.dir": "Directorio de ejecutables de Argyll CMS:", "argyll.dir.invalid": "Los ejecutables de Argyll CMS no se han encontrado!\nPor favor seleccione el directorio que contiene los archivos ejecutables (quizá el prefijo o sufijo “argyll-” / “-argyll”): %s", "argyll.error.detail": "Mensaje de error de Argyll CMS detallado:", "argyll.instrument.driver.missing": "El controlador Argyll CMS para su instrumento de medición parece no estar instalado o está instalado incorrectamente. Por favor compruebe que su instruemento de medición se muestra en Windows' gestor de perifericos debajo de „Argyll LibUSB-1.0A devices“ y (re-)instalar el controlador si es necesario. Por favor lea la documentacion para instrucciones de instalación.", "argyll.util.not_found": "El ejecutable de Argyll CMS “%s” no se encuentra!", "as_measured": "Nativo", "auth.failed": "Autentificacion fallida.", "auto": "Auto", "autostart_remove_old": "Removiendo la entrada antigua de autoinicio", "backlight": "Luz de fondo", "black": "Negro", "black_point": "Punto negro", "black_point_compensation": "Compensación del punto negro", "black_point_compensation.info": "La compensación del punto negro previene el aplastamiento del negro, pero reduce la precisión de la conversión de color.", "blacklevel": "Nivel de negro", "blue": "Azul", "brightness": "Brillo", "browse": "Seleccionar...", "bug_report": "Notificar un error...", "button.calibrate": "Solo calibrar", "button.calibrate_and_profile": "Calibrar y perfilar", "button.profile": "Solo perfilar", "cal_extraction_failed": "No se pueden extraer datos de calibracion del perfil.", "calibration": "Calibracion", "calibration.ambient_viewcond_adjust": "Nivel de luz ambiente", "calibration.ambient_viewcond_adjust.info": "Para realizar un ajuste de las condiciones de visualización cuando se calculan las curvas de calibración, active la casilla e introduzca su nivel de luz ambiente. Opcionalmente puede medir la luz ambiente mientras calibra, si lo soporta su instrumento.", "calibration.black_luminance": "Nivel de negro", "calibration.black_output_offset": "Compensacion salida del negro", "calibration.black_point_correction": "Corrección punto negro", "calibration.black_point_correction_choice": "Debe desactivar la corrección del punto negro, para optimizar el nivel de negro y el ratio de contraste (recomendado para la mayoria de los monitores LCD), o puede activarlo para hacer el negro del mismo matiz que el punto blanco (recomendado para la mayoria de los monitores CRT). Por favor seleccione su preferencia de corrección de punto negro:", "calibration.black_point_correction_choice_dialogtitle": "Corrección punto negro", "calibration.black_point_rate": "Tasa", "calibration.check_all": "Comprobrar ajustes", "calibration.complete": "Calibración completada!", "calibration.create_fast_matrix_shaper": "Crear perfil de matriz", "calibration.create_fast_matrix_shaper_choice": "¿Quiere crear un perfil de matriz rapido de las mediciones de calibracion o solo calibrar?", "*calibration.do_not_use_video_lut": "Do not use video card gamma table to apply calibration", "*calibration.do_not_use_video_lut.warning": "Do you really want to change the recommended setting?", "calibration.file": "Ajustes", "calibration.file.invalid": "El archivo de configuración seleccionado no es valido.", "calibration.file.none": "", "calibration.incomplete": "La calibración no ha terminado.", "calibration.interactive_display_adjustment": "Ajuste del monitor interactivo", "calibration.interactive_display_adjustment.black_level.crt": "Seleccione “Comenzar medicion” y ajustar el brillo de su pantalla y/o los controles desplazamiento RGB para conseguir el nivel deseado.", "calibration.interactive_display_adjustment.black_point.crt": "Seleccione “Comenzar medicion” y ajustar los controles desplazamiento RGB de su pantalla para conseguir el punto negro deseado.", "calibration.interactive_display_adjustment.check_all": "Seleccione “Comenzar medicion” para comprobar los ajustes generales.", "calibration.interactive_display_adjustment.generic_hint.plural": "Un buen resultado se obtiene si todas las barras pueden ser llevadas a la posición marcada en el centro.", "calibration.interactive_display_adjustment.generic_hint.singular": "Un buen resultado se obtiene si la barra puede ser llevada a la posición marcada en el centro.", "calibration.interactive_display_adjustment.start": "Comenzar medicion", "calibration.interactive_display_adjustment.stop": "Parar medicion", "calibration.interactive_display_adjustment.white_level.crt": "Seleccione “Comenzar medicion” y ajustar el contraste de su pantalla y/o los controles de ganancia RGB para conseguir el nivel deseado.", "calibration.interactive_display_adjustment.white_level.lcd": "Seleccione “Comenzar medicion” y ajustar los controles luz de fondo/brillo de su pantalla para conseguir el punto negro deseado.", "calibration.interactive_display_adjustment.white_point": "Seleccione “Comenzar medicion” y ajustar los controles temperatura de color y/o ganacia RGB de su pantalla para conseguir el punto blanco deseado.", "calibration.keep_black_point_correction": "Mantener valores actuales", "calibration.load": "Cargando ajustes...", "calibration.load_error": "Las curvas de calibración no pueden ser cargadas.", "calibration.load_from_cal": "Cargando curvas de calibración desde el archivo de calibracion...", "calibration.load_from_cal_or_profile": "Cargando curvas de calibración desde el archivo de calibración o del perfil...", "calibration.load_from_display_profile": "Cargar curvas de calibración desde el perfil de pantalla actual", "calibration.load_from_profile": "Cargar curvas de calibración desde el perfil...", "calibration.load_success": "Curvas de calibración cargadas correctamente.", "calibration.loading": "Cargando curvas de calibración desde archivo...", "calibration.loading_from_display_profile": "Cargar curvas de calibración del perfil de pantalla actual...", "calibration.luminance": "Nivel de blanco", "calibration.lut_viewer.title": "Curvas", "calibration.preview": "Calibracion previa", "calibration.quality": "Calidad de la calibración", "calibration.quality.high": "Alta", "calibration.quality.low": "Baja", "calibration.quality.medium": "Media", "calibration.quality.ultra": "Ultra", "calibration.quality.verylow": "Muy baja", "calibration.speed": "Velocidad de la calibración", "calibration.speed.high": "Alta", "calibration.speed.low": "Baja", "calibration.speed.medium": "Media", "calibration.speed.veryhigh": "Muy alta", "calibration.speed.verylow": "Muy baja", "calibration.reset": "Resetear curvas de calibración", "calibration.reset_error": "Las curvas de calibración no pueden ser reseteadas.", "calibration.reset_success": "Curvas de calibración reseteadas correctamente.", "calibration.resetting": "Reseteando curvas de calibración a valores por defecto...", "calibration.settings": "Valores de calibración", "calibration.show_actual_lut": "Mostrar curvas de calibracion actual de la tabla de gama de la tarjeta grafica", "calibration.show_lut": "Mostrar curvas", "calibration.start": "Continúe con la calibración", "calibration.turn_off_black_point_correction": "Desactivar", "calibration.turn_on_black_point_correction": "Activar", "calibration.update": "Calibración actualizada", "calibration.update_profile_choice": "¿Quiere actualizar también las curvas de calibración en el perfil existente o solo calibrar?", "*calibration.use_linear_instead": "Use linear calibration instead", "calibration.verify": "Verificando calibración", "calibration_profiling.complete": "Calibración y perfilado completado!", "calibrationloader.description": "Establece los perfiles ICC y carga curvas de calibración para todos los dispositivos de visualización configurados", "cancel": "Cancelar", "ccxx.ti1": "Carta de ajustes para correcion de colorimetro", "checking_lut_access": "Chequeando acceso calibración para la pantalla %s...", "*centered": "Centered", "clear": "Limpiar", "*color.custom": "Custom color", "colorconfig_remove_old": "Eliminando archivo de ajustes de pantalla antiguo", "colorimeter_correction.create": "Crear correccion de colorimetro...", "colorimeter_correction.create.details": "Por favor comprobar los campos de abajo y cambiarlos cuando sea necesario. La descripcion puede contener detalles importantes (p.e. ajustes de pantalla especificas, observador no CIE por defecto o similar).", "colorimeter_correction.create.failure": "Creacion de correcion fallada.", "colorimeter_correction.create.info": "Para crear una correcion de matriz de colorimetro (CCMX) o un ejemplo de archivo de calibracion espectral (CCSS), primero nedesita medir “carta de ajustes para correcion de colorimetro” con un espectrofotometro, y en caso de crear un archivo CCMX, tambien con el colorimetro.\nPara hacer esto, seleccionar “Medir carta de ajustes”. Despues, seleccionar “Crear correcion de colorimetro...” y seleccionar el(los) archivo(s) medidos.", "colorimeter_correction.create.success": "Correcion creada con exito.", "colorimeter_correction.file.none": "Ninguno", "colorimeter_correction.import": "Importar correciones de colorimetro desde otros programas de calibracion de pantallas...", "colorimeter_correction.import.auto_manual": "Si desea importar automaticamente correcciones de colorimetro, necesita tener instalado el software del vendedor de su instrumento, o introducir el medio de instalacion, y entonces seleccionar “Auto”. Si tiene un instalador de software que todavia no ha utilizado, o si desea seleccionar un archivo , seleccione “Seleccionar archivo”.", "colorimeter_correction.import.choose": "Por favor seleccione el archivo de correccion de colorimetro a importar:", "colorimeter_correction.import.failure": "No se pueden importar las correciones de colorimetro.", "colorimeter_correction.import.success": "Las correciones de colorimetro han sido importadas con exito de los siguientes programas:\n\n%s", "*colorimeter_correction.instrument_mismatch": "The selected colorimeter correction is not suitable for the selected instrument.", "colorimeter_correction.upload": "Subir correcion de colorimetro...", "colorimeter_correction.upload.confirm": "¿Quiere subir la correccion de colorimetro a la base de datos en linea (recomendado)? Cualquier archivo subido se asume será de dominio publico, asi que pueden ser usados libremente.", "colorimeter_correction.upload.deny": "Esta correccion de colorimetro no puede ser subida.", "colorimeter_correction.upload.exists": "La correcion de colorimetro ya existe en la base de datos.", "colorimeter_correction.upload.failure": "La correccion no pudo ser introducida en la base de datos en linea.", "colorimeter_correction.upload.success": "La correcion fue subida con exito a la base de datos en linea.", "colorimeter_correction.web_check": "Comprobar en linea para correcion de colorimetro...", "colorimeter_correction.web_check.choose": "Se han encontrado las siguientes correciones de colorimetro para la pantalla e instrumento seleccionado :", "colorimeter_correction.web_check.failure": "No se han encontrado correciones de colorimetro para la pantalla y el instrumento seleccionado.", "colorimeter_correction_matrix_file": "Correccion", "colorimeter_correction_matrix_file.choose": "seleccionar correcion de colorimetro", "colorspace": "Espacio de color", "colorspace.show_outline": "Mostrar borde", "commandline": "Linea de comandos:", "comparison_profile": "Perfil de comparacion", "comport_detected": "Ha sido detectado un cambio en el instrumento/puerto de ajustes.", "*compression.gzip": "GZIP compression", "*computer.name": "Computername", "connection.fail": "Error de Conexion (%s)", "connection.fail.http": "Error HTTP %s", "continue": "Continuar", "contrast": "Contraste", "create_and_preview": "Crear && Previo", "create_ccss_or_ccmx": "¿Desea crear una correcion de matriz para colorimetros ordinarios (CCMX) o un ejemplo de calibracion espectral para el i1 Display Pro y el ColorMunki (CCSS)?", "create_profile": "Crear perfil desde datos de medición...", "create_profile_from_edid": "Crear perfil a partir de EDID...", "created": "Creado", "current": "Actual", "custom": "Otro", "cyan": "Cian", "*d3-e4-s0-g9-m3-b3-f0-crossover.ti1": "Default testchart for matrix profiles", "*d3-e4-s0-g25-m3-b3-f0-crossover.ti1": "Extended testchart for matrix profiles", "*d3-e4-s0-g49-m3-b3-f0-crossover.ti1": "Large testchart for matrix profiles", "*d3-e4-s0-g97-m3-b3-f0-crossover.ti1": "Very large testchart for matrix profiles", "d3-e4-s3-g3-m0-f0.ti1": "Carta de ajustes por defecto para perfiles “gamma + matriz” ", "*d3-e4-s13-g37-m4-b4-f0.ti1": "Small testchart for LUT profiles", "*d3-e4-s17-g49-m5-b5-f0.ti1": "Default testchart for LUT profiles", "*d3-e4-s21-g61-m6-b6-f0.ti1": "Extended testchart for LUT profiles", "*d3-e4-s25-g73-m7-b7-f0.ti1": "Large testchart for LUT profiles", "*d3-e4-s29-g85-m8-b8-f0.ti1": "Very large testchart for LUT profiles", "*d3-e4-s29-g85-m0-f994-caRGB.ti1": "Very large testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s29-g85-m0-f994-ceRGBv2.ti1": "Very large testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s29-g85-m0-f994-cRec709_Gamma22.ti1": "Very large testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s29-g85-m0-f994-csRGB.ti1": "Very large testchart for LUT profiles, optimized for sRGB (D65)", "*d3-e4-s33-g97-m9-b9-f0.ti1": "XXL testchart for LUT profiles", "*d3-e4-s33-g97-m0-f1399-caRGB.ti1": "XXL testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s33-g97-m0-f1399-ceRGBv2.ti1": "XXL testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s33-g97-m0-f1399-cRec709_Gamma22.ti1": "XXL testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s33-g97-m0-f1399-csRGB.ti1": "XXL testchart for LUT profiles, optimized for sRGB (D65)", "*d3-e4-s37-g109-m10-b10-f0.ti1": "XXXL testchart for LUT profiles", "*d3-e4-s37-g109-m0-f1906-caRGB.ti1": "XXXL testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s37-g109-m0-f1906-ceRGBv2.ti1": "XXXL testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s37-g109-m0-f1906-cRec709_Gamma22.ti1": "XXXL testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s37-g109-m0-f1906-csRGB.ti1": "XXXL testchart for LUT profiles, optimized for sRGB (D65)", "*d3-e4-s41-g121-m11-b11-f0.ti1": "Massive testchart for LUT profiles", "*d3-e4-s41-g121-m0-f2527-caRGB.ti1": "Massive testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s41-g121-m0-f2527-ceRGBv2.ti1": "Massive testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s41-g121-m0-f2527-cRec709_Gamma22.ti1": "Massive testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s41-g121-m0-f2527-csRGB.ti1": "Massive testchart for LUT profiles, optimized for sRGB (D65)", "default": "Por defecto", "delete": "Borrar", "delta_e_to_locus": "ΔE*00 a %s locus", "description": "Descripcion", "detect_displays_and_ports": "Detectar pantallas e instrumentos", "*device.name.placeholder": "", "*devlink_profile": "DeviceLink profile", "dialog.confirm_delete": "Realmente desea borrar el(los) archivo(s) seleccionado(s)?", "dialog.confirm_overwrite": "El archivo “%s” ya existe. ¿Desea sobreescribirlo?", "*dialog.cal_info": "The calibration file “%s” will be used. Do you want to continue?", "*dialog.confirm_cancel": "Do you really want to cancel?", "dialog.current_cal_warning": "Las curvas de calibracion actual seran usadas. ¿Desea continuar?", "dialog.do_not_show_again": "No mostrar este mensaje de nuevo", "dialog.enter_password": "Por favor introduzca su contraseña.", "dialog.install_profile": "Desea instalar el perfil “%s” y hacerlo predeterminado para la pantalla “%s”?", "*dialog.linear_cal_info": "Linear calibration curves will be used. Do you want to continue?", "dialog.load_cal": "Cargar configuración", "dialog.set_argyll_bin": "Por favor localizar el directorio donde residen los ejecutables de Argyll.", "dialog.set_profile_save_path": "Crear directorio de perfil “%s” aqui:", "dialog.set_testchart": "Escoja el archivo de carta de ajustes", "dialog.ti3_no_cal_info": "Los datos de medicion no contienen curvas de calibracion. ¿Realmente desea continuar?", "display": "Pantalla", "display.connection.type": "Conexion", "display.manufacturer": "Fabricante de pantalla", "display.primary": "(Primaria)", "display.properties": "Propiedades de pantalla", "display.settings": "ajustes de pantalla", "display.tech": "tecnologia de pantalla", "display_detected": "Se ha detectado un cambio en la ajustes de la pantalla.", "display_lut.link": "Enlace/desenlace acceso a pantalla y calibración", "display_short": "Pantalla (abreviado)", "displayport": "DisplayPort", "drift_compensation.blacklevel": "Compensacion de la desviacion del nivel del negro", "drift_compensation.blacklevel.info": "La compensacion de la desviacion del nivel del negro trata de contar desviaciones de la medicion por desviacion de la calibracion del negro marcadas por las advertencias del instrumento de medicion. Para este proposito, un parche de negro es medido periodicamente, lo que incrementa el tiempo total necesario para las mediciones. Muchos colorimetros tiene incorporada compensacion de temepratura, en cuyo caso la compensacion de la desviacion del negro no es necesaria, pero la mayor parte de los espectrofotometros no tiene compensacion de temperatura.", "drift_compensation.whitelevel": "Desviacion de la compensacion del nivel de blanco", "drift_compensation.whitelevel.info": "La desviacion de la compensacion del nivel de blanco trata de contar desviaciones de la medicion causadas por cambios de luminancia marcadas por las advertencias de la pantalla. Para este proposito, un parche de blanco es medido periodicamente, lo que incrementa el tiempo total necesario para las mediciones.", "*dry_run": "Dry run", "*dry_run.end": "Dry run ended.", "*dry_run.info": "Dry run. Check the log to see the command line.", "dvi": "DVI", "*edid.crc32": "EDID CRC32 checksum", "*edid.serial": "EDID serial", "elapsed_time": "Tiempo transcurrido", "enable_argyll_debug": "Activar salida de errores Argyll CMS", "enable_spyder2": "Activar colorimetro Spyder 2 ...", "enable_spyder2_failure": "Spyder 2 no puede ser activado.", "enable_spyder2_success": "Spyder 2 activado correctamente.", "enumerate_ports.auto": "Detectar automaticamente instrumentos", "enumerating_displays_and_comports": "Enumeranado pantallas y puertos de comunicación...", "error": "Error", "error.access_denied.write": "No tiene acceso de escritura a %s", "error.already_exists": "El nombre “%s” no pude ser usado, porque otro objeto del mismo nombre todavia existe. Por favor escoja otro nombre u otro directotio.", "error.autostart_creation": "La creación de la entrada de autoarranque para %s para cargar las curvas de calibración en la entrada ha fallado.", "error.autostart_remove_old": "La entrada de autoarranque antigua que carga las curvas de calibracion al inicio del sistema no puede ser eliminada: %s", "error.autostart_system": "La entrada de autoarranque del sistema que carga las curvas de calibracion al inicio no puede ser creada, porque el directorio de autoarranque del sistema no se puede determinar.", "error.autostart_user": "La entrada de autoarrqnue de usuario que carga las curvas de clibracion al inicio no puede ser creada, porque el directorio de autoarranque del usuario no se puede determinar.", "error.cal_extraction": "La calibracion no puede ser extraida de “%s”.", "error.calibration.file_missing": "El archivo de calibración “%s” no se encuentra.", "error.calibration.file_not_created": "El archivo de calibración no ha sido creado.", "error.calibration.file_notfile": "“%s” no es un archivo.", "error.colorconfig_remove_old": "El archivo antiguo de ajustes asignado a perfiles de pantallas no puede ser eliminado: %s", "error.copy_failed": "El archivo “%s” no se puede copiar en “%s”.", "error.deletion": "Ocurrio un error mientras se movian archivos a %s. Algunos archivos no se han eliminado.", "error.dir_creation": "El directorio “%s” no puede ser creado. Quizás haya restricciones de acceso. Por favor permita el acceso de escritura o escoja otro directorio.", "error.dir_notdir": "El directorio “%s” no puede ser creado, porque otro objeto del mismo nombre existe. Por favor escoja otro directorio.", "error.file.create": "El archivo “%s” no se puede crear.", "error.file.open": "El archivo “%s” no se puede abrir.", "error.file_type_unsupported": "Tipo de archivo no soportado.", "error.generic": "Un error de sistema ha ocurrido.\n\nCodigo de error: %s\nMensaje de error: %s", "error.measurement.file_invalid": "El archivo de medicion „%s“ no es valido.", "error.measurement.file_missing": "El archivo de medición “%s” no se encuentra.", "error.measurement.file_not_created": "No se ha creado archivo de medición.", "error.measurement.file_notfile": "“%s” no es un archivo.", "error.measurement.missing_spectral": "El archivo de medicion no contiene valores espectrales.", "error.measurement.one_colorimeter": "Se necesita exactamente una medicion de colorimetro.", "error.measurement.one_reference": "Se necesita exactamente una medicion de referencia.", "error.no_displays_detected": "Ninguna pantalla ha sido detectada.", "error.profile.file_missing": "El perfil “%s” no se encuentra.", "error.profile.file_not_created": "Ningun perfil ha sido creado.", "error.profile.file_notfile": "“%s” no es un archivo.", "error.source_dest_same": "El archivo de origen y destino es el mismo.", "error.testchart.creation_failed": "El archivo de carta de ajustes “%s” no puede ser creado. Quizas haya restricciones de acceso, o el archivo de origen no existe.", "error.testchart.invalid": "El archivo de carta de ajustes “%s” no es valido.", "error.testchart.missing": "El archivo de carta de ajustes “%s” no se encuentra.", "error.testchart.missing_fields": "El archivo de carta de ajustes „%s“ no contiene los campos requeridos: %s", "error.testchart.read": "El archivo de carta de ajustes “%s” no se puede leer.", "error.tmp_creation": "No se puede crear directorio de trabajo temporal.", "error.trashcan_unavailable": "El %s no esta disponible. No se eliminaron archivos.", "export": "Exportar...", "extra_args": "Establecer argumentos adicionales de línea de comandos...", "failure": "...fallado!", "*file.invalid": "File invalid.", "file.missing": "El archivo no existe “%s” no existe.", "file.notfile": "“%s” no es un archivo.", "file.select": "Seleccionar archivo", "filetype.any": "Cualquier tipo de archivo", "filetype.cal": "Archivos de calibracion (*.cal)", "filetype.cal_icc": "Archivos de calibracion y perfiles (*.cal;*.icc;*.icm)", "filetype.ccmx": "Matrices de correccion/Ejemplos de calibration espectral (*.ccmx;*.ccss)", "filetype.html": "Archivos HTML (*.html;*.htm)", "filetype.icc": "Archivos de perfil (*.icc;*.icm)", "filetype.icc_mpp": "Archivos de perfil (*.icc;*.icm;*.mpp)", "filetype.icc_ti1_ti3": "Archivos carta de pruebas (*.icc;*.icm;*.ti1;*.ti3)", "filetype.icc_ti3": "Archivos de medicion (*.icc;*.icm;*.ti3)", "filetype.log": "Archivos Log (*.log)", "filetype.png": "Portable Network Graphics (*.png)", "filetype.tif": "Tagged Image File (*.tif)", "filetype.ti1": "Archivos carta de ajustes (*.ti1)", "filetype.ti1_ti3_txt": "Archivos de carta de ajustes (*.ti1), Archivos de medicion (*.ti3;*.txt)", "filetype.ti3": "Archivos de medicion (*.icc;*.icm;*.ti3)", "filetype.txt": "Correcciones periferico.txt", "*filetype.vrml": "VRML files (*.wrl)", "*finish": "Finish", "gamap.default_intent": "Intento de renderizado por defecto para el perfil de la pantalla", "gamap.intents.a": "Absoluto colorimetrico", "gamap.intents.aa": "Apariencia absoluto", "gamap.intents.aw": "Colorimetrico absoluto con escalado de punto blanco", "gamap.intents.la": "Apariencia de luminancia ajustada", "gamap.intents.ms": "Preservar saturacion", "gamap.intents.p": "Perceptual", "gamap.intents.pa": "Apariencia perceptual", "gamap.intents.r": "Relativo colorimetrico", "gamap.intents.s": "Saturacion", "gamap.out_viewcond": "Condiciones de visualizacion de salida", "gamap.perceptual": "Aplicar mapeado de gama a la tabla perceptual", "gamap.profile": "Perfil de origen", "gamap.saturation": "Aplicar mapeado de gama a la tabla saturacion", "gamap.src_viewcond": "Condiciones de visualizacion de entrada", "gamap.viewconds.cx": "Cortar hoja de transparencias en una caja de luz", "gamap.viewconds.jd": "Proyector en entorno oscuro", "gamap.viewconds.jm": "Proyector en entorno tenue", "gamap.viewconds.mb": "Monitor en entorno de trabajo claro", "gamap.viewconds.md": "Monitor en entorno de trabajo oscuro", "gamap.viewconds.mt": "Monitor en entorno de trabajo tipico", "gamap.viewconds.ob": "Escena original - Exteriores claro", "gamap.viewconds.pcd": "Photo CD - Escena original exteriores", "gamap.viewconds.pe": "Evaluacion entorno de impresion", "gamap.viewconds.pp": "Impresion reflexiva practica", "gamapframe.title": "Opciones de mapeado de gama avanzadas", "gamut": "Gama", "gamut.coverage": "Cobertura de la gama", "gamut.view.create": "Generanado vistas de gama...", "gamut.volume": "Volumen de gama", "gamut_plot.tooltip": "Pulsar y arrastrar el raton dentro de la zona para mover el punto de vision, o hacer zoom con la rueda del raton y +/- teclas. Doble pulsacion reinicia el punto de vision.", "glossy": "Brillante", "go_to_website": "ir a la pagina web", "grayscale": "escala de gris", "green": "Verde", "hdmi": "HDMI", "help_support": "Ayuda y soporte...", "hue": "Color", "*if_available": "if available", "illumination": "Iluminacion", "in": "Entrada", "infoframe.default_text": "", "infoframe.title": "Info", "infoframe.toggle": "Mostrar/ocultar ventana de informacion", "initial": "Inicial", "initializing_gui": "Inicializando GUI...", "install_display_profile": "Instalar perfil del monitor...", "instrument": "Instrumento/Puerto", "instrument.calibrate": "Poner el instrumento en una superficie oscura, mate o en su placa y presionar OK para calibrar el instrumento.", "instrument.calibrate.colormunki": "Poner el sensor ColorMunki en posicion de calibracion y presionar OK para calibrar el instrumento.", "instrument.calibrating": "Calibrando instrumento...", "instrument.initializing": "Configurando instrumento, por favor espere...", "instrument.measure_ambient": "Si su instrumento requiere de una tapa especial para medir la luz ambiente, por favor coloquela. Para medir la luz ambiente, coloque el instrumento hacia arriba, al lado de la pantalla. O si desea medir una caja de luz, coloque una carta de gris sin metamerismo dentro de la caja de luz y ponga el instrumento hacia ella. Instrucciones adicionales de como medir la luz ambiente pueden estar disponibles en la documentacion del instrumento. Presione OK para comenzar la medicion.", "instrument.place_on_screen": "Coloque el instrumwento en la ventana de test. Pulse OK. Presione ESC, Q o CTRL^C para abortar, cualquier otra tecla para iniciar la medición.", "*instrument.reposition_sensor": "The measurement failed because the instrument sensor is in the wrong position. Please correct the sensor position, then click OK to continue.", "internal": "Interno", "laptop.icc": "Portatil", "license": "Licencia", "license_info": "Licenciado bajo la GPL", "linear": "lineal", "locale.set": "Setting locale: %s", "locate_spyder2_setup": "En el siguiente dialogo, por favor seleccione el programa de instalacion del Spyder 2 “Spyder2express_2.3.6_Setup.exe” (descargar: http://support.datacolor.com/index.php?/Knowledgebase/List/Index/88/windows)", "locate_spyder2_setup_mac": "En el siguiente dialogo, por favor seleccione el programa de instalacion del Spyder 2, o si el programa ya ha sido instalado, localizar el archivo Spyder.lib (debe de ir al Finder y pulsar Ctrl-click en la aplicacion Spyder2, que esta habitualmente localizada en “Aplicaciones/Spyder2 ”, y seleccionar “mostrar contenido del paquete” del menu emergente, entonces copiar el archivo fuera de la carpeta “Contenido/Mac OS Classic” para poder seleccionarlo).", "locate_spyder2_setup_win": "En el siguiente dialogo, por favor seleccione el programa de instalacion del Spyder 2, o si el programa ya ha sido instalado, localizar el archivo CVSpyder.dll (donde el archivo esta localizado habitualmente en “Archivos de programa\\ColorVision\\Spyder2”).", "log.autoshow": "Mostar ventana de log automaticamente", "lut_access": "Acceso a calibración", "magenta": "Magenta", "matrix": "Matriz", "matte": "Mate", "max": "Max", "maximal": "Maximo", "measure": "Medicion", "measure.darken_background": "Color de fondo negro", "*measure.darken_background.warning": "Attention: If „black background“ is chosen, it will cover the whole screen and you will not be able to see the display adjustment window! If you have a multi-screen setup, move the display adjustment window to another screen before starting the measurement, or use the keyboard (to abort the measurement, press Q. If the measurement is already running, wait briefly, then press Q again).", "measure.testchart": "Carta de pruebas de ajustes", "measureframe.center": "Centro", "measureframe.info": "Mover la ventana de medicion a la posición de pantalla deseada y redimensionarla si es necesario. Aproximadamente todo el area de la ventana se utilizara para mostrar los parches de medicion, el circulo es como una guia para ayudarle a situar su instrumento de medicion.\nSitue el instrumento de medicion en la pantalla y pulse en „Comenzar medicion“. Para cancelar y volver a la pantalla principal, cierre la ventana de medicion.", "measureframe.infobutton": "Info", "measureframe.measurebutton": "Comenzar medicion", "measureframe.title": "Area de medicion", "measureframe.zoomin": "Aumentar", "measureframe.zoommax": "Maximizar/Restaurar", "measureframe.zoomnormal": "Tamaño normal", "measureframe.zoomout": "Encoger", "measurement.play_sound": "Aviso acustico en la medicion continua", "measurement.set_save_path": "Guardar el archivo de medicion en la siguiente carpeta:", "*measurement.untethered": "Untethered measurement", "measurement_file.choose": "Por favor seleccione un archivo de medicion", "measurement_file.choose.colorimeter": "Por favor seleccione un archivo de medicion de colorimetro", "measurement_file.choose.reference": "Por favor seleccione un archivo de medicion de referencia", "measurement_mode": "Tipo", "measurement_mode.adaptive": "Adaptivo", "measurement_mode.factory": "Calibration de fabrica", "measurement_mode.highres": "AltaRes", "measurement_mode.lcd": "LCD (genérico)", "measurement_mode.lcd.ccfl": "LCD (CCFL)", "measurement_mode.lcd.ccfl.2": "LCD (CCFL Type 2)", "measurement_mode.lcd.white_led": "LCD (LED Blanco)", "measurement_mode.lcd.wide_gamut.ccfl": "LCD Gama Amplia(CCFL)", "measurement_mode.lcd.wide_gamut.rgb_led": "LCD Gama Amplia (RGB LED)", "measurement_mode.raw": "Raw", "measurement_mode.refresh": "Refresco (generico)", "measurements.complete": "Mediciones completadas! ¿Desea abrir la carpeta que contiene los archivos de medicion?", "measuring.characterization": "Midiendo muestras de color para caracterizacion...", "menu.about": "Acerca...", "menu.file": "Archivo", "menu.help": "?", "menu.language": "Idioma", "menu.options": "Opciones", "menu.tools": "Herramientas", "menuitem.quit": "Salir", "menuitem.set_argyll_bin": "Localizar ejecutables de Argyll CMS...", "min": "Min", "minimal": "Minimo", "native": "Nativo", "no": "No", "no_settings": "El archivo no contiene ajustes.", "office_web.icc": "Oficina y Web", "offset": "Offset", "ok": "OK", "or": "o", "osd": "OSD", "other": "Otro", "out": "Salida", "overwrite": "Sobreescribir", "panel.surface": "Superficie del panel", "panel.type": "Tipo de panel", "patches": "Parches", "pause": "Pausa", "photo.icc": "Foto", "please_wait": "Por favor esperar...", "prepress.icc": "Preprensa", "preset": "Preestablecido", "preview": "Previo", "profile": "Perfil", "profile.advanced_gamap": "Avanzado...", "*profile.choose": "Please choose a profile:", "profile.created": "El perfil ha sido creado correctamente.", "profile.current": "Perfil actual", "profile.do_not_install": "No instalar el perfil", "profile.info": "Information de perfil", "profile.info.show": "Mostrar information del perfil", "profile.install": "Instalar el perfil", "profile.install.error": "El perfil no puede ser instalado/activado.", "profile.install.osx_manual_select": "El perfil ha sido instalado. Por favor activelo en el panel de preferencias del sistema “Pantallas”.", "profile.install.success": "El perfil ha sido instalado y activado.", "*profile.install.virtual.unsupported": "Profiles cannot be installed for virtual display devices.", "profile.install_local_system": "Instalar perfil en todo el sistema", "profile.install_network": "Instalar perfil en toda la red", "profile.install_user": "Instalar perfil solo para el usuario actual", "profile.invalid": "Perfil no valido.", "profile.load_error": "El perfil de pantalla no puede ser cargado.", "profile.load_on_login": "Cargar la calibracion en la entrada", "profile.load_on_login.handled_by_os": "Dejar al sistema operativo el manejo de la carga de la calibracion (baja calidad)", "profile.name": "Nombre del perfil", "profile.name.create": "Generar nombre del perfil", "profile.name.placeholders": "Debe de utilizar los siguientes argumentos en el nombre de perfil:\n\n%a Nombre del dia de la semana abreviado\n%A Nombre del dia de la semana completo\n%b Nombre del mes abreviado\n%B Nombre del mes completo\n%d Dia del mes\n%H Hora (reloj 24-horas)\n%I Hora (reloj12-horas)\n%j Dia del año\n%m Mes\n%M Minuto\n%p AM/PM\n%S Segundos\n%U Semana (Domingo como primer dia de la semana)\n%w Dia de la semana (domingo es 0)\n%W Semana (Lunes como primer dia de la semana)\n%y Año sin el siglo\n%Y Año con el siglo", "profile.no_embedded_ti3": "El perfil no contiene datos de medicion compatibles con Argyll.", "profile.no_vcgt": "El perfil no contiene curvas de calibracion.", "profile.quality": "Calidad del perfil", "*profile.quality.b2a.low": "Low quality B2A table", "*profile.quality.b2a.low.info": "Choose this option if the profile is only going to be used with inverse A2B gamut mapping to create a DeviceLink or 3D LUT", "*profile.required_tags_missing": "The profile is missing required tags: %s", "*profile.self_check": "Profile self check ΔE*76", "*profile.self_check.avg" : "average", "*profile.self_check.max" : "maximum", "*profile.self_check.rms" : "RMS", "profile.set_save_path": "Seleccionar ruta de guardado...", "profile.settings": "Opciones de perfilado", "profile.share": "Subido perfil...", "profile.share.avg_dE_too_high": "El perfil muestra un valor delta E demasiado alto (actual = %s, umbral = %s).", "profile.share.enter_info": "Puede compartir su perfil con otros usuarios via el servicio OpenSUSE “ICC Profile Taxi”.\n\nPor favor proporcione una descripcion significativa e introduzca las propiedades de la pantalla mas abajo. Leer ajustes de la pantalla del menu OSD de la misma y aplicar solo las ajustes aplicables a la pantalla que se alteraron de las que trae por defecto.\nEjemplo: Para la mayor parte de las pantallas, estos son los nombres de los preajustes escogidos, brillo, contraste, color temperatura y/o ganancia del punto blanco RGB, asi como la gamma. En portatiles and ultraligeros, habitualmente solo el brillo. Si ha cambiado ajustes adicionales mientras calibraba su pantalla, introduzcalas si es posible.", "profile.share.meta_missing": "El perfil no contiene la meta informacion necesaria.", "profile.share.success": "Perfil subido satisfactoriamente.", "profile.testchart_recommendation": "Para un perfil de mayor calidad, es recomendable una carta de ajustes con mas parches, pero llevará mas tiempo medirla. ¿Desea usar la carta de ajustes recomendada?", "profile.type": "Tipo de perfil", "profile.type.gamma_matrix": "Gamma + matriz", "profile.type.lut.lab": "L*a*b* LUT", "profile.type.lut.xyz": "XYZ LUT", "profile.type.lut_matrix.xyz": "XYZ LUT + matriz", "profile.type.lut_rg_swapped_matrix.xyz": "XYZ LUT + matriz swapped", "profile.type.shaper_matrix": "Curvas + matriz", "profile.type.single_gamma_matrix": "Gamma simple + matriz", "profile.type.single_shaper_matrix": "Curva simple + matriz", "profile.unsupported": "Tipo de perfil no soportado (%s) y/o espacio de color (%s).", "profile.update": "Actualizar perfil", "*measurement_report.update": "Update measurement report...", "*measurement_report": "Measurement report...", "measurement_report_choose_chart": "Por favor seleccione la carta de ajustes a medir:", "measurement_report_choose_chart_or_reference": "Por favor seleccione una carta de ajustes o referencia:", "measurement_report_choose_profile": "Por favor seleccione el perfil a validar:", "profiling.complete": "Perfilado completado!", "profiling.incomplete": "El perfilado todavia no ha terminado.", "projector": "Proyector", "projector_mode_unavailable": "El modo proyector esta solo disponible con Argyll CMS 1.1.0 Beta o mas actual.", "quality.ultra.warning": "La calidad Ultra no deberia ser usada nunca, excepto para probar que no deberia ser nunca usada (tiempo muy largo de procesado!). Quizas deberia escoger calidad media o alta.", "readme": "Leame", "ready": "Listo.", "red": "Rojo", "reference": "Referencia", "rendering_intent": "Intento de renderizado", "report.calibrated": "Informe de pantalla calibrada", "report.uncalibrated": "Informe de pantalla no calibrada", "resources.notfound.error": "Error fatal: no se encuentra el archivo requerido:", "resources.notfound.warning": "Cuidado: no se encuentran algunos archivos requeridos:", "restore_defaults": "Restaurar valores por defecto", "rgb.trc": "Funcion de transferencia RGB", "rgb.trc.averaged": "Funcion de transferencia RGB promedio", "saturation": "Saturacion", "save": "Guardar", "save_as": "Guardar como...", "settings.additional": "ajustes adicionales", "settings.basic": "ajustes basicas", "settings.new": "", "settings_loaded": "Las siguientes ajustes de calibracion han sido cargadas: %s. Otras opciones de calibracion han sido restauradas a sus valores por defecto y las opciones de perfilado no han sido cambiadas. Las curvas calibración han sido cargadas.", "settings_loaded.all": "ajustes y curvas calibración han sido cargadas.", "settings_loaded.cal": "El perfil solo contiene ajsutes de calibracion. Otras opciones no se han cambiado. No se han encontrado curvas de calibracion.", "settings_loaded.cal_and_lut": "El perfil solo contiene ajsutes de calibracion. Otras opciones no se han cambiado y las curvas de calibracion se han cargado.", "settings_loaded.cal_and_profile": "Las ajustes han sido cargadas. No se han encontrado curvas calibración.", "settings_loaded.profile": "El perfil contiene solo ajustes del perfil. Otras opciones no han sido cambiadas. No se han encontrado curvas calibración.", "settings_loaded.profile_and_lut": "El perfil contiene solo ajustes del perfil. Otras opciones no han sido cambiadas y las curvas calibración han sido cargadas.", "show_advanced_calibration_options": "Mostar opciones avanzadas de calibracion", "softproof.icc": "Softproof", "spectral": "Espectral", "sRGB.icc": "sRGB", "startup": "Comenzando...", "success": "...hecho.", "*synthicc.create": "Create synthetic ICC profile...", "target": "Destino", "tc.I": "Cuerpo espacial del dipositivo centrado en rejilla cubica perceptual", "tc.Q": "Llenado de espacio perceptual quasi-random", "tc.R": "Espacio perceptual aleatorio", "tc.adaption": "Adaptacion", "tc.algo": "Distribucion", "tc.angle": "Angulo", "*tc.black": "Black patches", "*tc.dark_emphasis": "Dark region emphasis", "tc.fullspread": "Parches interactivos", "tc.gray": "Parches neutros", "tc.i": "Cuerpo espacial del dipositivo centrado en rejilla cubica", "tc.limit.sphere": "Limitar ejemplos a esfera", "tc.limit.sphere_radius": "Radio", "tc.multidim": "Multidimensional", "tc.multidim.patches": "pasos = %s parches (%s neutral)", "*tc.neutral_axis_emphasis": "Neutral axis emphasis", "tc.ofp": "Punto de ejemplo mas lejano optimizado", "tc.patch": "Parche", "tc.patches.gray": "Neutral", "tc.patches.selected": "Seleccionado", "tc.patches.total": "Parches totales", "tc.precond": "Precondicionando perfil", "tc.preview.create": "Creando previo, por favor espere...", "tc.q": "Llenado del espacio de dispositivo quasi-random", "tc.r": "Espacio del dispositivo aleatorio", "tc.single": "Parches de un canal", "tc.single.perchannel": "Por canal", "tc.t": "Punto de ejemplo lejano incremental", "tc.vrml": "Crear archivo VRML de diagnostico", "*tc.vrml.black_offset": "RGB black offset (L*)", "tc.vrml.device": "Localizacion de dispositivos", "tc.vrml.lab": "Localizaciones Lab", "*tc.vrml.save_as": "Save VRML file(s) as...", "*tc.vrml.use_D50": "Neutral RGB white", "tc.white": "Parches blancos", "*tempdir_should_still_contain_files": "Created files should still be in the temporary directory “%s”.", "*testchart.add_saturation_sweeps": "Add saturation sweeps", "*testchart.add_ti3_patches": "Add reference patches...", "*testchart.change_patch_order": "Change patch order", "testchart.confirm_select": "Archivo guardado. Desea seleccionar este testchart?", "testchart.create": "Crear archivo de carta de ajustes", "testchart.discard": "Descartar", "testchart.dont_select": "No seleccionar", "testchart.edit": "Editar carta de ajustes...", "*testchart.export.repeat_patch": "Repeat each patch:", "testchart.file": "Archivo Carta de ajustes", "testchart.info": "Numero de parches en la carta de ajustes seleccionado", "testchart.invalid": "El archivo carta de ajustes no es valido!", "testchart.read": "Leyendo carta de ajustes...", "testchart.save": "Guardar", "testchart.save_as": "Guardar como...", "testchart.save_or_discard": "La carta de ajustes no ha sido guardado.", "testchart.select": "Seleccionar", "testchart.set": "Seleccione archivo carta de ajustes...", "*testchart.sort_by_HSV": "Sort by HSV", "*testchart.sort_by_L": "Sort by L*", "*testchart.sort_by_RGB": "Sort by RGB", "*testchart.sort_by_RGB_sum": "Sort by sum of RGB", "*testchart.sort_RGB_gray_to_top": "Sort RGB gray to top", "*testchart.sort_RGB_white_to_top": "Sort RGB white to top", "*testchart.optimize_for_untethered_auto_mode": "Optimize for untethered in auto mode", "tone_values": "valores tonales", "translations": "Traducciones", "trashcan.linux": "papelera", "trashcan.mac": "papelera", "trashcan.windows": "papelera de reciclaje", "trc": "Curva tonal", "trc.gamma": "Gamma", "trc.lstar": "L*", "trc.rec709": "Rec. 709", "trc.rec1886": "Rec. 1886", "trc.should_use_viewcond_adjust": "Cuando se usan las curvas SMPTE 240M, Rec. 709 o sRGB, debe usar un ajuste en las condiciones de visualizacion para los niveles de luz ambiente tan buenos como pueda para obtener los resultados que desee. Para hacer esto, marque la casilla cerca de “Nivel de luz ambiente” e introduzca un valor en Lux. Opcionalmente puede medir la luz ambiente cuando realiza una calibracion, si lo soporta su instrumento.", "trc.smpte240m": "SMPTE 240M", "trc.srgb": "sRGB", "trc.type.absolute": "Absoluto", "trc.type.relative": "Relativo", "type": "Tipo", "uninstall_display_profile": "Desinstalar perfil de pantalla...", "unknown": "desconocido", "unnamed": "Sin nombre", "*Untethered": "Untethered", "update_check": "Comprobar actualizacion de la aplicacion...", "update_check.fail": "Comprobar fallo de actualizacion de la aplicacion:", "update_check.fail.version": "Version del archivo remoto desde el servidor %s no se pudo analizar.", "update_check.new_version": "Una actualizacion esta disponible: %s", "update_check.onstartup": "Comprobar actualizacion de la aplicacion al inicio", "update_check.uptodate": "%s esta actualizada.", "upload": "Subir", "use_separate_lut_access": "Usar acceso separado a la tabla de gamma de la tarjeta grafica ", "vcgt": "Curvas de calibracion", "verify.ti1": "Carta de ajustes de verificacion de perfil", "verify_extended.ti1": "Carta de ajustes de verificacion de perfil extendida", "vga": "VGA", "video.icc": "Video", "warning": "Cuidado", "warning.already_exists": "El archivo “%s” ya existe en la localizacion escogida y será sobreescrito. Desea continuar?", "warning.autostart_system": "El directorio de autoarranque del sistema no se pudo determinar.", "warning.autostart_user": "El directorio de autoarranque específico del usuario no se pudo determinar.", "warning.copy_failed_continue": "El archivo “%s” no puede ser copiado en “%s”. Continuando...", "warning.discard_changes": "¿Realmente desea descartar los cambios en la configuración actual?", "warning.no_comports_detected": "Ningun instrumento ha sido detectado.", "white": "Blanco", "whitepoint": "Punto blanco", "whitepoint.colortemp": "Temperatura", "whitepoint.colortemp.locus.blackbody": "Cuerpo negro", "whitepoint.colortemp.locus.curve": "Curva de la temperatura de color", "whitepoint.colortemp.locus.daylight": "Luz dia", "whitepoint.set": "¿También desea establecer el punto blanco con el valor medido?", "*whitepoint.simulate": "Simulate whitepoint", "*whitepoint.simulate.relative": "Relative to target profile whitepoint", "whitepoint.xy": "Coordenadas cromaticidad", "window.title": "dispcalGUI", "*windows.version.unsupported": "This version of Windows is not supported.", "*windows_only": "Windows only", "working_dir": "Directorio de trabajo:", "yellow": "Amarillo", "yes": "Si", } dispcalGUI-1.7.1.6/dispcalGUI/lang/fr.json000644 000765 000000 00000160610 12266603364 020041 0ustar00svpwheel000000 000000 { "*": "Note to translators: Keys which are not yet translated are marked with a leading asterisk (*) and are indented with two tabs instead of one. Please remove the asterisk when translated.", "!author": "Loïc Guégant", "!language": "Français", "!language_name": "FRENCH", "apply": "Appliquer", "apply_bt1886_gamma_mapping": "Appliquer le mappage de gamma BT.1886", "3dlut.bitdepth.input": "Résolution d'entrée de la table de correspondance 3D", "3dlut.bitdepth.output": "Résolution de sortie de la table de correspondance 3D", "3dlut.create": "Créer une table de correspondance 3D...", "3dlut.encoding.input": "Encodage d'entrée", "3dlut.encoding.output": "Encodage de sortie", "*3dlut.encoding.output.warning.madvr": "Warning: This output encoding is not recommended and will cause clipping if madVR is not set up to output “TV levels (16-235)” under “Devices” → “%s” → “Properties”. Use at own risk!", "3dlut.encoding.type_n": "Étendue complète RGB 0-255", "3dlut.encoding.type_t": "TV RGB 16-235", "3dlut.encoding.type_6": "TV Rec. 601 YCbCr SD", "3dlut.encoding.type_7": "TV Rec. 709 1125/60Hz YCbCr HD", "3dlut.encoding.type_5": "TV Rec. 709 1250/50Hz YCbCr HD", "3dlut.encoding.type_2": "TV Rec. 2020 YCbCr UHD", "3dlut.encoding.type_C": "TV Rec. 2020 Constant Luminance YCbCr UHD", "3dlut.encoding.type_x": "TV xvYCC Rec. 601 YCbCr (primaires Rec. 709) SD", "3dlut.encoding.type_X": "TV xvYCC Rec. 709 YCbCr HD", "3dlut.format": "Format de fichier de table de correspondance 3D", "3dlut.format.3dl": "Autodesk Lustre / Kodak Look Manager System (.3dl)", "3dlut.format.cube": "IRIDAS (.cube)", "3dlut.format.eeColor": "eeColor Box (.txt)", "3dlut.format.mga": "Pandora (.mga)", "3dlut.format.madVR": "madVR (.3dlut)", "3dlut.format.spi3d": "Sony Imageworks (.spi3d)", "3dlut.frame.title": "Créer une table de correspondance 3D", "3dlut.input.profile": "Profil source", "*3dlut.madVR.enable": "Enable madVR 3D LUT", "output.profile": "Profil cible", "apply_cal": "Appliquer le calibrage (vcgt)", "apply_cal.error": "Le calibrage n'a pu être appliqué.", "3dlut.size": "Taille de la table de correspondance 3D", "3dlut.use_abstract_profile": "Profil abstrait (« Look »)", "[rgb]TRC": "Courbes de réponse du ton", "aborted": "... interrompu.", "aborting": "Interruption, veuillez patienter (cela peut prendre quelques secondes)...", "adaptive_mode_unavailable": "Le mode Adaptatif n'est disponible qu'avec Argyll CMS 1.1.0 RC3 ou ultérieur.", "allow_skip_sensor_cal": "Autoriser à passer l'autocalibrage du spectromètre", "ambient.measure": "Mesurer la lumière ambiante", "ambient.set": "Voulez-vous également régler le niveau de lumière ambiante à la valeur mesurée ?", "app.confirm_restore_defaults": "Voulez-vous réellement annuler vos modifications et restaurer les valeurs par défaut ?", "app.restart_request": "Veuillez redémarrer l'application.", "argyll.debug.warning1": "Veuillez utiliser cette option uniquement si vous avez vraiment besoin d'information de débogage (p. ex. pour le dépannage d'une fonctionnalité d'Argyll CMS) ! Ceci est en principe utile uniquement aux développeurs du logiciel pour aider au diagnostic et à la résolution de problèmes. Êtes-vous sûr(e) de vouloir activer la sortie du débogage ?", "argyll.debug.warning2": "N'oubliez pas de désactiver la sortie du débogage pour le fonctionnement normal du logiciel.", "argyll.dir": "Répertoire des exécutables Argyll CMS :", "argyll.dir.invalid": "Exécutables Argyll CMS introuvables.\nVeuillez sélectionner le répertoire contenant les fichiers exécutables (peut-être préfixé ou suffixé « argyll- » / « -argyll ») : %s", "argyll.error.detail": "Message d'erreur détaillé d'Argyll CMS :", "argyll.instrument.driver.missing": "Le pilote d'Argyll CMS pour votre périphérique de mesure ne semble pas installé ou installé incorrectement. Veuillez vérifier si votre périphérique de mesure apparaît dans le gestionnaire de périphériques de Windows sous « Argyll LibUSB-1.0A devices » et (ré-)installez le pilote si nécessaire. Veuillez consulter la documentation pour les instructions d'installation.", "argyll.util.not_found": "Exécutable Argyll CMS « %s » introuvable.", "as_measured": "Tel que mesuré", "auth.failed": "Échec de l'authentification.", "auto": "Automatique", "autostart_remove_old": "Suppression de l'ancienne entrée de démarrage automatique", "backlight": "Rétroéclairage", "black": "Noir", "black_point": "Point noir", "black_point_compensation": "Compensation du point noir", "black_point_compensation.info": "La compensation du point noir empêche efficacement la réduction du noir, mais réduit la précision de la conversion des couleurs.", "blacklevel": "Niveau de noir", "blue": "Bleu", "brightness": "Luminosité", "browse": "Sélectionner...", "bug_report": "Rapporter un bogue...", "button.calibrate": "Calibrer uniquement", "button.calibrate_and_profile": "Calibrer && caractériser", "button.profile": "Caractériser uniquement", "cal_extraction_failed": "Échec de l'extraction des données de calibrage à partir du profil.", "calibration": "Calibrage", "calibration.ambient_viewcond_adjust": "Niveau de luminosité ambiante", "calibration.ambient_viewcond_adjust.info": "Pour réaliser un ajustement des conditions de visualisation \nlors du calcul des courbes de calibrage, cochez la case et \nsaisissez votre niveau de luminosité ambiante. Vous pouvez \néventuellement mesurer aussi la luminosité ambiante au \ncours du calibrage, si votre instrument le permet.", "calibration.black_luminance": "Niveau de noir", "calibration.black_output_offset": "Compensation du noir restitué", "calibration.black_point_correction": "Correction du point noir", "calibration.black_point_correction_choice": "Vous pouvez désactiver la correction du point noir pour optimiser le niveau de noir et le taux de contraste (recommandé pour la plupart des écrans cathodiques). Veuillez indiquer votre choix pour la correction du point noir :", "calibration.black_point_correction_choice_dialogtitle": "Correction du point noir", "calibration.black_point_rate": "Taux", "calibration.check_all": "Vérifier les réglages", "calibration.complete": "Calibrage terminé.", "calibration.create_fast_matrix_shaper": "Créer un profil de matrice", "calibration.create_fast_matrix_shaper_choice": "Voulez-vous créer un profil de façonnage de matrice rapide à partir des mesures de calibrage ou juste calibrer ?", "*calibration.do_not_use_video_lut": "Do not use video card gamma table to apply calibration", "*calibration.do_not_use_video_lut.warning": "Do you really want to change the recommended setting?", "calibration.embed": "Incorporer les courbes de calibrage dans le profil", "calibration.file": "Réglages", "calibration.file.invalid": "Le fichier de réglages sélectionné est invalide.", "calibration.file.none": "", "calibration.incomplete": "Le calibrage n'a pas été achevé.", "calibration.interactive_display_adjustment": "Réglage interactif de l'écran", "calibration.interactive_display_adjustment.black_level.crt": "Sélectionnez « Commencer la mesure » et ajustez la luminosité et/ou les contrôles de décalage RVB de votre écran pour obtenir le niveau désiré.", "calibration.interactive_display_adjustment.black_point.crt": "Sélectionnez « Commencer la mesure » et ajustez les contrôles de décalage RVB de votre écran pour obtenir le point noir désiré.", "calibration.interactive_display_adjustment.check_all": "Sélectionnez « Commencer la mesure » pour contrôler l'ensemble des réglages.", "calibration.interactive_display_adjustment.generic_hint.plural": "Une bonne correspondance est obtenue si toutes les barres peuvent être amenées à la position indiquée au centre.", "calibration.interactive_display_adjustment.generic_hint.singular": "Une bonne correspondance est obtenue si la barre peut être amenée à la position indiquée au centre.", "calibration.interactive_display_adjustment.start": "Commencer la mesure", "calibration.interactive_display_adjustment.stop": "Arrêter la mesure", "calibration.interactive_display_adjustment.white_level.crt": "Sélectionnez « Commencer la mesure » et ajustez le contraste et/ou les contrôles de gain RVB de votre écran pour obtenir le niveau désiré.", "calibration.interactive_display_adjustment.white_level.lcd": "Sélectionnez « Commencer la mesure » et ajustez le contrôle de rétro-éclairage/luminosité de votre écran pour obtenir le niveau désiré.", "calibration.interactive_display_adjustment.white_point": "Sélectionnez « Commencer la mesure » et ajustez les contrôles de température des couleurs et/ou de gain RVB de vote écran pour obtenir le point blanc désiré.", "calibration.keep_black_point_correction": "Conserver le réglage actuel", "calibration.load": "Charger des réglages...", "calibration.load_error": "Les courbes de la table de correspondance n'ont pas pu être chargées.", "calibration.load_from_cal": "Charger les courbes de la table de correspondance à partir du fichier de calibrage...", "calibration.load_from_cal_or_profile": "Charger les courbes de la table de correspondance à partir du fichier de calibrage ou du profil...", "calibration.load_from_display_profile": "Charger les courbes de la table de correspondance à partir du profil actuel du périphérique d'affichage...", "calibration.load_from_profile": "Charger les courbes de la table de correspondance à partir du profil...", "calibration.load_success": "Les courbes de la table de correspondance ont été chargées avec succès.", "calibration.loading": "Chargement des courbes de la table de correspondance à partir du fichier...", "calibration.loading_from_display_profile": "Chargement des courbes de la table de correspondance du profil actuel du périphérique d'affichage...", "calibration.luminance": "Niveau de blanc", "calibration.lut_viewer.title": "Courbes", "calibration.preview": "Aperçu du calibrage", "calibration.quality": "Qualité du calibrage", "calibration.quality.high": "Haute", "calibration.quality.low": "Basse", "calibration.quality.medium": "Moyenne", "calibration.quality.ultra": "Ultra", "calibration.quality.verylow": "Très basse", "calibration.speed": "Vitesse du calibrage", "calibration.speed.high": "Haute", "calibration.speed.low": "Basse", "calibration.speed.medium": "Moyenne", "calibration.speed.veryhigh": "Très haute", "calibration.speed.verylow": "Très basse", "calibration.reset": "Réinitialiser les courbes de la table de correspondance", "calibration.reset_error": "Les courbes de la table de correspondance n'ont pas pu être réinitialisées.", "calibration.reset_success": "Les courbes de la table de correspondance ont été réinitialisées avec succès.", "calibration.resetting": "Réinitialisation linéaire des courbes de la table de correspondance...", "calibration.settings": "Réglages du calibrage", "calibration.show_actual_lut": "Afficher les courbes de calibrage actuelles de la table du gamma de la carte vidéo", "calibration.show_lut": "Afficher les courbes de la table de correspondance", "calibration.start": "Poursuivre le calibrage", "calibration.turn_off_black_point_correction": "Désactiver", "calibration.turn_on_black_point_correction": "Activer", "calibration.update": "Mettre à jour le calibrage", "calibration.update_profile_choice": "Voulez-vous également mettre à jour les courbes de calibrage dans le profil existant ou juste calibrer ?", "*calibration.use_linear_instead": "Use linear calibration instead", "calibration.verify": "Vérifier le calibrage", "calibration_profiling.complete": "Calibrage et caractérisation terminés.", "calibrationloader.description": "Charge les courbes de calibrage à partir du profil ICC pour l'écran %s", "cancel": "Annuler", "ccxx.ti1": "Grille de test pour la correction du colorimètre", "checking_lut_access": "Contrôle de l'accès à la table de correspondance pour l'écran %s...", "centered": "Centré", "clear": "Effacer", "*color.custom": "Custom color", "colorconfig_remove_old": "Suppression de l'ancien fichier de configuration de l'écran", "colorimeter_correction.create": "Créer une correction du colorimètre...", "colorimeter_correction.create.details": "Veuillez vérifier les champs ci-dessous et les changer si nécessaire. La description peut également contenir des détails importants (p. ex. des réglages spécifiques à l'écran, un observateur CIE non-standard ou ce genre de chose).", "colorimeter_correction.create.failure": "Échec de la création de la correction.", "colorimeter_correction.create.info": "Pour créer une matrice de correction du colorimètre (CCMX) ou un fichier d'échantillons de spectre de calibrage (CCSS), vous devez d'abord mesurer la « Grille de test pour la correction du colorimètre » à l'aide d'un spectromètre, et au cas où vous voulez créer une CCMX, également avec le colorimètre.\nPour cela, choisissez « Grille de test de mesure ». Ensuite, choisissez « Créer une correction du colorimètre... » et sélectionnez le(s) fichier(s) mesuré(s).", "colorimeter_correction.create.success": "Correction créée.", "colorimeter_correction.file.none": "Aucune", "colorimeter_correction.import": "Importer les corrections du colorimètre d'un autre logiciel de profilage d'écrans...", "colorimeter_correction.import.auto_manual": "Si vous voulez importer automatiquement des corrections de colorimètre, vous devez soit avoir déjà installé le logiciel du vendeur de votre instrument, soit insérer son support d'installation, puis choisir « Auto ». Si vous avez un installateur de logiciel que vous n'avez pas encore exécuté, ou que vous voulez sélectionner un fichier vous-même, choisissez « Sélectionner un fichier ».", "colorimeter_correction.import.choose": "Veuillez choisir le fichier de correction de colorimètre à importer :", "colorimeter_correction.import.failure": "Aucune correction de colorimètre n'a pu être importée.", "colorimeter_correction.import.success": "Les corrections du colorimètre ont été importées depuis les logiciels suivants :\n\n%s", "colorimeter_correction.instrument_mismatch": "La correction de colorimètre sélectionnée ne convient pas à l'instrument sélectionné.", "colorimeter_correction.upload": "Charger la correction du colorimètre...", "colorimeter_correction.upload.confirm": "Voulez-vous charger la correction du colorimètre vers la base de données en ligne (recommandé) ? Tout fichier chargé sera considéré comme placé dans le domaine public, de sorte à pouvoir être utilisé librement.", "colorimeter_correction.upload.deny": "Cette correction de colorimètre ne peut être chargée.", "colorimeter_correction.upload.exists": "La correction du colorimètre existe déjà dans la base de données.", "colorimeter_correction.upload.failure": "La correction n'a pu être entrée dans la base de données en ligne.", "colorimeter_correction.upload.success": "La correction a été chargée dans la base de données en ligne.", "colorimeter_correction.web_check": "Chercher en ligne une correction de colorimètre...", "colorimeter_correction.web_check.choose": "Les corrections de colorimètre suivantes pour les écran et instrument sélectionnés ont été trouvées :", "colorimeter_correction.web_check.failure": "Aucune correction de colorimètre pour les écran et instrument sélectionnés n'a été trouvée.", "colorimeter_correction_matrix_file": "Matrice de correction", "colorimeter_correction_matrix_file.choose": "Choisir une matrice de correction", "colorspace": "Espace de couleurs", "colorspace.show_outline": "Afficher le contour", "commandline": "Ligne de commande :", "comparison_profile": "Profil de comparaison", "comport_detected": "Une modification de la configuration de l'instrument ou du port a été détectée.", "compression.gzip": "Compression GZIP", "computer.name": "Nom de l'ordinateur", "connection.fail": "Erreur de connexion (%s)", "connection.fail.http": "Erreur HTTP %s", "continue": "Continuer", "contrast": "Contraste", "create_and_preview": "Création && aperçu", "create_ccss_or_ccmx": "Voulez-vous créer une matrice de correction pour les colorimètres ordinaires (CCMX) ou un échantillon de spectre de calibrage pour les i1 Display Pro et ColorMunki Display (CCSS)?", "create_profile": "Créer un profil à partir des données mesurées...", "create_profile_from_edid": "Créer un profil à partir des données d'identification étendues de l'écran...", "created": "Créé", "current": "Courant", "custom": "Personnalisé", "cyan": "Cyan", "d3-e4-s0-g9-m3-b3-f0-crossover.ti1": "Grille de test par défaut pour profils de matrice", "d3-e4-s0-g25-m3-b3-f0-crossover.ti1": "Grille de test étendue pour profils de matrice", "d3-e4-s0-g49-m3-b3-f0-crossover.ti1": "Grande grille de test pour profils de matrice", "d3-e4-s0-g97-m3-b3-f0-crossover.ti1": "Très grande grille de test pour profils de matrice", "d3-e4-s3-g3-m0-f0.ti1": "Grille de tests par défaut pour les profils « gamma + matrice »", "d3-e4-s13-g37-m4-b4-f0.ti1": "Petite grille de test pour profils de tables de correspondance", "d3-e4-s17-g49-m5-b5-f0.ti1": "Grille de test par défaut pour profils de tables de correspondance", "d3-e4-s21-g61-m6-b6-f0.ti1": "Grille de test étendue pour profils de tables de correspondance", "d3-e4-s25-g73-m7-b7-f0.ti1": "Grande grille de test pour profils de tables de correspondance", "d3-e4-s29-g85-m8-b8-f0.ti1": "Très grande grille de test pour profils de tables de correspondance", "d3-e4-s29-g85-m0-f994-caRGB.ti1": "Très grande grille de test pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires AdobeRGB (D65)", "d3-e4-s29-g85-m0-f994-ceRGBv2.ti1": "Très grande grille de test pour profils de tables de correspondance, optimisée pour L* avec primaires NTSC (D50)", "d3-e4-s29-g85-m0-f994-cRec709_Gamma22.ti1": "Très grande grille de test pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires Rec. 709 (D65)", "d3-e4-s29-g85-m0-f994-csRGB.ti1": "Très grande grille de test pour profils de tables de correspondance, optimisée pour sRGB (D65)", "d3-e4-s33-g97-m9-b9-f0.ti1": "Grille de test XXL pour profils de tables de correspondance", "d3-e4-s33-g97-m0-f1399-caRGB.ti1": "Grille de test XXL pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires AdobeRGB (D65)", "d3-e4-s33-g97-m0-f1399-ceRGBv2.ti1": "Grille de test XXL pour profils de tables de correspondance, optimisée pour L* avec primaires NTSC (D50)", "d3-e4-s33-g97-m0-f1399-cRec709_Gamma22.ti1": "Grille de test XXL pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires Rec. 709 (D65)", "d3-e4-s33-g97-m0-f1399-csRGB.ti1": "Grille de test XXL pour profils de tables de correspondance, optimisée pour sRGB (D65)", "d3-e4-s37-g109-m10-b10-f0.ti1": "Grille de test XXXL pour profils de tables de correspondance", "d3-e4-s37-g109-m0-f1906-caRGB.ti1": "Grille de test XXXL pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires AdobeRGB (D65)", "d3-e4-s37-g109-m0-f1906-ceRGBv2.ti1": "Grille de test XXXL pour profils de tables de correspondance, optimisée pour L* avec primaires NTSC (D50)", "d3-e4-s37-g109-m0-f1906-cRec709_Gamma22.ti1": "Grille de test XXXL pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires Rec. 709 (D65)", "d3-e4-s37-g109-m0-f1906-csRGB.ti1": "Grille de test XXXL pour profils de tables de correspondance, optimisée pour sRGB (D65)", "d3-e4-s41-g121-m11-b11-f0.ti1": "Grille de test massive pour profils de tables de correspondance", "d3-e4-s41-g121-m0-f2527-caRGB.ti1": "Grille de test massive pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires AdobeRGB (D65)", "d3-e4-s41-g121-m0-f2527-ceRGBv2.ti1": "Grille de test massive pour profils de tables de correspondance, optimisée pour L* avec primaires NTSC (D50)", "d3-e4-s41-g121-m0-f2527-cRec709_Gamma22.ti1": "Grille de test massive pour profils de tables de correspondance, optimisée pour Gamma 2.2 avec primaires Rec. 709 (D65)", "d3-e4-s41-g121-m0-f2527-csRGB.ti1": "Grille de test massive pour profils de tables de correspondance, optimisée pour sRGB (D65)", "default": "Valeur par défaut", "delete": "Supprimer", "delta_e_to_locus": "ΔE*00 vers locus %s", "description": "Description", "detect_displays_and_ports": "Détecter les périphériques d'affichage et les instruments", "*device.name.placeholder": "", "*devlink_profile": "DeviceLink profile", "dialog.confirm_delete": "Voulez-vous réellement supprimer le(s) fichier(s) sélectionné(s) ?", "dialog.confirm_overwrite": "Le fichier « %s » existe déjà. Voulez-vous l'écraser ?", "dialog.cal_info": "Le fichier de calibrage “%s” sera utilisé. Voulez-vous continuer ?", "*dialog.confirm_cancel": "Do you really want to cancel?", "dialog.confirm_delete": "Voulez-vous vraiment supprimer le(s) fichier(s) sélectionné(s) ?", "dialog.current_cal_warning": "Le profil contiendra les courbes de calibrage actuelles. Voulez-vous continuer ?", "dialog.do_not_show_again": "Ne plus afficher ce message", "dialog.enter_password": "Veuillez saisir votre mot de passe.", "dialog.install_profile": "Voulez-vous installer le profil « %s » et en faire le profil par défaut pour l'écran « %s » ?", "dialog.linear_cal_info": "Les courbes de calibrage linéaires seront utilisées. Voulez-vous continuer ?", "dialog.load_cal": "Charger les réglages", "dialog.set_argyll_bin": "Veuillez indiquer le répertoire dans lequel se trouvent les exécutables d'Argyll CMS.", "dialog.set_profile_save_path": "Créer le répertoire du profil « %s » ici :", "dialog.set_testchart": "Sélectionner un fichier de grille de test", "dialog.ti3_no_cal_info": "Les données de mesure ne contiennent pas de courbes de calibrage. Voulez-vous réellement continuer ?", "display": "Périphérique d'affichage", "display.connection.type": "Connexion", "display.manufacturer": "Fabricant du périphérique d'affichage", "display.primary": "(Primaire)", "display.properties": "Propriétés du périphérique d'affichage", "display.settings": "Réglages du périphérique d'affichage", "display.tech": "Technologie de l'écran", "display_detected": "Une modification de la configuration du périphérique d'affichage a été détectée.", "display_lut.link": "Lier/délier l'accès à l'écran et à la table de correspondance", "display_short": "Périphérique d'affichage (abrégé)", "displayport": "DisplayPort", "drift_compensation.blacklevel": "Compensation de la dérive du niveau de noir", "drift_compensation.blacklevel.info": "La compensation de la dérive du niveau de noir tente de prendre en compte les déviations de mesure causées par la dérive du calibrage du noir d'un périphérique de mesure s'échauffant. À cette fin, un échantillon de test noir est mesuré périodiquement, augmentant la durée totale nécessaire aux mesures. De nombreux colorimètres ont une compensation de la température intégrée, auquel cas la compensation de la dérive du niveau de noir n'est pas nécessaire, mais la plupart des spectromètres ne sont pas compensés en température.", "drift_compensation.whitelevel": "Compensation de la dérive du niveau de blanc", "drift_compensation.whitelevel.info": "La compensation de la dérive du niveau de blanc tente de prendre en compte les déviations de mesure causées par les changements de luminosité d'un périphérique d'affichage s'échauffant. À cette fin, un échantillon de test blanc est mesuré périodiquement, augmentant la durée totale nécessaire aux mesures.", "dry_run": "Simulation", "dry_run.end": "Simulation terminée.", "dry_run.info": "Simulation. Vérifiez le journal pour voir la ligne de commande.", "dvi": "DVI", "edid.crc32": "Somme de contrôle EDID CRC32", "edid.serial": "N° de série EDID", "elapsed_time": "Temps écoulé", "enable_argyll_debug": "Activer la sortie du diagnostic d'Argyll CMS", "enable_spyder2": "Activer le colorimètre Spyder 2...", "enable_spyder2_failure": "Spyder 2 n'a pas pu être activé.", "enable_spyder2_success": "Spyder 2 a été activé avec succès.", "enumerate_ports.auto": "Détecter automatiquement les instruments", "enumerating_displays_and_comports": "Inventaire des périphériques d'affichage et des ports de communication...", "error": "Erreur", "error.access_denied.write": "Vous n'avez pas l'accès en écriture à %s", "error.already_exists": "Le nom « %s » ne peut pas être utilisé, car un autre objet du même nom existe déjà. Veuillez choisir un autre nom ou un autre répertoire.", "error.autostart_creation": "La création d'une entrée de démarrage automatique pour que %s charge les courbes de calibrage à la connexion a échoué.", "error.autostart_remove_old": "L'ancienne entrée d'autodémarrage qui charge les courbes de calibrage à la connexion n'a pu être supprimée : %s", "error.autostart_system": "L'entrée d'autodémarrage système pour charger les courbes de calibrage à la connexion n'a pas pu être créée car le répertoire d'autodémarrage système n'a pas pu être déterminé.", "error.autostart_user": "L'entrée d'autodémarrage spécifique à l'utilisateur/trice pour charger les courbes de calibrage à la connexion n'a pas pu être créée car le répertoire d'autodémarrage spécifique à l'utilisateur/trice n'a pas pu être déterminé.", "error.cal_extraction": "Le calibrage n'a pas pu être extrait de « %s ».", "error.calibration.file_missing": "Le fichier de calibrage « %s » est manquant.", "error.calibration.file_not_created": "Aucun fichier de calibrage n'a été créé.", "error.calibration.file_notfile": "« %s » n'est pas un fichier.", "error.colorconfig_remove_old": "L'ancien fichier de configuration associant les profils aux écrans n'a pu être supprimé : %s", "error.copy_failed": "Le fichier « %s » n'a pas pu être copié vers « %s ».", "error.deletion": "Une erreur s'est produite pendant le déplacement des fichiers vers la %s. Certains fichiers peuvent ne pas avoir été supprimés.", "error.dir_creation": "Le répertoire « %s » n'a pas pu être créé. Il y a peut-être des restrictions d'accès. Veuillez autoriser l'accès en écriture ou sélectionner un répertoire différent.", "error.dir_notdir": "Le répertoire « %s » n'a pas pu être créé, car un autre objet du même nom existe déjà. Veuillez sélectionner un autre répertoire.", "error.file.create": "Le fichier « %s » n'a pu être créé.", "error.file.open": "Le fichier « %s » n'a pas pu être ouvert.", "error.file_type_unsupported": "Type de fichier non supporté.", "error.generic": "Une erreur interne est survenue.\n\nCode erreur : %s\nMessage d'erreur : %s", "error.measurement.file_invalid": "Le fichier de mesure « %s » est invalide.", "error.measurement.file_missing": "Le fichier de mesure « %s » est manquant.", "error.measurement.file_not_created": "Aucun fichier de mesure n'a été créé.", "error.measurement.file_notfile": "« %s » n'est pas un fichier.", "error.measurement.missing_spectral": "Le fichier de mesure ne contient pas de valeurs spectrales.", "error.measurement.one_colorimeter": "Une mesure de colorimètre exactement est nécessaire.", "error.measurement.one_reference": "Une mesure de référence du spectromètre exactement est nécessaire.", "error.no_displays_detected": "Aucun périphérique d'affichage n'a pu être détecté.", "error.profile.file_missing": "Le profil « %s » est manquant.", "error.profile.file_not_created": "Aucun profil n'a été créé.", "error.profile.file_notfile": "« %s » n'est pas un fichier.", "error.source_dest_same": "Les fichiers source et cible sont les mêmes.", "error.testchart.creation_failed": "Le fichier de grille de test « %s » n'a pas pu être créé. Peut-être y a-t-il des restrictions d'accès, ou bien le fichier source n'existe pas.", "error.testchart.invalid": "Le fichier de grille de test « %s » est invalide.", "error.testchart.missing": "Le fichier de grille de test « %s » est manquant.", "error.testchart.missing_fields": "Le fichier de grille de test « %s » ne contient pas les champs requis : %s", "error.testchart.read": "Le fichier de grille de test « %s » n'a pas pu être lu.", "error.tmp_creation": "Il n'a pas été possible de créer un répertoire de travail temporaire.", "error.trashcan_unavailable": "La %s n'est pas disponible. Aucun fichier n'a été supprimé.", "errors.none_found": "Aucune erreur trouvée.", "export": "Exporter...", "extra_args": "Définir des arguments de ligne de commande supplémentaires...", "failure": "... échec !", "file.invalid": "Fichier invalide.", "file.missing": "Le fichier « %s » n'existe pas.", "file.notfile": "« %s » n'est pas un fichier.", "file.select": "Sélectionnez un fichier", "filetype.any": "Tout type de fichier", "filetype.cal": "Fichiers de calibrages (*.cal)", "filetype.cal_icc": "Fichiers de calibrages et de profils (*.cal;*.icc;*.icm)", "filetype.ccmx": "Matrices de correction (*.ccmx;*.ccss)", "filetype.html": "Fichiers HTML (*.html;*.htm)", "filetype.icc": "Fichiers de profils (*.icc;*.icm)", "filetype.icc_mpp": "Fichiers de profils (*.icc;*.icm;*.mpp)", "filetype.icc_ti1_ti3": "Fichiers de grilles de tests (*.icc;*.icm;*.ti1;*.ti3)", "filetype.icc_ti3": "Fichiers de mesures (*.icc;*.icm;*.ti3)", "filetype.log": "Fichiers journaux (*.log)", "filetype.png": "Portable Network Graphics (*.png)", "filetype.tif": "Tagged Image File (*.tif)", "filetype.ti1": "Fichiers de grilles de tests (*.ti1)", "filetype.ti1_ti3_txt": "Fichiers de grilles de tests (*.ti1), fichiers de mesures (*.ti3;*.txt)", "filetype.ti3": "Fichiers de mesures (*.icc;*.icm;*.ti3)", "filetype.txt": "Corrections_du_peripherique.txt", "filetype.vrml": "Fichiers VRML (*.wrl)", "finish": "Finir", "gamap.default_intent": "Intention de rendu par défaut pour le profil du périphérique d'affichage", "gamap.intents.a": "Colorimétrie absolue", "gamap.intents.aa": "Apparence absolue", "gamap.intents.aw": "Colorimétrie absolue avec échantillonnage du point blanc", "gamap.intents.la": "Apparence correspondant à la luminance", "gamap.intents.ms": "Préserver la saturation", "gamap.intents.p": "Perceptuel", "gamap.intents.pa": "Apparence perceptuelle", "gamap.intents.r": "Colorimétrie relative", "gamap.intents.s": "Saturation", "gamap.out_viewcond": "Conditions de visualisation cibles", "gamap.perceptual": "Appliquer la correspondance de l'espace de couleurs à la table perceptuelle", "gamap.profile": "Profil source", "gamap.saturation": "Appliquer la correspondance de l'espace de couleurs à la table de saturation", "gamap.src_viewcond": "Conditions de visualisation sources", "gamap.viewconds.cx": "Transparents sur une table lumineuse", "gamap.viewconds.jd": "Projecteur en environnement obscur", "gamap.viewconds.jm": "Projecteur en environnement sombre", "gamap.viewconds.mb": "Moniteur en environnement de travail lumineux", "gamap.viewconds.md": "Moniteur en environnement de travail assombri", "gamap.viewconds.mt": "Moniteur en environnement de travail type", "gamap.viewconds.ob": "Scène originale - Extérieur lumineux", "gamap.viewconds.pcd": "CD photo - scène originale en extérieur", "gamap.viewconds.pe": "Environnement de contrôle d'impression", "gamap.viewconds.pp": "Impression pratique réfléchissante", "gamapframe.title": "Options avancées de correspondance de l'espace de couleurs", "gamut": "Gamut", "gamut.coverage": "Étendue du gamut", "gamut.view.create": "Génération des vues du gamut...", "gamut.volume": "Volume du gamut", "gamut_plot.tooltip": "Cliquez-tirez la souris à l'intérieur du graphique pour déplacer la zone affichée, ou zoomez avec la molette de la souris et les touches +/-. Double-cliquer réinitialise la zone affichée.", "glossy": "Brillant", "go_to_website": "Aller au site Internet", "grayscale": "échelle de gris", "green": "Vert", "hdmi": "HDMI", "help_support": "Aide et support...", "hue": "Teinte", "if_available": "si disponible", "illumination": "Illumination", "in": "Dans", "infoframe.default_text": "", "infoframe.title": "Info", "infoframe.toggle": "Afficher / masquer la fenêtre d'information", "initial": "Initial", "initializing_gui": "Initialisation de l'interface graphique utilisateur/trice...", "install_display_profile": "Installer le profil du périphérique d'affichage...", "instrument": "Instrument / port", "instrument.calibrate": "Placez l'instrument sur une surface sombre, mate ou sur son support de calibrage et appuyez sur Valider pour calibrer l'instrument.", "instrument.calibrate.colormunki": "Réglez le capteur ColorMunki sur la position calibrage et appuyez sur OK pour calibrer l'instrument.", "instrument.calibrating": "Calibrage de l'instrument...", "instrument.initializing": "Connexion à l'instrument...", "instrument.measure_ambient": "Si votre instrument requiert une coiffe spéciale pour mesurer la lumière ambiante, veuillez l'attacher. Pour mesurer la lumière ambiante, placez l'instrument vers le haut, à côté de l'écran, ou si vous voulez mesurer une cabine de visionnage, placez une carte grise sans métamérisme à l'intérieur de la cabine et pointez l'instrument vers elle. Des instructions complémentaires sur la façon de mesurer la lumière ambiante peuvent être disponibles dans la documentation de votre instrument. Appuyez sur Valider pour commencer la mesure.", "instrument.place_on_screen": "1. Cliquez sur Valider. Après 1 à 3 secondes, la fenêtre de mesure va apparaître.\n2. Placez l'instrument sur la fenêtre de mesure.\n3. Appuyez sur Échap, Q ou Ctrl+C pour abandonner, ou sur toute autre touche pour commencer la mesure.", "instrument.reposition_sensor": "La mesure a échoué car le capteur de l'instrument est dans la mauvaise position. Veuillez corriger la position du capteur, puis cliquer sur OK pour continuer.", "internal": "Interne", "invert_selection": "Inverser la sélection", "laptop.icc": "Ordinateur portable", "license": "Licence", "license_info": "Sous licence GPL", "linear": "linéaire", "locale.set": "Réglage local : %s", "locate_spyder2_setup": "Veuillez indiquer l'emplacement du fichier « Spyder2express_2.3.6_Setup.exe » (télécharger: http://support.datacolor.com/index.php?/Knowledgebase/List/Index/88/windows)", "locate_spyder2_setup_mac": "Dans le dialogue de fichier suivant, veuillez sélectionner l'installateur du logiciel Spyder 2, ou si le logiciel a déjà été installé, localisez le fichier Spyder.lib (vous devrez utiliser la recherche et Ctrl-cliquer sur l'application Spyder2, qui est habituellement située sous « Applications/Spyder2  », et sélectionner « Show package Contents » dans le menu contextuel, puis copier le fichier hors du répertoire « Contents/Mac OS Classic » pour pouvoir le sélectionner).", "locate_spyder2_setup_win": "Dans le dialogue de fichier suivant, veuillez sélectionner l'installateur du logiciel Spyder 2, ou si le logiciel a déjà été installé, localisez le fichier CVSpyder.dll (qui est habituellement situé dans « Program Files\\ColorVision\\Spyder2 »).", "log.autoshow": "Afficher la fenêtre du journal automatiquement", "lut_access": "Accès à la table de correspondance", "madVR.icc": "madVR", "magenta": "Magenta", "matrix": "Matrice", "matte": "Mat", "max": "Max", "maximal": "Maximal", "measure": "Mesurer", "measure.darken_background": "Arrière-plan noir", "measure.darken_background.warning": "Attention : si „arrière-plan noir“ est choisi, il couvrira tout l'écran et vous ne pourrez pas voir la fenêtre d'ajustement du périphérique d'affichage ! Si vous avez un réglage multi-écrans, déplacez la fenêtre d'ajustement du périphérique d'affichage vers un autre écran avant de commencer la mesure, ou utilisez le clavier (pour interrompre la mesure, pressez Q. Si la mesure est déjà en cours, attendez un instant puis pressez Q à nouveau).", "measure.testchart": "Grille de test de mesure", "measureframe.center": "Centrer", "measureframe.info": "Déplacez la fenêtre de mesure à l'endroit désiré de l'écran et redimensionnez-la si besoin. Pratiquement toute la surface de la fenêtre sera utilisée pour afficher les échantillons à mesurer, le cercle n'est là que pour vous servir de guide pour placer votre périphérique de mesure.\nPlacez le périphérique de mesure sur la fenêtre et cliquez sur « Commencer la mesure ». Pour annuler et revenir à la fenêtre principale, fermez la fenêtre de mesure.", "measureframe.infobutton": "Info", "measureframe.measurebutton": "Commencer la mesure", "measureframe.title": "Zone de mesure", "measureframe.zoomin": "Agrandir", "measureframe.zoommax": "Maximiser / restaurer", "measureframe.zoomnormal": "Taille normale", "measureframe.zoomout": "Réduire", "measurement.play_sound": "Effets sonores au cours des mesures", "measurement.set_save_path": "Enregistrer le fichier de mesure dans le répertoire suivant :", "measurement.untethered": "Mesure autonome", "measurement_file.check_sanity": "Vérifier le fichier de mesure...", "measurement_file.check_sanity.auto": "Vérifier automatiquement les mesures", "measurement_file.check_sanity.auto.warning": "Veuillez noter que la vérification automatique des mesures est une fonctionnalité expérimentale. À utiliser à vos propres risques.", "measurement_file.choose": "Veuillez choisir un fichier de mesure", "measurement_file.choose.colorimeter": "Veuillez choisir un fichier de mesure du colorimètre", "measurement_file.choose.reference": "Veuillez choisir un fichier de mesure du spectromètre", "measurement_mode": "Mode", "measurement_mode.adaptive": "Adaptatif", "measurement_mode.factory": "Calibrage d'usine", "measurement_mode.generic": "Générique", "measurement_mode.highres": "Haute résolution", "measurement_mode.lcd": "LCD (générique)", "measurement_mode.lcd.ccfl": "LCD (CCFL)", "measurement_mode.lcd.ccfl.2": "LCD (CCFL type 2)", "measurement_mode.lcd.white_led": "LCD (LED blanc)", "measurement_mode.lcd.wide_gamut.ccfl": "LCD à gamut étendu (CCFL)", "measurement_mode.lcd.wide_gamut.rgb_led": "LCD à gamut étendu (LED RVB)", "measurement_mode.raw": "Brut", "measurement_mode.refresh": "À rafraîchissement (générique)", "measurements.complete": "Mesures effectuées ! Voulez-vous ouvrir le répertoire contenant les fichiers de mesure ?", "measuring.characterization": "Mesure des échantillons de couleurs pour la caractérisation...", "menu.about": "À propos...", "menu.file": "Fichier", "menu.help": "?", "menu.language": "Langue", "menu.options": "Options", "menu.tools": "Outils", "menuitem.quit": "Quitter", "menuitem.set_argyll_bin": "Localiser les exécutables Argyll CMS...", "min": "Min", "minimal": "Minimal", "native": "Natif", "no": "Non", "no_settings": "Le fichier ne contient pas de réglages.", "office_web.icc": "Bureautique & Internet", "offset": "Décalage", "ok": "Valider", "or": "ou", "osd": "OSD", "other": "Autre", "out": "Hors", "overwrite": "Écraser", "panel.surface": "Surface du panneau", "panel.type": "Type de panneau", "patches": "Échantillons", "pause": "Pause", "photo.icc": "Photographie", "please_wait": "Veuillez patienter...", "prepress.icc": "Pré-presse", "preset": "Pré-réglage", "preview": "Aperçu", "profile": "Profil", "profile.advanced_gamap": "Options avancées...", "profile.choose": "Veuillez choisir un profil :", "profile.confirm_regeneration": "Voulez-vous régénérer le profil ?", "profile.created": "Le profil a été créé avec succès.", "profile.current": "Profil courant", "profile.do_not_install": "Ne pas installer le profil", "profile.info": "Information du profil", "profile.info.show": "Afficher l'information du profil", "profile.install": "Installer le profil", "profile.install.error": "Le profil n'a pas pu être installé/activé.", "profile.install.osx_manual_select": "Le profil a été installé. Veuillez l'activer dans le panneau « Écrans » des préférences du système.", "profile.install.success": "Le profil a été installé et activé.", "profile.install.virtual.unsupported": "Les profils ne peuvent être installés pour le périphérique d'affichage virtuel.", "profile.install_local_system": "Installer le profil sur l'ensemble du système", "profile.install_network": "Installer le profil sur l'ensemble du réseau", "profile.install_user": "Installer le profil pour l'utilisateur courant uniquement", "profile.invalid": "Profil invalide.", "profile.load_error": "Le profil d'affichage n'a pu être chargé.", "profile.load_on_login": "Charger le calibrage à la connexion", "profile.load_on_login.handled_by_os": "Laisser le système d'exploitation traiter le chargement du calibrage (faible qualité)", "profile.name": "Nom du profil", "profile.name.create": "Générer le nom du profil", "profile.name.placeholders": "Vous pouvez utiliser les paramètres de substitution suivants dans le nom du profil :\n\n%a Nom du jour de la semaine abrégé\n%A Nom complet du jour de la semaine\n%b Nom du mois abrégé\n%B Nom complet du mois\n%d Jour du mois\n%H Heure (sur 24 heures)\n%I Heure (sur 12 heures)\n%j Jour de l'année\n%m Mois\n%M Minute\n%p AM/PM\n%S Secondes\n%U Semaine (avec dimanche comme premier jour de la semaine)\n%w Jour de la semaine (dimanche correspondant à 0)\n%W Semaine (avec lundi comme premier jour de la semaine)\n%y Année sans le siècle\n%Y Année avec le siècle", "profile.no_embedded_ti3": "Le profil ne contient pas de donnée de mesure compatible avec Argyll.", "profile.no_vcgt": "Le profil ne contient pas de courbes d'une table de correspondance", "profile.quality": "Qualité du profil", "profile.quality.b2a.low": "Table B2A de basse qualité", "profile.quality.b2a.low.info": "Choisissez cette option si le profil doit être utilisé avec un mappage de gamut A2B inverse pour créer une liaison entre périphériques ou une table de correspondance 3D", "*profile.required_tags_missing": "The profile is missing required tags: %s", "profile.self_check": "Auto-contrôle du profil ΔE*76", "profile.self_check.avg" : "moyenne", "profile.self_check.max" : "maximum", "profile.self_check.rms" : "RMS", "profile.set_save_path": "Sélectionner le chemin d'enregistrement...", "profile.settings": "Réglages de la caractérisation", "profile.share": "Charger le profil...", "profile.share.avg_dE_too_high": "Le profil produit un delta E trop élevé (actuel = %s, seuil = %s).", "profile.share.enter_info": "Vous pouvez partager votre profil avec les autres utilisateurs via le service OpenSUSE « ICC Profile Taxi ».\n\nVeuillez fournir une description significative et entrer les propriétés du périphérique d'affichage ci-dessous. Consultez les réglages du périphérique d'affichage depuis l'OSD de votre périphérique d'affichage et n'entrez que les réglages applicables à votre périphérique d'affichage qui ont changé par rapport aux valeurs par défaut.\nExemple : pour la plupart des périphériques d'affichage, il s'agit du nom de la présélection choisie, luminosité, contraste, température des couleurs et/ou niveaux RVB du point blanc, ainsi que le gamma. Sur les portables et notebooks, généralement uniquement la luminosité. Si vous avez modifié des réglages supplémentaires au cours du calibrage de votre périphérique d'affichage, entrez-les également si possible.", "profile.share.meta_missing": "Le profil ne contient pas la méta-information nécessaire.", "profile.share.success": "Profil chargé.", "profile.testchart_recommendation": "Pour une qualité de profil élevée, une grille de test contenant plus d'échantillons est recommandée, mais celle-ci prendra plus de temps à mesurer. Voulez-vous utiliser la grille de test recommandée ?", "profile.type": "Type de profil", "profile.type.gamma_matrix": "Gamma + matrice", "profile.type.lut.lab": "Table L*a*b*", "profile.type.lut.xyz": "Table XYZ", "profile.type.lut_matrix.xyz": "Table XYZ + matrice", "profile.type.lut_rg_swapped_matrix.xyz": "Table XYZ + matrice d'inversion", "profile.type.shaper_matrix": "Courbes + matrice", "profile.type.single_gamma_matrix": "Gamma unique + matrice", "profile.type.single_shaper_matrix": "Courbe unique + matrice", "profile.unsupported": "Type de profil (%s) ou espace de couleurs (%s) non supporté.", "profile.update": "Mettre à jour le profil", "*measurement_report.update": "Update measurement report...", "*measurement_report": "Measurement report...", "measurement_report_choose_chart": "Veuillez choisir la grille de test à mesurer :", "measurement_report_choose_chart_or_reference": "Veuillez choisir une grille de test ou une référence :", "measurement_report_choose_profile": "Veuillez choisir le profil à valider :", "profiling.complete": "Caractérisation achevée.", "profiling.incomplete": "La caractérisation n'a pas été achevée.", "projector": "Projecteur", "projector_mode_unavailable": "Le mode Projecteur n'est disponible qu'avec Argyll CMS 1.1.0 Bêta ou ultérieur.", "quality.ultra.warning": "La qualité Ultra ne devrait pratiquement jamais être utilisée, excepté pour prouver qu'elle ne devrait pratiquement jamais être utilisée (durée de traitement longue). Préférez plutôt une qualité moyenne ou élevée.", "readme": "Lisez-moi", "ready": "Prêt.", "red": "Rouge", "reference": "Référence", "rendering_intent": "Intention de rendu", "report.calibrated": "Établir un rapport sur le périphérique d'affichage calibré", "report.uncalibrated": "Établir un rapport sur le périphérique d'affichage non calibré", "report.uniformity": "Mesurer l'uniformité du périphérique d'affichage...", "resources.notfound.error": "Erreur fatale - un fichier requis n'a pas été trouvé :", "resources.notfound.warning": "Attention - des fichiers requis n'ont pas été trouvés :", "restore_defaults": "Restaurer les valeurs par défaut", "rgb.trc": "Fonction de transfert RVB", "rgb.trc.averaged": "Fonction de transfert RVB moyen", "saturation": "Saturation", "save": "Enregistrer", "save_as": "Enregistrer sous...", "select_all": "Sélectionner tout", "settings.additional": "Réglages supplémentaires", "settings.basic": "Réglages basiques", "settings.new": "", "settings_loaded": "Les courbes de la table de correspondance et les réglages de calibrage suivants ont été chargés : %s. Les autres options de calibrage ont été restaurés à leurs valeurs par défaut et les options de caractérisation n'ont pas été modifiées.", "settings_loaded.all": "Les réglages et les courbes de la table de correspondance ont été chargés.", "settings_loaded.cal": "Le profil ne contenait que des réglages de calibrage. Les autres options n'ont pas été modifiées. Aucune courbe de calibrage n'a été trouvée.", "settings_loaded.cal_and_lut": "Le profil ne contenait que des réglages de calibrage. Les autres options n'ont pas été modifiées et les courbes de calibrage ont été chargées.", "settings_loaded.cal_and_profile": "Les réglages ont été chargés. Aucune courbe d'une table de correspondance n'a été trouvée.", "settings_loaded.profile": "Le profil ne contenait que des réglages de caractérisation. Les autres options n'ont pas été modifiées. Aucune courbe d'une table de correspondance n'a été trouvée.", "settings_loaded.profile_and_lut": "Le profil ne contenait que des réglages de caractérisation. Les autres options n'ont pas été modifiées et les courbes de la table de correspondance ont été chargées.", "show_advanced_calibration_options": "Afficher les options de calibrage avancées", "softproof.icc": "Softproof", "spectral": "Spectral", "sRGB.icc": "sRGB", "startup": "Démarrage...", "success": "... opération effectuée.", "synthicc.create": "Créer un profil ICC synthétique...", "target": "Cible", "tc.I": "Grille cubique centrée de l'espace perceptuel", "tc.Q": "Distribution quasi-aléatoire du remplissage de l'espace perceptuel", "tc.R": "Distribution aléatoire dans l'espace perceptuel", "tc.adaption": "Adaptation", "tc.algo": "Distribution", "tc.angle": "Angle", "tc.fullspread": "Échantillons itératifs", "tc.gray": "Échantillons neutres", "tc.i": "Grille cubique centrée de l'espace du périphérique", "tc.limit.sphere": "Limiter les sondages à la sphère", "tc.limit.sphere_radius": "Rayon", "tc.multidim": "Multidimensionnel", "tc.multidim.patches": "étapes = %s échantillons (%s neutres)", "tc.neutral_axis_emphasis": "Accentuation de l'axe neutre", "tc.ofp": "Échantillonnage optimisé du point le plus éloigné", "tc.patch": "Échantillon", "tc.patches.gray": "neutre", "tc.patches.selected": "sélectionné(s) ", "tc.patches.total": "Nombre total d'échantillons ", "tc.precond": "Préconditionnement du profil", "tc.preview.create": "Création de l'aperçu en cours, veuillez patienter...", "tc.q": "Distribution quasi-aléatoire du remplissage de l'espace du périphérique", "tc.r": "Distribution aléatoire dans l'espace du périphérique", "tc.single": "Échantillons de canal unique", "tc.single.perchannel": "par canal", "tc.t": "Échantillonnage incrémentiel du point éloigné", "tc.vrml": "Créer un fichier de diagnostic VRML", "tc.vrml.black_offset": "Décalage du noir RGB (L*)", "tc.vrml.device": "Emplacements des périphériques", "tc.vrml.lab": "Emplacements des Lab", "tc.vrml.save_as": "Enregistrer le(s) fichier(s) sous...", "tc.vrml.use_D50": "Blanc RGB neutre", "tc.white": "Échantillons de blancs", "tempdir_should_still_contain_files": "Les fichiers créés devraient être encore dans le répertoire temporaire “%s”.", "*testchart.add_saturation_sweeps": "Add saturation sweeps", "*testchart.add_ti3_patches": "Add reference patches...", "*testchart.change_patch_order": "Change patch order", "testchart.confirm_select": "Fichier enregistré. Voulez-vous sélectionner cette grille de test ?", "testchart.create": "Créer une grille de test", "testchart.discard": "Supprimer", "testchart.dont_select": "Ne pas sélectionner", "testchart.edit": "Éditer la grille de test...", "testchart.export.repeat_patch": "Répéter chaque échantillon :", "testchart.file": "Fichier de grille de test", "testchart.info": "Nombre d'échantillons de la grille de test sélectionnée", "testchart.invalid": "Le fichier de grille de test est invalide.", "testchart.read": "Lecture de la grille de test...", "testchart.save": "Enregistrer", "testchart.save_as": "Enregistrer sous...", "testchart.save_or_discard": "La grille de test n'a pas été enregistrée.", "testchart.select": "Sélectionner", "testchart.set": "Sélectionner un fichier de grille de test", "*testchart.sort_by_HSV": "Sort by HSV", "testchart.sort_by_L": "Trier par L*", "testchart.sort_by_RGB": "Trier par RGB", "testchart.sort_by_RGB_sum": "Trier par somme de RGB", "testchart.sort_RGB_gray_to_top": "Trier le gris RGB vers le haut", "testchart.sort_RGB_white_to_top": "Trier le blanc RGB vers le haut", "testchart.optimize_for_untethered_auto_mode": "Optimiser pour Autonome en mode automatique", "tone_values": "valeurs de teinte", "translations": "Traductions ", "trashcan.linux": "corbeille", "trashcan.mac": "corbeille", "trashcan.windows": "corbeille", "trc": "Courbe des couleurs", "trc.gamma": "Gamma", "trc.lstar": "L*", "trc.rec709": "Rec. 709", "trc.rec1886": "Rec. 1886", "trc.should_use_viewcond_adjust": "Si vous utilisez les courbes SMPTE 240M, Rec. 709 ou sRVB, vous devriez recourir à un ajustement des niveaux de votre lumière ambiante afin d'obtenir des résultats corrects. Pour cela, cochez la case à côté de « Niveau de luminosité ambiante » et saisissez une valeur en Lux. Vous pouvez éventuellement mesurer aussi la luminosité ambiante au cours du calibrage, si votre instrument le permet.", "trc.smpte240m": "SMPTE 240M", "trc.srgb": "sRVB", "trc.type.absolute": "Absolu", "trc.type.relative": "Relatif", "type": "Type", "uninstall_display_profile": "Désinstallation du profil du périphérique d'affichage...", "unknown": "inconnu", "unnamed": "Sans nom", "Untethered": "Autonome", "update_check": "Vérifier la mise à jour de l'application...", "update_check.fail": "Échec de la vérification de la mise à jour de l'application :", "update_check.fail.version": "La version du fichier distant du serveur %s n'a pu être analysée.", "update_check.new_version": "Une mise à jour est disponible : %s", "update_check.onstartup": "Vérifier la mise à jour de l'application au démarrage", "update_check.uptodate": "%s est à jour.", "upload": "Chargement", "use_separate_lut_access": "Utiliser un accès séparé à la table du gamma de la carte vidéo", "vcgt": "Courbes de calibrage", "verify.ti1": "Grille de test de vérification du profil", "verify_extended.ti1": "Grille de test étendue de vérification du profil", "vga": "VGA", "video.icc": "Vidéo", "warning": "Attention", "warning.already_exists": "Le fichier « %s » existe déjà à l'emplacement choisi et sera écrasé. Voulez-vous continuer ?", "warning.autostart_system": "Le répertoire d'autodémarrage système n'a pu être déterminé.", "warning.autostart_user": "Le répertoire d'autodémarrage spécifique à l'utilisateur/trice n'a pu être déterminé.", "warning.copy_failed_continue": "Le fichier « %s » ne peut être copié sous « %s ». Poursuite...", "warning.discard_changes": "Voulez-vous réellement annuler les modifications des réglages actuels ?", "warning.no_comports_detected": "Aucun instrument n'a pu être détecté.", "warning.suspicious_delta_e": "Attention : des mesures suspectes ont été trouvées. Veuillez noter que ce contrôle suppose un périphérique d'affichage de type sRGB. Si votre périphérique d'affichage diffère de ce pré-supposé (p. ex. s'il a un très grand gamut ou une réponse de ton trop éloignée de sRGB), alors les erreurs trouvées ne sont probablement pas significatives.\n\nUn ou plusieurs de ces critères ont été vérifiés :\n\n• Échantillons consécutifs avec différents nombres RGB, mais ΔE*00 étrangement bas des mesures entre eux.\n• Gris RGB avec nombres RGB croissants par rapport à l'échantillon précédent, mais luminosité décroissante (L*).\n• Gris RGB avec nombres RGB décroissants par rapport à l'échantillon précédent, mais luminosité croissante (L*).\n• ΔE*00 et ΔL*00 ou ΔH*00 ou ΔC*00 anormalement élevés des mesures par rapport à l'équivalent sRGB des nombres RGB.\n\nCeci pourrait signifier des erreurs de mesure. Les valeurs considérées comme problématiques (ce qui ne l'est pas forcément !) sont surlignées en rouge. Contrôlez les mesures soigneusement et marquez celles que vous voulez accepter. Vous pouvez également éditer les valeurs RGB et XYZ.", "warning.suspicious_delta_e.info": "Explication des colonnes Δ :\n\nΔE*00 XYZ A/B : ΔE*00 des valeurs mesurées par rapport aux valeurs mesurées de l'échantillon précédent. Si cette valeur est manquante, elle n'était pas un facteur pendant la vérification. Si elle est présente, alors elle est supposée trop basse.\n\n0.5 ΔE*00 RGB A/B : ΔE*00 de l'équivalent sRGB des nombres RGB par rapport à l'équivalent sRGB des nombres RGB de l'échantillon précédent (avec un facteur de 0,5). Si cette valeur est présente, elle représente la valeur (minimale) de comparaison pendant la vérification pour ΔE*00 XYZ A/B considéré trop bas. Elle sert d'orientation très grossière.\n\nΔE*00 RGB-XYZ : ΔE*00 des valeurs mesurées par rapport à l'équivalent sRGB des nombres RGB.\nΔL*00 RGB-XYZ : ΔL*00 des valeurs mesurées par rapport à l'équivalent sRGB des nombres RGB.\nΔC*00 RGB-XYZ : ΔC*00 des valeurs mesurées par rapport à l'équivalent sRGB des nombres RGB.\nΔH*00 RGB-XYZ : ΔH*00 des valeurs mesurées par rapport à l'équivalent sRGB des nombres RGB.", "webserver.waiting": "Serveur web en attente à", "white": "Blanc", "whitepoint": "Point blanc", "whitepoint.colortemp": "Température", "whitepoint.colortemp.locus.blackbody": "Corps noir", "whitepoint.colortemp.locus.curve": "Courbe de température des couleurs", "whitepoint.colortemp.locus.daylight": "Lumière du jour", "whitepoint.set": "Voulez-vous également régler le point blanc à la valeur mesurée ?", "*whitepoint.simulate": "Simulate whitepoint", "*whitepoint.simulate.relative": "Relative to target profile whitepoint", "whitepoint.xy": "Coordonnées chromatiques", "window.title": "dispcalGUI", "windows.version.unsupported": "Cette version de Windows n'est pas supportée.", "windows_only": "Windows uniquement", "working_dir": "Répertoire de travail :", "yellow": "Jaune", "yes": "Oui", } dispcalGUI-1.7.1.6/dispcalGUI/lang/it.json000644 000765 000000 00000136201 12266603364 020045 0ustar00svpwheel000000 000000 { "*": "Note to translators: Keys which are not yet translated are marked with a leading asterisk (*) and are indented with two tabs instead of one. Please remove the asterisk when translated.", "!author": "Tommaso Schiavinotto", "!language": "Italiano", "!language_name": "ITALIAN", "apply": "Applicare", "*3dlut.bitdepth.input": "3D LUT input bitdepth", "*3dlut.bitdepth.output": "3D LUT output bitdepth", "*3dlut.create": "Create 3D LUT...", "*3dlut.encoding.output.warning.madvr": "Warning: This output encoding is not recommended and will cause clipping if madVR is not set up to output “TV levels (16-235)” under “Devices” → “%s” → “Properties”. Use at own risk!", "*3dlut.format": "3D LUT file format", "*3dlut.frame.title": "Create 3D LUT", "*3dlut.input.profile": "Source profile", "*3dlut.madVR.enable": "Enable madVR 3D LUT", "*output.profile": "Target profile", "*apply_cal": "Apply calibration (vcgt)", "*apply_cal.error": "Calibration could not be applied.", "*3dlut.size": "3D LUT size", "*[rgb]TRC": "Tone response curves", "aborted": "...annullato.", "*aborting": "Aborting, please wait (this may take a few seconds)...", "*adaptive_mode_unavailable": "Adaptive mode is only available with Argyll CMS 1.1.0 RC3 or newer.", "*allow_skip_sensor_cal": "Allow skipping of spectrometer self-calibration", "*ambient.measure": "Measure ambient", "*ambient.set": "Do you also want to set the ambient light level to the measured value?", "app.confirm_restore_defaults": "Vuoi davvero perdere le tue modifiche e usare le impostazioni predefinite?", "app.restart_request": "Riavviare l'applicazione, prego.", "*argyll.debug.warning1": "Please only use this option if you actually need debugging information (e.g. for troubleshooting Argyll CMS functionality)! It is normally only useful for software developers to aid in problem diagnosis and resolution. Are you sure you want to enable debugging output?", "*argyll.debug.warning2": "Please remember to disable debugging output for normal operation of the software.", "argyll.dir": "Directory con gli eseguibili di Argyll CMS:", "argyll.dir.invalid": "Gli eseguibili Argyll CMS non sono stati trovati!\nSeleziona la directory che contiene gli eseguibili (prefisso o suffisso forse “argyll-” / “-argyll”): %s", "*argyll.error.detail": "Detailed Argyll CMS error message:", "*argyll.instrument.driver.missing": "The Argyll CMS driver for your measurement device seems not to be installed or installed incorrectly. Please check if your measurement device is shown in Windows' device manager under „Argyll LibUSB-1.0A devices“ and (re-)install the driver if necessary. Please read the documentation for installation instructions.", "*argyll.util.not_found": "Argyll CMS “%s” executable not found!", "as_measured": "Nativo", "*auth.failed": "Authentification failed.", "*auto": "Auto", "*autostart_remove_old": "Removing old autostart entry", "*backlight": "Backlight", "*black": "Black", "*black_point": "Black point", "*black_point_compensation": "Black point compensation", "*black_point_compensation.info": "Black point compensation effectively prevents black crush, but reduces the accuracy of color conversion.", "*blacklevel": "Black level", "*blue": "Blue", "*brightness": "Brightness", "browse": "Selezionare...", "*bug_report": "Report a bug...", "button.calibrate": "Calibra solamente", "button.calibrate_and_profile": "Calibra && Crea profilo", "button.profile": "Crea solamente il profilo", "cal_extraction_failed": "Impossibile estrare i dati di calibrazione dal profilo.", "*calibration": "Calibration", "calibration.ambient_viewcond_adjust": "Livello della luce ambientale", "calibration.ambient_viewcond_adjust.info": "Per eseguire una correzione sulle condizioni di visualizzazione quando vengono calcolate le curve di calibrazione, spunta la casella ed inserisci il livello della luce ambientale. Se lo strumento lo permette, è possibile misurare la luce ambientale durante la calibrazione.", "calibration.black_luminance": "Livello del nero", "calibration.black_output_offset": "Compensazione per il livello di uscita del nero", "calibration.black_point_correction": "Correzione del punto di nero", "calibration.black_point_correction_choice": "La correzione del punto di nero può essere disabilitata, per ottimizzare il livello di nero ed il rapporto di contrasto (raccomandato per la maggior parte dei monitor LCD), può essere invece abilitata per fare in modo che il nero abbia la stessa tinta del punto di bianco (raccomandato per la maggior parte dei monitor CRT). Imposta la tua preferenza sulla correzione del punto di nero:", "calibration.black_point_correction_choice_dialogtitle": "Correzione del punto di nero", "calibration.black_point_rate": "Rapporto", "*calibration.check_all": "Check settings", "calibration.complete": "Calibrazione completa!", "*calibration.create_fast_matrix_shaper": "Create matrix profile", "*calibration.create_fast_matrix_shaper_choice": "Do you want to create a fast matrix shaper profile from calibration measurements or just calibrate?", "*calibration.do_not_use_video_lut": "Do not use video card gamma table to apply calibration", "*calibration.do_not_use_video_lut.warning": "Do you really want to change the recommended setting?", "calibration.file": "Impostazioni", "calibration.file.invalid": "Il file delle impostazioni scelto non è valido.", "calibration.file.none": "", "calibration.incomplete": "La calibrazione non è stata completata.", "calibration.interactive_display_adjustment": "Correzione interattiva dello schermo", "*calibration.interactive_display_adjustment.black_level.crt": "Select “Start measurement” and adjust your display's brightness and/or RGB offset controls to match the desired level.", "*calibration.interactive_display_adjustment.black_point.crt": "Select “Start measurement” and adjust your display's RGB offset controls to match the desired black point.", "*calibration.interactive_display_adjustment.check_all": "Select “Start measurement” to check on the overall settings.", "*calibration.interactive_display_adjustment.generic_hint.plural": "A good match is obtained if all bars can be brought to the marked position in the center.", "*calibration.interactive_display_adjustment.generic_hint.singular": "A good match is obtained if the bar can be brought to the marked position in the center.", "*calibration.interactive_display_adjustment.start": "Start measurement", "*calibration.interactive_display_adjustment.stop": "Stop measurement", "*calibration.interactive_display_adjustment.white_level.crt": "Select “Start measurement” and adjust your display's contrast and/or RGB gain controls to match the desired level.", "*calibration.interactive_display_adjustment.white_level.lcd": "Select “Start measurement” and adjust your display's backlight/brightness control to match the desired level.", "*calibration.interactive_display_adjustment.white_point": "Select “Start measurement” and adjust your display's color temperature and/or RGB gain controls to match the desired white point.", "calibration.keep_black_point_correction": "Mantieni le impostazioni attuali", "calibration.load": "Caricamento delle impostazioni...", "calibration.load_error": "Impossibile leggere le curve calibrazione.", "calibration.load_from_cal": "Caricamento delle curve calibrazione dal file di calibrazione...", "calibration.load_from_cal_or_profile": "Caricamento delle curve calibrazione dal file di calibrazione o di profilo...", "calibration.load_from_display_profile": "Caricamento delle curve calibrazione dal profilo corrente dello schermo", "calibration.load_from_profile": "Caricamento delle curve di calibrazione dal profilo...", "calibration.load_success": "Lettura delle curve calibrazione completata con successo.", "calibration.loading": "Caricamento delle curve calibrazione da file...", "calibration.loading_from_display_profile": "Caricamento delle curve calibrazione dell'attuale profilo dello schermo in corso...", "calibration.luminance": "Livello di bianco", "*calibration.lut_viewer.title": "Curves", "calibration.preview": "Anteprima calibrazione", "calibration.quality": "Qualità calibrazione", "calibration.quality.high": "Alta", "calibration.quality.low": "Bassa", "calibration.quality.medium": "Media", "calibration.quality.ultra": "Ultra", "*calibration.quality.verylow": "Very low", "calibration.speed": "Velocità calibrazione", "calibration.speed.high": "Alta", "calibration.speed.low": "Bassa", "calibration.speed.medium": "Media", "calibration.speed.veryhigh": "Molto alta", "calibration.speed.verylow": "Molto bassa", "calibration.reset": "Ripristino curve calibrazione", "calibration.reset_error": "Le curve calibrazione non possono essere ripristinate.", "calibration.reset_success": "Le curve calibrazione sono state ripristinate con successo.", "calibration.resetting": "Ripristino delle curve calibrazione a lineari in corso...", "calibration.settings": "Impostazioni per la calibrazione", "*calibration.show_actual_lut": "Show actual calibration curves from video card gamma table", "*calibration.show_lut": "Show curves", "*calibration.start": "Continue on to calibration", "calibration.turn_off_black_point_correction": "Disabilita", "calibration.turn_on_black_point_correction": "Abilita", "calibration.update": "Aggiorna calibrazione", "*calibration.update_profile_choice": "Do you want to also update the calibration curves in the existing profile or just calibrate?", "*calibration.use_linear_instead": "Use linear calibration instead", "calibration.verify": "Verifica calibrazione", "calibration_profiling.complete": "Calibrazione e creazione profilo completati!", "*calibrationloader.description": "Sets ICC profiles and loads calibration curves for all configured display devices", "cancel": "Annulla", "*ccxx.ti1": "Testchart for colorimeter correction", "checking_lut_access": "Controllo dell'accesso per il calibrazione per il monitor %s...", "*centered": "Centered", "clear": "Pulire", "*color.custom": "Custom color", "*colorconfig_remove_old": "Removing old display configuration file", "*colorimeter_correction.create": "Create colorimeter correction...", "*colorimeter_correction.create.details": "Please check the fields below and change them when necessary. The description should also contain important details (e.g. specific display settings, non-default CIE observer or the like).", "*colorimeter_correction.create.failure": "Correction creation failed.", "*colorimeter_correction.create.info": "To create a colorimeter correction matrix (CCMX) or Calibration Spectral Sample (CCSS) file, you first need to measure the “Testchart for colorimeter correction” with a spectrometer, and in case you want to create a CCMX, also with the colorimeter.\nTo do this, choose “Measure testchart”. Afterwards, choose “Create colorimeter correction...” and select the measured file(s).", "*colorimeter_correction.create.success": "Correction successfully created.", "*colorimeter_correction.file.none": "None", "*colorimeter_correction.import": "Import colorimeter corrections from other display profiling software...", "*colorimeter_correction.import.auto_manual": "If you want to automatically import colorimeter corrections, you need to either already have installed the vendor software of your instrument, or insert its installation media, and then choose “Auto”. If you have a software installer which you haven't run yet, or want to select a file yourself, choose “Select file”.", "*colorimeter_correction.import.choose": "Please choose the colorimeter correction file to import:", "*colorimeter_correction.import.failure": "No colorimeter corrections could be imported.", "*colorimeter_correction.import.success": "Colorimeter corrections have been successfully imported from the following softwares:\n\n%s", "*colorimeter_correction.instrument_mismatch": "The selected colorimeter correction is not suitable for the selected instrument.", "*colorimeter_correction.upload": "Upload colorimeter correction...", "*colorimeter_correction.upload.confirm": "Do you want to upload the colorimeter correction to the online database (recommended)? Any uploaded files will be assumed to have been placed in the public domain, so that they can be used freely.", "*colorimeter_correction.upload.deny": "This colorimeter correction may not be uploaded.", "*colorimeter_correction.upload.exists": "The colorimeter correction already exists in the database.", "*colorimeter_correction.upload.failure": "The correction couldn't be entered into the online database.", "*colorimeter_correction.upload.success": "The correction was successfully uploaded to the online database.", "*colorimeter_correction.web_check": "Check online for colorimeter correction...", "*colorimeter_correction.web_check.choose": "The folowing colorimeter corrections for the selected display and instrument have been found:", "*colorimeter_correction.web_check.failure": "No colorimeter corrections for the selected display and instrument have been found.", "*colorimeter_correction_matrix_file": "Correction", "*colorimeter_correction_matrix_file.choose": "Choose colorimeter correction", "*colorspace": "Colorspace", "*colorspace.show_outline": "Show outline", "commandline": "Linea di comando:", "*comparison_profile": "Comparison profile", "comport_detected": "È stata rilevata una modifica nella configurazione dello strumento o della porta.", "*compression.gzip": "GZIP compression", "*computer.name": "Computername", "*connection.fail": "Connection error (%s)", "*connection.fail.http": "HTTP error %s", "continue": "Continua", "*contrast": "Contrast", "create_and_preview": "Crea && Mostra anteprima", "*create_ccss_or_ccmx": "Do you want to create a correction matrix for ordinary colorimeters (CCMX) or a calibration spectral sample for the i1 Display Pro and ColorMunki Display (CCSS)?", "create_profile": "Creazione del profilo dai dati di misurazione...", "*create_profile_from_edid": "Create profile from extended display identification data...", "*created": "Created", "*current": "Current", "custom": "Altro", "*cyan": "Cyan", "*d3-e4-s0-g9-m3-b3-f0-crossover.ti1": "Default testchart for matrix profiles", "*d3-e4-s0-g25-m3-b3-f0-crossover.ti1": "Extended testchart for matrix profiles", "*d3-e4-s0-g49-m3-b3-f0-crossover.ti1": "Large testchart for matrix profiles", "*d3-e4-s0-g97-m3-b3-f0-crossover.ti1": "Very large testchart for matrix profiles", "*d3-e4-s3-g3-m0-f0.ti1": "Default testchart for “gamma + matrix” profiles", "*d3-e4-s13-g37-m4-b4-f0.ti1": "Small testchart for LUT profiles", "*d3-e4-s17-g49-m5-b5-f0.ti1": "Default testchart for LUT profiles", "*d3-e4-s21-g61-m6-b6-f0.ti1": "Extended testchart for LUT profiles", "*d3-e4-s25-g73-m7-b7-f0.ti1": "Large testchart for LUT profiles", "*d3-e4-s29-g85-m8-b8-f0.ti1": "Very large testchart for LUT profiles", "*d3-e4-s29-g85-m0-f994-caRGB.ti1": "Very large testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s29-g85-m0-f994-ceRGBv2.ti1": "Very large testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s29-g85-m0-f994-cRec709_Gamma22.ti1": "Very large testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s29-g85-m0-f994-csRGB.ti1": "Very large testchart for LUT profiles, optimized for sRGB (D65)", "*d3-e4-s33-g97-m9-b9-f0.ti1": "XXL testchart for LUT profiles", "*d3-e4-s33-g97-m0-f1399-caRGB.ti1": "XXL testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s33-g97-m0-f1399-ceRGBv2.ti1": "XXL testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s33-g97-m0-f1399-cRec709_Gamma22.ti1": "XXL testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s33-g97-m0-f1399-csRGB.ti1": "XXL testchart for LUT profiles, optimized for sRGB (D65)", "*d3-e4-s37-g109-m10-b10-f0.ti1": "XXXL testchart for LUT profiles", "*d3-e4-s37-g109-m0-f1906-caRGB.ti1": "XXXL testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s37-g109-m0-f1906-ceRGBv2.ti1": "XXXL testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s37-g109-m0-f1906-cRec709_Gamma22.ti1": "XXXL testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s37-g109-m0-f1906-csRGB.ti1": "XXXL testchart for LUT profiles, optimized for sRGB (D65)", "*d3-e4-s41-g121-m11-b11-f0.ti1": "Massive testchart for LUT profiles", "*d3-e4-s41-g121-m0-f2527-caRGB.ti1": "Massive testchart for LUT profiles, optimized for Gamma 2.2 with AdobeRGB primaries (D65)", "*d3-e4-s41-g121-m0-f2527-ceRGBv2.ti1": "Massive testchart for LUT profiles, optimized for L* with NTSC primaries (D50)", "*d3-e4-s41-g121-m0-f2527-cRec709_Gamma22.ti1": "Massive testchart for LUT profiles, optimized for Gamma 2.2 with Rec. 709 primaries (D65)", "*d3-e4-s41-g121-m0-f2527-csRGB.ti1": "Massive testchart for LUT profiles, optimized for sRGB (D65)", "*default": "Default", "*delete": "Delete", "*delta_e_to_locus": "ΔE*00 to %s locus", "*description": "Description", "detect_displays_and_ports": "Rileva schermo e strumenti", "*device.name.placeholder": "", "*devlink_profile": "DeviceLink profile", "*dialog.confirm_delete": "Do you really want to delete the selected file(s)?", "dialog.confirm_overwrite": "Il file “%s” già esiste. Sovrascrivere?", "*dialog.cal_info": "The calibration file “%s” will be used. Do you want to continue?", "*dialog.confirm_cancel": "Do you really want to cancel?", "*dialog.current_cal_warning": "The current calibration curves will be used. Do you want to continue?", "dialog.do_not_show_again": "Non mostrare più questo messaggio", "*dialog.enter_password": "Please enter your password.", "dialog.install_profile": "Installare il profilo “%s” e renderlo quello predefinito per il monitor “%s”?", "*dialog.linear_cal_info": "Linear calibration curves will be used. Do you want to continue?", "dialog.load_cal": "Caricamento impostazioni", "dialog.set_argyll_bin": "Individuare la cartella dove si trovano gli eseguibili di Argyll CMS.", "dialog.set_profile_save_path": "Creare la directory dei profili “%s” qui:", "dialog.set_testchart": "Scegliere il file con il testchart", "dialog.ti3_no_cal_info": "I dati di misurazione non contengono curve di calibrazione. Continuare?", "display": "Schermo", "*display.connection.type": "Connection", "*display.manufacturer": "Display device manufacturer", "display.primary": "(Primario)", "*display.properties": "Display device properties", "*display.settings": "Display device settings", "*display.tech": "Display technology", "display_detected": "Rilevato un cambiamento nella configurazione dello schermo.", "display_lut.link": "Collega/Scollega schermo e accesso a calibrazione", "*display_short": "Display device (abbreviated)", "*displayport": "DisplayPort", "*drift_compensation.blacklevel": "Black level drift compensation", "*drift_compensation.blacklevel.info": "Black level drift compensation tries to counter measurement deviations caused by black calibration drift of a warming up measurement device. For this purpose, a black test patch is measured periodically, which increases the overall time needed for measurements. Many colorimeters have built-in temperature compensation, in which case black level drift compensation should not be needed, but most spectrometers are not temperature compensated.", "*drift_compensation.whitelevel": "White level drift compensation", "*drift_compensation.whitelevel.info": "White level drift compensation tries to counter measurement deviations caused by luminance changes of a warming up display device. For this purpose, a white test patch is measured periodically, which increases the overall time needed for measurements.", "*dry_run": "Dry run", "*dry_run.end": "Dry run ended.", "*dry_run.info": "Dry run. Check the log to see the command line.", "*dvi": "DVI", "*edid.crc32": "EDID CRC32 checksum", "*edid.serial": "EDID serial", "elapsed_time": "Tempo trascorso", "*enable_argyll_debug": "Enable Argyll CMS debugging output", "enable_spyder2": "Attivazione colorimetro Spyder 2...", "enable_spyder2_failure": "Impossibile attivare Spyder 2 .", "enable_spyder2_success": "Spyder 2 attivato con successo.", "*enumerate_ports.auto": "Automatically detect instruments", "enumerating_displays_and_comports": "Elenco degli schermi e delle porte di comunicazione in corso...", "error": "Errore", "*error.access_denied.write": "You do not have write access to %s", "error.already_exists": "Impossibile usare il nome “%s”, perché un altro oggetto con lo stesso nome già esiste. Scegliere un'altro nome o cartella.", "error.autostart_creation": "La creazione della voce di partenza automatica per far caricare a %s le curve di calibrazione è fallita.", "*error.autostart_remove_old": "The old autostart entry which loads calibration curves on login could not be removed: %s", "*error.autostart_system": "The system-wide autostart entry to load the calibration curves on login could not be created, because the system-wide autostart directory could not be determined.", "*error.autostart_user": "The user-specific autostart entry to load the calibration curves on login could not be created, because the user-specific autostart directory could not be determined.", "error.cal_extraction": "Impossibile estrarre la calibrazione da “%s”.", "error.calibration.file_missing": "Manca il file di calibrazione “%s”.", "error.calibration.file_not_created": "Non è stato creato alcun file di calibrazione.", "error.calibration.file_notfile": "“%s” non è un file.", "*error.colorconfig_remove_old": "The old configuration file mapping profiles to displays could not be removed: %s", "error.copy_failed": "Impossibile copiare il file “%s” in “%s”.", "*error.deletion": "An error occured while moving files to the %s. Some files might not have been removed.", "error.dir_creation": "Impossibile creare la cartella “%s”. Forse ci sono restrizioni sull'accesso. Permettere l'accesso in scrittura o scegliere un'altra cartella.", "error.dir_notdir": "Impossibile creare la cartella “%s” perché un altro oggetto con lo stesso nome già esiste. Scegliere un'altra cartella.", "*error.file.create": "The file “%s” could not be created.", "*error.file.open": "The file “%s” could not be opened.", "error.file_type_unsupported": "Tipo di file non gestito.", "error.generic": "Errore di sistema.\n\nCodice d'errore: %s\nMessaggio d'errore: %s", "*error.measurement.file_invalid": "The measurement file „%s“ is invalid.", "error.measurement.file_missing": "Manca il file delle misure “%s”.", "error.measurement.file_not_created": "Non è stato creato alcun file di misure.", "error.measurement.file_notfile": "“%s” non è un file.", "*error.measurement.missing_spectral": "The measurement file does not contain spectral values.", "*error.measurement.one_colorimeter": "Exactly one colorimeter measurement is needed.", "*error.measurement.one_reference": "Exactly one reference measurement is needed.", "error.no_displays_detected": "Non è stato creato alcun file di misurazioni.", "error.profile.file_missing": "Manca il profilo “%s”.", "error.profile.file_not_created": "Non è stato creato alcun profilo.", "error.profile.file_notfile": "“%s” non è un file.", "*error.source_dest_same": "Source and target file are the same.", "error.testchart.creation_failed": "Impossibile creare il file di testchart “%s”. Forse ci sono restrizioni sull'accesso oppure il file di origine non esiste.", "error.testchart.invalid": "Il file di testchart “%s” non è valido.", "error.testchart.missing": "Manca il file di testchart “%s”.", "*error.testchart.missing_fields": "The testchart file „%s“ does not contain required fields: %s", "error.testchart.read": "Impossibile leggere il file di testchart “%s”.", "error.tmp_creation": "Impossibile creare una cartella di lavoro temporanea.", "*error.trashcan_unavailable": "The %s is not available. No files were removed.", "export": "Esportazione...", "*extra_args": "Set additional commandline arguments...", "failure": "...fallito!", "*file.invalid": "File invalid.", "file.missing": "Il file “%s” non esiste.", "file.notfile": "“%s” non è un file.", "*file.select": "Select file", "*filetype.any": "Any Filetype", "filetype.cal": "File di calibrazione(*.cal)", "filetype.cal_icc": "File di calibrazione e profilo (*.cal;*.icc;*.icm)", "*filetype.ccmx": "Correction matrices/Calibration spectral samples (*.ccmx;*.ccss)", "*filetype.html": "HTML files (*.html;*.htm)", "filetype.icc": "File di profile (*.icc;*.icm)", "filetype.icc_mpp": "File di profilo (*.icc;*.icm;*.mpp)", "filetype.icc_ti1_ti3": "File di testchart (*.icc;*.icm;*.ti1;*.ti3)", "*filetype.icc_ti3": "Measurement files (*.icc;*.icm;*.ti3)", "filetype.log": "File di log (*.log)", "filetype.png": "Portable Network Graphics (*.png)", "filetype.tif": "Tagged Image File (*.tif)", "filetype.ti1": "File di testchart (*.ti1)", "*filetype.ti1_ti3_txt": "Testchart files (*.ti1), Measurement files (*.ti3;*.txt)", "filetype.ti3": "File di misurazioni (*.icc;*.icm;*.ti3)", "*filetype.txt": "DeviceCorrections.txt", "*filetype.vrml": "VRML files (*.wrl)", "*finish": "Finish", "*gamap.default_intent": "Default rendering intent for display device profile", "*gamap.intents.a": "Absolute colorimetric", "*gamap.intents.aa": "Absolute appearance", "*gamap.intents.aw": "Absolute colorimetric with white point scaling", "*gamap.intents.la": "Luminance matched appearance", "*gamap.intents.ms": "Preserve saturation", "*gamap.intents.p": "Perceptual", "*gamap.intents.pa": "Perceptual appearance", "*gamap.intents.r": "Relative colorimetric", "*gamap.intents.s": "Saturation", "gamap.out_viewcond": "Condizioni di visualizzazione obiettivo", "gamap.perceptual": "Applicare la mappatura di gamut alla tabella percettiva", "gamap.profile": "Profilo di origine", "gamap.saturation": "Applicare la mappatura di gamut alla tabella di saturazione", "gamap.src_viewcond": "Condizioni di visualizzazione di partenza", "gamap.viewconds.cx": "Fogli trasparenti ritagliati su una scatola per la visualizzazione", "gamap.viewconds.jd": "Proiettore in un ambiente buio", "gamap.viewconds.jm": "Proiettore in un ambiente con luce soffusa", "gamap.viewconds.mb": "Monitor in un ambiente di lavoro ben illuminato", "gamap.viewconds.md": "Monitor in un ambiente di lavoro buio", "gamap.viewconds.mt": "Monitor in un ambiente di lavoro", "gamap.viewconds.ob": "Scena originale - all'aperto molto illuminato", "gamap.viewconds.pcd": "Photo CD - scena originale all'aperto", "gamap.viewconds.pe": "Ambiente di valutazione di stampa", "gamap.viewconds.pp": "Stampa riflessa realistica", "gamapframe.title": "Opzioni avanze per la mappatura di gamut", "*gamut": "Gamut", "*gamut.coverage": "Gamut coverage", "*gamut.view.create": "Generating gamut views...", "*gamut.volume": "Gamut volume", "*gamut_plot.tooltip": "Click and drag the mouse inside the plot to move the viewport,\nor zoom with the mouse wheel and +/- keys. Double-click resets the viewport.", "*glossy": "Glossy", "*go_to_website": "Go to Website", "*grayscale": "*grayscale", "*green": "Green", "*hdmi": "HDMI", "*help_support": "Help and support...", "*hue": "Hue", "*if_available": "if available", "*illumination": "Illumination", "*in": "In", "infoframe.default_text": "", "infoframe.title": "Informazioni", "infoframe.toggle": "Mostrare/Nascondere finestra delle informazioni", "*initial": "Initial", "initializing_gui": "Inizializzazione interfaccia grafica...", "install_display_profile": "Installa il profilo del monitor...", "instrument": "Strumento/Porta", "*instrument.calibrate": "Place the instrument on a dark, matte surface or onto its calibration plate and press OK to calibrate the instrument.", "*instrument.calibrate.colormunki": "Set the ColorMunki sensor to calibration position and press OK to calibrate the instrument.", "*instrument.calibrating": "Calibrating instrument...", "*instrument.initializing": "Setting up the instrument, please wait...", "*instrument.measure_ambient": "If your instrument requires a special cap to measure ambient, please attach it. To measure ambient light, place the instrument upwards, beside the display. Or if you want to measure a viewing booth, put a metamerism-free gray card inside the booth and point the instrument towards it. Further instructions how to measure ambient may be available in your instrument's documentation. Press OK to commence measurement.", "instrument.place_on_screen": "Posizionare lo strumento sulla finestra di test. Clicca su OK. Premere ESC, Q o CTRL^C per annullare, qualsiasi altro tasto avvierà la misurazione.", "*instrument.reposition_sensor": "The measurement failed because the instrument sensor is in the wrong position. Please correct the sensor position, then click OK to continue.", "*internal": "Internal", "*laptop.icc": "Laptop", "*license": "License", "license_info": "Rilasciato sotto licenza GPL", "*linear": "*linear", "locale.set": "Impostazioni della locale: %s", "*locate_spyder2_setup": "In the following file dialog, please select the file Spyder2express_2.3.6_Setup.exe or Spyder2PRO_2.3.5_Setup.exe which can be downloaded from http://support.datacolor.com/index.php?/Knowledgebase/List/Index/88/windows", "*locate_spyder2_setup_mac": "In the following file dialog, please select the Spyder 2 software installer, or if the software has already been installed, locate the file Spyder.lib (you may have to switch to the Finder and Ctrl-click the Spyder2 application, which is usually located under “Applications/Spyder2 ”, and select “Show package Contents” from the popup menu, then copy the file out of the folder “Contents/Mac OS Classic” to be able to select it).", "*locate_spyder2_setup_win": "In the following file dialog, please select the Spyder 2 software installer, or if the software has already been installed, locate the file CVSpyder.dll (which is usually located under “Program Files\\ColorVision\\Spyder2”).", "*log.autoshow": "Show log window automatically", "lut_access": "Accesso a calibrazione", "*magenta": "Magenta", "*matrix": "Matrix", "*matte": "Matte", "*max": "Max", "*maximal": "Maximal", "measure": "Misurazione", "measure.darken_background": "Sfondo nero", "*measure.darken_background.warning": "Attention: If „black background“ is chosen, it will cover the whole screen and you will not be able to see the display adjustment window! If you have a multi-screen setup, move the display adjustment window to another screen before starting the measurement, or use the keyboard (to abort the measurement, press Q. If the measurement is already running, wait briefly, then press Q again).", "*measure.testchart": "Measure testchart", "measureframe.center": "Centrare", "measureframe.info": "Spostare la finestra di misurazione nella posizione dello schermo desiderata e ridimensionarla se necessario. Tutta l'area sarà usata approssimativamente per mostrare i campioni, il cerchio è solo una guida per l'aiuto al posizionamento dello strumento di misurazione.\nPosizionare lo strumento di misurazione sulla finestra e premere su „Avvio misurazione“. Per annullare e ritornare alla finestra principale chiudere la finestra di misurazione.", "measureframe.infobutton": "Informazioni", "measureframe.measurebutton": "Avvio misurazione", "measureframe.title": "Area di misurazione", "measureframe.zoomin": "Allargare", "measureframe.zoommax": "Massimizzare/Ripristinare", "measureframe.zoomnormal": "Dimensioni normali", "measureframe.zoomout": "Restringere", "*measurement.play_sound": "Acoustic feedback on continuous measurements", "*measurement.set_save_path": "Save the measurement file in the following folder:", "*measurement.untethered": "Untethered measurement", "*measurement_file.choose": "Please choose a measurement file", "*measurement_file.choose.colorimeter": "Please choose a colorimeter measurement file", "*measurement_file.choose.reference": "Please choose a reference measurement file", "measurement_mode": "Modalità", "*measurement_mode.adaptive": "Adaptive", "*measurement_mode.factory": "Factory calibration", "*measurement_mode.highres": "HiRes", "measurement_mode.lcd": "LCD (generico)", "*measurement_mode.lcd.ccfl": "LCD (CCFL)", "*measurement_mode.lcd.ccfl.2": "LCD (CCFL Type 2)", "*measurement_mode.lcd.white_led": "LCD (White LED)", "*measurement_mode.lcd.wide_gamut.ccfl": "Wide Gamut LCD (CCFL)", "*measurement_mode.lcd.wide_gamut.rgb_led": "Wide Gamut LCD (RGB LED)", "*measurement_mode.raw": "Raw", "*measurement_mode.refresh": "Refresh (generic)", "*measurements.complete": "Measurements complete! Do you want to open the folder containing the measurement files?", "*measuring.characterization": "Measuring color swatches for characterization...", "menu.about": "A riguardo...", "menu.file": "File", "menu.help": "?", "menu.language": "Lingua", "*menu.options": "Options", "*menu.tools": "Tools", "menuitem.quit": "Esci", "menuitem.set_argyll_bin": "Trova gli eseguibili di Argyll CMS...", "*min": "Min", "*minimal": "Minimal", "native": "Nativo", "no": "No", "no_settings": "Il file non contiene impostazioni.", "*office_web.icc": "Office & Web", "*offset": "Offset", "ok": "OK", "or": "o", "*osd": "OSD", "other": "Altro", "*out": "Out", "overwrite": "Sovrascrivi", "*panel.surface": "Panel surface", "*panel.type": "Panel type", "patches": "Campioni", "pause": "Pausa", "*photo.icc": "Photo", "*please_wait": "Please wait...", "*prepress.icc": "Prepress", "*preset": "Preset", "preview": "Anteprima", "profile": "Profilo", "profile.advanced_gamap": "Avanzato...", "*profile.choose": "Please choose a profile:", "profile.created": "Il profilo è stato creato con successo.", "*profile.current": "Current profile", "profile.do_not_install": "Non installare il profilo", "*profile.info": "Profile information", "*profile.info.show": "Show profile information", "profile.install": "Installare il profilo", "profile.install.error": "Impossibile installare e attivare il profilo.", "*profile.install.osx_manual_select": "The profile has been installed. Please activate it in the “Displays” system preferences pane.", "profile.install.success": "Il profilo è stato installato ed attivato.", "*profile.install.virtual.unsupported": "Profiles cannot be installed for virtual display devices.", "*profile.install_local_system": "Install profile system-wide", "*profile.install_network": "Install profile network-wide", "*profile.install_user": "Install profile for current user only", "profile.invalid": "Profilo non valido.", "*profile.load_error": "Display profile couldn't be loaded.", "*profile.load_on_login": "Load calibration on login", "profile.load_on_login.handled_by_os": "Sistema operativo (di bassa qualità)", "profile.name": "Nome del profile", "profile.name.create": "Generare il nome del profilo", "*profile.name.placeholders": "You may use the following placeholders in the profile name:\n\n%a Abbreviated weekday name\n%A Full weekday name\n%b Abbreviated month name\n%B Full month name\n%d Day of the month\n%H Hour (24-hour clock)\n%I Hour (12-hour clock)\n%j Day of the year\n%m Month\n%M Minute\n%p AM/PM\n%S Second\n%U Week (Sunday as first day of the week)\n%w Weekday (sunday is 0)\n%W Week (Monday as first day of the week)\n%y Year without century\n%Y Year with century", "profile.no_embedded_ti3": "Il profilo non contiene dati di misurazione compatibili con Argyll.", "*profile.no_vcgt": "The profile does not contain calibration curves.", "profile.quality": "Qualita del profilo", "*profile.quality.b2a.low": "Low quality B2A table", "*profile.quality.b2a.low.info": "Choose this option if the profile is only going to be used with inverse A2B gamut mapping to create a DeviceLink or 3D LUT", "*profile.required_tags_missing": "The profile is missing required tags: %s", "*profile.self_check": "Profile self check ΔE*76", "*profile.self_check.avg" : "average", "*profile.self_check.max" : "maximum", "*profile.self_check.rms" : "RMS", "profile.set_save_path": "Scegli un percorso per salvare...", "profile.settings": "Impostazioni per la creazione del profilo", "*profile.share": "Upload profile...", "*profile.share.avg_dE_too_high": "The profile yields a too high delta E (actual = %s, threshold = %s).", "*profile.share.enter_info": "You may share your profile with other users via the OpenSUSE “ICC Profile Taxi” service.\n\nPlease provide a meaningful description and enter display device properties below. Read display device settings from your display device's OSD and only enter settings applicable to your display device which have changed from defaults.\nExample: For most display devices, these are the name of the chosen preset, brightness, contrast, color temperature and/or whitepoint RGB gains, as well as gamma. On laptops and notebooks, usually only the brightness. If you have changed additional settings while calibrating your display device, enter them too if possible.", "*profile.share.meta_missing": "The profile does not contain the necessary meta information.", "*profile.share.success": "Profile uploaded successfully.", "*profile.testchart_recommendation": "For a higher quality profile, a testchart with more samples is recommended, but it will take more time to measure. Do you want to use the recommended testchart?", "profile.type": "Tipo di profilo", "*profile.type.gamma_matrix": "Gamma + matrix", "*profile.type.lut.lab": "L*a*b* LUT", "*profile.type.lut.xyz": "XYZ LUT", "*profile.type.lut_matrix.xyz": "XYZ LUT + matrix", "*profile.type.lut_rg_swapped_matrix.xyz": "XYZ LUT + swapped matrix", "*profile.type.shaper_matrix": "Curves + matrix", "*profile.type.single_gamma_matrix": "Single gamma + matrix", "*profile.type.single_shaper_matrix": "Single curve + matrix", "profile.unsupported": "Tipo di profilo (%s) e/o spazio di colore (%s) non supportato.", "profile.update": "Aggiornamento profilo", "*measurement_report.update": "Update measurement report...", "*measurement_report": "Measurement report...", "*measurement_report_choose_chart": "Please choose the testchart to measure:", "*measurement_report_choose_chart_or_reference": "Please choose a testchart or reference:", "*measurement_report_choose_profile": "Please choose the profile to validate:", "profiling.complete": "Creazione del profilo completa!", "profiling.incomplete": "La creazione del profilo non è stata completata.", "*projector": "Projector", "*projector_mode_unavailable": "Projector mode is only available with Argyll CMS 1.1.0 Beta or newer.", "quality.ultra.warning": "La qualità di livello Ultra non dovrebbe quasi mai essere usata, tranne che per dimostrare che non dovrebbe quasi mai essere usata (tempi di elaborazioni lunghi!). Scegliere invece qualità media o alta.", "*readme": "ReadMe", "ready": "Pronto.", "*red": "Red", "*reference": "Reference", "*rendering_intent": "Rendering intent", "report.calibrated": "Rapporto sullo schermo calibrato", "report.uncalibrated": "Rapporto sullo schermo non calibrato", "*resources.notfound.error": "Fatal error: A required file has not been found:", "*resources.notfound.warning": "Warning: Some required files have not been found:", "restore_defaults": "Ripristina i valori predefiniti", "*rgb.trc": "RGB transfer function", "*rgb.trc.averaged": "averaged RGB transfer function", "*saturation": "Saturation", "*save": "Save", "save_as": "Salva con nome...", "*settings.additional": "Additional settings", "*settings.basic": "Basic settings", "*settings.new": "", "settings_loaded": "Sono state caricate le curve calibrazione e le seguenti impostazioni di calibrazione: %s. Le altre opzioni di calibrazione sono state ripristinate ai valori predefiniti e le opzioni di profilo non sono state modificate.", "settings_loaded.all": "Sono state caricate le impostazioni e le curve calibrazione.", "*settings_loaded.cal": "The profile contained just calibration settings. Other options have not been changed. No calibration curves have been found.", "*settings_loaded.cal_and_lut": "The profile contained just calibration settings. Other options have not been changed and calibration curves have been loaded.", "settings_loaded.cal_and_profile": "Sono state caricate le impostazioni. Le curve calibrazione non sono state trovate.", "settings_loaded.profile": "Il profilo contiene solo le impostazioni del profilo. Le altre opzioni non sono state modificate. Le curve calibrazione non sono state trovate.", "settings_loaded.profile_and_lut": "Il profilo contiene solo le impostazioni del profilo. Le altre opzioni non sono state modificate e le curve calibrazione sono state caricate.", "*show_advanced_calibration_options": "Show advanced calibration options", "softproof.icc": "Softproof", "*spectral": "Spectral", "sRGB.icc": "sRGB", "startup": "Avvio...", "success": "...ok.", "*synthicc.create": "Create synthetic ICC profile...", "*target": "Target", "tc.I": "Perceptual space body centered cubic grid", "*tc.Q": "Perceptual space filling quasi-random", "tc.R": "Spazio percettivo casuale", "tc.adaption": "Adattamento", "tc.algo": "Distribuzione", "tc.angle": "Angolo", "*tc.black": "Black patches", "*tc.dark_emphasis": "Dark region emphasis", "tc.fullspread": "Campioni iterativi", "tc.gray": "Campioni neutri", "tc.i": "Device space body centered cubic grid", "tc.limit.sphere": "Limitare il campionamento alla sfera", "tc.limit.sphere_radius": "Raggio", "tc.multidim": "Multidimensionale", "tc.multidim.patches": "passi = %s Campioni (%s neutri)", "*tc.neutral_axis_emphasis": "Neutral axis emphasis", "tc.ofp": "Campionamento con punto più remoto ottimizzato", "tc.patch": "Campione", "tc.patches.gray": "neutro", "tc.patches.selected": "selezionato", "tc.patches.total": "Totale campioni", "tc.precond": "Precondizionamento del profilo", "tc.preview.create": "Creazione dell'anteprima, attendere prego...", "tc.q": "Riempimento dello spazio del dispositivo quasi-random", "tc.r": "Spazio del dispositivo casuale", "tc.single": "Campioni su singolo canale", "tc.single.perchannel": "per canale", "tc.t": "Campionamento con punto remoto incrementale", "tc.vrml": "Creazione del file VRML diagnostico VRML", "*tc.vrml.black_offset": "RGB black offset (L*)", "tc.vrml.device": "Posizioni del dispositivo", "tc.vrml.lab": "Posizioni del Lab", "*tc.vrml.save_as": "Save VRML file(s) as...", "*tc.vrml.use_D50": "Neutral RGB white", "tc.white": "Campioni bianchi", "*tempdir_should_still_contain_files": "Created files should still be in the temporary directory “%s”.", "*testchart.add_saturation_sweeps": "Add saturation sweeps", "*testchart.add_ti3_patches": "Add reference patches...", "*testchart.change_patch_order": "Change patch order", "testchart.confirm_select": "File salvato. Selezionare il testchart?", "testchart.create": "Creazione testchart", "testchart.discard": "Scartare", "testchart.dont_select": "Non selezionare", "testchart.edit": "Modifica testchart...", "*testchart.export.repeat_patch": "Repeat each patch:", "testchart.file": "File di testchart", "testchart.info": "Numero di campioni nel testchart selezionati", "testchart.invalid": "Il file di testchart non è valido!", "testchart.read": "Lettura testchart...", "testchart.save": "Salva", "testchart.save_as": "Salva con nome...", "testchart.save_or_discard": "Il testchart non è stato salvato.", "testchart.select": "Selezionare", "testchart.set": "Scegli il file di testchart...", "*testchart.sort_by_HSV": "Sort by HSV", "*testchart.sort_by_L": "Sort by L*", "*testchart.sort_by_RGB": "Sort by RGB", "*testchart.sort_by_RGB_sum": "Sort by sum of RGB", "*testchart.sort_RGB_gray_to_top": "Sort RGB gray to top", "*testchart.sort_RGB_white_to_top": "Sort RGB white to top", "*testchart.optimize_for_untethered_auto_mode": "Optimize for untethered in auto mode", "*tone_values": "tone values", "*translations": "Translations", "*trashcan.linux": "trash", "*trashcan.mac": "trash", "*trashcan.windows": "recycle bin", "trc": "Curva dei toni", "trc.gamma": "Gamma", "trc.lstar": "L*", "trc.rec709": "Rec. 709", "trc.rec1886": "Rec. 1886", "trc.should_use_viewcond_adjust": "Per ottenere i risultati voluti, quando vengono usate le curve SMPTE 240M, Rec. 709 o sRGB, si dovrebbero applicare anche delle correzioni alle condizioni di visualizzazione per i livelli della luce ambientale. Per ottenere questo deve essere spuntata la casella vicino a “Livello di luce ambientale” e deve essere inserito un valore in Lux. Facoltativamente è possibile misurare la luce ambientale durante la calibrazione se lo strumento mette a disposizione questa funzionalità.", "trc.smpte240m": "SMPTE 240M", "trc.srgb": "sRGB", "trc.type.absolute": "Absoluta", "trc.type.relative": "Relativa", "*type": "Type", "*uninstall_display_profile": "Uninstall display device profile...", "*unknown": "*unknown", "unnamed": "Senza nome", "*Untethered": "Untethered", "*update_check": "Check for application update...", "*update_check.fail": "Check for application update failed:", "*update_check.fail.version": "Remote version file from server %s couldn't be parsed.", "*update_check.new_version": "An update is available: %s", "*update_check.onstartup": "Check for application update on startup", "*update_check.uptodate": "%s is up-to-date.", "*upload": "Upload", "*use_separate_lut_access": "Use separate video card gamma table access", "*vcgt": "Calibration curves", "*verify.ti1": "Profile verification testchart", "*verify_extended.ti1": "Extended profile verification testchart", "*vga": "VGA", "*video.icc": "Video", "warning": "Attenzione", "warning.already_exists": "Il file “%s” già esiste nella posizione scelta e sarà sovrascritto. Continuare?", "*warning.autostart_system": "The system-wide autostart directory could not be determined.", "*warning.autostart_user": "The user-specific autostart directory could not be determined.", "warning.copy_failed_continue": "Impossibile copiare il file “%s” in “%s”. Continua...", "*warning.discard_changes": "Do you really want to discard the changes to the current settings?", "warning.no_comports_detected": "Non è stato rilevato nessuno strumento di calibrazione.", "*white": "White", "whitepoint": "Punto di bianco", "whitepoint.colortemp": "Temperatura", "whitepoint.colortemp.locus.blackbody": "Corpo nero", "*whitepoint.colortemp.locus.curve": "Color temperature curve", "whitepoint.colortemp.locus.daylight": "Luce diurna", "*whitepoint.set": "Do you also want to set the whitepoint to the measured value?", "*whitepoint.simulate": "Simulate whitepoint", "*whitepoint.simulate.relative": "Relative to target profile whitepoint", "whitepoint.xy": "Coordinate della cromaticità", "window.title": "dispcalGUI", "*windows.version.unsupported": "This version of Windows is not supported.", "*windows_only": "Windows only", "working_dir": "Directory di lavoro:", "*yellow": "Yellow", "yes": "Sì", } dispcalGUI-1.7.1.6/autopackage/autopackage-devel.spec000644 000765 000000 00000002641 12025152300 022330 0ustar00svpwheel000000 000000 Summary: Makes software installation on Linux easy Name: autopackage-devel Version: 1.4.2 Release: 1 License: GPL %if 0%{?suse_version} > 0 Group: Development/Tools/Building BuildRequires: fdupes %else %if 0%{?fedora_version} > 0 Group: Development/Tools %else %if 0%{?mandriva_version} > 0 Group: Development/Other %endif %endif %endif Source: http://autopackage.googlecode.com/files/autopackage-devel-1.4.2.tar.bz2 URL: http://autopackage.org/ #!BuildIgnore: post-build-checks BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: autopackage, gcc, gcc-c++ Autoreq: 0 Requires: autopackage, gcc, gcc-c++ %description Software distributed using Autopackage can be installed on multiple Linux distributions and integrate well into the desktop environment. %prep %setup -n autopackage %build %install export PATH=`pwd`/apbuild:$PATH make install PREFIX=%{buildroot}/usr %if 0%{?suse_version} > 0 %fdupes -s $RPM_BUILD_ROOT/usr/gtk-headers %endif export NO_BRP_CHECK_RPATH=true %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) /usr/bin/* /usr/binreloc/* /usr/gtk-headers/* /usr/include/apbuild/* /usr/libexec/autopackage/* /usr/share/aclocal/* /usr/share/apbuild/* /usr/share/autopackage/* %dir /usr/binreloc %dir /usr/gtk-headers %dir /usr/include/apbuild %dir /usr/libexec/autopackage %dir /usr/share/aclocal %dir /usr/share/apbuild %changelog * Tue Aug 03 2010 Florian Höch - Version 1.4.2 dispcalGUI-1.7.1.6/autopackage/autopackage.spec000644 000765 000000 00000014474 12025152300 021242 0ustar00svpwheel000000 000000 Summary: Makes software installation on Linux easy Name: autopackage Version: 1.4.2 Release: 1 License: GPL %if 0%{?suse_version} > 0 Group: Development/Tools/Building %else %if 0%{?fedora_version} > 0 Group: Development/Tools %else %if 0%{?mandriva_version} > 0 Group: Development/Other %endif %endif %endif Source: http://autopackage.googlecode.com/files/autopackage-1.4.2-x86.tar.bz2 URL: http://autopackage.org/ #!BuildIgnore: post-build-checks BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: gcc, libstdc++ Autoreqprov: 0 Requires: tcl Provides: autopackage %description Software distributed using Autopackage can be installed on multiple Linux distributions and integrate well into the desktop environment. %prep %setup -n %{name} %build %install #!/bin/bash # Install script for Autopackage Support Code ### # # This code is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # Copyright 2002-2003 Curtis Knight (knighcl@fastmail.fm) # ### ########## ### ### Determine directories ### ########## prefix=%{buildroot}/usr etc_dir=%{buildroot}/etc ########## ### ### Install ### ########## mkdir -p "$prefix/bin" mkdir -p "$prefix/libexec/autopackage" mkdir -p "$prefix/share/autopackage" mkdir -p "$etc_dir/autopackage" set +e cp -f "package" "$prefix/bin/package" cp -f "autopackage" "$prefix/bin/autopackage" cp -f "libexec"/* "$prefix/libexec/autopackage/" cp -f "share"/apkg-* "$prefix/share/autopackage/" cp -f "share"/*template "$prefix/share/autopackage/" cp -fr "share/locale" "$prefix/share/" cp -f "share/remove" "$prefix/share/autopackage/" # FIXME: should NOT be commented - this is done so that some return code does not fail # the install and stop the auto-setup code before gtkfe can be installed. #set -e # sub in autopackage prefix into config file sed "s|%AutopackagePrefix%|/usr|g" "etc/config" >"$etc_dir/autopackage/config" export NO_BRP_CHECK_RPATH=true %find_lang %{name} %clean rm -rf $RPM_BUILD_ROOT %post #!/bin/bash prefix=/usr pushd "$prefix/libexec/autopackage" >/dev/null [ ! -e libuau.so.3 ] && ln -s libuau.so.3.0.0 libuau.so.3 [ ! -e libcurl.so.2 ] && ln -s libcurl.so.2.0.2 libcurl.so.2 popd >/dev/null # if we have write access to the linker cache, refresh it (ie if we are root) if [ -w /etc/ld.so.cache ]; then echo -n "Refreshing linker cache, please wait ... " /sbin/ldconfig echo "done" fi _refresh_again=false # install libgcc_s.so.1 if needed if ! /sbin/ldconfig -p | grep -q libgcc_s.so.1 && [ ! -e "$prefix/lib/libgcc_s.so.1" ]; then echo "Your system is missing the GCC support library, putting a copy in $prefix/lib" mkdir -p "$prefix/lib" cp "$prefix/libexec/autopackage/libgcc_s.so.1" "$prefix/lib/libgcc_s.so.1" _refresh_again=true fi if ! /sbin/ldconfig -p | grep -q libstdc++.so.5 && [ ! -e "$prefix/lib/libstdc++.so.5" ]; then echo "Your system is missing v5 of the C++ support library, putting a copy in $prefix/lib" mkdir -p "$prefix/lib" cp "$prefix/libexec/autopackage/libstdc++.so.5.0.7" "$prefix/lib/libstdc++.so.5.0.7.apkg" ln -s "$prefix/lib/libstdc++.so.5.0.7.apkg" "$prefix/lib/libstdc++.so.5" _refresh_again=true fi if ! /sbin/ldconfig -p | grep -q libstdc++.so.6 && [ ! -e "$prefix/lib/libstdc++.so.6" ]; then echo "Your system is missing v6 of the C++ support library, putting a copy in $prefix/lib" mkdir -p "$prefix/lib" cp "$prefix/libexec/autopackage/libstdc++.so.6.0.9" "$prefix/lib/libstdc++.so.6.0.9.apkg" ln -s "$prefix/lib/libstdc++.so.6.0.9.apkg" "$prefix/lib/libstdc++.so.6" _refresh_again=true fi if $_refresh_again && [ -w /etc/ld.so.cache ]; then echo -n "Refreshing linker cache again, please wait ... " /sbin/ldconfig echo "done" fi # load installed autopackage support code [ -e /etc/autopackage/config ] && source /etc/autopackage/config; # link to autopackage functions - required for upgrading installation session if [ -e "$autopackage_prefix/share/autopackage/apkg-funclib" ]; then export PATH=$autopackage_prefix/share/autopackage:$PATH source "$autopackage_prefix/share/autopackage/apkg-funclib" fi # add marker file to denote that this is a first time installation session # of the support code; _initializeAutopackage converts this to variable # _autopackage_support_install=1 touch "$WORKING_DIRECTORY/apkg-support-install" # initialize autopackage variables (cpu_architecture) _initializeAutopackage # install GTK+ graphical front end # set variable to install in same location as support code export first_autosu="true" _installGTKFE r="$?" # unset variable to ask user where to install selected packages unset first_autosu # return value in case GTK+ graphical front end fails if [[ "$r" != "0" ]]; then exit 5 fi # add to PATH if necessary if ! isInList "$prefix/bin" "$PREFIX"; then updateEnv PATH "$prefix/bin" shell=$(basename $(cat /etc/passwd | grep ^$(whoami): | awk -F: '{print $7}')) if [[ "$shell" == "" ]]; then shell=$(basename $(readlink /bin/sh 2> /dev/null)) [[ "$shell" == "" ]] && shell="bash" # Still empty? Then use bash as a fallback fi out "Please run 'exec %s' in each terminal to update your path." "$shell"; out " " fi ### DONE "$autopackage_silent" || echo exit 0 %preun #!/bin/bash prefix=/usr pushd "$prefix/libexec/autopackage" >/dev/null rm libuau.so.3 rm libcurl.so.2 popd >/dev/null exit 0 %files -f %{name}.lang %defattr(-,root,root) /usr/bin/package /usr/bin/autopackage %config /etc/autopackage/config /usr/libexec/autopackage/* /usr/share/autopackage/* %dir /etc/autopackage/ %dir /usr/libexec/autopackage/ %dir /usr/share/autopackage/ %changelog * Tue Aug 03 2010 Florian Höch - Version 1.4.2 dispcalGUI-1.7.1.6/autopackage/default.apspec000644 000765 000000 00000022232 12025152300 020712 0ustar00svpwheel000000 000000 # -*- shell-script -*- # Generated by mkapspec 0.5 [Meta] ShortName: dispcalgui SoftwareVersion: `python -c "from dispcalGUI import meta;print meta.version"` DisplayName: dispcalGUI - Display Calibration RootName: @dispcalgui.hoech.net/dispcalgui:$SOFTWAREVERSION RootInstallOnly: No URL: http://dispcalGUI.hoech.net Summary: A graphical user interface for the Argyll CMS display calibration utilities Maintainer: Florian Höch Packager: Florian Höch PackageVersion: 1 CPUArchitectures: x86 x86_64 AutopackageTarget: 1.4 Type: Application License: GNU General Public License (GPL) [Description] A graphical user interface for the Argyll CMS display calibration utilities. [BuildPrepare] # If you're using autotools, the default should be enough. # prepareBuild will set up apbuild and run configure for you. If you # need to pass arguments to configure, just add them to prepareBuild: # prepareBuild --enable-foo --disable-bar export CC=apgcc python setup.py clean --all --use-distutils python setup.py build_py build_scripts --use-distutils python setup.py install --no-compile --use-distutils \ --root="$build_root" \ --prefix=/usr \ --doc-layout=generic \ --exec-prefix=/usr \ --install-data=/share \ --install-lib=/lib/python/site-packages \ --install-scripts=/bin \ --skip-build \ --skip-instrument-configuration-files \ --skip-postinstall # Use precompiled extension modules for bits in "32" "64" ; do mkdir -p "$build_root/lib/python/site-packages/dispcalGUI/lib$bits" echo "copying dispcalGUI/lib$bits/*.py -> $build_root/lib/python/site-packages/dispcalGUI/lib$bits" cp -f dispcalGUI/lib$bits/*.py "$build_root/lib/python/site-packages/dispcalGUI/lib$bits" for pycompat in "25" "26" "27" ; do mkdir -p "$build_root/lib/python/site-packages/dispcalGUI/lib$bits/python$pycompat" echo "copying dispcalGUI/lib$bits/python$pycompat/*.py -> $build_root/lib/python/site-packages/dispcalGUI/lib$bits/python$pycompat" cp -f dispcalGUI/lib$bits/python$pycompat/*.py "$build_root/lib/python/site-packages/dispcalGUI/lib$bits/python$pycompat" echo "copying dispcalGUI/lib$bits/python$pycompat/*.so -> $build_root/lib/python/site-packages/dispcalGUI/lib$bits/python$pycompat" cp -f dispcalGUI/lib$bits/python$pycompat/*.so "$build_root/lib/python/site-packages/dispcalGUI/lib$bits/python$pycompat" done done # udev/hotplug mkdir -p "$build_root/share/dispcalGUI/usb" # USB and serial instruments using udev, where udev already creates /dev/bus/usb/00X/00X devices cp -f "misc/55-Argyll.rules" "$build_root/share/dispcalGUI/usb/55-Argyll.rules" # USB using udev, where there are NOT /dev/bus/usb/00X/00X devices cp -f "misc/45-Argyll.rules" "$build_root/share/dispcalGUI/usb/45-Argyll.rules" # USB using hotplug and Serial using udev (older versions of Linux) cp -f "misc/Argyll" "$build_root/share/dispcalGUI/usb/Argyll" cp -f "misc/Argyll.usermap" "$build_root/share/dispcalGUI/usb/Argyll.usermap" [BuildUnprepare] # If you're using prepareBuild above, there is no need to change this! # unprepareBuild [Globals] # Variables declared in this section will be available in all other sections [Prepare] function requireLibs() { pushOptE; set +e; for lib in $*; do outputTest $lib if `testForLib $lib.so`; then outputTestPass else outputTestFail outputFail "Required library not found." popOptE return 1 fi done popOptE return 0 } require '@python.org/python' 2.5 2.6 2.7 requireAtLeast '@wxpython.org/python-wxgtk:2.8' requireLibs libc libdl libpthread libX11 libXau libXext libXinerama libXrandr libXrender libXxf86vm testForPythonModule numpy || requireAtLeast '@numpy.scipy.org/numpy:1.1' removeOwningPackage "$PREFIX/bin/dispcalGUI" [Imports] # This command will tell makepackage what to include in the package. # The selection comes from the files created by 'make install' or equivalent. # Usually, you can leave this at the default echo '*' | import [Install] outputStatus "Determining python version..." python_version=`python -c "import sys;print sys.version[:3]"` outputStatus "Determining python binary..." python=`which python$python_version 2>/dev/null || which python` outputStatus "Determining python library prefix..." if [ `whoami` = "root" ]; then python_lib_prefix=None else python_lib_prefix=\"$PREFIX\" fi platlib=`python -c "from distutils.sysconfig import get_python_lib; print get_python_lib(True, prefix=$python_lib_prefix)"` for script in `ls bin` ; do outputStatus "Adjusting script shebang line for $script..." safeSed bin/$script "s|/usr/bin/python|$python|" if [ `whoami` != "root" ]; then outputStatus "Adjusting module search path for $script..." safeSed bin/$script "s|import sys|import sys\nsys.path.insert(0, '$platlib')|" fi done # Copy autostart entries if [ `whoami` = "root" ]; then outputStatus "Installing profile loader autostart entry to /etc/xdg/autostart..." mkdir -p /etc/xdg/autostart copyFiles etc/xdg/autostart/* /etc/xdg/autostart else outputStatus "Adjusting profile loader autostart entry..." safeSed etc/xdg/autostart/z-dispcalGUI-apply-profiles.desktop "s|Exec=dispcalGUI-apply-profiles|Exec=$PREFIX/bin/dispcalGUI-apply-profiles|" outputStatus "Installing profile loader autostart entry to ${XDG_CONFIG_HOME:-$HOME/.config}/autostart..." mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/autostart" copyFiles etc/xdg/autostart/* "${XDG_CONFIG_HOME:-$HOME/.config}/autostart" fi # Copy package files outputStatus "Installing dispcalGUI to $platlib..." copyFiles lib/python/site-packages/dispcalGUI "$platlib" # Byte-compile *.py files # set PYTHONDONTWRITEBYTECODE for Mandriva 2011 export PYTHONDONTWRITEBYTECODE= outputStatus "Byte-compiling pure python modules..." python -c "import glob import os from distutils.sysconfig import get_python_lib from distutils.util import byte_compile mod = os.path.join(get_python_lib(True, prefix=$python_lib_prefix), 'dispcalGUI') for py in (glob.glob(os.path.join(mod, '*.py')), glob.glob(os.path.join(mod, 'lib', '*.py')), glob.glob(os.path.join(mod, 'lib', 'agw', '*.py')), glob.glob(os.path.join(mod, 'lib$bits', '*.py')), glob.glob(os.path.join(mod, 'lib$bits', 'python$pycompat', '*.py'))): byte_compile(py, optimize=0, force=1) byte_compile(py, optimize=1, force=1)" installData share/dispcalGUI share/doc installExe bin/* installIcon share/icons/hicolor installMan 1 share/man/man1/* if [ `whoami` != "root" ]; then outputStatus "Adjusting desktop menu entry..." safeSed share/applications/dispcalGUI.desktop "s|Exec=dispcalGUI|Exec=$PREFIX/bin/dispcalGUI|" fi # installMenuItem changes the .desktop file to include so-called 'Actions' # which makes the menu entry vanish in recent GNOME versions after logout! So # we only use it to make our app appear under 'desktop applications' in # autopackage's 'manage 3rd party software' utility installMenuItem "Graphics" share/applications/dispcalGUI.desktop # Install our proper one which xdg-desktop-menu > /dev/null 2>&1 && xdg-desktop-menu install --novendor share/applications/dispcalGUI.desktop || true if [ `whoami` = "root" ]; then if [ -e "/etc/udev/rules.d" ]; then outputStatus "Installing udev rules..." ls /dev/bus/usb/*/* > /dev/null 2>&1 && ( # USB and serial instruments using udev, where udev already creates /dev/bus/usb/00X/00X devices if [ ! -e "/etc/udev/rules.d/55-Argyll.rules" ]; then linkFile "$PREFIX/share/dispcalGUI/usb/55-Argyll.rules" "/etc/udev/rules.d/55-Argyll.rules" fi ) || ( # USB using udev, where there are NOT /dev/bus/usb/00X/00X devices if [ ! -e "/etc/udev/rules.d/45-Argyll.rules" ]; then linkFile "$PREFIX/share/dispcalGUI/usb/45-Argyll.rules" "/etc/udev/rules.d/45-Argyll.rules" fi ) # Reload udev rules if [ -e "/sbin/udevadm" ]; then /sbin/udevadm control --reload-rules fi else if [ -e "/etc/hotplug" ]; then # USB using hotplug and Serial using udev (older versions of Linux) outputStatus "Installing hotplug scripts..." if [ ! -e "/etc/hotplug/usb/Argyll" ]; then linkFile "$PREFIX/share/dispcalGUI/usb/Argyll" "/etc/hotplug/usb/Argyll" fi if [ ! -e "/etc/hotplug/usb/Argyll.usermap" ]; then linkFile "$PREFIX/share/dispcalGUI/usb/Argyll.usermap" "/etc/hotplug/usb/Argyll.usermap" fi fi fi fi [Uninstall] # Leaving this at the default is safe unless you use custom commands in # "Install" to create files. All autopackage API functions # that installs files are logged. uninstallFromLog # Determine python library prefix if [ `whoami` = "root" ]; then python_lib_prefix=None else python_lib_prefix=\"$PREFIX\" fi # Remove *.py[co] python -c "import glob import os import platform import sys from distutils.sysconfig import get_python_lib bits = platform.architecture()[0][:2] mod = os.path.join(get_python_lib(True, prefix=$python_lib_prefix), 'dispcalGUI') for pyco in (glob.glob(os.path.join(mod, '*.py[co]')) + glob.glob(os.path.join(mod, 'lib', '*.py[co]')) + glob.glob(os.path.join(mod, 'lib', 'agw', '*.py[co]')) + glob.glob(os.path.join(mod, 'lib' + bits, '*.py[co]')) + glob.glob(os.path.join(mod, 'lib' + bits, 'python%s%s' % sys.version_info[:2], '*.py[co]'))): os.remove(pyco)" # Remove menu entry which xdg-desktop-menu > /dev/null 2>&1 && xdg-desktop-menu uninstall dispcalGUI.desktop || true dispcalGUI-1.7.1.6/autopackage/skeletons/000755 000765 000000 00000000000 12266723170 020117 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/skeletons/@numpy.scipy.org/000755 000765 000000 00000000000 12266723170 023303 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/skeletons/@python.org/000755 000765 000000 00000000000 12266723170 022326 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/skeletons/@wxpython.org/000755 000765 000000 00000000000 12266723170 022705 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/skeletons/@wxpython.org/python-wxgtk/000755 000765 000000 00000000000 12266723170 025370 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/skeletons/@wxpython.org/python-wxgtk/skeleton.1000644 000765 000000 00000001646 12025152300 027265 0ustar00svpwheel000000 000000 [Meta] RootName: @wxpython.org/python-wxgtk DisplayName: wxPython GUI Toolkit (GTK) ShortName: python-wxgtk Skeleton-Author: Florian Höch Skeleton-Version: 1 [Notes] Earliest detected version is wxPython 2.5.3.0, where wxversion was introduced. [Test] INTERFACE_VERSIONS= # we test for wx and wxversion because even if wxversion is importable it does # NOT mean that wx is importable (the wxPython install might be broken or have # been tampered with, in which case wxversion might still find it, but # importing wx could fail) if testForPythonModule wx; then if testForPythonModule wxversion; then INTERFACE_VERSIONS=`python -c 'import wxversion; print " ".join([version.split("-")[0] for version in wxversion.getInstalled()])' ` fi fi SOFTWARE_VERSIONS=$INTERFACE_VERSIONS # We should probably publish some information about what wx libraries # (xrc, opengl, etc) are available -- maybe next time. dispcalGUI-1.7.1.6/autopackage/skeletons/@python.org/python/000755 000765 000000 00000000000 12266723170 023647 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/skeletons/@python.org/python/skeleton.1000644 000765 000000 00000001060 12025152300 025532 0ustar00svpwheel000000 000000 [Meta] RootName: @python.org/python DisplayName: Python Interpreter ShortName: python Skeleton-Author: Florian Höch Skeleton-Version: 2 [Notes] Tests only the "system" python executable. For example if python 2.5.2 is installed, INTERFACE_VERSIONS is "2.5" and SOFTWARE_VERSIONS is set to the output of "python -V". [Test] SOFTWARE_VERSIONS=$( locateCommand python -V 2>&1 | cut -f2 -d' ' ) if [[ "$?" != "0" ]]; then INTERFACE_VERSIONS="" else INTERFACE_VERSIONS=$( echo $SOFTWARE_VERSIONS | awk -F. '{print $1 "." $2}' ) fi dispcalGUI-1.7.1.6/autopackage/skeletons/@numpy.scipy.org/numpy/000755 000765 000000 00000000000 12266723170 024453 5ustar00svpwheel000000 000000 dispcalGUI-1.7.1.6/autopackage/skeletons/@numpy.scipy.org/numpy/skeleton.1000644 000765 000000 00000000630 12025152300 026340 0ustar00svpwheel000000 000000 [Meta] RootName: @numpy.scipy.org/numpy DisplayName: NumPy ShortName: numpy Skeleton-Author: Florian Höch Skeleton-Version: 1 [Notes] [Test] testForPythonModule numpy SOFTWARE_VERSIONS=`python -c 'import numpy; print numpy.__version__' ` if [[ "$?" != "0" ]]; then INTERFACE_VERSIONS="" else INTERFACE_VERSIONS=$( echo $SOFTWARE_VERSIONS | awk -F. '{print $1 "." $2}' ) fi